You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

204 lines
4.8 KiB

<template>
<view>
<view class="evaluate" :class="['theme', themeObj.name]">
<view class="goods_data">
<image :src="goodData.url" mode=""></image>
<view class="right">
<p class="goods_name">{{goodData.goodsName}}</p>
<p class="goods_sku">{{goodData.specs}}</p>
<p class="goods_price">
<text class="price-text" >{{goodData.price}}</text>
<text style="font-size: 28upx;">x{{goodData.goodsNo}} /{{ goodData.unit }}</text>
</p>
</view>
</view>
<view class="Rate">
<p>商品评分</p>
<view class="star" v-for="star in starsBox1" :key="star.name">
<image
:src="
item <= star.num ?
starImg
:
starNoImg
"
mode=""
v-for="(item,index) in starNum" :key="index" @click="setStar1(item, star)"></image>
</view>
</view>
<view class="pingjia_box">
<textarea placeholder="说说您的感受..." maxlength="-1" v-model="content" :disabled="!!commit" />
</view>
<view class="Rate">
<p>综合评分</p>
<view class="star" v-for="_star in starsBox" :key="_star.name">
{{ _star.name }}
<image
:src="
item <= _star.num ?
starImg
:
starNoImg
"
mode=""
v-for="item in starNum"
:key="item"
@click="setStar1(item, _star, 'more')"></image>
</view>
</view>
<fileList v-model="imgUrl" :show-colse-btn="fileListFlag.showCloseBtn"></fileList>
</view>
<view class="btns" :style="{background:colors}" @click="submit" v-if="!commit"></view>
</view>
</template>
<script>
import { getSalesGoodsItem, getToken, getUserInfo, removeToken, removeUserInfo, rmSalesGoodsItem } from '@/utils/auth';
import { addCommit, getCommit, uploadFile } from '@/api';
import fileList from '@/pages/commponent/public/fileList.vue'
import CONFIG from '@/config'
import { getFileList } from '@/utils/util.js'
var app = getApp();
export default {
components: {
fileList
},
data() {
return {
content:'',
colors:'',
themeObj: app.globalData.themeObj,
goodData:{},
imgUrl:[],//模拟上传后从后台获得的图片和视频
starNoImg:'/static/images/home/star-no.png',
starImg:'/static/images/home/stars.png',
starNum: 5,
imgNum: 5,
commit: null,
fileListFlag: {
showCloseBtn: false,
showAddBtn: false
},
starsBox1: [
{
name: '商品评价',
num: 0
}
],
starsBox: [
{
name: '推荐',
num: 0
},
{
name: '物流',
num: 0
},
{
name: '服务',
num: 0
}
]
};
},
created() {},
onLoad(options) {
const id = options.id !== '0' ? options.id : '0'
this.getCommit(id)
},
methods: {
getCommit(id) {
const goodData = getSalesGoodsItem()
this.setData({
colors: app.globalData.newColor,
goodData
});
const hasId = id !== '0'
this.fileListFlag.showCloseBtn = !hasId
if (hasId) {
uni.showLoading()
getCommit({ id }).then(res => {
uni.hideLoading()
this.commit = res.result
const imgUrl = getFileList(this.commit.url)
this.starsBox1[0].num = this.commit.qualityScore
this.starsBox[0].num = this.commit.suggestScore
this.starsBox[1].num = this.commit.deliveryScore
this.starsBox[2].num = this.commit.serviceScore
this.content = this.commit.content
this.imgUrl = imgUrl
})
}
},
setStar1(index, item, type = 'box1') {
if (this.commit) {
return
}
item.num = index
if (type === 'box1') {
this.starsBox1 = [...this.starsBox1]
return
}
this.starsBox = [...this.starsBox]
},
submit(){ //提交时需要对存储图片和视频的数组进行操作 把视频和图片分离出来
if (this.content.length < 2) {
this.$toast('评价字数不少于2个字')
return
}
if (this.starsBox1[0].num < 1 || this.starsBox.some(v => v.num < 1)) {
this.$toast('您忘记评分了')
return
}
const params = {
"orderId": this.goodData.orderId,
"content": this.content,
"goodId": this.goodData.goodsId,
"goodsName": this.goodData.goodsName,
"qualityScore": this.starsBox1[0].num,
"suggestScore": this.starsBox[0].num,
"deliveryScore": this.starsBox[1].num,
"serviceScore": this.starsBox[2].num,
"url": this.imgUrl.length > 0 ? this.imgUrl.map(v => v._url).join(',') : '',
"userId": getUserInfo().id,
"userName": getUserInfo().username
}
uni.showLoading({
mask:true
})
addCommit(params).then(res => {
uni.hideLoading()
if (res.result) {
this.$toast('评价成功')
setTimeout(() => {
uni.navigateBack()
}, 1000)
} else {
this.$toast(res.message)
}
})
},
},
onShow() {
}
};
</script>
<style lang="scss" scoped>
@import "./evaluate.scss";
page{
background-color: #F8F8F8;
}
</style>