优化: 审批弹窗全局化与体验打磨
This commit is contained in:
+27
@@ -38,6 +38,15 @@
|
||||
仅在主窗口与 ai-detached 窗口挂载(file-explorer / approval-popup 自身不挂)。
|
||||
应用失焦/最小化时的系统级提示由 useApprovalPopup 启动的独立浮窗(approval-popup)负责。 -->
|
||||
<ApprovalOverlay v-if="showApprovalOverlay" @activate="activateAiPanel" />
|
||||
|
||||
<!-- 人工审批对话框(全局,任意路由响应 store.pendingApproval)。
|
||||
从 ProjectDetail.vue 提至 App.vue,TaskDetail 等无 ApprovalDialog 的页面自动受益。 -->
|
||||
<ApprovalDialog
|
||||
:visible="showApprovalDialog"
|
||||
:store="projectStore"
|
||||
@cancel="handleCancelApproval"
|
||||
@later="showApprovalDialog = false"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
@@ -50,6 +59,7 @@ import { useAppSettingsStore } from './stores/appSettings'
|
||||
import i18n from './i18n'
|
||||
import AiChat from './components/AiChat.vue'
|
||||
import ApprovalOverlay from './components/ai/ApprovalOverlay.vue'
|
||||
import ApprovalDialog from './components/project/ApprovalDialog.vue'
|
||||
import ErrorBoundary from './components/ErrorBoundary.vue'
|
||||
import AppLayout from './components/layout/AppLayout.vue'
|
||||
import { startApprovalPopup } from '@/composables/ai/useApprovalPopup'
|
||||
@@ -91,6 +101,23 @@ watch(() => projectStore.error, (err) => {
|
||||
errorTimer = setTimeout(() => { errorMsg.value = '' }, 3500)
|
||||
})
|
||||
|
||||
// ── 人工审批对话框(全局,P0-C:工作流推进到 HumanNode 审批时,任意页面都应能响应)──
|
||||
// 原 ProjectDetail 局部渲染 → TaskDetail 无 ApprovalDialog 致 store.pendingApproval 被设但
|
||||
// 用户在 TaskDetail 页无法操作 → HumanNode 超时失败。提到 App.vue 全局化:任何路由响应审批。
|
||||
// (系统级浮窗 useApprovalPopup 是窗口失焦时的提示;此处是聚焦时弹的对话框,二者职责互补)
|
||||
const showApprovalDialog = ref(false)
|
||||
watch(() => projectStore.pendingApproval, (newApproval) => {
|
||||
if (newApproval) {
|
||||
showApprovalDialog.value = true
|
||||
}
|
||||
}, { immediate: true })
|
||||
|
||||
// 取消审批(调 cancel_workflow_node IPC 置节点 Cancelled),与原 ProjectDetail.handleCancelApproval 对齐
|
||||
async function handleCancelApproval() {
|
||||
await projectStore.cancelHumanApproval()
|
||||
showApprovalDialog.value = false
|
||||
}
|
||||
|
||||
// 点击菜单自动退出最大化 → 切为分栏模式
|
||||
watch(() => route.path, (path) => {
|
||||
if (!['/', '/ai-home', '/ai-detached'].includes(path) && aiStore.state.maximized) {
|
||||
|
||||
Reference in New Issue
Block a user