diff --git a/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/TrainingProgramController.java b/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/TrainingProgramController.java index 54f79828..f25f906e 100644 --- a/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/TrainingProgramController.java +++ b/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/TrainingProgramController.java @@ -1,5 +1,6 @@ package com.roomroot.web.controller.jwgl; +import com.roomroot.jwgl.entity.JXGLJG; import com.roomroot.jwgl.entity.ZYB; import com.roomroot.jwgl.service.TrainingProgramService; import com.roomroot.jwgl.unit.PageQuery; @@ -10,6 +11,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import jakarta.annotation.Resource; +import java.util.List; /** * 培养方案管理控制器 @@ -137,4 +139,12 @@ public class TrainingProgramController { public void exportData(HttpServletResponse response) throws Exception { trainingProgramService.exportZYBExcel(response); } + + /** + * 教学管理机构下拉选项(来自教学管理机构表,提交编号、展示名称)。 + */ + @GetMapping("/teaching-organizations") + public Result> listTeachingOrganizations() { + return Result.success(trainingProgramService.listTeachingOrganizations()); + } } diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/JXGLJGMapper.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/JXGLJGMapper.java new file mode 100644 index 00000000..9e4325df --- /dev/null +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/JXGLJGMapper.java @@ -0,0 +1,22 @@ +package com.roomroot.jwgl.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.roomroot.jwgl.entity.JXGLJG; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +/** + * 教学管理机构 Mapper + */ +@Mapper +public interface JXGLJGMapper extends BaseMapper { + + /** + * 查询未停用的教学管理机构,供下拉选项使用。 + */ + @Select("SELECT \"编号\" AS bh, \"名称\" AS mc FROM \"教学管理机构\" " + + "WHERE (\"停用\" = 0 OR \"停用\" IS NULL) ORDER BY \"名称\"") + List selectEnabledOptions(); +} diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/TrainingProgramService.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/TrainingProgramService.java index 31dccfa1..e0d90749 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/TrainingProgramService.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/TrainingProgramService.java @@ -1,10 +1,13 @@ package com.roomroot.jwgl.service; +import com.roomroot.jwgl.entity.JXGLJG; import com.roomroot.jwgl.entity.ZYB; import com.roomroot.jwgl.unit.PageQuery; import com.roomroot.jwgl.unit.PageResult; import org.springframework.stereotype.Service; +import java.util.List; + /** * 培养方案管理服务接口 *

@@ -59,4 +62,9 @@ public interface TrainingProgramService { /** 导出培养方案(专业)到 Excel(.xlsx) */ void exportZYBExcel(jakarta.servlet.http.HttpServletResponse response) throws Exception; + + /** + * 查询未停用的教学管理机构下拉选项。 + */ + List listTeachingOrganizations(); } diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/TrainingProgramServiceImpl.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/TrainingProgramServiceImpl.java index 8ed448c1..5bfd70b9 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/TrainingProgramServiceImpl.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/TrainingProgramServiceImpl.java @@ -2,7 +2,9 @@ package com.roomroot.jwgl.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.roomroot.jwgl.entity.JXGLJG; import com.roomroot.jwgl.entity.ZYB; +import com.roomroot.jwgl.mapper.JXGLJGMapper; import com.roomroot.jwgl.mapper.ZYBMapper; import com.roomroot.jwgl.service.TrainingProgramService; import com.roomroot.jwgl.unit.PageQuery; @@ -28,6 +30,9 @@ public class TrainingProgramServiceImpl implements TrainingProgramService { @Resource private ZYBMapper zybMapper; + @Resource + private JXGLJGMapper jxgljgMapper; + @Override @Transactional public void add(ZYB entity) { @@ -114,4 +119,10 @@ public class TrainingProgramServiceImpl implements TrainingProgramService { response.getOutputStream().write(bytes); response.getOutputStream().flush(); } + + @Override + public java.util.List listTeachingOrganizations() { + java.util.List list = jxgljgMapper.selectEnabledOptions(); + return list == null ? java.util.Collections.emptyList() : list; + } } diff --git a/frontend/src/api/teachBusiness/training.js b/frontend/src/api/teachBusiness/training.js index a2f76b07..9ef78173 100644 --- a/frontend/src/api/teachBusiness/training.js +++ b/frontend/src/api/teachBusiness/training.js @@ -94,6 +94,18 @@ export function downloadTrainingProgramTemplate() { }) } +/** + * 教学管理机构下拉选项 + * GET /training/teaching-organizations + * 返回:[{ bh, mc }] + */ +export function listTeachingOrganizations() { + return request({ + url: '/training/teaching-organizations', + method: 'get' + }) +} + /** * 导入培养方案 Excel(multipart,字段名 file) * POST /training/import diff --git a/frontend/src/views/teachBusiness/trainingPlan/index.vue b/frontend/src/views/teachBusiness/trainingPlan/index.vue index 0003f0fd..7ccb0ebf 100644 --- a/frontend/src/views/teachBusiness/trainingPlan/index.vue +++ b/frontend/src/views/teachBusiness/trainingPlan/index.vue @@ -323,7 +323,7 @@ {{ fmtVal(detail.data.zybb) }} {{ fmtYesNo(detail.data.zgzy) }} {{ fmtVal(detail.data.zdyfl) }} - {{ fmtVal(detail.data.jxgljgbh) }} + {{ fmtOrg(detail.data.jxgljgbh) }} {{ fmtVal(detail.data.gfmc) }} {{ fmtVal(detail.data.zygf) }} {{ fmtVal(detail.data.jc) }} @@ -356,7 +356,8 @@ import { listTraining, exportTrainingProgram, downloadTrainingProgramTemplate, - importTrainingProgram + importTrainingProgram, + listTeachingOrganizations } from '@/api/teachBusiness/training' import { getDicts } from '@/api/system/dict/data' import { optionselect } from '@/api/system/dict/type' @@ -416,27 +417,31 @@ export default { }, methods: { /** - * 从系统字典加载表单下拉选项;文本业务字段提交标签,机构字段提交编号。 + * 从系统字典加载表单下拉选项;文本业务字段提交标签。 + * 教学管理机构来自业务表,提交编号、展示名称。 */ async loadTrainingDictionaries() { const emptyResponse = { data: [] } - const [typeResponse, levelResponse, dictTypeResponse] = await Promise.all([ + const [typeResponse, levelResponse, dictTypeResponse, organizationResponse] = await Promise.all([ getDicts(TRAINING_TYPE_DICT_CODE).catch(() => emptyResponse), getDicts(TRAINING_LEVEL_DICT_CODE).catch(() => emptyResponse), - optionselect().catch(() => emptyResponse) + optionselect().catch(() => emptyResponse), + listTeachingOrganizations().catch(() => emptyResponse) ]) this.trainingTypeOptions = typeResponse.data || [] this.trainingLevelOptions = levelResponse.data || [] + this.teachingOrganizationOptions = (organizationResponse.data || []).map(item => ({ + dictLabel: item.mc, + dictValue: item.bh + })) const dictTypes = dictTypeResponse.data || [] - const [directionOptions, categoryOptions, organizationOptions] = await Promise.all([ + const [directionOptions, categoryOptions] = await Promise.all([ this.loadNamedDictionary(dictTypes, '专业方向'), - this.loadNamedDictionary(dictTypes, '学员类别'), - this.loadNamedDictionary(dictTypes, '教学管理机构') + this.loadNamedDictionary(dictTypes, '学员类别') ]) this.majorDirectionOptions = directionOptions this.studentCategoryOptions = categoryOptions - this.teachingOrganizationOptions = organizationOptions this.mergeExistingSelectOptions() }, async loadNamedDictionary(dictTypes, dictName) { @@ -673,6 +678,13 @@ export default { }, fmtVal(val) { return val === '' || val === null || val === undefined ? '-' : val + }, + fmtOrg(bh) { + if (bh === '' || bh === null || bh === undefined) { + return '-' + } + const matched = this.teachingOrganizationOptions.find(item => String(item.dictValue) === String(bh)) + return matched ? matched.dictLabel : bh } } }