hookehuyr

联调产品中心搜索功能

1 /* 1 /*
2 * @Date: 2024-09-26 13:36:06 2 * @Date: 2024-09-26 13:36:06
3 * @LastEditors: hookehuyr hookehuyr@gmail.com 3 * @LastEditors: hookehuyr hookehuyr@gmail.com
4 - * @LastEditTime: 2024-10-23 16:23:08 4 + * @LastEditTime: 2024-10-24 09:34:46
5 * @FilePath: /hager/src/api/hager.js 5 * @FilePath: /hager/src/api/hager.js
6 * @Description: 文件描述 6 * @Description: 文件描述
7 */ 7 */
...@@ -14,11 +14,19 @@ const Api = { ...@@ -14,11 +14,19 @@ const Api = {
14 HOME: '/srv/?a=home', 14 HOME: '/srv/?a=home',
15 PRODUCT_CATE: '/srv/?a=cate&type=product', 15 PRODUCT_CATE: '/srv/?a=cate&type=product',
16 PRODUCT_INFO: '/srv/?a=detail&type=product', 16 PRODUCT_INFO: '/srv/?a=detail&type=product',
17 + PRODUCT_SEARCH: '/srv/?a=cate&type=product_search',
17 }; 18 };
18 19
19 export const honorAPI = (params) => fn(fetch.get(Api.HONOR, params)); 20 export const honorAPI = (params) => fn(fetch.get(Api.HONOR, params));
21 +
20 export const newsAPI = (params) => fn(fetch.get(Api.NEWS, params)); 22 export const newsAPI = (params) => fn(fetch.get(Api.NEWS, params));
23 +
21 export const getNewsDetailAPI = (params) => fn(fetch.get(Api.NEWS_DETAIL, params)); 24 export const getNewsDetailAPI = (params) => fn(fetch.get(Api.NEWS_DETAIL, params));
25 +
22 export const getHomeAPI = (params) => fn(fetch.get(Api.HOME, params)); 26 export const getHomeAPI = (params) => fn(fetch.get(Api.HOME, params));
27 +
23 export const getProductCateAPI = (params) => fn(fetch.get(Api.PRODUCT_CATE, params)); 28 export const getProductCateAPI = (params) => fn(fetch.get(Api.PRODUCT_CATE, params));
29 +
24 export const getProductInfoAPI = (params) => fn(fetch.get(Api.PRODUCT_INFO, params)); 30 export const getProductInfoAPI = (params) => fn(fetch.get(Api.PRODUCT_INFO, params));
31 +
32 +export const getProductSearchAPI = (params) => fn(fetch.get(Api.PRODUCT_SEARCH, params));
......
1 <!-- 1 <!--
2 * @Date: 2024-09-27 16:53:09 2 * @Date: 2024-09-27 16:53:09
3 * @LastEditors: hookehuyr hookehuyr@gmail.com 3 * @LastEditors: hookehuyr hookehuyr@gmail.com
4 - * @LastEditTime: 2024-10-23 15:56:41 4 + * @LastEditTime: 2024-10-24 10:01:46
5 * @FilePath: /hager/src/views/product/index.vue 5 * @FilePath: /hager/src/views/product/index.vue
6 * @Description: 文件描述 6 * @Description: 文件描述
7 --> 7 -->
8 <template> 8 <template>
9 <div class="product-index"> 9 <div class="product-index">
10 <hager-box> 10 <hager-box>
11 - <div style="margin-top: 1.5rem;"> 11 + <div v-if="!is_search" style="margin-top: 1.5rem;">
12 <el-breadcrumb separator="/"> 12 <el-breadcrumb separator="/">
13 <el-breadcrumb-item>所有产品</el-breadcrumb-item> 13 <el-breadcrumb-item>所有产品</el-breadcrumb-item>
14 <el-breadcrumb-item>{{ parent_name }}</el-breadcrumb-item> 14 <el-breadcrumb-item>{{ parent_name }}</el-breadcrumb-item>
15 <el-breadcrumb-item>{{ category_name }}</el-breadcrumb-item> 15 <el-breadcrumb-item>{{ category_name }}</el-breadcrumb-item>
16 </el-breadcrumb> 16 </el-breadcrumb>
17 </div> 17 </div>
18 - <hager-h1 :title="category_name" :sub="category_name_en" style="margin: 2rem 0;"></hager-h1> 18 + <hager-h1 v-if="!is_search" :title="category_name" :sub="category_name_en" style="margin: 2rem 0;"></hager-h1>
19 + <hager-h1 v-else :title="'与“' + keyword + '”相关的搜索结果'" :sub="''" style="margin: 2rem 0;"></hager-h1>
19 <el-row v-if="!is_xs" :gutter="0" style="margin: 1rem 0;"> 20 <el-row v-if="!is_xs" :gutter="0" style="margin: 1rem 0;">
20 <el-col :span="6"> 21 <el-col :span="6">
21 <div class="product-nav-wrapper"> 22 <div class="product-nav-wrapper">
22 <div class="product-nav-title">按产品类别查找</div> 23 <div class="product-nav-title">按产品类别查找</div>
23 - <el-input style="margin-bottom: 0.5rem;" placeholder="请输入产品" prefix-icon="el-icon-search" v-model="search_input"></el-input> 24 + <el-input style="margin-bottom: 0.5rem;" placeholder="请输入产品" prefix-icon="el-icon-search" v-model="keyword" @change="goToSearch"></el-input>
24 <el-collapse v-model="activeNames" @change="handleChange"> 25 <el-collapse v-model="activeNames" @change="handleChange">
25 <el-collapse-item v-for="(item, index) in cate_list" :key="index" :title="item.category_name" :name="item.category_name"> 26 <el-collapse-item v-for="(item, index) in cate_list" :key="index" :title="item.category_name" :name="item.category_name">
26 <div @click="goToDetail(c)" v-for="(c, idx) in item.list" :key="idx" class="p-item">{{ c.product_name }}</div> 27 <div @click="goToDetail(c)" v-for="(c, idx) in item.list" :key="idx" class="p-item">{{ c.product_name }}</div>
...@@ -57,14 +58,14 @@ ...@@ -57,14 +58,14 @@
57 import mixin from 'common/mixin'; 58 import mixin from 'common/mixin';
58 import hagerBox from '@/components/common/hagerBox'; 59 import hagerBox from '@/components/common/hagerBox';
59 import hagerH1 from '@/components/common/hagerH1.vue'; 60 import hagerH1 from '@/components/common/hagerH1.vue';
60 -import { getProductCateAPI } from "@/api/hager.js"; 61 +import { getProductCateAPI, getProductSearchAPI } from "@/api/hager.js";
61 62
62 export default { 63 export default {
63 components: { hagerBox, hagerH1 }, 64 components: { hagerBox, hagerH1 },
64 mixins: [mixin.init], 65 mixins: [mixin.init],
65 data () { 66 data () {
66 return { 67 return {
67 - search_input: '', 68 + keyword: '',
68 activeNames: [], 69 activeNames: [],
69 parent_name: '', 70 parent_name: '',
70 category_name: '', 71 category_name: '',
...@@ -90,6 +91,11 @@ export default { ...@@ -90,6 +91,11 @@ export default {
90 async mounted () { 91 async mounted () {
91 this.getMain(); 92 this.getMain();
92 }, 93 },
94 + computed: {
95 + is_search () {
96 + return this.$route.query.keyword;
97 + }
98 + },
93 watch: { 99 watch: {
94 // 监听路由参数变化时,更新输入框的值 100 // 监听路由参数变化时,更新输入框的值
95 async '$route.query.id' (val, old) { 101 async '$route.query.id' (val, old) {
...@@ -131,6 +137,29 @@ export default { ...@@ -131,6 +137,29 @@ export default {
131 }) 137 })
132 } 138 }
133 }, 139 },
140 + async goToSearch () {
141 + if (this.keyword) { // 产品有值时操作
142 + const { code, data } = await getProductSearchAPI({ keyword: this.keyword });
143 + if (code) {
144 + this.product_list = data;
145 + this.$router.push({
146 + path: '/product/index',
147 + query: {
148 + id: this.$route.query.id,
149 + keyword: this.keyword
150 + }
151 + })
152 + }
153 + } else { // 清空搜索值,还原
154 + this.$router.push({
155 + path: '/product/index',
156 + query: {
157 + id: this.$route.query.id,
158 + }
159 + })
160 + }
161 +
162 + },
134 } 163 }
135 } 164 }
136 </script> 165 </script>
......