Files
2023-11-15 19:59:37 +08:00

191 lines
4.1 KiB
Vue

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