From 1a066437dcf3ee720627477e68b857ee723940b8 Mon Sep 17 00:00:00 2001 From: ywyonui Date: Mon, 11 Aug 2025 23:45:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=B0=B1=E9=A4=90=E7=82=B9?= =?UTF-8?q?=E5=90=8D=E5=88=97=E8=A1=A8=E5=92=8C=E8=AF=A6=E6=83=85=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../view/routine/jc/components/dmList.vue | 517 +++++++++--------- src/pages/view/routine/jc/detail.vue | 55 +- src/pages/view/routine/jc/index.vue | 2 + 3 files changed, 301 insertions(+), 273 deletions(-) diff --git a/src/pages/view/routine/jc/components/dmList.vue b/src/pages/view/routine/jc/components/dmList.vue index b1cd31f..488bac3 100644 --- a/src/pages/view/routine/jc/components/dmList.vue +++ b/src/pages/view/routine/jc/components/dmList.vue @@ -1,259 +1,303 @@ diff --git a/src/pages/view/routine/jc/detail.vue b/src/pages/view/routine/jc/detail.vue index 85f808b..74d117d 100644 --- a/src/pages/view/routine/jc/detail.vue +++ b/src/pages/view/routine/jc/detail.vue @@ -91,6 +91,14 @@ {{ getStatusCount('C') }} 缺勤 + + {{ getStatusCount('D') }} + 未缴费 + + + {{ getStatusCount('E') }} + 未报名 + @@ -100,6 +108,7 @@ v-for="student in dmDetail.xsList" :key="student.id" class="student-item bg-white r-md p-12" + :class="getStudentItemClass(student.jcZt)" > @@ -112,6 +121,9 @@ {{ student.xsXm }} + + {{ student.jcZt === 'D' ? '未缴费' : '未报名' }} + { } } +const getStudentItemClass = (status: string) => { + switch (status) { + case 'D': + return 'status-unpaid-item' + case 'E': + return 'status-unregistered-item' + default: + return '' + } +} + const getTeacherStatusText = (status: string) => { switch (status) { case 'A': @@ -328,7 +351,7 @@ onMounted(() => { .info-label { font-size: 28rpx; color: #666; - width: 120rpx; + width: 160rpx; flex-shrink: 0; } @@ -339,21 +362,20 @@ onMounted(() => { } .stats-container { - display: flex; - justify-content: space-around; + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 20rpx; margin-bottom: 30rpx; padding: 20rpx; background-color: #f8f9fa; border-radius: 12rpx; - flex-wrap: wrap; - gap: 60rpx; } .stat-item { display: flex; flex-direction: column; align-items: center; - min-width: 120rpx; + text-align: center; } .stat-number { @@ -453,6 +475,27 @@ onMounted(() => { color: #eb2f96; } +.status-unpaid-item { + border-left: 8rpx solid #ff4d4f; + background-color: #fff0f0; +} + +.status-unregistered-item { + border-left: 8rpx solid #eb2f96; + background-color: #fff0f6; +} + +.status-indicator { + font-size: 20rpx; + margin-left: 16rpx; + color: #ff4d4f; + background-color: #fff0f0; + padding: 4rpx 12rpx; + border-radius: 8rpx; + border: 1rpx solid #ff4d4f; + font-weight: bold; +} + .empty-tip { text-align: center; color: #999; diff --git a/src/pages/view/routine/jc/index.vue b/src/pages/view/routine/jc/index.vue index 434c47e..bc14266 100644 --- a/src/pages/view/routine/jc/index.vue +++ b/src/pages/view/routine/jc/index.vue @@ -53,6 +53,8 @@ const switchTab = (tab: string) => { .dm-container { min-height: 100vh; background-color: #f5f5f5; + display: flex; + flex-direction: column; } .tab-container {