|
@@ -277,6 +277,64 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
|
|
|
type: "dict-cascader",
|
|
type: "dict-cascader",
|
|
|
column: {
|
|
column: {
|
|
|
show: false,
|
|
show: false,
|
|
|
|
|
+ },
|
|
|
|
|
+ // 学生类型表单的级联选择依赖于 index.vue 中的 _college_id/_major_id/_grade_id
|
|
|
|
|
+ // 这里通过 valueBuilder 在打开编辑/查看表单时,将 organization_detail.parent_chain 回显到这三个临时字段
|
|
|
|
|
+ // 同时通过 valueResolve 在提交时将最终选择写回 organization_ref(学生为年级ID,其它类型为学院ID)
|
|
|
|
|
+ valueBuilder({ form, value }) {
|
|
|
|
|
+ // 保留后端原始值
|
|
|
|
|
+ form.organization_ref = value;
|
|
|
|
|
+ // 仅学生类型需要拆分层级进行回显
|
|
|
|
|
+ const od = (form as any).organization_detail;
|
|
|
|
|
+ if ((form as any).user_type === 0 && od && Array.isArray(od.parent_chain)) {
|
|
|
|
|
+ // 期望 parent_chain: [学校, 学院, 专业, 年级] 或至少包含 [学院, 专业, 年级]
|
|
|
|
|
+ const chain = od.parent_chain;
|
|
|
|
|
+ // 按长度精确映射,避免把学校ID当作学院ID
|
|
|
|
|
+ if (chain.length >= 4) {
|
|
|
|
|
+ // [学校, 学院, 专业, 年级]
|
|
|
|
|
+ (form as any)._college_id = chain[1]?.id;
|
|
|
|
|
+ (form as any)._major_id = chain[2]?.id;
|
|
|
|
|
+ (form as any)._grade_id = chain[3]?.id;
|
|
|
|
|
+ } else if (chain.length === 3) {
|
|
|
|
|
+ // 常见后端:含学校,无年级 -> [学校, 学院, 专业]
|
|
|
|
|
+ (form as any)._college_id = chain[1]?.id;
|
|
|
|
|
+ (form as any)._major_id = chain[2]?.id;
|
|
|
|
|
+ (form as any)._grade_id = undefined;
|
|
|
|
|
+ } else if (chain.length === 2) {
|
|
|
|
|
+ // [学院, 专业]
|
|
|
|
|
+ (form as any)._college_id = chain[0]?.id;
|
|
|
|
|
+ (form as any)._major_id = chain[1]?.id;
|
|
|
|
|
+ (form as any)._grade_id = undefined;
|
|
|
|
|
+ } else if (chain.length === 1) {
|
|
|
|
|
+ // [学院]
|
|
|
|
|
+ (form as any)._college_id = chain[0]?.id;
|
|
|
|
|
+ (form as any)._major_id = undefined;
|
|
|
|
|
+ (form as any)._grade_id = undefined;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ (form as any)._college_id = undefined;
|
|
|
|
|
+ (form as any)._major_id = undefined;
|
|
|
|
|
+ (form as any)._grade_id = undefined;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 学生模式下,不直接把 organization_ref 设为学院,保持由 index.vue 的联动逻辑在变更时再写入
|
|
|
|
|
+ } else if ((form as any).user_type === 1 || (form as any).user_type === 3) {
|
|
|
|
|
+ // 教师/学院领导:直接以当前组织ID为学院选择
|
|
|
|
|
+ if (od && od.id) {
|
|
|
|
|
+ (form as any).organization_ref = od.id;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ valueResolve({ form, value }) {
|
|
|
|
|
+ // 非学生:提交学院ID
|
|
|
|
|
+ if ((form as any).user_type !== 0) {
|
|
|
|
|
+ (form as any).organization_ref = value ?? (form as any).organization_ref;
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 学生:当选择了年级,则以年级ID为最终 organization_ref
|
|
|
|
|
+ if ((form as any)._grade_id) {
|
|
|
|
|
+ (form as any).organization_ref = (form as any)._grade_id;
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 兜底:若仅选择到专业或学院,不改变已有值(让上层联动 onGradeChange 来写入)
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
/* 组织架构*/
|
|
/* 组织架构*/
|