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/evalMode/index.vue |   64 ++++++++++++++++++++++++++------
 1 files changed, 52 insertions(+), 12 deletions(-)

diff --git a/apps/jnpf-web-apps-main/src/views/x/tms/evalMode/index.vue b/apps/jnpf-web-apps-main/src/views/x/tms/evalMode/index.vue
index be2a3fc..2d53595 100644
--- a/apps/jnpf-web-apps-main/src/views/x/tms/evalMode/index.vue
+++ b/apps/jnpf-web-apps-main/src/views/x/tms/evalMode/index.vue
@@ -3,19 +3,32 @@
 
 import type { EvalModeItem } from './types';
 
+import { onMounted, ref } from 'vue';
+
 import { useMessage } from '@jnpf/hooks';
 import { useModal } from '@jnpf/ui/modal';
 import { BasicVxeTable, TableAction, useVxeTable } from '@jnpf/ui/vxeTable';
 
 import { deleteEvalMode, getEvalModeList, setEvalModeEnabled } from '#/api/x/tms/evalMode';
+import { useBaseStore } from '#/store';
+import {
+  TMS_DIC,
+  TMS_DIC_FIELD_NAMES,
+  labelOfDic,
+  loadTmsDic,
+  type TmsDicOpt,
+} from '#/views/x/tms/shared/dic';
 
 import Form from './Form.vue';
-import { ENABLE_OPTIONS, labelOfEnabled, labelOfYesNo } from './constants';
 
 defineOptions({ name: 'TmsEvalMode' });
 
 const { createMessage } = useMessage();
+const baseStore = useBaseStore();
 const [registerForm, { openModal: openFormModal }] = useModal();
+
+const yesNoOpts = ref<TmsDicOpt[]>([]);
+const enableOpts = ref<TmsDicOpt[]>([]);
 
 const columns: BasicColumn[] = [
   { title: '鏂瑰紡缂栫爜', dataIndex: 'modeCode', width: 120 },
@@ -25,21 +38,21 @@
     dataIndex: 'needPaper',
     width: 100,
     align: 'center',
-    customRender: ({ record }) => labelOfYesNo((record as EvalModeItem).needPaper),
+    customRender: ({ record }) => labelOfDic(yesNoOpts.value, (record as EvalModeItem).needPaper),
   },
   {
     title: '闇�瑕佹彁闂璁�',
     dataIndex: 'needQuiz',
     width: 120,
     align: 'center',
-    customRender: ({ record }) => labelOfYesNo((record as EvalModeItem).needQuiz),
+    customRender: ({ record }) => labelOfDic(yesNoOpts.value, (record as EvalModeItem).needQuiz),
   },
   {
     title: '闇�瑕佸疄鎿嶈瘎鍒�',
     dataIndex: 'needPractice',
     width: 120,
     align: 'center',
-    customRender: ({ record }) => labelOfYesNo((record as EvalModeItem).needPractice),
+    customRender: ({ record }) => labelOfDic(yesNoOpts.value, (record as EvalModeItem).needPractice),
   },
   {
     title: '鐘舵��',
@@ -51,10 +64,10 @@
   { title: '澶囨敞', dataIndex: 'remark', minWidth: 200 },
 ];
 
-const [registerTable, { reload }] = useVxeTable({
+const [registerTable, { reload, getForm }] = useVxeTable({
   api: fetchList,
   columns,
-  immediate: true,
+  immediate: false,
   rowKey: 'id',
   useSearchForm: true,
   formConfig: {
@@ -71,7 +84,12 @@
         field: 'enabled',
         label: '鐘舵��',
         component: 'Select',
-        componentProps: { allowClear: true, placeholder: '璇烽�夋嫨', options: ENABLE_OPTIONS },
+        componentProps: {
+          allowClear: true,
+          placeholder: '璇烽�夋嫨',
+          options: enableOpts.value,
+          fieldNames: TMS_DIC_FIELD_NAMES,
+        },
       },
     ],
   },
@@ -81,6 +99,21 @@
     dataIndex: 'action',
     fixed: 'right',
   },
+});
+
+onMounted(async () => {
+  yesNoOpts.value = await loadTmsDic(baseStore, TMS_DIC.yesNo);
+  enableOpts.value = await loadTmsDic(baseStore, TMS_DIC.enableStatus);
+  getForm()?.updateSchema?.({
+    field: 'enabled',
+    componentProps: {
+      allowClear: true,
+      placeholder: '璇烽�夋嫨',
+      options: enableOpts.value,
+      fieldNames: TMS_DIC_FIELD_NAMES,
+    },
+  });
+  reload();
 });
 
 async function fetchList(params: Record<string, any>) {
@@ -108,6 +141,10 @@
 }
 
 async function handleDelete(record: EvalModeItem) {
+  if (record.enabled !== '0') {
+    createMessage.warning('璇峰厛鍋滅敤鍚庡啀鍒犻櫎');
+    return;
+  }
   try {
     await deleteEvalMode(record.id);
     createMessage.success('鍒犻櫎鎴愬姛');
@@ -119,7 +156,7 @@
 
 function getTableActions(record: EvalModeItem): ActionItem[] {
   const enableLabel = record.enabled === '1' ? '鍋滅敤' : '鍚敤';
-  return [
+  const actions: ActionItem[] = [
     { label: '缂栬緫', onClick: handleEdit.bind(null, record) },
     {
       label: enableLabel,
@@ -128,15 +165,18 @@
         onOk: handleToggleEnabled.bind(null, record),
       },
     },
-    {
+  ];
+  if (record.enabled === '0') {
+    actions.push({
       label: '鍒犻櫎',
       color: 'error',
       modelConfirm: {
         content: `纭畾鍒犻櫎鑰冩牳鏂瑰紡銆�${record.modeName}銆嶅悧锛焋,
         onOk: handleDelete.bind(null, record),
       },
-    },
-  ];
+    });
+  }
+  return actions;
 }
 </script>
 
@@ -150,7 +190,7 @@
           </template>
           <template #enabled="{ record }">
             <a-tag :color="record.enabled === '1' ? 'success' : 'default'">
-              {{ labelOfEnabled(record.enabled) }}
+              {{ labelOfDic(enableOpts, record.enabled) }}
             </a-tag>
           </template>
           <template #action="{ record }">

--
Gitblit v1.8.0