diff --git a/pages-sub/problem/ai-manage/index.vue b/pages-sub/problem/ai-manage/index.vue index 712ebca..739c394 100644 --- a/pages-sub/problem/ai-manage/index.vue +++ b/pages-sub/problem/ai-manage/index.vue @@ -96,9 +96,11 @@ - - {{ nextStepMap[item.taskKey].btnText }} + 回退 + + {{ getProcessButtonText(item) }} 详情 @@ -395,7 +397,12 @@ const queryList = async (pageNo, pageSize) => { if (activeTab.value === 0) res = await todoBuzSimplePage(params); else if (activeTab.value === 2) res = await myBuzSimplePage(params); else res = await doneBuzSimplePage(params); - pagingRef.value.complete(res?.list || [], res?.total || 0); + const list = res?.list || []; + // 待办列表预取统一动作配置,供按钮文案与显隐复用 + if (activeTab.value === 0) { + await attachConfiguredActions(list); + } + pagingRef.value.complete(list, res?.total || 0); } catch (error) { console.error('加载工单失败:', error); pagingRef.value?.complete(false); @@ -464,9 +471,37 @@ const queryUnifiedActions = async (item) => { return null } +/** 驳回类动作编码:只有配置了这些动作,才展示「回退」按钮 */ +const REJECT_ACTION_CODES = ['REJECT', 'RETURN', 'RETURN_PREV'] + +/** 待办列表:批量预取统一动作配置,挂在行数据上供按钮显隐复用 */ +const attachConfiguredActions = async (list) => { + if (!Array.isArray(list) || list.length === 0) return + await Promise.all(list.map(async (item) => { + item.configuredActions = await queryUnifiedActions(item) + })) +} + +/** 回退按钮显隐:AI 工单仅当节点配置了回退类动作时才展示 */ +const showRejectButton = (item) => { + return Array.isArray(item?.configuredActions) + && item.configuredActions.some((action) => REJECT_ACTION_CODES.includes(action.code)) +} + +/** 主按钮文案:已配置统一动作时取配置的动作名称,未配置时沿用原有节点规则 */ +const getProcessButtonText = (item) => { + const actions = item?.configuredActions + if (Array.isArray(actions) && actions.length > 0) { + return actions[0].name || actions[0].code + } + return nextStepMap[item.taskKey]?.btnText || '处理' +} + /** 待办-处理工单:已配置统一动作时走新逻辑,否则回退原有处理 */ const handleUnifiedProcess = async (item) => { - const actions = await queryUnifiedActions(item) + const actions = Array.isArray(item?.configuredActions) + ? item.configuredActions + : await queryUnifiedActions(item) if (actions) { unifiedActionsRef.value?.open(item, actions) return @@ -474,6 +509,23 @@ const handleUnifiedProcess = async (item) => { handleProcess(item) } +/** 回退:已配置统一动作时走新逻辑,否则回退原有弹窗 */ +const handleUnifiedReject = async (item) => { + const actions = Array.isArray(item?.configuredActions) + ? item.configuredActions + : await queryUnifiedActions(item) + if (actions) { + const rejectActions = actions.filter((action) => REJECT_ACTION_CODES.includes(action.code)) + if (rejectActions.length > 0) { + unifiedActionsRef.value?.open(item, rejectActions) + } else { + uni.showToast({ title: '当前节点未配置回退动作', icon: 'none' }) + } + return + } + handleReject(item) +} + /** 统一动作执行成功后刷新列表 */ const handleUnifiedSuccess = () => { pagingRef.value && pagingRef.value.reload() diff --git a/pages-sub/problem/regional-order-manage/index.vue b/pages-sub/problem/regional-order-manage/index.vue index ae53e50..d139b59 100644 --- a/pages-sub/problem/regional-order-manage/index.vue +++ b/pages-sub/problem/regional-order-manage/index.vue @@ -109,7 +109,7 @@ 回退 - 重新提交 + 重新提交 {{ getProcessButtonText(item) }} 详情 diff --git a/pages-sub/problem/regional-order-manage/list-detail.vue b/pages-sub/problem/regional-order-manage/list-detail.vue index e8febb7..d216aad 100644 --- a/pages-sub/problem/regional-order-manage/list-detail.vue +++ b/pages-sub/problem/regional-order-manage/list-detail.vue @@ -223,26 +223,29 @@ - + 回退 重新提交 - + {{ processButtonText }} + + + { return nextStepMap[orderDetail.value.taskKey]?.btnText }) +/** 统一动作弹窗 */ +const unifiedActionsRef = ref(null) + +/** 处理:已配置统一动作时走统一接口,否则回退原有处理 */ +const handleUnifiedProcess = async (item: any) => { + const actions = Array.isArray(configuredActions.value) + ? configuredActions.value + : await queryUnifiedActions(item?.taskId) + if (actions) { + unifiedActionsRef.value?.open(item, actions) + return + } + handleProcess(item) +} + +/** 回退:已配置统一动作时走统一接口,否则回退原有弹窗 */ +const handleUnifiedReject = async (item: any) => { + const actions = Array.isArray(configuredActions.value) + ? configuredActions.value + : await queryUnifiedActions(item?.taskId) + if (actions) { + const rejectActions = actions.filter((action: any) => + REJECT_ACTION_CODES.includes(action.code) + ) + if (rejectActions.length > 0) { + unifiedActionsRef.value?.open(item, rejectActions) + } else { + uni.showToast({ title: '当前节点未配置回退动作', icon: 'none' }) + } + return + } + handleReject(item) +} + +/** 统一动作执行成功后通知列表刷新并返回 */ +const handleUnifiedSuccess = () => { + if (eventChannel.value) { + eventChannel.value.emit('needRefresh') + } + uni.navigateBack({ delta: 1 }) +} + /** * 核心:工单详情接口 workOrderDetailByID * @param id 上一页传递的工单ID diff --git a/pages-sub/problem/regional-order-manage/order-detail.vue b/pages-sub/problem/regional-order-manage/order-detail.vue index cc0498f..245e44e 100644 --- a/pages-sub/problem/regional-order-manage/order-detail.vue +++ b/pages-sub/problem/regional-order-manage/order-detail.vue @@ -253,17 +253,17 @@ - + - 回退 重新提交 + v-show="nextStepMap[orderDetail.taskKey]?.renewShow">重新提交 - {{ + {{ processButtonText }} @@ -357,6 +357,9 @@ + + + @@ -591,6 +594,48 @@ const processButtonText = computed(() => { return nextStepMap[orderDetail.value.taskKey]?.btnText }) +/** 统一动作弹窗 */ +const unifiedActionsRef = ref(null) + +/** 处理:已配置统一动作时走统一接口,否则回退原有处理 */ +const handleUnifiedProcess = async (item: any) => { + const actions = Array.isArray(configuredActions.value) + ? configuredActions.value + : await queryUnifiedActions(item?.taskId) + if (actions) { + unifiedActionsRef.value?.open(item, actions) + return + } + handleProcess(item) +} + +/** 回退:已配置统一动作时走统一接口,否则回退原有弹窗 */ +const handleUnifiedReject = async (item: any) => { + const actions = Array.isArray(configuredActions.value) + ? configuredActions.value + : await queryUnifiedActions(item?.taskId) + if (actions) { + const rejectActions = actions.filter((action: any) => + REJECT_ACTION_CODES.includes(action.code) + ) + if (rejectActions.length > 0) { + unifiedActionsRef.value?.open(item, rejectActions) + } else { + uni.showToast({ title: '当前节点未配置回退动作', icon: 'none' }) + } + return + } + handleReject(item) +} + +/** 统一动作执行成功后通知列表刷新并返回 */ +const handleUnifiedSuccess = () => { + if (eventChannel.value) { + eventChannel.value.emit('needRefresh') + } + uni.navigateBack({ delta: 1 }) +} + /** * 获取工单详情 */ @@ -902,7 +947,7 @@ const handleAcceptModalConfirm = async () => { await callApprovalApi(postData, item.taskKey); showToast('提交成功', 'success'); handleAcceptModalCancel(); - eventChannel.vlue.emit('needRefresh'); + eventChannel.value.emit('needRefresh'); uni.navigateBack({delta: 1}); } catch (error: any) { console.error('验收失败:', error); diff --git a/pages-sub/problem/work-order-manage/index.vue b/pages-sub/problem/work-order-manage/index.vue index 22a1795..25f5bb0 100644 --- a/pages-sub/problem/work-order-manage/index.vue +++ b/pages-sub/problem/work-order-manage/index.vue @@ -107,7 +107,7 @@ 重新提交 + v-show="nextStepMap[item.taskKey]?.renewShow">重新提交 {{ diff --git a/pages-sub/problem/work-order-manage/order-detail.vue b/pages-sub/problem/work-order-manage/order-detail.vue index f47b5b8..c20f60a 100644 --- a/pages-sub/problem/work-order-manage/order-detail.vue +++ b/pages-sub/problem/work-order-manage/order-detail.vue @@ -256,14 +256,14 @@ - + 回退 重新提交 + v-show="nextStepMap[orderDetail.taskKey]?.renewShow">重新提交 {{