roamfuding-xcx/page_fenbao/jiudian/addpj.vue

351 lines
8.9 KiB
Vue
Raw Normal View History

2025-12-20 14:32:28 +08:00
<template>
<view class="page">
<!-- 导航栏 -->
<u-navbar
title="评价商家"
:border-bottom="false"
:background="bgc"
back-icon-color="#262B37"
title-color='#262B37'
title-size='36'
height='46'
id="navbar"
>
</u-navbar>
<!-- 提示栏 -->
<view class="tip-bar">
<text>提交评价或建议帮助商家做得更好~</text>
</view>
<!-- 评价主体 -->
<view class="eval-container">
<!-- 匿名提交 -->
<view class="anonymous-wrap">
<text>您对商家满意吗</text>
<u-checkbox
v-model="isAnonymous"
shape="circle"
size="24rpx"
label="匿名提交"
label-size="26rpx"
>匿名提交</u-checkbox>
</view>
<!-- 商家信息 -->
<view class="merchant-info">
<image class="merchant-img" v-if="jdobj.picture" :src="jdobj.picture.split(',')[0]" mode="aspectFill"></image>
<image class="merchant-img" v-else src="/static/merchant.png" mode="aspectFill"></image>
<text class="merchant-name">{{jdobj.name == undefined ? '--' : jdobj.name}}</text>
</view>
<!-- 评价主体 -->
<view class="eval-container" style="padding: 0;margin: 0;margin-top: 20rpx;">
<!-- 修改后的评分项 -->
<view class="score-item" v-for="(item, index) in scoreList" :key="index">
<text class="score-label">{{ item.label }}</text>
<view class="stars-wrap">
<u-icon
v-for="sIdx in 5"
:key="sIdx"
name="star-fill"
:color="sIdx <= item.score ? '#FFC107' : '#eee'"
size="36rpx"
@click="setScore(index, sIdx)"
class="star"
></u-icon>
</view>
<text class="score-text">{{ item.text }}</text>
</view>
</view>
<!-- 评价输入 -->
<view class="eval-input">
<u-icon name="chat" color="#999" size="32rpx"></u-icon>
<textarea v-model="contxt" placeholder="说说酒店怎么样,给大家参考" placeholder-style="color:#999"></textarea>
</view>
<!-- 上传附件 -->
<view class="upload-wrap">
<view class="upload-item">
<view class="" style="position: relative;" v-for="(item,index) in imglist" :key="index">
<image :src="item" style="width: 200rpx;height: 200rpx;border-radius: 10rpx;" mode="aspectFill"></image>
<text @click="btndel(index)" style="font-size: 44rpx;display: block;width: 40rpx;height: 40rpx;color: #fff;background-color: red;position: absolute;right: -20rpx;top: -20rpx;line-height: 40rpx;border-radius: 50%;text-align: center;">×</text>
</view>
<image @click="getimage" src="https://api.ccttiot.com/smartmeter/img/static/u3z28zohbXoJ5kWcR6X1" style="width: 200rpx;height: 200rpx;filter: grayscale(100%);" mode=""></image>
</view>
</view>
<!-- 底部提交按钮 -->
<button class="submit-btn" @click="btntj">提交</button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
bgc: {
backgroundColor: "#fff",
},
isAnonymous: false,
// 评分数据
scoreList: [
{ label: '综合', score: 5, text: '非常满意' },
{ label: '位置', score: 5, text: '非常满意' },
{ label: '设施', score: 5, text: '非常满意' },
{ label: '服务', score: 5, text: '非常满意' },
{ label: '卫生', score: 5, text: '非常满意' }
],
id:'',
jdobj:{},
token:'',
imglist:[],
contxt:'',
jlflag:true
}
},
onLoad(e) {
console.log(e);
this.id = e.id
this.getxq()
this.getqiniuyun()
},
methods: {
// 点击进行提交
btntj(){
if(this.contxt == ''){
uni.showToast({
title: '酒店评价不能为空',
icon: 'none',
duration: 3000
})
return
}
if(this.jlflag == false){
return
}
this.jlflag = false
const picture = this.imglist.join(',')
let data = {
bstType:3,
bstId:this.id,
content:this.contxt,
mediaUrl:picture,
rating:this.scoreList[0].score,
locationRating:this.scoreList[1].score,
facilityRating:this.scoreList[2].score,
serviceRating:this.scoreList[3].score,
hygieneRating:this.scoreList[4].score,
anonymous:this.isAnonymous
}
this.$u.post(`/app/comment/add`,data).then(res =>{
if(res.code == 200){
uni.showToast({
title: '评价成功',
icon: 'success',
duration: 3000
})
setTimeout(()=>{
uni.navigateBack()
this.jlflag = true
},1500)
}else{
uni.showToast({
title: res.msg,
icon: 'none',
duration: 3000
})
this.jlflag = true
}
})
},
// 点击评分
setScore(index, score) {
this.scoreList[index].score = score;
const textMap = ['非常不满意', '不满意', '一般', '满意', '非常满意'];
this.scoreList[index].text = textMap[score];
console.log( this.scoreList);
},
// 查询酒店详情
getxq(){
this.$u.get(`/app/hotel/${this.id}`).then(res =>{
if(res.code == 200){
this.jdobj = res.data
}
})
},
// 获取七牛云上传token
getqiniuyun(){
this.$u.get("/common/qiniuToken").then((res) => {
if (res.code == 200) {
this.token = res.data
}
})
},
// 点击删除图片
btndel(index){
this.imglist.splice(index, 1)
},
getimage(e){
if(this.imglist.length >= 9){
return uni.showToast({ title: '最多选择九张图片', icon: 'none',duration:3000 })
}
let _this = this
// 使用 uni.chooseMedia 从手机相册选择图片和视频
uni.chooseMedia({
count: 9 - this.imglist.length, // 剩余可选择的数量
mediaType: ['image'], // 允许选择图片和视频
sourceType: ['album', 'camera'], // 允许从相册和相机选择
camera: 'back', // 默认后置摄像头
success(res) {
const tempFiles = res.tempFiles
tempFiles.forEach(file => {
wx.uploadFile({
url: 'https://up-z2.qiniup.com',
name: 'file',
filePath: file.tempFilePath, //文件路径
formData: {
token: _this.token, //后端返回的token
key:file.tempFilePath //传的文件名称
},
success: function(res) {
let str = JSON.parse(res.data)
let fileUrl = 'https://api.ccttiot.com/' + str.key
// 添加到媒体列表
_this.imglist.push(fileUrl)
}
})
})
},
fail(err) {
console.log('选择照片失败:', err)
uni.showToast({
title: '选择失败',
icon: 'none',
duration: 3000
})
}
})
},
}
}
</script>
<style lang="less">
page {
background: #f5f7fa;
}
/* 提示栏 */
.tip-bar {
background: #fffbe6;
color: #fa8c16;
font-size: 30rpx;
padding: 16rpx 20rpx;
}
/* 评价主体容器 */
.eval-container {
background: #fff;
margin: 20rpx;
border-radius: 16rpx;
padding: 24rpx;
// box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.05);
}
/* 匿名提交 */
.anonymous-wrap {
display: flex;
justify-content: space-between;
align-items: center;
font-size: 28rpx;
color: #333;
margin-bottom: 24rpx;
}
/* 商家信息 */
.merchant-info {
display: flex;
align-items: center;
margin-bottom: 30rpx;
.merchant-img {
width: 80rpx;
height: 80rpx;
border-radius: 8rpx;
background: #eee;
margin-right: 16rpx;
}
.merchant-name {
font-size: 28rpx;
color: #333;
}
}
/* 评分项 */
.score-item {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 30rpx;
.score-label {
font-size: 28rpx;
color: #333;
width: 120rpx;
}
.stars-wrap {
display: flex;
gap: 12rpx;
flex: 1;
.star {
cursor: pointer;
transition: color 0.2s ease;
// 增加hover效果提升用户体验
&:hover {
color: #FFD700 !important; // 悬浮时颜色更亮
transform: scale(1.1); // 轻微放大
}
}
}
.score-text {
font-size: 28rpx;
color: #ff9500;
font-weight: 500;
width: 150rpx;
text-align: right;
}
}
/* 评价输入 */
.eval-input {
display: flex;
align-items: flex-start;
gap: 16rpx;
padding: 20rpx;
background: #f5f5f5;
border-radius: 12rpx;
margin-bottom: 24rpx;
textarea {
flex: 1;
font-size: 30rpx;
color: #333;
min-height: 80rpx;
}
}
/* 上传附件 */
.upload-wrap {
display: flex;
gap: 40rpx;
margin-bottom: 30rpx;
.upload-item {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 24rpx;
font-size: 24rpx;
color: #666;
}
}
/* 提交按钮 */
.submit-btn {
width: 100%;
height: 88rpx;
line-height: 88rpx;
background: #ff9500;
color: #fff;
font-size: 32rpx;
border-radius: 16rpx;
}
</style>