From 4dd45eeab04773dcd3efff6ddb5d9f1d69aaaa73 Mon Sep 17 00:00:00 2001 From: wsm <2746563060@qq.com> Date: Thu, 16 Jul 2026 09:11:45 +0800 Subject: [PATCH 1/5] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4=20refreshBusiness?= =?UTF-8?q?Status=20=E6=AD=BB=E4=BB=A3=E7=A0=81=EF=BC=8C=E6=B6=88=E9=99=A4?= =?UTF-8?q?=20N+1=20=E6=97=A0=E6=95=88=E8=AF=B7=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- src/api/common/api.ts | 7 +--- src/views/bg/xispeak/BgXiSpeakList.vue | 40 +------------------ .../dq/inspectTask/DqInspectTaskList.vue | 24 +---------- 3 files changed, 4 insertions(+), 67 deletions(-) diff --git a/src/api/common/api.ts b/src/api/common/api.ts index aabce4b..afa63e9 100644 --- a/src/api/common/api.ts +++ b/src/api/common/api.ts @@ -21,7 +21,7 @@ enum Api { deletePendingTask = '/tasktask/taskTask/deletePendingTask', updateTitleAndDeadline = '/tasktask/taskTask/updateTitleAndDeadline', currentNodeInfo = '/act/task/currentNodeInfo', - getBusinessStatus = '/tasktask/taskTask/getBusinessStatus', + } /** @@ -210,11 +210,6 @@ export const updateTitleAndDeadline = (params) => { */ export const queryCurrentNodeInfo = (params) => defHttp.get({ url: Api.currentNodeInfo, params }); -/** - * 查询业务状态(单条) - * @param params { businessId: string } - */ -export const getBusinessStatus = (params) => defHttp.get({ url: Api.getBusinessStatus, params }); /** * 【用于评论功能】自定义文件上传-方法 diff --git a/src/views/bg/xispeak/BgXiSpeakList.vue b/src/views/bg/xispeak/BgXiSpeakList.vue index ed86884..aad54e9 100644 --- a/src/views/bg/xispeak/BgXiSpeakList.vue +++ b/src/views/bg/xispeak/BgXiSpeakList.vue @@ -118,7 +118,7 @@ import { defHttp } from '/@/utils/http/axios'; import { useMessage } from '/@/hooks/web/useMessage'; import { showImportValidationErrors } from '/@/utils/helper/importError'; - import { startProcessSchedules, getBusinessStatus } from '/@/api/common/api'; + import { startProcessSchedules } from '/@/api/common/api'; import { dateUtil } from '/@/utils/dateUtil'; import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue'; @@ -360,7 +360,6 @@ import { defHttp } from '/@/utils/http/axios'; if (result && result.length > 0) { record.children = getDataByResult(result); await refreshFeedbackCounts(record.children); - await refreshBusinessStatus(record.children); // 触发表格重新渲染 updateTableDataRecord(record.id, { ...record }); } else { @@ -443,40 +442,6 @@ import { defHttp } from '/@/utils/http/axios'; } } - /** - * 批量查询业务状态并更新到 records 中 - */ - async function refreshBusinessStatus(records) { - const ids = collectAllIds(records); - if (ids.length === 0) return; - try { - const results = await Promise.all( - ids.map((id) => - getBusinessStatus({ businessId: id }).catch(() => null) - ) - ); - const statusMap: Record = {}; - for (const item of results) { - if (item?.businessId) { - statusMap[item.businessId] = item.status_dictText || ''; - } - } - const updateFn = (list) => { - if (!list) return; - for (const item of list) { - const status = statusMap[item.id]; - if (status !== undefined) { - item.status_dictText = status; - } - if (item.children) updateFn(item.children); - } - }; - updateFn(records); - } catch (e) { - // 静默处理查询异常 - } - } - /** * 接口请求成功后回调 */ @@ -484,8 +449,7 @@ import { defHttp } from '/@/utils/http/axios'; getDataByResult(result.items) && loadDataByExpandedRows(); if (result.items && result.items.length > 0) { await refreshFeedbackCounts(result.items); - await refreshBusinessStatus(result.items); - // 触发表格重新渲染以显示更新后的 implCount / closedCount / businessStatus + // 触发表格重新渲染以显示更新后的 implCount / closedCount setTableData([...getDataSource()]); } } diff --git a/src/views/dq/inspectTask/DqInspectTaskList.vue b/src/views/dq/inspectTask/DqInspectTaskList.vue index 5f00320..9f804a5 100644 --- a/src/views/dq/inspectTask/DqInspectTaskList.vue +++ b/src/views/dq/inspectTask/DqInspectTaskList.vue @@ -157,7 +157,7 @@ import Icon from '/@/components/Icon/index'; import SzSelectDept from '/@/components/Form/src/jeecg/components/SzSelectDept.vue'; import SzDeptUserModal from '/@/components/semri/deptUserComponent/SzDeptUserModal.vue'; - import { startProcessSchedules, getBusinessStatus } from '/@/api/common/api'; + import { startProcessSchedules } from '/@/api/common/api'; import { dateUtil } from '/@/utils/dateUtil'; import FlowScheduleStartModal from './components/DqInspectTaskFlowScheduleStartModal.vue'; import BusinessProcessListModal from '/src/components/semri/process/BusinessProcessListModal.vue'; @@ -610,30 +610,8 @@ reload(); } - async function refreshBusinessStatus(records) { - if (!records || records.length === 0) return; - try { - const results = await Promise.all(records.map((item) => getBusinessStatus({ businessId: item.id }).catch(() => null))); - const statusMap: Record = {}; - for (const item of results) { - if (item?.businessId) { - statusMap[item.businessId] = item.status_dictText || ''; - } - } - for (const item of records) { - const status = statusMap[item.id]; - if (status !== undefined) { - item.status_dictText = status; - } - } - } catch (e) { - // 静默处理查询异常 - } - } - async function onFetchSuccess(result) { if (result?.items?.length > 0) { - await refreshBusinessStatus(result.items); setTableData([...getDataSource()]); } } From 4e54268084a0f85651878a30370ad9e08981abf7 Mon Sep 17 00:00:00 2001 From: wsm <2746563060@qq.com> Date: Thu, 16 Jul 2026 09:16:53 +0800 Subject: [PATCH 2/5] =?UTF-8?q?fix(xispeak):=20=E9=9A=90=E8=97=8F=E5=8F=B0?= =?UTF-8?q?=E8=B4=A6=E8=A1=A8=E5=8D=95=E4=B8=AD=E5=AE=8C=E6=88=90=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E5=92=8C=E6=B5=81=E7=A8=8B=E9=98=B6=E6=AE=B5=E5=AD=97?= =?UTF-8?q?=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- .../bg/xispeak/components/BgXiSpeakForm.vue | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/views/bg/xispeak/components/BgXiSpeakForm.vue b/src/views/bg/xispeak/components/BgXiSpeakForm.vue index f5c0a91..bdf0b11 100644 --- a/src/views/bg/xispeak/components/BgXiSpeakForm.vue +++ b/src/views/bg/xispeak/components/BgXiSpeakForm.vue @@ -92,11 +92,11 @@ - - - - - + + + + + @@ -107,17 +107,17 @@ - - - - 未发起流程 - 正在落实措施收集流程 - 落实措施收集流程结束 - 正在经办人执行反馈流程 - 经办人执行反馈流程结束 - - - + + + + + + + + + + + @@ -205,7 +205,7 @@ import { PARTY_COMMITTEE_DEPT_ID, SDW_LEADER_ROLE_ID } from '/@/constant/supervi implMeasures: [{ required: true, message: '请输入贯彻落实措施' }], numberOfResolutions: [{ required: true, message: '请输入会议决策数' }], reportFeedbackStatus: [{ required: true, message: '请输入报告反馈情况' }], - completionStatus: [{ required: true, message: '请选择完成状态' }], + // completionStatus: [{ required: true, message: '请选择完成状态' }], deadline: [{ required: true, message: '请选择截止日期' }], implDept: [{ required: true, message: '请选择牵头部门' }], }); From 527241179c949fe8369ff4d9806f4f19321482fd Mon Sep 17 00:00:00 2001 From: wsm <2746563060@qq.com> Date: Thu, 16 Jul 2026 09:23:04 +0800 Subject: [PATCH 3/5] =?UTF-8?q?fix(dq):=20=E9=9A=90=E8=97=8F=E5=B7=A1?= =?UTF-8?q?=E8=A7=86=E6=95=B4=E6=94=B9=E6=B5=81=E7=A8=8B=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E9=98=B6=E6=AE=B5=E8=B0=83=E6=95=B4=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- .../dq/inspectTask/DqInspectTaskList.vue | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/views/dq/inspectTask/DqInspectTaskList.vue b/src/views/dq/inspectTask/DqInspectTaskList.vue index 9f804a5..e0c527a 100644 --- a/src/views/dq/inspectTask/DqInspectTaskList.vue +++ b/src/views/dq/inspectTask/DqInspectTaskList.vue @@ -403,24 +403,24 @@ onClick: handleQueryProcess.bind(null, record), }); // if (!record.bpmStatus || record.bpmStatus == '1') { - list.push({ - text: '调整为未发起巡视整改流程状态', - icon: 'ant-design:rollback-outlined', - event: 'adj0', - onClick: () => adjustCompletedStage(record, 0), - }); - list.push({ - text: '调整为未发起销号流程状态', - icon: 'ant-design:check-circle-outlined', - event: 'adj2', - onClick: () => adjustCompletedStage(record, 2), - }); - list.push({ - text: '调整为已完成销号流程状态', - icon: 'ant-design:check-circle-outlined', - event: 'adj4', - onClick: () => adjustCompletedStage(record, 4), - }); + // list.push({ + // text: '调整为未发起巡视整改流程状态', + // icon: 'ant-design:rollback-outlined', + // event: 'adj0', + // onClick: () => adjustCompletedStage(record, 0), + // }); + // list.push({ + // text: '调整为未发起销号流程状态', + // icon: 'ant-design:check-circle-outlined', + // event: 'adj2', + // onClick: () => adjustCompletedStage(record, 2), + // }); + // list.push({ + // text: '调整为已完成销号流程状态', + // icon: 'ant-design:check-circle-outlined', + // event: 'adj4', + // onClick: () => adjustCompletedStage(record, 4), + // }); //} return list; } From 74eae8273ceb06d099f6b9c4fab487ae3993deb1 Mon Sep 17 00:00:00 2001 From: wsm <2746563060@qq.com> Date: Thu, 16 Jul 2026 10:54:17 +0800 Subject: [PATCH 4/5] =?UTF-8?q?feat(bpm):=20=E6=8A=BD=E5=8F=96=20useSubApp?= =?UTF-8?q?roveUserResolver=20=E7=BB=9F=E4=B8=80=20username=E2=86=92realna?= =?UTF-8?q?me=20=E8=A7=A3=E6=9E=90=EF=BC=8C=E4=BF=AE=E5=A4=8D=20isEnd=20?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E6=97=B6=E5=AE=A1=E6=89=B9=E6=84=8F=E8=A7=81?= =?UTF-8?q?=E4=B8=8D=E5=93=8D=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- src/composables/useSubApproveUserResolver.ts | 72 +++++++++++++++++++ .../xispeak/components/BgXiSpeakBPMForm.vue | 68 ++++-------------- .../components/DqInspectTaskBPMForm.vue | 23 +++++- 3 files changed, 107 insertions(+), 56 deletions(-) create mode 100644 src/composables/useSubApproveUserResolver.ts diff --git a/src/composables/useSubApproveUserResolver.ts b/src/composables/useSubApproveUserResolver.ts new file mode 100644 index 0000000..4f6fe9d --- /dev/null +++ b/src/composables/useSubApproveUserResolver.ts @@ -0,0 +1,72 @@ +import { ref } from 'vue'; +import { getUserList } from '/@/api/common/api'; + +function normalizeCommaList(value: string): string { + return String(value || '') + .split(',') + .map((s) => s.trim()) + .filter(Boolean) + .join(','); +} + +function normalizeDisplayNames(value: string): string { + return String(value || '') + .split(/[,,;;、]/) + .map((s) => s.trim()) + .filter(Boolean) + .join('、'); +} + +/** + * 部门经办人选人 + 名称解析,统一 BgXiSpeak / DqInspectTask 等 BPM 表单的 + * username → realname 转换逻辑。 + * + * - `usernames`: 原始 username(逗号分隔),绑定 sz-dept-user-modal 的 v-model + * - `displayNames`: 真实姓名(顿号分隔),用于审批意见模板和 formScope + * - `setDisplayNames`: modal @confirm 已携带 realname 时直接设置(同步,无 API) + * - `initFromData`: 从已保存数据初始化时,通过 API 一次性解析 username → realname + */ +export function useSubApproveUserResolver() { + const usernames = ref(''); + const displayNames = ref(''); + + /** modal @confirm 回调直接设置已携带的 realname */ + function setDisplayNames(userIds: string, realnames: string) { + usernames.value = normalizeCommaList(userIds); + displayNames.value = normalizeDisplayNames(realnames); + } + + /** 从已保存数据初始化(需 API 解析 username → realname) */ + async function initFromData(rawUsernames: string) { + usernames.value = normalizeCommaList(rawUsernames); + if (!usernames.value) { + displayNames.value = ''; + return; + } + + try { + const res = await getUserList({ + username: usernames.value, + isMultiTranslate: 'true', + pageNo: 1, + pageSize: 999, + }); + const records = res?.records || res?.result?.records || res || []; + const nameMap: Record = {}; + for (const item of records) { + const u = String(item?.username || '').trim(); + const r = String(item?.realname || item?.name || '').trim(); + if (u && r) nameMap[u] = r; + } + const resolved = usernames.value + .split(',') + .map((u) => nameMap[u.trim()] || u.trim()) + .filter(Boolean); + displayNames.value = normalizeDisplayNames(resolved.join(',')); + } catch { + // 解析失败,保持空 + } + } + + return { usernames, displayNames, setDisplayNames, initFromData }; +} diff --git a/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue b/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue index 30dbf50..8869d7d 100644 --- a/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue +++ b/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue @@ -246,7 +246,7 @@ - + @@ -278,7 +278,7 @@ import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue'; import Icon from '/@/components/Icon/index'; import { bgXiSpeakFeedbackList, bgXiSpeakFeedbackDelete, saveBpmForm, saveSubApprove, getProcessVariable } from '../BgXiSpeak.api'; - import { getUserList } from '/@/api/common/api'; + import { useSubApproveUserResolver } from '/@/composables/useSubApproveUserResolver'; import { usePermission } from '/@/hooks/web/usePermission'; import TaskHandleInnerContent from '/@/views/super/bpm/process/personalOffice/myHandleTask/content/TaskHandleInnerContent.vue'; import BgXiSpeakBPMFeedbackModal from './BgXiSpeakBPMFeedbackModal.vue'; @@ -328,9 +328,7 @@ import { const showBaseInfoDetail = ref(false); const showFeedbackDetail = ref(true); const feedbackList = ref([]); - const subApproveUser = ref(''); - const subApproveUserNameText = ref(''); - const userResolveVersion = ref(0); + const { usernames: subApproveUser, displayNames: subApproveUserNameText, setDisplayNames, initFromData } = useSubApproveUserResolver(); const isEnd = ref(0); const mainForm = reactive>({ @@ -469,9 +467,10 @@ import { Task_0jrgrzs: buildDeptHandlerFeedbackReason, Task_12vdqzv: buildDeptHandlerFeedbackReason, // 部门负责人接受任务并分配 - Task_1v9ce78: () => buildDeptLeaderAssignReason( - normalizeDeptNames(subApproveUserNameText.value || subApproveUser.value), - ), + Task_1v9ce78: () => { + if (isEnd.value === 1) return ''; + return buildDeptLeaderAssignReason(normalizeDeptNames(subApproveUserNameText.value)); + }, // 部门负责人直接反馈 Task_0sialna: buildDeptLeaderDirectFeedbackReason, // 督办部门经办人确认全部反馈事项 @@ -525,14 +524,13 @@ import { }, { immediate: true } ); - - watch( - subApproveUser, - (value) => { - resolveSubApproveUserName(value); - }, - { immediate: true } - ); + watch(isEnd, (val) => { + const vars = props.formData?.vars; + if (vars) { + vars.is_end = String(val); + vars.isEnd = String(val); + } + }); async function initFormData() { const dataId = props.formData?.dataId; @@ -560,7 +558,7 @@ import { if (approveInfo && deptId && approveInfo[deptId]) { const detail = approveInfo[deptId]; isEnd.value = detail.isEnd ?? 0; - subApproveUser.value = detail.implWorker ?? ''; + initFromData(detail.implWorker ?? ''); } } @@ -771,42 +769,6 @@ import { .join(','); } - async function resolveSubApproveUserName(value: any) { - const resolveVersion = ++userResolveVersion.value; - const usernames = normalizeUsernameList(value); - if (!usernames) { - subApproveUserNameText.value = ''; - return; - } - - subApproveUserNameText.value = normalizeDeptNames(usernames); - try { - const res = await getUserList({ username: usernames, isMultiTranslate: 'true', pageNo: 1, pageSize: 999 }); - if (resolveVersion !== userResolveVersion.value) { - return; - } - const records = res?.records || res?.result?.records || res || []; - const userNameMap = Array.isArray(records) - ? records.reduce((cache: Record, item: any) => { - const username = String(item?.username || '').trim(); - const realname = String(item?.realname || item?.name || '').trim(); - if (username && realname) { - cache[username] = realname; - } - return cache; - }, {}) - : {}; - const names = usernames - .split(',') - .map((username) => userNameMap[username] || username) - .filter(Boolean); - subApproveUserNameText.value = normalizeDeptNames(names.join(',')); - } catch { - if (resolveVersion === userResolveVersion.value) { - subApproveUserNameText.value = normalizeDeptNames(usernames); - } - } - } function handleProcessSuccess() { emit('success'); diff --git a/src/views/dq/inspectTask/components/DqInspectTaskBPMForm.vue b/src/views/dq/inspectTask/components/DqInspectTaskBPMForm.vue index 7536aec..804bcbe 100644 --- a/src/views/dq/inspectTask/components/DqInspectTaskBPMForm.vue +++ b/src/views/dq/inspectTask/components/DqInspectTaskBPMForm.vue @@ -245,6 +245,8 @@ import SzDeptUserModal from '/@/components/semri/deptUserComponent/SzDeptUserMod import { usePermission } from '/@/hooks/web/usePermission'; import { PARTY_COMMITTEE_DEPT_ID, SDW_LEADER_ROLE_ID } from '/@/constant/supervision'; import { useSelectNameResolver } from '/@/composables/useSelectNameResolver'; +import { useSubApproveUserResolver } from '/@/composables/useSubApproveUserResolver'; +import { buildDeptLeaderAssignReason, normalizeDeptNames } from '/@/composables/useDefaultApprovalReason'; import TaskHandleInnerContent from '/@/views/super/bpm/process/personalOffice/myHandleTask/content/TaskHandleInnerContent.vue'; import DqInspectTaskBPMFeedbackModal from './DqInspectTaskBPMFeedbackModal.vue'; import SUploadFile from '/@/components/semri/fileComponent/SUploadFile.vue'; @@ -279,8 +281,7 @@ import { useSelectNameResolver } from '/@/composables/useSelectNameResolver'; const showBaseInfoDetail = ref(false); const showFeedbackDetail = ref(true); const feedbackList = ref([]); - const subApproveUser = ref(''); - const subApproveUserNames = ref(''); + const { usernames: subApproveUser, displayNames: subApproveUserNames, setDisplayNames } = useSubApproveUserResolver(); const isEnd = ref(0); const problemTreeData = ref([]); const loadingProblemOptions = ref(false); @@ -408,6 +409,22 @@ import { useSelectNameResolver } from '/@/composables/useSelectNameResolver'; processTableName: props.formData?.processTableName, })); + // ==================== 默认审批意见 ==================== + // 仅覆盖需要动态内容(人名)的节点,其余节点走后端节点配置 + const handleReasonTemplateMap: Record string> = { + // 责任部门领导接受任务并分配 + Task_1c64uvl: () => { + if (isEnd.value === 1) return ''; + return buildDeptLeaderAssignReason(normalizeDeptNames(subApproveUserNames.value)); + }, + }; + + const defaultHandleReason = computed(() => { + const builder = handleReasonTemplateMap[String(processInfo.value.taskDefKey || '')]; + return builder ? builder() : ''; + }); + + provide('formDefaultReason', defaultHandleReason); provide('extraVars', formScope); provide('flowVars', computed(() => props.formData?.vars || {})); @@ -613,7 +630,7 @@ import { useSelectNameResolver } from '/@/composables/useSelectNameResolver'; } function onSubApproveUserConfirm(userIds: string, realnames: string) { - subApproveUserNames.value = realnames || ''; + setDisplayNames(userIds, realnames); } async function saveSubApproveUserVariable(options: { showSuccessMessage?: boolean } = {}) { From ab811bc328842c1c526ad2bbc9c6e54fddb13c16 Mon Sep 17 00:00:00 2001 From: wsm <2746563060@qq.com> Date: Thu, 16 Jul 2026 11:13:15 +0800 Subject: [PATCH 5/5] =?UTF-8?q?fix(xispeak):=20BgXiSpeakBPMForm=20?= =?UTF-8?q?=E8=A1=A5=E5=85=A8=20defaultCc=20=E9=BB=98=E8=AE=A4=E6=8A=84?= =?UTF-8?q?=E9=80=81=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- .../xispeak/components/BgXiSpeakBPMForm.vue | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue b/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue index 8869d7d..ec9d744 100644 --- a/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue +++ b/src/views/bg/xispeak/components/BgXiSpeakBPMForm.vue @@ -257,6 +257,7 @@ :showSelnextUser="showSelnextUser" :beforeHandle="saveMainFormBeforeProcessHandle" :defaultReason="defaultHandleReason" + :defaultCc="defaultCcUsers" @success="handleProcessSuccess" @claimSuccess="handleClaimSuccess" /> @@ -330,6 +331,7 @@ import { const feedbackList = ref([]); const { usernames: subApproveUser, displayNames: subApproveUserNameText, setDisplayNames, initFromData } = useSubApproveUserResolver(); const isEnd = ref(0); + const defaultCcUsers = ref>([]); const mainForm = reactive>({ id: '', @@ -427,6 +429,7 @@ import { () => String(props.formData?.extendUrlParams?.showSubApproveUser ?? props.formData?.extendUrlParams?.selectuser ?? '') === '1' ); const showSubApproveUserSelector = computed(() => showSubApproveUser.value && String(isEnd.value) !== '1'); + const showDefaultCc = computed(() => String(props.formData?.extendUrlParams?.defaultCc ?? '') === '1'); const processInfo = computed(() => ({ taskId: props.formData?.taskId, @@ -532,6 +535,31 @@ import { } }); + async function fetchDefaultCcUsers() { + try { + const res = await defHttp.get({ + url: '/sys/user/queryUserRoleComponentData', + params: { departId: PARTY_COMMITTEE_DEPT_ID, roleId: SDW_LEADER_ROLE_ID, searchSecurityLevel: 5, pageNo: 1, pageSize: 999 }, + }); + const records = res?.records || res?.result?.records || []; + defaultCcUsers.value = records.sort((a, b) => (a.sortno ?? Infinity) - (b.sortno ?? Infinity)); + } catch { + defaultCcUsers.value = []; + } + } + + watch( + () => showDefaultCc.value, + () => { + if (showDefaultCc.value) { + fetchDefaultCcUsers(); + } else { + defaultCcUsers.value = []; + } + }, + { immediate: true } + ); + async function initFormData() { const dataId = props.formData?.dataId; if (!dataId) {