search.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. "use strict";
  2. var search = new Vue({
  3. el: '#search',
  4. data: {
  5. listQuery: {
  6. keyword: '',
  7. pageSize: 1,
  8. pageNum: 1
  9. },
  10. searchList: [], // 查询列表
  11. totalRecord: 100,
  12. totalPage: 10,
  13. jumpInput: 1
  14. },
  15. filters: {
  16. // 处理url
  17. formatUrl: function (item) {
  18. if (item.commodityType === 1) {
  19. return 'product-' + item.productId + '.html';
  20. } else {
  21. return 'instrument-' + item.productId + '.html';
  22. }
  23. }
  24. },
  25. computed: {
  26. // 页码
  27. pagination: function () {
  28. return this.makePagination(this.listQuery.pageNum, this.totalPage);
  29. }
  30. },
  31. mounted: function () {
  32. this.initSearchWord();
  33. this.fetchSearchList();
  34. },
  35. methods: {
  36. // 初始化关键字
  37. initSearchWord: function () {
  38. console.log(decodeURI(window.location.search.slice(1)));
  39. var query = this.queryString(window.location.search.slice(1));
  40. document.querySelector('#searchKeyword').value = query.keyword;
  41. this.listQuery.keyword = query.keyword || '';
  42. },
  43. // 获取查询列表
  44. fetchSearchList: function () {
  45. var self = this;
  46. EncyclopediaApi.FetchListByKeyword(this.listQuery, function (res) {
  47. if (res.code === 0) {
  48. var data = res.data;
  49. self.listQuery.pageNum = data.pageNum;
  50. self.searchList = data.results;
  51. self.totalRecord = data.totalRecord;
  52. self.totalPage = data.totalPage;
  53. } else {
  54. CAIMEI.Alert(res.msg, '确定', false);
  55. }
  56. });
  57. },
  58. // 页码切换
  59. pageChange: function (pageNum) {
  60. console.log(pageNum);
  61. if (pageNum < 1 || pageNum > this.totalPage) return;
  62. this.listQuery.pageNum = pageNum;
  63. this.fetchSearchList();
  64. },
  65. // 根据关键词进行标题格式化
  66. formatFromKeyword: function (name) {
  67. var reg = new RegExp(this.listQuery.keyword, 'ig');
  68. return name.replace(reg, function ($1) {
  69. return '<span style="color: #e15616">' + $1 + '</span>';
  70. });
  71. },
  72. // 处理url参数 返回参数键值对
  73. queryString: function (queryStr) {
  74. var queryStrList = decodeURI(queryStr).split('&');
  75. var query = Object.create(null);
  76. queryStrList.forEach(function (str) {
  77. var temp = str.split('=');
  78. var key = temp[0];
  79. var val = temp[1] || '';
  80. query[key] = val;
  81. });
  82. return query;
  83. },
  84. // 处理页码
  85. makePagination: function (pageNum, totalPage) {
  86. // 页码列表
  87. var arr = [];
  88. // 初始化页码列表
  89. for (var i = 1; i <= totalPage; i++) {
  90. arr[i - 1] = i;
  91. }
  92. if (totalPage <= 7) return arr;
  93. // 查找当前页码在页码列表中的位置
  94. var pop = arr.indexOf(pageNum);
  95. // 截取页码
  96. if (pageNum < 4) {
  97. arr = arr.splice(pop + 1 - pageNum, 6);
  98. } else if (pageNum > totalPage - 3) {
  99. arr = arr.reverse().splice(0, 6).reverse();
  100. } else {
  101. arr = arr.splice(pop - 2, 5);
  102. }
  103. return arr;
  104. }
  105. }
  106. });