xuxueyang
2024-08-12 63e00179d4a67f5b3030baa1280846abaa979432
update 更新供应商统计和商家首页的分类样式、供应商的分类等级过滤
已修改5个文件
已添加1个文件
475 ■■■■■ 文件已修改
manifest.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/home/components/home-category.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/home/supplier-home.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sub_pages/customer/shop/shop-trade.vue 331 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sub_pages/customer/shop/shop.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
sub_pages/supplier/flower-manage/flower-add.vue 124 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manifest.json
@@ -49,7 +49,7 @@
    "quickapp" : {},
    /* 快应用特有相关 */
    "mp-weixin" : {
        "appid" : "wx6d0ecc4e18710458",
        "appid" : "wx1441324401626290",
        "setting" : {
            "urlCheck" : false,
            "es6" : true,
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
            };
        }
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天成交
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;">
                &nbsp;
            </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&&currentCategory.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>
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 {
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'}`, {