<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 MPOLD
|
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')
|
tmp.$message.showToast('收货失败')
|
|
}
|
|
}
|
|
},
|
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()
|
this.$store.dispatch('getCurrentInfo')
|
this.$message.showToast('收货失败')
|
|
}
|
}
|
|
}
|
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>
|