hookehuyr

feat(teacher): 添加班主任点评列表功能并优化学生记录样式

- 新增班主任点评列表展示功能,包含日期、内容和评分
- 优化学生记录卡片样式,改进日期时间显示和状态图标
- 添加相关数据结构和加载逻辑
...@@ -120,27 +120,60 @@ ...@@ -120,27 +120,60 @@
120 <van-list v-show="activeTab === 'statistics'" v-model:loading="recordLoading" :finished="recordFinished" 120 <van-list v-show="activeTab === 'statistics'" v-model:loading="recordLoading" :finished="recordFinished"
121 finished-text="没有更多了" @load="onRecordLoad" class="px-4"> 121 finished-text="没有更多了" @load="onRecordLoad" class="px-4">
122 <div v-for="record in filteredRecords" :key="record.id" 122 <div v-for="record in filteredRecords" :key="record.id"
123 - class="flex items-center justify-between py-4 border-b border-gray-100 last:border-b-0 bg-white px-4"> 123 + class="bg-white rounded-lg shadow-sm p-4 mb-3 border border-gray-100">
124 - <div class="flex items-center flex-1"> 124 + <!-- 左右布局:左侧日期时间,右侧状态 -->
125 - <div class="mr-4"> 125 + <div class="flex items-center justify-between">
126 - <div style="display: flex; justify-content: center;"> 126 + <!-- 左侧:日期时间 -->
127 - <van-icon name="calendar-o" size="18" color="#6b7280" class="mb-1" /> &nbsp; 127 + <div class="flex flex-col">
128 - <span class="text-sm text-gray-500">{{ record.date }}</span> 128 + <div class="flex items-center mb-1">
129 + <van-icon name="calendar-o" size="16" color="#10b981" class="mr-2" />
130 + <span class="text-sm text-gray-600">{{ record.date }}</span>
129 </div> 131 </div>
130 - <div style="display: flex; "> 132 + <div class="flex items-center">
131 - <van-icon name="clock-o" size="18" color="#6b7280" class="mb-1" /> &nbsp; 133 + <van-icon name="clock-o" size="16" color="#3b82f6" class="mr-2" />
132 - <span class="text-sm text-gray-500">{{ record.time }}</span> 134 + <span class="text-sm text-gray-600">{{ record.time }}</span>
133 </div> 135 </div>
134 </div> 136 </div>
137 +
138 + <!-- 右侧:状态 -->
139 + <div class="flex items-center">
140 + <span v-if="record.status === '正常'" class="text-green-600 text-sm mr-2">{{ record.status }}</span>
141 + <span v-else-if="record.status === '迟到'" class="text-orange-500 text-sm mr-2">{{ record.status }}</span>
142 + <span v-else class="text-red-500 text-sm mr-2">{{ record.status }}</span>
143 +
144 + <van-icon v-if="record.status === '正常'" name="passed" color="#10b981" size="16" />
145 + <van-icon v-else-if="record.status === '迟到'" name="warning-o" color="#f59e0b" size="16" />
146 + <van-icon v-else name="close" color="#ef4444" size="16" />
147 + </div>
135 </div> 148 </div>
136 - <div class="flex items-center"> 149 + </div>
137 - <span v-if="record.status === '正常'" class="text-green-600 text-sm mr-2">{{ record.status }}</span> 150 + </van-list>
138 - <span v-else-if="record.status === '迟到'" class="text-orange-500 text-sm mr-2">{{ record.status }}</span>
139 - <span v-else class="text-red-500 text-sm mr-2">{{ record.status }}</span>
140 151
141 - <van-icon v-if="record.status === '正常'" name="passed" color="#10b981" size="16" /> 152 + <!-- 班主任点评列表 -->
142 - <van-icon v-else-if="record.status === '迟到'" name="warning-o" color="#f59e0b" size="16" /> 153 + <van-list v-show="activeTab === 'evaluation'" v-model:loading="evaluationLoading" :finished="evaluationFinished"
143 - <van-icon v-else name="close" color="#ef4444" size="16" /> 154 + finished-text="没有更多了" @load="onEvaluationLoad" class="px-4">
155 + <div v-for="evaluation in evaluationList" :key="evaluation.id"
156 + class="bg-white rounded-lg shadow-sm p-4 mb-3 border border-gray-100">
157 + <!-- 第一行:时间 + 日历图标 -->
158 + <div class="flex items-center mb-3">
159 + <van-icon name="calendar-o" size="16" color="#10b981" class="mr-2" />
160 + <span class="text-sm text-gray-600">{{ evaluation.date }}</span>
161 + </div>
162 +
163 + <!-- 第二行:点评内容 + 图标 -->
164 + <div class="flex items-start mb-3">
165 + <van-icon name="chat-o" size="16" color="#3b82f6" class="mr-2 mt-0.5" />
166 + <div class="flex-1">
167 + <p class="text-gray-800 text-sm leading-relaxed">{{ evaluation.content }}</p>
168 + </div>
169 + </div>
170 +
171 + <!-- 第三行:点评分数 + rate评分组件 -->
172 + <div class="flex items-center">
173 + <van-icon name="star-o" size="16" color="#f59e0b" class="mr-2" />
174 + <span class="text-sm text-gray-600 mr-3">评分:</span>
175 + <van-rate v-model="evaluation.score" :size="16" color="#ffd21e" void-color="#eee" readonly />
176 + <span class="text-sm text-gray-500 ml-2">({{ evaluation.score }}/5)</span>
144 </div> 177 </div>
145 </div> 178 </div>
146 </van-list> 179 </van-list>
...@@ -358,6 +391,44 @@ const records = ref([ ...@@ -358,6 +391,44 @@ const records = ref([
358 const recordLoading = ref(false) 391 const recordLoading = ref(false)
359 const recordFinished = ref(false) 392 const recordFinished = ref(false)
360 393
394 +// 班主任点评列表数据
395 +const evaluationList = ref([
396 + {
397 + id: 1,
398 + date: '2023-11-20 14:30',
399 + content: '李华同学在本周的学习中表现优秀,课堂参与度很高,作业完成质量也很好。希望继续保持这种学习态度,在数学方面可以多加练习。',
400 + score: 4
401 + },
402 + {
403 + id: 2,
404 + date: '2023-11-15 16:45',
405 + content: '本周李华在语文课上积极发言,写作能力有明显提升。但需要注意课堂纪律,不要和同桌说话。总体表现良好。',
406 + score: 4
407 + },
408 + {
409 + id: 3,
410 + date: '2023-11-10 15:20',
411 + content: '李华同学这周在英语学习上进步很大,单词记忆和口语表达都有提升。建议多读英语文章,培养语感。',
412 + score: 5
413 + },
414 + {
415 + id: 4,
416 + date: '2023-11-05 17:10',
417 + content: '本周表现一般,上课有时会走神,作业完成情况还可以。希望能够更加专注学习,提高课堂效率。',
418 + score: 3
419 + },
420 + {
421 + id: 5,
422 + date: '2023-10-30 14:50',
423 + content: '李华同学在体育课上表现积极,团队合作意识强。学习方面需要加强时间管理,合理安排各科学习时间。',
424 + score: 4
425 + }
426 +])
427 +
428 +// 班主任点评列表加载状态
429 +const evaluationLoading = ref(false)
430 +const evaluationFinished = ref(false)
431 +
361 /** 432 /**
362 * 过滤后的记录列表 433 * 过滤后的记录列表
363 */ 434 */
...@@ -402,6 +473,16 @@ const onRecordLoad = () => { ...@@ -402,6 +473,16 @@ const onRecordLoad = () => {
402 } 473 }
403 474
404 /** 475 /**
476 + * 加载更多班主任点评数据
477 + */
478 +const onEvaluationLoad = () => {
479 + setTimeout(() => {
480 + evaluationLoading.value = false
481 + evaluationFinished.value = true
482 + }, 1000)
483 +}
484 +
485 +/**
405 * 组件挂载时初始化数据 486 * 组件挂载时初始化数据
406 */ 487 */
407 const checkinDataList = ref([]); 488 const checkinDataList = ref([]);
......