金诚优选前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

267 lines
6.9 KiB

<template>
<view id="store-search">
<view class="search-box">
<view class="input-box">
<i class="iconfont icon-sousuo " type="search" size="20"></i>
<input type="text" :value="text" @input="search" confirm-type="search" bindconfirm="searchKeywords"></input>
<!-- #ifdef MP-WEIXIN -->
<icon type="clear" size="20" class="clear" :hidden="clear" @tap="clearF"></icon>
<!-- #endif -->
</view>
<view class="text" @tap="searchKeywords">
搜索
</view>
</view>
<view class="history-box" v-if="searches.length && show">
<view class="keywords mx-1px-bottom" v-for="(item, index) in searches" :key="index">
<view class="name" :data-index="index" @tap="searchHistory">{{item}}</view>
<view class="clear" :data-index="index" @tap="removeSearchHistory">
<i class="iconfont icon-close" type="clear" size="20"></i>
</view>
</view>
<view class="clear-all" @tap="clearSearchHistory">
清空历史记录
</view>
</view>
<view class="goods-list" v-if="!show">
<view v-for="(item, idx) in storeList" :key="idx">
<view class="commodity-out" :data-id="item.id" v-for="(item, index) in storeList[idx]" :key="index" @tap="jump">
<view class="commodity-box">
<view class="commodity-img">
<image mode="widthFix" :src="item.img"></image>
</view>
<view class="commodity-name">
{{item.name}}
</view>
<view class="commodity-money">
{{item.sell_price}}
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import {pageLogin, getUrl,config} from '@/common/js/utils.js';
export default {
data() {
return {
storeList: [],
text: '',
clear: true,
searches: [],
show: true,
meta: ''
};
},
onReachBottom() {
var hasMore = this.meta.pagination.total_pages > this.meta.pagination.current_page;
if (hasMore) {
var query = {
keyword: this.text
};
var page = this.meta.pagination.current_page + 1;
this.querySearchList(query, page);
} else {
wx.showToast({
image: '../../../static/error.png',
title: '再拉也没有啦'
});
}
},
onShow() {// let app =getApp();
// app.isBirthday().then(()=>{
// if(this.$cookieStorage.get("birthday_gift")){
// var giftData=this.$cookieStorage.get("birthday_gift").data;
// new app.ToastPannel().__page.showText(giftData);
// }
// });
},
onReady() {
var searches = this.$cookieStorage.get('goods_search_history');
if (searches && searches.length) {
this.setData({
searches: searches
});
}
},
components: {},
props: {},
methods: {
jump(e) {
var id = e.currentTarget.dataset.id;
wx.navigateTo({
url: '/pages/store/detail/detail?id=' + id
});
},
search(e) {
this.setData({
text: e.detail.value,
clear: e.detail.value <= 0
});
},
clearF() {
this.setData({
text: '',
clear: true
});
},
// 单击搜索
searchKeywords() {
var keyword = this.text;
if (!keyword || !keyword.length) return;
var searches = JSON.parse(JSON.stringify(this.searches));
for (let i = 0, len = searches.length; i < len; i++) {
let search = searches[i];
if (search === keyword) {
searches.splice(i, 1);
break;
}
}
searches.unshift(keyword);
this.$cookieStorage.set('goods_search_history', searches);
wx.setNavigationBarTitle({
title: '搜索:' + "'" + keyword + "'"
});
this.querySearchList({
keyword: keyword
});
this.setData({
show: false,
searches: searches
});
},
// 点击单个搜索记录搜索
searchHistory(e) {
var searches = JSON.parse(JSON.stringify(this.searches));
var keyword = searches[e.currentTarget.dataset.index];
searches.splice(e.currentTarget.dataset.index, 1);
searches.unshift(keyword);
this.$cookieStorage.set('goods_search_history', searches);
wx.setNavigationBarTitle({
title: '搜索:' + "'" + keyword + "'"
});
this.querySearchList({
keyword: keyword
});
this.setData({
show: false,
searches: searches,
text: keyword
});
},
// 删除单个搜索记录
removeSearchHistory(e) {
var searches = JSON.parse(JSON.stringify(this.searches));
searches.splice(e.currentTarget.dataset.index, 1);
this.$cookieStorage.set('goods_search_history', searches);
this.setData({
searches: searches
});
},
// 清空搜索记录
clearSearchHistory() {
uni.removeStorageSync('goods_search_history');
this.setData({
show: false,
searches: []
});
},
// 搜索商品
querySearchList(query = {}, page = 1) {
var params = Object.assign({}, query, {
page
});
wx.showLoading({
title: '加载中',
mask: true
});
this.$http.get({
api: 'api/store/list',
data: params
}).then(res => {
res = res.data;
if (res.status) {
// var keyReg = new RegExp('(' + this.text + ')(?!</i>)', 'g')
// list.forEach(item => {
// item.name = item.name.replace(keyReg, '<i>$1</i>');
// })
if (!res.data || !res.data.length) {
wx.showModal({
content: '暂无该商品',
showCancel: false
});
}
this.setData({
[`storeList.${page - 1}`]: res.data,
meta: res.meta
});
} else {
wx.showModal({
title: '',
content: res.message
});
}
wx.hideLoading();
}).catch(rej => {
wx.showModal({
title: '',
content: '请求失败,请稍后重试'
});
wx.hideLoading();
});
},
setData: function (obj) {
let that = this;
let keys = [];
let val, data;
Object.keys(obj).forEach(function (key) {
keys = key.split('.');
val = obj[key];
data = that.$data;
keys.forEach(function (key2, index) {
if (index + 1 == keys.length) {
that.$set(data, key2, val);
} else {
if (!data[key2]) {
that.$set(data, key2, {});
}
}
data = data[key2];
});
});
}
},
computed: {},
watch: {}
};
</script>
<style rel="stylesheet/less" lang="less">
@import "search";
</style>