47f54494 by 张猛

考试名称

1 parent a37d3794
1 <template> 1 <template>
2 <view> 2 <view>
3 3
4 4
5 <scroll-view scroll-y class="detail-content"> 5 <scroll-view class="detail-content" scroll-y>
6 <!-- 考段基本信息 --> 6 <!-- 考段基本信息 -->
7 <view class="card"> 7 <view class="card">
8 <view class="card-header"> 8 <view class="card-header">
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
10 </view> 10 </view>
11 <view class="card-body"> 11 <view class="card-body">
12 <view class="info-row"> 12 <view class="info-row">
13 <text class="label">名称</text> 13 <text class="label">名称</text>
14 <text class="value">{{ form.name || '' }}</text> 14 <text class="value">{{ form.name || '' }}</text>
15 </view> 15 </view>
16 <view class="info-row"> 16 <view class="info-row">
...@@ -38,15 +38,15 @@ ...@@ -38,15 +38,15 @@
38 <text class="label">考段地点</text> 38 <text class="label">考段地点</text>
39 <text class="value">{{ form.address || '--' }}</text> 39 <text class="value">{{ form.address || '--' }}</text>
40 </view> 40 </view>
41 <view class="info-row" v-if="userType == '2' || userType == '1'"> 41 <view v-if="userType == '2' || userType == '1'" class="info-row">
42 <text class="label">总金额</text> 42 <text class="label">总金额</text>
43 <text class="value text-red">¥{{ (Number(form.totalAmount) || 0).toFixed(2) }}</text> 43 <text class="value text-red">¥{{ (Number(form.totalAmount) || 0).toFixed(2) }}</text>
44 </view> 44 </view>
45 </view> 45 </view>
46 </view> 46 </view>
47 47
48 <!-- 收货地址 --> 48 <!-- 收货地址 -->
49 <view class="card" v-if="addressForm.name || addressForm.phone || addressForm.address"> 49 <view v-if="addressForm.name || addressForm.phone || addressForm.address" class="card">
50 <view class="card-header"> 50 <view class="card-header">
51 <view class="header-left">收货地址</view> 51 <view class="header-left">收货地址</view>
52 </view> 52 </view>
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
65 </view> 65 </view>
66 </view> 66 </view>
67 </view> 67 </view>
68 68
69 <!-- 考生信息(完全去字段名,匹配参考图布局) --> 69 <!-- 考生信息(完全去字段名,匹配参考图布局) -->
70 <view class="card"> 70 <view class="card">
71 <view class="card-header"> 71 <view class="card-header">
...@@ -74,33 +74,33 @@ ...@@ -74,33 +74,33 @@
74 {{ tablePersonInfo.total || 0 }} 74 {{ tablePersonInfo.total || 0 }}
75 </view> 75 </view>
76 </view> 76 </view>
77 77
78 <!-- 级别统计 --> 78 <!-- 级别统计 -->
79 <view class="level-summary" v-if="tablePersonInfo.levelArr?.length > 0"> 79 <view v-if="tablePersonInfo.levelArr?.length > 0" class="level-summary">
80 <view class="level-tag" v-for="l in tablePersonInfo.levelArr" :key="l.level"> 80 <view v-for="l in tablePersonInfo.levelArr" :key="l.level" class="level-tag">
81 {{ szToHz(l.level) }}{{ l.num }} 81 {{ szToHz(l.level) }}{{ l.num }}
82 </view> 82 </view>
83 </view> 83 </view>
84 84
85 <!-- 加载状态 --> 85 <!-- 加载状态 -->
86 <view v-if="loading" class="state-tip">加载中...</view> 86 <view v-if="loading" class="state-tip">加载中...</view>
87 <view v-else-if="list.length === 0" class="state-tip">暂无考生信息</view> 87 <view v-else-if="list.length === 0" class="state-tip">暂无考生信息</view>
88 88
89 <!-- 考生列表(去字段名,美观布局) --> 89 <!-- 考生列表(去字段名,美观布局) -->
90 <view class="student-list" v-else> 90 <view v-else class="student-list">
91 <view class="student-card" v-for="n in list" :key="n.id"> 91 <view v-for="n in list" :key="n.id" class="student-card">
92 <view class="student-top"> 92 <view class="student-top">
93 <view class="student-name"> 93 <view class="student-name">
94 <text class="name">{{ n.realName || '--' }}</text> 94 <text class="name">{{ n.realName || '--' }}</text>
95 <text class="unit">{{ n.memName || '' }}</text> 95 <text class="unit">{{ n.memName || '' }}</text>
96 </view> 96 </view>
97 <view class="pass-tag" :class="n.isPass == 1 ? 'pass' : 'fail'"> 97 <view :class="n.isPass == 1 ? 'pass' : 'fail'" class="pass-tag">
98 {{ n.isPass == 1 ? '通过' : '未通过' }} 98 {{ n.isPass == 1 ? '通过' : '未通过' }}
99 </view> 99 </view>
100 </view> 100 </view>
101 <view class="student-info"> 101 <view class="student-info">
102 <view class="info-col"> 102 <view class="info-col">
103 <text class="info-text" >{{ n.idcCode || '--' }}</text> 103 <text class="info-text">{{ n.idcCode || '--' }}</text>
104 </view> 104 </view>
105 <view class="info-col"> 105 <view class="info-col">
106 <text class="info-text">{{ !n.levelOld || n.levelOld == 0 ? '十级' : szToHz(n.levelOld) + '级' }}</text> 106 <text class="info-text">{{ !n.levelOld || n.levelOld == 0 ? '十级' : szToHz(n.levelOld) + '级' }}</text>
...@@ -108,33 +108,33 @@ ...@@ -108,33 +108,33 @@
108 <view class="info-col"> 108 <view class="info-col">
109 <text class="info-text">{{ n.levelNew ? szToHz(n.levelNew) + '级' : '--' }}</text> 109 <text class="info-text">{{ n.levelNew ? szToHz(n.levelNew) + '级' : '--' }}</text>
110 </view> 110 </view>
111 <view class="info-col" v-if="userType == '2' || userType == '1'"> 111 <view v-if="userType == '2' || userType == '1'" class="info-col">
112 <text class="info-text text-red">¥{{ (Number(n.examFee) || 0).toFixed(2) }}</text> 112 <text class="info-text text-red">¥{{ (Number(n.examFee) || 0).toFixed(2) }}</text>
113 </view> 113 </view>
114 </view> 114 </view>
115 </view> 115 </view>
116 </view> 116 </view>
117 117
118 <!-- 加载更多 --> 118 <!-- 加载更多 -->
119 <view class="load-more" v-if="list.length > 0 && hasMore" @click="loadMore"> 119 <view v-if="list.length > 0 && hasMore" class="load-more" @click="loadMore">
120 {{ loadingMore ? '加载中...' : '加载更多' }} 120 {{ loadingMore ? '加载中...' : '加载更多' }}
121 </view> 121 </view>
122 <!-- <view class="no-more" v-if="!hasMore && list.length > 0">没有更多了</view> --> 122 <!-- <view class="no-more" v-if="!hasMore && list.length > 0">没有更多了</view> -->
123 </view> 123 </view>
124 124
125 <!-- 审核记录 --> 125 <!-- 审核记录 -->
126 <view class="h3-padding">审核记录</view> 126 <view class="h3-padding">审核记录</view>
127 <view class="wBox"> 127 <view class="wBox">
128 <view v-if="loadingAudit" class="state-tip">加载中...</view> 128 <view v-if="loadingAudit" class="state-tip">加载中...</view>
129 <view v-else-if="recordList.length === 0" class="state-tip">暂无审核记录</view> 129 <view v-else-if="recordList.length === 0" class="state-tip">暂无审核记录</view>
130 <view class="stepItem" v-else v-for="(n, index) in recordList" :key="index"> 130 <view v-for="(n, index) in recordList" v-else :key="index" class="stepItem">
131 <view class="time">{{ n.auditTime || '待审批' }}</view> 131 <view class="time">{{ n.auditTime || '待审批' }}</view>
132 <view class="content"> 132 <view class="content">
133 <view class="status"> 133 <view class="status">
134 <text v-if="n.auditResult==1" class="text-success">审核通过</text> 134 <text v-if="n.auditResult==1" class="text-success">审核通过</text>
135 135
136 <text v-else-if="n.auditResult==0" class="text-danger">审核拒绝</text> 136 <text v-else-if="n.auditResult==0" class="text-danger">审核拒绝</text>
137 <text v-else class="text-primary">审核中</text> 137 <text v-else class="text-primary">审核中</text>
138 </view> 138 </view>
139 <view class="deptName">{{ n.auditDeptName || n.deptName || '--' }}</view> 139 <view class="deptName">{{ n.auditDeptName || n.deptName || '--' }}</view>
140 <view v-if="n.auditMsg">备注:{{ n.auditMsg }}</view> 140 <view v-if="n.auditMsg">备注:{{ n.auditMsg }}</view>
...@@ -148,9 +148,9 @@ ...@@ -148,9 +148,9 @@
148 <script setup> 148 <script setup>
149 import * as api from '@/common/api.js' 149 import * as api from '@/common/api.js'
150 import _ from 'underscore' 150 import _ from 'underscore'
151 import { ref } from 'vue' 151 import {ref} from 'vue'
152 import { onLoad } from '@dcloudio/uni-app' 152 import {onLoad} from '@dcloudio/uni-app'
153 import { szToHz } from '@/common/utils.js' 153 import {szToHz} from '@/common/utils.js'
154 154
155 const app = getApp() 155 const app = getApp()
156 const userType = ref('') 156 const userType = ref('')
...@@ -174,7 +174,7 @@ let examType = ref('2') ...@@ -174,7 +174,7 @@ let examType = ref('2')
174 174
175 onLoad((option) => { 175 onLoad((option) => {
176 if (!option.examId) { 176 if (!option.examId) {
177 uni.showToast({ title: '参数错误', icon: 'none' }) 177 uni.showToast({title: '参数错误', icon: 'none'})
178 setTimeout(() => uni.navigateBack(), 1500) 178 setTimeout(() => uni.navigateBack(), 1500)
179 return 179 return
180 } 180 }
...@@ -186,7 +186,7 @@ onLoad((option) => { ...@@ -186,7 +186,7 @@ onLoad((option) => {
186 }) 186 })
187 187
188 function initData() { 188 function initData() {
189 uni.showLoading({ title: '加载中' }) 189 uni.showLoading({title: '加载中'})
190 userType.value = app.globalData.userType || '3' 190 userType.value = app.globalData.userType || '3'
191 getForm() 191 getForm()
192 getList() 192 getList()
...@@ -200,12 +200,12 @@ function getForm() { ...@@ -200,12 +200,12 @@ function getForm() {
200 form.value = res.data || {} 200 form.value = res.data || {}
201 addressForm.value = res.data?.postAddress || {} 201 addressForm.value = res.data?.postAddress || {}
202 } else { 202 } else {
203 uni.showToast({ title: res.msg || '获取详情失败', icon: 'none' }) 203 uni.showToast({title: res.msg || '获取详情失败', icon: 'none'})
204 } 204 }
205 }).catch(err => { 205 }).catch(err => {
206 uni.hideLoading() 206 uni.hideLoading()
207 console.error('getForm error:', err) 207 console.error('getForm error:', err)
208 uni.showToast({ title: '网络请求失败', icon: 'none' }) 208 uni.showToast({title: '网络请求失败', icon: 'none'})
209 }) 209 })
210 } 210 }
211 211
...@@ -235,7 +235,7 @@ function getList() { ...@@ -235,7 +235,7 @@ function getList() {
235 235
236 function calcPersonInfo(rows) { 236 function calcPersonInfo(rows) {
237 if (!rows || rows.length === 0) { 237 if (!rows || rows.length === 0) {
238 tablePersonInfo.value = { total: 0, levelArr: [] } 238 tablePersonInfo.value = {total: 0, levelArr: []}
239 return 239 return
240 } 240 }
241 const total = rows.length 241 const total = rows.length
...@@ -246,7 +246,7 @@ function calcPersonInfo(rows) { ...@@ -246,7 +246,7 @@ function calcPersonInfo(rows) {
246 if (temp) { 246 if (temp) {
247 temp.num++ 247 temp.num++
248 } else { 248 } else {
249 levelArr.push({ level: d.levelNew, num: 1 }) 249 levelArr.push({level: d.levelNew, num: 1})
250 } 250 }
251 }) 251 })
252 tablePersonInfo.value = { 252 tablePersonInfo.value = {
...@@ -288,7 +288,7 @@ function loadMore() { ...@@ -288,7 +288,7 @@ function loadMore() {
288 288
289 function getAuditResultText(result, statusStr) { 289 function getAuditResultText(result, statusStr) {
290 if (statusStr) return statusStr 290 if (statusStr) return statusStr
291 const map = { 0: '审核拒绝', 1: '审核通过' } 291 const map = {0: '审核拒绝', 1: '审核通过'}
292 return map[result] || '审核中' 292 return map[result] || '审核中'
293 } 293 }
294 294
...@@ -314,7 +314,7 @@ function goBack() { ...@@ -314,7 +314,7 @@ function goBack() {
314 } 314 }
315 </script> 315 </script>
316 316
317 <style scoped lang="scss"> 317 <style lang="scss" scoped>
318 // 颜色变量 - 小程序主色系 318 // 颜色变量 - 小程序主色系
319 $primary-color: #e8341d; 319 $primary-color: #e8341d;
320 $success-color: #52c41a; 320 $success-color: #52c41a;
...@@ -343,7 +343,7 @@ $content-gap: 24rpx; // 统一内容边距 ...@@ -343,7 +343,7 @@ $content-gap: 24rpx; // 统一内容边距
343 position: sticky; 343 position: sticky;
344 top: 0; 344 top: 0;
345 z-index: 100; 345 z-index: 100;
346 346
347 .back-btn { 347 .back-btn {
348 width: 40rpx; 348 width: 40rpx;
349 height: 40rpx; 349 height: 40rpx;
...@@ -351,13 +351,13 @@ $content-gap: 24rpx; // 统一内容边距 ...@@ -351,13 +351,13 @@ $content-gap: 24rpx; // 统一内容边距
351 align-items: center; 351 align-items: center;
352 justify-content: center; 352 justify-content: center;
353 } 353 }
354 354
355 .nav-title { 355 .nav-title {
356 font-size: 32rpx; 356 font-size: 32rpx;
357 font-weight: 500; 357 font-weight: 500;
358 color: $text-primary; 358 color: $text-primary;
359 } 359 }
360 360
361 .placeholder { 361 .placeholder {
362 width: 40rpx; 362 width: 40rpx;
363 } 363 }
...@@ -390,11 +390,11 @@ $content-gap: 24rpx; // 统一内容边距 ...@@ -390,11 +390,11 @@ $content-gap: 24rpx; // 统一内容边距
390 // display: flex; 390 // display: flex;
391 padding: 16rpx; 391 padding: 16rpx;
392 border-bottom: 1rpx dashed #eee; 392 border-bottom: 1rpx dashed #eee;
393 393
394 &:last-child { 394 &:last-child {
395 border-bottom: none; 395 border-bottom: none;
396 } 396 }
397 397
398 .time { 398 .time {
399 width: 80%; 399 width: 80%;
400 font-size: 22rpx; 400 font-size: 22rpx;
...@@ -402,21 +402,21 @@ $content-gap: 24rpx; // 统一内容边距 ...@@ -402,21 +402,21 @@ $content-gap: 24rpx; // 统一内容边距
402 flex-shrink: 0; 402 flex-shrink: 0;
403 padding-top: 4rpx; 403 padding-top: 4rpx;
404 } 404 }
405 405
406 .content { 406 .content {
407 flex: 1; 407 flex: 1;
408 408
409 .status { 409 .status {
410 font-size: 28rpx; 410 font-size: 28rpx;
411 font-weight: 600; 411 font-weight: 600;
412 margin-bottom: 6rpx; 412 margin-bottom: 6rpx;
413 } 413 }
414 414
415 .deptName { 415 .deptName {
416 font-size: 26rpx; 416 font-size: 26rpx;
417 color: #666; 417 color: #666;
418 } 418 }
419 419
420 view { 420 view {
421 font-size: 24rpx; 421 font-size: 24rpx;
422 color: #999; 422 color: #999;
...@@ -439,13 +439,13 @@ $content-gap: 24rpx; // 统一内容边距 ...@@ -439,13 +439,13 @@ $content-gap: 24rpx; // 统一内容边距
439 align-items: center; 439 align-items: center;
440 padding: 24rpx $content-gap 20rpx; 440 padding: 24rpx $content-gap 20rpx;
441 border-bottom: 1rpx solid $border-color; 441 border-bottom: 1rpx solid $border-color;
442 442
443 .header-left { 443 .header-left {
444 font-size: 30rpx; 444 font-size: 30rpx;
445 font-weight: 600; 445 font-weight: 600;
446 color: $text-primary; 446 color: $text-primary;
447 } 447 }
448 448
449 .header-right { 449 .header-right {
450 font-size: 26rpx; 450 font-size: 26rpx;
451 color: $primary-color; 451 color: $primary-color;
...@@ -464,18 +464,18 @@ $content-gap: 24rpx; // 统一内容边距 ...@@ -464,18 +464,18 @@ $content-gap: 24rpx; // 统一内容边距
464 align-items: center; 464 align-items: center;
465 padding: 18rpx 0; 465 padding: 18rpx 0;
466 border-bottom: 1rpx solid #f5f5f5; 466 border-bottom: 1rpx solid #f5f5f5;
467 467
468 &:last-child { 468 &:last-child {
469 border-bottom: none; 469 border-bottom: none;
470 } 470 }
471 471
472 .label { 472 .label {
473 font-size: 28rpx; 473 font-size: 28rpx;
474 color: $text-placeholder; 474 color: $text-placeholder;
475 flex-shrink: 0; 475 flex-shrink: 0;
476 width: 170rpx; 476 width: 170rpx;
477 } 477 }
478 478
479 .value { 479 .value {
480 font-size: 28rpx; 480 font-size: 28rpx;
481 color: $text-primary; 481 color: $text-primary;
...@@ -494,7 +494,7 @@ $content-gap: 24rpx; // 统一内容边距 ...@@ -494,7 +494,7 @@ $content-gap: 24rpx; // 统一内容边距
494 padding: 20rpx $content-gap; 494 padding: 20rpx $content-gap;
495 // background: #fff5f5; 495 // background: #fff5f5;
496 border-bottom: 1rpx solid $border-color; 496 border-bottom: 1rpx solid $border-color;
497 497
498 .level-tag { 498 .level-tag {
499 font-size: 24rpx; 499 font-size: 24rpx;
500 color: $primary-color; 500 color: $primary-color;
...@@ -523,40 +523,40 @@ $content-gap: 24rpx; // 统一内容边距 ...@@ -523,40 +523,40 @@ $content-gap: 24rpx; // 统一内容边距
523 margin-top: 16rpx; 523 margin-top: 16rpx;
524 border: 1rpx solid $border-color; 524 border: 1rpx solid $border-color;
525 // border-left: 4rpx solid $primary-color; 525 // border-left: 4rpx solid $primary-color;
526 526
527 .student-top { 527 .student-top {
528 display: flex; 528 display: flex;
529 justify-content: space-between; 529 justify-content: space-between;
530 align-items: center; 530 align-items: center;
531 margin-bottom: 20rpx; 531 margin-bottom: 20rpx;
532 532
533 .student-name { 533 .student-name {
534 .name { 534 .name {
535 font-size: 32rpx; 535 font-size: 32rpx;
536 font-weight: 600; 536 font-weight: 600;
537 color: $text-primary; 537 color: $text-primary;
538 } 538 }
539 539
540 .unit { 540 .unit {
541 font-size: 24rpx; 541 font-size: 24rpx;
542 color: $text-placeholder; 542 color: $text-placeholder;
543 margin-left: 16rpx; 543 margin-left: 16rpx;
544 } 544 }
545 } 545 }
546 546
547 .pass-tag { 547 .pass-tag {
548 font-size: 24rpx; 548 font-size: 24rpx;
549 padding: 6rpx 16rpx; 549 padding: 6rpx 16rpx;
550 border-radius: 20rpx; 550 border-radius: 20rpx;
551 flex-shrink: 0; 551 flex-shrink: 0;
552 font-weight: 500; 552 font-weight: 500;
553 553
554 &.pass { 554 &.pass {
555 background: rgba($success-color, 0.1); 555 background: rgba($success-color, 0.1);
556 color: $success-color; 556 color: $success-color;
557 border: 1rpx solid rgba($success-color, 0.2); 557 border: 1rpx solid rgba($success-color, 0.2);
558 } 558 }
559 559
560 &.fail { 560 &.fail {
561 background: rgba($danger-color, 0.1); 561 background: rgba($danger-color, 0.1);
562 color: $danger-color; 562 color: $danger-color;
...@@ -564,18 +564,18 @@ $content-gap: 24rpx; // 统一内容边距 ...@@ -564,18 +564,18 @@ $content-gap: 24rpx; // 统一内容边距
564 } 564 }
565 } 565 }
566 } 566 }
567 567
568 // 考生信息去字段名,4列等宽布局 568 // 考生信息去字段名,4列等宽布局
569 .student-info { 569 .student-info {
570 display: flex; 570 display: flex;
571 justify-content: space-between; 571 justify-content: space-between;
572 align-items: center; 572 align-items: center;
573 gap: 12rpx; 573 gap: 12rpx;
574 574
575 .info-col { 575 .info-col {
576 flex: 1; 576 flex: 1;
577 text-align: center; 577 text-align: center;
578 578
579 .info-text { 579 .info-text {
580 font-size: 28rpx; 580 font-size: 28rpx;
581 color: $text-primary; 581 color: $text-primary;
...@@ -608,4 +608,4 @@ $content-gap: 24rpx; // 统一内容边距 ...@@ -608,4 +608,4 @@ $content-gap: 24rpx; // 统一内容边距
608 .text-green { 608 .text-green {
609 color: $success-color !important; 609 color: $success-color !important;
610 } 610 }
611 </style>
...\ No newline at end of file ...\ No newline at end of file
611 </style>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!