xuxueyang
2024-07-23 89de2bbaf2e81ab3fa7a8c2aad3b76bc81033d3d
update 订单功能(花店端)
已修改9个文件
已添加3个文件
3565 ■■■■■ 文件已修改
mixin/mixin.js 928 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages.json 483 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/home/components/home-price.vue 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/login/supplier-login.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/login/supplier-reg.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
store/index.js 791 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sub_pages/customer/self/collect.vue 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sub_pages/customer/self/follow.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sub_pages/customer/shopping/confirm.vue 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sub_pages/customer/shopping/shopping.vue 361 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sub_pages/customer/trade/detail.vue 607 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sub_pages/supplier/flower-manage/flower-add.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mixin/mixin.js
@@ -1,496 +1,506 @@
import {
    mapState
    mapState
} from 'vuex'
import store from "../store";
import environments from '@/environments'
const mixinsCommon = {
    computed: {
        ...mapState({
            hasLogin: state => {
                // console.log('computed hasLogin',state.hasLogin,state)
                return state.hasLogin || false
            },
            selftype: state => {
                return (state.currentInfo || {}).type || ''
            },
            currentInfo: state => {
                return state.currentInfo || {}
            },
            cache_address: state => {
                return state.cache_address || {}
            },
            cache_user: state => {
                return state.currentInfo || {}
            },
            sign: state => {
                return state.sign || {}
            },
            // currentEnId: state=>{
            //     // console.log('currentEnId',state.currentInfo.enId,state.currentInfo)
            //     return state.currentInfo.enId || ''
            // }
        }),
    },
    data() {
        return {
            list: [],
            query: {},
            page: {
                size: 10,
                current: 1,
                total: 0,
            },
            style: {
                'color': '#fff'
            },
            listApi: '',
            regUserName: '用户-' + this.getRandomName(Math.floor(Math.random() * (6 - 2) + 3)),
            regAvatarUrl: 'https://youzhen123.oss-cn-huhehaote.aliyuncs.com/WechatOwnerProperty/images/mrtx.png',
    computed: {
        ...mapState({
            hasLogin: state => {
                // console.log('computed hasLogin',state.hasLogin,state)
                return state.hasLogin || false
            },
            selftype: state => {
                return (state.currentInfo || {}).type || ''
            },
            currentInfo: state => {
                return state.currentInfo || {}
            },
            cache_address: state => {
                return state.cache_address || {}
            },
            cache_user: state => {
                return state.currentInfo || {}
            },
            sign: state => {
                return state.sign || {}
            },
            // currentEnId: state=>{
            //     // console.log('currentEnId',state.currentInfo.enId,state.currentInfo)
            //     return state.currentInfo.enId || ''
            // }
        }),
    },
    data() {
        return {
            list: [],
            query: {},
            page: {
                size: 10,
                current: 1,
                total: 0,
            },
            style: {
                'color': '#fff'
            },
            listApi: '',
            regUserName: '用户-' + this.getRandomName(Math.floor(Math.random() * (6 - 2) + 3)),
            regAvatarUrl: 'https://youzhen123.oss-cn-huhehaote.aliyuncs.com/WechatOwnerProperty/images/mrtx.png',
        }
    },
    methods: {
        onChooseavatar(e) {
            let self = this;
            let {
                avatarUrl
            } = e.detail;
            this.regAvatarUrl = avatarUrl
            console.log('avatarUrl', this.regAvatarUrl)
        },
        onBindblur(e) {
            this.regUserName = e.detail.value; // 获取微信昵称
        },
        onBindinput(e) {
            this.regUserName = e.detail.value; // 获取微信昵称
        },
        randomAccess(min, max) {
            return Math.floor(Math.random() * (min - max) + max)
        },
        getRandomName(NameLength) {
            let name = ""
            for (let i = 0; i < NameLength; i++) {
                let unicodeNum = ""
                unicodeNum = this.randomAccess(0x4e00, 0x9fa5).toString(16)
                name += this.decodeUnicode(unicodeNum)
            }
            return name
        },
        decodeUnicode(str) {
            //Unicode显示方式是\u4e00
            str = "\\u" + str
            str = str.replace(/\\/g, "%");
            //转换中文
            str = unescape(str);
            //将其他受影响的转换回原来
            str = str.replace(/%/g, "\\");
            return str;
        },
        async onWxCheckSubmit() {
            if (this.regUserName == '微信用户') {
                this.$message.showToast('昵称不合规,不可以叫做:微信用户哈~')
                return
            }
            //保存一下
            //先上传图片
            if (this.regAvatarUrl ===
                'https://youzhen123.oss-cn-huhehaote.aliyuncs.com/WechatOwnerProperty/images/mrtx.png') {
                var picture = this.regAvatarUrl
                //更新接口
                this.$message.showLoading()
                const {
                    code
                } = await this.$http.request('post', "/api/current/user/update", {
                    data: {
                        ...this.dto,
                        nickName: this.regUserName,
                        picture: picture
                    }
                })
        }
    },
    methods: {
        onChooseavatar(e) {
            let self = this;
            let {
                avatarUrl
            } = e.detail;
            this.regAvatarUrl = avatarUrl
            console.log('avatarUrl', this.regAvatarUrl)
        },
        onBindblur(e) {
            this.regUserName = e.detail.value; // 获取微信昵称
        },
        onBindinput(e) {
            this.regUserName = e.detail.value; // 获取微信昵称
        },
        randomAccess(min, max) {
            return Math.floor(Math.random() * (min - max) + max)
        },
        getRandomName(NameLength) {
            let name = ""
            for (let i = 0; i < NameLength; i++) {
                let unicodeNum = ""
                unicodeNum = this.randomAccess(0x4e00, 0x9fa5).toString(16)
                name += this.decodeUnicode(unicodeNum)
            }
            return name
        },
        decodeUnicode(str) {
            //Unicode显示方式是\u4e00
            str = "\\u" + str
            str = str.replace(/\\/g, "%");
            //转换中文
            str = unescape(str);
            //将其他受影响的转换回原来
            str = str.replace(/%/g, "\\");
            return str;
        },
        async onWxCheckSubmit() {
            if (this.regUserName == '微信用户') {
                this.$message.showToast('昵称不合规,不可以叫做:微信用户哈~')
                return
            }
            //保存一下
            //先上传图片
            if (this.regAvatarUrl ===
                'https://youzhen123.oss-cn-huhehaote.aliyuncs.com/WechatOwnerProperty/images/mrtx.png') {
                var picture = this.regAvatarUrl
                //更新接口
                this.$message.showLoading()
                const {
                    code
                } = await this.$http.request('post', "/api/current/user/update", {
                    data: {
                        ...this.dto,
                        nickName: this.regUserName,
                        picture: picture
                    }
                })
                this.$message.hideLoading()
                this.$forceUpdate()
                if (code == 0) {
                    this.$refs.popup_info.close()
                    this.$message.showToast('设置成功')
                    this.currentInfo.picture = picture
                    this.currentInfo.nickName = this.regUserName
                } else {
                this.$message.hideLoading()
                this.$forceUpdate()
                if (code == 0) {
                    this.$refs.popup_info.close()
                    this.$message.showToast('设置成功')
                    this.currentInfo.picture = picture
                    this.currentInfo.nickName = this.regUserName
                } else {
                }
            } else {
                this.$http.upload(this.regAvatarUrl).then(async res => {
                    var picture = res.data && res.data.length > 0 && res.data[0].url || ''
                    //更新接口
                    this.$message.showLoading()
                    const {
                        code
                    } = await this.$http.request('post', "/api/current/user/update", {
                        data: {
                            ...this.currentInfo,
                            nickName: this.regUserName,
                            picture: picture
                        }
                    })
                }
            } else {
                this.$http.upload(this.regAvatarUrl).then(async res => {
                    var picture = res.data && res.data.length > 0 && res.data[0].url || ''
                    //更新接口
                    this.$message.showLoading()
                    const {
                        code
                    } = await this.$http.request('post', "/api/current/user/update", {
                        data: {
                            ...this.currentInfo,
                            nickName: this.regUserName,
                            picture: picture
                        }
                    })
                    this.$message.hideLoading()
                    this.$forceUpdate()
                    if (code == 0) {
                        this.$refs.popup_info.close()
                        this.$message.showToast('设置成功')
                        this.currentInfo.picture = picture
                        this.currentInfo.nickName = this.regUserName
                    } else {
                    this.$message.hideLoading()
                    this.$forceUpdate()
                    if (code == 0) {
                        this.$refs.popup_info.close()
                        this.$message.showToast('设置成功')
                        this.currentInfo.picture = picture
                        this.currentInfo.nickName = this.regUserName
                    } else {
                    }
                })
            }
        },
                    }
                })
            }
        },
        async getUserProfile(e) {
            this.$message.showLoading()
            const res = await wx.getUserProfile({
                desc: '用于完善会员资料',
            });
            console.log(res);
            this.$message.hideLoading()
            this.login_Wx(res.userInfo.avatarUrl, res.userInfo.nickName)
        },
        login_Wx(imgurl, nickname) {
            //获取openId
            // /wx/jscode2session
            let inviter = this.$storage.getItem('inviter') || ''
            let inviterName = this.$storage.getItem('inviterName') || ''
            //有效24小时
            if (inviter) {
                var inviterTime = this.$storage.getItem('inviterTime')
                if (new Date().getTime() > parseInt(inviterTime) + 1000 * 3600 * 24) {
                    inviter = ''
                    inviterName = ''
                    this.$storage.removeItem('inviter')
                    this.$storage.removeItem('inviterTime')
                    this.$storage.removeItem('inviterName')
                }
            }
        async getUserProfile(e) {
            this.$message.showLoading()
            const res = await wx.getUserProfile({
                desc: '用于完善会员资料',
            });
            console.log(res);
            this.$message.hideLoading()
            this.login_Wx(res.userInfo.avatarUrl, res.userInfo.nickName)
        },
        login_Wx(imgurl, nickname) {
            //获取openId
            // /wx/jscode2session
            let inviter = this.$storage.getItem('inviter') || ''
            let inviterName = this.$storage.getItem('inviterName') || ''
            //有效24小时
            if (inviter) {
                var inviterTime = this.$storage.getItem('inviterTime')
                if (new Date().getTime() > parseInt(inviterTime) + 1000 * 3600 * 24) {
                    inviter = ''
                    inviterName = ''
                    this.$storage.removeItem('inviter')
                    this.$storage.removeItem('inviterTime')
                    this.$storage.removeItem('inviterName')
                }
            }
            const tmp = this;
            this.$message.showLoading()
            this.openid = this.$storage.getItem('openid');
            this.tel = this.$storage.getItem('tel');
            console.log('info,info,info,info,info,info', this.openid, this.tel);
            if (!!this.openid && !!this.tel) {
                // this.login = true;
            } else {
                // this.login = false;
                console.log('wx.login');
                wx.login({
                    success: async res => {
                        if (res.code) {
                            //微信登录成功 已拿到code
                            // tmp.login = true;
                            // tmp.jsCode = res.code; //保存获取到的code
                            console.log('abcd', res.code);
                            // this.$http.request('post',`/api/login/wechat`,{data:{code:tmp.jsCode}})
                            this.$storage.setItem('jsCode', res.code);
                            const res2 = await wx.getUserInfo();
                            console.log('res', res2);
                            this.tcode = res.code || ''
                            // if (nickname == '微信用户' || true) {
                            //     //跳出弹出框,获取具体用户信息
                            //     tmp.$message.hideLoading()
            const tmp = this;
            this.$message.showLoading()
            this.openid = this.$storage.getItem('openid');
            this.tel = this.$storage.getItem('tel');
            console.log('info,info,info,info,info,info', this.openid, this.tel);
            if (!!this.openid && !!this.tel) {
                // this.login = true;
            } else {
                // this.login = false;
                console.log('wx.login');
                wx.login({
                    success: async res => {
                        if (res.code) {
                            //微信登录成功 已拿到code
                            // tmp.login = true;
                            // tmp.jsCode = res.code; //保存获取到的code
                            console.log('abcd', res.code);
                            // this.$http.request('post',`/api/login/wechat`,{data:{code:tmp.jsCode}})
                            this.$storage.setItem('jsCode', res.code);
                            const res2 = await wx.getUserInfo();
                            console.log('res', res2);
                            this.tcode = res.code || ''
                            // if (nickname == '微信用户' || true) {
                            //     //跳出弹出框,获取具体用户信息
                            //     tmp.$message.hideLoading()
                            //     this.$refs.popup_info.open()
                            //     this.$refs.popup_info.open()
                            // } else {
                            await this.$store.dispatch('loginwx', {
                                code: res.code,
                                imgurl: imgurl,
                                nickname: nickname,
                                inviter: inviter
                            });
                            tmp.$message.hideLoading()
                            this.$forceUpdate()
                            //延迟,如果用户昵称是微信用户的话?
                            setTimeout(() => {
                                if (tmp.currentInfo && tmp.currentInfo.id) {
                                    if (tmp.currentInfo.nickName == '微信用户') {
                                        tmp.$refs.popup_info && tmp.$refs.popup_info.open()
                                    }
                                }
                            }, 500)
                            // }
                            // } else {
                            await this.$store.dispatch('loginwx', {
                                code: res.code,
                                imgurl: imgurl,
                                nickname: nickname,
                                inviter: inviter
                            });
                            tmp.$message.hideLoading()
                            this.$forceUpdate()
                            //延迟,如果用户昵称是微信用户的话?
                        } else {
                            tmp.$message.hideLoading()
                            tmp.$message.showToast('微信登录失败');
                            setTimeout(() => {
                                if (tmp.currentInfo && tmp.currentInfo.id) {
                                    if (tmp.currentInfo.nickName == '微信用户') {
                                        tmp.$refs.popup_info && tmp.$refs.popup_info.open()
                                    }
                                }
                            }, 500)
                            // }
                        }
                    },
                    error: res => {
                        console.log('wx.login error', res);
                        tmp.$message.hideLoading()
                        } else {
                            tmp.$message.hideLoading()
                            tmp.$message.showToast('微信登录失败');
                        tmp.$message.showToast('微信授权失败');
                    }
                });
            }
        },
                        }
                    },
                    error: res => {
                        console.log('wx.login error', res);
                        tmp.$message.hideLoading()
        previewImg(url) {
            if (url) {
                uni.previewImage({
                    urls: [url]
                })
            }
        },
        checkFormValues(dto, keys) {
            if (keys) {
                for (var key of keys) {
                    if (!dto[key]) {
                        return false
                    }
                }
            }
            return true
        },
        async refreshList(){
            this.page.current = 1
            await this.getList()
        },
        async getList(type='get') {
            if (this.listApi) {
                this.$message.showLoading()
                const {
                    data
                } = await this.$http.request(type, this.listApi, {
                    params: {
                        ...this.query,
                        ...this.page
                    },
                    data:{
                        ...this.query,
                        ...this.page
                    }
                })
                if (data) {
                    if (this.page.current == 1) {
                        this.list = data.records || []
                    } else {
                        //根据id去重正常
                        var ids = []
                        for (var item of this.list) {
                            ids.push(item.id)
                        }
                        for (var item of data.records) {
                            if (ids.indexOf(item.id) < 0) {
                                this.list.push(item)
                            }
                        }
                        tmp.$message.showToast('微信授权失败');
                    }
                });
            }
        },
                    }
                    this.page.total = data.total || 0
                }
                this.$message.hideLoading()
            }
        previewImg(url) {
            if (url) {
                uni.previewImage({
                    urls: [url]
                })
            }
        },
        checkFormValues(dto, keys) {
            if (keys) {
                for (var key of keys) {
                    if (!dto[key]) {
                        return false
                    }
                }
            }
            return true
        },
        async refreshList() {
            this.page.current = 1
            await this.getList()
        },
        async getList(type = 'get') {
            if (this.listApi) {
                this.$message.showLoading()
                const {
                    data
                } = await this.$http.request(type, this.listApi, {
                    params: {
                        ...this.query,
                        ...this.page
                    },
                    data: {
                        ...this.query,
                        ...this.page
                    }
                })
                if (data) {
                    if (this.page.current == 1) {
                        this.list = data.records || []
                    } else {
                        //根据id去重正常
                        var ids = []
                        for (var item of this.list) {
                            ids.push(item.id)
                        }
                        for (var item of data.records) {
                            if (ids.indexOf(item.id) < 0) {
                                this.list.push(item)
                            }
                        }
        },
        async getMore(type='get') {
            if (this.page.total > this.page.current * this.page.size) {
                this.page.current += 1
                await this.getList(type)
            }
        },
        backHome() {
            uni.reLaunch({
                url: '/pages/home/home'
            })
        },
        goto(url, check = false) {
            if (check) {
                console.log('currentInfo', this.currentInfo)
                if (!this.currentInfo.id) {
                    this.$message.showToast('请先登陆')
                    return
                }
                    }
                    this.page.total = data.total || 0
                }
                this.$message.hideLoading()
            }
            }
            uni.navigateTo({
                url
            })
        },
        backpage() {
            // this.$router.go(-1)
            uni.navigateBack()
        }
        // #ifdef APP || H5
        ,
        async appdownload(url, name = '') {
                await this.$message.confirm('确定下载此文件吗')
                let _this = this
                if (url) {
                    // var url2 = environments.httpBaseUri + `/api/download/file?fileName=${name}&filePath=` + url
                    // uni.downloadFile({
                    //     url: url2,
                    //     success: (res) => {
                    //         if (res.statusCode === 200) {
                    //             _this.$message.showToast('下载成功')
                    //         } else {
                    //             console.log(res)
                    //             _this.$message.showToast('下载失败')
                    //         }
                    //     },
                    //     fail: (res) => {
                    //         console.log(res)
                    //         _this.$message.showToast('下载失败')
                    //     }
                    // });
                    _this.$message.showLoading()
        },
        async getMore(type = 'get') {
            if (this.page.total > this.page.current * this.page.size) {
                this.page.current += 1
                await this.getList(type)
            }
        },
        backHome() {
            uni.reLaunch({
                url: '/pages/home/home'
            })
        },
        goto(url, check = false) {
            if (check) {
                console.log('currentInfo', this.currentInfo)
                if (!this.currentInfo.id) {
                    this.$message.showToast('请先登陆')
                    return
                }
                    uni.downloadFile({
                        url: url, //下载地址接口返回
                        success: (data) => {
                            _this.$message.hideLoading()
                            console.log('success', data)
                            if (data.statusCode === 200) {
                                //文件保存到本地
                                uni.saveFile({
                                    tempFilePath: data.tempFilePath, //临时路径
                                    success: function(res) {
                                        uni.showToast({
                                            icon: 'none',
                                            mask: true,
                                            title: '文件已保存:' + res
                                                .savedFilePath, //保存路径
                                            duration: 2000,
                                        });
                                        setTimeout(() => {
                                            //打开文档查看
                                            uni.openDocument({
                                                filePath: res.savedFilePath,
                                                success: function(res) {
                                                    // console.log('打开文档成功');
                                                }
                                            });
                                        }, 2000)
                                    },
                                    fail: (err) => {
            }
            uni.navigateTo({
                url
            })
        },
        backpage() {
            // this.$router.go(-1)
            uni.navigateBack()
        }
        // #ifdef APP || H5
        ,
        async appdownload(url, name = '') {
            await this.$message.confirm('确定下载此文件吗')
            let _this = this
            if (url) {
                // var url2 = environments.httpBaseUri + `/api/download/file?fileName=${name}&filePath=` + url
                // uni.downloadFile({
                //     url: url2,
                //     success: (res) => {
                //         if (res.statusCode === 200) {
                //             _this.$message.showToast('下载成功')
                //         } else {
                //             console.log(res)
                //             _this.$message.showToast('下载失败')
                //         }
                //     },
                //     fail: (res) => {
                //         console.log(res)
                //         _this.$message.showToast('下载失败')
                //     }
                // });
                _this.$message.showLoading()
                                        console.log(err);
                                        uni.showToast({
                                            icon: 'none',
                                            mask: true,
                                            title: '下载成功保存失败',
                                        });
                                    },
                                });
                            }
                        },
                        fail: (err) => {
                            _this.$message.hideLoading()
                uni.downloadFile({
                    url: url, //下载地址接口返回
                    success: (data) => {
                        _this.$message.hideLoading()
                        console.log('success', data)
                        if (data.statusCode === 200) {
                            //文件保存到本地
                            uni.saveFile({
                                tempFilePath: data.tempFilePath, //临时路径
                                success: function (res) {
                                    uni.showToast({
                                        icon: 'none',
                                        mask: true,
                                        title: '文件已保存:' + res
                                            .savedFilePath, //保存路径
                                        duration: 2000,
                                    });
                                    setTimeout(() => {
                                        //打开文档查看
                                        uni.openDocument({
                                            filePath: res.savedFilePath,
                                            success: function (res) {
                                                // console.log('打开文档成功');
                                            }
                                        });
                                    }, 2000)
                                },
                                fail: (err) => {
                            console.log(err);
                            uni.showToast({
                                icon: 'none',
                                mask: true,
                                title: '失败请重新下载',
                            });
                        },
                    });
                }
            }
            // #endif
            // #ifdef MP
            ,
        async wxdownload(url, name = '') {
            await this.$message.confirm('是否要下载此文件')
            var url2 = environments.httpBaseUri + `/api/download/file?fileName=${name}&filePath=` + url
                                    console.log(err);
                                    uni.showToast({
                                        icon: 'none',
                                        mask: true,
                                        title: '下载成功保存失败',
                                    });
                                },
                            });
                        }
                    },
                    fail: (err) => {
                        _this.$message.hideLoading()
            let that = this
            that.$message.showLoading()
            // wx.sa
            // wx.downloadFile({
            //     url: url2,
            //     success: res => {
            //         that.$message.showToast('下载成功')
                        console.log(err);
                        uni.showToast({
                            icon: 'none',
                            mask: true,
                            title: '失败请重新下载',
                        });
                    },
                });
            }
        }
        // #endif
        // #ifdef MP
        ,
        async wxdownload(url, name = '') {
            await this.$message.confirm('是否要下载此文件')
            var url2 = environments.httpBaseUri + `/api/download/file?fileName=${name}&filePath=` + url
            //     },
            //     fail: res => {
            //         that.$message.showToast('下载失败')
            let that = this
            that.$message.showLoading()
            // wx.sa
            // wx.downloadFile({
            //     url: url2,
            //     success: res => {
            //         that.$message.showToast('下载成功')
            //     },
            //     complete: res => {
            //         that.$message.hideLoading()
            //     }
            // })
            wx.downloadFile({
                url: url,
                timeout: 120000,
                success(res) {
                    that.$message.hideLoading()
                    console.log('res', res)
                    if (res.statusCode === 200) {
                        const filePath = res.tempFilePath
                        if (filePath.endsWith('.jpg') ||
                            filePath.endsWith('.jpeg') ||
                            filePath.endsWith('.png') ||
                            filePath.endsWith('.jpg')) {
                            wx.saveImageToPhotosAlbum({
                                filePath: filePath,
                                success: function(res) {
                                    that.$message.showToast('保存图片成功')
                                },
                                fail: function(res) {
                                    that.$message.showToast('打开文档失败,非支持的类型')
                                }
                            })
            //     },
            //     fail: res => {
            //         that.$message.showToast('下载失败')
                        } else if (filePath.endsWith('.mp4') ||
                            filePath.endsWith('.flv') ||
                            filePath.endsWith('.avi') ||
                            filePath.endsWith('.wmv') ||
                            filePath.endsWith('.mpeg')) {
                            wx.saveVideoToPhotosAlbum({
                                filePath: filePath,
                                success: function(res) {
                                    that.$message.showToast('保存视频成功')
                                },
                                fail: function(res) {
                                    that.$message.showToast('打开文档失败,非支持的类型')
                                }
                            })
            //     },
            //     complete: res => {
            //         that.$message.hideLoading()
            //     }
            // })
            wx.downloadFile({
                url: url,
                timeout: 120000,
                success(res) {
                    that.$message.hideLoading()
                    console.log('res', res)
                    if (res.statusCode === 200) {
                        const filePath = res.tempFilePath
                        if (filePath.endsWith('.jpg') ||
                            filePath.endsWith('.jpeg') ||
                            filePath.endsWith('.png') ||
                            filePath.endsWith('.jpg')) {
                            wx.saveImageToPhotosAlbum({
                                filePath: filePath,
                                success: function (res) {
                                    that.$message.showToast('保存图片成功')
                                },
                                fail: function (res) {
                                    that.$message.showToast('打开文档失败,非支持的类型')
                                }
                            })
                        } else {
                            wx.openDocument({
                                filePath: filePath,
                                showMenu: true, //关键点
                                success: function(res) {
                                    console.log('打开文档成功')
                                },
                                fail: function(res) {
                                    that.$message.showToast('打开文档失败,非支持的类型')
                                }
                            })
                        }
                    } else {
                        that.$message.showToast('下载失败,服务器内部错误')
                        } else if (filePath.endsWith('.mp4') ||
                            filePath.endsWith('.flv') ||
                            filePath.endsWith('.avi') ||
                            filePath.endsWith('.wmv') ||
                            filePath.endsWith('.mpeg')) {
                            wx.saveVideoToPhotosAlbum({
                                filePath: filePath,
                                success: function (res) {
                                    that.$message.showToast('保存视频成功')
                                },
                                fail: function (res) {
                                    that.$message.showToast('打开文档失败,非支持的类型')
                                }
                            })
                    }
                },
                fail: res => {
                    that.$message.hideLoading()
                    that.$message.showToast('下载失败')
                },
                complete: res => {
                        } else {
                            wx.openDocument({
                                filePath: filePath,
                                showMenu: true, //关键点
                                success: function (res) {
                                    console.log('打开文档成功')
                                },
                                fail: function (res) {
                                    that.$message.showToast('打开文档失败,非支持的类型')
                                }
                            })
                        }
                    } else {
                        that.$message.showToast('下载失败,服务器内部错误')
                }
            })
        }
        // #endif
    }
                    }
                },
                fail: res => {
                    that.$message.hideLoading()
                    that.$message.showToast('下载失败')
                },
                complete: res => {
                }
            })
        }
        // #endif
        // #ifdef PUB_CUSTOMER
        ,
        async submitShopping(dto) {
            //提交到购物车中
            this.$message.showLoading()
            await this.$store.dispatch('submitShopping',dto);
            this.$message.hideLoading()
        }
        // #endif
    }
}
export default mixinsCommon
pages.json
@@ -1,240 +1,255 @@
{
    // 如果您是通过uni_modules形式引入uView,可以忽略此配置
    "easycom": {
        "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
    },
    "pages": [{
            "path": "pages/login/supplier-login",
            "style": {
                "navigationBarTitleText": "登录",
                "enablePullDownRefresh": false,
                "navigationStyle": "custom"
            }
        }, {
            "path": "pages/home/supplier-home",
            "style": {
                "navigationBarTitleText": "首页",
                "enablePullDownRefresh": true,
                "navigationStyle": "custom"
            }
  // 如果您是通过uni_modules形式引入uView,可以忽略此配置
  "easycom": {
    "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
  },
  "pages": [
    {
      "path": "pages/login/supplier-login",
      "style": {
        "navigationBarTitleText": "登录",
        "enablePullDownRefresh": false,
        "navigationStyle": "custom"
      }
    },
    {
      "path": "pages/home/supplier-home",
      "style": {
        "navigationBarTitleText": "首页",
        "enablePullDownRefresh": true,
        "navigationStyle": "custom"
      }
    },
    // #ifdef PUB_CUSTOMER
    {
      "path": "pages/home/home",
      "style": {
        "navigationBarTitleText": "首页",
        "enablePullDownRefresh": true,
        "navigationStyle": "custom"
      }
    },
    {
      "path": "pages/user/address/address",
      "style": {
        "navigationBarTitleText": "收货地址",
        "enablePullDownRefresh": false
      }
    },
    // #endif
        },
        // #ifdef PUB_CUSTOMER
        {
            "path": "pages/home/home",
            "style": {
                "navigationBarTitleText": "首页",
                "enablePullDownRefresh": true,
                "navigationStyle": "custom"
            }
    // #ifdef PUB_SUPPLIER
    {
      "path": "pages/login/supplier-reg",
      "style": {
        "navigationBarTitleText": "申请入驻",
        "navigationStyle": "custom"
      }
    },
    // #endif
        },
        {
            "path": "pages/user/address/address",
            "style": {
                "navigationBarTitleText": "收货地址",
                "enablePullDownRefresh": false
            }
        },
        // #endif
        // #ifdef PUB_SUPPLIER
        {
            "path": "pages/login/supplier-reg",
            "style": {
                "navigationBarTitleText": "申请入驻",
                "navigationStyle": "custom"
            }
        },
        // #endif
        // #ifdef PUB_PARTNER
        {
            "path": "pages/login/supplier-reg",
            "style": {
                "navigationBarTitleText": "申请入驻"
            }
        },
        // #endif
        {
            "path": "pages/user/supplier-user",
            "style": {
                "navigationBarTitleText": "我的",
                "enablePullDownRefresh": true,
                "navigationStyle": "custom"
            }
        },
        {
            "path": "pages/user/user-info/user-info",
            "style": {
                "navigationBarTitleText": "我的信息",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/notice/notice",
            "style": {
                "navigationBarTitleText": "通知公告",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/notice/list",
            "style": {
                "navigationBarTitleText": "通知公告",
                "enablePullDownRefresh": true
            }
        },
        {
            "path": "pages/user/user-pwd/user-pwd",
            "style": {
                "navigationBarTitleText": "修改密码",
                "enablePullDownRefresh": false
            }
        }
    ],
    "subPackages": [{
        "root": "sub_pages/supplier",
        "pages": [
            // #ifdef PUB_SUPPLIER
            {
                "path": "supplier-info/supplier-info",
                "style": {
                    "navigationBarTitleText": "信息维护",
                    "enablePullDownRefresh": false
                }
            },
            {
                "path": "flower-manage/flower-manage",
                "style": {
                    "navigationBarTitleText": "商品管理",
                    "enablePullDownRefresh": true
                }
            },
            {
                "path": "flower-manage/flower-add",
                "style": {
                    "navigationBarTitleText": "",
                    "enablePullDownRefresh": false
                }
            },
            // #endif
            {
                "path": "order-settlement/order-settlement",
                "style": {
                    "navigationBarTitleText": "账单结算",
                    "enablePullDownRefresh": true
                }
            },
            {
                "path": "order-sale/order-sale",
                "style": {
                    "navigationBarTitleText": "售后理赔",
                    "enablePullDownRefresh": true
                }
            },
            {
                "path": "order-records/order-records",
                "style": {
                    "navigationBarTitleText": "扣款记录",
                    "enablePullDownRefresh": true,
                    "navigationBarBackgroundColor": "#E6F2EB"
                }
            },
            {
                "path": "protocol",
                "style": {
                    "navigationBarTitleText": "协议",
                    "enablePullDownRefresh": false
                }
            }
        ]
    // #ifdef PUB_PARTNER
    {
      "path": "pages/login/supplier-reg",
      "style": {
        "navigationBarTitleText": "申请入驻"
      }
    },
    // #endif
    {
      "path": "pages/user/supplier-user",
      "style": {
        "navigationBarTitleText": "我的",
        "enablePullDownRefresh": true,
        "navigationStyle": "custom"
      }
    },
    {
      "path": "pages/user/user-info/user-info",
      "style": {
        "navigationBarTitleText": "我的信息",
        "enablePullDownRefresh": false
      }
    },
    {
      "path": "pages/notice/notice",
      "style": {
        "navigationBarTitleText": "通知公告",
        "enablePullDownRefresh": false
      }
    },
    {
      "path": "pages/notice/list",
      "style": {
        "navigationBarTitleText": "通知公告",
        "enablePullDownRefresh": true
      }
    },
    {
      "path": "pages/user/user-pwd/user-pwd",
      "style": {
        "navigationBarTitleText": "修改密码",
        "enablePullDownRefresh": false
      }
    }
  ],
  "subPackages": [
    {
      "root": "sub_pages/supplier",
      "pages": [
        // #ifdef PUB_SUPPLIER
        {
          "path": "supplier-info/supplier-info",
          "style": {
            "navigationBarTitleText": "信息维护",
            "enablePullDownRefresh": false
          }
        },
        {
          "path": "flower-manage/flower-manage",
          "style": {
            "navigationBarTitleText": "商品管理",
            "enablePullDownRefresh": true
          }
        },
        {
          "path": "flower-manage/flower-add",
          "style": {
            "navigationBarTitleText": "",
            "enablePullDownRefresh": false
          }
        },
        // #endif
        {
          "path": "order-settlement/order-settlement",
          "style": {
            "navigationBarTitleText": "账单结算",
            "enablePullDownRefresh": true
          }
        },
        {
          "path": "order-sale/order-sale",
          "style": {
            "navigationBarTitleText": "售后理赔",
            "enablePullDownRefresh": true
          }
        },
        {
          "path": "order-records/order-records",
          "style": {
            "navigationBarTitleText": "扣款记录",
            "enablePullDownRefresh": true,
            "navigationBarBackgroundColor": "#E6F2EB"
          }
        },
        {
          "path": "protocol",
          "style": {
            "navigationBarTitleText": "协议",
            "enablePullDownRefresh": false
          }
        }
      ]
    },
    {
      "root": "sub_pages/partner",
      "pages": [
        // #ifdef PUB_PARTNER
        {
          "path": "partner-info/partner-info",
          "style": {
            "navigationBarTitleText": "信息维护",
            "enablePullDownRefresh": false
          }
        },
        {
          "path": "order-manage/order-manage",
          "style": {
            "navigationBarTitleText": "订单管理",
            "enablePullDownRefresh": true
          }
        },
        {
          "path": "markup-config/markup-config",
          "style": {
            "navigationBarTitleText": "加价配置",
            "enablePullDownRefresh": true
          }
        }
        // #endif
      ]
    },
    {
      "root": "sub_pages/customer",
      "pages": [
        // #ifdef PUB_CUSTOMER
    }, {
        "root": "sub_pages/partner",
        "pages": [
            // #ifdef PUB_PARTNER
            {
                "path": "partner-info/partner-info",
                "style": {
                    "navigationBarTitleText": "信息维护",
                    "enablePullDownRefresh": false
                }
            },
            {
                "path": "order-manage/order-manage",
                "style": {
                    "navigationBarTitleText": "订单管理",
                    "enablePullDownRefresh": true
                }
            },
            {
                "path": "markup-config/markup-config",
                "style": {
                    "navigationBarTitleText": "加价配置",
                    "enablePullDownRefresh": true
                }
            }
            // #endif
        ]
    }, {
        "root": "sub_pages/customer",
        "pages": [
            // #ifdef PUB_CUSTOMER
            {
                "path": "trade/trade",
                "style": {
                    "navigationBarTitleText": "交易大厅",
                    "enablePullDownRefresh": true
                }
            },
            {
                "path": "shopping/shopping",
                "style": {
                    "navigationBarTitleText": "购物车",
                    "enablePullDownRefresh": true
                }
            },
            {
                "path": "trade/list",
                "style": {
                    "navigationBarTitleText": "商品列表",
                    "enablePullDownRefresh": true
                }
            },
            {
                "path": "trade/detail",
                "style": {
                    "navigationBarTitleText": "商品详情",
                    "enablePullDownRefresh": false
                }
            },
            {
                "path": "shop/shop",
                "style": {
                    "navigationBarTitleText": "商家主页"
                }
            }
            // #endif
        ]
    }],
    "globalStyle": {
        "navigationBarTextStyle": "black",
        "navigationBarTitleText": "花满芫",
        "navigationBarBackgroundColor": "#F8F8F8",
        "backgroundColor": "#F8F8F8",
        "app-plus": {
            "background": "#efeff4"
        }
    }
        {
          "path": "trade/trade",
          "style": {
            "navigationBarTitleText": "交易大厅",
            "enablePullDownRefresh": true
          }
        },
        {
          "path": "shopping/shopping",
          "style": {
            "navigationBarTitleText": "购物车",
            "enablePullDownRefresh": true
          }
        },
        {
          "path": "shopping/confirm",
          "style": {
            "navigationBarTitleText": "订单详情"
          }
        },
        {
          "path": "trade/list",
          "style": {
            "navigationBarTitleText": "商品列表",
            "enablePullDownRefresh": true
          }
        },
        {
          "path": "trade/detail",
          "style": {
            "navigationBarTitleText": "商品详情",
            "enablePullDownRefresh": false
          }
        },
        {
          "path": "shop/shop",
          "style": {
            "navigationBarTitleText": "商家主页"
          }
        },
        {
          "path": "self/follow",
          "style": {
            "navigationBarTitleText": "我的关注",
            "enablePullDownRefresh": true
          }
        },
        {
          "path": "self/collect",
          "style": {
            "navigationBarTitleText": "我的收藏",
            "enablePullDownRefresh": true
          }
        }
        // #endif
      ]
    }
  ],
  "globalStyle": {
    "navigationBarTextStyle": "black",
    "navigationBarTitleText": "花满芫",
    "navigationBarBackgroundColor": "#F8F8F8",
    "backgroundColor": "#F8F8F8",
    "app-plus": {
      "background": "#efeff4"
    }
  }
}
pages/home/components/home-price.vue
@@ -1,84 +1,80 @@
<template>
    <view class="home-price">
        <view class="flex t1">
            <view>2024-06-03 09:20:19 花满芜成交均价</view>
            <view>2024-06-03 09:20:19 花满芫成交均价</view>
            <uni-icons class="m-l-a m-r-0" type="right"></uni-icons>
        </view>
        <view class="items" style="border-top: 2rpx solid #EEEEEE;">
            <view class="flex" style="border-bottom: 2rpx solid #EEEEEE;padding-top: 24rpx;">
                <view class="item flex1">
                    <view class="title">单头玫瑰</view>
                    <view class="title">{{list1[0]&&list1[0].name||''}}</view>
                    <view class="price">
                        19.66
                        {{list1[0]&&list1[0].avePrice||''}}
                    </view>
                    <view class="flex desc">
                        <view class="m-l-a m-r-a">+0.76</view>
                        <view class="m-l-a m-r-a text-right">+4.02%</view>
                    <view class="flex desc" v-if="list1[0]">
                        <view class="m-l-a m-r-a">{{list1[0]&&list1[0].avePriceDifference<0?'-':'+'}}{{list1[0]&&list1[0].avePriceDifference||''}}</view>
                        <view class="m-l-a m-r-a text-right">{{list1[0]&&list1[0].avePriceDifferenceRate<0?'-':'+'}}{{list1[0]&&list1[0].avePriceDifferenceRate*100||''}}%</view>
                    </view>
                </view>
                <view class="line"></view>
                <view class="item flex1">
                    <view class="title">单头玫瑰</view>
                    <view class="title">{{list1[1]&&list1[1].name||''}}</view>
                    <view class="price">
                        19.66
                        {{list1[1]&&list1[1].avePrice||''}}
                    </view>
                    <view class="flex desc">
                        <view class="m-l-a m-r-a">+0.76</view>
                        <view class="m-l-a m-r-a text-right">+4.02%</view>
                    <view class="flex desc" v-if="list1[1]">
                        <view class="m-l-a m-r-a">{{list1[1]&&list1[1].avePriceDifference<0?'-':'+'}}{{list1[1]&&list1[1].avePriceDifference||''}}</view>
                        <view class="m-l-a m-r-a text-right">{{list1[1]&&list1[1].avePriceDifferenceRate<0?'-':'+'}}{{list1[1]&&list1[1].avePriceDifferenceRate*100||''}}%</view>
                    </view>
                </view>
                <view class="line"></view>
                <view class="item flex1">
                    <view class="title">单头玫瑰</view>
                    <view class="title">{{list1[2]&&list1[2].name||''}}</view>
                    <view class="price">
                        19.66
                        {{list1[2]&&list1[2].avePrice||''}}
                    </view>
                    <view class="flex desc">
                        <view class="m-l-a m-r-a">+0.76</view>
                        <view class="m-l-a m-r-a text-right">+4.02%</view>
                    <view class="flex desc" v-if="list1[2]">
                        <view class="m-l-a m-r-a">{{list1[2]&&list1[2].avePriceDifference<0?'-':'+'}}{{list1[2]&&list1[2].avePriceDifference||''}}</view>
                        <view class="m-l-a m-r-a text-right">{{list1[2]&&list1[2].avePriceDifferenceRate<0?'-':'+'}}{{list1[2]&&list1[2].avePriceDifferenceRate*100||''}}%</view>
                    </view>
                </view>
            </view>
            <!-- <u-divider></u-divider> -->
            <view class="flex" style="padding-top: 24rpx;">
            <view class="flex" style="padding-top: 24rpx;" v-if="list2.length>0">
                <view class="item flex1">
                    <view class="title">单头玫瑰</view>
                    <view class="title">{{list2[0]&&list2[0].name||''}}</view>
                    <view class="price">
                        19.66
                        {{list2[0]&&list2[0].avePrice||''}}
                    </view>
                    <view class="flex desc">
                        <view class="m-l-a m-r-a">+0.76</view>
                        <view class="m-l-a m-r-a text-right">+4.02%</view>
                    <view class="flex desc" v-if="list2[0]">
                        <view class="m-l-a m-r-a">{{list2[0]&&list2[0].avePriceDifference<0?'-':'+'}}{{list2[0]&&list2[0].avePriceDifference||''}}</view>
                        <view class="m-l-a m-r-a text-right">{{list2[0]&&list2[0].avePriceDifferenceRate<0?'-':'+'}}{{list2[0]&&list2[0].avePriceDifferenceRate*100||''}}%</view>
                    </view>
                </view>
                <view class="line"></view>
                <view class="item flex1">
                    <view class="title">单头玫瑰</view>
                    <view class="title">{{list2[1]&&list2[1].name||''}}</view>
                    <view class="price">
                        19.66
                        {{list2[1]&&list2[1].avePrice||''}}
                    </view>
                    <view class="flex desc">
                        <view class="m-l-a m-r-a">+0.76</view>
                        <view class="m-l-a m-r-a text-right">+4.02%</view>
                    <view class="flex desc" v-if="list2[1]">
                        <view class="m-l-a m-r-a">{{list2[1]&&list2[1].avePriceDifference<0?'-':'+'}}{{list2[1]&&list2[1].avePriceDifference||''}}</view>
                        <view class="m-l-a m-r-a text-right">{{list2[1]&&list2[1].avePriceDifferenceRate<0?'-':'+'}}{{list2[1]&&list2[1].avePriceDifferenceRate*100||''}}%</view>
                    </view>
                </view>
                <view class="line"></view>
                <view class="item flex1">
                    <view class="title">单头玫瑰</view>
                    <view class="title">{{list2[2]&&list2[2].name||''}}</view>
                    <view class="price">
                        19.66
                        {{list2[2]&&list2[2].avePrice||''}}
                    </view>
                    <view class="flex desc">
                        <view class="m-l-a m-r-a">+0.76</view>
                        <view class="m-l-a m-r-a text-right">+4.02%</view>
                    <view class="flex desc" v-if="list2[2]">
                        <view class="m-l-a m-r-a">{{list2[2]&&list2[2].avePriceDifference<0?'-':'+'}}{{list2[2]&&list2[2].avePriceDifference||''}}</view>
                        <view class="m-l-a m-r-a text-right">{{list2[2]&&list2[2].avePriceDifferenceRate<0?'-':'+'}}{{list2[2]&&list2[2].avePriceDifferenceRate*100||''}}%</view>
                    </view>
                </view>
            </view>
        </view>
    </view>
</template>
@@ -87,8 +83,27 @@
    export default {
        data() {
            return {
                list1: [],
                list2: [],
            };
        },
        mounted() {
            const {
                data
            } = await this.$http.request('get', '/api/pub/customer/home', {
                size: 6,
            })
            var list = data && data.records || []
            this.list1 = []
            this.list2 = []
            for (var i = 0; i < list.length && i < 3; i++) {
                this.list1.push(list[i])
            }
            for (var i = 3; i < list.length && i < 6; i++) {
                this.list2.push(list[i])
            }
        }
    }
</script>
pages/login/supplier-login.vue
@@ -11,13 +11,13 @@
                <form class="cl">
                    <view class="t-a titles-top">
                        <view class="title-1">HELLO</view>
                        <view class="title-2">欢迎登录<span class="title-3">花满芜</span>
                        <!-- #ifdef PUB_SUPPLIER -->
                        <span>供应商管理平台</span>
                        <!-- #endif -->
                        <!-- #ifdef PUB_PARTNER -->
                        <span>合伙人管理平台</span>
                        <!-- #endif -->
                        <view class="title-2">欢迎登录<span class="title-3">花满芫</span>
                        <!-- #ifdef PUB_SUPPLIER -->
                        <span>供应商管理平台</span>
                        <!-- #endif -->
                        <!-- #ifdef PUB_PARTNER -->
                        <span>合伙人管理平台</span>
                        <!-- #endif -->
                        </view>
                    </view>
                    <view class="t-a input form-input" v-if="loginType=='pwd'">
pages/login/supplier-reg.vue
@@ -31,7 +31,7 @@
                    <form class="cl">
                        <view class="t-a titles-top">
                            <view class="title-1">HELLO</view>
                            <view class="title-2">欢迎入驻<span class="title-3">花满芜</span></view>
                            <view class="title-2">欢迎入驻<span class="title-3">花满芫</span></view>
                        </view>
@@ -75,7 +75,7 @@
                                @click="protocal=!protocal" class="component-radio" :class="[protocal?'cur':'']">
                            </view>
                            <view class="topic-gray" @click="toProtocol">请仔细阅读《花满芜合伙人供应商入口小程序隐私保护指引》如您同意该指引,请勾选开始使用本小程序
                            <view class="topic-gray" @click="toProtocol">请仔细阅读《花满芫合伙人供应商入口小程序隐私保护指引》如您同意该指引,请勾选开始使用本小程序
                            </view>
                        </view>
                    </form>
store/index.js
@@ -1,412 +1,417 @@
import http from '../plugins/http'
import storage from '../plugins/storage.js'
import message from '../plugins/message.js'
// #ifndef VUE3
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
            // #endif
    state: {
        hasLogin: false,
        isUniverifyLogin: false,
        loginProvider: "",
        openid: null,
        testvuex: false,
        colorIndex: 0,
        colorList: ['#FF0000', '#00FF00', '#0000FF'],
        noMatchLeftWindow: true,
        active: 'componentPage',
        leftWinActive: '/pages/component/view/view',
        activeOpen: '',
        menu: [],
        univerifyErrorMsg: '',
        currentInfo: {}, //个人用户信息
        cache_address: {},
        // remoteip:'',//服务器ip
        sign: {
            'enterprise': 0,
            'info': 0,
            'flower': 0,
            'shopping': 0,
        },
        defaultaddress: {}
    },
    mutations: {
        updateLogin(state, provider) {
            console.log('updateLogin', provider)
            state.hasLogin = provider && true || false;
            if (!state.hasLogin) {
                storage.removeItem('token')
            }
        },
        login(state, provider) {
            state.hasLogin = true;
            state.loginProvider = provider;
        },
        logout(state) {
            state.hasLogin = false
            state.openid = null
            state.currentInfo = {}
            storage.removeItem('token')
            message.showToast('退出登录成功')
            // #ifdef APP
            var KeepAliveModule = uni.requireNativePlugin("yh-nl") //保活组件
            let ret = KeepAliveModule.stopLocation();
            console.log('ret', ret)
            // #endif
            uni.redirectTo({
                url: '/views/login/login'
            })
        },
        setOpenid(state, openid) {
            state.openid = openid
        },
        setDefaultAddress(state, defaultaddress) {
            state.defaultaddress = defaultaddress
        },
        setTestTrue(state) {
            state.testvuex = true
        },
        setTestFalse(state) {
            state.testvuex = false
        },
        setColorIndex(state, index) {
            state.colorIndex = index
        },
        setActive(state, tabPage) {
            state.active = tabPage
        },
        setActiveOpen(state, activeOpen) {
            state.activeOpen = activeOpen
        },
        setMenu(state, menu) {
            state.menu = menu
        },
        setUniverifyLogin(state, payload) {
            typeof payload !== 'boolean' ? payload = !!payload : '';
            state.isUniverifyLogin = payload;
        },
        setUniverifyErrorMsg(state, payload = '') {
            state.univerifyErrorMsg = payload
        }
    },
    getters: {
        currentColor(state) {
            return state.colorList[state.colorIndex]
        }
    },
    actions: {
        sign_add: async function ({
                                      commit,
                                      state
                                  }, key) {
            console.log('sign_add', key)
            state.sign[key] = 1
        },
        sign_clear: async function ({
                                        commit,
                                        state
                                    }, key) {
            console.log('sign_clear', key)
            state.sign[key] = 0
        },
        // lazy loading openid
        logout: async function ({
                                    commit,
                                    state
                                }) {
            commit('logout')
        },
        getUserOpenId: async function ({
                                           commit,
                                           state
                                       }) {
            return await new Promise((resolve, reject) => {
                if (state.openid) {
                    resolve(state.openid)
                } else {
                    uni.login({
                        success: (data) => {
                            commit('login')
                            setTimeout(function () { //模拟异步请求服务器获取 openid
                                const openid = '123456789'
                                console.log(
                                    'uni.request mock openid[' +
                                    openid + ']');
                                commit('setOpenid', openid)
                                resolve(openid)
                            }, 1000)
                        },
                        fail: (err) => {
                            console.log('uni.login 接口调用失败,将无法正常使用开放接口等服务',
                                err)
                            reject(err)
                        }
                    })
                }
            })
        },
        getCurrentInfo: async function ({
                                            commit,
                                            state
                                        }) {
            //把权限获取到
            // console.log('getCurrentInfo,getCurrentInfo')
            const currentInfo = await http.request('get', '/api/current/user', {})
            if (currentInfo && currentInfo.code == 0) {
                // state.cMenu = cMenu
                // state.roles = currentInfo.data.roles || []
                state.currentInfo = currentInfo.data || {}
                state.type = currentInfo.data.type || ''
                state.spacecode = currentInfo.data.spacecode || ''
                // if(reload){
                //     location.reload()
                // }
                commit("updateLogin", true)
            } else {
                commit("updateLogin", false)
                //这种情况就是要跳转到登录页面
            }
        },
        loginwx: async function ({
                                     dispatch,
                                     commit,
                                     state
                                 }, data) {
            var code = data.code
            let inviter = data.inviter || ''
            console.log('')
            const resp = await http.request('post', '/api/login/wechat', {
                data: {
                    code: code,
                    imgurl: data.imgurl || '',
                    nickname: data.nickname || '',
                    inviter: inviter
                },
                // params:{
                //     code:code
                // }
            })
            if (resp && resp.code == 0) {
                state.isBind = true
                storage.setItem("token", resp.data.access_token || "")
                state.hasLogin = true
                if (inviter) {
                    storage.removeItem('inviter');
                    storage.removeItem('inviterTime');
                    storage.removeItem('inviterName');
                }
                await dispatch('getCurrentInfo')
            } else {
                message.showToast('登录失败.' + (resp && resp.msg))
                storage.removeItem('openid');
                storage.removeItem('tel');
                storage.removeItem('token');
            }
            return resp
        },
        regUser: async function ({
                                     commit,
                                     dispatch,
                                     state
                                 }, data) {
            {
                const resp = await http.request('post', '/api/register/' + data.type, {
                    data: {
                        username: data.username,
                        password: data.password,
                        tel: data.phoneNumber || data.tel,
                        smsCode: data.smsCode || '',
                        dto: data.dto || undefined
                    },
                    params: {
                        clientType: data.clientType || 'app'
                    }
                })
                console.log('resp', resp)
                if (resp && resp.code == 0) {
                } else {
            // #ifdef VUE3
            import {
                createStore
            } from 'vuex'
            const store = createStore({
                // #endif
                state: {
                    hasLogin: false,
                    isUniverifyLogin: false,
                    loginProvider: "",
                    openid: null,
                    testvuex: false,
                    colorIndex: 0,
                    colorList: ['#FF0000', '#00FF00', '#0000FF'],
                    noMatchLeftWindow: true,
                    active: 'componentPage',
                    leftWinActive: '/pages/component/view/view',
                    activeOpen: '',
                    menu: [],
                    univerifyErrorMsg: '',
                    currentInfo: {}, //个人用户信息
                    cache_address: {},
                    // remoteip:'',//服务器ip
                    sign: {
                        'enterprise': 0,
                        'info': 0,
                        'flower': 0,
                    },
                    defaultaddress: {}
                },
                mutations: {
                }
                return resp
            }
                    updateLogin(state, provider) {
                        console.log('updateLogin', provider)
                        state.hasLogin = provider && true || false;
                        if (!state.hasLogin) {
                            storage.removeItem('token')
                        }
                    },
                    login(state, provider) {
                        state.hasLogin = true;
                        state.loginProvider = provider;
                    },
                    logout(state) {
                        state.hasLogin = false
                        state.openid = null
                        state.currentInfo = {}
                        storage.removeItem('token')
                        message.showToast('退出登录成功')
                        // #ifdef APP
                        var KeepAliveModule = uni.requireNativePlugin("yh-nl") //保活组件
        },
        loginPartner: async function ({
                                          commit,
                                          dispatch,
                                          state
                                      }, data) {
            {
                const resp = await http.request('post', '/api/login/partner' + ((data
                    .phoneNumber || data.tel) ? '/phone' : ''), {
                    data: {
                        username: (data.phoneNumber || data.tel) ? (data.phoneNumber ||
                            data.tel) : data.username,
                        password: data.password,
                        tel: data.phoneNumber || data.tel,
                        smsCode: data.smsCode || ''
                    },
                    params: {
                        clientType: data.clientType || 'app'
                    }
                })
                console.log('resp', resp)
                if (resp && resp.code == 0) {
                    // await getCurrentInfo()
                    // // this.$message.showToast('登录成功')
                    // console.log(resp)
                    storage.setItem('token', resp.data.access_token)
                    commit("updateLogin", true)
                    await dispatch('getCurrentInfo')
                        let ret = KeepAliveModule.stopLocation();
                        console.log('ret', ret)
                        // #endif
                        uni.redirectTo({
                            url: '/views/login/login'
                        })
                    },
                    setOpenid(state, openid) {
                        state.openid = openid
                    },
                    setDefaultAddress(state, defaultaddress) {
                        state.defaultaddress = defaultaddress
                    },
                    setTestTrue(state) {
                        state.testvuex = true
                    },
                    setTestFalse(state) {
                        state.testvuex = false
                    },
                    setColorIndex(state, index) {
                        state.colorIndex = index
                    },
                    setActive(state, tabPage) {
                        state.active = tabPage
                    },
                    setActiveOpen(state, activeOpen) {
                        state.activeOpen = activeOpen
                    },
                    setMenu(state, menu) {
                        state.menu = menu
                    },
                    setUniverifyLogin(state, payload) {
                        typeof payload !== 'boolean' ? payload = !!payload : '';
                        state.isUniverifyLogin = payload;
                    },
                    setUniverifyErrorMsg(state, payload = '') {
                        state.univerifyErrorMsg = payload
                    }
                },
                getters: {
                    currentColor(state) {
                        return state.colorList[state.colorIndex]
                    }
                },
                actions: {
                    sign_add: async function({
                        commit,
                        state
                    }, key) {
                        console.log('sign_add', key)
                        state.sign[key] = 1
                    },
                    sign_clear: async function({
                        commit,
                        state
                    }, key) {
                        console.log('sign_clear', key)
                        state.sign[key] = 0
                    },
                    // lazy loading openid
                    logout: async function({
                        commit,
                        state
                    }) {
                        commit('logout')
                    },
                    getUserOpenId: async function({
                        commit,
                        state
                    }) {
                        return await new Promise((resolve, reject) => {
                            if (state.openid) {
                                resolve(state.openid)
                            } else {
                                uni.login({
                                    success: (data) => {
                                        commit('login')
                                        setTimeout(function() { //模拟异步请求服务器获取 openid
                                            const openid = '123456789'
                                            console.log(
                                                'uni.request mock openid[' +
                                                openid + ']');
                                            commit('setOpenid', openid)
                                            resolve(openid)
                                        }, 1000)
                                    },
                                    fail: (err) => {
                                        console.log('uni.login 接口调用失败,将无法正常使用开放接口等服务',
                                            err)
                                        reject(err)
                                    }
                                })
                            }
                        })
                    },
                    getCurrentInfo: async function({
                        commit,
                        state
                    }) {
                        //把权限获取到
                        // console.log('getCurrentInfo,getCurrentInfo')
                        const currentInfo = await http.request('get', '/api/current/user', {
                    console.log('login,reLaunch')
                    // #ifdef APP
                    var KeepAliveModule = uni.requireNativePlugin("yh-nl") //保活组件
                        })
                        if (currentInfo && currentInfo.code == 0) {
                            // state.cMenu = cMenu
                            // state.roles = currentInfo.data.roles || []
                            state.currentInfo = currentInfo.data || {}
                            state.type = currentInfo.data.type || ''
                            state.spacecode = currentInfo.data.spacecode || ''
                            // if(reload){
                            //     location.reload()
                            // }
                            commit("updateLogin", true)
                        } else {
                            commit("updateLogin", false)
                            //这种情况就是要跳转到登录页面
                        }
                    },
                    loginwx: async function({
                        dispatch,
                        commit,
                        state
                    }, data) {
                        var code = data.code
                        let inviter = data.inviter || ''
                        console.log('')
                        const resp = await http.request('post', '/api/login/wechat', {
                            data: {
                                code: code,
                                imgurl: data.imgurl || '',
                                nickname: data.nickname || '',
                                inviter: inviter
                            },
                            // params:{
                            //     code:code
                            // }
                        })
                        if (resp && resp.code == 0) {
                            state.isBind = true
                            storage.setItem("token", resp.data.access_token || "")
                            state.hasLogin = true
                            if (inviter) {
                                storage.removeItem('inviter');
                                storage.removeItem('inviterTime');
                                storage.removeItem('inviterName');
                            }
                            await dispatch('getCurrentInfo')
                        } else {
                            message.showToast('登录失败.' + (resp && resp.msg))
                            storage.removeItem('openid');
                            storage.removeItem('tel');
                            storage.removeItem('token');
                        }
                        return resp
                    },
                    regUser: async function({
                        commit,
                        dispatch,
                        state
                    }, data) {
                        {
                            const resp = await http.request('post', '/api/register/' + data.type, {
                                data: {
                                    username: data.username,
                                    password: data.password,
                                    tel: data.phoneNumber || data.tel,
                                    smsCode: data.smsCode || '',
                                    dto: data.dto || undefined
                                },
                                params: {
                                    clientType: data.clientType || 'app'
                                }
                            })
                            console.log('resp', resp)
                            if (resp && resp.code == 0) {
                    KeepAliveModule && KeepAliveModule.startLocation({
                        intervalTime: 5000, //定位间隔时间
                        gaodeApiKey: "0eef1axxxxxx7964", //高德地图Key,已停用,引入插件配置
                        locationMode: 1, //定位模式
                        purpose: 0, //定位场景
                        ifUpload: true, //是否上报服务器
                        uploadUrl: "http://bio51-api.fixbug.fun/api/current/employee/location", //上报接口
                        params: "{'lat':'1','lng':'3'}", //其他参数
                        headers: "{'authorization1':'Bearer xOHeJhg'}",
                    }, function (res) {
                        console.log("启用结果:", res);
                        let ret = KeepAliveModule.getCurrentLocation();
                        console.log("启用结果2:", ret);
                    });
                    // #endif
                    // uni.redirectTo({
                    //     url: '/views/app/app-home/app-home'
                    // })
                    uni.reLaunch({
                        url: '/pages/home/supplier-home'
                    })
                } else {
                    // this.$message.showToast('登录失败')
                }
                return resp
            }
        },
        loginSupplier: async function ({
                                           commit,
                                           dispatch,
                                           state
                                       }, data) {
            {
                const resp = await http.request('post', '/api/login/supplier' + ((data
                    .phoneNumber || data.tel) ? '/phone' : ''), {
                    data: {
                        username: (data.phoneNumber || data.tel) ? (data.phoneNumber ||
                            data.tel) : data.username,
                        password: data.password,
                        tel: data.phoneNumber || data.tel,
                        smsCode: data.smsCode || ''
                    },
                    params: {
                        clientType: data.clientType || 'app'
                    }
                })
                console.log('resp', resp)
                if (resp && resp.code == 0) {
                    // await getCurrentInfo()
                    // // this.$message.showToast('登录成功')
                    // console.log(resp)
                    storage.setItem('token', resp.data.access_token)
                    commit("updateLogin", true)
                    await dispatch('getCurrentInfo')
                    console.log('login,reLaunch')
                    // #ifdef APP
                    var KeepAliveModule = uni.requireNativePlugin("yh-nl") //保活组件
                    KeepAliveModule && KeepAliveModule.startLocation({
                        intervalTime: 5000, //定位间隔时间
                        gaodeApiKey: "0eef1axxxxxx7964", //高德地图Key,已停用,引入插件配置
                        locationMode: 1, //定位模式
                        purpose: 0, //定位场景
                        ifUpload: true, //是否上报服务器
                        uploadUrl: "http://bio51-api.fixbug.fun/api/current/employee/location", //上报接口
                        params: "{'lat':'1','lng':'3'}", //其他参数
                        headers: "{'authorization1':'Bearer xOHeJhg'}",
                    }, function (res) {
                        console.log("启用结果:", res);
                        let ret = KeepAliveModule.getCurrentLocation();
                        console.log("启用结果2:", ret);
                    });
                    // #endif
                    // uni.redirectTo({
                    //     url: '/views/app/app-home/app-home'
                    // })
                    uni.reLaunch({
                        url: '/pages/home/supplier-home'
                    })
                } else {
                    // this.$message.showToast('登录失败')
                }
                return resp
            }
        },
        loginCustomer: async function ({
                                           commit,
                                           dispatch,
                                           state
                                       }, data) {
            {
                const resp = await http.request('post', '/api/login/customer' + (data
                    .phoneNumber ? '/phone' : ''), {
                    data: {
                        username: (data.phoneNumber || data.tel) ? (data.phoneNumber ||
                            data.tel) : data.username,
                        password: data.password,
                        tel: data.phoneNumber || data.tel,
                        smsCode: data.smsCode || ''
                    },
                    params: {
                        clientType: data.clientType || 'app'
                    }
                })
                console.log('resp', resp)
                if (resp && resp.code == 0) {
                    storage.setItem('token', resp.data.access_token)
                    commit("updateLogin", true)
                    await dispatch('getCurrentInfo')
                    uni.reLaunch({
                        url: '/pages/home/home'
                    })
                } else {
                            } else {
                }
                return resp
            }
                            }
                            return resp
                        }
        },
        submitShopping: async function ({commit, dispatch}, data) {
            const resp = await http.request('post', '/api/api/customer/flower/cart/change-num', {
                    data: {
                        id: data.id,
                        num: 1
                    }
                }
            )
            if (resp && resp.code === 0) {
                message.showToast('添加购物车成功')
                dispatch('sign_add', 'shopping')
            } else {
                    },
                    loginPartner: async function({
                        commit,
                        dispatch,
                        state
                    }, data) {
                        {
                            const resp = await http.request('post', '/api/login/partner' + ((data
                                .phoneNumber || data.tel) ? '/phone' : ''), {
                                data: {
                                    username: (data.phoneNumber || data.tel) ? (data.phoneNumber ||
                                        data.tel) : data.username,
                                    password: data.password,
                                    tel: data.phoneNumber || data.tel,
                                    smsCode: data.smsCode || ''
                                },
                                params: {
                                    clientType: data.clientType || 'app'
                                }
                            })
                            console.log('resp', resp)
                            if (resp && resp.code == 0) {
                                // await getCurrentInfo()
                                // // this.$message.showToast('登录成功')
                                // console.log(resp)
                                storage.setItem('token', resp.data.access_token)
                                commit("updateLogin", true)
                                await dispatch('getCurrentInfo')
            }
            return resp
        },
                                console.log('login,reLaunch')
                                // #ifdef APP
                                var KeepAliveModule = uni.requireNativePlugin("yh-nl") //保活组件
    }
})
                                KeepAliveModule && KeepAliveModule.startLocation({
                                    intervalTime: 5000, //定位间隔时间
                                    gaodeApiKey: "0eef1axxxxxx7964", //高德地图Key,已停用,引入插件配置
                                    locationMode: 1, //定位模式
                                    purpose: 0, //定位场景
                                    ifUpload: true, //是否上报服务器
                                    uploadUrl: "http://bio51-api.fixbug.fun/api/current/employee/location", //上报接口
                                    params: "{'lat':'1','lng':'3'}", //其他参数
                                    headers: "{'authorization1':'Bearer xOHeJhg'}",
                                }, function(res) {
                                    console.log("启用结果:", res);
                                    let ret = KeepAliveModule.getCurrentLocation();
                                    console.log("启用结果2:", ret);
                                });
                                // #endif
                                // uni.redirectTo({
                                //     url: '/views/app/app-home/app-home'
                                // })
                                uni.reLaunch({
                                    url: '/pages/home/supplier-home'
                                })
                            } else {
                                // this.$message.showToast('登录失败')
                            }
                            return resp
                        }
                    },
                    loginSupplier: async function({
                        commit,
                        dispatch,
                        state
                    }, data) {
                        {
                            const resp = await http.request('post', '/api/login/supplier' + ((data
                                .phoneNumber || data.tel) ? '/phone' : ''), {
                                data: {
                                    username: (data.phoneNumber || data.tel) ? (data.phoneNumber ||
                                        data.tel) : data.username,
                                    password: data.password,
                                    tel: data.phoneNumber || data.tel,
                                    smsCode: data.smsCode || ''
                                },
                                params: {
                                    clientType: data.clientType || 'app'
                                }
                            })
                            console.log('resp', resp)
                            if (resp && resp.code == 0) {
                                // await getCurrentInfo()
                                // // this.$message.showToast('登录成功')
                                // console.log(resp)
                                storage.setItem('token', resp.data.access_token)
                                commit("updateLogin", true)
                                await dispatch('getCurrentInfo')
                                console.log('login,reLaunch')
                                // #ifdef APP
                                var KeepAliveModule = uni.requireNativePlugin("yh-nl") //保活组件
                                KeepAliveModule && KeepAliveModule.startLocation({
                                    intervalTime: 5000, //定位间隔时间
                                    gaodeApiKey: "0eef1axxxxxx7964", //高德地图Key,已停用,引入插件配置
                                    locationMode: 1, //定位模式
                                    purpose: 0, //定位场景
                                    ifUpload: true, //是否上报服务器
                                    uploadUrl: "http://bio51-api.fixbug.fun/api/current/employee/location", //上报接口
                                    params: "{'lat':'1','lng':'3'}", //其他参数
                                    headers: "{'authorization1':'Bearer xOHeJhg'}",
                                }, function(res) {
                                    console.log("启用结果:", res);
                                    let ret = KeepAliveModule.getCurrentLocation();
                                    console.log("启用结果2:", ret);
                                });
                                // #endif
                                // uni.redirectTo({
                                //     url: '/views/app/app-home/app-home'
                                // })
                                uni.reLaunch({
                                    url: '/pages/home/supplier-home'
                                })
                            } else {
                                // this.$message.showToast('登录失败')
                            }
                            return resp
                        }
                    },
                    loginCustomer: async function({
                        commit,
                        dispatch,
                        state
                    }, data) {
                        {
                            const resp = await http.request('post', '/api/login/customer' + (data
                                .phoneNumber ? '/phone' : ''), {
                                data: {
                                    username: (data.phoneNumber || data.tel) ? (data.phoneNumber ||
                                        data.tel) : data.username,
                                    password: data.password,
                                    tel: data.phoneNumber || data.tel,
                                    smsCode: data.smsCode || ''
                                },
                                params: {
                                    clientType: data.clientType || 'app'
                                }
                            })
                            console.log('resp', resp)
                            if (resp && resp.code == 0) {
                                storage.setItem('token', resp.data.access_token)
                                commit("updateLogin", true)
                                await dispatch('getCurrentInfo')
                                uni.reLaunch({
                                    url: '/pages/home/home'
                                })
                            } else {
                            }
                            return resp
                        }
                    },
                }
            })
            export default store
export default store
sub_pages/customer/self/collect.vue
对比新文件
@@ -0,0 +1,150 @@
<template>
  <view class="page-collect">
    <view class="search-container m-t-12 flex">
      <view class="flex1 input">
        <u-input placeholder="请输入花名" v-model="query.name">
          <template slot="suffix">
            <uni-icons color="#20613D" type="search" size="24" @tap="refreshList"></uni-icons>
          </template>
        </u-input>
      </view>
    </view>
    <view class="component-filter-container">
      <view class="flex1">
        排序
        <image src="../../../static/common/icon-arrow-down.png" class="icon-arrow-down"></image>
      </view>
      <view class="flex1">
        {{ this.query.levelStr || '级别' }}
        <image src="../../../static/common/icon-arrow-down.png" class="icon-arrow-down"
               @click="level_show=true"></image>
      </view>
    </view>
    <u-picker :show="level_show" @confirm="select_level" keyName="label" :columns="level_columns"
              @cancel="level_show=false"></u-picker>
    <u-picker :show="order_show" @confirm="select_order" keyName="label" :columns="order_columns"
              @cancel="order_show=false"></u-picker>
    <view class="trade-list-container">
      <view class="trade-info-container" v-for="(dto,index) of list" :key="index">
        <view class="title">
          <view class="level m-r-15">{{dto.levelStr || '-'}}级</view>
          <view class="">
            {{dto.name || '-'}}
          </view>
        </view>
        <view class="desc m-t-12">
          <view class="m-r-15">已售:{{ dto.sales || 0}}</view>
          <view class="m-r-15">剩余:{{dto.stock || 0}}</view>
          <view class=" ">{{dto.unit||'-'}}支/扎</view>
        </view>
        <view class="flex m-t-12">
          <view class="price m-r-a">
            <span class="num">{{dto.price||'-'}}</span>
            元/扎
          </view>
          <view class="m-l-a m-r-15">
            <image src="../../../static/common/icon-kf.png" class="icon-kf m-l-15 img100"></image>
          </view>
          <view class="m-r-0 gwc" @click="submitShopping(dto)">
            + 购物车
          </view>
        </view>
      </view>
    </view>
  </view>
</template>
<script>
export default {
  async onPullDownRefresh() {
    await this.refreshList()
    uni.stopPullDownRefresh()
  },
  data() {
    return {
      query: {
        name: '',
        levelStr: '',
        level: '',
        column:'',
        columnStr:'',
      },
      level_show: false,
      level_columns: [[]],
      order_show:false,
      order_columns:[[]]
    }
  },
  onLoad() {
    this.listApi = '/api/collect/list'
    this.$http.request('get', '/api/code/value', {
      params: {
        type: 'FLOWER_LEVEL'
      }
    }).then(res => {
      var data = res.data
      this.level_columns = [data || []]
      this.columns_levels[0].unshift({
        label: '全部',
        value: ''
      })
    })
    this.$http.request('get', '/api/code/value', {
      params: {
        type: 'FLOWER_ORDER_BY'
      }
    }).then(res => {
      var data = res.data
      this.order_columns = [data || []]
      this.order_columns[0].unshift({
        label: '默认',
        value: ''
      })
    })
  },
  methods: {
    select_level(e) {
      this.level_show = false
      this.query.levelStr = e.value[0].label
      this.query.level = e.value[0].value
    },
    select_order(e) {
      this.order_show = false
      this.query.columnStr = e.value[0].label
      this.query.column = e.value[0].value
    },
  }
}
</script>
<style lang="scss" scoped>
.page-collect {
  .search-container {
    display: flex;
    margin: 12rpx 0rpx 20rpx 0rpx;
    position: relative;
    z-index: 1;
    .input {
      background-color: #fff !important;
      border-radius: 8rpx;
    }
    .button {
      min-width: 120rpx;
      max-width: 120rpx;
      margin-left: auto;
      margin-right: 0rpx;
      text-align: right;
      line-height: 70rpx !important;
    }
  }
}
</style>
sub_pages/customer/self/follow.vue
对比新文件
@@ -0,0 +1,29 @@
<template>
    <view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
            }
        },
        async onPullDownRefresh() {
            await this.refreshList()
            uni.stopPullDownRefresh()
        },
        onLoad(){
            this.listApi = '/api/follow/list'
        },
        methods: {
        }
    }
</script>
<style>
</style>
sub_pages/customer/shopping/confirm.vue
对比新文件
@@ -0,0 +1,103 @@
<script>
import {
  mapState
} from 'vuex'
export default {
  name: "订单详情",
  computed: {
    ...mapState({
      address: state => {
        return state.defaultaddress || {}
      },
    }),
  },
  watch: {
    // address(nv, ov) {
    //   if (nv && nv.id) {
    //     //尝试更新一下
    //
    //   }
    // }
  },
  async onShow() {
    setTimeout(async () => {
      if (this.address && this.address.id && this.cacheAddressId !== this.address.id) {
        this.$message.showLoading()
        const {code, data} = await this.$http.request('get', '/api/flower/customer/order/confirm/transports', {
          data: {
            addressId: this.address.id,
            weight: this.dto.totalWeight || 0
          }
        })
        this.$message.hideLoading()
        this.transportList = []
        if (code === 0) {
          this.transportList = data || []
        }
      }
    }, 200)
  },
  onLoad(options) {
    let item = JSON.parse(decodeURIComponent(options.query.dto));
    this.dto = {
      ...this.dto,
      ...item
    }
    //先获取直接的全部地址
    // @ApiModelProperty(value = "订单商品")
    //   private List<FlowerCartListDTO> flowers;
    // @ApiModelProperty(value = "打包费")
    //   private BigDecimal packing;
    //todo 显示打包费等,然后再确认
    // https://lanhuapp.com/web/#/item/project/detailDetach?pid=05830e81-7c59-4655-8253-4deb7c913b51&project_id=05830e81-7c59-4655-8253-4deb7c913b51&image_id=f7cc3e57-5367-4b99-a84e-99c38249aa66&fromEditor=true
  },
  data() {
    return {
      dto: {},
      cacheAddressId: '',
      transportList: [],
      // private Long id;
      // @ApiModelProperty(value = "名称")
      // private String name;
      // @ApiModelProperty(value = "英文名")
      // private String enName;
      // @ApiModelProperty(value = "运费")
      // private BigDecimal fee;
    }
  }
}
</script>
<template>
  <view class="page-confirm">
    <view>
      <common-address-select ref="addressselect"></common-address-select>
    </view>
    <view>
<!--     todo 查看商品列表,和选择运费 -->
    </view>
    <view class="bottom-price flex">
      <view>
        合计:¥ {{ dto.totalAmount||0 }} 元
      </view>
      <view class="button-green-1">
        提交订单
      </view>
    </view>
  </view>
</template>
<style scoped lang="scss">
.page-confirm{
  .bottom-price {
    position: fixed;
    left: 0rpx;
    padding: 20rpx;
    right: 0rpx;
    bottom: 160rpx;
  }
}
</style>
sub_pages/customer/shopping/shopping.vue
@@ -1,25 +1,352 @@
<template>
    <view>
        <view style="min-height:200rpx">
        </view>
        <common-footer flg="2"></common-footer>
    </view>
  <view class="shopping-container">
    <view class="top-title"> 苏州市一价全含,市区内包邮派送到店
    </view>
    <view class="top-desc">
      全程鲜花冷链专线,时效快,损耗小
    </view>
    <view class="flex">
      <image class="icon-clock m-r-6" src="../../../static/common/icon-call.png"></image>
      <view class="name">
        客服电话 : &nbsp;&nbsp; <span class="topic-gray">{{ tel }}</span>
      </view>
    </view>
    <view class="">
      <no-data v-if="!list||list.length===0" style="width: 100%;"></no-data>
      <view class="shopping-item m-t-20" v-for="(item,index) of list" :key="index">
        <u-swipe-action>
          <u-swipe-action-item
              :options="options1"
              @click="(e)=>{clickSwipeButton(item)}"
          >
            <view class="sup-title">
              <radio :checked="ids.indexOf(item.id)>=0" @change="changeItem(item,'supplier')">></radio>
              {{ item.supplierName || '-' }}
            </view>
            <u-divider></u-divider>
            <view v-for="(dto,j) of item.flowerList" :key="j">
              <u-divider v-if="j>0"></u-divider>
              <view class="item-each flex">
                <radio :checked="ids.indexOf(dto.id)>=0" @change="changeItem(dto,'flower')"></radio>
                <image class="img img100 m-r-6" :src="dto.url||dto.cover"></image>
                <view>
                  <view class="title"><span>{{ dto.levelStr || '-' }}</span>&nbsp;&nbsp;{{ dto.name || '-' }}</view>
                  <view class="price">
                    {{ dto.price || '-' }}元/扎
                  </view>
                  <view class="desc m-t-12">
                    <view class="m-r-15">剩余:{{ dto.stock || 0 }}</view>
                  </view>
                  <view class="button-icons flex">
                    <uni-icons v-if="dto.num&&dto.num>=1" type="minus" size="32"
                               @click="addnum(dto,-1)"></uni-icons>
                    <view class="curnums" v-if="dto.num&&dto.num>=1">{{ dto.num }}</view>
                    <uni-icons type="plus-filled" size="32" @click="addnum(dto,1)"></uni-icons>
                  </view>
                </view>
              </view>
            </view>
          </u-swipe-action-item>
        </u-swipe-action>
      </view>
    </view>
    <view style="min-height:200rpx">
    </view>
    <view class="bottom-price flex">
      <view>
        <radio :checked="checkall" @change="selectAll"></radio>
        全选
      </view>
      <view>
        合计:¥ {{ totalprice }} 元
      </view>
      <view class="button-green-1">
        提交订单
      </view>
    </view>
    <view style="min-height:200rpx">
    </view>
    <common-footer flg="2"></common-footer>
  </view>
</template>
<script>
    export default {
        data() {
            return {
            }
        },
        methods: {
        }
    }
import http from "../../../plugins/http";
export default {
  data() {
    return {
      tel: '15974805814',
      ids: [],
      checkall: false,
      options1: [{
        text: '删除'
      }]
    }
  },
  onShow() {
    if (this.sign['shopping']) {
      this.init()
    }
  },
  onLoad() {
    this.init()
  },
  computed: {
    totalprice() {
      let totalprice = 0
      this.list.forEach(dto => {
        dto.flowerList.forEach(item => {
          if (this.ids.indexOf(item.id) >= 0) {
            totalprice += item.price * item.num
          }
        })
      })
      return totalprice.toFixed(2)
    },
    methods: {
      async submitPay() {
        // order/confirm/info
        var arr = []
        for (var j = 0; j < this.list.flowerList; j++) {
          if (this.ids.indexOf(this.list.flowerList[j].id) >= 0) {
            arr.push({
              id: this.list.flowerList[j].id,
              num: this.list.flowerList[j].num
            })
          }
        }
        if (this.arr.length < 1) {
          return
        }
        this.$message.showLoading()
        const {code, data} = await http.request('post', '/api/api/customer/order/confirm/info', {
              data: {
                flowers: arr,
              }
            }
        )
        this.$message.hideLoading()
        if (code === 0) {
          uni.navigateTo({
            url: '/sub_pages/customer/shopping/confirm?dto=' + +encodeURIComponent(JSON.stringify(data))
          })
        }
      },
      async clickSwipeButton(item) {
        //删除商品,重新加载数据?
        this.$message.showLoading()
        const {code} = await http.request('post', '/api/api/customer/flower/cart/change-num', {
              data: {
                id: dto.id,
                num: addnum
              }
            }
        )
        this.$message.hideLoading()
        if (code === 0) {
          if (this.ids.indexOf(item.id) >= 0) {
            this.ids.splice(this.ids.indexOf(item.id), 1)
          }
          for (var i = 0; i < this.list.length; i++) {
            if (this.list[i].id === dto.supplierId) {
              this.list[i].splice(i, 1)
              if (this.list.flowerList.length === 1) {
                if (this.ids.indexOf(this.list[i].id) >= 0) {
                  this.ids.splice(this.ids.indexOf(this.list[i].id), 1)
                }
                this.list[i].flowerList.splice(0, 1)
                this.list.splice(i, 1)
              } else {
                //只需要清楚这个元素
                var k = -1
                for (var j = 0; j < this.list[i].flowerList.length; j++) {
                  if (this.list[i][j].id === item.id) {
                    k = j;
                    break
                  }
                }
                this.list[i].flowerList.splice(k, 1)
              }
              break
            }
          }
        }
      }
    },
    selectAll() {
      if (this.checkall) {
        this.ids = []
        this.checkall = false
      } else {
        list.for(dto => {
          if (this.ids.indexOf(dto.id) < 0) {
            this.ids.push(dto.id)
          }
          dto.flowerList.forEach(item => {
            if (this.ids.indexOf(item.id) < 0) {
              this.ids.push(item.id)
            }
          })
        })
      }
    },
    changeItem(dto, type) {
      if (type === 'supplier') {
        //全选上
        if (this.ids.indexOf(dto.id) < 0) {
          this.ids.push(dto.id)
          dto.flowerList.forEach(item => {
            if (this.ids.indexOf(item.id) < 0) {
              this.ids.push(item.id)
            }
          })
        } else {
          this.checkall = false
          this.ids.splice(this.ids.indexOf(dto.id), 1)
          dto.flowerList.forEach(item => {
            this.ids.splice(this.ids.indexOf(item.id), 1)
          })
        }
      } else {
        //更换个人的
        if (this.ids.indexOf(dto.id) < 0) {
          this.ids.push(dto.id)
        } else {
          this.checkall = false
          if (this.ids.indexOf(dto.supplierId) >= 0) {
            this.ids.splice(this.ids.indexOf(dto.supplierId), 1)
          }
        }
      }
    },
    async addnum(dto, addnum) {
      if (dto.num + addnum >= 0) {
      } else {
        return
      }
      this.$message.showLoading()
      const {code} = await http.request('post', '/api/api/customer/flower/cart/change-num', {
            data: {
              id: dto.id,
              num: addnum
            }
          }
      )
      this.$message.hideLoading()
      if (code === 0) {
        dto.num += addnum
      }
    },
    async init() {
      this.$message.showLoading()
      await this.$store.dispatch('sign_clear', 'shopping');
      const {code, data} = await this.$http.request('get', '/api/customer/flower/cart/list', {})
      this.$message.hideLoading()
      this.list = []
      if (code === 0) {
        this.list = data.list || []
      }
    }
  }
}
</script>
<style>
<style lang="scss" scoped>
.shopping-container {
  background-color: rgba(255, 255, 255, 0.4);
  padding: 20rpx 30rpx;
  .bottom-price {
    position: fixed;
    left: 0rpx;
    padding: 20rpx;
    right: 0rpx;
    bottom: 160rpx;
  }
  .shopping-item {
    padding: 28rpx 22rpx;
    position: relative;
    .sup-title {
    }
    .item-each {
      padding-left: 88rpx;
      .img {
        width: 124rpx;
        height: 124rpx;
      }
      .title {
        font-weight: 600;
        font-size: 28rpx;
        color: #000000;
        line-height: 40rpx;
        .level {
          color: #20613D;
        }
      }
      .price {
        font-weight: 400;
        font-size: 28rpx;
        color: #CF0000;
        line-height: 40rpx;
      }
      .desc {
        font-weight: 400;
        font-size: 24rpx;
        color: #666666;
        line-height: 34rpx;
      }
    }
    .button-icons {
      position: absolute;
    }
  }
  .top-title {
    font-size: 28rpx;
    color: #000000;
    line-height: 40rpx;
  }
  .top-desc {
    font-size: 24rpx;
    color: #666666;
    line-height: 34rpx;
  }
  .top-kf {
    background: linear-gradient(270deg, rgba(219, 244, 229, 0) 0%, #D5ECDE 100%);
    border-radius: 8rpx;
    font-weight: 400;
    font-size: 24rpx;
    color: #20613D;
    line-height: 52rpx;
    height: 52rpx;
    padding-left: 26rpx;
    .icon-clock {
      margin-top: 9rpx;
    }
  }
}
</style>
sub_pages/customer/trade/detail.vue
@@ -1,345 +1,368 @@
<template>
    <view class="trade-detail">
        <view class="top-img-container">
            <image src="" class="top-img"></image>
            <view class="icon-container">
                <image src="../../../static/common/icon-sc.png" class="icon-sc"></image>
                <view class="num">12</view>
            </view>
            <view class="icon-container">
                <image src="../../../static/common/icon-shop.png" class="icon-shop"></image>
  <view class="trade-detail">
    <view class="top-img-container">
      <image :src="dto.cover" class="top-img"></image>
      <view class="icon-container">
        <image src="../../../static/common/icon-sc.png" class="icon-sc"></image>
        <view class="num">12</view>
      </view>
      <view class="icon-container">
        <image src="../../../static/common/icon-shop.png" class="icon-shop"></image>
            </view>
        </view>
        <view class="info-container">
            <view class="title">
                <view class="level m-r-15">B级</view>
                <view class="">
                    {{dto.name || '-'}}
                </view>
            </view>
            <view class="desc m-t-12">
                <view class="m-r-15">已售:7</view>
                <view class="m-r-15">剩余:13</view>
                <view class=" ">10支/扎</view>
            </view>
            <view class="flex m-t-12">
                <view class="price m-r-a">
                    <span class="num">28.01</span>
                    元/扎
                </view>
                <view class="m-l-a m-r-15">
                    <image src="../../../static/common/icon-kf.png" class="icon-kf m-l-15 img100"></image>
      </view>
    </view>
    <view class="trade-info-container">
      <view class="title">
        <view class="level m-r-15">{{ dto.levelStr || '-' }}级</view>
        <view class="">
          {{ dto.name || '-' }}
        </view>
      </view>
      <view class="desc m-t-12">
        <view class="m-r-15">已售:{{ dto.sales || 0 }}</view>
        <view class="m-r-15">剩余:{{ dto.stock || 0 }}</view>
        <view class=" ">{{ dto.unit || '-' }}支/扎</view>
      </view>
      <view class="flex m-t-12">
        <view class="price m-r-a">
          <span class="num">{{ dto.price || '-' }}</span>
          元/扎
        </view>
        <view class="m-l-a m-r-15">
          <image src="../../../static/common/icon-kf.png" class="icon-kf m-l-15 img100"></image>
                </view>
                <view class="m-r-0 gwc">
                    + 购物车
                </view>
            </view>
        </view>
        <view class="line">
        </view>
        <view class="m-r-0 gwc" @click="submitShopping(dto)">
          + 购物车
        </view>
      </view>
    </view>
    <view class="line">
        </view>
        <view class="info-detail">
            <view class="title-before-blue" style="padding-top: 0rpx;padding-bottom: 0rpx;">详情</view>
            <view class="flex m-t-8">
                <view class="label">枝长:</view>
                <view class="value">70-75cm</view>
            </view>
            <view class="flex m-t-8">
                <view class="label">枝粗:</view>
                <view class="value">中等粗细</view>
            </view>
            <view class="flex m-t-8">
                <view class="label">均匀度:</view>
                <view class="value">1-2支不均匀</view>
            </view>
        </view>
        <view class="line">
    </view>
    <view class="info-detail" v-if="dto.params">
      <view class="title-before-blue" style="padding-top: 0rpx;padding-bottom: 0rpx;">详情</view>
      <view class="flex m-t-8" v-for="(param,index) of dto.params" :key="index">
        <view class="label">{{ param.name}}:</view>
        <view class="value">{{ param.value || '-'}}</view>
      </view>
<!--      <view class="flex m-t-8">-->
<!--        <view class="label">枝粗:</view>-->
<!--        <view class="value">中等粗细</view>-->
<!--      </view>-->
<!--      <view class="flex m-t-8">-->
<!--        <view class="label">均匀度:</view>-->
<!--        <view class="value">1-2支不均匀</view>-->
<!--      </view>-->
    </view>
    <view class="line">
        </view>
    </view>
        <view class="info-brand m-t-12" @click.stop="openbrand">
            <view class="title-before-blue" style="padding-top: 0rpx;padding-bottom: 0rpx;">店铺</view>
            <view class="flex">
                <image class="store-logo"></image>
                <view>
                    <view class="store-name">花仙子</view>
                    <view class="store-address">云南省-昆明市-官渡区</view>
                </view>
                <view class="store-to m-l-a m-r-0">进入店铺</view>
            </view>
        </view>
        <view class="m-t-20 shop-recommend-container">
            <view class="shop-recommend-title">店铺推荐</view>
            <view class="flex">
                <view v-for="i in 3" :key="i" class="shop-recommend">
                    <image src="" class="shop-recommend-image"></image>
                    <view class="shop-recommend-title m-t-8">
                        <view class="level m-r-15">B级</view>
                        <view class="">
                            {{dto.name || '-'}}
                        </view>
                    </view>
                    <view class="shop-recommend-price m-t-8">
                        ¥23.01/扎
                    </view>
                </view>
            </view>
        </view>
        <view class="line">
    <view class="info-brand m-t-12" @click.stop="openbrand">
      <view class="title-before-blue" style="padding-top: 0rpx;padding-bottom: 0rpx;">店铺</view>
      <view class="flex">
        <image class="store-logo"></image>
        <view>
          <view class="store-name">{{dto.supplierName||'-'}}</view>
          <view class="store-address">{{dto.supplierStation||'-'}}</view>
        </view>
        <view class="store-to m-l-a m-r-0">进入店铺</view>
      </view>
    </view>
    <view class="m-t-20 shop-recommend-container"  v-if="false">
      <view class="shop-recommend-title">店铺推荐</view>
      <view class="flex">
        <view v-for="i in 3" :key="i" class="shop-recommend">
          <image src="" class="shop-recommend-image"></image>
          <view class="shop-recommend-title m-t-8">
            <view class="level m-r-15">B级</view>
            <view class="">
              {{ dto.name || '-' }}
            </view>
          </view>
          <view class="shop-recommend-price m-t-8">
            ¥23.01/扎
          </view>
        </view>
      </view>
    </view>
    <view class="line">
        </view>
        <view class="comment-container m-t-12">
            <view class="title-before-blue" style="padding-top: 0rpx;padding-bottom: 0rpx;">
                <view>评价</view>
                <view class="desc">
                    7条评论
                    <uni-icons type="right" size="18" color="#B3B3B3"></uni-icons>
    </view>
    <view class="comment-container m-t-12" v-if="false">
      <view class="title-before-blue" style="padding-top: 0rpx;padding-bottom: 0rpx;">
        <view>评价</view>
        <view class="desc">
          7条评论
          <uni-icons type="right" size="18" color="#B3B3B3"></uni-icons>
                </view>
            </view>
            <view v-for="i in 3" :key="i" class="m-t-20 flex user-item">
                <image class="user-icon m-r-10"></image>
                <view>
                    <view class="name">用户名3370</view>
                    <view class="comment">非常棒,会回购</view>
                </view>
                <view class="stars">
        </view>
      </view>
      <view v-for="i in 3" :key="i" class="m-t-20 flex user-item">
        <image class="user-icon m-r-10"></image>
        <view>
          <view class="name">用户名3370</view>
          <view class="comment">非常棒,会回购</view>
        </view>
        <view class="stars">
                </view>
                <view class="date">
                    04-07 08:00
                </view>
            </view>
        </view>
        </view>
        <view class="date">
          04-07 08:00
        </view>
      </view>
    </view>
    </view>
  </view>
</template>
<script>
    export default {
        data() {
            return {
                dto: {
export default {
  data() {
    return {
      id: '',
      dto: {}
    }
  },
  onLoad(options) {
    this.id = options.id || ''
    if (this.id) {
      this.getDetail()
    }
  },
  methods: {
    async getDetail() {
      this.$message.showLoading()
      const {
        code,
        data
      } = await this.$http.request('get', '/api/customer/flower/list/view', {
        params: {
          id: this.id
        }
      })
      if (code === 0) {
        this.dto = {
          ...data,
        }
      }
                }
            }
        },
        methods: {
            openbrand() {
                uni.navigateTo({
                    url: '/sub_pages/customer/shop/shop?id=' + (this.dto.id || '')
                })
            }
        }
    }
      this.$message.hideLoading()
    },
    openbrand() {
      uni.navigateTo({
        url: '/sub_pages/customer/shop/shop?id=' + (this.dto.id || '')
      })
    }
  }
}
</script>
<style lang="scss" scoped>
    .trade-detail {
        background-color: #FFFFFF;
.trade-detail {
  background-color: #FFFFFF;
        .info-container {
            padding: 46rpx 30rpx;
            border-radius: 40rpx 40rpx 0rpx 0rpx;
  .trade-info-container {
    padding: 46rpx 30rpx;
    border-radius: 40rpx 40rpx 0rpx 0rpx;
            .title {
                font-weight: 600;
                font-size: 36rpx;
                color: #000000;
                line-height: 50rpx;
    .title {
      font-weight: 600;
      font-size: 36rpx;
      color: #000000;
      line-height: 50rpx;
                .level {
                    color: #20613D;
                }
            }
      .level {
        color: #20613D;
      }
    }
            .desc {
                font-weight: 400;
                font-size: 28rpx;
                color: #666666;
                line-height: 40rpx;
            }
    .desc {
      font-weight: 400;
      font-size: 28rpx;
      color: #666666;
      line-height: 40rpx;
    }
            .price {
                font-weight: 600;
                font-size: 28rpx;
                color: #CF0000;
                line-height: 40rpx;
    .price {
      font-weight: 600;
      font-size: 28rpx;
      color: #CF0000;
      line-height: 40rpx;
                .num {
                    font-size: 48rpx;
                    line-height: 66rpx;
                }
            }
      .num {
        font-size: 48rpx;
        line-height: 66rpx;
      }
    }
            .icon-kf {
                width: 44rpx;
                height: 44rpx;
            }
    .icon-kf {
      width: 44rpx;
      height: 44rpx;
    }
            .gwc {
                width: 168rpx;
                height: 48rpx;
                border-radius: 30rpx;
                border: 2rpx solid #20613D;
                font-size: 24rpx;
                color: #20613D;
                line-height: 48rpx;
                text-align: center;
            }
    .gwc {
      width: 168rpx;
      height: 48rpx;
      border-radius: 30rpx;
      border: 2rpx solid #20613D;
      font-size: 24rpx;
      color: #20613D;
      line-height: 48rpx;
      text-align: center;
    }
        }
  }
        .line {
            min-height: 20rpx;
            background: #F7F7F7;
        }
  .line {
    min-height: 20rpx;
    background: #F7F7F7;
  }
        .info-detail {
            padding: 18rpx 30rpx;
  .info-detail {
    padding: 18rpx 30rpx;
            .label {
                font-weight: 400;
                font-size: 28rpx;
                color: #666666;
                line-height: 40rpx;
                min-width: 160rpx;
                margin-right: 20rpx;
            }
    .label {
      font-weight: 400;
      font-size: 28rpx;
      color: #666666;
      line-height: 40rpx;
      min-width: 160rpx;
      margin-right: 20rpx;
    }
            .value {
                font-weight: 400;
                font-size: 28rpx;
                color: #666666;
                line-height: 40rpx;
            }
        }
    .value {
      font-weight: 400;
      font-size: 28rpx;
      color: #666666;
      line-height: 40rpx;
    }
  }
        .shop-recommend-title {
            font-weight: 400;
            font-size: 24rpx;
            color: #666666;
            line-height: 34rpx;
        }
  .shop-recommend-title {
    font-weight: 400;
    font-size: 24rpx;
    color: #666666;
    line-height: 34rpx;
  }
        .shop-recommend-container {
            padding: 24rpx 30rpx;
  .shop-recommend-container {
    padding: 24rpx 30rpx;
            .shop-recommend {
                .shop-recommend-image {
                    width: 214rpx;
                    height: 214rpx;
                    background-size: 100% 100%;
                    border-radius: 8rpx;
                }
    .shop-recommend {
      .shop-recommend-image {
        width: 214rpx;
        height: 214rpx;
        background-size: 100% 100%;
        border-radius: 8rpx;
      }
                .shop-recommend-title {
                    font-weight: 600;
                    font-size: 28rpx;
                    color: #000000;
                    line-height: 40rpx;
      .shop-recommend-title {
        font-weight: 600;
        font-size: 28rpx;
        color: #000000;
        line-height: 40rpx;
                    .level {
                        color: #20613D;
                        ;
                    }
                }
            }
        }
        .level {
          color: #20613D;;
        }
      }
    }
  }
        .comment-container {
            padding: 18rpx 30rpx;
  .comment-container {
    padding: 18rpx 30rpx;
            .desc {
                font-weight: 400;
                font-size: 24rpx;
                color: #666666;
                line-height: 34rpx;
            }
    .desc {
      font-weight: 400;
      font-size: 24rpx;
      color: #666666;
      line-height: 34rpx;
    }
            .user-item {
                .user-icon {
                    width: 72rpx;
                    height: 72rpx;
                    background-size: 100% 100%;
                    border-radius: 50%;
                }
    .user-item {
      .user-icon {
        width: 72rpx;
        height: 72rpx;
        background-size: 100% 100%;
        border-radius: 50%;
      }
                .name {
                    font-weight: 600;
                    font-size: 24rpx;
                    color: #000000;
                    line-height: 34rpx;
                }
      .name {
        font-weight: 600;
        font-size: 24rpx;
        color: #000000;
        line-height: 34rpx;
      }
                .comment {
                    font-weight: 400;
                    font-size: 24rpx;
                    color: #666666;
                    line-height: 34rpx;
                }
      .comment {
        font-weight: 400;
        font-size: 24rpx;
        color: #666666;
        line-height: 34rpx;
      }
                .date {
                    font-weight: 400;
                    font-size: 24rpx;
                    color: #666666;
                    line-height: 72rpx;
                }
            }
        }
      .date {
        font-weight: 400;
        font-size: 24rpx;
        color: #666666;
        line-height: 72rpx;
      }
    }
  }
        .top-img-container {
            position: relative;
  .top-img-container {
    position: relative;
            .top-img {
                width: 750rpx;
                height: 764rpx;
            }
    .top-img {
      width: 750rpx;
      height: 764rpx;
    }
            .icon-container {
                position: absolute;
                top: 20rpx;
                width: 80rpx;
                height: 80rpx;
                background: rgba(0, 0, 0, 0.42);
    .icon-container {
      position: absolute;
      top: 20rpx;
      width: 80rpx;
      height: 80rpx;
      background: rgba(0, 0, 0, 0.42);
                .icon-sc {
                    width: 54rpx;
                    height: 54rpx;
                    margin: 0 auto;
                    margin-top: 12rpx;
                }
      .icon-sc {
        width: 54rpx;
        height: 54rpx;
        margin: 0 auto;
        margin-top: 12rpx;
      }
                .icon-shop {
                    width: 54rpx;
                    height: 54rpx;
                    margin: 0 auto;
                    margin-top: 12rpx;
                }
      .icon-shop {
        width: 54rpx;
        height: 54rpx;
        margin: 0 auto;
        margin-top: 12rpx;
      }
                .num {
                    font-weight: 400;
                    font-size: 20rpx;
                    color: #FFFFFF;
                    line-height: 28rpx;
                    position: absolute;
                    top: 6prx;
                    right: 16rpx;
                }
            }
      .num {
        font-weight: 400;
        font-size: 20rpx;
        color: #FFFFFF;
        line-height: 28rpx;
        position: absolute;
        top: 6prx;
        right: 16rpx;
      }
    }
            .icon-container:last-child {
                left: 120rpx;
            }
    .icon-container:last-child {
      left: 120rpx;
    }
            .icon-container:first-child {
                left: 20rpx;
            }
    .icon-container:first-child {
      left: 20rpx;
    }
        }
    }
  }
}
</style>
sub_pages/supplier/flower-manage/flower-add.vue
@@ -539,8 +539,8 @@
                }
                var tmp = parseFloat(this.dto.price)
                if (isNaN(tmp) || parseFloat('' + tmp).toFixed(3) !== parseFloat('' + this.dto.price).toFixed(3)) {
                    this.$message.showToast('商品价格格式错误,精确到分')
                    console.log('a1', ('' + tmp) )
                    this.$message.showToast('商品价格格式错误,精确到分')
                    console.log('a1', ('' + tmp) )
                    console.log('a1', ('' + this.dto.price))
                    return
                }