|
|
<template> <view> <lf-nav title="搜索" :showIcon="true"></lf-nav> <view class="head"> <u-search placeholder="请输入商品名或商户名" :focus="is_focus" v-model="value" @search="search" @custom="customClick"> </u-search> </view> <view class="content"> <!-- 大家都在搜 --> <block v-if="hot_list.length"> <view> <text class="title">大家都在搜</text> </view> <view class="list"> <view class="item" @click="activeKeyWord(item)" v-for="(item, index) in hot_list" :key="index">{{ item }} </view> </view> </block> <!-- 我搜过的 --> <block v-if="history_list.length"> <view class="lf-row-between"> <text class="title">我搜过的</text> <text class="lf-iconfont icon-shanchu lf-color-777" @click="remove"></text> </view> <view class="list"> <view class="item item-2" @click="activeKeyWord(item)" v-for="(item, index) in history_list" :key="index">{{ item }} </view> </view> </block> </view> </view></template>
<script> export default { data() { return { value: '', // 搜索的值
is_focus: true, // 是否自动获得焦点
hot_list: [], // 热门搜索
history_list: [], // 历史搜索
max_history_count: 12 // 最多存多少个历史搜索值
} }, onLoad(){ this.getHistorySearch(); this.getHotSearch(); }, onHide(){ this.setHistorySearch(); }, methods: { // 获取搜索历史
getHistorySearch(){ let history_search = this.$cookieStorage.get('history_search') || []; this.history_list = JSON.parse(JSON.stringify(history_search)); }, // 设置搜索历史
setHistorySearch(){ if(this.history_list.length){ this.$cookieStorage.set('history_search', this.history_list); }else{ this.$cookieStorage.clear('history_search'); } }, // TODO 获取热门搜索 待对接请求接口
getHotSearch(){ // this.$http.get({
// api: ''
// }).then(res => {
// console.log("hot", res);
// })
let list = ['秋上新','纪梵希','雅诗兰黛','中秋','苹果爱普','基督教烧烤']; this.hot_list = list; }, // 激活关键词搜索
activeKeyWord(value){ this.value = value; this.customClick(value); }, // 用户按下搜索按钮,或回车键
search(value){ this.customClick(value); }, // 点击了搜索按钮
customClick(value){ if(!value || !value.trim()) return this.$msg('搜索内容不能为空'); this.updateHistory(value).then(() => { this.$url('/pages/shop/searchList?value='+ value); }) }, // 更新搜索历史列表
updateHistory(value){ return new Promise((resolve, reject) => { let history_list = [...this.history_list]; if(history_list.includes(value)){ history_list.map((item, index) => { if(item == value){ this.history_list.splice(index, 1); // 删除掉已经存在的key值
} }) this.history_list.unshift(value); // 向头部追加新的key值
if(this.history_list.length > this.max_history_count){ this.history_list.pop(); // 如果历史记录超出预设最大范围,将最尾key值移除
} }else{ this.history_list.unshift(value); if(this.history_list.length > this.max_history_count){ this.history_list.pop(); } } resolve(value); // 操作完成,回调成功
}) }, // 清空搜索记录
remove(){ uni.showModal({ title: '温馨提示', content: '确定清空搜索历史吗?', confirmColor: '#15716E', success: result => { if(result.confirm){ this.history_list = []; } } }) } } }</script>
<style lang="scss" scoped> .head{ padding: 30rpx 32rpx; } .content{ padding: 20rpx 32rpx; .title{ font-size: 28rpx; color: #999999; } .list{ display: flex; flex-wrap: wrap; padding: 20rpx 0 40rpx; .item{ padding: 4rpx 20rpx; background-color: #15716E; color: #FFFFFF; border-radius: 34rpx; font-size: 28rpx; margin-right: 20rpx; margin-bottom: 20rpx; } .item-2{ background-color: #F4F8F8; color: #333333; } } }</style>
|