From a7e18f3eba7a5bd2008e9aeac9cf4edcc995749a Mon Sep 17 00:00:00 2001 From: 陶杰 <1378534974@qq.com> Date: 星期日, 06 十月 2024 23:12:16 +0800 Subject: [PATCH] 1.商品评论 --- pages.json | 9 sub_pages/customer/shop/shop.vue | 189 +++++++++ pages/order/order.vue | 13 pages/order/order-detail.vue | 11 pages/order/comment/order-comment.vue | 896 +++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 1,103 insertions(+), 15 deletions(-) diff --git a/pages.json b/pages.json index 5c8e879..f716fba 100644 --- a/pages.json +++ b/pages.json @@ -99,7 +99,14 @@ "navigationBarTitleText": "订单详情", "enablePullDownRefresh": false } - }, { + },{ + "path": "pages/order/comment/order-comment", + "style": { + "navigationBarTitleText": "商品评价", + "enablePullDownRefresh": false + } + }, + { "path": "pages/help/content", "style": { "navigationBarTitleText": "" diff --git a/pages/order/comment/order-comment.vue b/pages/order/comment/order-comment.vue new file mode 100644 index 0000000..27d93cc --- /dev/null +++ b/pages/order/comment/order-comment.vue @@ -0,0 +1,896 @@ +<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 + salesTypeDef: 0, + salesTypeList: [], + }; + }, + onUnload() { + this.timer && clearTimeout(this.timer) + }, + + async onLoad(options) { + console.log('options', options) + console.log("订单评价页面...") + + this.id = options.id || '' + if (this.id) { + + await this.getDetail() + await this.getItemList() + this.submitForm = { + orderId: this.id, + // imageList: [], + videoList: [], + salesType: '', + reason: '', + // orderItems: [], + orderItemId: options.flowerId || '', + num: 0, + pictureList: [] + } + + + if (this.dto.statusBackend === 'PENDING' || this.dto.status === 'PENDING') { + + + this.timer = setInterval(() => { + //倒计时 + var nowdate = new Date().getTime() - 1000 * 60 * 5 + 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 { + tt = alltime + } + this.dto.bctime = `0${parseInt(alltime / 60)}:${tt<10?'0':''}${tt}` + change = true + + } + + + 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: '' + }); + + }) + + }, + methods: { + + async submitCommit(){ + console.log("提交评价") + console.log(this.list) + + const tmpList= this.list + .filter(item => item.commentGrade > 0) // 过滤 commentGrade > 0 的数据 + .map(item => { + return { + orderItemId:item.id, + commentGrade:item.commentGrade, + comment: item.comment, // 添加特定的属性 + commentImages:JSON.stringify(item.pictureList), + anonymityFalg:item.anonymityFalg, // 匿名 + }; + }); + + // 检查是否有 comment 为空的情况 + const hasEmptyComment = tmpList.some(item => !item.comment || item.comment.trim() === ''); + + + // 检查 tmpList 是否为 null 或为空数组,或者是否有 comment 为空的情况 + if (!tmpList || tmpList.length === 0) { + this.$message.showToast('评论不能为空') + return + } else if (tmpList.some(item => !item.comment || item.comment.trim() === '')) { + this.$message.showToast('评论内容不能为空') + return ; + } + + // 需要新增list + console.log(tmpList) + const param={ + orderId:this.id, + list:tmpList, + } + // return ; + this.$message.showLoading() + const re = await this.$http.request('post', `/api/v2/flower-comment/batch`, { + data: param + }) + this.$message.hideLoading() + if (re.code == 2000 || re.code == 0) { + this.$message.showToast('操作成功') + //需要标记加一下 + this.$store.dispatch('sign_add', 'flower'); + + this.backpage() + } else { + console.log('error re', re) + if (re.code === 30000 && Array.isArray(re.msg)) { + this.$message.showToast('字段未填写完整') + + } + } + }, + + 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') { + //先判断要不要字节变成已取消 + 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() + } + } + + } + }, + + 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) + // } + if (code === 0) { + this.list = (data || []).map(item => { + return { + ...item, + comment:item.comment?item.comment:"", + pictureList:item.commentImages ? JSON.parse(item.commentImages) : [], // 将字符串转换成数组 + }; + }); + 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() + } + } + 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 + } + }); + } + + // #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() + } + } + + } + break + 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, + } + }) + + 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() + } + } + } + break + // 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(item,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) + }) + } + } + }); + } else { + + 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) + if(!item.pictureList){ + item.pictureList=[] + } + item.pictureList.push(pic) + console.log("图片上传") + console.log(item) + + that.$forceUpdate() + }).catch(res => { + that.$message.hideLoading() + console.error(res) + }) + } + } + }) + } + }, + async deleteImg(item, index) { + await this.$message.confirm('是否确认删除此图片') + if (Array.isArray(item.pictureList)) { + item.pictureList.splice(index, 1) + + } else { + item.pictureList = [] + } + this.$forceUpdate() + }, + + 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> + <view class="order-detail-page"> + + <view v-for="(item,index) of list" :key="index"> + <view class="flower-info m-b-20 m-t-12 br-4"> + <view class="supplier-name "> + <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> + + <view class="m-t-12"> + + <u-row justify="space-between"> + <u-col span="2"> + <u--image :showLoading="true" :src="item.flowerCover" width="30px" height="30px"@click="toFlowerDetail(item)" shape="circle"></u--image> + </u-col> + <u-col span="8"> + <view class="title"> + <span class="level">{{ item.flowerCategory || ''}}</span><span + class="level">{{ item.flowerLevelStr || ''}}</span>{{ item.flowerName || ''}} + </view> + </u-col> + <u-col span="2"> + <u-rate count="5" v-model="item.commentGrade"></u-rate> + </u-col> + </u-row> + <u-row v-if=" item.commentGrade>0 "> + <u-col span="12"> + <u-radio-group v-model="item.anonymityFalg" :labelSize="10"> + <u-radio label="匿名" :name="1"></u-radio> + </u-radio-group> + + <u--textarea v-model="item.comment" placeholder="请输入内容" count></u--textarea> + <view class="component-button-upload" @click="uploadIcon(item,'image')"></view> + <view class="flex p20" style="padding-top: 0rpx;padding-bottom: 10rpx" + v-if="item.pictureList&&item.pictureList.length>0"> + <view class="m-t-12 m-r-10 " v-for="(tBanner,index2) of item.pictureList" :key="index2"> + <!-- <image :src="tBanner" @click.stop="previewImg(tBanner)" width="30px" height="30px" style= ></image> --> + <u--image :showLoading="true" :src="tBanner" width="50px" height="50px"></u--image> + <view class="t-red text-center" @click.stop="deleteImg(item,index2)">删除</view> + </view> + </view> + </u-col> + </u-row> + + + </view> + + </view> + </view> + + <u-button type="primary" text="提交评价" @click="submitCommit"></u-button> + + + </view> +</template> + +<style lang="scss" scoped> + .order-detail-page { + background: #F7F7F7; + padding: 30rpx; + + .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; + } + } + + .button-space { + min-height: 140rpx; + } + + .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 { + 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; + 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; + } + } + } + + } + + } +</style> \ No newline at end of file diff --git a/pages/order/order-detail.vue b/pages/order/order-detail.vue index 3630110..3b6c0b3 100644 --- a/pages/order/order-detail.vue +++ b/pages/order/order-detail.vue @@ -124,6 +124,13 @@ }, methods: { + // 商品评论 + commentButtonClick(){ + // 跳转的到评论列表 + uni.navigateTo({ + url: '/pages/order/comment/order-comment?orderId='+this.id + }) + }, openbrand(item) { //也要判断一下是否重复进入 @@ -898,8 +905,8 @@ <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> + <!-- <view class="button button-1" @click="commentButtonClick('evaluate')" v-if=" dto.status === 'EVALUATE'"> 评价 </view> --> + <!-- <view class="button button-1" @click="buttonClick('evaluate')" v-if=" dto.status === 'EVALUATE'"> 评价 </view> --> <!-- ||dto.status=='COMPLETED' --> <!-- 在外面申请了,里面不允许了 --> <!-- <view class="button button-1" @click="buttonClick('sales')" v-if=" dto.status === 'RECEIVE'"> 申请售后 diff --git a/pages/order/order.vue b/pages/order/order.vue index 2551a87..7c5142f 100644 --- a/pages/order/order.vue +++ b/pages/order/order.vue @@ -179,9 +179,15 @@ url: '/pages/order/order-detail?id=' + item.id }) }, + + commentButtonClick(item){ + uni.navigateTo({ + url: '/pages/order/comment/order-comment?id='+item.id + }) + }, + async copyOrder(item) { - console.log(item) await this.$message.confirm('是否确定再来一单') // 发送请求 this.$message.showLoading() @@ -625,7 +631,10 @@ <!-- <view class="button button-1 m-l-a m-r-15" @click="toDetailSale(dto)" v-if="dto.statusBackend === 'RECEIVE'"> 申请售后 </view> --> - <view class="button button-0 m-l-a m-r-15" @click="buttonClick(dto,'evaluate')" + <!-- <view class="button button-0 m-l-a m-r-15" @click="buttonClick(dto,'evaluate')" + v-if="dto.statusBackend === 'EVALUATE'"> 评价 + </view> --> + <view class="button button-0 m-l-a m-r-15" @click="commentButtonClick(dto)" v-if="dto.statusBackend === 'EVALUATE'"> 评价 </view> diff --git a/sub_pages/customer/shop/shop.vue b/sub_pages/customer/shop/shop.vue index 14f0a17..e7b63b0 100644 --- a/sub_pages/customer/shop/shop.vue +++ b/sub_pages/customer/shop/shop.vue @@ -159,12 +159,63 @@ </view> </view> - <!-- <view v-show="flg==='1'" class="brand-info-1"> - <trade :hidefooter="true" :supplierId="id" :catgoryTree="catgoryTree" v-if="catgoryTree" ref="trade"> - </trade> + <view v-show="flg==='2'" class="brand-info-1"> + <!-- <trade :hidefooter="true" :supplierId="id" :catgoryTree="catgoryTree" v-if="catgoryTree" ref="trade"> + </trade> --> + + <view class="m-t-12" style="text-align: center;"> + + <span style="">综合评分<span style="color: #F8353A; margin-left: 5px;">{{comment.avg}}</span> </span> + + </view> + <view class="m-t-12"> + + <view v-for="(item,index) of commentList" > + <u-row justify="space-between" > + <u-col span="1"> + <u--image v-if="item.anonymityFalg==1 " :showLoading="true" + src="https://youzhen123.oss-cn-huhehaote.aliyuncs.com/WechatOwnerProperty/images/mrtx.png" width="30px" height="30px" shape="circle"></u--image> + <u--image v-else :showLoading="true" :src="item.customerCover" width="30px" height="30px" shape="circle"></u--image> + + </u-col> + <u-col span="4"> + <view v-if="item.anonymityFalg==1 " >匿名用户</view> + <view v-else>{{item.customerName}}</view> + </u-col> + <u-col span="2"> + <u-rate count="5" v-model="item.commentGrade" readonly></u-rate> + </u-col> + <u-col span="4"> + <view style="font-size: 12px;">{{item.updateTime}}</view> + </u-col> + </u-row> + <u-row justify="space-between" > + <u-col span="2"></u-col> + <u-col span="10"> + <view> + <span style="color:#3E9FFB;border: 1px solid #3E9FFB; padding:2px 2px ;font-size: 12px;"> + {{item.flowerName}}({{item.flowerColor}}){{item.flowerLevel}} + </span> + {{item.comment}} + <view class="flex" > + <u--image v-for="(commentImg,index2) of item.commentImagesList" :key="index2" style="margin:10px;" + :showLoading="true" :src="commentImg"></u--image> + </view> + + </view> + </u-col> + </u-row> + + </view> + + + + + </view> + </view> - --> - <view v-if="flg==='2'" class="brand-info-3"> + + <view v-if="flg==='3'" class="brand-info-3"> <view class="title"> 基础信息 </view> @@ -252,6 +303,16 @@ }, data() { return { + comment:{ + avg:0, + commentAmount:0, + }, + commentList:[], + commentPage:{ + size: 10, + current: 1, + total: 0, + }, // search_flow: '', flg: '0', tabs: [{ @@ -260,9 +321,9 @@ { name: '分类' }, - // { - // name: '评价' - // }, + { + name: '评价' + }, { name: '商家' }, @@ -278,6 +339,7 @@ level: '', name: '', categoryRoot: '', + }, level_show: false, level_columns: [ @@ -287,7 +349,8 @@ order_show: false, order_columns: [ [] - ] + ], + } }, onShow() { @@ -300,9 +363,19 @@ } await this.refreshList('post') uni.stopPullDownRefresh() - + + if(this.flg=="2"){ + // 评论相关下拉刷新 + this.getCommentsStatis() + + this.commentList=[] + this.commentPage.current=1 + this.getComments() + } + }, onLoad(options) { + this.id = options.id || '' this.page.size = 300 if (this.id) { @@ -335,6 +408,11 @@ value: '' }) }) + + + this.getCommentsStatis() + + }, // #ifdef PUB_CUSTOMER onShareAppMessage() { @@ -361,11 +439,96 @@ }, // #endif onReachBottom() { + console.log("下拉") // if (this.flg === '0') { // this.getMore('post') // } + if (this.flg ==2) { + // debugger; + // this.listApi="/api/v2/flower-comment/page" + // this.query={ + // supplierId:this.id + // } + // this.getMore() + this.commentPage.current++ + this.getComments() + } }, methods: { + + async getCommentsStatis() { + { + this.$message.showLoading() + + const { + code, + data + } = await this.$http.request('get', `/api/v2/flower-comment/statis/${this.id}`, { + params: {} + }) + if (code === 0) { + this.comment=data + this.tabs[2].name=`评价(${this.comment.commentAmount})` + } + + this.$message.hideLoading() + } + + }, + + async getComments() { + + { + this.$message.showLoading() + const params={ + supplierId:this.id , + ...this.commentPage, + } + const { + code, + data + } = await this.$http.request('get', `/api/v2/flower-comment/page`, { + params: params + }) + if (code === 0) { + // this.commentList=data.records + this.commentPage.current=data.current + this.commentPage.pages=data.pages + this.commentPage.size=data.size + this.commentPage.total=data.total + // this.commentList = data.records.map(item => { + // return { + // ...item, + // commentImagesList: item.commentImages ? JSON.parse(item.commentImages) : [] // 将字符串转换成数组 + // }; + // }); + data.records.forEach(item => { + const commentImagesList = item.commentImages ? JSON.parse(item.commentImages) : []; + const existingCommentIndex = this.commentList.findIndex(comment => comment.id === item.id); + + if (existingCommentIndex !== -1) { + // 更新已存在的评论 + this.commentList[existingCommentIndex] = { + ...this.commentList[existingCommentIndex], + ...item, + commentImagesList + }; + } else { + // 新增评论 + this.commentList.push({ + ...item, + commentImagesList + }); + } + }); + + } + + this.$message.hideLoading() + } + + }, + getList_after() { if (this.list) { for (var item of this.list) { @@ -482,6 +645,12 @@ } } + + if(flg=="2"){ + this.getCommentsStatis() + this.getComments() + } + this.flg = '' + flg //如果没有加载数据,需要加载一下 -- Gitblit v1.9.3