mrr.sj.front/pages/evaluate/evaluationDetails.vue

357 lines
8.0 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="evaluation-detail">
<custom-navbar title="评价详情" :showBack="true" borderBottom="none" backgroundColor="#FFF"></custom-navbar>
<!-- 用户信息区域 -->
<view class="user-section">
<image class="avatar" :src="evaluatorPhoto" />
<view class="user-info">
<text class="username">{{ evaluatorName }}</text>
<text class="time">{{formattedCreateTime}}</text>
</view>
</view>
<view class="user-contant">
<!-- 评分标题 -->
<view class="rating-header">
<image :src="getComposite" class="tag" mode="heightFix"></image>
<view class="stars">
<image v-for="n in 5" :key="n" :src="getStar(n)" class="star-icon" />
</view>
<text class="score">{{evaluateObj.composite}}分</text>
</view>
<!-- 分类评分 -->
<view class="categories">
<text class="category-item" v-if="evaluateObj.process!=`0.0`">
过程:{{ evaluateObj.process }}
</text>
<text class="category-item" v-if="evaluateObj.attitude!=`0.0`">
态度:{{ evaluateObj.attitude }}
</text>
<text class="category-item" v-if="evaluateObj.technology!=`0.0`">
技术:{{ evaluateObj.technology }}
</text>
<text class="category-item" v-if="evaluateObj.effect!=`0.0`">
效果:{{ evaluateObj.effect}}
</text>
<text class="category-item" v-if="evaluateObj.environment!=`0.0`">
环境:{{ evaluateObj.environment}}
</text>
</view>
<!-- 评论内容 -->
<view class="comment">
<text>
{{ evaluateObj.describe }}
</text>
<!-- <uv-read-more show-height="300rpx" :toggle="true" textIndent="0rem">
</uv-read-more> -->
<!-- <text>
{{ evaluateObj.describe }}
</text> -->
</view>
<!-- 图片展示 -->
<view class="photos">
<image v-for="(photo, index) in photos" :key="index" :src="photo" class="photo" mode="aspectFill"
@tap.stop="imgPreview(index)" />
</view>
</view>
</view>
</template>
<script>
import request from "@/utils/request";
export default {
data() {
return {
evaluateObj: {},
formData: {
},
};
},
computed: {
evaluatorPhoto() {
if (!this.evaluateObj.evaluator_head_photo) {
return ""
}
return this.evaluateObj.anonymity == 1 ? "/static/images/evaluate/photo.jpg" : this.evaluateObj
.evaluator_head_photo
},
evaluatorName() {
if (!this.evaluateObj.evaluator_name) {
return ""
}
return this.evaluateObj.anonymity == 1 ? "匿名用户" : this.evaluateObj.evaluator_name
},
photos() {
if (!this.evaluateObj.images) {
return []
}
return this.evaluateObj.images.split(",")
},
// 计算属性:仅返回日期部分
formattedCreateTime() {
// 处理逻辑:通过空格分割取日期部分
let dateString = this.evaluateObj.create_time;
if (!dateString) {
return ""
}
// 处理旧版iOS兼容性将 "-" 替换为 "/"
const compatibleDateStr = dateString.replace(/-/g, '/');
// 创建日期对象
const date = new Date(compatibleDateStr);
// 兼容日期解析失败的情况
if (isNaN(date.getTime())) {
console.error('日期解析失败:', dateString);
return '';
}
// 获取各部分时间
const year = date.getFullYear();
const month = date.getMonth() + 1; // 月份从0开始需要加1
const day = date.getDate();
const hours = date.getHours();
const minutes = date.getMinutes();
// 补零处理
const pad = (num) => num.toString().padStart(2, '0');
const formattedMonth = pad(month);
const formattedDay = pad(day);
const formattedHours = pad(hours);
const formattedMinutes = pad(minutes);
// 拼接成目标格式
return `发布于${year}年${formattedMonth}月${formattedDay}日 ${formattedHours}:${formattedMinutes}`;
},
getComposite() {
if (!this.evaluateObj.composite) {
return ""
}
return `/static/images/evaluate/score${Math.floor(this.evaluateObj.composite)}.png`
}
},
onLoad(options) {
// 接收参数并解析
if (options.data) {
// 先解码再解析JSON
const receiveData = JSON.parse(decodeURIComponent(options.data));
console.log("接收的对象参数:", receiveData);
// 可以将数据赋值给data中的变量使用
this.evaluateObj = receiveData;
}
if (options.order_id) {
this.formData.order_id = options.order_id
this.formData.order_type = options.order_type
this.getList()
}
},
methods: {
getList() {
request.post("/user/orderEvaluate/details", this.formData).then((res) => {
console.log(res, "======");
this.evaluateObj = res.data;
});
},
imgPreview(index) {
uni.previewImage({
current: index,
urls: this.photos,
});
},
getStar(value) {
if (!this.evaluateObj.composite) {
return ""
}
let composite = this.evaluateObj.composite
if (composite >= value) {
return "/static/images/evaluate/star_red.png"
} else if (composite < value && composite > value - 1) {
return "/static/images/evaluate/star2.png"
} else {
return "/static/images/evaluate/star_ash2.png"
}
},
// 处理函数:保留整数部分,小数部分>0.5则取0.5否则取0
handleDecimal(num) {
// 提取整数部分正数用Math.floor负数特殊处理
const integerPart = Math.sign(num) === -1 ? Math.ceil(num) : Math.floor(num);
// 提取小数部分
const decimalPart = num - integerPart;
// 判断小数部分并返回结果
if (decimalPart > 0.5) {
return integerPart + 0.5;
} else {
return integerPart + 0; // 可简化为 integerPart
}
},
}
};
</script>
<style lang="less">
page {
background: #fff;
}
.evaluation-detail {
padding: 30rpx 20rpx;
}
/* 用户信息区域 */
.user-section {
display: flex;
align-items: center;
.avatar {
width: 76rpx;
height: 76rpx;
border-radius: 50%;
margin-right: 14rpx;
}
.user-info {
display: flex;
flex-direction: column;
justify-content: center;
align-items: flex-start;
.username {
font-weight: 400;
font-size: 30rpx;
color: #333333;
line-height: 42rpx;
text-align: left;
font-style: normal;
}
.time {
font-weight: 400;
font-size: 22rpx;
color: #999999;
line-height: 30rpx;
text-align: left;
font-style: normal;
}
}
}
.user-contant {
/* 评分头部 */
.rating-header {
display: flex;
align-items: center;
margin-top: 20rpx;
.tag {
height: 50rpx;
margin-right: 10rpx;
}
.stars {
display: flex;
align-items: center;
margin-left: 10rpx;
margin-right: 10rpx;
.star-icon {
width: 34rpx;
height: 34rpx;
margin-right: 2rpx;
}
}
.score {
font-weight: 400;
font-size: 26rpx;
color: #E8101E;
line-height: 37rpx;
text-align: left;
font-style: normal;
}
}
/* 各项评分 */
.categories {
margin-top: 10rpx;
display: flex;
gap: 20rpx;
font-weight: 400;
font-size: 24rpx;
color: #7C7C7C;
line-height: 33rpx;
text-align: left;
font-style: normal;
}
/* 评论内容 */
.comment {
margin-top: 30rpx;
font-weight: 400;
font-size: 26rpx;
color: #333333;
line-height: 46rpx;
text-align: left;
font-style: normal;
}
/* 图片区域 */
.photos {
display: flex;
flex-wrap: wrap;
justify-content: flex-start;
margin-top: 20rpx;
gap: 5rpx;
position: relative;
.photo {
width: 226rpx;
height: 226rpx;
border-radius: 6rpx;
object-fit: cover;
/* background-color: #f5f5f5; */
}
.more {
width: 59rpx;
height: 28rpx;
background: rgba(51, 51, 51, 0.4);
border-radius: 14rpx;
font-weight: 400;
font-size: 22rpx;
color: #FFFFFF;
line-height: 30rpx;
text-align: left;
font-style: normal;
display: flex;
align-items: center;
justify-content: center;
position: absolute;
bottom: 10rpx;
right: 10rpx;
.more-img {
width: 23rpx;
height: 17rpx;
margin-right: 5rpx;
}
}
}
}
</style>