From 63e00179d4a67f5b3030baa1280846abaa979432 Mon Sep 17 00:00:00 2001 From: xuxueyang <xuxy@fengyuntec.com> Date: 星期一, 12 八月 2024 15:25:58 +0800 Subject: [PATCH] update 更新供应商统计和商家首页的分类样式、供应商的分类等级过滤 --- sub_pages/supplier/flower-manage/flower-add.vue | 124 +++++++++++---- sub_pages/customer/shop/shop-trade.vue | 331 +++++++++++++++++++++++++++++++++++++++++ manifest.json | 2 pages/home/supplier-home.vue | 6 sub_pages/customer/shop/shop.vue | 2 pages/home/components/home-category.vue | 10 + 6 files changed, 436 insertions(+), 39 deletions(-) diff --git a/manifest.json b/manifest.json index 782394c..2848179 100644 --- a/manifest.json +++ b/manifest.json @@ -49,7 +49,7 @@ "quickapp" : {}, /* 快应用特有相关 */ "mp-weixin" : { - "appid" : "wx6d0ecc4e18710458", + "appid" : "wx1441324401626290", "setting" : { "urlCheck" : false, "es6" : true, diff --git a/pages/home/components/home-category.vue b/pages/home/components/home-category.vue index a162895..8ddb38c 100644 --- a/pages/home/components/home-category.vue +++ b/pages/home/components/home-category.vue @@ -1,8 +1,8 @@ <template> <view class="home-category"> <view class="flex"> - <view class="t1">{{today}}(今日)第一场交易中</view> - <view class="t2">当前在售</view> + <view class="t1">{{today}}(今日)交易中</view> + <view class="t2">当前在{{tj||0}}售</view> <!-- 加了/api/customer/flower/up/stock --> </view> <view class="m-t-12 flex"> @@ -30,6 +30,11 @@ }) } }) + this.$http.request('get', '/api/customer/flower/up/stock', {}).then(res => { + var data = res.data + this.tj = data || 0 + }) + }, methods: { toList(item) { @@ -45,6 +50,7 @@ return { list: [], today: '', + tj: 0 }; } diff --git a/pages/home/supplier-home.vue b/pages/home/supplier-home.vue index 3faafc4..97c9d4b 100644 --- a/pages/home/supplier-home.vue +++ b/pages/home/supplier-home.vue @@ -53,7 +53,7 @@ <view class="flex tj-container" v-if="selftype==='supplier'"> <view class="tj-each"> <view class="num"> - {{tj.dealCountLastMonth||0}}单 + {{tj.dealCountLastMonth||0}}扎 </view> <view class="name"> 上月成交 @@ -61,7 +61,7 @@ </view> <view class="tj-each"> <view class="num"> - {{tj.dealCountToday||0}}单 + {{tj.dealCountToday||0}}扎 </view> <view class="name"> 今日成交 @@ -69,7 +69,7 @@ </view> <view class="tj-each"> <view class="num"> - {{tj.dealCountDay30||0}}单 + {{tj.dealCountDay30||0}}扎 </view> <view class="name"> 近30天成交 diff --git a/sub_pages/customer/shop/shop-trade.vue b/sub_pages/customer/shop/shop-trade.vue new file mode 100644 index 0000000..dbd7a58 --- /dev/null +++ b/sub_pages/customer/shop/shop-trade.vue @@ -0,0 +1,331 @@ +<template> + <view class="container-trade"> + <view class="canteen-items"> + <view v-if="(!list||list.length==0)&&true" style="width: 100%;min-height: 200rpx;"> + + </view> + <no-data v-if="(!list||list.length==0)&&true" style="width: 100%;margin-top: 220rpx;"></no-data> + <view class="" style="display: flex;flex-wrap: inherit;" v-else> + <view class="type-list"> + <view v-for="(item,index) of list" @click="changeType(item)" + :class="[query.categoryId===item.id?'current':'']" :key="index" class="p10 flex type-item"> + {{item.name || '-'}} + </view> + </view> + <view class="canteen-item-container"> + + <view v-for="(item,index) of listFilter" :key="item.id" class="canteen-item list flex" + @click.stop="toDetailList(item)"> + <view class="m-r-10"> + <image :src="item.imageUrl" :class="[!item.stock?'':'']" mode="scaleToFill" class="cover" + :lazy-load="true"> + </image> + </view> + <view class="cateen_infos list"> + <view class="title">{{item.name}}</view> + <view class="price">¥{{item.priceLow || 0}}-{{item.priceHigh||0}}</view> + <view class="desc">在售 {{item.stock||'0'}} 扎</view> + </view> + + </view> + + + </view> + </view> + + </view> + + + + + + <uni-popup ref="popup_param" type="bottom"> + <view class="component-popup_input_all" v-if="currentCategory&¤tCategory.params"> + <view class="text-center m-b-40" style="font-size: 48rpx;font-weight: 600;">商品参数设置</view> + <!-- 输入框--> + <view v-for="(item,i) in currentCategory.params" :key="i" class="m-t-20"> + <view class="title topic-font" style="font-size: 40rpx;font-weight: 600;">{{item.name}}</view> + <view class="m-t-12 flex value-items"> + <view class="value-item" @click="updateValue(item,each)" :class="[item.value===each?'cur':'']" + v-for="(each, j) in item.values" :key="j"> + {{each || '-'}} + </view> + </view> + </view> + <view class="button-space"></view> + <view> + <view class="button-green button-white" @click="closeParamPop">关闭</view> + <view class="button-green" @click="updateParamsAndSearch">查询</view> + </view> + </view> + </uni-popup> + </view> +</template> + +<script> + import { + mapState + } from 'vuex' + export default { + props: { + catgoryTree: [], + supplierId: '', + }, + data() { + return { + list: [], + showpop: false, + query: { + name: '', + categoryId: '', + }, + currentCategory: {}, + type: 'category', //supplier + + + } + }, + + + methods: { + changeSearchType() { + if (this.type == 'category') { + this.type = 'supplier' + this.query.name = '' + } else { + this.type = 'category' + this.query.name = '' + } + }, + refInit(catgoryTree) { + this.list = catgoryTree || [] + if (this.list.length > 0) { + this.query.categoryId = this.list[0].id || '' + this.currentCategory = this.list[0] || {} + } + }, + async updateParamsAndSearch() { + //todo 设置参数并查询 + await this.refreshList() + this.$refs.popup_param.close() + }, + openParamPop() { + //todo 同时设置查询参数为空吧 + this.$refs.popup_param.open() + }, + closeParamPop() { + this.$refs.popup_param.close() + }, + buttonSearchFlow() { + + if (this.type == 'category') { + //根据分类名称查询 + this.$message.showLoading() + this.$http.request('get', '/api/customer/flower/category/tree', { + params: { + name: this.query.name || '' + } + }).then(res => { + var data = res.data + this.list = data || [] + if (this.list.length > 0) { + this.query.categoryId = this.list[0].id || '' + this.currentCategory = this.list[0] || {} + } else { + this.query.categoryId = '' + this.currentCategory = {} + } + }).finally(() => { + this.$message.hideLoading() + }) + } else { + uni.navigateTo({ + url: '/sub_pages/customer/trade/list?' + 'supplierName=' + this.query.name + }) + + } + }, + toDetailList(item) { + //去商品列表页面 + console.log('toDetailList', this.supplierId) + uni.navigateTo({ + url: `/sub_pages/customer/trade/list?categoryId=${item.id}&supplierId=${this.supplierId||''}` + }) + }, + changeType(item) { + this.query.categoryId = item.id || '' + this.currentCategory = item + }, + + + async submitGood() { + var values = [] + for (var item of this.list) { + if (item.shopnum > 0) { + values.push({ + id: item.id, + num: item.shopnum + }) + } + } + } + }, + computed: { + ...mapState({ + address: state => { + return state.defaultaddress || {} + }, + }), + listFilter() { + if (this.query.categoryId) { + var arr = [] + if (this.list && this.list.length > 0) { + for (var item of this.list) { + if (item.id === this.query.categoryId || item.id === this.query.categoryId) { + // arr.push(item) + return item.children || [] + } + } + } + return arr + } else { + return [] + } + + }, + } + } +</script> + +<style lang="scss" scoped> + .container-trade { + background-color: #FFFFFF; + padding-top: 20rpx; + + .search-container { + margin: 0rpx 30rpx 20rpx 30rpx; + } + + + + .type-list { + max-width: 178rpx; + width: 178rpx; + min-width: 178rpx; + background: #EEF7F5; + border-radius: 8rpx; + min-height: calc(100vh - 500rpx); + max-height: calc(100vh - 500rpx); + overflow-y: scroll; + margin-right: 16rpx; + + .type-item { + text-align: center; + font-weight: 400; + font-size: 28rpx; + color: #000000; + display: block; + line-height: 88rpx; + // padding-left: 30rpx; + // padding-right: 30rpx; + } + + .type-item.current { + font-weight: 600; + font-size: 28rpx; + color: #04BA97; + } + } + + .title-before-blue.green { + padding-left: 30rpx; + padding-bottom: 0rpx; + } + + .title-before-blue:before { + color: #04BA97; + font-weight: 600; + min-width: 14rpx; + background: #04BA97; + border-radius: 8rpx; + display: inline-block; + } + + + .canteen-items { + // margin-left: 30rpx; + + .canteen-item { + margin: 0 auto; + // width: 164rpx; + // width: 690rpx; + // max-width: 690rpx; + // min-height: 266rpx; + background: #FFFFFF; + margin-bottom: 10rpx; + // max-width: 164rpx; + + .cover { + width: 164rpx; + height: 164rpx; + background-size: 100% 100%; + border-radius: 8rpx; + border: 2rpx solid #f8f8f8; + } + + .title { + font-weight: 500; + font-size: 28rpx; + color: #000000; + line-height: 40rpx; + // min-height: 80rpx; + text-align: center; + } + + .desc { + margin-top: 8rpx; + font-weight: 400; + font-size: 24rpx; + color: #6E9F66; + line-height: 34rpx; + height: 34rpx; + background-color: rgba(202, 229, 214, 0.57); + border-radius: 4rpx; + text-align: center; + + } + + .price { + font-weight: 400; + font-size: 24rpx; + color: #CF0000; + line-height: 34rpx; + text-align: left; + } + + + + + + } + + .canteen-item-container { + width: 100%; + min-height: 300rpx; + max-height: calc(100vh - 500rpx); + overflow-y: scroll; + } + + } + + .canteen-footer-shop { + position: absolute; + position: fixed; + left: 30rpx; + bottom: 30rpx; + } + + + + } +</style> \ No newline at end of file diff --git a/sub_pages/customer/shop/shop.vue b/sub_pages/customer/shop/shop.vue index c83a059..d653f30 100644 --- a/sub_pages/customer/shop/shop.vue +++ b/sub_pages/customer/shop/shop.vue @@ -218,7 +218,7 @@ </template> <script> - import trade from '@/sub_pages/customer/trade/trade.vue' + import trade from './shop-trade.vue' import http from "../../../plugins/http"; export default { diff --git a/sub_pages/supplier/flower-manage/flower-add.vue b/sub_pages/supplier/flower-manage/flower-add.vue index 312d21f..a501662 100644 --- a/sub_pages/supplier/flower-manage/flower-add.vue +++ b/sub_pages/supplier/flower-manage/flower-add.vue @@ -98,7 +98,11 @@ <view class="form-item before-line"> <view class="label required">商品等级</view> <view class="m-l-a m-r-0 flex " :class="[!dto.level?'desc-gray':'']" @click="()=>{ - show_select_level=true + if(dto.category){ + show_select_level=true + }else{ + $message.showToast('请选择分类') + } }"> <view>{{dto.levelStr||dto.level || '请选择'}}</view> <u-icon class="m-l-a" name="arrow-right"></u-icon> @@ -158,7 +162,7 @@ </view> </view> <view v-if="dto.video"> - <video :src="dto.video" :auto-pause-if-navigate="true" style="display: block;margin: 0 auto;"></video> + <video :src="dto.video" :auto-pause-if-navigate="true" style="display: block;margin: 0 auto;"></video> </view> <view class="form-item bottom-border-no"> <view class="label">商品描述</view> @@ -264,6 +268,7 @@ columns_categorys_dict: {}, columns_categorys_search: '', columns_levels: [], + columns_levels_all: [], // columns_params: [], //弹窗选择具体的值 // cancel: { // color: '#999', @@ -303,6 +308,7 @@ } }).then(res => { var data = res.data + this.columns_levels_all = data || [] this.columns_levels = [data || []] // this.columns_levels[0].unshift({ // label: '全部', @@ -337,17 +343,17 @@ }, methods: { - updateValue(item, value) { - - if (item.name == '优点' || item.name === '缺点') { - if (item.value.indexOf(value) < 0) { - item.value.push(value) - } else { - item.value.splice(item.value.indexOf(value), 1) - } - } else { - //单选 - item.value = [value] + updateValue(item, value) { + + if (item.name == '优点' || item.name === '缺点') { + if (item.value.indexOf(value) < 0) { + item.value.push(value) + } else { + item.value.splice(item.value.indexOf(value), 1) + } + } else { + //单选 + item.value = [value] } this.$forceUpdate() @@ -365,14 +371,42 @@ var currentnode = this.columns_categorys_dict['@' + e.detail.value[e.detail.value.length - 1] .value] let tmpe = e + + if (this.dto.category && this.dto.category !== currentnode.id) { this.$message.confirm('修改分类将清空商品参数,确定修改吗').then(async res => { // console.log('currentnode',currentnode,this.columns_categorys_dict,'@'+e.detail.value[e.detail.value.length - 1].value) this.dto.categoryStr = currentnode.name this.dto.category = currentnode.id + this.dto.name = currentnode.name this.dto.unit = currentnode.unit this.dto.color = currentnode.color + //设置等级 + // console.log('tmpe', currentnode) + if (currentnode.levelLimit) { + + this.columns_levels = [] + var tarr = [] + var filterLevel = currentnode.levelLimit.split(",") + for (var t of this.columns_levels_all) { + if (filterLevel.indexOf(t.value) >= 0) { + tarr.push(t) + } + } + this.columns_levels = [tarr] + //如果不包含等级需要清除 + if (this.dto.level) { + if (filterLevel.indexOf(this.dto.level) >= 0) { + + } else { + this.dto.level = '' + this.dto.levelStr = '' + } + } + } else { + this.columns_levels = [this.columns_levels_all] + } //递归获取category的其他数据,用来做map? this.$message.showLoading() await this.refresh_category() @@ -382,6 +416,31 @@ this.$refs.picker_category.onchange(tmpe.detail.value) }) } else { + //设置等级 + // console.log('tmpe', currentnode) + if (currentnode.levelLimit) { + + this.columns_levels = [] + var tarr = [] + var filterLevel = currentnode.levelLimit.split(",") + for (var t of this.columns_levels_all) { + if (filterLevel.indexOf(t.value) >= 0) { + tarr.push(t) + } + } + this.columns_levels = [tarr] + //如果不包含等级需要清除 + if (this.dto.level) { + if (filterLevel.indexOf(this.dto.level) >= 0) { + + } else { + this.dto.level = '' + this.dto.levelStr = '' + } + } + } else { + this.columns_levels = [this.columns_levels_all] + } this.dto.categoryStr = currentnode.name this.dto.category = currentnode.id this.dto.name = currentnode.name @@ -511,9 +570,10 @@ } else { k.value = k.value.split(',') || [] } - } + } // console.log('init params',this.dto.params) } + } }, @@ -540,17 +600,17 @@ // // console.log('this.dto', this.dto) if (!this.dto.bannerList) { this.dto.bannerList = [] - } - if(this.dto.params){ - for (var k of this.dto.params) { - if (!k.value) { - k.value = [] - } else { - k.value = k.value.split(',') || [] - } - } - } - + } + if (this.dto.params) { + for (var k of this.dto.params) { + if (!k.value) { + k.value = [] + } else { + k.value = k.value.split(',') || [] + } + } + } + // if (this.dto.category) { // await this.refresh_category() // } @@ -595,8 +655,8 @@ this.$message.showToast(`${field.name}信息未填写`) return } - } - + } + if (this.dto.params.length < 1) { this.$message.showToast('商品参数详情未设置') return @@ -625,11 +685,11 @@ // this.$message.showToast('1') // return - var dto = JSON.parse(JSON.stringify(this.dto)) - if(dto.params){ - for(var k of dto.params){ - k.value = k.value.join(",") - } + var dto = JSON.parse(JSON.stringify(this.dto)) + if (dto.params) { + for (var k of dto.params) { + k.value = k.value.join(",") + } } this.$message.showLoading() const re = await this.$http.request('post', `/api/supplier/flower/list/${this.id?'edit':'new'}`, { -- Gitblit v1.9.3