Component({ options: { addGlobalClass: true }, properties: { search: Boolean, //是否开启搜索 list: Array, //功能列表 condition: String, //搜索内容 onClick: Function, startUsing: Boolean, //启用搜索 onSearch: Function, //搜索回调 record: { //记录历史 type: Boolean, value: true } }, lifetimes: { attached() { if (wx.getStorageSync('SearchHistory')) this.setData({ history: wx.getStorageSync('SearchHistory') }) } }, data: { condition: "", history: [], //搜索历史 showHistory: false }, methods: { onClick(e) { const { item } = e.currentTarget.dataset; this.triggerEvent("onClick", item) }, /* 开启关闭搜索 */ clickSearch() { this.setData({ startUsing: !this.data.startUsing }); setTimeout(this.setListHeight, 400) }, /* 开始搜索 */ startSearch({ detail }) { if (this.data.condition == detail) return; this.setData({ condition: detail }) this.triggerEvent("onSearch", detail) if (this.data.record || detail == '') { let list = this.data.history; if (list.findIndex(v => v == detail) == -1) { list.push(detail) this.setData({ history: list }); wx.setStorageSync("SearchHistory", list) } } }, /* 取消搜索 */ endSearch() { this.setData({ condition: "" }) this.triggerEvent("onSearch", "") }, /* 删除搜索历史 */ deleteHistory(e) { let that = this; wx.showModal({ title: '提示', content: '是否删除所有搜索历史', complete: ({ confirm }) => { if (confirm) { wx.setStorageSync("SearchHistory", []) that.setData({ history: [] }); this.setListHeight(); } } }) }, /* 快速搜索 */ clickTag(e) { const { name } = e.currentTarget.dataset; this.setData({ condition: name }); this.triggerEvent("onSearch", name) }, /* 单独删除 */ delteTag(e) { const { name } = e.currentTarget.dataset; this.setData({ history: this.data.history.filter(v => v != name) }); wx.setStorageSync('SearchHistory', this.data.history); this.setListHeight(); }, /* 设置列表高度 */ setListHeight() { let pages = getCurrentPages(); if (pages[pages.length - 1].setListHeight) pages[pages.length - 1].setListHeight(); }, /* 搜索框焦点 */ onFocus() { this.setData({ showHistory: true }); setTimeout(this.setListHeight, 50); }, /* 搜索框失焦 */ onBlur() { this.setData({ showHistory: false }) setTimeout(this.setListHeight, 50); } } })