444 lines
11 KiB
Vue
444 lines
11 KiB
Vue
<template>
|
||
<view class="hzIndex">
|
||
<hzHeader title="菜单评价"></hzHeader>
|
||
<view class="hzContent" style="padding-top: 200upx;">
|
||
<view class="content">
|
||
<view class="star-rating">
|
||
<view class="label">
|
||
<text>菜谱评分<text style="color: red;">*</text>:</text>
|
||
</view>
|
||
<stars-rating :starsIndex="starsIndex1" :isEditStars="true" @starsClick="evaluateStar(1,$event)"></stars-rating>
|
||
</view>
|
||
<view class="star-rating">
|
||
<view class="label">
|
||
<text>菜品评分<text style="color: red;">*</text>:</text>
|
||
</view>
|
||
<stars-rating :starsIndex="starsIndex2" :isEditStars="true" @starsClick="evaluateStar(2,$event)"></stars-rating>
|
||
</view>
|
||
<view class="star-rating">
|
||
<view class="label">
|
||
<text>食堂服务<text style="color: red;">*</text>:</text>
|
||
</view>
|
||
<stars-rating :starsIndex="starsIndex3" :isEditStars="true" @starsClick="evaluateStar(3,$event)"></stars-rating>
|
||
</view>
|
||
<view class="star-rating">
|
||
<view class="label">
|
||
<text>就餐环境<text style="color: red;">*</text>:</text>
|
||
</view>
|
||
<stars-rating :starsIndex="starsIndex4" :isEditStars="true" @starsClick="evaluateStar(4,$event)"></stars-rating>
|
||
</view>
|
||
<view class="star-rating">
|
||
<view class="label">
|
||
<text>卫生状况<text style="color: red;">*</text>:</text>
|
||
</view>
|
||
<stars-rating :starsIndex="starsIndex5" :isEditStars="true" @starsClick="evaluateStar(5,$event)"></stars-rating>
|
||
</view>
|
||
|
||
<view>
|
||
<view style="margin: 20upx;font-size: 32upx;">
|
||
<text>上传图片:</text>
|
||
</view>
|
||
<view class="img-box">
|
||
<view class="img-item" v-for="(item, index) in imgs" :key="index">
|
||
<image class="remove-btn" @click="removeImg(index)" src="/static/icons/delete-icon.png" mode=""></image>
|
||
<image class="img" :src="item.replace(/[\r\n]/g,'')" mode=""></image>
|
||
</view>
|
||
<view class="img-item upload-btn" @click="chooseImg()" v-if="imgs.length < 3"><image class="img" src="/static/imgs/tianjia-img.png" mode=""></image></view>
|
||
</view>
|
||
</view>
|
||
|
||
<view>
|
||
<view style="margin: 20upx;font-size: 32upx;">
|
||
<text>建议意见:</text>
|
||
</view>
|
||
<textarea style="border: 1px solid #e5e5e5;border-radius: 10upx;font-size: 28upx;padding: 10upx;" value="" placeholder="请输入建议或意见" maxlength="500" v-model="evContent" />
|
||
</view>
|
||
</view>
|
||
<view class="occupied" style="height: 300upx;"></view>
|
||
<view class="footer-btn"><view class="btn" @click="submit()">提交</view></view>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import starsRating from '@/components/starsRating';
|
||
import uniRate from '@/components/uni-rate/uni-rate.vue';
|
||
import { addEvaluate } from '@/common/api.js';
|
||
import { callbackRequest, getStorage, alertTip, sureAlterTip,convertImgToBase64,uploadImg } from '@/common/util.js';
|
||
export default {
|
||
components: { uniRate,starsRating },
|
||
data() {
|
||
return {
|
||
starsIndex1: 0, // 默认星级评价分数
|
||
starsIndex2: 0, // 默认星级评价分数
|
||
starsIndex3: 0, // 默认星级评价分数
|
||
starsIndex4: 0, // 默认星级评价分数
|
||
starsIndex5: 0, // 默认星级评价分数
|
||
imgs:[],
|
||
imgsId:[],
|
||
userInfo: getStorage('userInfo'),
|
||
evContent: '', //评价内容
|
||
day: '',
|
||
foodType: '',
|
||
year: '',
|
||
weeks: '',
|
||
grade: 5,
|
||
items: [
|
||
{
|
||
value: '0',
|
||
name: '非常满意'
|
||
},
|
||
{
|
||
value: '1',
|
||
name: '满意',
|
||
checked: 'true'
|
||
},
|
||
{
|
||
value: '2',
|
||
name: '一般'
|
||
}
|
||
],
|
||
current:0
|
||
};
|
||
},
|
||
onLoad(option) {
|
||
this.day = option.day;
|
||
this.foodType = option.foodType;
|
||
this.year = option.year;
|
||
this.weeks = option.weeks;
|
||
|
||
},
|
||
methods: {
|
||
evaluateStar() {
|
||
console.log(...arguments)
|
||
console.log(arguments[0])
|
||
let starstype = arguments[0]
|
||
if(starstype==1){
|
||
this.starsIndex1 = arguments[1];
|
||
}if(starstype==2){
|
||
this.starsIndex2 = arguments[1];
|
||
}if(starstype==3){
|
||
this.starsIndex3 = arguments[1];
|
||
}if(starstype==4){
|
||
this.starsIndex4 = arguments[1];
|
||
}if(starstype==5){
|
||
this.starsIndex5 = arguments[1];
|
||
}
|
||
},
|
||
submit() {
|
||
console.log(this.starsIndex1)
|
||
console.log(this.starsIndex2)
|
||
console.log(this.starsIndex3)
|
||
console.log(this.starsIndex4)
|
||
console.log(this.starsIndex5)
|
||
|
||
if (this.starsIndex1==0) {
|
||
alertTip('请选择菜谱评分');
|
||
return false;
|
||
}
|
||
if (this.starsIndex2==0) {
|
||
alertTip('请选择菜品评分');
|
||
return false;
|
||
}
|
||
if (this.starsIndex3==0) {
|
||
alertTip('请选择食堂服务');
|
||
return false;
|
||
}
|
||
if (this.starsIndex4==0) {
|
||
alertTip('请选择就餐环境');
|
||
return false;
|
||
}
|
||
if (this.starsIndex5==0) {
|
||
alertTip('请选择卫生状况');
|
||
return false;
|
||
}
|
||
// if (this.imgsId.length==0) {
|
||
// alertTip('请选择图片');
|
||
// return false;
|
||
// }
|
||
// if (!this.evContent) {
|
||
// alertTip('请输入建议意见');
|
||
// return false;
|
||
// }
|
||
let data;
|
||
data = {
|
||
method: addEvaluate,
|
||
data: {
|
||
userId: this.userInfo.id,
|
||
userName: this.userInfo.userName,
|
||
evaluate: this.evContent,
|
||
recipeScore:this.starsIndex1,
|
||
varietyScore:this.starsIndex2,
|
||
canteenScore:this.starsIndex3,
|
||
diningScore:this.starsIndex4,
|
||
healthScore:this.starsIndex5,
|
||
weeks:this.weeks,
|
||
year:this.year,
|
||
foodType:this.foodType,
|
||
day:this.day,
|
||
photo:this.imgsId.join(','),
|
||
}
|
||
}
|
||
callbackRequest(data).then(res => {
|
||
if (res.data.returnCode == 1) {
|
||
sureAlterTip('', '评价成功', false).then(_ => {
|
||
uni.navigateBack(1);
|
||
});
|
||
} else {
|
||
alertTip(res.data.returnMsg);
|
||
}
|
||
});
|
||
},
|
||
// 上传图片
|
||
async chooseImg() {
|
||
let chec = 0;
|
||
let sty = [];
|
||
let _this = this;
|
||
uni.showActionSheet({
|
||
itemList:['拍照','相册'],
|
||
success:function(resp){
|
||
chec = resp.tapIndex;
|
||
if (chec == 0) {
|
||
sty = ['camera']; //从相册相机选择
|
||
} else {
|
||
sty = ['album']; //从相册相机选择
|
||
}
|
||
uni.chooseImage({
|
||
count:3,
|
||
sizeType: ['compressed'],
|
||
sourceType: sty,
|
||
quality: 1,
|
||
success: async function(res){
|
||
let resData = res.tempFilePaths;
|
||
for(let i=0;i<resData.length;i++){
|
||
if(_this.imgs.length>3){
|
||
break;
|
||
}
|
||
uni.getImageInfo({
|
||
src: resData[i],
|
||
success:async (path) => {
|
||
convertImgToBase64(path.path, async function(base64) {
|
||
if(_this.imgs.length<3){
|
||
// _this.imgs.push(base64);
|
||
uni.showLoading({
|
||
title: '图片上传中'
|
||
})
|
||
let blength = base64.length;
|
||
let glength = 7500;
|
||
if(blength<=glength){
|
||
let uploadParam = {
|
||
base64: base64,
|
||
userId: getStorage('userInfo').userId+i,
|
||
groupEnd: '1'
|
||
}
|
||
await uploadImg(uploadParam).then(resu => {
|
||
resu = resu.data ;
|
||
uni.hideLoading();
|
||
if (resu.returnCode != 1) {
|
||
alertTip(resu.returnMsg);
|
||
}else{
|
||
_this.imgs.push(base64);
|
||
_this.imgsId.push(resu.returnData+".jpg");
|
||
|
||
}
|
||
});
|
||
}else{
|
||
let fnum = parseInt(blength/glength);
|
||
for(let j=1;j<fnum+1;j++){
|
||
if(j==fnum){
|
||
let groupBase = base64.slice((j-1)*glength);
|
||
console.log(groupBase.length,"groupBaselength");
|
||
let uploadParam = {
|
||
base64: groupBase,
|
||
userId: getStorage('userInfo').userId+i,
|
||
groupEnd: '1'
|
||
}
|
||
await uploadImg(uploadParam).then(resu => {
|
||
resu = resu.data ;
|
||
if (resu.returnCode == 1) {
|
||
_this.imgs.push(base64);
|
||
_this.imgsId.push(resu.returnData+".jpg");
|
||
} else {
|
||
uni.hideLoading();
|
||
alertTip(resu.returnMsg);
|
||
return;
|
||
}
|
||
});
|
||
}else{
|
||
let groupBase = base64.slice((j-1)*glength,glength*j);
|
||
let uploadParam = {
|
||
base64: groupBase,
|
||
userId: getStorage('userInfo').userId+i,
|
||
groupEnd: '0'
|
||
}
|
||
await uploadImg(uploadParam).then(resu => {
|
||
resu = resu.data ;
|
||
if (resu.returnCode == 1) {
|
||
} else {
|
||
uni.hideLoading();
|
||
alertTip(resu.returnMsg);
|
||
return;
|
||
}
|
||
});
|
||
}
|
||
|
||
}
|
||
uni.hideLoading();
|
||
}
|
||
|
||
|
||
}
|
||
|
||
});
|
||
},
|
||
});
|
||
}
|
||
|
||
}
|
||
});
|
||
},
|
||
fail:function(resp){
|
||
console.log(resp.errMsg);
|
||
}
|
||
});
|
||
},
|
||
removeImg(index) {
|
||
this.imgs.splice(index, 1);
|
||
this.imgsId.splice(index, 1);
|
||
// console.log(this.imgs);
|
||
// console.log(this.imgsId);
|
||
},
|
||
|
||
}
|
||
};
|
||
</script>
|
||
|
||
<style lang="scss">
|
||
@import '@/static/css/common.scss';
|
||
.star-rating{
|
||
padding: 20upx 20upx;
|
||
display: flex;
|
||
|
||
.label{
|
||
font-size: 32upx;
|
||
margin-right: 20upx;
|
||
}
|
||
}
|
||
|
||
.img-box {
|
||
overflow: hidden;
|
||
padding-top: 20rpx;
|
||
padding-bottom: 10rpx;
|
||
|
||
.img-item {
|
||
float: left;
|
||
width: 190upx;
|
||
height: 190upx;
|
||
border: 1px solid #ddd;
|
||
margin: 0 22rpx 20upx 0upx;
|
||
position: relative;
|
||
box-sizing: border-box;
|
||
|
||
.img {
|
||
display: block;
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
|
||
.remove-btn {
|
||
position: absolute;
|
||
top: -18upx;
|
||
right: -18upx;
|
||
width: 44upx;
|
||
height: 44upx;
|
||
z-index: 2;
|
||
}
|
||
}
|
||
|
||
.upload-btn {
|
||
.img {
|
||
width: 60upx;
|
||
height: 60upx;
|
||
margin: unset;
|
||
}
|
||
}
|
||
}
|
||
|
||
.starActive {
|
||
color: #ff8000;
|
||
}
|
||
.main {
|
||
min-height: 100vh;
|
||
background: #f3f3f3;
|
||
}
|
||
.content {
|
||
margin: 0 20upx;
|
||
border-radius: 20upx;
|
||
padding: 30rpx;
|
||
padding-bottom: 80upx;
|
||
background: #fff;
|
||
position: relative;
|
||
font-size: 26upx;
|
||
textarea {
|
||
width: 100%;
|
||
height: 300rpx;
|
||
font-size: 28rpx;
|
||
color: #666;
|
||
line-height: 40rpx;
|
||
}
|
||
}
|
||
.grade {
|
||
font-size: 28upx;
|
||
padding: 30rpx;
|
||
text {
|
||
font-size: 28rpx;
|
||
color: #444;
|
||
font-weight: bold;
|
||
}
|
||
}
|
||
.grade .rate {
|
||
margin-left: 80upx;
|
||
margin-top: -18upx;
|
||
}
|
||
.uni-title {
|
||
padding: 20upx 0upx;
|
||
margin-left: 20px;
|
||
font-size: 18px;
|
||
}
|
||
.radio {
|
||
padding: 0 20px;
|
||
width: 100%;
|
||
height: 300rpx;
|
||
font-size: 30upx;
|
||
color: #666;
|
||
line-height: 40rpx;
|
||
style: 'transform:scale(0.7)';
|
||
.rediobox {
|
||
font-size: 28upx;
|
||
margin-top: 30upx;
|
||
width: 38upx;
|
||
height: 38upx;
|
||
// line-height: 10upx;
|
||
}
|
||
.txt {
|
||
margin-left: 18upx;
|
||
font-size: 28upx;
|
||
// margin-top: 20px;
|
||
// width: 35upx;
|
||
// height: 35upx;
|
||
// line-height: 35upx;
|
||
}
|
||
}
|
||
|
||
|
||
/deep/.rediobox .uni-radio-input,
|
||
/deep/.rediobox .uni-radio-wrapper {
|
||
width: 100%;
|
||
height: 100%;
|
||
border: #e5e5e5;
|
||
}
|
||
/deep/ .rediobox .uni-radio-input {
|
||
margin-right: 0;
|
||
}
|
||
</style>
|