From 8534025c45b4736975730678b9ccf23570a75f95 Mon Sep 17 00:00:00 2001
From: liuyu <yu.liu@cqgbkj.com>
Date: 星期二, 22 九月 2026 09:25:48 +0800
Subject: [PATCH] feat(tms): 新增试卷、培训任务、个人任务页面

---
 apps/jnpf-web-apps-main/src/views/x/tms/record/Detail.vue |   45 ++++++++++++++++++++++++++-------------------
 1 files changed, 26 insertions(+), 19 deletions(-)

diff --git a/apps/jnpf-web-apps-main/src/views/x/tms/record/Detail.vue b/apps/jnpf-web-apps-main/src/views/x/tms/record/Detail.vue
index 6f12ac0..7a96afa 100644
--- a/apps/jnpf-web-apps-main/src/views/x/tms/record/Detail.vue
+++ b/apps/jnpf-web-apps-main/src/views/x/tms/record/Detail.vue
@@ -12,6 +12,17 @@
 } from 'ant-design-vue';
 
 import { getTmsRecordDetail } from '#/api/x/tms/record';
+import { getAuthMediaUrl } from '#/utils/jnpf';
+import { TMS_BTN } from '#/views/x/tms/shared/ui';
+
+import {
+  labelOfCategory,
+  labelOfEvalMode,
+  labelOfTrainMode,
+  loadRecordDics,
+} from './constants';
+
+import '#/views/x/tms/shared/page.css';
 
 defineOptions({ name: 'TmsRecordDetail' });
 
@@ -37,8 +48,9 @@
   },
 ];
 
-onMounted(() => {
-  loadData();
+onMounted(async () => {
+  await loadRecordDics();
+  await loadData();
 });
 
 async function loadData() {
@@ -83,10 +95,12 @@
 
 function openAttachment(url?: string) {
   if (!url || url === '#') {
-    createMessage.info('闄勪欢棰勮鑱旇皟鍚庣敓鏁�');
+    createMessage.info('鏆傛棤鍙瑙堥檮浠�');
     return;
   }
-  window.open(url, '_blank');
+  const apiIndex = url.indexOf('/api/');
+  const path = /^https?:\/\//i.test(url) && apiIndex >= 0 ? url.slice(apiIndex) : url;
+  window.open(getAuthMediaUrl(path, false), '_blank');
 }
 </script>
 
@@ -96,9 +110,11 @@
       <div class="jnpf-content-wrapper-content tms-record-detail-wrap">
         <a-spin :spinning="loading" class="detail-spin">
           <div v-if="detail" class="detail-inner">
-            <div class="detail-header">
-              <div class="text-base font-medium">鍩硅璁板綍</div>
-              <a-button type="primary" @click="goBack">杩斿洖</a-button>
+            <div class="tms-page-header">
+              <div class="tms-page-header__title">鍩硅璁板綍</div>
+              <div class="tms-page-header__actions">
+                <a-button @click="goBack">{{ TMS_BTN.back }}</a-button>
+              </div>
             </div>
 
             <ADescriptions bordered :column="2" size="middle" class="detail-desc">
@@ -113,10 +129,10 @@
               <ADescriptionsItem label="鍩硅寮�濮嬫椂闂�">{{ detail.startTime }}</ADescriptionsItem>
               <ADescriptionsItem label="鍩硅缁撴潫鏃堕棿">{{ detail.endTime || '-' }}</ADescriptionsItem>
               <ADescriptionsItem label="鍩硅鍦扮偣" :span="2">{{ detail.placeName || '-' }}</ADescriptionsItem>
-              <ADescriptionsItem label="鍩硅鍒嗙被">{{ detail.category }}</ADescriptionsItem>
-              <ADescriptionsItem label="鍩硅鏂瑰紡">{{ detail.trainMode || detail.trainType || '-' }}</ADescriptionsItem>
+              <ADescriptionsItem label="鍩硅鍒嗙被">{{ labelOfCategory(detail.category) }}</ADescriptionsItem>
+              <ADescriptionsItem label="鍩硅鏂瑰紡">{{ labelOfTrainMode(detail.trainMode || detail.trainType) }}</ADescriptionsItem>
               <ADescriptionsItem label="鍩硅甯�">{{ detail.trainerName }}</ADescriptionsItem>
-              <ADescriptionsItem label="鍩硅鑰冩牳鏂瑰紡">{{ detail.evalMode }}</ADescriptionsItem>
+              <ADescriptionsItem label="鍩硅鑰冩牳鏂瑰紡">{{ labelOfEvalMode(detail.evalMode) }}</ADescriptionsItem>
               <ADescriptionsItem label="鍩硅瀵硅薄" :span="2">{{ detail.trainees || '-' }}</ADescriptionsItem>
               <ADescriptionsItem label="闄勪欢" :span="2">
                 <div v-if="detail.attachments?.length" class="attach-list">
@@ -189,15 +205,6 @@
 .detail-inner {
   padding: 16px 20px 24px;
   box-sizing: border-box;
-}
-
-.detail-header {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  margin-bottom: 16px;
-  padding-bottom: 12px;
-  border-bottom: 1px solid #f0f0f0;
 }
 
 .detail-desc {

--
Gitblit v1.8.0