refactor(project): 重构项目执行模块组件结构和数据管理

- 移除 execution-list-panel.vue 组件并将功能整合到执行区域
- 新增 execution-section.vue 组件替代原有的列表面板
- 将 task-workspace.vue 重命名为 task-workspace-comp.vue 并更新引用
- 引入 useTaskViewContext 组合式 API 进行任务视图上下文管理
- 添加跨执行任务状态统计接口调用和数据处理逻辑
- 重构执行状态筛选和任务创建权限判断逻辑
- 更新执行选择、搜索和重置功能的事件处理方式
- 调整页面布局结构,优化左右分栏的内容组织方式
- 完善执行详情获取和状态操作的业务流程
- 优化执行分配和状态变更的异步处理机制
This commit is contained in:
2026-05-23 14:22:58 +08:00
parent 13b74cfe97
commit e9214137c1
40 changed files with 4432 additions and 1419 deletions

View File

@@ -2,19 +2,36 @@ import type { Component } from 'vue';
import { markRaw, shallowRef } from 'vue';
export type WorkbenchModuleKey =
| 'kpi'
| 'myTodo'
| 'myTask'
| 'myRequirement'
| 'myProject'
| 'activity'
| 'shortcut'
| 'teamTodo'
| 'projectHealth'
| 'progressChart'
| 'favorite';
// 保留:现有 key 沿用(避免影响线上用户布局存储)
| 'myTodo' // A1 · 我的待办
| 'myRequirement' // B9 · 我的需求
| 'myProject' // B7 · 我参与的项目
| 'shortcut' // E19 · 快捷入口
| 'projectHealth' // C15 · 产品 / 项目健康度
| 'favorite' // E21 · 我的收藏 / 关注
// 重构key 沿用,组件内容重写)
| 'myTask' // A2 · 我的今日(原"我的任务"
| 'teamTodo' // C11 · 团队任务看板(原"团队待办汇总"
// 新增 16 个(蓝图 2026-05-22
| 'myTicket' // A3 · 我负责的工单(工单待开发,先 mock
| 'mentions' // A4 · @我的提及
| 'approval' // A5 · 待审批(管理者)
| 'worklogReminder' // A6 · 工时填报提醒(动作型)
| 'myExecution' // B8 · 我负责的执行
| 'personalItem' // B10 · 我的个人事项
| 'projectSnapshot' // F23 · 项目深度快照(对象快照 / pin
| 'productSnapshot' // F24 · 产品深度快照(对象快照 / pin
| 'teamWorklog' // C12 · 团队工时分布(管理者)
| 'teamLoad' // C13 · 团队负载(管理者)
| 'riskAlert' // C14 · 风险预警(管理者)
| 'myWeekWorklog' // D16 · 我的本周工时
| 'myCompletionRate' // D17 · 我的完成率
| 'ticketSla' // D18 · 工单 SLA 总览(管理者 + 工单待开发)
| 'recentVisit' // E20 · 最近访问
| 'noticeNotification'; // E22 · 公告 + 通知摘要
export type WorkbenchModuleCategory = 'personal' | 'manager' | 'tool';
// 扩展action动作型 widget、snapshot对象快照型 widget需 pin 一个对象)
export type WorkbenchModuleCategory = 'personal' | 'manager' | 'tool' | 'action' | 'snapshot';
export type WorkbenchColumnId = 'left' | 'right';
export interface WorkbenchModuleMeta {
@@ -31,16 +48,7 @@ export interface WorkbenchModuleMeta {
const placeholder = markRaw({ render: () => null });
const registry: WorkbenchModuleMeta[] = [
{
key: 'kpi',
component: placeholder,
displayName: 'KPI 速览',
icon: 'mdi:view-dashboard-outline',
category: 'personal',
defaultVisible: true,
defaultColumn: 'left',
defaultOrder: 1
},
// === 保留 6 个:默认布局沿用原配置,用户线上布局 0 影响 ===
{
key: 'myTodo',
component: placeholder,
@@ -49,17 +57,17 @@ const registry: WorkbenchModuleMeta[] = [
category: 'personal',
defaultVisible: true,
defaultColumn: 'left',
defaultOrder: 2
defaultOrder: 1
},
{
key: 'myTask',
component: placeholder,
displayName: '我的任务',
icon: 'mdi:checkbox-marked-circle-outline',
displayName: '我的今日',
icon: 'mdi:calendar-check-outline',
category: 'personal',
defaultVisible: true,
defaultColumn: 'left',
defaultOrder: 3
defaultOrder: 2
},
{
key: 'myRequirement',
@@ -69,7 +77,7 @@ const registry: WorkbenchModuleMeta[] = [
category: 'personal',
defaultVisible: true,
defaultColumn: 'left',
defaultOrder: 4
defaultOrder: 3
},
{
key: 'myProject',
@@ -81,16 +89,6 @@ const registry: WorkbenchModuleMeta[] = [
defaultColumn: 'right',
defaultOrder: 1
},
{
key: 'activity',
component: placeholder,
displayName: '最近动态',
icon: 'mdi:timeline-outline',
category: 'personal',
defaultVisible: true,
defaultColumn: 'right',
defaultOrder: 2
},
{
key: 'shortcut',
component: placeholder,
@@ -99,47 +97,199 @@ const registry: WorkbenchModuleMeta[] = [
category: 'tool',
defaultVisible: true,
defaultColumn: 'right',
defaultOrder: 3
},
{
key: 'teamTodo',
component: placeholder,
displayName: '团队待办汇总',
icon: 'mdi:account-group-outline',
category: 'manager',
defaultVisible: false,
defaultColumn: 'right',
defaultOrder: 4
defaultOrder: 2
},
{
key: 'projectHealth',
component: placeholder,
displayName: '项目健康度',
displayName: '产品 / 项目健康度',
icon: 'mdi:heart-pulse',
category: 'manager',
defaultVisible: false,
defaultColumn: 'right',
defaultOrder: 5
defaultOrder: 10
},
{
key: 'progressChart',
key: 'teamTodo',
component: placeholder,
displayName: '跨项目进度图',
icon: 'mdi:chart-bar',
displayName: '团队任务看板',
icon: 'mdi:view-column-outline',
category: 'manager',
defaultVisible: false,
defaultColumn: 'right',
defaultOrder: 6
defaultOrder: 11
},
{
key: 'favorite',
component: placeholder,
displayName: '我的收藏',
displayName: '我的收藏 / 关注',
icon: 'mdi:star-outline',
category: 'tool',
defaultVisible: false,
defaultColumn: 'right',
defaultOrder: 7
defaultOrder: 30
},
// === 新增 16 个:默认全部 hidden进 widget 库待用户挑(避免一上来挤爆工作台) ===
{
key: 'myTicket',
component: placeholder,
displayName: '我负责的工单',
icon: 'mdi:ticket-confirmation-outline',
category: 'personal',
defaultVisible: false,
defaultColumn: 'left',
defaultOrder: 20
},
{
key: 'mentions',
component: placeholder,
displayName: '@我的提及',
icon: 'mdi:at',
category: 'personal',
defaultVisible: false,
defaultColumn: 'left',
defaultOrder: 21
},
{
key: 'approval',
component: placeholder,
displayName: '待审批',
icon: 'mdi:checkbox-multiple-marked-outline',
category: 'manager',
defaultVisible: false,
defaultColumn: 'left',
defaultOrder: 22
},
{
key: 'worklogReminder',
component: placeholder,
displayName: '工时填报提醒',
icon: 'mdi:timer-sand',
category: 'action',
defaultVisible: false,
defaultColumn: 'right',
defaultOrder: 20
},
{
key: 'myExecution',
component: placeholder,
displayName: '我负责的执行',
icon: 'mdi:flag-checkered',
category: 'personal',
defaultVisible: false,
defaultColumn: 'left',
defaultOrder: 23
},
{
key: 'personalItem',
component: placeholder,
displayName: '我的个人事项',
icon: 'mdi:format-list-checks',
category: 'personal',
defaultVisible: false,
defaultColumn: 'left',
defaultOrder: 24
},
{
key: 'projectSnapshot',
component: placeholder,
displayName: '项目深度快照',
icon: 'mdi:image-area',
category: 'snapshot',
defaultVisible: false,
defaultColumn: 'left',
defaultOrder: 40
},
{
key: 'productSnapshot',
component: placeholder,
displayName: '产品深度快照',
icon: 'mdi:image-area-close',
category: 'snapshot',
defaultVisible: false,
defaultColumn: 'left',
defaultOrder: 41
},
{
key: 'teamWorklog',
component: placeholder,
displayName: '团队工时分布',
icon: 'mdi:chart-bar',
category: 'manager',
defaultVisible: false,
defaultColumn: 'right',
defaultOrder: 12
},
{
key: 'teamLoad',
component: placeholder,
displayName: '团队负载',
icon: 'mdi:scale-balance',
category: 'manager',
defaultVisible: false,
defaultColumn: 'right',
defaultOrder: 13
},
{
key: 'riskAlert',
component: placeholder,
displayName: '风险预警',
icon: 'mdi:alert-octagon-outline',
category: 'manager',
defaultVisible: false,
defaultColumn: 'right',
defaultOrder: 14
},
{
key: 'myWeekWorklog',
component: placeholder,
displayName: '我的本周工时',
icon: 'mdi:chart-line',
category: 'personal',
defaultVisible: false,
defaultColumn: 'left',
defaultOrder: 25
},
{
key: 'myCompletionRate',
component: placeholder,
displayName: '我的完成率',
icon: 'mdi:chart-donut',
category: 'personal',
defaultVisible: false,
defaultColumn: 'left',
defaultOrder: 26
},
{
key: 'ticketSla',
component: placeholder,
displayName: '工单 SLA 总览',
icon: 'mdi:timer-alert-outline',
category: 'manager',
defaultVisible: false,
defaultColumn: 'right',
defaultOrder: 15
},
{
key: 'recentVisit',
component: placeholder,
displayName: '最近访问',
icon: 'mdi:history',
category: 'tool',
defaultVisible: false,
defaultColumn: 'right',
defaultOrder: 31
},
{
key: 'noticeNotification',
component: placeholder,
displayName: '公告 + 通知',
icon: 'mdi:bullhorn-outline',
category: 'tool',
defaultVisible: false,
defaultColumn: 'right',
defaultOrder: 32
}
];