|
@@ -1,150 +1,34 @@
|
|
|
<template>
|
|
|
- <view class="container" @click="filterShow = false">
|
|
|
+ <view class="store-list">
|
|
|
<page-navbar bgColor="#fff" title="商家列表"></page-navbar>
|
|
|
-
|
|
|
- <view class="top-box">
|
|
|
- <view class="search-box">
|
|
|
- <view class="search-left">
|
|
|
- <u-search
|
|
|
- placeholder="请输入搜索内容"
|
|
|
- :showAction="false"
|
|
|
- v-model="sellerListParams.keyword"
|
|
|
- />
|
|
|
- </view>
|
|
|
- <view class="search-right" @click="handlerSearch">搜索</view>
|
|
|
- </view>
|
|
|
- <view class="filter-box">
|
|
|
- <view class="filter-item">
|
|
|
- <view class="fiter2" @tap.stop="handlerSelectAllFilter(2)">
|
|
|
- <span>{{ sortCondition }}</span>
|
|
|
- <u-icon name="arrow-down-fill"></u-icon>
|
|
|
- </view>
|
|
|
- <view class="fiter1" @tap.stop="handlerSelectMenu(1)">
|
|
|
- <span>筛选</span>
|
|
|
- <u-icon name="arrow-down-fill"></u-icon>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
- <view class="filter-drapdown" v-show="filterShow">
|
|
|
- <view class="filter1" v-show="filterType == 1">
|
|
|
- <view class="scroll-box">
|
|
|
- <scroll-view
|
|
|
- :scroll-top="scrollTop"
|
|
|
- scroll-y="true"
|
|
|
- class="filter-menu-left scroll-Y"
|
|
|
- @scrolltoupper="upper"
|
|
|
- @scrolltolower="lower"
|
|
|
- @scroll="scroll"
|
|
|
- >
|
|
|
- <view
|
|
|
- id="demo1"
|
|
|
- class="scroll-view-item uni-bg-red menu-item"
|
|
|
- :class="current == index ? 'act-left-menu' : ''"
|
|
|
- v-for="(item, index) of menuList"
|
|
|
- :key="index"
|
|
|
- @click.stop="handlerSelectLMenu(item, index)"
|
|
|
- >{{ item.name }}
|
|
|
- </view>
|
|
|
- </scroll-view>
|
|
|
- <scroll-view
|
|
|
- :scroll-top="scrollTop"
|
|
|
- scroll-y="true"
|
|
|
- class="filter-menu-right scroll-Y"
|
|
|
- @scrolltoupper="upper"
|
|
|
- @scrolltolower="lower"
|
|
|
- @scroll="scroll"
|
|
|
- >
|
|
|
- <view
|
|
|
- id="demo1"
|
|
|
- class="scroll-view-item uni-bg-red"
|
|
|
- v-for="item of 15"
|
|
|
- :key="item"
|
|
|
- >
|
|
|
- <view class="menu-right-title">洗车</view>
|
|
|
- <view class="menu-right-contentbox">
|
|
|
- <span class="menu-item" v-for="item of 7" :key="item">测试</span>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
- </scroll-view>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
- <view class="filter2" v-show="filterType == 2">
|
|
|
- <view @tap="sellerListFilter(1)">离我最近</view>
|
|
|
- <view @tap="sellerListFilter(2)">好评优先</view>
|
|
|
- <view @tap="sellerListFilter(3)">销量优先</view>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
+ <view class="fl-flex fl-align-center store-list-search">
|
|
|
+ <u-search
|
|
|
+ placeholder="请输入搜索内容"
|
|
|
+ :showAction="false"
|
|
|
+ v-model="sellerListParams.keyword"
|
|
|
+ :inputStyle="inputStyle"
|
|
|
+ />
|
|
|
+ <view @click="handlerSearch" class="f-s-28 u-m-l-28" style="color: #215ebe">
|
|
|
+ 搜索
|
|
|
</view>
|
|
|
</view>
|
|
|
|
|
|
- <view class="content-box">
|
|
|
- <view
|
|
|
- class="content-item"
|
|
|
- v-for="(item, index) in sellerList"
|
|
|
- :key="index"
|
|
|
- @tap="goSellerDetail(item.id)"
|
|
|
- >
|
|
|
- <view class="item-left">
|
|
|
- <image class="img" :src="item.logo" mode="aspectFit"></image>
|
|
|
- <!-- <image class="img" :src="error || !loaded ? 'https://cdn.uviewui.com/uview/album/10.jpg' : item.logo"
|
|
|
- mode="scaleToFill"></image> -->
|
|
|
- </view>
|
|
|
- <view class="item-right">
|
|
|
- <view>
|
|
|
- <view class="item-title">
|
|
|
- <view class="tag">常去</view>
|
|
|
- <view class="title">{{ `${item.name}(${item.address})` }}</view>
|
|
|
- </view>
|
|
|
- <view class="str-box">
|
|
|
- <view class="srt-left">
|
|
|
- <u-rate activeColor="#fc8400" :value="item.score" readonly></u-rate>
|
|
|
- <text>{{ item.score }}</text>
|
|
|
- </view>
|
|
|
- <view class="border"></view>
|
|
|
- <!-- <view class="srt-right">{{ item.sale }}单</view> -->
|
|
|
- <view class="srt-right"></view>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
+ <view class="fl-flex fl-align-center store-list-sort">
|
|
|
+ <view class="f-s-28 text-333 u-m-r-8">综合排序</view>
|
|
|
+ <u-icon name="arrow-down" color="#616570" size="12"></u-icon>
|
|
|
+ </view>
|
|
|
|
|
|
- <view class="bottom-textbox">
|
|
|
- <view class="bottom-left">宝安中心区美容洗车</view>
|
|
|
- <view class="bottom-right">{{ (item.distance / 1000).toFixed(2) }}KM</view>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
- <u-empty
|
|
|
- v-if="sellerList.length == 0"
|
|
|
- mode="data"
|
|
|
- icon="http://cdn.uviewui.com/uview/empty/data.png"
|
|
|
- ></u-empty>
|
|
|
+ <view class="store-list-main">
|
|
|
+ <base-list :list="sellerList" @click="handleMerchant"></base-list>
|
|
|
</view>
|
|
|
</view>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
import { getSellerList } from '@/api/client/business.js';
|
|
|
-import { mapGetters } from 'vuex';
|
|
|
-
|
|
|
export default {
|
|
|
data() {
|
|
|
return {
|
|
|
- filterShow: false,
|
|
|
- filterType: 0,
|
|
|
- sortCondition: '综合排序',
|
|
|
- current: 0,
|
|
|
- menuList: [
|
|
|
- {
|
|
|
- name: '汽车',
|
|
|
- },
|
|
|
- {
|
|
|
- name: '汽车2',
|
|
|
- },
|
|
|
- {
|
|
|
- name: '汽车3',
|
|
|
- },
|
|
|
- {
|
|
|
- name: '汽车4',
|
|
|
- },
|
|
|
- ],
|
|
|
sellerList: [],
|
|
|
sellerListParams: {
|
|
|
longitude: '',
|
|
@@ -158,7 +42,6 @@ export default {
|
|
|
};
|
|
|
},
|
|
|
onLoad(option) {
|
|
|
- console.log(option, 'loading');
|
|
|
if (option.id) {
|
|
|
this.sellerListParams.categoryId = option.id;
|
|
|
}
|
|
@@ -167,302 +50,52 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
mounted() {
|
|
|
- let { latitude, longitude, region } = this.location;
|
|
|
- this.sellerListParams.latitude = latitude;
|
|
|
- this.sellerListParams.longitude = longitude;
|
|
|
- this.sellerListParams.region = region;
|
|
|
- console.log(this.sellerListParams, ' this.sellerListParams');
|
|
|
- this.getData();
|
|
|
+ this.sellerListParams = Object.assign(this.sellerListParams, { ...this.location });
|
|
|
+ this.getInitDataList();
|
|
|
},
|
|
|
computed: {
|
|
|
- ...mapGetters(['location']),
|
|
|
+ inputStyle() {
|
|
|
+ return {
|
|
|
+ height: '72rpx',
|
|
|
+ };
|
|
|
+ },
|
|
|
},
|
|
|
methods: {
|
|
|
- // 点击综合排序
|
|
|
- handlerSelectAllFilter(e) {
|
|
|
- this.filterShow = true;
|
|
|
- this.filterType = 2;
|
|
|
- },
|
|
|
- // 排序条件
|
|
|
- sellerListFilter(e) {
|
|
|
- switch (e) {
|
|
|
- case 1:
|
|
|
- this.sortCondition = '离我最近';
|
|
|
- this.sellerListParams.sort = 'NEAREST';
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- this.sortCondition = '好评优先';
|
|
|
- this.sellerListParams.sort = 'FAVORITE';
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- this.sortCondition = '销量优先';
|
|
|
- this.sellerListParams.sort = 'BESTSELLING';
|
|
|
- break;
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
- this.getData();
|
|
|
- },
|
|
|
// 获取初始化列表
|
|
|
- getData() {
|
|
|
- getSellerList(this.sellerListParams)
|
|
|
- .then(res => {
|
|
|
- this.sellerList = res.data;
|
|
|
- })
|
|
|
- .catch(err => {});
|
|
|
+ getInitDataList() {
|
|
|
+ getSellerList(this.sellerListParams).then(res => {
|
|
|
+ this.sellerList = res.data || [];
|
|
|
+ });
|
|
|
},
|
|
|
// 点击进入详情
|
|
|
- goSellerDetail(id) {
|
|
|
+ handleMerchant(val) {
|
|
|
uni.navigateTo({
|
|
|
- url: `/pagesHome/category/categoryStoreList?id=${id}`,
|
|
|
+ url: `/pagesHome/marketer/index?id=${val.id}`,
|
|
|
});
|
|
|
},
|
|
|
- //
|
|
|
- handlerSelectMenu(e) {
|
|
|
- // uni.navigateTo({
|
|
|
- // url:'/pages/client/clientPackage/category'
|
|
|
- // })
|
|
|
- // this.filterShow = true;
|
|
|
- // this.filterType = 1;
|
|
|
- },
|
|
|
- // 选择左侧菜单
|
|
|
- handlerSelectLMenu(item, index) {
|
|
|
- this.current = index;
|
|
|
- },
|
|
|
- scroll() {},
|
|
|
- lower() {},
|
|
|
- upper() {},
|
|
|
- // 搜索
|
|
|
+ // 搜索列表
|
|
|
handlerSearch() {
|
|
|
- this.getData();
|
|
|
+ this.getInitDataList();
|
|
|
},
|
|
|
},
|
|
|
};
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
-.container {
|
|
|
+.store-list {
|
|
|
min-height: 100vh;
|
|
|
- background-color: #f9f9f9;
|
|
|
-
|
|
|
- .top-box {
|
|
|
- width: 100%;
|
|
|
+ .store-list-search {
|
|
|
+ padding: 20rpx 32rpx;
|
|
|
background-color: #fff;
|
|
|
- padding: 10rpx 20rpx;
|
|
|
- box-sizing: border-box;
|
|
|
-
|
|
|
- .search-box {
|
|
|
- display: flex;
|
|
|
- justify-content: space-around;
|
|
|
- align-items: center;
|
|
|
-
|
|
|
- .search-left {
|
|
|
- width: 80%;
|
|
|
- }
|
|
|
-
|
|
|
- .search-right {
|
|
|
- text-align: center;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .filter-box {
|
|
|
- margin-top: 20rpx;
|
|
|
-
|
|
|
- .filter-item {
|
|
|
- display: flex;
|
|
|
- justify-content: space-between;
|
|
|
-
|
|
|
- .fiter1,
|
|
|
- .fiter2 {
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- }
|
|
|
-
|
|
|
- .filter-l {
|
|
|
- width: 200rpx;
|
|
|
- overflow: hidden;
|
|
|
- text-overflow: ellipsis;
|
|
|
- white-space: nowrap;
|
|
|
- }
|
|
|
-
|
|
|
- .fiter1 {
|
|
|
- color: #808080;
|
|
|
- font-size: 24rpx;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .filter-drapdown {
|
|
|
- position: fixed;
|
|
|
- left: 0;
|
|
|
- width: 100%;
|
|
|
- background-color: #fff;
|
|
|
- // height: 300rpx;
|
|
|
- z-index: 999;
|
|
|
- box-shadow: 0 10rpx 20rpx -5rpx rgba(0, 0, 0, 0.2);
|
|
|
-
|
|
|
- .filter1 {
|
|
|
- .scroll-box {
|
|
|
- display: flex;
|
|
|
- max-height: 1200rpx;
|
|
|
-
|
|
|
- .filter-menu-left {
|
|
|
- width: 30%;
|
|
|
- background-color: #ebebeb;
|
|
|
- overflow-y: scroll;
|
|
|
-
|
|
|
- .menu-item {
|
|
|
- width: 100%;
|
|
|
- height: 100rpx;
|
|
|
- text-align: center;
|
|
|
- line-height: 100rpx;
|
|
|
- font-size: 30rpx;
|
|
|
- background-color: #ebebeb;
|
|
|
- color: #5a5a5a;
|
|
|
- }
|
|
|
-
|
|
|
- .act-left-menu {
|
|
|
- background-color: #fff;
|
|
|
- color: #5992bb;
|
|
|
- border-right: 8rpx solid #5992bb !important;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .filter-menu-right {
|
|
|
- background-color: #fff;
|
|
|
- padding: 10rpx 20rpx;
|
|
|
- box-sizing: border-box;
|
|
|
- width: 70%;
|
|
|
- overflow-y: scroll;
|
|
|
-
|
|
|
- .menu-right-title {
|
|
|
- font-size: 30rpx;
|
|
|
- color: #000;
|
|
|
- margin-bottom: 10rpx;
|
|
|
- }
|
|
|
-
|
|
|
- .menu-right-contentbox {
|
|
|
- padding: 0 0 0 30rpx;
|
|
|
- display: flex;
|
|
|
- justify-content: left;
|
|
|
- flex-wrap: wrap;
|
|
|
-
|
|
|
- .menu-item {
|
|
|
- // width: 100rpx;
|
|
|
- padding: 0 20rpx;
|
|
|
- height: 40rpx;
|
|
|
- background-color: #cccccc;
|
|
|
- color: #000;
|
|
|
- text-align: center;
|
|
|
- line-height: 40rpx;
|
|
|
- margin: 10rpx 20rpx;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .filter2 {
|
|
|
- padding: 20rpx 50rpx;
|
|
|
- box-sizing: border-box;
|
|
|
-
|
|
|
- view {
|
|
|
- margin: 30rpx 0;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ height: 72rpx;
|
|
|
+ line-height: 72rpx;
|
|
|
}
|
|
|
-
|
|
|
- .content-box {
|
|
|
- width: 100%;
|
|
|
-
|
|
|
- .content-item {
|
|
|
- background-color: #fff;
|
|
|
- padding: 10rpx 20rpx;
|
|
|
- box-sizing: border-box;
|
|
|
- margin: 10rpx 0;
|
|
|
- display: flex;
|
|
|
-
|
|
|
- .item-left {
|
|
|
- margin-right: 10rpx;
|
|
|
-
|
|
|
- .img {
|
|
|
- width: 200rpx;
|
|
|
- height: 200rpx;
|
|
|
- border-radius: 10rpx;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .item-right {
|
|
|
- height: 200rpx;
|
|
|
- align-content: space-between;
|
|
|
-
|
|
|
- .item-title {
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
-
|
|
|
- .tag {
|
|
|
- width: 80rpx;
|
|
|
- height: 46rpx;
|
|
|
- line-height: 35rpx;
|
|
|
- padding: 4rpx;
|
|
|
- font-size: 22rpx;
|
|
|
- box-sizing: border-box;
|
|
|
- background-color: #f6e7d4;
|
|
|
- color: #f99a47;
|
|
|
- border: 2rpx solid #f99a47;
|
|
|
- text-align: center;
|
|
|
- // align-items: center;
|
|
|
- margin-right: 10rpx;
|
|
|
- }
|
|
|
-
|
|
|
- .title {
|
|
|
- width: 85%;
|
|
|
- font-size: 30rpx;
|
|
|
- color: #000;
|
|
|
- font-weight: bold;
|
|
|
- overflow: hidden;
|
|
|
- text-overflow: ellipsis;
|
|
|
- display: -webkit-box;
|
|
|
- -webkit-line-clamp: 2;
|
|
|
- -webkit-box-orient: vertical;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .str-box {
|
|
|
- display: flex;
|
|
|
- margin-top: 10rpx;
|
|
|
-
|
|
|
- .srt-left {
|
|
|
- display: flex;
|
|
|
- color: #fc8400;
|
|
|
- }
|
|
|
-
|
|
|
- .border {
|
|
|
- border-left: 2rpx solid #cfcfcf;
|
|
|
- margin: 0 20rpx;
|
|
|
- }
|
|
|
-
|
|
|
- .srt-right {
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .bottom-textbox {
|
|
|
- display: flex;
|
|
|
- justify-content: space-between;
|
|
|
- font-size: 26rpx;
|
|
|
- margin-top: 40rpx;
|
|
|
-
|
|
|
- .bottom-left {
|
|
|
- color: #c7c7c7;
|
|
|
- }
|
|
|
-
|
|
|
- .bottom-right {
|
|
|
- color: #000;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ .store-list-sort {
|
|
|
+ padding: 0 32rpx;
|
|
|
+ background-color: #fff;
|
|
|
+ }
|
|
|
+ .store-list-main {
|
|
|
+ padding: 24rpx 32rpx;
|
|
|
}
|
|
|
}
|
|
|
</style>
|