From 5b8c7b0e7b5addb14e10c6c5074cfc3921076419 Mon Sep 17 00:00:00 2001 From: yangbin <1796443586@qq.com> Date: Wed, 26 Aug 2026 10:44:36 +0800 Subject: [PATCH] =?UTF-8?q?=20=20=E4=BA=BA=E6=89=8D=E5=9F=B9=E5=85=BB?= =?UTF-8?q?=E6=96=B9=E6=A1=88=E6=96=B0=E5=A2=9E=E8=A1=A8=E5=8D=95=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../teachBusiness/trainingPlan/index.vue | 135 ++++++++++++++---- 1 file changed, 107 insertions(+), 28 deletions(-) diff --git a/frontend/src/views/teachBusiness/trainingPlan/index.vue b/frontend/src/views/teachBusiness/trainingPlan/index.vue index 21811aa2b..41d759ad9 100644 --- a/frontend/src/views/teachBusiness/trainingPlan/index.vue +++ b/frontend/src/views/teachBusiness/trainingPlan/index.vue @@ -146,24 +146,27 @@ :close-on-click-modal="false"> - - - - - - - - - - - + + + @@ -207,7 +210,20 @@ - + + + @@ -231,8 +247,21 @@ - - + + + + @@ -294,7 +323,7 @@ {{ fmtVal(detail.data.zybb) }} {{ fmtYesNo(detail.data.zgzy) }} {{ fmtVal(detail.data.zdyfl) }} - {{ fmtVal(detail.data.jxgljgbh) }} + {{ fmtVal(detail.data.jxgljgbh) }} {{ fmtVal(detail.data.gfmc) }} {{ fmtVal(detail.data.zygf) }} {{ fmtVal(detail.data.jc) }} @@ -326,6 +355,7 @@ import { listTraining } from '@/api/teachBusiness/training' import { getDicts } from '@/api/system/dict/data' +import { optionselect } from '@/api/system/dict/type' const TRAINING_TYPE_DICT_CODE = 'train_type' const TRAINING_LEVEL_DICT_CODE = 'train_level' @@ -344,6 +374,9 @@ export default { }, trainingTypeOptions: [], trainingLevelOptions: [], + majorDirectionOptions: [], + studentCategoryOptions: [], + teachingOrganizationOptions: [], // 列表 tableData: [], total: 0, @@ -367,9 +400,7 @@ export default { data: {} }, rules: { - zydh: [{ required: true, message: '请输入专业代号', trigger: 'blur' }], zymc: [{ required: true, message: '请输入专业名称', trigger: 'blur' }], - zydm: [{ required: true, message: '请输入专业代码', trigger: 'blur' }], pxcc: [{ required: true, message: '请选择培训层次', trigger: 'change' }], pxlx: [{ required: true, message: '请选择培训类型', trigger: 'change' }] } @@ -381,19 +412,66 @@ export default { }, methods: { /** - * 从系统字典加载培训类型和培训层次,提交标签以匹配现有业务数据。 + * 从系统字典加载表单下拉选项;文本业务字段提交标签,机构字段提交编号。 */ - loadTrainingDictionaries() { - return Promise.all([ - getDicts(TRAINING_TYPE_DICT_CODE), - getDicts(TRAINING_LEVEL_DICT_CODE) - ]).then(([typeResponse, levelResponse]) => { - this.trainingTypeOptions = typeResponse.data || [] - this.trainingLevelOptions = levelResponse.data || [] - }).catch(() => { - this.trainingTypeOptions = [] - this.trainingLevelOptions = [] + async loadTrainingDictionaries() { + const emptyResponse = { data: [] } + const [typeResponse, levelResponse, dictTypeResponse] = await Promise.all([ + getDicts(TRAINING_TYPE_DICT_CODE).catch(() => emptyResponse), + getDicts(TRAINING_LEVEL_DICT_CODE).catch(() => emptyResponse), + optionselect().catch(() => emptyResponse) + ]) + this.trainingTypeOptions = typeResponse.data || [] + this.trainingLevelOptions = levelResponse.data || [] + + const dictTypes = dictTypeResponse.data || [] + const [directionOptions, categoryOptions, organizationOptions] = await Promise.all([ + this.loadNamedDictionary(dictTypes, '专业方向'), + this.loadNamedDictionary(dictTypes, '学员类别'), + this.loadNamedDictionary(dictTypes, '教学管理机构') + ]) + this.majorDirectionOptions = directionOptions + this.studentCategoryOptions = categoryOptions + this.teachingOrganizationOptions = organizationOptions + this.mergeExistingSelectOptions() + }, + async loadNamedDictionary(dictTypes, dictName) { + const dictType = dictTypes.find(item => item.dictName === dictName) || + dictTypes.find(item => String(item.dictName || '').includes(dictName)) + if (!dictType || !dictType.dictType) { + return [] + } + try { + const response = await getDicts(dictType.dictType) + return response.data || [] + } catch (error) { + return [] + } + }, + mergeExistingSelectOptions() { + this.majorDirectionOptions = this.mergeTextOptions(this.majorDirectionOptions, 'zyfx', true) + this.studentCategoryOptions = this.mergeTextOptions(this.studentCategoryOptions, 'xylb', true) + this.teachingOrganizationOptions = this.mergeTextOptions( + this.teachingOrganizationOptions, + 'jxgljgbh', + false + ) + }, + mergeTextOptions(dictionaryOptions, fieldName, usesLabel) { + const options = dictionaryOptions.slice() + const existingValues = new Set(options.map(item => String(usesLabel ? item.dictLabel : item.dictValue))) + this.tableData.forEach(row => { + const value = row[fieldName] + if (value === '' || value === null || value === undefined || existingValues.has(String(value))) { + return + } + options.push({ + dictLabel: String(value), + dictValue: String(value) + }) + existingValues.add(String(value)) }) + return options }, /* ---------- 列表加载 ---------- */ @@ -413,6 +491,7 @@ export default { const data = response.data || {} this.tableData = data.records || [] this.total = data.total || 0 + this.mergeExistingSelectOptions() }).catch(() => { this.tableData = [] this.total = 0