138 lines
3.2 KiB
138 lines
3.2 KiB
<!--
|
|
* @Author: ch
|
|
* @Date: 2022-06-20 16:36:14
|
|
* @LastEditors: ch
|
|
* @LastEditTime: 2022-06-30 21:06:31
|
|
* @Description: file content
|
|
-->
|
|
<template>
|
|
<view>
|
|
<view class="rate" v-if="type === COMMENT.TYPE.COMMENT">
|
|
<text class="rate--title">满意度评分</text>
|
|
<u-rate :count="5" v-model="rate" size="47rpx" activeColor="#FFA35B" inactiveColor="#DDD"></u-rate>
|
|
<text class="rate--desc">{{rateDesc}}</text>
|
|
</view>
|
|
<textarea class="textarea" placeholder="从多个维度评价,可以帮助更多想买的人哦~"
|
|
:maxlength="500" v-model="commentContent"></textarea>
|
|
<u-upload class="upload"
|
|
@afterRead="handleUpdateImg" @delete="handleDelImg"
|
|
:fileList="fileList" :maxCount="6" :previewFullImage="true">
|
|
</u-upload>
|
|
<view class="footer">
|
|
<UiButton type="solid" :disable="isVerify" @click="handleSubmit">
|
|
{{type === COMMENT.TYPE.COMMENT ? '发表评价' : '发表追评'}}
|
|
</UiButton>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
<script>
|
|
import UiButton from '@/components/UiButton.vue';
|
|
import {ApiPostComment} from '@/common/api/comment';
|
|
import COMMENT from '@/common/dicts/comment';
|
|
import {uploadFileOss, HandleApiError} from '@/common/utils';
|
|
export default {
|
|
components: { UiButton },
|
|
props:{
|
|
type : {
|
|
type : String | Number,
|
|
default : COMMENT.TYPE.COMMENT
|
|
},
|
|
commentDetail : {
|
|
type : Object,
|
|
default : ()=> ({})
|
|
}
|
|
},
|
|
data(){
|
|
return {
|
|
COMMENT,
|
|
rate : 5,
|
|
commentContent : '',
|
|
fileList : []
|
|
}
|
|
},
|
|
computed:{
|
|
isVerify(){
|
|
if(this.type === COMMENT.TYPE.COMMENT){
|
|
return !this.rate || !this.commentContent.trim();
|
|
}else{
|
|
return !this.commentContent.trim();
|
|
}
|
|
},
|
|
isEdit (){
|
|
return ( this.commentContent || this.fileList.length > 0) ? true : false
|
|
},
|
|
rateDesc(){
|
|
return COMMENT.RATE_LABEL[this.rate-1];
|
|
}
|
|
},
|
|
watch:{
|
|
isEdit(){
|
|
this.$emit('editChang',this.isEdit)
|
|
}
|
|
},
|
|
methods:{
|
|
async handleSubmit(){
|
|
let data = {
|
|
commentContent : this.commentContent,
|
|
commentType : this.type,
|
|
orderProductId : this.commentDetail.orderProductId,
|
|
pictureUrl : this.fileList.map(i => i.url).join(',')
|
|
}
|
|
if(this.type === COMMENT.TYPE.COMMENT){
|
|
data.productId = this.commentDetail.productId;
|
|
data.commentScore = this.rate;
|
|
}else if(this.type === COMMENT.TYPE.FOLLOW_COMMENT){
|
|
data.originId = data.parentId = this.commentDetail.id;
|
|
}
|
|
const {error, result} = await ApiPostComment(data);
|
|
if(!HandleApiError(error)){
|
|
this.commentContent = '';
|
|
this.fileList = [];
|
|
this.$nextTick(()=>{
|
|
this.$emit('submit',result);
|
|
})
|
|
|
|
}
|
|
},
|
|
async handleUpdateImg(val){
|
|
const {error, result} = await uploadFileOss(val.file, {
|
|
configId : 'account-comment',
|
|
serviceName : 'comment'
|
|
})
|
|
if(error){
|
|
uni.$u.toast(error);
|
|
}
|
|
this.fileList.push({url : result});
|
|
},
|
|
handleDelImg(target){
|
|
this.fileList.splice(target.index, 1)
|
|
}
|
|
}
|
|
|
|
}
|
|
</script>
|
|
<style lang="scss" scoped>
|
|
.rate{
|
|
display: flex;
|
|
margin: 50rpx 0;
|
|
align-items: center;
|
|
&--title{
|
|
font-size: 28rpx;
|
|
margin-right: 30rpx;
|
|
}
|
|
&--desc{
|
|
font-size: 30rpx;
|
|
color: #999;
|
|
margin-left: 40rpx;
|
|
}
|
|
}
|
|
.textarea{
|
|
height: 200rpx;
|
|
margin-bottom: 40rpx;
|
|
}
|
|
.footer{
|
|
width: 100%;
|
|
text-align: right;
|
|
margin-top: 50rpx;
|
|
}
|
|
</style> |