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.
 
 
 
 

641 lines
17 KiB

<template>
<view class="more-search">
<view class="more-search-input">
<view class="flex al-item-center j-between">
<input type="text" @confirm="search" v-model="searchValue" :placeholder="placeholderTex" class="input" />
<view class="input-tex-btn text-center" :style="{'background-color': t('color1')}" @click="search">搜索</view>
</view>
<view class="shop-stor flex al-item-center j-evenly" v-show="opsType === 'goods'">
<text class="shop-tex" :class="shopSort == 1 ? 'shop-atv': ''" @tap="sortNav(1)">品牌店</text>
<text class="shop-tex" :class="shopSort == 2 ? 'shop-atv': ''" @tap="sortNav(2)">专营店</text>
</view>
</view>
<view :style="{'height': searchHeight + 'px'}"></view>
<view class="more-search-record" :style="{'top': searchHeight + 'px'}">
<!-- {{recordList}} -->
<view class="record-title font-w">
已添加的{{opsType == 'topic'? '话题':'商品'}}({{recordList.length}}/5)
</view>
<view class="record-content">
<block v-for="(item, ixd) in recordList" :key="item.id">
<view class="more-search-record-t" >
<text class="txt">{{item.name}}</text>
<text class="record-icon iconfont icon-shanchu1" @click="delRecord(ixd, item.id)"></text>
</view>
</block>
</view>
</view>
<view :style="{'height': recordHeight + 'px'}"></view>
<view v-if="opsType == 'goods'" style="padding-top: 10rpx;">
<block v-for="(item,idx) in searchTopicList" :key="idx">
<view class="more-search-list" :class="item.checked == true ? 'more-search-list-show':''" @click="handleDetail(item.name, item.id, idx)" >
<view class="more-search-list-c">
<view class="more-search-list-c-t" v-if="item.business">
<image class="batle-img" :src="item.business.logo" mode=""></image>
<text>{{item.business.name}}</text>
</view>
<view class="more-search-list-c-c">
<image class="list-img" v-if="item.pic" :src="item.pic" mode=""></image>
<image class="list-img" v-else :src="item.cover_pic" mode=""></image>
<view class="more-search-list-c-c-r">
<text class="list-c-c-r-til">{{item.name}}</text>
<text class="list-c-c-r-price" v-if="item.sell_price">¥{{item.sell_price}}</text>
<text class="list-c-c-r-price" v-else>¥{{item.price}}</text>
</view>
</view>
</view>
</view>
</block>
</view>
<view v-else style="padding-top: 10rpx;">
<block v-for="(item,idx) in searchTopicList" :key="idx">
<view class="more-search-list" :class="item.checked == true ? 'more-search-list-show':''" @click="handleDetail(item.topic_name, item.id, idx)">
<view class="more-search-list-c">
<!-- <view class="more-search-list-c-t">
<image class="batle-img" :src="item.business.logo" mode=""></image>
<text>{{item.topic_name}}</text>
</view> -->
<view class="more-search-list-c-c">
<!-- <image class="list-img" :src="item.pic" mode=""></image> -->
<view class="jin">
#
</view>
<view class="more-search-list-c-c-r">
<text class="list-c-c-r-til">{{item.topic_name}}</text>
<!-- <text class="list-c-c-r-price">¥{{item.sell_price}}</text> -->
</view>
</view>
</view>
</view>
</block>
</view>
<view class="show-t" v-show="showText_box">
<view class="">{{showText_t}}</view>
<view class="">{{showText_b}}</view>
</view>
<loading v-if="loading"></loading>
<nomore v-if="!isData"></nomore>
<nodata v-if="!nodata"></nodata>
<view style="height: 204rpx;"></view>
<view class="flex_box">
<button type="default" :style="{'background-color': t('color1')}" @click="submit">确认</button>
</view>
<!-- 悬浮按钮 -->
<drag-button></drag-button>
</view>
</template>
<script>
var app = getApp();
export default {
data() {
return {
loading: false,
searchValue: '',
// uni.getStorageSync('goods_type_arr')||
recordList:[],
searchBoxList: [],
searchTopicList: [],
placeholderTex: '请输入搜索内容',
opsType: '',
pages: 1,
isData: true,
searchHeight: 0, // 搜索高度
recordHeight: 0, // 记录高度
nodata: true,
showText_box: false,
showText_t: '',
showText_b: '',
shopSort: 1,
timeou: null,
timeouTow: null,
arrRecordList: [],
isSearch: false
}
},
onLoad(options) {
this.opsType = options.type
if(options.records && this.opsType == 'goods') {
this.recordList = JSON.parse(options.records)
}
if(uni.getStorageSync('is_more_record_goods') && this.opsType == 'goods') {
this.recordList = uni.getStorageSync('is_more_record_goods')
}else if(uni.getStorageSync('is_more_record_topic') && this.opsType == 'topic') {
this.recordList = uni.getStorageSync('is_more_record_topic')
}
if(this.opsType == 'topic') {
this.arrRecordList = JSON.parse(options.topicArr)
}else {
this.arrRecordList = JSON.parse(options.goodsArr)
}
this.getSearchTopicList()
},
onUnload() {
clearTimeout(this.timeou)
clearTimeout(this.timeouTow)
},
onReady() {
let quert = uni.createSelectorQuery()
quert.select('.more-search-input').boundingClientRect()
quert.select('.more-search-record').boundingClientRect()
quert.exec(res =>{
let boheight = null
res.forEach((item,idx) => {
if(idx == 0) {
this.searchHeight = item.height
}else if(idx == 1) {
this.recordHeight = item.height
}
boheight += item.height
})
})
},
// 到底触发
onReachBottom(e) {
// console.log(e, '----')
if (this.isData) {
this.pages++
this.getSearchTopicList()
}
},
methods: {
// 商品时选择的---店铺
sortNav(num) {
this.shopSort = num
this.isSearch = false
this.isData = true
this.nodata = true
this.pages = 1
this.searchBoxList = []
// this.recordList = []
this.searchTopicList = []
this.getSearchTopicList()
},
recordStyle() {
if(this.timeou) {
clearTimeout(this.timeou)
}
let quert = uni.createSelectorQuery()
this.timeou = setTimeout(() => {
quert.select('.more-search-record').boundingClientRect()
quert.exec(res =>{
this.recordHeight = res[0].height
})
}, 100)
},
submit(){
uni.setStorageSync('is_more_show_'+this.opsType,true)
if(this.opsType == 'goods') {
uni.setStorageSync('is_more_record_goods',this.recordList)
}else {
uni.setStorageSync('is_more_record_topic',this.recordList)
}
uni.navigateBack({
delta:1
})
},
// 搜索
search() {
if(this.recordList.length > 0) {
this.arrRecordList = this.recordList
}
this.isSearch = true
this.nodata = true
this.isData = true
this.pages = 1
this.searchBoxList = []
this.searchTopicList = []
this.getSearchTopicList()
},
delRecord(idx, ndx) {
this.searchTopicList.forEach((item, idx) => {
if(ndx == item.id) {
item.checked = false
}
})
this.recordList.splice(idx, 1)
let idarr = []
this.recordList.forEach(item => {
idarr.push(item.id)
})
if(this.opsType == 'topic') {
uni.setStorageSync('topic_type_id', idarr)
}else {
uni.setStorageSync('goods_type_id', idarr)
}
this.recordStyle()
},
handleDetail(name, id, idx) {
if(this.showText_box == true) {
return
}
this.searchTopicList[idx].checked = !this.searchTopicList[idx].checked
let indarr = []
this.recordList.forEach(item => {
indarr.push(item.id)
})
let timeout
if (timeout) {
clearTimeout(timeout)
}
if(this.recordList.length == 5 && this.searchTopicList[idx].checked) {
this.showText_box = true
if (this.opsType == 'topic') {
// app.error('最多添加5个话题标签,可删除已选标签,再次添加')
this.showText_t = '最多添加5个话题标签'
this.showText_b = '可删除已选标签,再次添加'
timeout = setTimeout(() => {
this.showText_box = false
}, 1500)
}else {
this.showText_t = '最多添加5个商品'
this.showText_b = '可删除已选商品,再次添加'
timeout = setTimeout(() => {
this.showText_box = false
}, 1500)
// app.error('最多添加5个商品,可删除已选商品,再次添加')
}
if(indarr.includes(id)) {
}else {
this.searchTopicList[idx].checked = false
}
}
if (this.searchTopicList[idx].checked) {
if(this.recordList.length >= 0 && this.recordList.length<= 4) {
if(this.recordList.every((item,index)=>{return item.id !== id})){
this.recordList.unshift({name: name, id: id, sign: this.shopSort == 1 ? 0 : 1})
}
}
}else {
if (this.recordList.length > 0 ) {
this.recordList.forEach((data, nx) => {
if(id == data.id) {
this.recordList.splice(nx, 1)
}
})
}
}
let idarr = []
this.recordList.forEach(item => {
if(this.opsType == 'topic') {
idarr.push(item.id)
}else {
idarr.push(item.sign + '_' + item.id)
}
})
idarr = [... new Set(idarr)]
if(this.opsType == 'topic') {
uni.setStorageSync('topic_type_id', idarr)
}else {
uni.setStorageSync('goods_type_id', idarr)
}
this.recordStyle()
},
// 话题-带货- 搜索
getSearchTopicList() {
if(this.recordList.length) {
this.arrRecordList = this.recordList
}
this.loading = true
let url = this.shopSort == 1 ? 'ApiShop/getGoodsList' : 'ApiShop/getSaasGoodsList'
if(this.opsType == 'topic'){
url = 'ApiZhiwei/topicReleaseList'
}
app.post(url, {pagenum: this.pages,keyword:this.searchValue,topic_name:this.searchValue}, (res) => {
this.loading = false
if(res.data.length > 0) {
this.searchTopicList = [...this.searchTopicList,...res.data]
}else if(res.data.length == 0 && this.searchTopicList.length > 0) {
this.isData =false
}else if(res.data.length == 0 && this.searchTopicList.length == 0) {
this.nodata = false
}
this.searchTopicList.forEach((item,idx) => {
item.checked = false
})
if(this.recordList.length > 0 && this.arrRecordList.length == 0 ) {
for(let i =0; i < this.recordList.length; i++) {
const index = this.searchTopicList.findIndex((item) => {return item.id === this.recordList[i].id})
this.searchTopicList.forEach((data,idx) => {
if(idx == index) {
data.checked = true
}
})
}
}
if(this.arrRecordList.length > 0) {
if(this.recordList.length == 0) {
for(let i =0; i < this.arrRecordList.length; i++) {
const index = this.searchTopicList.findIndex((item) => {return this.opsType == 'topic' ? item.id === this.arrRecordList[i] : (this.shopSort == 1 ? '0_'+item.id : '1_'+item.id) === this.arrRecordList[i]})
this.searchTopicList.forEach((data,idx) => {
if(idx == index) {
data.checked = true
if(!this.isSearch && this.opsType == 'topic') {
this.recordList.unshift({name: this.opsType == 'topic'? data.topic_name : data.name, id: data.id})
}
}
})
}
}else {
if(this.opsType == 'topic') {
for(let i =0; i < this.arrRecordList.length; i++) {
const index = this.searchTopicList.findIndex((item) => {return item.id === this.arrRecordList[i].id })
this.searchTopicList.forEach((data,idx) => {
if(idx == index) {
data.checked = true
}
})
}
}else {
for(let i =0; i < this.arrRecordList.length; i++) {
const index = this.searchTopicList.findIndex((item) => {return (this.shopSort == 1 ? '0_'+item.id : '1_'+item.id) === ( this.recordList.length > 0 ? this.arrRecordList[i].sign + '_' + this.arrRecordList[i].id : this.arrRecordList[i] ) })
this.searchTopicList.forEach((data,idx) => {
if(idx == index) {
data.checked = true
}
})
}
}
}
}
})
if(this.timeouTow) {
clearTimeout(this.timeouTow)
}
// this.timeouTow = setTimeout(() =>{
// this.recordStyle()
// }, 200)
},
}
}
</script>
<style lang="scss">
.flex_box{
width: 100%;
height: 204rpx;
padding: 0 20rpx;
position: fixed;
// right: 20rpx;
bottom: 0rpx;
left: 0rpx;
background-color: #FFF;
// border-radius: 40rpx 40rpx 0 0 ;
button{
margin-top: 30rpx;
background-color: #d6a662;
font-weight: bold;
color: #fff;
// margin-right: 20rpx;
border-radius: 40rpx;
}
}
.jin{
width: 40rpx;
height: 40rpx;
border-radius: 40rpx;
background-color: #efbd6f;
display: flex;
justify-content: center;
align-items: center;
color: #fff;
}
.more-search {
.more-search-input {
width: 100%;
padding: 20rpx 40rpx;
// display: flex;
// justify-content: space-between;
// align-items: center;
background-color: #FFF;
position: fixed;
top: 0;
left: 0;
z-index: 12;
.input {
font-size: 30rpx;
}
.input-tex-btn {
width: 120rpx;
height: 60rpx;
line-height: 60rpx;
// padding: 10rpx 30rpx;
border-radius: 10rpx;
color: #fff;
}
.shop-stor{
margin-top: 10rpx;
border-top: 2rpx solid #cccc;
padding-top: 10rpx;
}
.shop-tex {
padding: 4rpx 10rpx;
border-radius: 10rpx;
position: relative;
background-color: #969696;
color: #fff;
}
.shop-atv {
background-color: #CE0000;
}
// .shop-atv::after {
// content: '';
// width: 100%;
// height: 4rpx;
// position: absolute;
// left: 0;
// top: 48rpx;
// border-radius: 90rpx;
// background-color: #CE0000;
// }
}
.more-search-record {
width: 100%;
padding: 30rpx 0rpx;
color: #fff;
display: flex;
flex-direction:column;
background-color: #f6f6f6;
position: fixed;
left: 0;
z-index: 22;
.record-title {
padding: 0 20rpx;
color: #333;
font-size: 28rpx;
}
.record-content {
flex-wrap: nowrap;
display: flex;
overflow-x: scroll;
scrollbar-width: none; /* firefox */
-ms-overflow-style: none; /* IE 10+ */
}
.record-content::-webkit-scrollbar {
display: none; /* Chrome Safari */
}
.more-search-record-t {
width: 220rpx;
height: 60rpx;
margin: 30rpx 0 0 20rpx;
padding: 6rpx 24rpx;
border-radius: 12rpx;
display: flex;
flex-shrink: 0;
align-items: center;
background-color: #f1c98b;
// width:;
.txt{
text-align: center;
flex: 1;
// max-width: 600rpx;
overflow: hidden; /*超出长度的文字隐藏*/
text-overflow:ellipsis;/*文字隐藏以后添加省略号*/
white-space: nowrap; /*强制不换行*/
}
.record-icon {
padding-left: 12rpx;
font-size: 24rpx;
}
}
}
.more-search-list-show {
box-shadow: 0 0 10px 0 #efbd6f4d;
}
.more-search-list {
margin: 0 20rpx 40rpx;
background-color: #fff;
border-radius: 20rpx;
.more-search-list-c {
padding: 0 20rpx;
.more-search-list-c-t {
display: flex;
align-items: center;
padding-top: 20rpx;
.batle-img {
width: 34rpx;
height: 34rpx;
margin-right: 8rpx;
}
}
.more-search-list-c-c {
padding: 30rpx 0;
display: flex;
align-items: center;
.list-img {
width: 140rpx;
height: 140rpx;
}
.more-search-list-c-c-r {
padding-left: 20rpx;
flex: 1;
display: flex;
flex-direction: column;
.list-c-c-r-til {
line-height: 40rpx;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
.list-c-c-r-price {
padding-top: 10rpx;
font-weight: bold;
}
}
}
}
}
.topic-search-list-b {
margin: 0 20rpx 40rpx;
background-color: #fff;
border-radius: 20rpx;
.topic-search-list {
padding:20rpx;
display: flex;
align-items: center;
.topic-img {
width: 80rpx;
height: 80rpx;
}
.topic-search-list-c {
padding-left: 20rpx;
flex: 1;
display: flex;
justify-content: space-between;
align-items: center;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
}
}
}
.show-t {
min-width: 400rpx;
padding: 30rpx;
border-radius: 10rpx;
display: flex;
flex-direction: column;
align-items: center;
color: #fff;
// text-align: center;
line-height: 50rpx;
position: fixed;
left: 50%;
top: 40%;
z-index: 33;
transform: translate(-50%, -50%);
background-color: #595959cc;
}
</style>