feat: 工作台外壳收尾 + 冻结旧导航 + 任务延迟创建与最近任务行菜单

外壳收尾
- 后端:内置「通用智能助手」(specialist.state = system)—— 它是任务的默认归属,
  不是可安装的专员,常规列表一律挡掉,只有显式带 state=system 才查得到
- config/nav.js:一级导航、二级 tab、搜索面板共用一份配置,替代原先散在 layout/ 与
  config/workbench.js 里的两套,旧的那批导航导出随之下架
- NavSearch.vue / SectionTabs.vue 组件化;考试 8 个页面收进 ExamTabsView 统一外壳
- 新增 /apps 专员选择页(SpecialistPickerPage.vue)
- ChatInputBar 重构:输入框的 + 拆为独立组件 PlusMenu.vue,新增 update:mode 事件
- 删除 LibraryTabs.vue(已被 SectionTabs 取代)

冻结旧导航(新增 frontend/src/_frozen/ + FROZEN.md 登记表)
- 工作区胶囊条连通知铃铛一起冻:外壳重构后成了冗余的第二套导航。不删代码,
  抽成自包含的 WorkspaceTabs.frozen.vue 归档,将来能原样放回
- 同源孤儿一并收拢:旧 SideNav / SectionTabs / navigation.js / Notification.vue
- 统一加 .frozen 后缀,登记表逐条写明原位置 / 冻结原因 / 外部依赖 / 解冻条件 / 解冻步骤
- 已验:冻结物不进构建产物(dist 里搜不到 wb-tabs),src/ 下无代码引用,
  只有 MainLayout 里指向 FROZEN.md 的指引注释
- 后端通知四接口与 store/api 层保留(BusinessAppPage 仍在用),解冻是纯前端工作量

我的任务
- 任务记录延迟到发出第一条消息时创建:新建任务只回到开场画布,不落库,
  标题取第一句话,专员取输入框 + 里先选的那个(pendingSpecialistKey 暂存,
  建任务时一并提交)。原实现点一次落一条「新任务」,是「最近任务」堆满空行的根因
- 最近任务行菜单:重命名(就地编辑,回车提交 / Esc 取消)、置顶、删除
  (硬删无回收站,确认框写明无法恢复)。新增 worker_task.pinned 字段、
  DELETE /api/worker/my-tasks/:id,列表排序改为 pinned DESC, updated_at DESC;
  el-dropdown 加 :persistent="false"(默认每行留一份隐藏菜单在 DOM 里)
- 对照 ChatGPT / WorkBuddy 后决定不做:分享任务(纯内网)、打开文件夹(Web 无此能力)、
  保存到工作空间(无 workspace 概念)、归档(没有「已归档」入口可找回)
- 当前任务高亮改用 WorkBuddy 绿;空列表给出「发送第一条消息后出现在这里」提示
- PROJECT_STATE.md 补记 D21(冻结机制)/ D22(延迟建任务)/ D23(行菜单)

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
eaiadmin
2026-09-14 16:19:18 +08:00
co-authored by Claude Code
parent 5c3d5987d9
commit f197dbd206
46 changed files with 3884 additions and 1377 deletions
+3
View File
@@ -62,6 +62,9 @@
| D18 | 突破原「极致极简/杜绝学情分析」边界:新增学员成长体系 = 学习积分+排行榜(游戏化)+ 考试证书(认证)+ 学习档案/能力雷达(学情,学员自助视角);积分规则集中常量可调 | 已定(V1.6 落地) |
| D19 | 部门组织架构(department 字典表,用户以 department 字符串归属、改名同步)+ 按部门学情统计;站内消息通知(考试发布/通过发证/设岗三事件);**社交社区/讨论区定死不做** | 已定(V1.7 落地) |
| D20 | 当前阶段产品路线收口为「先通用、后定制」:先做标准化通用数字员工产品包,不直接追 WorkBuddy 的高自由度路线;第一批优先沉淀知识运营、培训考试、内容生成、任务推进 4 个通用数字员工,后续再长行业包与企业半定制 | 已定(见 `docs/01_System_Overall/SY19_Universal_Digital_Worker_Product_Planning.md`) |
| D21 | 前端建立「冻结归档」机制:停用代码不删除,集中到 `frontend/src/_frozen/`(统一 `.frozen` 后缀 + `FROZEN.md` 登记表,逐条记录原位置/冻结原因/外部依赖/**解冻条件**/解冻步骤)。首批冻结:工作区胶囊条(外壳重构后成了冗余的第二套导航)及外壳重构遗留的四个孤儿文件。**D19 的站内通知只冻前端 UI** —— 后端四个接口保留,`store`/`api` 层保留(`BusinessAppPage` 仍在用),解冻为纯前端工作量 | 已定(见 `frontend/src/_frozen/FROZEN.md`) |
| D22 | 任务记录**延迟到发出第一条消息时创建**(对齐 WorkBuddy:新建任务只是导航动作,不落库)。「新建任务」只做「回到 /home 开场画布 + 清空当前任务」,任务标题由第一句话决定、专员取输入框 `+` 里先选的那个(`pendingSpecialistKey` 暂存,建任务时作为 `specialist_key` 一并提交,后端已支持)。**不允许存在没聊过天的空任务** —— 原实现点一次落一条 `新任务`,是「最近任务」堆满空行的根因 | 已定(V1.8 落地) |
| D23 | 侧边栏「最近任务」的行菜单(对齐 ChatGPT 悬停 `⋯` + WorkBuddy 任务卡「更多」):**重命名**(就地编辑,回车提交/Esc 取消)、**置顶**(新增 `worker_task.pinned`,排序 `pinned DESC, updated_at DESC`)、**删除**(新增 `DELETE /api/worker/my-tasks/:id`,硬删、无回收站,确认框写明「无法恢复」)。对照后**不做**:分享任务(纯内网无意义)、打开文件夹(Web 无此能力)、保存到工作空间(项目无 workspace 概念)、归档(没有「已归档」入口可找回,等于软删陷阱)。`el-dropdown` 加 `:persistent="false"` —— 默认每行留一份隐藏菜单在 DOM 里,50 条任务就是 50 份 | 已定 |
## 4. 文档索引