Files

190 lines
4.1 KiB
Vue
Raw Normal View History

2023-10-11 11:27:47 +08:00
<template>
<layout class="evaluate">
<uv-navbar
2023-11-14 17:21:03 +08:00
:fixed="false"
title="评价"
left-arrow
@leftClick="goBack"
2023-10-11 11:27:47 +08:00
/>
<view class="evaluate-card mb-20">
<div class="evaluate-item">
<view class="evaluate-label">商品评价</view>
<uv-rate
2023-11-14 17:21:03 +08:00
:count="5"
v-model="productScore"
2023-10-11 11:27:47 +08:00
></uv-rate>
</div>
<uv-line color="#E6E6E6"></uv-line>
<view class="evaluate-content">
<uv-textarea
2023-11-14 17:21:03 +08:00
v-model="comment"
placeholder="请填写您遇到的问题,这将帮助我们为您提供更好的服务"
2023-10-11 11:27:47 +08:00
></uv-textarea>
<uv-upload
2023-11-14 17:21:03 +08:00
:fileList="fileList1"
name="1"
multiple
:maxCount="10"
@afterRead="afterRead"
@delete="handleDeletePic"
2023-10-11 11:27:47 +08:00
></uv-upload>
</view>
</view>
<view class="card evaluate-card noBorder">
<view class="card-head">
<view class="card-title">服务评价</view>
</view>
<view class="card-content">
<div class="evaluate-item min">
<view class="evaluate-label">服务评价</view>
<uv-rate
2023-11-14 17:21:03 +08:00
:count="5"
v-model="serviceScore"
2023-10-11 11:27:47 +08:00
></uv-rate>
</div>
</view>
</view>
<div class="form-buttons">
<uv-button
2023-11-14 17:21:03 +08:00
round
block
type="primary"
@tap="handleOrderComments"
2023-10-11 11:27:47 +08:00
>
提交评论
</uv-button>
</div>
</layout>
</template>
<script setup>
import { ref } from 'vue'
import { onLoad } from '@dcloudio/uni-app'
2023-11-14 17:21:03 +08:00
import { orderComments } from '@/api/order'
import { VUE_APP_UPLOAD_URL } from '@/config'
import { useRouter } from "@/hooks/useRouter";
2023-10-11 11:27:47 +08:00
2023-11-14 17:21:03 +08:00
const {getParams, push} = useRouter()
2023-10-11 11:27:47 +08:00
const productScore = ref(0)
const serviceScore = ref(0)
const unique = ref(null)
const pics = ref([])
2023-11-14 17:21:03 +08:00
const fileList1 = ref([])
2023-10-11 11:27:47 +08:00
const comment = ref("")
const orderInfoData = ref(null)
2023-11-14 17:21:03 +08:00
const {goBack} = useRouter()
2023-10-11 11:27:47 +08:00
const handleOrderComments = async () => {
const res = await orderComments([{
"comment": comment.value,
"pics": pics.value.toString(),
"productScore": productScore.value,
"serviceScore": serviceScore.value,
"unique": unique.value,
}])
2023-11-14 17:21:03 +08:00
if (res) {
uni.showToast({
title: "评价成功",
icon: "none",
duration: 2000
});
push({url:'/pages/orderList/orderList'},{data:{type: 3}})
}
2023-10-11 11:27:47 +08:00
}
const handleDeletePic = (event) => {
pics.value.splice(event.index, 1)
2023-11-14 17:21:03 +08:00
fileList1.value.splice(event.index, 1)
2023-10-11 11:27:47 +08:00
}
const afterRead = async (event) => {
// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
let lists = [].concat(event.file)
2023-11-14 17:21:03 +08:00
let fileListLen = fileList1.value.length
2023-10-11 11:27:47 +08:00
lists.map((item) => {
2023-11-14 17:21:03 +08:00
fileList1.value.push({
2023-10-11 11:27:47 +08:00
...item,
status: 'uploading',
message: '上传中'
})
})
for (let i = 0; i < lists.length; i++) {
const result = await uploadFilePromise(lists[i].url)
2023-11-14 17:21:03 +08:00
let item = fileList1.value[fileListLen]
fileList1.value.splice(fileListLen, 1, Object.assign(item, {
2023-10-11 11:27:47 +08:00
status: 'success',
message: '',
url: result
}))
2023-11-14 17:21:03 +08:00
let url = JSON.parse(result)
pics.value.push(url.data)
2023-10-11 11:27:47 +08:00
fileListLen++
}
}
const uploadFilePromise = (url) => {
return new Promise((resolve, reject) => {
let a = uni.uploadFile({
2023-11-14 17:21:03 +08:00
url: VUE_APP_UPLOAD_URL,
2023-10-11 11:27:47 +08:00
filePath: url,
name: 'file',
formData: {
user: 'test'
},
success: (res) => {
setTimeout(() => {
2023-11-14 17:21:03 +08:00
resolve(res.data)
2023-10-11 11:27:47 +08:00
}, 1000)
}
});
})
}
2023-11-14 17:21:03 +08:00
onLoad((options) => {
const params = getParams(options)
unique.value = params.unique
2023-10-11 11:27:47 +08:00
})
</script>
2023-11-14 17:21:03 +08:00
<style lang="scss">
2023-10-11 11:27:47 +08:00
.evaluate-item {
display: flex;
align-items: center;
padding: 30rpx 34rpx;
&.min {
.evaluate-label {
font-size: 28rpx;
color: #333333;
}
}
.evaluate-label {
margin-right: 24rpx;
font-size: 32rpx;
color: #333333;
}
}
.evaluate-content {
padding: 34rpx;
.uv-textarea {
padding: 0;
border: 0;
}
}
.evaluate-card {
background: #fff;
}
</style>