From bec58fa7fe4fae2deac88200d8d939e12ec8a08f Mon Sep 17 00:00:00 2001
From: lrj <owen.stl@gmail.com>
Date: 星期五, 03 十月 2025 22:26:39 +0800
Subject: [PATCH] 修复小程序WXS日期显示问题并重新设计【我的】页面
---
web/src/components/RatingForm.vue | 170 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 162 insertions(+), 8 deletions(-)
diff --git a/web/src/components/RatingForm.vue b/web/src/components/RatingForm.vue
index 4437203..bc3e575 100644
--- a/web/src/components/RatingForm.vue
+++ b/web/src/components/RatingForm.vue
@@ -2,8 +2,52 @@
<div class="rating-form">
<div class="form-header">
<h3>{{ ratingForm.schemeName || '璇勫垎琛ㄥ崟' }}</h3>
- <div class="total-score">
- 鎬诲垎锛歿{ totalScore }} / {{ ratingForm.totalMaxScore }}
+ <div class="header-info">
+ <div class="judge-info">
+ <el-tag type="primary" size="large">
+ <el-icon><User /></el-icon>
+ 褰撳墠璇勫锛歿{ currentJudgeName || '鏈煡璇勫' }}
+ </el-tag>
+ </div>
+ <div class="total-score">
+ 鎬诲垎锛歿{ totalScore }} / {{ ratingForm.totalMaxScore }}
+ </div>
+ </div>
+ </div>
+
+ <!-- 澶氳瘎濮旇瘎鍒嗙姸鎬� -->
+ <div v-if="judgeRatings && judgeRatings.length > 0" class="judge-ratings-status">
+ <h4>璇勫璇勫垎鐘舵��</h4>
+ <div class="judge-status-list">
+ <div
+ v-for="judgeRating in judgeRatings"
+ :key="judgeRating.judgeId"
+ class="judge-status-item"
+ :class="{ 'current-judge': judgeRating.isCurrentJudge }"
+ >
+ <div class="judge-name">
+ <el-icon v-if="judgeRating.isCurrentJudge"><Star /></el-icon>
+ {{ judgeRating.judgeName }}
+ </div>
+ <div class="judge-score">
+ <el-tag
+ :type="judgeRating.status === 1 ? 'success' : 'info'"
+ size="small"
+ >
+ {{ judgeRating.status === 1 ? `宸茶瘎鍒�: ${judgeRating.totalScore}鍒哷 : '鏈瘎鍒�' }}
+ </el-tag>
+ </div>
+ </div>
+ </div>
+
+ <!-- 骞冲潎鍒嗘樉绀� -->
+ <div v-if="averageScore !== null" class="average-score">
+ <el-statistic
+ title="褰撳墠骞冲潎鍒�"
+ :value="averageScore"
+ :precision="2"
+ suffix="鍒�"
+ />
</div>
</div>
@@ -82,7 +126,8 @@
<script setup>
import { ref, reactive, computed, watch } from 'vue'
-import { ElForm, ElFormItem, ElInputNumber, ElInput, ElButton, ElMessage } from 'element-plus'
+import { ElForm, ElFormItem, ElInputNumber, ElInput, ElButton, ElMessage, ElTag, ElIcon, ElStatistic } from 'element-plus'
+import { User, Star } from '@element-plus/icons-vue'
const props = defineProps({
ratingForm: {
@@ -92,6 +137,26 @@
activityPlayerId: {
type: [String, Number],
required: true
+ },
+ // 鏂板锛氬綋鍓嶈瘎濮斾俊鎭�
+ currentJudgeName: {
+ type: String,
+ default: ''
+ },
+ // 鏂板锛氭墍鏈夎瘎濮旇瘎鍒嗙姸鎬�
+ judgeRatings: {
+ type: Array,
+ default: () => []
+ },
+ // 鏂板锛氬钩鍧囧垎
+ averageScore: {
+ type: Number,
+ default: null
+ },
+ // 鏂板锛氬綋鍓嶈瘎濮旂殑宸叉湁璇勫垎
+ existingRating: {
+ type: Object,
+ default: null
}
})
@@ -110,8 +175,19 @@
const initScores = () => {
if (props.ratingForm.items) {
props.ratingForm.items.forEach(item => {
- formData.scores[item.id] = null
+ // 濡傛灉鏈夊凡鏈夎瘎鍒嗭紝鍒欏姞杞藉凡鏈夊垎鏁�
+ if (props.existingRating && props.existingRating.items) {
+ const existingItem = props.existingRating.items.find(ratingItem => ratingItem.ratingItemId === item.id)
+ formData.scores[item.id] = existingItem ? existingItem.score : null
+ } else {
+ formData.scores[item.id] = null
+ }
})
+ }
+
+ // 鍔犺浇宸叉湁璇勮
+ if (props.existingRating && props.existingRating.remark) {
+ formData.comment = props.existingRating.remark
}
}
@@ -185,6 +261,11 @@
watch(() => props.ratingForm, () => {
initScores()
}, { immediate: true })
+
+// 鐩戝惉宸叉湁璇勫垎鍙樺寲锛岄噸鏂板垵濮嬪寲
+watch(() => props.existingRating, () => {
+ initScores()
+}, { immediate: true })
</script>
<style scoped>
@@ -196,19 +277,29 @@
}
.form-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
margin-bottom: 20px;
padding-bottom: 16px;
border-bottom: 1px solid #EBEEF5;
}
.form-header h3 {
- margin: 0;
+ margin: 0 0 12px 0;
color: #303133;
font-size: 18px;
font-weight: 600;
+}
+
+.header-info {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ flex-wrap: wrap;
+ gap: 12px;
+}
+
+.judge-info {
+ display: flex;
+ align-items: center;
}
.total-score {
@@ -220,6 +311,69 @@
border-radius: 20px;
}
+.judge-ratings-status {
+ margin-bottom: 24px;
+ padding: 16px;
+ background: #F8F9FA;
+ border-radius: 8px;
+ border: 1px solid #E9ECEF;
+}
+
+.judge-ratings-status h4 {
+ margin: 0 0 16px 0;
+ color: #303133;
+ font-size: 16px;
+ font-weight: 600;
+}
+
+.judge-status-list {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
+ gap: 12px;
+ margin-bottom: 16px;
+}
+
+.judge-status-item {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 12px;
+ background: white;
+ border-radius: 6px;
+ border: 1px solid #E4E7ED;
+ transition: all 0.3s ease;
+}
+
+.judge-status-item:hover {
+ border-color: #409EFF;
+ box-shadow: 0 2px 4px rgba(64, 158, 255, 0.1);
+}
+
+.judge-status-item.current-judge {
+ border-color: #409EFF;
+ background: #ECF5FF;
+}
+
+.judge-name {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ font-weight: 500;
+ color: #303133;
+}
+
+.judge-score {
+ flex-shrink: 0;
+}
+
+.average-score {
+ text-align: center;
+ padding: 16px;
+ background: white;
+ border-radius: 6px;
+ border: 1px solid #E4E7ED;
+}
+
.rating-items {
margin-bottom: 20px;
}
--
Gitblit v1.8.0