diff --git a/src/api/module/flow.ts b/src/api/module/flow.ts index bb16991..448ecee 100644 --- a/src/api/module/flow.ts +++ b/src/api/module/flow.ts @@ -165,20 +165,42 @@ class FlowApi { return get(`${ROOT}/admin/def/diagram`, params); } - // ==================== 管理面:办理人映射 ==================== - mapList(deptKey?: string) { - return get(`${ROOT}/admin/map/list`, deptKey ? { deptKey } : undefined); + // ==================== 管理面:科室管理(2026-10-10,取代旧 /map/* 映射 CRUD) ==================== + /** 科室列表(deptKey=自增 id 字符串 + 启用成员数;编辑器 ctx.depts 同结构) */ + deptList() { + return get(`${ROOT}/admin/dept/list`); } - mapSave(body: { deptKey: string; deptName?: string; userId: number; userName?: string }) { - return post(`${ROOT}/admin/map/save`, body); + deptCreate(deptName: string) { + return post(`${ROOT}/admin/dept/create`, { deptName }); } - mapDisable(id: number | string) { - return post(`${ROOT}/admin/map/disable/${id}`); + deptRename(id: number | string, deptName: string) { + return post(`${ROOT}/admin/dept/rename`, { id, deptName }); } - /** 启用映射(停用行的恢复入口;DEPT_KEY 解析只取启用行) */ - mapEnable(id: number | string) { - return post(`${ROOT}/admin/map/enable/${id}`); + deptStatus(id: number | string, enabled: boolean) { + return post(`${ROOT}/admin/dept/status`, { id, enabled }); } + deptDelete(id: number | string) { + return post(`${ROOT}/admin/dept/delete`, { id }); + } + deptMembers(deptId: number | string) { + return get(`${ROOT}/admin/dept/members`, { deptId }); + } + /** 批量加成员(返回新增数) */ + deptMemberAdd(deptId: number | string, userIds: number[]) { + return post(`${ROOT}/admin/dept/memberAdd`, { deptId, userIds }); + } + deptMemberRemove(memberId: number | string) { + return post(`${ROOT}/admin/dept/memberRemove`, { memberId }); + } + /** 一键拉取教师组·预览(不落库,确认后导入) */ + deptGroupPreview() { + return get(`${ROOT}/admin/dept/groupPreview`); + } + /** 一键拉取教师组·导入(source_group_id 幂等;重复拉取=刷新组名与成员集) */ + deptImportGroups() { + return post(`${ROOT}/admin/dept/importGroups`); + } + /** 成员检索(UserBase byId;编辑器选人/姓名补全共用,原 /map/lookupUser 通道保留) */ mapLookupUser(userId: number) { return get(`${ROOT}/admin/map/lookupUser`, { userId }); } @@ -190,14 +212,6 @@ class FlowApi { adminTeacherTree() { return get(`${ROOT}/admin/user/teacherTree`); } - /** 一键拉取教师组·预览(学校子树教师组容器 → 科室+组内成员) */ - mapGroupPreview() { - return get(`${ROOT}/admin/map/groupPreview`); - } - /** 一键拉取教师组·导入(批量落映射,已存在跳过) */ - mapImportGroups() { - return post(`${ROOT}/admin/map/importGroups`); - } // ==================== 管理面:回调注册/日志/死信 ==================== regList() { diff --git a/src/router/routes.ts b/src/router/routes.ts index 8c32cbe..0878a1c 100644 --- a/src/router/routes.ts +++ b/src/router/routes.ts @@ -66,12 +66,7 @@ const routes: RouteRecordRaw[] = [ meta: { title: "流程编辑器", parentId: 103 }, }, { - path: "/admin/maps", - name: "flow_admin_maps", - component: () => import("@/views/flow/admin/Maps.vue"), - meta: { title: "办理人映射", modId: 104 }, - }, - { + // 回调管理(原 104 办理人映射已于 2026-10-10 下线,由 应用设置-科室管理 承载) path: "/admin/callbacks", name: "flow_admin_callbacks", component: () => import("@/views/flow/admin/Callbacks.vue"), diff --git a/src/views/flow/admin/AppSetting.vue b/src/views/flow/admin/AppSetting.vue index 6a51477..a3fe665 100644 --- a/src/views/flow/admin/AppSetting.vue +++ b/src/views/flow/admin/AppSetting.vue @@ -1,15 +1,17 @@ diff --git a/src/views/flow/admin/Maps.vue b/src/views/flow/admin/Maps.vue deleted file mode 100644 index b160a28..0000000 --- a/src/views/flow/admin/Maps.vue +++ /dev/null @@ -1,205 +0,0 @@ - - - diff --git a/src/views/flow/admin/def-editor/components/ApprovalDrawer.vue b/src/views/flow/admin/def-editor/components/ApprovalDrawer.vue index 1a33372..56034da 100644 --- a/src/views/flow/admin/def-editor/components/ApprovalDrawer.vue +++ b/src/views/flow/admin/def-editor/components/ApprovalDrawer.vue @@ -59,7 +59,7 @@ watch( { immediate: true } ); -/** 科室下拉项:mapList 聚合 + 当前值(可能已不在映射表中)兜底,避免选项丢失 */ +/** 科室下拉项:科室管理列表 + 当前值(可能已删除)兜底,避免选项丢失 */ const deptOptions = computed(() => { const list = ctx.depts.map((d) => ({ value: d.deptKey, diff --git a/src/views/flow/admin/def-editor/components/NotifyDrawer.vue b/src/views/flow/admin/def-editor/components/NotifyDrawer.vue index ca410bd..85e027d 100644 --- a/src/views/flow/admin/def-editor/components/NotifyDrawer.vue +++ b/src/views/flow/admin/def-editor/components/NotifyDrawer.vue @@ -52,7 +52,7 @@ watch( { immediate: true } ); -/** 科室下拉项:mapList 聚合 + 当前值(可能已不在映射表中)兜底,避免选项丢失 */ +/** 科室下拉项:科室管理列表 + 当前值(可能已删除)兜底,避免选项丢失 */ const deptOptions = computed(() => { const list = ctx.depts.map((d) => ({ value: d.deptKey, diff --git a/src/views/flow/admin/def-editor/index.vue b/src/views/flow/admin/def-editor/index.vue index eedcab8..78052ca 100644 --- a/src/views/flow/admin/def-editor/index.vue +++ b/src/views/flow/admin/def-editor/index.vue @@ -61,7 +61,7 @@ const appKey = ref(""); const appOptions = ref<{ appKey: string; appName: string }[]>([]); const model = reactive(createEmptyModel()); -/** 科室映射聚合(mapList):仅用于下拉选项与"无启用办理人"提示 */ +/** 科室列表(deptList 聚合行):仅用于下拉选项与"无启用人员"提示 */ const depts = reactive([]); /** userId → 姓名快照(mapLookupUser 检索补全,失败降级 #id) */ const userNames = reactive>({}); @@ -120,20 +120,17 @@ const editingCondition = computed(() => { async function loadDepts(): Promise { try { - const rows: any[] = (await flowApi.mapList().send()) || []; - const grouped: Record = {}; - rows.forEach((r) => { - const key = r.deptKey; - if (!key) return; - if (!grouped[key]) grouped[key] = { deptKey: key, deptName: r.deptName || "", count: 0 }; - if (!grouped[key].deptName && r.deptName) grouped[key].deptName = r.deptName; - // 状态 0=启用(与办理人映射页口径一致),发布校验要求至少 1 名启用办理人 - if (r.status === 0) grouped[key].count += 1; - }); - depts.splice(0, depts.length, ...Object.values(grouped)); + // 科室管理(2026-10-10 切源):deptList 返回聚合行 {deptKey,deptName,status,count} + const rows: any[] = (await flowApi.deptList().send()) || []; + depts.splice(0, depts.length, ...rows.map((r) => ({ + deptKey: String(r.deptKey), + deptName: r.deptName || "", + // 停用科室不进编辑器下拉(与发布校验口径一致:解析不出办理人) + count: r.status === 0 ? r.count : 0, + }))); } catch { - // 映射表拉取失败不阻塞编辑:审批人下拉退化为"仅当前值",校验降级为提示 - Message.warning("办理人映射拉取失败,科室下拉可能不完整"); + // 科室拉取失败不阻塞编辑:审批人下拉退化为"仅当前值",校验降级为提示 + Message.warning("科室数据拉取失败,科室下拉可能不完整"); } } diff --git a/src/views/flow/admin/def-editor/model.ts b/src/views/flow/admin/def-editor/model.ts index ccd7366..d92cded 100644 --- a/src/views/flow/admin/def-editor/model.ts +++ b/src/views/flow/admin/def-editor/model.ts @@ -307,7 +307,7 @@ export interface DeptOption { count: number; } -/** 审批人摘要文案(卡片第二行;deptOptions 来自 mapList,userNames 为 userId→姓名 快照) */ +/** 审批人摘要文案(卡片第二行;deptOptions 来自科室管理列表,userNames 为 userId→姓名 快照) */ export function assigneeText(a: Assignee | null, depts: DeptOption[], userNames: Record): string { if (!a) return "未配置审批人"; if (a.type === "DEPT_KEY") {