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

@@ -0,0 +1,121 @@
<script setup lang="ts">
import WorkbenchModuleCard from './workbench-module-card.vue';
defineOptions({ name: 'WorkbenchMentions' });
interface Props {
editing?: boolean;
collapsed?: boolean;
}
withDefaults(defineProps<Props>(), { editing: false, collapsed: false });
defineEmits<{ (e: 'hide'): void; (e: 'toggle-collapse'): void }>();
interface MentionItem {
id: string;
fromName: string;
fromAvatar: string;
context: string;
timeLabel: string;
unread: boolean;
}
const items: MentionItem[] = [
{
id: 'm1',
fromName: '李四',
fromAvatar: '李',
context: '在 任务「分片设计评审」中 @ 了你',
timeLabel: '2h 前 · 评审建议',
unread: true
},
{
id: 'm2',
fromName: '张三',
fromAvatar: '张',
context: '在 执行「迭代 24.05」中 @ 了你',
timeLabel: '昨日 · 关闭确认',
unread: true
},
{
id: 'm3',
fromName: '王五',
fromAvatar: '王',
context: '在 需求「多币种支持」中 @ 了你',
timeLabel: '3 天前',
unread: true
}
];
const unreadCount = items.filter(i => i.unread).length;
</script>
<template>
<WorkbenchModuleCard
title="@我的提及"
icon="mdi:at"
:badge-count="unreadCount"
:editing="editing"
:collapsed="collapsed"
@hide="$emit('hide')"
@toggle-collapse="$emit('toggle-collapse')"
>
<ul class="mention-list">
<li v-for="item in items" :key="item.id" class="mention-item">
<span class="mention-avatar">{{ item.fromAvatar }}</span>
<div class="mention-body">
<div class="mention-text">
<strong>{{ item.fromName }}</strong>
{{ item.context }}
</div>
<div class="mention-meta">{{ item.timeLabel }}</div>
</div>
</li>
</ul>
</WorkbenchModuleCard>
</template>
<style scoped>
.mention-list {
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
gap: 8px;
}
.mention-item {
display: flex;
gap: 10px;
padding: 10px 12px;
border: 1px solid var(--el-border-color-lighter);
border-radius: 8px;
background: var(--el-fill-color-blank);
}
.mention-avatar {
flex-shrink: 0;
width: 32px;
height: 32px;
border-radius: 50%;
background: var(--el-color-primary-light-8);
color: var(--el-color-primary);
display: flex;
align-items: center;
justify-content: center;
font-weight: 600;
font-size: 13px;
}
.mention-body {
min-width: 0;
flex: 1;
}
.mention-text {
font-size: 13px;
line-height: 1.5;
color: var(--el-text-color-primary);
}
.mention-meta {
font-size: 12px;
color: var(--el-text-color-secondary);
margin-top: 4px;
}
</style>