<template> <view class="supplier" :style="{height: winHeight + 'px' }"> <!-- <view class="head-wrapper" :style="'top:'+statusBarHeight"> <view class="head-menu"> <view class='iconfont icon-xiangzuo' @click="returns"></view> <view class="iconfont icon-shouye4" @click="goHome"></view> </view> </view> --> <view class="header_warpper"> <!-- <u-swiper :list="swiperList" keyName="img" :autoplay="true" height="491.23rpx"></u-swiper> --> <!-- <view class="head_search flex_a_c"> <view class="search_content flex_a_c_j_sb"> <view class="flex_a_c"> <view class="iconfont icon-sousuo"></view> <input type="text" v-model="sotreParam.keyword" placeholder="请搜索"> </view> <button class="search_btn" @click="searchStoreMerchant">搜索</button> </view> </view> --> </view> <view class="con-box"> <view class="left_classify"> <scroll-view scroll-y="true" style="height: 100%; overflow: hidden;" scroll-with-animation='true'> <block v-for="(item,index) in merList" :key="item.merchant_category_id"> <view class="clify_item" :class="activeTwo === index ? 'pictch' : ''" @click="classifyClick(item, index)"> {{ item.category_name }} </view> </block> </scroll-view> </view> <view class="right_storee"> <scroll-view scroll-y="true" style="height: 100%; overflow: hidden;" scroll-with-animation='true' @scrolltolower="scrolltolower" class="my-scroll-view"> <image class="banner" :src="src" mode="aspectFit"></image> <view style="background-color: #fff;width: 100%;"> <view class="tabs_box flex_a_c_j_sb"> <view v-for="(item,index) in tabsList" :key="index" class="flex_a_c" :class="active==index?'active':''"> <view @click="tabsChange(index)">{{item}}</view> <!-- <view class="iconfont icon-shaixuan" v-if="index==3"></view> --> </view> </view> </view> <block v-for="(item,index) in storeMerchant" :key="index"> <storeCard :store_item="item" :category="item.category_name" :isDetail="isDetail"></storeCard> </block> <u-loadmore :status="status" :loading-text="loadingText" :loadmore-text="loadmoreText" :nomore-text="nomoreText" /> </scroll-view> </view> </view> <!-- <u-action-sheet :show="show" @close="close" @select="select" :actions="actions" :closeOnClickOverlay="true"> </u-action-sheet> <rightSlider v-if="rightBox" :status="rightBox" :merList="merList" :storeTypeArr="storeTypeArr" @confirm="confirm" @close="rightSliderClose"></rightSlider> --> </view> </template> <script> var statusBarHeight = uni.getSystemInfoSync().statusBarHeight + 'px'; import storeCard from './component/shop_card.vue' import rightSlider from './component/rightSlider'; import { getDiy } from '@/api/api.js' import { storeMerchantList, merClassifly, getStoreTypeApi } from '@/api/store.js' import { storeClassifyDel } from '@/api/product.js' export default { components: { rightSlider, storeCard }, data() { return { statusBarHeight: statusBarHeight, //系统导航条高度 swiperList: [], activeTwo: 0, winHeight: 0, num: '', status: 'loadmore', loadingText: '努力加载中', loadmoreText: '轻轻上拉', nomoreText: '我也是有底线的~~', show: false, actions: [{ name: '选项1', }, { name: '选项2', }, { name: '选项3', }, { name: '选项4', }, { name: '选项5', }, ], src: 'https://cdn.uviewui.com/uview/album/1.jpg', search: '', tabsList: ['综合排序', '销量优先', '好评'], active: 0, storeMerchant: [], storeList: { page: 1, limit: 10 }, StoreType: [], rightBox: false, merList: [], //商户分类 storeTypeArr: [], //店铺类型 sotreParam: { keyword: '', page: 1, limit: 10, order: 'order', // 顺序 category_id: '', // 分类 type_id: '', // 类型 street_id: '' // 位置 }, isDetail: 2 } }, onLoad(e) { this.sotreParam.street_id = e.street_id if (e.type_id) { this.sotreParam.type_id = e.type_id } if (e.isDetail) this.isDetail = e.isDetail this.getStoreMerchant() this.getStore() this.getClassfication() this.getStoreType() this.getBanner() uni.getSystemInfo({ success: (res) => { this.winHeight = res.windowHeight this.$set(this, 'winHeight', res.windowHeight) }, }); }, onShow() {}, methods: { // 后退 returns: function() { uni.navigateBack() }, // 首页 goHome() { uni.switchTab({ url: '/pages/home/index' }); }, async getBanner() { const { data } = await getDiy({ id: 0 }) if (data.value['1683638943100000']) { this.swiperList = data.value['1683638943100000'].swiperConfig.list } else { this.swiperList = data.value['1683875164005000'].swiperConfig.list } }, classifyClick(item, index) { this.activeTwo = index this.storeMerchant = [] this.sotreParam.page = 1 this.sotreParam.category_id = item.merchant_category_id this.getStoreMerchant(); }, // 获取商户分类 getClassfication: function() { let temp = [] merClassifly() .then(res => { temp = res.data.map(item => { return { ...item, check: false } }) if (this.sotreParam.category_id.length > 0) { this.sotreParam.category_id.forEach((ids, index) => { temp.forEach(el => { if (ids == el.merchant_category_id) { el.check = true } }) }) } temp.unshift({ category_name: '全部', merchant_category_id: '' }) this.merList = temp }) .catch(res => { this.$util.Tips({ title: res }); }); }, // 获取店铺类型 getStoreType: function() { let temp = [] getStoreTypeApi() .then(res => { temp = res.data.map(item => { return { ...item, check: false } }) if (this.sotreParam.type_id.length > 0) { this.sotreParam.type_id.forEach((ids, index) => { temp.forEach(el => { if (ids == el.mer_type_id) { el.check = true } }) }) } this.storeTypeArr = temp }) .catch(res => { this.$util.Tips({ title: res }); }); }, // 组件确定 confirm(data) { let arr1 = [], arr2 = [] if (data.storeTypeArr.length == 0) { this.sotreParam.type_id = '' } else { data.storeTypeArr.forEach(item => { arr1.push(item.mer_type_id) }) this.sotreParam.type_id = arr1.toString(); } if (data.merList.length == 0) { this.sotreParam.category_id = '' } else { data.merList.forEach(item => { arr2.push(item.merchant_category_id) }) this.sotreParam.category_id = arr2.toString(); } this.rightBox = data.status this.loadend = false; this.$set(this.sotreParam, 'page', 1) this.storeList = []; this.getStoreMerchant(); }, // 组件关闭 rightSliderClose() { this.rightBox = false }, //获取商户 async getStoreMerchant() { const res = await storeMerchantList(this.sotreParam) this.storeMerchant.push(...res.data.list) // console.log(this.storeMerchant); if (res.data.list.length < 10) this.status = 'nomore' }, async searchStoreMerchant() { this.storeMerchant = [] const res = await storeMerchantList(this.sotreParam) this.storeMerchant = res.data.list }, navigator(id) { uni.navigateTo({ url: `/pages/nongKe/supply_chain/merchant?id=${id}` }) }, //获取商户类型分类 async getStore() { const res = await merClassifly() for (let i = 0; i < res.data.length; i++) { this.actions[i].name = res.data[i].category_name this.actions[i].index = res.data[i].merchant_category_id } }, tabsChange(i) { this.active = i // this.sotreParam.category_id = '' // this.sotreParam.type_id = '' this.sotreParam.page = 1 this.storeMerchant = [] if (this.active == 0) { this.sotreParam.order = '' this.getStoreMerchant() } if (this.active == 1) { this.sotreParam.order = 'sales' this.getStoreMerchant() } if (this.active == 2) { this.sotreParam.order = 'rate' this.getStoreMerchant() } //筛选 if (this.active == 3) { this.status = 'nomore' this.rightBox = true // this.sotreParam.order = '' // this.getStoreMerchant() } }, close() { this.show = false }, select(e) { // console.log('select', e); }, scrolltolower() { if (this.status != 'nomore') { this.sotreParam.page++ this.getStoreMerchant() } } }, onReachBottom() { //如果状态为nomore 则不能在触发上拉事件 if (this.status != 'nomore') { this.sotreParam.page++ this.getStoreMerchant() } }, onPullDownRefresh() { this.storeMerchant = [] this.getStoreMerchant() uni.stopPullDownRefresh() } } </script> <style lang="scss"> .supplier { display: flex; flex-direction: column; width: 100%; } .header_warpper { width: 100%; } .head_search { width: 100%; background-color: #fff; height: 108.77rpx; .search_content { margin: 0 auto; width: 694.74rpx; height: 66.67rpx; padding: 2px 2px 2px 21.05rpx; border: 1px solid $uni-theme-color; border-radius: 100px; .icon-sousuo { font-weight: bold; color: $uni-theme-color; margin-right: 17.54rpx; } .search_btn { color: #fff; width: 135.09rpx; height: 59.65rpx; line-height: 59.65rpx; background: $uni-theme-bg-color; border-radius: 100px; } } } .con-box { flex: 1; display: flex; overflow: hidden; margin-top: 28.07rpx; } .left_classify { width: 192.98rpx; height: 100%; overflow-y: auto; overflow-x: hidden; overflow: hidden; .clify_item { width: 192.98rpx; height: 112.28rpx; text-align: center; line-height: 112.28rpx; } .pictch { background: #fff; font-weight: 700; position: relative; &::before { position: absolute; left: 0; top: 0; content: ''; display: inline-block; width: 3px; height: 100%; background-color: #F84221; } } } .right_storee { flex: 1; width: 557.89rpx; height: 100%; overflow-y: auto; overflow-x: hidden; overflow: hidden; padding: 0 12.28rpx; background-color: #fff; } .banner { width: 100%; height: 131.58rpx; border-radius: 5px; } .tabs_box { width: 100%; margin: 0 auto; height: 80.7rpx; border-top: 1px solid #E7E6E4; background-color: #fff; padding: 0 21.05rpx; } .active { font-weight: 700; color: #F84221; } .item_cont { width: 100%; // height: 147.37rpx; padding: 17.54rpx 28.07rpx; background-color: #fff; margin-top: 28.07rpx; border-radius: 8px; .item-left { .img { width: 98.25rpx; height: 98.25rpx; border-radius: 100px; } } .item-right { margin-left: 21.05rpx; .store_name { margin-bottom: 8.77rpx; .sales_volume { font-size: 28.07rpx; color: #666; margin-left: 52.63rpx; } .name { flex: 1; width: 245.61rpx; font-size: 31.58rpx; // font-weight: bold; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } } .msg { .category_name { color: $uni-theme-color; } .scope { flex: 1; width: 350.88rpx; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; &::before { content: '|'; margin: 0 10.53rpx; } } } } } .head-wrapper { z-index: 999; display: flex; align-items: center; position: fixed; left: 30rpx; top: 0; /* #ifdef MP */ height: 43px; /* #endif */ /* #ifdef H5 */ height: 114rpx; /* #endif */ } .head-menu { display: flex; align-items: center; height: 54rpx; width: 140rpx; background: rgba(0, 0, 0, .25); border-radius: 27rpx; .iconfont { flex: 1; text-align: center; color: #fff; box-sizing: border-box; &.icon-xiangzuo { border-right: 1px solid #fff; } } } </style>