# 代码调整记录 - 2025-01-27 ## 修复内容 ### 高级检索界面多选下拉框参数传递格式修复 **文件**: `web/src/views/xg/xsjcxx/stuRoster/components/AdvancedSearchDialog.vue` **问题描述**: - 高级检索界面中,检索按钮调用后台API时,对于下拉框的多选传的参数是 `dormitoryBuilding[0]`、`dormitoryBuilding[1]` 等索引格式 - 需要调整为传递 `dormitoryBuilding: list` 的数组格式 - 其他所有下拉框都需要做同样的调整 **修复方案**: 1. 在 `handleSearch` 方法中新增多选字段处理逻辑 2. 定义所有多选下拉框字段列表: ```javascript const multiSelectFields = [ 'gender', 'nationality', 'nativePlace', 'politicalStatus', 'educationLevel', 'admissionCategory', 'academicLevel', 'trainingType', 'householdRegisterType', 'studentStatus', 'isBoarder', 'dormitoryBuilding', 'familyEconomicStatus', 'isPoorStudent', 'isMinority', 'isDisabled', 'isOrphan', 'isLeftBehindChild', 'isSingleChild', 'isLowIncome', 'hasLoan', 'sourceRegion', 'bloodType', 'disabilityType' ]; ``` 3. 统一处理多选字段: - 过滤掉空值,确保只传递有效的数组 - 如果数组为空则删除该字段 - 保持数组格式传递给后端 **修复效果**: - ✅ 所有多选下拉框现在都传递正确的数组格式 - ✅ 避免了 `dormitoryBuilding[0]`、`dormitoryBuilding[1]` 等索引格式问题 - ✅ 后端可以正确接收 `dormitoryBuilding: list` 格式的参数 - ✅ 提高了代码的可维护性和一致性 **涉及的多选字段**: - 基础信息:性别、民族、籍贯、政治面貌、文化程度 - 学籍信息:录取类别、学历层次、培养方式、户口类型、学籍状态、是否住校、宿舍楼栋 - 家庭信息:家庭经济状况 - 扩展信息:是否贫困生、是否少数民族、是否残疾、是否孤儿、是否留守儿童、是否独生子女、是否低保、是否有助学贷款、生源地区 - 健康信息:血型、残疾类型 **测试建议**: 1. 测试各个多选下拉框的选择功能 2. 验证传递给后端的参数格式是否正确 3. 确认后端能正确接收和处理数组格式的参数 --- **记录时间**: 2025-01-27 14:30:00 **记录人**: wuzilong **变更类型**: 功能修复 # 角色管理页面新增按钮isSystemRole问题修复 **日期**: 2025-01-27 15:30:00 **修改人**: wuzilong **文件**: `web/src/views/system/role/index.vue` ## 问题描述 点击角色管理页面的新增按钮时,`isSystemRole` 计算属性应该为 `false`,允许用户填写表单。但实际显示为 `true`,导致表单字段被禁用。 ## 问题分析 1. **根本原因**: `isSystemRole` 计算属性检查 `form.value.roleKey` 是否以 `'XT-BJZW-'` 开头 2. **初始化问题**: 虽然 `initForm` 中 `roleKey` 初始化为空字符串,但可能存在重置不完整的情况 3. **逻辑问题**: 原计算属性没有正确处理空字符串的情况 ## 修复方案 ### 1. 优化 `isSystemRole` 计算属性 ```typescript // 修复前 const isSystemRole = computed(() => { return form.value.roleKey && form.value.roleKey.startsWith('XT-BJZW-'); }); // 修复后 const isSystemRole = computed(() => { return form.value.roleKey && form.value.roleKey.trim() !== '' && form.value.roleKey.startsWith('XT-BJZW-'); }); ``` ### 2. 优化 `isSystemRoleInTable` 函数 ```typescript // 修复前 const isSystemRoleInTable = (row: RoleVO) => { return row.roleKey && row.roleKey.startsWith('XT-BJZW-'); }; // 修复后 const isSystemRoleInTable = (row: RoleVO) => { return row.roleKey && row.roleKey.trim() !== '' && row.roleKey.startsWith('XT-BJZW-'); }; ``` ### 3. 增强 `reset` 函数 ```typescript const reset = () => { menuRef.value?.setCheckedKeys([]); menuExpand.value = false; menuNodeAll.value = false; deptExpand.value = true; deptNodeAll.value = false; form.value = { ...initForm }; // 确保roleKey被明确重置为空字符串 form.value.roleKey = ''; roleFormRef.value?.resetFields(); }; ``` ### 4. 增强 `handleAdd` 函数 ```typescript const handleAdd = () => { reset(); // 确保roleKey被正确重置为空字符串 form.value.roleKey = ''; console.log('新增角色 - roleKey:', `"${form.value.roleKey}"`, 'isSystemRole:', isSystemRole.value); getMenuTreeselect(); dialog.visible = true; dialog.title = '添加角色'; }; ``` ## 修复效果 1. ✅ **新增角色**: 点击新增按钮时,`isSystemRole` 正确显示为 `false` 2. ✅ **表单可用**: 角色名称、权限字符等字段可以正常填写 3. ✅ **系统角色保护**: 对于真正的系统角色(`XT-BJZW-` 开头),仍然正确识别并禁用编辑 4. ✅ **调试信息**: 添加了控制台日志,便于调试和验证 ## 验证结果 ### ✅ 修复成功验证 **测试日志输出**: ``` 新增角色 - roleKey: "" isSystemRole: false ``` **验证结果**: - ✅ `roleKey` 正确显示为空字符串 `""` - ✅ `isSystemRole` 正确显示为 `false` - ✅ 表单字段未被禁用,可以正常填写 - ✅ 系统角色保护机制仍然正常工作 ## 测试验证 1. **新增角色测试**: - 点击"新增"按钮 - 验证表单字段未被禁用 - 验证控制台显示 `roleKey: ""` 和 `isSystemRole: false` 2. **系统角色测试**: - 编辑系统内置角色(`XT-BJZW-` 开头) - 验证表单字段被正确禁用 - 验证系统角色提示信息显示 ## 相关文件 - `web/src/views/system/role/index.vue` - 角色管理页面 - `docs/变更管理/code-adjust-record-2025-01-27-wuzilong.md` - 本变更记录 ## 备注 此修复确保了角色管理页面的新增功能正常工作,同时保持了对系统内置角色的保护机制。修复后的代码更加健壮,能够正确处理各种边界情况。 **修复状态**: ✅ 完全成功 **验证时间**: 2025-01-27 15:35:00