From 87a56274d598af9842b593ec972f517161f60707 Mon Sep 17 00:00:00 2001 From: 陶杰 <1378534974@qq.com> Date: 星期日, 19 一月 2025 18:44:27 +0800 Subject: [PATCH] 1.v6-屏蔽微信登录 --- pages/order/order-detail.vue | 1626 ++++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 1,016 insertions(+), 610 deletions(-) diff --git a/pages/order/order-detail.vue b/pages/order/order-detail.vue index a7e0920..e1b2d99 100644 --- a/pages/order/order-detail.vue +++ b/pages/order/order-detail.vue @@ -1,142 +1,403 @@ <script> - export default { - data() { - return { - id: '', - dto: {}, - showSales: false, - submitForm: {}, - timer: undefined, - type: '', - // #ifdef PUB_CUSTOMER - type: 'customer', - // #endif - // #ifdef PUB_PARTNER - type: 'partner', - // #endif - }; - }, - onUnload() { - this.timer && clearTimeout(this.timer) - }, - async onLoad(options) { - console.log('options', options) +export default { + data() { + return { + id: '', + dto: {}, + showSales: false, + submitForm: {}, + timer: undefined, + type: '', + // #ifdef PUB_CUSTOMER + type: 'customer', + // #endif + // #ifdef PUB_PARTNER + type: 'partner', + // #endif + salesTypeDef: 0, + salesTypeList: [], + order_cancel_time: 15, + tel: '', + }; + }, + onUnload() { + this.timer && clearTimeout(this.timer) + }, + async onLoad(options) { + console.log('options', options) + // 获取支付配置 + await this.getOrderCancelTimeConfig() - this.id = options.id || '' - if (this.id) { + this.id = options.id || '' + if (this.id) { - await this.getDetail() - await this.getItemList() - this.submitForm = { - orderId: this.id, - // imageList: [], - videoList: [], - reason: '', - // orderItems: [], - orderItemId: options.flowerId || '', - num: 0, - pictureList: [] - } - this.showSales = options.showsales && true || false + await this.getDetail() + await this.getItemList() + this.submitForm = { + orderId: this.id, + // imageList: [], + videoList: [], + salesType: '', + reason: '', + // orderItems: [], + orderItemId: options.flowerId || '', + num: 0, + pictureList: [] + } + this.showSales = options.showsales && true || false + + if (this.dto.statusBackend === 'PENDING' || this.dto.status === 'PENDING') { - if (this.dto.statusBackend === 'PENDING') { - this.timer = setInterval(() => { - //倒计时 - var nowdate = new Date().getTime() - 1000 * 60 * 5 - var change = false + this.timer = setInterval(async () => { + //倒计时,修改成 + // var nowdate = new Date().getTime() - 1000 * 60 * 15 + let res = await this.$http.request('get', `/api/order/time/now`, { + params: {} + }) + let serverTime = res.data; - //计算倒计时 - var diff = new Date(this.dto.createTime).getTime() - nowdate - console.log('diff', diff) - if (diff <= 2000 && true) { - //超过了5分钟 - this.dto.statusBackend = 'CANCEL' - this.dto.statusBackendStr = '已取消' - this.dto.status = 'CANCEL' - this.dto.statusStr = '已取消' + //倒计时 + // var nowdate = serverTime - 1000 * 60 * 15 + var nowdate = serverTime - 1000 * 60 * this.order_cancel_time - this.dto.bctime = '' - // console.log('change cancel', this.dto) - change = true - clearInterval(this.timer) - this.timer = undefined + var change = false + + //计算倒计时 + var diff = new Date(this.dto.createTime).getTime() - nowdate + console.log('diff', diff) + if (diff <= 2000 && true) { + //超过了5分钟 + this.dto.statusBackend = 'CANCEL' + this.dto.statusBackendStr = '已取消' + this.dto.status = 'CANCEL' + this.dto.statusStr = '已取消' + + this.dto.bctime = '' + // console.log('change cancel', this.dto) + change = true + clearInterval(this.timer) + this.timer = undefined + } else { + //相差 + var alltime = parseInt(diff / 1000) + var tt = 0 + if (alltime > 60) { + tt = alltime - parseInt(alltime / 60) * 60 } else { - //相差 - var alltime = parseInt(diff / 1000) - var tt = 0 - if (alltime > 60) { - tt = alltime - parseInt(alltime / 60) * 60 - } else { - tt = alltime - } - this.dto.bctime = `0${parseInt(alltime / 60)}:${tt<10?'0':''}${tt}` - change = true - + tt = alltime } + // this.dto.bctime = `0${parseInt(alltime / 60)}:${tt<10?'0':''}${tt}` + this.dto.bctime = `${parseInt(alltime / 60) < 10 ? '0' : ''}${parseInt(alltime / 60)}:${tt < 10 ? '0' : ''}${tt}` + + change = true + + } - if (change) - this.$forceUpdate() - }, 1000) + if (change) + this.$forceUpdate() + }, 1000) + } + + + } + + this.$http.request('get', '/api/code/value', { + params: { + type: 'after_sale_type' + } + }).then(res => { + var data = res.data; + + let tmpData = data.map(item => ({ + value: item.value, + label: item.label + })); + + // 将 '全部' 选项插入到 tmpData 的开头 + this.salesTypeList = tmpData; + this.salesTypeList.unshift({ + label: '全部', + value: '' + }); + + }) + + }, + + onShow() { + this.getHotLineConfig() + }, + + methods: { + + async getHotLineConfig() { + this.$message.showLoading() + const { + code, + data + } = await this.$http.request('get', `/v2/config-param/base/getBaseString`, { + params: { + paramGroup: "servicehotline", + paramKey: "hotline_tel" + } + }) + this.$message.hideLoading() + if (code === 0) { + // 电话 + console.log(data) + this.tel =data + } + }, + + // 商品评论 + commentButtonClick() { + // 跳转的到评论列表 + uni.navigateTo({ + url: '/pages/order/comment/order-comment?orderId=' + this.id + }) + }, + openbrand(item) { + //也要判断一下是否重复进入 + //判断堆栈,如果是店铺,就直接返回 + //或者是:从商铺到列表再到详情,再到商铺,这种也不行 + const pages = getCurrentPages(); + console.log('toShopping', pages) + if (pages && pages.length >= 2) { + if (pages[pages.length - 2].route === "sub_pages/customer/shop/shop") { + uni.navigateBack() + return + } + } + if (pages && pages.length >= 3) { + if (pages[pages.length - 3].route === "sub_pages/customer/shop/shop" && + pages[pages.length - 2].route === "sub_pages/customer/trade/list" + ) { + uni.navigateBack({ + delta: 2 + }) + return + } + } + + if (pages.length >= 10) { + //直接强制购物车 + uni.reLaunch({ + url: '/sub_pages/customer/shop/shop?id=' + (item.supplierId || '') + }) + } else { + uni.navigateTo({ + url: '/sub_pages/customer/shop/shop?id=' + (item.supplierId || '') + }) + } + + }, + + toFlowerDetail(item) { + console.log(item) + uni.navigateTo({ + url: `/sub_pages/customer/trade/detail?id=${item.flowerId}` + }) + }, + salesTypeChange(e) { + this.submitForm.salesType = e.value + }, + + async getDetail() { + this.$message.showLoading() + const { + code, + data + } = await this.$http.request('get', `/api/${this.type}/order/list/view`, { + params: { + id: this.id + } + }) + this.$message.hideLoading() + console.log('getDetail', data) + if (code === 0) { + this.dto = { + ...this.dto, + ...data, + // pointGoodsList: [{ + // name: '1', + // num: 1, + // description: 'descriptiondescriptiondescriptiondescriptiondescription' + // }] + } + if (this.dto.statusBackend === 'PENDING') { + let res = await this.$http.request('get', `/api/order/time/now`, { + params: {} + }) + let serverTime = res.data; + //先判断要不要字节变成已取消 + // var nowdate = serverTime - 1000 * 60 * 15 + var nowdate = serverTime - 1000 * 60 * this.order_cancel_time + // var nowdate = new Date().getTime() - 1000 * 60 * 5 + var diff = new Date(this.dto.createTime).getTime() - nowdate + + if (diff <= 2000 && true) { + //超过了5分钟 + this.dto.statusBackend = 'CANCEL' + this.dto.statusBackendStr = '已取消' + this.dto.status = 'CANCEL' + this.dto.statusStr = '已取消' + this.dto.bctime = '' + this.$forceUpdate() + } + } } }, - methods: { + async callTel() { + await this.$message.confirm('是否拨打客服电话') + uni.makePhoneCall({ + phoneNumber: this.tel + }); + // uni.makePhoneCall({ + // phoneNumber: '19288780072' + // }); - async getDetail() { - this.$message.showLoading() - const { - code, - data - } = await this.$http.request('get', `/api/${this.type}/order/list/view`, { - params: { - id: this.id - } - }) - this.$message.hideLoading() - console.log('getDetail', data) - if (code === 0) { - this.dto = { - ...this.dto, - ...data + + }, + + async getTelNum() { + this.$http.request('get', '/api/code/value', { + params: { + type: 'customer_service_hotline' + } + }).then(res => { + var data = res.data; + + console.log(data) + + }) + }, + + async getOrderCancelTimeConfig() { + this.$message.showLoading() + const { + code, + data + } = await this.$http.request('get', `/v2/config-param/base/getBaseString`, { + params: { + paramGroup: "order", + paramKey: "order_cancel_time" + + } + }) + this.$message.hideLoading() + + if (code === 0) { + console.log(data) + this.order_cancel_time =data + } + }, + + async getItemList() { + this.$message.showLoading() + const { + code, + data + } = await this.$http.request('get', `/api/${this.type}/order/item/list`, { + params: { + id: this.id + } + }) + this.$message.hideLoading() + console.log('getItemList', data) + if (code === 0) { + this.list = data || [] + console.log('data', this.list) + } + }, + async buttonClick(buttontype) { + switch (buttontype) { + case 'refund': { + await this.$message.confirm('是否确定申请退款') + // 发送请求 + this.$message.showLoading() + const { + code + } = await this.$http.request('get', '/api/customer/order/refund', { + params: { + id: this.id, + } + }) + this.$message.hideLoading() + if (code === 0) { + this.getDetail() } } - }, - async callTel() { - await this.$message.confirm('是否拨打客服电话') - uni.makePhoneCall({ - phoneNumber: '15974805814' - }); - }, - async getItemList() { - this.$message.showLoading() - const { - code, - data - } = await this.$http.request('get', `/api/${this.type}/order/item/list`, { - params: { - id: this.id + break + case 'confirm': { + await this.$message.confirm('是否确定收货') + + var tryCallWx = false + // #ifdef MP + let tmp = this + if (wx.openBusinessView && tmp.dto && tmp.dto.paymentTrId) { + tryCallWx = true + wx.openBusinessView({ + businessType: 'weappOrderConfirm', + extraData: { + // merchant_id: '', + // merchant_trade_no: '', + // merchant_id: '1661512517', + // merchant_trade_no: tmp.id || '', + transaction_id: tmp.dto && tmp.dto.paymentTrId || '' + }, + async success(info) { + console.log('info', info) + //dosomething + // 发送请求 + if (info.extraData && info.extraData.status === 'fail') { + tmp.$message.showToast('支付和确认收货需要是同一微信号,请联系实际支付人登录确认') + + } else if (info.extraData && info.extraData.status === 'cancel') { + + } else { + tmp.$message.showLoading() + const { + code + } = await tmp.$http.request('get', + '/api/customer/order/receive/confirm', { + params: { + id: tmp.id, + } + }) + tmp.$message.hideLoading() + if (code === 0) { + tmp.getDetail() + tmp.$store.dispatch('getCurrentInfo') + } + + } + + }, + fail(e) { + //dosomething + console.log('error fail', e) + tmp.$message.showToast('收货失败') + }, + complete() { + //dosomething + } + }); } - }) - this.$message.hideLoading() - console.log('getItemList', data) - if (code === 0) { - this.list = data || [] - console.log('data', this.list) - } - }, - async buttonClick(buttontype) { - switch (buttontype) { - case 'refund': { - await this.$message.confirm('是否确定申请退款') + + // #endif + + if (!tryCallWx) { + // 发送请求 this.$message.showLoading() const { code - } = await this.$http.request('get', '/api/customer/order/refund', { + } = await this.$http.request('get', '/api/customer/order/receive/confirm', { params: { id: this.id, } @@ -144,266 +405,332 @@ this.$message.hideLoading() if (code === 0) { this.getDetail() + this.$store.dispatch('getCurrentInfo') + this.$message.showToast('收货成功') } } + + } break - case 'confirm': { - await this.$message.confirm('是否确定收货') - - var tryCallWx = false - // #ifdef MP - let tmp = this - if (wx.openBusinessView && tmp.dto && tmp.dto.paymentTrId) { - tryCallWx = true - wx.openBusinessView({ - businessType: 'weappOrderConfirm', - extraData: { - // merchant_id: '', - // merchant_trade_no: '', - transaction_id: tmp.dto && tmp.dto.paymentTrId || '' - }, - async success() { - //dosomething - // 发送请求 - tmp.$message.showLoading() - const { - code - } = await tmp.$http.request('get', - '/api/customer/order/receive/confirm', { - params: { - id: tmp.id, - } - }) - tmp.$message.hideLoading() - if (code === 0) { - tmp.getDetail() - } - }, - fail(e) { - //dosomething - console.log('error fail', e) - tmp.$message.showToast('收货失败') - }, - complete() { - //dosomething - } - }); + case 'payAgain': { + await this.$message.confirm('是否确定重新支付') + // 发送请求 + this.$message.showLoading() + const { + code, + data + } = await this.$http.request('get', '/api/customer/order/payAgain', { + params: { + id: this.id, } + }) - // #endif - - if (!tryCallWx) { - - // 发送请求 - this.$message.showLoading() - const { - code - } = await this.$http.request('get', '/api/customer/order/receive/confirm', { - params: { - id: this.id, - } - }) - this.$message.hideLoading() - if (code === 0) { - this.getDetail() + this.$message.hideLoading() + if (code === 0) { + //微信接口 + let that = this + wx.requestPayment({ + ...data, + async success(res) { + console.log('pay success', res) + await that.$message.showToast('支付成功') + that.getDetail() + }, + fail(err) { + console.error('pay fail', err) + that.$message.showToast('支付失败') } - } + }) } + + } break - case 'payAgain': { - await this.$message.confirm('是否确定重新支付') + case 'evaluate': { + const res = await this.$message.confirm('', { + editable: true, + title: '请输入评价信息' + }) + if (res.content && res.confirm) { // 发送请求 this.$message.showLoading() const { - code, - data - } = await this.$http.request('get', '/api/customer/order/payAgain', { - params: { + code + } = await this.$http.request('post', '/api/customer/order/evaluate', { + data: { id: this.id, + evaluate: res.content } }) this.$message.hideLoading() if (code === 0) { - //微信接口 - let that = this - wx.requestPayment({ - ...data, - async success(res) { - console.log('pay success', res) - await that.$message.showToast('支付成功') - that.getDetail() - }, - fail(err) { - console.error('pay fail', err) - that.$message.showToast('支付失败') - } - }) - - } - - } - break - case 'evaluate': { - const res = await this.$message.confirm('', { - editable: true, - title: '请输入评价信息' - }) - if (res.content && res.confirm) { - // 发送请求 - this.$message.showLoading() - const { - code - } = await this.$http.request('post', '/api/customer/order/evaluate', { - data: { - id: this.id, - evaluate: res.content - } - }) - this.$message.hideLoading() - if (code === 0) { - this.getDetail() - } + this.getDetail() } } + } break - // case 'sales': { - // //新增售后单 - // //去新的页面加上这些选择? - // this.submitForm = { - // orderId: this.id, - // imageList: [], - // videoList: [], - // reason: '', - // orderItems: [], - // } - // this.showSales = true + // case 'sales': { + // //新增售后单 + // //去新的页面加上这些选择? + // this.submitForm = { + // orderId: this.id, + // imageList: [], + // videoList: [], + // reason: '', + // orderItems: [], + // } + // this.showSales = true - // } - default: - break - } - }, - changeSalesOrderItem(dto) { - if (this.submitForm.orderItems.indexOf(dto.id) < 0) { - this.submitForm.orderItems.push(dto.id) - } else { - this.submitForm.orderItems.splice(this.submitForm.orderItems.indexOf(dto.id), 1) - } - }, - deleteCheckImage(key, index) { - this.submitForm[key].splice(index, 1) - this.$forceUpdate() - }, - uploadIcon(key) { - console.log('that dto key', key) - const that = this - if (key === 'video') { - uni.chooseVideo({ - maxDuration: 30, - sourceType: ['camera', 'album'], - success: function(res) { - if (res.size > 1024 * 1024 * 50) { - that.$message.confirm('视频最多支持50M大小,超出大小限制') - return - } - if (res.tempFilePath) { - console.log('res.tempFilePath', res.tempFilePath) - that.$message.showLoading() - that.$http.upload(res.tempFilePath).then(async res => { - var pic = res.data && res.data.length > 0 && res.data[ - 0] - .url || '' - that.$message.hideLoading() - that.submitForm.videoList.push(pic || '') - - that.$forceUpdate() - }).catch(res => { - that.$message.hideLoading() - console.error(res) - }) - } + // } + default: + break + } + }, + changeSalesOrderItem(dto) { + if (this.submitForm.orderItems.indexOf(dto.id) < 0) { + this.submitForm.orderItems.push(dto.id) + } else { + this.submitForm.orderItems.splice(this.submitForm.orderItems.indexOf(dto.id), 1) + } + }, + deleteCheckImage(key, index) { + this.submitForm[key].splice(index, 1) + this.$forceUpdate() + }, + uploadIcon(key) { + console.log('that dto key', key) + const that = this + if (key === 'video') { + uni.chooseVideo({ + maxDuration: 30, + sourceType: ['camera', 'album'], + success: function (res) { + if (res.size > 1024 * 1024 * 50) { + that.$message.confirm('视频最多支持50M大小,超出大小限制') + return } - }); - } else { + if (res.tempFilePath) { + console.log('res.tempFilePath', res.tempFilePath) + that.$message.showLoading() + that.$http.upload(res.tempFilePath).then(async res => { + var pic = res.data && res.data.length > 0 && res.data[ + 0] + .url || '' + that.$message.hideLoading() + that.submitForm.videoList.push(pic || '') + + that.$forceUpdate() + }).catch(res => { + that.$message.hideLoading() + console.error(res) + that.$message.showToast('文件上传失败,请联系管理员') + }) + } + } + }); + } else { + + // uni.chooseImage({ + // count: 9, // 最多可以选择的图片张数,默认9 + // sizeType: ['compressed'], //original 原图,compressed 压缩图,默认二者都有 + // sourceType: ['camera', 'album'], //album 从相册选图,camera 使用相机,默认二者都有。如需直接开相机或直接选相册,请只使用一个选项 + // success: function(res) { + // debugger; + // let errMsg = res.errMsg + // let tempFiles = res.tempFiles + // if (errMsg === 'chooseImage:ok') { + // // console.log(tempFiles[0]) + // if (tempFiles[0].size > 1024 * 1024 * 5) { + // that.$message.confirm('图片最多支持5M大小,超出大小限制') + // return + // } + // that.$message.showLoading() + + // let filePaths = tempFiles.map(file => file.path); + // that.$http.upload(tempFiles[0].path).then(async res => { + // console.log('res1', res) + // var pic = res.data && res.data.length > 0 && res.data[ + // 0] + // .url || '' + // that.$message.hideLoading() + // that.submitForm.pictureList.push(pic) + + // that.$forceUpdate() + // }).catch(res => { + // that.$message.hideLoading() + // console.error(res) + // // console.log("文件上传失败,请联系管理员") + // that.$message.showToast('文件上传失败,请联系管理员') + + // }) + // } + // } + // }) + + // uni.chooseImage({ + // count: 9, // 最多可以选择的图片张数,默认9 + // sizeType: ['compressed'], //original 原图,compressed 压缩图,默认二者都有 + // sourceType: ['camera', 'album'], //album 从相册选图,camera 使用相机,默认二者都有。如需直接开相机或直接选相册,请只使用一个选项 + // success: async function(res) { + + // let errMsg = res.errMsg + // let tempFiles = res.tempFiles + // if (errMsg === 'chooseImage:ok') { + // // console.log(tempFiles[0]) + // if (tempFiles[0].size > 1024 * 1024 * 5) { + // that.$message.confirm('图片最多支持5M大小,超出大小限制') + // return + // } + // that.$message.showLoading() + + // let filePaths = tempFiles.map(file => file.path); + // const resImages=[] + // for (let i = 0; i < filePaths.length; i++) { + // try { + // const res = await that.$http.upload(filePaths[i]); + // var pic = res.data && res.data.length > 0 && res.data[0].url || ''; + // if (pic) { + // // that.submitForm.pictureList.push(pic); + // resImages.push(pic); + // } + // } catch (err) { + // console.error(err); + // that.$message.showToast('文件上传失败,请联系管理员'); + // } + // } + // if(filePaths.length==resImages.length){ + // // that.submitForm.pictureList = resImages; + // that.submitForm.pictureList.push(...resImages); + // // 隐藏加载提示 + // that.$message.hideLoading(); + // that.$forceUpdate(); + // }else{ + // that.$message.showToast('文件上传失败,请联系管理员'); + // } + + // } + // } + // }) + + if(this.submitForm.pictureList?.length>=9){ + that.$message.confirm('图片最多上传9张!'); + return + } uni.chooseImage({ - count: 1, // 最多可以选择的图片张数,默认9 - sizeType: ['compressed'], //original 原图,compressed 压缩图,默认二者都有 - sourceType: ['camera', 'album'], //album 从相册选图,camera 使用相机,默认二者都有。如需直接开相机或直接选相册,请只使用一个选项 - success: function(res) { - let errMsg = res.errMsg - let tempFiles = res.tempFiles - if (errMsg === 'chooseImage:ok') { - // console.log(tempFiles[0]) - if (tempFiles[0].size > 1024 * 1024 * 5) { - that.$message.confirm('图片最多支持5M大小,超出大小限制') - return - } - that.$message.showLoading() - that.$http.upload(tempFiles[0].path).then(async res => { - console.log('res1', res) - var pic = res.data && res.data.length > 0 && res.data[ - 0] - .url || '' - that.$message.hideLoading() - that.submitForm.pictureList.push(pic) + count: 9, // 最多可以选择的图片张数,默认9 + sizeType: ['compressed'], //original 原图,compressed 压缩图,默认二者都有 + sourceType: ['camera', 'album'], //album 从相册选图,camera 使用相机,默认二者都有。如需直接开相机或直接选相册,请只使用一个选项 + success: async function(res) { + let errMsg = res.errMsg; + let tempFiles = res.tempFiles; + if (errMsg === 'chooseImage:ok') { + // 检查文件大小 + let oversizedFile = tempFiles.find(file => file.size > 1024 * 1024 * 5); + if (oversizedFile) { + that.$message.confirm('图片最多支持5M大小,超出大小限制'); + return; + } - that.$forceUpdate() - }).catch(res => { - that.$message.hideLoading() - console.error(res) - }) + // 显示加载提示 + that.$message.showLoading(); + + console.log("tempFiles") + console.log(tempFiles) + + // 获取所有文件的 path 数组 + let filePaths = tempFiles.map(file => file.path); + console.log("filePaths") + console.log(filePaths) + + // 创建上传请求的数组 + const uploadPromises = filePaths.map(path => { + return that.$http.upload(path) + .then(res => { + let pic = res.data && res.data.length > 0 && res.data[0].url || ''; + return pic; + }) + .catch(err => { + console.error(err); + return null; // 上传失败时返回 null + }); + }); + + // 使用 Promise.all 并发上传 + try { + const resImages = await Promise.all(uploadPromises); + + // 检查上传结果 + const successfulImages = resImages.filter(pic => pic !== null); + that.submitForm.pictureList.push(...successfulImages); + that.$message.hideLoading(); + that.$forceUpdate(); + if (successfulImages.length !== filePaths.length) { + // 部分上传失败 + that.$message.showToast('部分文件上传失败,请重新尝试!'); + } + } catch (err) { + console.error(err); + that.$message.showToast('文件上传失败,请联系管理员'); } } - }) - } - }, - - async submitSales() { - // if (this.submitForm.orderItems.length < 1) { - // this.$message.showToast('未选择需要售后的商品') - // return - // } - // if (this.submitForm.orderItems.length < 1) { - // this.$message.showToast('未选择需要售后的商品') - // return - // } - if (isNaN(parseFloat(this.submitForm.num)) || this.submitForm.num <= 0) { - this.$message.showToast('售后数量需要大于0') - return - } - if (!this.submitForm.reason) { - this.$message.showToast('未填写理由') - return - } - if (!this.submitForm.pictureList || this.submitForm.pictureList.length < 1) { - this.$message.showToast('未上传图片') - return - } - await this.$message.confirm('确定申请售后吗') - this.$message.showLoading() - const { - code, - data - } = await this.$http.request('post', '/api/customer/sales/add', { - data: { - ...this.submitForm } - }) - this.$message.hideLoading() - if (code == 0) { - await this.$message.showToast('提交成功') - uni.navigateBack() - // this.showSales = false - // this.$forceUpdate() - // setTimeout(() => { - // uni.navigateBack() - // }, 1200) - } - }, + }); + + } }, - } + + async submitSales() { + // if (this.submitForm.orderItems.length < 1) { + // this.$message.showToast('未选择需要售后的商品') + // return + // } + // if (this.submitForm.orderItems.length < 1) { + // this.$message.showToast('未选择需要售后的商品') + // return + // } + if (isNaN(parseInt(this.submitForm.num)) || this.submitForm.num <= 0 || parseInt(this.submitForm + .num) <= 0) { + this.$message.showToast('售后数量需要大于0') + return + } + this.submitForm.num = parseInt(this.submitForm.num) || 1 + + if (!this.submitForm.salesType) { + this.$message.showToast('未填写售后类型') + return + } + if (!this.submitForm.reason) { + this.$message.showToast('未填写理由') + return + } + if (!this.submitForm.pictureList || this.submitForm.pictureList.length < 1) { + this.$message.showToast('未上传图片') + return + } + await this.$message.confirm('确定申请售后吗') + this.$message.showLoading() + const { + code, + data + } = await this.$http.request('post', '/api/customer/sales/add', { + data: { + ...this.submitForm + } + }) + this.$message.hideLoading() + if (code == 0) { + await this.$message.showToast('提交成功') + uni.navigateBack() + // this.showSales = false + // this.$forceUpdate() + // setTimeout(() => { + // uni.navigateBack() + // }, 1200) + } + }, + }, +} </script> <template> @@ -412,13 +739,13 @@ <image src="/static/common/icon-order-status-SEND.png" class="icon-car m-r-6 img100"></image> <view> <view>{{ - dto.status === 'SEND' && '商家已发货,正在通知取货' - || dto.status === 'PENDING' && '订单还未支付,立即去支付' - || dto.status === 'RECEIVE' && '待签收' - || ('订单状态: ' + dto.statusStr) - }} + dto.status === 'SEND' && '商家已发货,正在通知取货' + || dto.status === 'PENDING' && '订单还未支付,立即去支付' + || dto.status === 'RECEIVE' && '待签收' + || ('订单状态: ' + dto.statusStr) + }} </view> - <view class="desc-gray">支付时间:{{dto.paymentTime || '-'}}</view> + <view class="desc-gray">支付时间:{{ dto.paymentTime || '-' }}</view> </view> </view> <view class="address-container bg-white br-4 m-t-12" v-if="!showSales"> @@ -428,17 +755,20 @@ <view class="info"> <view class="title"> {{ dto.customer }} - <view class="tel">{{ dto.customerTel || ''}}</view> + <view class="tel">{{ dto.customerTel || '' }}</view> </view> - <view class="content">{{ dto.customerAddress || ''}}</view> + <view class="content">{{ dto.customerAddress || '' }}</view> </view> </view> </view> - <view v-for="(item,index) of list" :key="index"> - <view class="flower-info m-b-20 m-t-12 br-4" v-if="!showSales||showSales&&(submitForm.orderItemId == item.id)"> + <view v-for="(item, index) of list" :key="index"> + <view class="flower-info m-b-20 m-t-12 br-4" + v-if="!showSales || showSales && (submitForm.orderItemId == item.id)"> <view class="supplier-name "> - <image class="icon-dp" src="/static/common/icon-dp.png"></image> - {{ item.supplierName || ''}} + <view @click.stop="openbrand(item)" style="display: inline-block;"> + <image class="icon-dp br-4" src="/static/common/icon-dp.png"></image> + {{ item.supplierName || '' }} > + </view> </view> <!-- submitForm.orderItemId:{{submitForm.orderItemId}} --> <!-- itemId:{{item.id}} --> @@ -447,20 +777,20 @@ <!-- @click="changeSalesOrderItem(item)" --> <!-- :checked="submitForm.orderItems.indexOf(item.id)>=0" --> - <image class="flower-img img100 br-4 m-r-6" :src="item.flowerCover" - @click="previewImg(item.flowerCover)"> + <!-- <image class="flower-img img100 br-4 m-r-6" :src="item.flowerCover" @click="previewImg(item.flowerCover)"></image> --> + <image class="flower-img img100 br-4 m-r-6" :src="item.flowerCover" @click="toFlowerDetail(item)"> </image> - <view class="flex1"> + <view class="flex1" @click.stop="toFlowerDetail(item)"> <view class=" flex"> - <view class="title"><span class="level">{{ item.flowerCategory || ''}}</span><span - class="level">{{ item.flowerLevelStr || ''}}</span>{{ item.flowerName || ''}} + <view class="title"><span class="level">{{ item.flowerCategory || '' }}</span><span + class="level">{{ item.flowerLevelStr || '' }}</span>{{ item.flowerName || '' }} </view> </view> <view class="each-list"> <view class="each-item"> <view class="label">货位号</view> <view class="value"> - {{ item.warehouseLocationCode || dto.warehouseLocationCode || '-' }} + {{ item.warehouseLocationCode || dto.warehouseLocationCode || '-' }} </view> </view> @@ -493,6 +823,7 @@ </view> </view> + <view class="info-container bg-white br-4" v-if="!showSales"> <view class="form-item"> <view class="label">订单编号:</view> @@ -508,37 +839,37 @@ </view> <view class="form-item"> <view class="label">下单日期:</view> - <view class="value">{{ dto.paymentTime || '-' }}</view> + <view class="value">{{ dto.createTime || '-' }}</view> </view> - <view class="form-item" v-if="dto.cancelTime&&(dto.status==='CANCEL'||dto.status==='REFUND')"> + <view class="form-item" v-if="dto.cancelTime && (dto.status === 'CANCEL' || dto.status === 'REFUND')"> <view class="label">取消时间:</view> <view class="value">{{ dto.cancelTime || '-' }}</view> </view> - <view class="form-item" v-if="dto.evaluateTime&&(dto.status==='COMPLETED')"> + <view class="form-item" v-if="dto.evaluateTime && (dto.status === 'COMPLETED')"> <view class="label">评价时间:</view> <view class="value">{{ dto.evaluateTime || '-' }}</view> </view> - <view class="form-item" v-if="(dto.status==='REFUND')"> + <view class="form-item" v-if="(dto.status === 'REFUND')"> <view class="label">退款金额:</view> <view class="value">{{ dto.refundAmount || '-' }}</view> </view> - <view class="form-item" v-if="dto.refundNo&&(dto.status==='REFUND')"> + <view class="form-item" v-if="dto.refundNo && (dto.status === 'REFUND')"> <view class="label">退款单号:</view> <view class="value">{{ dto.refundNo || '-' }}</view> </view> - <view class="form-item" v-if="dto.refundTime&&(dto.status==='REFUND')"> + <view class="form-item" v-if="dto.refundTime && (dto.status === 'REFUND')"> <view class="label">退款时间:</view> <view class="value">{{ dto.refundTime || '-' }}</view> </view> - <view class="form-item" v-if="dto.receiveTime&&(dto.status==='EVALUATE')"> + <view class="form-item" v-if="dto.receiveTime && (dto.status === 'EVALUATE')"> <view class="label">收货时间:</view> <view class="value">{{ dto.receiveTime || '-' }}</view> </view> - <view class="form-item" v-if="dto.completeTime&&(dto.status==='COMPLETED')"> + <view class="form-item" v-if="dto.completeTime && (dto.status === 'COMPLETED')"> <view class="label">完成时间:</view> <view class="value">{{ dto.completeTime || '-' }}</view> </view> - <view class="form-item" v-if="dto.transferTime&&(dto.status==='REFUND')"> + <view class="form-item" v-if="dto.transferTime && (dto.status === 'REFUND')"> <view class="label">转账时间:</view> <view class="value">{{ dto.transferTime || '-' }}</view> </view> @@ -554,11 +885,29 @@ </view> </view> <view class="info-container bg-white br-4 m-t-12" v-if="!showSales"> - <view class="form-item"> - <view class="label">订单金额:</view> - <view class="value">{{ dto.totalAmount || '-' }}</view> + <view class="form-item flex"> + <view class="label">商品金额:</view> + <view class="value m-l-a m-r-0 text-right">+{{ dto.flowerAmount || '0' }}</view> </view> - <view class="form-item"> + <view class="form-item flex"> + <view class="label">运费:</view> + <view class="value m-l-a m-r-0 text-right">+{{ dto.transportFee || '0' }}</view> + </view> + <view class="form-item flex"> + <view class="label">打包费:</view> + <view class="value m-l-a m-r-0 text-right">+{{ dto.packingFee || '0' }}</view> + </view> + <view class="form-item flex t-red"> + <view class="label">优惠:</view> + <view class="value m-l-a m-r-0 text-right">-{{ dto.memberCouponAmount || '0' }}</view> + </view> + <view class="form-item flex t-red"> + <view class="label">实际支付:</view> + <view class="value m-l-a m-r-0 text-right">¥{{ dto.paymentAmount || '0' }}</view> + </view> + + + <!-- <view class="form-item"> <view class="label">支付金额:</view> <view class="value">{{ dto.paymentAmount || '-' }}</view> </view> @@ -566,10 +915,56 @@ <view class="label">商品金额:</view> <view class="value">{{ dto.flowerAmount || '-' }}</view> </view> + <view class="form-item"> - <view class="label">运费:</view> - <view class="value">{{ dto.transportFee || '-' }}</view> + <view class="label">折扣类型:</view> + <view class="value">{{ dto.memberDiscountTypeStr || '-' }}</view> </view> + <view class="form-item"> + <view class="label">优惠金额(每扎):</view> + <view class="value">¥{{ dto.memberDiscountAmount || '-' }}</view> + </view> + <view class="form-item"> + <view class="label">优惠券:</view> + <view class="value">{{ dto.memberCouponName || '-' }}</view> + </view> --> + <!-- <view class="form-item"> + <view class="label">优惠金额:</view> + <view class="value">{{ dto.memberCouponAmount || '-' }}</view> + </view> --> + </view> + <view class="info-container bg-white br-4 m-t-12" + v-if="!showSales && dto.pointGoodsList && dto.pointGoodsList.length > 0"> + <view v-for="(item, j) of dto.pointGoodsList" :key="j" class="m-b-12"> + <view class="flower-info br-4"> + <view class="flex flex-wrap-normal"> + <image class="flower-img img100 br-4 m-r-6" :src="item.cover" @click="previewImg(item.cover)"> + </image> + <view class="flex1"> + <view class=" flex"> + <view class="title"> + {{ item.name || '' }} + </view> + </view> + <view class="each-list" style="display: contents;"> + <view class="each-item"> + <view class="label">数量</view> + <view class="value">{{ item.num || 0 }}</view> + + </view> + <view class="each-item" style="min-width: unset;max-width: unset;"> + <view class="label" style="min-width: 55rpx;">描述</view> + <view class="value" style="word-break: break-all;text-align: left;"> + {{ item.description || '-' }} + </view> + </view> + </view> + </view> + </view> + + </view> + </view> + </view> @@ -581,7 +976,7 @@ <view class="flex m-t-12"> <view class="flex1 w-fit m-auto icon-view" @click.stop="callTel"> <image src="/static/common/icon-call.png" class="icon icon-call m-r-10 img100"></image> - 拨打15974805814 + {{ tel || '' }} </view> <view class="flex1 w-fit m-auto icon-view flex flex-wrap-normal" open-type="contact"> <image src="/static/common/icon-wx.png" class="icon icon-call m-t-2 m-r-10 img100"></image> @@ -606,6 +1001,17 @@ class="form-input"></input> </view> </view> + + <view class="form-item"> + <view class="form-item-label require"> + 售后类型 + </view> + <view class="form-item-value"> + <um-dropdown @change="salesTypeChange" :defaultIndex="salesTypeDef" rangeKey="label" + :optionList="salesTypeList" placeholder="售后类型"></um-dropdown> + </view> + </view> + <view class="form-item"> <view class="form-item-label require"> 理由 @@ -622,11 +1028,11 @@ <view class="t-red" @click="uploadIcon('image')">上传</view> </view> </view> - <view class="flex p20" v-if="submitForm.pictureList&&submitForm.pictureList.length>0"> - <view class="m-t-12 m-r-10 " v-for="(timg,index) of submitForm.pictureList" :key="index"> + <view class="flex p20" v-if="submitForm.pictureList && submitForm.pictureList.length > 0"> + <view class="m-t-12 m-r-10 " v-for="(timg, index) of submitForm.pictureList" :key="index"> <image class="check-img" :src="timg" @click.stop="previewImg(timg)"> </image> - <view class="t-red text-center" @click.stop="deleteCheckImage('pictureList',index)">删除</view> + <view class="t-red text-center" @click.stop="deleteCheckImage('pictureList', index)">删除</view> </view> </view> <view class="form-item"> @@ -637,11 +1043,11 @@ <view class="t-red" @click="uploadIcon('video')">上传</view> </view> </view> - <view class="flex p20" v-if="submitForm.videoList&&submitForm.videoList.length>0"> - <view class="m-t-12 m-r-10 " v-for="(timg,index) of submitForm.videoList" :key="index"> + <view class="flex p20" v-if="submitForm.videoList && submitForm.videoList.length > 0"> + <view class="m-t-12 m-r-10 " v-for="(timg, index) of submitForm.videoList" :key="index"> <video :src="timg" style="display: block;margin: 0 auto;"></video> - <view class="t-red text-center" @click.stop="deleteCheckImage('videoList',index)">删除</view> + <view class="t-red text-center" @click.stop="deleteCheckImage('videoList', index)">删除</view> </view> </view> </view> @@ -653,12 +1059,12 @@ <view class="buttons-bottom flex" v-if="!showSales"> <view class="button button-1" @click="buttonClick('refund')" v-if="dto.couldRefund">申请退款 </view> - <view class="button button-1" @click="buttonClick('confirm')" v-if="dto.status ==='RECEIVE'"> 确认收货 + <view class="button button-1" @click="buttonClick('confirm')" v-if="dto.status === 'RECEIVE'"> 确认收货 </view> - <view class="button button-1" @click="buttonClick('payAgain')" v-if=" dto.status === 'PENDING'"> 重新支付<span - v-if="dto.bctime">({{dto.bctime}})</span> + <view class="button button-1" @click="buttonClick('payAgain')" v-if="dto.status === 'PENDING'"> 重新支付<span + v-if="dto.bctime">({{ dto.bctime }})</span> </view> - <view class="button button-1" @click="buttonClick('evaluate')" v-if=" dto.status === 'EVALUATE'"> 评价 + <view class="button button-1" @click="buttonClick('evaluate')" v-if="dto.status === 'EVALUATE'"> 评价 </view> <!-- ||dto.status=='COMPLETED' --> <!-- 在外面申请了,里面不允许了 --> @@ -683,237 +1089,237 @@ </template> <style lang="scss" scoped> - .order-detail-page { - background: #F7F7F7; - padding: 30rpx; +.order-detail-page { + background: #F7F7F7; + padding: 30rpx; - .check-img { - width: 96rpx; - height: 96rpx; - border-radius: 4rpx; - border: 2rpx dashed #CECECE; + .check-img { + width: 96rpx; + height: 96rpx; + border-radius: 4rpx; + border: 2rpx dashed #CECECE; + } + + .bottom-price { + position: fixed; + background-color: #ffffff; + left: 0rpx; + padding: 20rpx; + padding-bottom: 40rpx; + right: 0rpx; + bottom: 0rpx; + + .button-green-1 { + min-width: 400rpx; + padding-left: 20rpx; + padding-right: 20rpx; } + } - .bottom-price { - position: fixed; - background-color: #ffffff; - left: 0rpx; - padding: 20rpx; - padding-bottom: 40rpx; - right: 0rpx; - bottom: 0rpx; + .button-space { + min-height: 140rpx; + } - .button-green-1 { - min-width: 400rpx; - padding-left: 20rpx; - padding-right: 20rpx; - } - } + .buttons-bottom { + position: fixed; + left: 0; + bottom: 0; + right: 0; + height: 120rpx; + background-color: #FFFFFF; + box-shadow: 0 2rpx 30rpx rgba(0, 0, 0, .3); - .button-space { - min-height: 140rpx; - } - - .buttons-bottom { - position: fixed; - left: 0; - bottom: 0; - right: 0; - height: 120rpx; + .button { + border-radius: 42rpx; + border: 2rpx solid #CECECE; + font-weight: 400; + font-size: 30rpx; + color: #999999; + text-align: center; + line-height: 60rpx; + height: 60rpx; + padding: 10rpx 30rpx; background-color: #FFFFFF; - box-shadow: 0 2rpx 30rpx rgba(0, 0, 0, .3); + margin: 0 auto; + display: inline-block; + vertical-align: middle; + margin-top: 20rpx; + min-width: 120rpx; + } - .button { - border-radius: 42rpx; - border: 2rpx solid #CECECE; - font-weight: 400; - font-size: 30rpx; - color: #999999; - text-align: center; - line-height: 60rpx; - height: 60rpx; - padding: 10rpx 30rpx; - background-color: #FFFFFF; - margin: 0 auto; + .button-1 {} + } + + .info-container { + + + .icon-kf { + width: 44rpx; + height: 44rpx; + } + + .icon-call { + width: 32rpx; + height: 32rpx; + } + + .icon-view { + line-height: 40rpx; + + .icon { display: inline-block; vertical-align: middle; - margin-top: 20rpx; - min-width: 120rpx; } - - .button-1 {} - } - - .info-container { - - - .icon-kf { - width: 44rpx; - height: 44rpx; - } - - .icon-call { - width: 32rpx; - height: 32rpx; - } - - .icon-view { - line-height: 40rpx; - - .icon { - display: inline-block; - vertical-align: middle; - } - } - - } - - .info-container { - padding: 28rpx; - - .form-item { - font-weight: 400; - font-size: 28rpx; - color: #666666; - line-height: 60rpx; - display: flex; - - .label { - min-width: 140rpx; - margin-right: 20rpx; - } - - .value { - word-break: break-all; - } - } - - .line { - height: 2rpx solid #EEEEEE; - } - } - - .top-tip { - .icon-car { - width: 52rpx; - height: 52rpx; - } - } - - .address-container { - padding: 28rpx; - - .image { - // background-color: #20613D; - border-radius: 50%; - margin-top: 8rpx; - margin-left: 8rpx; - width: 32rpx; - height: 32rpx; - // padding: 8rpx; - } - - .info { - .title { - font-weight: 600; - font-size: 32rpx; - color: #000000; - line-height: 44rpx; - - .tel { - display: inline-block; - margin-left: 20rpx; - } - } - - .content { - font-weight: 400; - font-size: 28rpx; - color: #000000; - line-height: 40rpx; - } - - } - } - - .flower-info { - padding: 28rpx; - - background: #FFFFFF; - border-radius: 8rpx; - - .supplier-name { - border-bottom: 2rpx solid #EEEEEE; - font-weight: 600; - font-size: 28rpx; - color: #000000; - padding-bottom: 10rpx; - line-height: 40rpx; - - .icon-dp { - width: 27rpx; - height: 27rpx; - display: inline-block; - vertical-align: middle; - } - } - - .title { - font-weight: 600; - font-size: 28rpx; - color: #000000; - line-height: 40rpx; - - .level { - font-weight: 400; - font-size: 28rpx; - color: #20613D; - line-height: 40rpx; - margin-right: 20rpx; - } - } - - .flower-img { - width: 128rpx; - height: 118rpx; - min-width: 128rpx; - min-height: 118rpx; - } - - .each-list { - display: flex; - flex-wrap: wrap; - margin-top: 6rpx; - - .each-item { - min-width: 30%; - max-width: 40%; - text-align: center; - margin-left: 0rpx; - margin-right: auto; - display: flex; - - .label { - font-weight: 400; - font-size: 24rpx; - color: #666666; - text-align: left; - padding-right: 10rpx; - } - - .label::after { - content: ": " - } - - .value { - font-weight: 400; - font-size: 24rpx; - color: #666666; - } - } - } - } } + + .info-container { + padding: 28rpx; + + .form-item { + font-weight: 400; + font-size: 28rpx; + color: #666666; + line-height: 60rpx; + display: flex; + + .label { + min-width: 140rpx; + margin-right: 20rpx; + } + + .value { + word-break: break-all; + } + } + + .line { + height: 2rpx solid #EEEEEE; + } + } + + .top-tip { + .icon-car { + width: 52rpx; + height: 52rpx; + } + } + + .address-container { + padding: 28rpx; + + .image { + // background-color: #20613D; + border-radius: 50%; + margin-top: 8rpx; + margin-left: 8rpx; + width: 32rpx; + height: 32rpx; + // padding: 8rpx; + } + + .info { + .title { + font-weight: 600; + font-size: 32rpx; + color: #000000; + line-height: 44rpx; + + .tel { + display: inline-block; + margin-left: 20rpx; + } + } + + .content { + font-weight: 400; + font-size: 28rpx; + color: #000000; + line-height: 40rpx; + } + + } + } + + .flower-info { + padding: 28rpx; + + background: #FFFFFF; + border-radius: 8rpx; + + .supplier-name { + border-bottom: 2rpx solid #EEEEEE; + font-weight: 600; + font-size: 28rpx; + color: #000000; + padding-bottom: 10rpx; + line-height: 40rpx; + + .icon-dp { + width: 27rpx; + height: 27rpx; + display: inline-block; + vertical-align: middle; + } + } + + .title { + font-weight: 600; + font-size: 28rpx; + color: #000000; + line-height: 40rpx; + + .level { + font-weight: 400; + font-size: 28rpx; + color: #20613D; + line-height: 40rpx; + margin-right: 20rpx; + } + } + + .flower-img { + width: 128rpx; + height: 118rpx; + min-width: 128rpx; + min-height: 118rpx; + } + + .each-list { + display: flex; + flex-wrap: wrap; + margin-top: 6rpx; + + .each-item { + min-width: 30%; + max-width: 40%; + text-align: center; + margin-left: 0rpx; + margin-right: auto; + display: flex; + + .label { + font-weight: 400; + font-size: 24rpx; + color: #666666; + text-align: left; + padding-right: 10rpx; + } + + .label::after { + content: ": " + } + + .value { + font-weight: 400; + font-size: 24rpx; + color: #666666; + } + } + } + + } + +} </style> \ No newline at end of file -- Gitblit v1.9.3