8 changed files with 856 additions and 1256 deletions
@ -1,519 +0,0 @@ |
|||||
<template> |
|
||||
<!-- 拼团页 --> |
|
||||
<view class="page1"> |
|
||||
<view class="title"> |
|
||||
<view class="title-sreach"> |
|
||||
<view class="back-btn" @tap="back" :style="{'padding-top': menuButtonInfo.top +'px'}"> |
|
||||
<uni-icons type="left" size="28"></uni-icons> |
|
||||
</view> |
|
||||
<view class="title-name" :style="{'padding-top': menuButtonInfo.top +'px'}"> |
|
||||
搜索页 |
|
||||
</view> |
|
||||
<view class="title-search" :style="{'margin-top': menuButtonInfo.top +'px'}"> |
|
||||
<uni-icons type="search" size="18" style="margin: 9rpx;"></uni-icons> |
|
||||
<input type="text" placeholder="搜索" v-model="searchForm.keyWord" @confirm="goSearch" confirm-type="search" /> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view style="width: 95%;background: #fff;margin: 0 auto;border-radius: 20rpx;padding: 20rpx;min-height: 160rpx;" v-if="historyList.length > 0 && !searchForm.shopName"> |
|
||||
<view style="height: 60rpx;color: #777;display: flex;justify-content: space-between;align-items: center;"> |
|
||||
<text>历史搜索</text> |
|
||||
<uni-icons type="trash" size="18" color="#999" @tap="clearHistory"></uni-icons> |
|
||||
</view> |
|
||||
<view style="overflow: hidden;"> |
|
||||
<view v-for="(item, index) in historyList" :key="index" @tap="clickHistory(item)" style="margin-right:20rpx;margin-bottom:20rpx;background: rgba(247, 248, 248, 0.6);display: inline-block;padding: 10rpx 20rpx;border-radius: 10rpx;float: left;"> |
|
||||
{{item}} |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="title-sort" style="clear: both;"> |
|
||||
<view class="sort-member"> |
|
||||
<view class="sort-text" @tap="searchShop('all','')"> |
|
||||
综合排序 <text style="font-size: 20rpx;">▼</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="sort-member"> |
|
||||
<view class="sort-text" @tap="searchShop('sale','')"> |
|
||||
销量优先 <text style="font-size: 20rpx;">▼</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="sort-member"> |
|
||||
<view class="sort-text" @tap="searchShop('score','')"> |
|
||||
评分优先 <text style="font-size: 20rpx;">▼</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="sort-member" style="position: relative;"> |
|
||||
<view class="sort-text" @tap="checkArea"> |
|
||||
区域选择 <text style="font-size: 20rpx;">▼</text> |
|
||||
</view> |
|
||||
<view class="sort-value" v-if="isArea"> |
|
||||
<view class="sort-value1" v-for="(item,index) in shopArea" :key="index" @tap="searchShop('area',item.id)">{{item.title}}</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="shop-list"> |
|
||||
<view class="shop-member" v-for="(item,index) in shopList" :key="index"> |
|
||||
<view class="shop-top"> |
|
||||
<view class="shop-img"> |
|
||||
<img :src="item.shopIcon" alt=""> |
|
||||
<img src="https://jewel-shop.oss-cn-beijing.aliyuncs.com/6c4ab92a43c842d8bb22035bce1f65cc.png" alt="" style="width:30rpx;height:30rpx;position: absolute;top: 0;left: 0;background-size: 100%;" /> |
|
||||
</view> |
|
||||
<view class="shop-content" @tap="goDetail('shop',item)"> |
|
||||
<view class="shop-name"> |
|
||||
{{item.shopName}} |
|
||||
</view> |
|
||||
<view class="shop-content-center"> |
|
||||
<view class="shop-rate"> |
|
||||
<view class="shop-rate-num">{{item.shopScore}}</view> |
|
||||
<view style="padding-top: 4rpx;"> |
|
||||
<uni-rate :disabled="true" size="16" disabledColor="rgba(255, 184, 84, 1)" :value="item.shopScore" /> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="shop-tag"> |
|
||||
<text style="padding: 4rpx 10rpx;background: rgba(223, 255, 176, 1);color: #777;border-radius: 6rpx;"> |
|
||||
{{item.shopTakeaway && item.shopTakeaway.type ? item.shopTakeaway.type : '美食'}} |
|
||||
</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="shop-content-bottom"> |
|
||||
<view class="shop-deal"> |
|
||||
<text v-if = "item.subtitle != null" style="padding: 4rpx 10rpx;background: rgba(223, 255, 176, 1);color: #777;border-radius: 6rpx;"> |
|
||||
{{item.subtitle}} |
|
||||
</text> |
|
||||
</view> |
|
||||
<view class="shop-deal1"> |
|
||||
已拼<text style="color: red;font-weight: 700;"> {{item.saleCount != null ? item.saleCount : 0}} </text>单 |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="shop-bottom" v-if="item.products != null && item.products.length > 0"> |
|
||||
<view class="menu-member" v-if='item1.delFlag == 1' v-for="(item1,index1) in item.products" :key="index1" @tap="goDetail('product',item1)"> |
|
||||
<view class="menu-img"> |
|
||||
<img :src="item1.productPicture" alt=""> |
|
||||
</view> |
|
||||
<view class="menu-content"> |
|
||||
<view class="shop-menu-name"> |
|
||||
{{item1.productName}} |
|
||||
</view> |
|
||||
<view class="shop-menu-price"> |
|
||||
¥{{item1.attributeListPrice | sliceMsg}} |
|
||||
</view> |
|
||||
<view class="shop-menu-purchase"> |
|
||||
拼团 <text style="color: red;">¥{{item1.productGroupBuyPrices | slicePrice}}</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<uni-load-more :status="loadStatus" @change="onChange" v-if="shopList.length > 0" /> |
|
||||
</view> |
|
||||
<view style="width: 100%;height: 120rpx;"></view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default { |
|
||||
data() { |
|
||||
return { |
|
||||
loadStatus: 'more', |
|
||||
isArea:false, |
|
||||
searchScore: false, |
|
||||
searchSale: false, |
|
||||
shopArea:[], |
|
||||
totalPages:1, |
|
||||
historyList: [], |
|
||||
searchForm:{ |
|
||||
regionId:JSON.parse(uni.getStorageSync('area')).id, |
|
||||
shopName:'', |
|
||||
shopType:'', |
|
||||
keyWord:'', |
|
||||
shopArea:'', |
|
||||
pageNumber: 1, |
|
||||
pageSize: '10', |
|
||||
merchantType: 1, |
|
||||
sort: "shoprank", |
|
||||
order: "desc", |
|
||||
sortOrder:'shoprank', |
|
||||
orderOrder:'desc', |
|
||||
sortScore:'', |
|
||||
orderScore:'', |
|
||||
sortSale:'', |
|
||||
orderSale:'' |
|
||||
}, |
|
||||
shopList:[], |
|
||||
menuButtonInfo:{} |
|
||||
} |
|
||||
}, |
|
||||
filters: { |
|
||||
sliceMsg(val) { |
|
||||
var name = '' |
|
||||
if (typeof(val) == 'string') { |
|
||||
let newObj = JSON.parse(val) |
|
||||
for (let as in newObj) { |
|
||||
name = newObj[as].specPrice |
|
||||
} |
|
||||
} |
|
||||
return name; |
|
||||
}, |
|
||||
slicePrice(val){ |
|
||||
let begin = '' |
|
||||
if(val != null){ |
|
||||
begin = val[0].groupPrice |
|
||||
for(let i = 0;i < val.length;i++){ |
|
||||
if(val[i].groupPrice < begin){ |
|
||||
begin = val[i].groupPrice |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
return begin; |
|
||||
} |
|
||||
}, |
|
||||
onReachBottom() { |
|
||||
if (this.searchForm.pageNumber >= this.totalPages) return; |
|
||||
// this.status = 'loading'; |
|
||||
this.searchForm.pageNumber ++; |
|
||||
this.getShopList(); |
|
||||
|
|
||||
}, |
|
||||
onLoad(option) { |
|
||||
if (option && option.shopType && option.shopType !== 'undefined') { |
|
||||
this.searchForm.shopType = option.shopType; |
|
||||
this.getShopList(); |
|
||||
} |
|
||||
let history = uni.getStorageSync('searchHistoryGroup'); |
|
||||
if (history) { |
|
||||
this.historyList = JSON.parse(history); |
|
||||
} |
|
||||
this.searchForm.regionId = JSON.parse(uni.getStorageSync('area')).id |
|
||||
this.getShopArea(); |
|
||||
//this.getShopList(); |
|
||||
}, |
|
||||
onShow() { |
|
||||
this.menuButtonInfo = uni.getMenuButtonBoundingClientRect() |
|
||||
}, |
|
||||
methods: { |
|
||||
goSearch() { |
|
||||
if (this.searchForm.keyWord && this.searchForm.keyWord.trim()) { |
|
||||
let list = this.historyList; |
|
||||
let index = list.indexOf(this.searchForm.keyWord.trim()); |
|
||||
if (index !== -1) list.splice(index, 1); |
|
||||
list.unshift(this.searchForm.keyWord.trim()); |
|
||||
if (list.length > 10) list.pop(); |
|
||||
this.historyList = list; |
|
||||
uni.setStorageSync('searchHistoryGroup', JSON.stringify(list)); |
|
||||
} |
|
||||
this.searchForm.pageNumber = 1; |
|
||||
this.getShopList(); |
|
||||
}, |
|
||||
clickHistory(item) { |
|
||||
this.searchForm.keyWord = item; |
|
||||
this.goSearch(); |
|
||||
this.$forceUpdate() |
|
||||
}, |
|
||||
clearHistory() { |
|
||||
uni.showModal({ |
|
||||
title: '提示', |
|
||||
content: '确定清空历史搜索吗?', |
|
||||
success: (res) => { |
|
||||
if (res.confirm) { |
|
||||
this.historyList = []; |
|
||||
uni.setStorageSync('searchHistoryGroup', '[]'); |
|
||||
} |
|
||||
} |
|
||||
}); |
|
||||
}, |
|
||||
searchShop(type,value){ |
|
||||
this.searchForm.pageNumber = 1 |
|
||||
if(type == 'area'){ |
|
||||
this.searchForm.shopArea = value |
|
||||
}else if(type == 'score'){ |
|
||||
this.searchScore = !this.searchScore |
|
||||
this.searchSale = false |
|
||||
this.searchForm.sort = 'shopScore' |
|
||||
}else if(type == 'sale'){ |
|
||||
this.searchSale = !this.searchSale |
|
||||
this.searchScore = false |
|
||||
this.searchForm.sort = 'saleCount' |
|
||||
}else if(type == 'all'){ |
|
||||
this.searchForm.sortOrder = 'shoprank' |
|
||||
this.searchForm.orderOrder = 'desc' |
|
||||
this.searchForm.shopArea = '' |
|
||||
this.searchForm.sort = 'shoprank' |
|
||||
this.searchScore = false |
|
||||
this.searchScore = false |
|
||||
this.searchSale = false |
|
||||
}else if(type == 'typeUp'){ |
|
||||
//TODO跳转新页面 |
|
||||
} |
|
||||
this.getShopList(); |
|
||||
}, |
|
||||
getShopArea(){ |
|
||||
let that = this |
|
||||
that.tui.request("/app/shopArea/getByParentId/"+JSON.parse(uni.getStorageSync('area')).id, "GET", {}, false, true).then((res) => { |
|
||||
if (res.code == 200) { |
|
||||
if(res.result != null){ |
|
||||
for(let m = 0;m<res.result.length;m++){ |
|
||||
if(res.result[m].isCanteen == 1){ |
|
||||
that.shopArea.push(res.result[m]) |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} else { |
|
||||
that.tui.toast(res.message) |
|
||||
return |
|
||||
} |
|
||||
}).catch((res) => {}) |
|
||||
}, |
|
||||
getShopList(){ |
|
||||
this.loadStatus = 'loading' |
|
||||
if(this.searchSale){ |
|
||||
this.searchForm.sortSale = 'saleCount' |
|
||||
this.searchForm.orderSale = 'desc' |
|
||||
this.searchForm.sortOrder = '' |
|
||||
}else{ |
|
||||
this.searchForm.sortSale = '' |
|
||||
} |
|
||||
if(this.searchScore){ |
|
||||
this.searchForm.sortScore = 'shopScore' |
|
||||
this.searchForm.orderScore = 'desc' |
|
||||
this.searchForm.sortOrder = '' |
|
||||
}else{ |
|
||||
this.searchForm.sortScore = '' |
|
||||
} |
|
||||
let that = this |
|
||||
that.tui.request("/app/shop/getByCondition", "GET", this.searchForm, false, true).then((res) => { |
|
||||
that.loadStatus = 'nomore'; |
|
||||
if (res.code == 200) { |
|
||||
if (that.searchForm.pageNumber == 1) { |
|
||||
that.shopList = res.result.content |
|
||||
} else { |
|
||||
that.shopList = [...that.shopList, ...res.result.content] |
|
||||
} |
|
||||
that.totalPages = res.result.totalPages |
|
||||
that.isArea = false |
|
||||
that.$forceUpdate() |
|
||||
} else { |
|
||||
that.tui.toast(res.message) |
|
||||
return |
|
||||
} |
|
||||
uni.hideLoading() |
|
||||
}).catch((res) => {}) |
|
||||
}, |
|
||||
goDetail(type,item){ |
|
||||
if(type == 'shop'){ |
|
||||
uni.navigateTo({ |
|
||||
url:'/package2/group/groupBuySingle?type=shop&item=' + encodeURIComponent(JSON.stringify(item)) |
|
||||
}) |
|
||||
}else if(type == 'search'){ |
|
||||
uni.navigateTo({ |
|
||||
url:'/package2/group/groupBuySingle' |
|
||||
}) |
|
||||
}else{ |
|
||||
uni.navigateTo({ |
|
||||
url:'/package2/group/groupBuySingle?type=product&item=' + encodeURIComponent(JSON.stringify(item)) |
|
||||
}) |
|
||||
} |
|
||||
}, |
|
||||
back(){ |
|
||||
uni.navigateBack() |
|
||||
}, |
|
||||
checkArea(){ |
|
||||
this.isArea = !this.isArea |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style lang="scss"> |
|
||||
page { |
|
||||
width: 100%; |
|
||||
min-height: 100%; |
|
||||
font-size: 24rpx; |
|
||||
background: #F5F8F5; |
|
||||
color: #00231C; |
|
||||
} |
|
||||
|
|
||||
.page1 { |
|
||||
width: 100%; |
|
||||
min-height: 100vh; |
|
||||
font-size: 24rpx; |
|
||||
position: relative; |
|
||||
} |
|
||||
.title{ |
|
||||
background: url('https://jewel-shop.oss-cn-beijing.aliyuncs.com/8bc15960c2dc40268e295d6dd23aecce.png') no-repeat; |
|
||||
background-size: 100% 100%; |
|
||||
width: 100%; |
|
||||
height: auto; |
|
||||
padding-bottom: 20rpx; |
|
||||
} |
|
||||
.title-sreach{ |
|
||||
width: 75%; |
|
||||
display: flex; |
|
||||
height: 200rpx; |
|
||||
} |
|
||||
.back-btn{ |
|
||||
padding-top: 110rpx; |
|
||||
} |
|
||||
.title-name{ |
|
||||
padding-top: 110rpx; |
|
||||
font-size: 36rpx; |
|
||||
font-weight: 700; |
|
||||
} |
|
||||
.title-search{ |
|
||||
margin-top: 110rpx; |
|
||||
display: flex; |
|
||||
background: #fff; |
|
||||
height: 54rpx; |
|
||||
margin-left: 20rpx; |
|
||||
border-radius: 54rpx; |
|
||||
width: 370rpx; |
|
||||
input{ |
|
||||
height: 54rpx; |
|
||||
line-height: 54rpx; |
|
||||
} |
|
||||
} |
|
||||
.title-sort{ |
|
||||
height: 60rpx; |
|
||||
display: flex; |
|
||||
margin-top: 20rpx; |
|
||||
} |
|
||||
.sort-member{ |
|
||||
line-height: 60rpx; |
|
||||
text-align: center; |
|
||||
background: #fff; |
|
||||
width: 20%; |
|
||||
margin-left: 4%; |
|
||||
border-radius: 10rpx; |
|
||||
} |
|
||||
.sort-value{ |
|
||||
width: 160rpx; |
|
||||
height: auto; |
|
||||
max-height: 300rpx; |
|
||||
overflow: scroll; |
|
||||
background: rgba(0, 0, 0, 0.7); |
|
||||
position: absolute; |
|
||||
top: 80rpx; |
|
||||
right: 0; |
|
||||
border-radius: 20rpx; |
|
||||
color: #fff; |
|
||||
font-size: 22rpx; |
|
||||
} |
|
||||
.sort-value1{ |
|
||||
border-bottom: 1rpx solid #eee; |
|
||||
} |
|
||||
.shop-list{ |
|
||||
width: 95%; |
|
||||
height: auto; |
|
||||
margin: 0 auto; |
|
||||
} |
|
||||
.shop-member{ |
|
||||
width: 100%; |
|
||||
height: auto; |
|
||||
border-radius: 20rpx; |
|
||||
background: #fff; |
|
||||
margin-bottom: 20rpx; |
|
||||
} |
|
||||
.shop-img{ |
|
||||
width: 160rpx; |
|
||||
height: 160rpx; |
|
||||
position: relative; |
|
||||
img{ |
|
||||
width: 100%; |
|
||||
background-size: 100%; |
|
||||
height: 100%; |
|
||||
} |
|
||||
} |
|
||||
.shop-top{ |
|
||||
padding: 20rpx; |
|
||||
display: flex; |
|
||||
} |
|
||||
.shop-content{ |
|
||||
flex: 1; |
|
||||
padding-left: 20rpx; |
|
||||
} |
|
||||
.shop-name{ |
|
||||
font-size: 32rpx; |
|
||||
font-weight: 900; |
|
||||
} |
|
||||
.shop-content-center{ |
|
||||
display: flex; |
|
||||
margin: 20rpx 0; |
|
||||
} |
|
||||
.shop-rate{ |
|
||||
background: rgba(249, 212, 157, 0.34); |
|
||||
height: 40rpx; |
|
||||
display: flex; |
|
||||
border-radius: 20rpx; |
|
||||
padding: 0 10rpx 0 0; |
|
||||
} |
|
||||
.shop-rate-num{ |
|
||||
width: 50rpx; |
|
||||
height: 100%; |
|
||||
text-align: center; |
|
||||
background: linear-gradient(90deg, rgba(255, 77, 0, 1), rgba(255, 184, 84, 1)); |
|
||||
color: #fff; |
|
||||
line-height: 40rpx; |
|
||||
font-size: 22rpx; |
|
||||
border-bottom-left-radius: 20rpx; |
|
||||
border-top-left-radius: 20rpx; |
|
||||
border-bottom-right-radius: 10rpx; |
|
||||
border-top-right-radius: 10rpx; |
|
||||
} |
|
||||
.shop-tag{ |
|
||||
flex: 1; |
|
||||
line-height: 40rpx; |
|
||||
text-align: right; |
|
||||
} |
|
||||
.shop-content-bottom{ |
|
||||
display: flex; |
|
||||
} |
|
||||
.shop-deal{ |
|
||||
flex:1; |
|
||||
} |
|
||||
.shop-bottom{ |
|
||||
border-top: 2rpx solid #eee; |
|
||||
width: 100%; |
|
||||
overflow-x: scroll; |
|
||||
display: flex; |
|
||||
height: 280rpx; |
|
||||
overflow-y: hidden; |
|
||||
} |
|
||||
.menu-member{ |
|
||||
width: 140rpx; |
|
||||
height: 100%; |
|
||||
margin: 10rpx 0 0 20rpx; |
|
||||
} |
|
||||
.menu-img{ |
|
||||
height: 140rpx; |
|
||||
width: 140rpx; |
|
||||
img{ |
|
||||
width: 100%; |
|
||||
height: 100%; |
|
||||
background-size: 100%; |
|
||||
} |
|
||||
} |
|
||||
.menu-content{ |
|
||||
font-size: 22rpx; |
|
||||
} |
|
||||
.shop-menu-name{ |
|
||||
margin-top: 10rpx; |
|
||||
font-weight: 700; |
|
||||
} |
|
||||
.shop-menu-price{ |
|
||||
margin-top: 6rpx; |
|
||||
font-weight: 700; |
|
||||
} |
|
||||
.shop-menu-purchase{ |
|
||||
display: flex; |
|
||||
background: rgba(255, 57, 57, 0.1); |
|
||||
height: 36rpx; |
|
||||
line-height: 36rpx; |
|
||||
padding: 0 0 0 4rpx; |
|
||||
border-radius: 8rpx; |
|
||||
font-weight: 700; |
|
||||
margin-top: 10rpx; |
|
||||
color: #777; |
|
||||
} |
|
||||
</style> |
|
||||
Loading…
Reference in new issue