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 })