diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormApplicationController.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormApplicationController.java index 2b90f3e7..47eac861 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormApplicationController.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormApplicationController.java @@ -23,6 +23,8 @@ import org.dromara.xg.domain.vo.StudentOptionVo; import org.dromara.xg.domain.bo.StudentOptionBo; import org.dromara.xg.service.IXgDormApplicationService; import org.dromara.common.mybatis.core.page.TableDataInfo; +import java.util.Map; +import java.util.HashMap; /** * 学生宿舍申请单表(调宿+退宿) @@ -113,4 +115,26 @@ public class XgDormApplicationController extends BaseController { return toAjax(xgDormApplicationService.deleteWithValidByIds(List.of(ids), true)); } + /** + * 获取二级学院审批人列表 + * + * @param collegeId 学院ID + */ + @SaCheckPermission("dormApplication:dormApplication:list") + @GetMapping("/getCollegeApprovers") + public R>> getCollegeApprovers(@RequestParam Long collegeId) { + List> approvers = xgDormApplicationService.getCollegeApprovers(collegeId); + return R.ok(approvers); + } + + /** + * 获取学工处审批人列表 + */ + @SaCheckPermission("dormApplication:dormApplication:list") + @GetMapping("/getStudentAffairsApprovers") + public R>> getStudentAffairsApprovers() { + List> approvers = xgDormApplicationService.getStudentAffairsApprovers(); + return R.ok(approvers); + } + } diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormBedStudentController.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormBedStudentController.java index d2b75526..2ebc45b4 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormBedStudentController.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormBedStudentController.java @@ -343,4 +343,15 @@ public class XgDormBedStudentController extends BaseController { return R.ok(currentDormInfo); } + /** + * 根据床位ID获取该床位的学生信息 + * 包含学生基本信息、学院、专业、班级等信息 + */ + @SaCheckPermission("dormBedStudent:dormBedStudent:list") + @GetMapping("/bedStudentInfo/{bedId}") + public R getBedStudentInfo(@NotNull(message = "床位ID不能为空") @PathVariable Long bedId) { + Object bedStudentInfo = xgDormBedStudentService.getBedStudentInfo(bedId); + return R.ok(bedStudentInfo); + } + } diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormBedStudentMapper.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormBedStudentMapper.java index 26a1569e..cc7d3b58 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormBedStudentMapper.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormBedStudentMapper.java @@ -236,4 +236,47 @@ public interface XgDormBedStudentMapper extends BaseMapperPlus selectCurrentDormInfo(@Param("studentId") Long studentId); + /** + * 根据床位ID获取该床位的学生信息 + * 包含学生基本信息、学院、专业、班级等信息 + * + * @param bedId 床位ID + * @return 床位学生信息 + */ + @Select(""" + SELECT + bs.student_id, + bs.bed_id, + + -- 学生基本信息 + s.student_no, + s.name as student_name, + s.gender, + s.phone, + + -- 班级信息 + c.class_name, + + -- 学院信息 + d.dept_name as college_name, + + -- 专业信息 + major.dept_name as major_name + + FROM xg_dorm_bed_student bs + INNER JOIN xg_student_msg s ON bs.student_id = s.id AND s.deleted = 0 + LEFT JOIN xg_class_msg c ON s.class_id = c.id AND c.deleted = 0 + LEFT JOIN sys_dept d ON c.college_id = d.dept_id AND d.del_flag = '0' + LEFT JOIN sys_dept major ON c.major_id = major.dept_id AND major.del_flag = '0' + + WHERE bs.bed_id = #{bedId} + AND bs.student_id IS NOT NULL + AND bs.status = '0' + AND bs.deleted = '0' + AND s.student_status = '1' + + LIMIT 1 + """) + Map selectBedStudentInfo(@Param("bedId") Long bedId); + } diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormApplicationService.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormApplicationService.java index 935c1b6c..03559e59 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormApplicationService.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormApplicationService.java @@ -9,6 +9,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; import java.util.Collection; import java.util.List; +import java.util.Map; /** * 学生宿舍申请单表(调宿+退宿)Service接口 @@ -77,4 +78,19 @@ public interface IXgDormApplicationService { */ TableDataInfo getStudentOptions(StudentOptionBo bo, PageQuery pageQuery); + /** + * 获取二级学院审批人列表 + * + * @param collegeId 学院ID + * @return 审批人列表 + */ + List> getCollegeApprovers(Long collegeId); + + /** + * 获取学工处审批人列表 + * + * @return 审批人列表 + */ + List> getStudentAffairsApprovers(); + } diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormBedStudentService.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormBedStudentService.java index cd5d867e..645faf1d 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormBedStudentService.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormBedStudentService.java @@ -251,4 +251,13 @@ public interface IXgDormBedStudentService { * @return 当前宿舍信息 */ Object getCurrentDormInfo(Long studentId); + + /** + * 根据床位ID获取该床位的学生信息 + * 包含学生基本信息、学院、专业、班级等信息 + * + * @param bedId 床位ID + * @return 床位学生信息 + */ + Object getBedStudentInfo(Long bedId); } diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormApplicationServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormApplicationServiceImpl.java index 61bf0524..ea73d16d 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormApplicationServiceImpl.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormApplicationServiceImpl.java @@ -30,7 +30,12 @@ import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.system.mapper.SysDeptMapper; +import org.dromara.system.mapper.SysUserMapper; +import org.dromara.system.mapper.SysUserRoleMapper; +import org.dromara.system.mapper.SysRoleMapper; import org.dromara.system.domain.SysDept; +import org.dromara.system.domain.SysUser; +import org.dromara.system.domain.SysRole; import org.dromara.xg.mapper.XgStudentManagerMapper; import org.dromara.xg.mapper.XgStudentManagerSourceMapper; import org.dromara.xg.mapper.XgClassMsgMapper; @@ -64,6 +69,9 @@ public class XgDormApplicationServiceImpl implements IXgDormApplicationService { private final XgDormBedStudentMapper xgDormBedStudentMapper; // 添加权限过滤需要的依赖 private final SysDeptMapper sysDeptMapper; + private final SysUserMapper sysUserMapper; + private final SysUserRoleMapper sysUserRoleMapper; + private final SysRoleMapper sysRoleMapper; private final XgStudentManagerMapper xgStudentManagerMapper; private final XgStudentManagerSourceMapper xgStudentManagerSourceMapper; private final XgClassMsgMapper xgClassMsgMapper; @@ -493,4 +501,112 @@ public class XgDormApplicationServiceImpl implements IXgDormApplicationService { return TableDataInfo.build(result); } + /** + * 获取二级学院审批人列表 + * + * @param collegeId 学院ID + * @return 审批人列表 + */ + @Override + public List> getCollegeApprovers(Long collegeId) { + try { + // 查询角色key为'ejxyssgly'的角色ID + LambdaQueryWrapper roleWrapper = new LambdaQueryWrapper<>(); + roleWrapper.eq(SysRole::getRoleKey, "ejxyssgly"); + SysRole role = sysRoleMapper.selectOne(roleWrapper); + + if (role == null) { + log.warn("未找到角色key为'ejxyssgly'的角色"); + return new ArrayList<>(); + } + + // 通过角色ID查询用户角色关系表 + LambdaQueryWrapper userRoleWrapper = new LambdaQueryWrapper<>(); + userRoleWrapper.eq(org.dromara.system.domain.SysUserRole::getRoleId, role.getRoleId()); + List userRoles = sysUserRoleMapper.selectList(userRoleWrapper); + + if (userRoles.isEmpty()) { + return new ArrayList<>(); + } + + // 获取用户ID列表 + List userIds = userRoles.stream() + .map(org.dromara.system.domain.SysUserRole::getUserId) + .collect(Collectors.toList()); + + // 查询用户信息,过滤指定学院的用户 + LambdaQueryWrapper userWrapper = new LambdaQueryWrapper<>(); + userWrapper.in(SysUser::getUserId, userIds) + .eq(SysUser::getDeptId, collegeId) + .eq(SysUser::getStatus, "0"); // 只查询启用状态的用户 + List users = sysUserMapper.selectList(userWrapper); + + // 转换为Map格式返回 + return users.stream().map(user -> { + Map approver = MapUtil.newHashMap(); + approver.put("userId", user.getUserId()); + approver.put("userName", user.getUserName()); + approver.put("nickName", user.getNickName()); + approver.put("deptId", user.getDeptId()); + return approver; + }).collect(Collectors.toList()); + } catch (Exception e) { + log.error("获取二级学院审批人列表失败", e); + return new ArrayList<>(); + } + } + + /** + * 获取学工处审批人列表 + * + * @return 审批人列表 + */ + @Override + public List> getStudentAffairsApprovers() { + try { + // 查询角色key为'xscxsxxgly'的角色ID + LambdaQueryWrapper roleWrapper = new LambdaQueryWrapper<>(); + roleWrapper.eq(SysRole::getRoleKey, "xscxsxxgly"); + SysRole role = sysRoleMapper.selectOne(roleWrapper); + + if (role == null) { + log.warn("未找到角色key为'xscxsxxgly'的角色"); + return new ArrayList<>(); + } + + // 通过角色ID查询用户角色关系表 + LambdaQueryWrapper userRoleWrapper = new LambdaQueryWrapper<>(); + userRoleWrapper.eq(org.dromara.system.domain.SysUserRole::getRoleId, role.getRoleId()); + List userRoles = sysUserRoleMapper.selectList(userRoleWrapper); + + if (userRoles.isEmpty()) { + return new ArrayList<>(); + } + + // 获取用户ID列表 + List userIds = userRoles.stream() + .map(org.dromara.system.domain.SysUserRole::getUserId) + .collect(Collectors.toList()); + + // 查询用户信息 + LambdaQueryWrapper userWrapper = new LambdaQueryWrapper<>(); + userWrapper.in(SysUser::getUserId, userIds) + .eq(SysUser::getStatus, "0"); // 只查询启用状态的用户 + List users = sysUserMapper.selectList(userWrapper); + + // 转换为Map格式返回 + return users.stream().map(user -> { + Map approver = MapUtil.newHashMap(); + approver.put("userId", user.getUserId()); + approver.put("userName", user.getUserName()); + approver.put("nickName", user.getNickName()); + approver.put("deptId", user.getDeptId()); + return approver; + }).collect(Collectors.toList()); + } catch (Exception e) { + log.error("获取学工处审批人列表失败", e); + return new ArrayList<>(); + } + } + } diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormBedStudentServiceImpl.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormBedStudentServiceImpl.java index 909d2cd6..397d2ef9 100644 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormBedStudentServiceImpl.java +++ b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormBedStudentServiceImpl.java @@ -2568,4 +2568,63 @@ public class XgDormBedStudentServiceImpl implements IXgDormBedStudentService { } } + /** + * 根据床位ID获取该床位的学生信息 + * 包含学生基本信息、学院、专业、班级等信息 + * + * @param bedId 床位ID + * @return 床位学生信息 + */ + @Override + public Object getBedStudentInfo(Long bedId) { + try { + log.info("开始获取床位学生信息,床位ID: {}", bedId); + + if (bedId == null) { + log.warn("床位ID为空,无法获取学生信息"); + return null; + } + + // 使用SQL关联查询,获取床位学生信息 + Map studentInfo = baseMapper.selectBedStudentInfo(bedId); + + if (studentInfo == null || studentInfo.isEmpty()) { + log.warn("床位ID: {} 未找到学生信息", bedId); + return null; + } + + // 组装返回结果 + Map result = new LinkedHashMap<>(); + + // 学生基本信息 + result.put("studentId", studentInfo.get("student_id")); + result.put("studentNo", studentInfo.get("student_no")); + result.put("studentName", studentInfo.get("student_name")); + result.put("gender", studentInfo.get("gender")); + result.put("phone", studentInfo.get("phone")); + + // 学院、专业、班级信息 + result.put("collegeName", studentInfo.get("college_name")); + result.put("majorName", studentInfo.get("major_name")); + result.put("className", studentInfo.get("class_name")); + + // 床位信息 + result.put("bedId", studentInfo.get("bed_id")); + + log.info("获取床位学生信息成功,床位ID: {}, 学生信息: {}({})-{}-{}-{}", + bedId, + result.get("studentName"), + result.get("studentNo"), + result.get("collegeName"), + result.get("majorName"), + result.get("className")); + + return result; + + } catch (Exception e) { + log.error("获取床位学生信息失败,床位ID: {}", bedId, e); + return null; + } + } + } diff --git a/web/src/views/xg/xsjcxx/xssssq/dialog.vue b/web/src/views/xg/xsjcxx/xssssq/dialog.vue index 021ce8e3..d9e83a0b 100644 --- a/web/src/views/xg/xsjcxx/xssssq/dialog.vue +++ b/web/src/views/xg/xsjcxx/xssssq/dialog.vue @@ -84,75 +84,25 @@ - - -
-
学生基础信息
- - -
- 学生姓名: - {{ form.studentName || '-' }} + + + +
+
+
+ 学生信息:{{ form.studentName || '-' }} / {{ form.studentNo || '-' }} / {{ form.collegeName || '-' }} / + {{ form.majorName || '-' }} / {{ form.className || '-' }} / {{ form.studentPhone || '-' }} +
- - -
- 学号: - {{ form.studentNo || '-' }} +
+
+ 床位信息:{{ form.currentCampusName || '-' }} / {{ form.currentBuildingName || '-' }} / {{ form.currentRoomNo || '-' }} / + {{ form.currentBedNo || '-' }} +
- - -
- 班级名称: - {{ form.className || '-' }} -
-
- -
- 联系电话: - {{ form.studentPhone || '-' }} -
-
- -
- 专业名称: - {{ form.majorName || '-' }} -
-
- -
- 学院名称: - {{ form.collegeName || '-' }} -
-
- - - -
- 校区: - {{ form.currentCampusName || '-' }} -
-
- -
- 宿舍楼: - {{ form.currentBuildingName || '-' }} -
-
- -
- 房间号: - {{ form.currentRoomNo || '-' }} -
-
- -
- 床位号: - {{ form.currentBedNo || '-' }} -
-
-
-
+
+
+
@@ -256,7 +206,7 @@ - + @@ -272,39 +222,34 @@ > + +
+
+ 学生信息:{{ form.targetBedStudentName || '-' }} / {{ form.targetBedStudentNo || '-' }} / + {{ form.targetBedStudentCollegeName || '-' }} / {{ form.targetBedStudentMajorName || '-' }} / + {{ form.targetBedStudentClassName || '-' }} +
+
- - - - - - - - + + +
- +
- - - - - - - - + + +
- - -
({ targetRoomNo: '', targetBedId: '', targetBedNo: '', + // 目标床位学生信息 + targetBedStudentId: '', + targetBedStudentName: '', + targetBedStudentNo: '', + targetBedStudentCollegeName: '', + targetBedStudentMajorName: '', + targetBedStudentClassName: '', applyTime: '', reasonDetail: '', - emergencyContact: '', - emergencyPhone: '', attachmentOssIds: '', applicationStatus: 'draft', approvalOpinion: '', @@ -924,22 +874,21 @@ const handleStartWorkFlow = async (data: DormApplicationForm) => { let xgcsprIds: number[] = []; try { - // 获取二级学院审批人(role_key为'ejxyssgly'的角色) + // 获取二级学院审批人 const ejxysprResponse = await request({ - url: '/system/user/listByRoleKey', + url: '/dormApplication/dormApplication/getCollegeApprovers', method: 'get', - params: { roleKey: 'ejxyssgly', collegeId: data.collegeId } + params: { collegeId: data.collegeId } }); if (ejxysprResponse && ejxysprResponse.data) { ejxysprIds = ejxysprResponse.data.map((user: any) => user.userId); console.log('获取到二级学院审批人列表:', ejxysprIds); } - // 获取学工处审批人(role_key为'xscxsxxgly'的角色) + // 获取学工处审批人 const xgcsprResponse = await request({ - url: '/system/user/listByRoleKey', - method: 'get', - params: { roleKey: 'xscxsxxgly' } + url: '/dormApplication/dormApplication/getStudentAffairsApprovers', + method: 'get' }); if (xgcsprResponse && xgcsprResponse.data) { xgcsprIds = xgcsprResponse.data.map((user: any) => user.userId); @@ -1087,11 +1036,21 @@ const getDormApplicationInfo = async (id: string | number) => { // 设置状态字段映射 form.status = applicationInfo.applicationStatus; - // 如果有学生ID,则获取学生信息 + // 如果有学生ID,则获取学生信息并添加到选项中 if (applicationInfo.studentId) { await getStudentInfo(applicationInfo.studentId); + // 将当前学生添加到学生选项列表中,确保下拉框能正确显示 + await addCurrentStudentToOptions(applicationInfo.studentId); } + // 如果有目标学生ID,则将目标学生添加到选项中 + if (applicationInfo.targetStudentId) { + await addCurrentTargetStudentToOptions(applicationInfo.targetStudentId); + } + + // 加载目标宿舍级联选项数据(修改时必须调用) + await loadTargetCascadeOptionsForUpdate(); + // 处理附件数据 await handleAttachmentData(); } else { @@ -1349,6 +1308,13 @@ const handleStudentChange = async (value: string | number) => { form.targetRoomNo = ''; form.targetBedId = ''; form.targetBedNo = ''; + // 清空目标床位学生信息 + form.targetBedStudentId = ''; + form.targetBedStudentName = ''; + form.targetBedStudentNo = ''; + form.targetBedStudentCollegeName = ''; + form.targetBedStudentMajorName = ''; + form.targetBedStudentClassName = ''; } }; @@ -1402,6 +1368,42 @@ const handleStudentSelectVisibleChange = (visible: boolean) => { } }; +// 将当前学生添加到学生选项列表中(用于数据回显) +const addCurrentStudentToOptions = async (studentId: string | number) => { + try { + console.log('将当前学生添加到选项列表,学生ID:', studentId); + const response = await getStudentMsg(studentId); + + if (response.code === 200 && response.data) { + const studentInfo = response.data; + + // 检查是否已存在该学生 + const existingStudent = studentOptions.value.find((student) => student.id === studentId); + if (!existingStudent) { + // 将学生信息添加到选项列表 + const studentOption: StudentOptionVO = { + id: studentInfo.id, + name: studentInfo.name || '', + studentNo: studentInfo.studentNo || '', + gender: studentInfo.gender || '', + phone: studentInfo.phone || '', + collegeId: studentInfo.collegeId, + collegeName: studentInfo.collegeName || '', + majorId: studentInfo.majorId, + majorName: studentInfo.majorName || '', + classId: studentInfo.classId, + className: studentInfo.className || '' + }; + + studentOptions.value = [studentOption]; + console.log('当前学生已添加到选项列表:', studentOption); + } + } + } catch (error) { + console.error('添加当前学生到选项列表失败:', error); + } +}; + // ==================== 目标学生选择相关方法 ==================== // 目标学生下拉框远程搜索 @@ -1445,6 +1447,42 @@ const handleTargetStudentSelectVisibleChange = (visible: boolean) => { } }; +// 将当前目标学生添加到目标学生选项列表中(用于数据回显) +const addCurrentTargetStudentToOptions = async (targetStudentId: string | number) => { + try { + console.log('将当前目标学生添加到选项列表,学生ID:', targetStudentId); + const response = await getStudentMsg(targetStudentId); + + if (response.code === 200 && response.data) { + const studentInfo = response.data; + + // 检查是否已存在该学生 + const existingStudent = targetStudentOptions.value.find((student) => student.id === targetStudentId); + if (!existingStudent) { + // 将学生信息添加到目标学生选项列表 + const studentOption: StudentOptionVO = { + id: studentInfo.id, + name: studentInfo.name || '', + studentNo: studentInfo.studentNo || '', + gender: studentInfo.gender || '', + phone: studentInfo.phone || '', + collegeId: studentInfo.collegeId, + collegeName: studentInfo.collegeName || '', + majorId: studentInfo.majorId, + majorName: studentInfo.majorName || '', + classId: studentInfo.classId, + className: studentInfo.className || '' + }; + + targetStudentOptions.value = [studentOption]; + console.log('当前目标学生已添加到选项列表:', studentOption); + } + } + } catch (error) { + console.error('添加当前目标学生到选项列表失败:', error); + } +}; + // 加载初始目标学生数据 const loadInitialTargetStudents = async () => { targetStudentLoading.value = true; @@ -1525,6 +1563,9 @@ const clearTargetDormInfo = () => { form.targetBedId = ''; form.targetBedNo = ''; + // 清空目标床位学生信息 + clearTargetBedStudentInfo(); + // 清空选项 targetBuildingOptions.value = []; targetRoomOptions.value = []; @@ -1687,7 +1728,7 @@ const loadTargetBedOptions = async (roomId: string | number) => { }; // 目标床位选择变化处理 -const handleTargetBedChange = (bedId: string | number) => { +const handleTargetBedChange = async (bedId: string | number) => { if (bedId) { // 设置床位名称 const selectedBed = targetBedOptions.value.find((bed) => bed.id === bedId); @@ -1695,9 +1736,14 @@ const handleTargetBedChange = (bedId: string | number) => { form.targetBedId = bedId; form.targetBedNo = selectedBed.bedNo || selectedBed.bedName; } + + // 获取该床位的学生信息 + await getTargetBedStudentInfo(bedId); } else { form.targetBedId = ''; form.targetBedNo = ''; + // 清空目标床位学生信息 + clearTargetBedStudentInfo(); } }; @@ -1715,6 +1761,11 @@ const loadTargetCascadeOptionsForUpdate = async () => { // 如果有房间ID,加载床位选项 if (form.targetRoomId) { await loadTargetBedOptions(form.targetRoomId); + + // 如果有床位ID,加载床位学生信息 + if (form.targetBedId) { + await getTargetBedStudentInfo(form.targetBedId); + } } } } @@ -1723,6 +1774,46 @@ const loadTargetCascadeOptionsForUpdate = async () => { } }; +// 获取目标床位的学生信息 +const getTargetBedStudentInfo = async (bedId: string | number) => { + try { + console.log('开始获取目标床位学生信息,床位ID:', bedId); + const response = await request({ + url: `/dormBedStudent/dormBedStudent/bedStudentInfo/${bedId}`, + method: 'get' + }); + + if (response.code === 200 && response.data) { + const studentInfo = response.data; + console.log('获取到的目标床位学生信息:', studentInfo); + + // 填充目标床位学生信息 + form.targetBedStudentId = studentInfo.studentId || ''; + form.targetBedStudentName = studentInfo.studentName || ''; + form.targetBedStudentNo = studentInfo.studentNo || ''; + form.targetBedStudentCollegeName = studentInfo.collegeName || ''; + form.targetBedStudentMajorName = studentInfo.majorName || ''; + form.targetBedStudentClassName = studentInfo.className || ''; + } else { + console.warn('该床位暂无学生信息'); + clearTargetBedStudentInfo(); + } + } catch (error) { + console.error('获取目标床位学生信息失败:', error); + clearTargetBedStudentInfo(); + } +}; + +// 清空目标床位学生信息 +const clearTargetBedStudentInfo = () => { + form.targetBedStudentId = ''; + form.targetBedStudentName = ''; + form.targetBedStudentNo = ''; + form.targetBedStudentCollegeName = ''; + form.targetBedStudentMajorName = ''; + form.targetBedStudentClassName = ''; +}; + // 初始化页面数据 const initPageData = () => { // 重置表单数据 @@ -1759,10 +1850,15 @@ const initPageData = () => { targetRoomNo: '', targetBedId: '', targetBedNo: '', + // 目标床位学生信息 + targetBedStudentId: '', + targetBedStudentName: '', + targetBedStudentNo: '', + targetBedStudentCollegeName: '', + targetBedStudentMajorName: '', + targetBedStudentClassName: '', applyTime: routeParams.value.id ? '' : new Date().toISOString().slice(0, 19).replace('T', ' '), reasonDetail: '', - emergencyContact: '', - emergencyPhone: '', attachmentOssIds: '', applicationStatus: 'draft', approvalOpinion: '', @@ -1804,9 +1900,10 @@ const submitCallback = async () => { onMounted(() => { nextTick(async () => { routeParams.value = (proxy as any).$route.query; - initPageData(); - // 加载目标校区选项 + // 先加载目标校区选项,确保级联数据回显时能找到对应的名称 await loadTargetCampusOptions(); + // 然后初始化页面数据(包含数据回显) + initPageData(); }); }); @@ -1917,11 +2014,29 @@ onMounted(() => { padding-top: 8px; } -/* 学生基础信息展示样式(在学生选择区域内) */ -.student-info-display { - margin-top: 16px; - padding-top: 12px; - border-top: 1px solid #e9ecef; +/* 选择学生下方的学生信息显示样式 */ +.selected-student-info { + margin-top: 0px; + margin-bottom: 8px; +} + +.selected-student-info .student-info-inline, +.selected-student-info .dorm-info-inline, +.target-bed-student-inline-info { + margin-bottom: 8px; + padding: 8px 12px; + background: #f8f9fa; + border-radius: 4px; + border: 1px solid #e9ecef; +} + +.selected-student-info .student-info-inline .info-text, +.selected-student-info .dorm-info-inline .info-text, +.target-bed-student-inline-info .student-info-text { + font-size: 12px; + color: #606266; + line-height: 1.4; + word-break: break-word; } .info-subtitle { @@ -1933,30 +2048,6 @@ onMounted(() => { border-bottom: 1px solid #f0f0f0; } -.student-info-display .info-item { - display: flex; - align-items: center; - margin-bottom: 8px; - padding: 4px 0; -} - -.student-info-display .info-label { - color: #606266; - font-weight: 500; - margin-right: 8px; - white-space: nowrap; - font-size: 13px; - min-width: 80px; -} - -.student-info-display .info-value { - color: #303133; - font-weight: 400; - flex: 1; - word-break: break-all; - font-size: 13px; -} - .info-title { font-size: 16px; font-weight: 600; @@ -2279,4 +2370,6 @@ onMounted(() => { min-height: 32px !important; padding: 4px 12px !important; } + +/* 目标床位学生信息内联显示样式 - 已合并到选择学生信息样式中 */ diff --git a/web/src/views/xg/xsjcxx/xssssq/index.vue b/web/src/views/xg/xsjcxx/xssssq/index.vue index 822ab7ec..21262281 100644 --- a/web/src/views/xg/xsjcxx/xssssq/index.vue +++ b/web/src/views/xg/xsjcxx/xssssq/index.vue @@ -328,7 +328,7 @@ const handleAdd = () => { const handleUpdate = async (row?: DormApplicationVO) => { const _id = row?.id || ids.value[0]; proxy.$router.push({ - path: `/xg/xsjcxx/xssssq/dormEdit/index`, + path: `/xg/xsjcxx/xssssq/dialog`, query: { id: _id, type: 'update'