liuyu
21 小时以前 93c133349a5ccd7a328371fa113dce69d5611f21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
import type { useBaseStore } from '#/store';
 
/** 与 docs/tms/字段注释与字典规范.md 对齐 */
export const TMS_DIC = {
  yesNo: 'tmsYesNo',
  enableStatus: 'tmsEnableStatus',
  signRule: 'tmsSignRule',
  questionType: 'tmsQuestionType',
  difficulty: 'tmsDifficulty',
  questionSource: 'tmsQuestionSource',
  openClosedInvalid: 'tmsOpenClosedInvalid',
  paperSortMode: 'tmsPaperSortMode',
  courseCategory: 'tmsCourseCategory',
  trainMode: 'tmsTrainMode',
  evalMode: 'tmsEvalMode',
  archiveStatus: 'tmsArchiveStatus',
  gradeStatus: 'tmsGradeStatus',
  examStatus: 'tmsExamStatus',
  passFlag: 'tmsPassFlag',
  taskPublishStatus: 'tmsTaskPublishStatus',
  taskCategory: 'tmsTaskCategory',
  taskKind: 'tmsTaskKind',
  taskSourceType: 'tmsTaskSourceType',
  personTaskStatus: 'tmsPersonTaskStatus',
} as const;
 
export type TmsDicCode = (typeof TMS_DIC)[keyof typeof TMS_DIC];
 
export type TmsDicOpt = {
  id: string;
  enCode?: string;
  fullName: string;
  [key: string]: any;
};
 
/** Select 存字典 enCode(与库字段编码一致) */
export const TMS_DIC_FIELD_NAMES = { value: 'enCode', label: 'fullName' } as const;
 
/** 字典不可用时的兜底,仅供 loadTmsDic 内部使用 */
const FALLBACK_BY_CODE: Record<string, TmsDicOpt[]> = {
  [TMS_DIC.yesNo]: [
    { id: '1', enCode: '1', fullName: '是' },
    { id: '0', enCode: '0', fullName: '否' },
  ],
  [TMS_DIC.enableStatus]: [
    { id: '1', enCode: '1', fullName: '启用' },
    { id: '0', enCode: '0', fullName: '停用' },
  ],
  [TMS_DIC.signRule]: [
    { id: 'scan', enCode: 'scan', fullName: '仅扫码' },
    { id: 'both', enCode: 'both', fullName: '扫码+在线' },
  ],
  [TMS_DIC.questionType]: [
    { id: 'single', enCode: 'single', fullName: '单选' },
    { id: 'multi', enCode: 'multi', fullName: '多选' },
    { id: 'judge', enCode: 'judge', fullName: '判断' },
    { id: 'blank', enCode: 'blank', fullName: '填空' },
    { id: 'essay', enCode: 'essay', fullName: '问答' },
  ],
  [TMS_DIC.difficulty]: [
    { id: 'easy', enCode: 'easy', fullName: '简单' },
    { id: 'normal', enCode: 'normal', fullName: '一般' },
    { id: 'hard', enCode: 'hard', fullName: '困难' },
  ],
  [TMS_DIC.questionSource]: [
    { id: 'self', enCode: 'self', fullName: '自命题' },
    { id: 'import', enCode: 'import', fullName: '导入' },
    { id: 'external', enCode: 'external', fullName: '外购' },
  ],
  [TMS_DIC.openClosedInvalid]: [
    { id: 'open', enCode: 'open', fullName: '开放' },
    { id: 'closed', enCode: 'closed', fullName: '不开放' },
    { id: 'invalid', enCode: 'invalid', fullName: '废弃' },
  ],
  [TMS_DIC.paperSortMode]: [
    { id: 'paper', enCode: 'paper', fullName: '试卷顺序' },
    { id: 'random', enCode: 'random', fullName: '随机' },
  ],
  [TMS_DIC.courseCategory]: [
    { id: 'gmp', enCode: 'gmp', fullName: 'GMP' },
    { id: 'sop', enCode: 'sop', fullName: 'SOP' },
    { id: 'safety', enCode: 'safety', fullName: '安全' },
    { id: 'skill', enCode: 'skill', fullName: '技能' },
    { id: 'other', enCode: 'other', fullName: '其他' },
  ],
  [TMS_DIC.trainMode]: [
    { id: 'onsite', enCode: 'onsite', fullName: '集中授课' },
    { id: 'practice', enCode: 'practice', fullName: '操作授课' },
    { id: 'online', enCode: 'online', fullName: '在线学习' },
  ],
  [TMS_DIC.evalMode]: [
    { id: 'quiz', enCode: 'quiz', fullName: '提问' },
    { id: 'practice', enCode: 'practice', fullName: '现场操作' },
    { id: 'exam', enCode: 'exam', fullName: '在线考试' },
    { id: 'none', enCode: 'none', fullName: '无需考核' },
  ],
  [TMS_DIC.archiveStatus]: [
    { id: 'pending', enCode: 'pending', fullName: '待归档' },
    { id: 'ready', enCode: 'ready', fullName: '可归档' },
    { id: 'archived', enCode: 'archived', fullName: '已归档' },
    { id: 'invalid', enCode: 'invalid', fullName: '无效' },
  ],
  [TMS_DIC.gradeStatus]: [
    { id: 'auto', enCode: 'auto', fullName: '无需阅卷' },
    { id: 'pending', enCode: 'pending', fullName: '待批改' },
    { id: 'graded', enCode: 'graded', fullName: '已批改' },
  ],
  [TMS_DIC.examStatus]: [
    { id: 'doing', enCode: 'doing', fullName: '考试中' },
    { id: 'submitted', enCode: 'submitted', fullName: '已交卷' },
    { id: 'cancelled', enCode: 'cancelled', fullName: '已取消' },
  ],
  [TMS_DIC.passFlag]: [
    { id: '1', enCode: '1', fullName: '合格' },
    { id: '0', enCode: '0', fullName: '不合格' },
  ],
  [TMS_DIC.taskPublishStatus]: [
    { id: 'draft', enCode: 'draft', fullName: '未发布' },
    { id: 'published', enCode: 'published', fullName: '已发布' },
    { id: 'cancelled', enCode: 'cancelled', fullName: '已取消' },
    { id: 'done', enCode: 'done', fullName: '已完成' },
  ],
  [TMS_DIC.taskCategory]: [
    { id: 'temp', enCode: 'temp', fullName: '临时培训' },
    { id: 'post_plan', enCode: 'post_plan', fullName: '岗位计划' },
    { id: 'annual_plan', enCode: 'annual_plan', fullName: '年度计划' },
    { id: 'file_effect', enCode: 'file_effect', fullName: '文件生效' },
    { id: 'out_train', enCode: 'out_train', fullName: '外派培训' },
    { id: 'retrain', enCode: 'retrain', fullName: '再培训' },
  ],
  [TMS_DIC.taskKind]: [
    { id: 'new', enCode: 'new', fullName: '新增' },
    { id: 'continue', enCode: 'continue', fullName: '继续' },
  ],
  [TMS_DIC.taskSourceType]: [
    { id: 'annual', enCode: 'annual', fullName: '年计划' },
    { id: 'post', enCode: 'post', fullName: '岗计划' },
    { id: 'temp', enCode: 'temp', fullName: '临时' },
    { id: 'file', enCode: 'file', fullName: '文件培训' },
  ],
  [TMS_DIC.personTaskStatus]: [
    { id: 'todo', enCode: 'todo', fullName: '未完成' },
    { id: 'signed', enCode: 'signed', fullName: '已签到' },
    { id: 'done', enCode: 'done', fullName: '已完成' },
    { id: 'expired', enCode: 'expired', fullName: '已过期' },
    { id: 'cancelled', enCode: 'cancelled', fullName: '已取消' },
  ],
};
 
export function labelOfDic(options: TmsDicOpt[], v?: string | null) {
  if (v == null || v === '') return '-';
  const hit = options.find((x) => x.enCode === v || x.id === v);
  return hit?.fullName || v;
}
 
type BaseStore = ReturnType<typeof useBaseStore>;
 
/** 统一字典入口:按编码拉取,失败时用内置兜底 */
export async function loadTmsDic(baseStore: BaseStore, code: string): Promise<TmsDicOpt[]> {
  const fallback = FALLBACK_BY_CODE[code] ?? [];
  try {
    const res = await baseStore.getDictionaryData(code);
    return Array.isArray(res) && res.length ? (res as TmsDicOpt[]) : fallback;
  } catch {
    return fallback;
  }
}