From 3794b3d33323f0605cb1bcac252b3021f01aac39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=9D=E5=B0=98?= <237809796@qq.com> Date: Fri, 19 Jun 2026 11:44:03 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84:=20=E6=8B=86ProjectDetail?= =?UTF-8?q?=E5=AE=A1=E6=89=B9=E5=AF=B9=E8=AF=9D=E6=A1=86(strategy=E5=89=8D?= =?UTF-8?q?=E7=AB=AF)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新建 components/project/ApprovalDialog.vue(110行): 审批对话框+handleApproval/handleApprovalMulti/isMultipleSelect/multiDecisions+submitting(UX-260618-17防双击保留) - ProjectDetail.vue 811→743(-68): template→ + 删迁移script - props visible/store透传 + emit cancel/later(单一store源 _storeInstance) 主代兜底: vue-tsc 0 + grep ApprovalDialog抽离/ProjectDetail import/emit印证 strategy: 前端views, 子组件抽审批对话框; UX-260618-17 submitting保留; 余743(style 315逻辑428, 后续TaskList/InfoCard可拆) git add指定(ProjectDetail.vue+ApprovalDialog.vue) --- src/components/project/ApprovalDialog.vue | 110 ++++++++++++++++++++++ src/views/ProjectDetail.vue | 92 +++--------------- 2 files changed, 122 insertions(+), 80 deletions(-) create mode 100644 src/components/project/ApprovalDialog.vue diff --git a/src/components/project/ApprovalDialog.vue b/src/components/project/ApprovalDialog.vue new file mode 100644 index 0000000..5b9b979 --- /dev/null +++ b/src/components/project/ApprovalDialog.vue @@ -0,0 +1,110 @@ + + + diff --git a/src/views/ProjectDetail.vue b/src/views/ProjectDetail.vue index bf113c6..7ec758c 100644 --- a/src/views/ProjectDetail.vue +++ b/src/views/ProjectDetail.vue @@ -172,57 +172,13 @@ - - + + @@ -241,6 +197,7 @@ import { formatDate } from '@/utils/time' import { parseStack } from '@/utils/project' import { projectStatusLabel, projectStageInfo, taskStatusLabel, taskStatusClass } from '../constants/project' import ConfirmDialog from '@/components/ConfirmDialog.vue' +import ApprovalDialog from '@/components/project/ApprovalDialog.vue' import { useConfirm } from '@/composables/useConfirm' import { useRendered } from '@/composables/useMarkdown' @@ -414,32 +371,9 @@ async function handleImportDir() { } // ── 审批处理 ── -async function handleApproval(decision: string) { - submitting.value = true - try { - await store.approveHumanApproval([decision]) - showApprovalDialog.value = false - } finally { - submitting.value = false - } -} - -// F-260615-01: 多选审批 -const isMultipleSelect = computed(() => store.pendingApproval?.select_type === 'multiple') -const multiDecisions = ref([]) - -async function handleApprovalMulti() { - if (multiDecisions.value.length === 0) return - submitting.value = true - try { - // 统一传 decisions 数组,store 按 select_type 分派单/多选 - await store.approveHumanApproval([...multiDecisions.value]) - multiDecisions.value = [] - showApprovalDialog.value = false - } finally { - submitting.value = false - } -} +// 审批对话框 UI + 单/多选决策逻辑抽离至 components/project/ApprovalDialog.vue +// handleApproval/handleApprovalMulti/isMultipleSelect/multiDecisions 已迁移; +// submitting(UX-260618-17)在子组件自治,父级 submitting 仅用于 submitNewTask // ── 取消审批(调 cancel_workflow_node IPC 置节点 Cancelled)── async function handleCancelApproval() { @@ -461,11 +395,9 @@ watch(formattedEvents, () => { if (logListRef.value) logListRef.value.scrollTop = logListRef.value.scrollHeight }) -// 监听审批请求 +// 监听审批请求(pendingApproval → 开弹窗;多选清空已在 ApprovalDialog 内 watch) watch(() => store.pendingApproval, (newApproval) => { if (newApproval) { - // F-260615-01: 每次新审批清空多选状态(避免上轮残留) - multiDecisions.value = [] showApprovalDialog.value = true } }, { immediate: true })