1
xuxueyang
2024-07-26 3d1e8016516b1b27def77871c8644be363d4fb88
1
已删除4个文件
已修改6个文件
2392 ■■■■ 文件已修改
common/airport.js 262 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
common/html-parser.js 352 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
common/self_base.js 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
environments/index.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main.js 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mixin/mixin.js 723 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modifyManifest.js 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages.json 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sub_pages/customer/self/collect.vue 286 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sub_pages/customer/trade/detail.vue 640 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
common/airport.js
文件已删除
common/html-parser.js
文件已删除
common/self_base.js
文件已删除
environments/index.js
@@ -3,12 +3,9 @@
    httpBaseUri: 'https://www.hmyxianhua.com/flower',
    // httpBaseUri: 'http://47.99.58.211/flower',
    // httpBaseUri: 'http://localhost:8080/flower',
    clientId: '',
    secret: '',
    tenantId: '',
    appDownloadUri: 'http://xxx/app/',
    websocketUrl: '',
    type: 'dev'
}
main.js
@@ -1,4 +1,4 @@
// #ifndef VUE3
import Vue from 'vue'
import App from './App'
import store from './store'
@@ -13,8 +13,8 @@
Vue.prototype.$storage = storage
import util from './plugins/util'
Vue.prototype.$util = util
import self_base from './common/self_base.js'
Vue.use(self_base);
// import self_base from './common/self_base.js'
// Vue.use(self_base);
import mixinsCommon from './mixin/mixin.js'
Vue.mixin(mixinsCommon)
@@ -92,17 +92,3 @@
    ...App
})
app.$mount()
// #endif
// #ifdef VUE3
import {
    createSSRApp
} from 'vue'
import App from './App.vue'
export function createApp() {
    const app = createSSRApp(App)
    return {
        app
    }
}
// #endif
mixin/mixin.js
@@ -1,515 +1,250 @@
import {
    mapState
    mapState
} from 'vuex'
import store from "../store";
import environments from '@/environments'
// 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',
        }
    },
    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 {
                }
            } 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 {
                    }
                })
            }
        },
    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',
            regUserName: '',
            regAvatarUrl: '',
        }
    },
    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; // 获取微信昵称
        },
        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()
        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(type = 'get') {
            this.page.current = 1
            await this.getList(type)
        },
        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 (data && Array.isArray(data)) {
                        this.list = data || []
                        this.page.total = data.length || 0
                    } else {
                        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)
                                }
                            }
                            //     this.$refs.popup_info.open()
                        }
                        this.page.total = data.total || 0
                    }
                            // } else {
                            await this.$store.dispatch('loginwx', {
                                code: res.code,
                                imgurl: imgurl,
                                nickname: nickname,
                                inviter: inviter
                            });
                            tmp.$message.hideLoading()
                            this.$forceUpdate()
                            //延迟,如果用户昵称是微信用户的话?
                    if (this.getList_after) {
                        this.getList_after()
                    }
                }
                this.$message.hideLoading()
            }
                            setTimeout(() => {
                                if (tmp.currentInfo && tmp.currentInfo.id) {
                                    if (tmp.currentInfo.nickName == '微信用户') {
                                        tmp.$refs.popup_info && tmp.$refs.popup_info.open()
                                    }
                                }
                            }, 500)
                            // }
        },
        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
                }
                        } else {
                            tmp.$message.hideLoading()
                            tmp.$message.showToast('微信登录失败');
            }
            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()
                        }
                    },
                    error: res => {
                        console.log('wx.login error', res);
                        tmp.$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) => {
                        tmp.$message.showToast('微信授权失败');
                    }
                });
            }
        },
                                    console.log(err);
                                    uni.showToast({
                                        icon: 'none',
                                        mask: true,
                                        title: '下载成功保存失败',
                                    });
                                },
                            });
                        }
                    },
                    fail: (err) => {
                        _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(type = 'get') {
            this.page.current = 1
            await this.getList(type)
        },
        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 (data && Array.isArray(data)) {
                        this.list = data || []
                        this.page.total = data.length || 0
                    } else {
                        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)
                                }
                            }
                        console.log(err);
                        uni.showToast({
                            icon: 'none',
                            mask: true,
                            title: '失败请重新下载',
                        });
                    },
                });
            }
        }
        // #endif
                        }
                        this.page.total = data.total || 0
                    }
                    if (this.getList_after) {
                        this.getList_after()
                    }
                }
                this.$message.hideLoading()
            }
        },
        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.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()
                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: '下载成功保存失败',
                                    });
                                },
                            });
                        }
                    },
                    fail: (err) => {
                        _this.$message.hideLoading()
                        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
            let that = this
            that.$message.showLoading()
            // wx.sa
            // wx.downloadFile({
            //     url: url2,
            //     success: res => {
            //         that.$message.showToast('下载成功')
            //     },
            //     fail: 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 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('打开文档失败,非支持的类型')
                                }
                            })
                        } else {
                            wx.openDocument({
                                filePath: filePath,
                                showMenu: true, //关键点
                                success: function (res) {
                                    console.log('打开文档成功')
                                },
                                fail: function (res) {
                                    that.$message.showToast('打开文档失败,非支持的类型')
                                }
                            })
                        }
                    } else {
                        that.$message.showToast('下载失败,服务器内部错误')
                    }
                },
                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
modifyManifest.js
文件已删除
pages.json
@@ -99,7 +99,9 @@
        "navigationBarTitleText": "订单详情",
        "enablePullDownRefresh": false
      }
    },
    }
    // #ifdef PUB_PARTNER
    ,
    {
      "path": "sub_pages/partner/delivery/delivery",
      "style": {
@@ -113,7 +115,8 @@
        "navigationBarTitleText": "质检详情",
        "enablePullDownRefresh": true
      }
    }
    }
    // #endif
  ],
  "subPackages": [
    {
@@ -141,7 +144,7 @@
            "enablePullDownRefresh": false
          }
        },
        // #endif
        {
          "path": "order-settlement/order-settlement",
          "style": {
@@ -163,7 +166,8 @@
            "enablePullDownRefresh": true,
            "navigationBarBackgroundColor": "#E6F2EB"
          }
        },
        },
        // #endif
        {
          "path": "protocol",
          "style": {
sub_pages/customer/self/collect.vue
@@ -1,158 +1,166 @@
<template>
  <view class="page-collect p20">
    <view class="search-container bg-white 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 p10 bg-white">
      <view class="flex1" @click.stop="order_show=true">
        {{ this.query.columnStr || '排序' }}
        <image src="../../../static/common/icon-arrow-down.png" class="icon-arrow-down"></image>
      </view>
      <view class="flex1" @click.stop="level_show=true">
        {{ this.query.levelStr || '级别' }}
        <image src="../../../static/common/icon-arrow-down.png" class="icon-arrow-down"
        ></image>
      </view>
    </view>
    <no-data v-if="!list||list.length===0" style="width: 100%;"></no-data>
    <view class="page-collect p20">
        <view class="search-container bg-white 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 p10 bg-white">
            <view class="flex1" @click.stop="order_show=true">
                {{ this.query.columnStr || '排序' }}
                <image src="../../../static/common/icon-arrow-down.png" class="icon-arrow-down"></image>
            </view>
            <view class="flex1" @click.stop="level_show=true">
                {{ this.query.levelStr || '级别' }}
                <image src="../../../static/common/icon-arrow-down.png" class="icon-arrow-down"></image>
            </view>
        </view>
        <no-data v-if="!list||list.length===0" style="width: 100%;"></no-data>
    <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>
        <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 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 class="m-r-0 gwc" @click="submitShopping(dto)">
                        + 购物车
                    </view>
                </view>
            </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: [[]],
    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.getList()
                order_show: false,
                order_columns: [
                    []
                ]
            }
        },
        onLoad() {
            this.listApi = '/api/collect/list'
            this.getList()
    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_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
      this.refreshList()
            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: {
            async submitShopping(dto) {
                //提交到购物车中
                this.$message.showLoading()
                await this.$store.dispatch('submitShopping', dto);
                this.$message.hideLoading()
            },
            select_level(e) {
                this.level_show = false
                this.query.levelStr = e.value[0].label
                this.query.level = e.value[0].value
                this.refreshList()
    },
    select_order(e) {
      this.order_show = false
      this.query.columnStr = e.value[0].label
      this.query.column = e.value[0].value
      this.refreshList()
            },
            select_order(e) {
                this.order_show = false
                this.query.columnStr = e.value[0].label
                this.query.column = e.value[0].value
                this.refreshList()
    },
  }
}
            },
        }
    }
</script>
<style lang="scss" scoped>
.page-collect {
  .search-container {
    display: flex;
    margin: 12rpx 0rpx 20rpx 0rpx;
    position: relative;
    z-index: 1;
    .page-collect {
        .search-container {
            display: flex;
            margin: 12rpx 0rpx 20rpx 0rpx;
            position: relative;
            z-index: 1;
    .input {
      background-color: #fff !important;
      border-radius: 8rpx;
    }
            .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>
            .button {
                min-width: 120rpx;
                max-width: 120rpx;
                margin-left: auto;
                margin-right: 0rpx;
                text-align: right;
                line-height: 70rpx !important;
            }
        }
    }
</style>
sub_pages/customer/trade/detail.vue
@@ -1,371 +1,379 @@
<template>
  <view class="trade-detail">
    <view class="top-img-container">
      <image :src="dto.cover" class="top-img" mode="aspectFill"></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" @click="submitShopping(dto)" class="icon-shop"></image>
    <view class="trade-detail">
        <view class="top-img-container">
            <image :src="dto.cover" class="top-img" mode="aspectFill"></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" @click="submitShopping(dto)" class="icon-shop">
                </image>
      </view>
    </view>
    <view class="trade-info-container">
      <view class="title flex">
        <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>
        <view class="trade-info-container">
            <view class="title flex">
                <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 class="line">
                </view>
                <view class="m-r-0 gwc" @click="submitShopping(dto)">
                    + 购物车
                </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 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 m-t-12">
        <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 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 m-t-12">
                <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" 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 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 {
      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,
        }
      }
    export default {
        data() {
            return {
                id: '',
                dto: {}
            }
        },
        onLoad(options) {
            this.id = options.id || ''
            if (this.id) {
                this.getDetail()
            }
        },
        methods: {
            async submitShopping(dto) {
                //提交到购物车中
                this.$message.showLoading()
                await this.$store.dispatch('submitShopping', dto);
                this.$message.hideLoading()
            },
            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,
                    }
                }
      this.$message.hideLoading()
                this.$message.hideLoading()
    },
    openbrand() {
      uni.navigateTo({
        url: '/sub_pages/customer/shop/shop?id=' + (this.dto.id || '')
      })
    }
  }
}
            },
            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;
  .trade-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);
            .icon-container {
                position: absolute;
                top: 20rpx;
                width: 80rpx;
                height: 80rpx;
                background: rgba(0, 0, 0, 0);
      .icon-sc {
        width: 54rpx;
        height: 54rpx;
        margin: 0 auto;
        margin-top: 12rpx;
        display: inline-block;
      }
                .icon-sc {
                    width: 54rpx;
                    height: 54rpx;
                    margin: 0 auto;
                    margin-top: 12rpx;
                    display: inline-block;
                }
      .icon-shop {
        width: 54rpx;
        height: 54rpx;
        margin: 0 auto;
        margin-top: 12rpx;
        display: inline-block;
                .icon-shop {
                    width: 54rpx;
                    height: 54rpx;
                    margin: 0 auto;
                    margin-top: 12rpx;
                    display: inline-block;
      }
                }
      .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: 140rpx;
    }
            .icon-container:last-child {
                left: 140rpx;
            }
    .icon-container:first-child {
      left: 40rpx;
    }
            .icon-container:first-child {
                left: 40rpx;
            }
  }
}
        }
    }
</style>