Commit Graph

204 Commits

Author SHA1 Message Date
Script Generator
b48a7e2049 feat(小宝预警): 增加日报证据与风险趋势 2026-06-29 18:05:58 +08:00
Script Generator
585316d1cf fix(小宝预警): 接入静默风险证据 2026-06-29 17:49:52 +08:00
Script Generator
ffe7001b42 fix(小宝预警): 透传风险日报证据 2026-06-29 17:42:06 +08:00
Script Generator
7b3638c915 feat(小宝预警): 增加版本风险预测引擎 2026-06-29 17:35:45 +08:00
Script Generator
ea360c74d6 fix(小宝预警): 限定角色权限迁移范围 2026-06-29 17:22:12 +08:00
Script Generator
46a002f817 feat(小宝预警): 增加权限与数据键 2026-06-29 17:13:54 +08:00
Script Generator
7f24e16491 feat(ai): 优化拆解目标和负责人推荐 2026-06-29 16:19:52 +08:00
Script Generator
0e27a4d4c5 fix(加班): 统一日期选择与耗时口径 2026-06-29 15:42:49 +08:00
Script Generator
8a1726c426 feat(需求池): 调整需求池布局与详情展示 2026-06-29 15:07:07 +08:00
Script Generator
aa6970876a fix(工时): 按中国工作日历统计正常耗时 2026-06-29 15:04:32 +08:00
Script Generator
47f41c3e40 fix(workspace): 修复今日日报刷新后丢失 2026-06-29 14:39:41 +08:00
Script Generator
0f64a17d44 feat(版本详情): 接入计划时间与日期选择 2026-06-29 14:18:58 +08:00
Script Generator
4278e4d565 feat(workspace): 增加工作活动日报引擎 2026-06-26 17:17:35 +08:00
Script Generator
64491789ae feat(version): 增加参与人员AI推荐 2026-06-26 17:07:09 +08:00
Script Generator
662154ca92 feat(workspace): 增加个人今日日报列 2026-06-26 16:04:48 +08:00
Script Generator
6f13ff325b docs(format): 修正本地日期注释 2026-06-26 15:50:30 +08:00
Script Generator
d9b0236d1c fix(workspace): 使用本地日期生成今日日报 2026-06-26 15:43:31 +08:00
Script Generator
b5ac0a2d47 feat(version): 优化参与人员添加体验 2026-06-26 15:33:07 +08:00
Script Generator
8c3fec221b feat(workspace): 在工作台接入今日日报列 2026-06-26 15:19:42 +08:00
Script Generator
2d802318fa feat(版本详情): 优化任务统计与测试轮次 2026-06-26 15:12:24 +08:00
Script Generator
952e13677c fix(workspace): 优化今日日报侧栏文本展示 2026-06-26 15:10:44 +08:00
Script Generator
17dd4afada feat(workspace): 添加今日日报侧栏组件 2026-06-26 14:58:32 +08:00
Script Generator
6b965429ce feat(workspace): 添加个人日报派生逻辑 2026-06-26 14:40:37 +08:00
Script Generator
4dcdad50c3 feat(产品方案): 优化计划卡片展示和排序 2026-06-26 14:05:01 +08:00
Script Generator
dde7a9a623 fix(version): 修正概览耗时与排名统计 2026-06-26 13:06:22 +08:00
Script Generator
4cda624dc7 fix(账号): 固化超级管理员身份 2026-06-26 11:18:00 +08:00
Script Generator
56e0fe562d feat(ai): 优化拆解重跑与结果展示 2026-06-26 11:01:11 +08:00
Script Generator
55e24442ab fix(任务): 修复快速创建导致的重复ID 2026-06-25 18:03:53 +08:00
Script Generator
5adc7759ad feat(平台): 补齐服务端持久化和AI拆解契约 2026-06-25 15:21:32 +08:00
Script Generator
5723356d08 feat(测试用例): 展示预估和实际耗时 2026-06-25 14:55:45 +08:00
Script Generator
88acf30296 feat(AI): 增加严格估时策略 2026-06-25 14:50:43 +08:00
Script Generator
125057ea55 feat(Bug): 状态流转接入单条工作流 2026-06-25 14:47:28 +08:00
Script Generator
c617625a99 feat(测试用例): 状态流转接入单条工作流 2026-06-25 14:13:32 +08:00
Script Generator
52833d81ac feat(开发任务): 状态流转接入单条工作流 2026-06-25 14:04:45 +08:00
Script Generator
168c748835 feat(工时): 增加通用工时汇总引擎 2026-06-25 13:59:09 +08:00
Script Generator
d0fd390bd0 fix: 创建产品后要刷新才出现 + 刷新后已有产品的项目被清空
根因:
1. createProduct try 路径调 fetchOverview,但 fetchOverview 第 103 行
   `if (overview.length > 0) return` 直接 early return,导致新产品没被加进
   overview,需刷新才能从 localStorage 重读。
2. fetchOverview 在 cached 已有数据时仍会调 api.get 拉远端,远端 mock
   返回简化数据(无 projects)覆盖整个 overview,导致已有产品下的项目消失。

修复(mock 模式核心数据完全本地化):
- createProduct:直接本地新增 + saveLocal,异步尝试远端但不依赖(不再调
  fetchOverview)
- fetchOverview:cached 有数据时直接用,不再调远端覆盖;空时才走远端/MOCK 路径

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-17 11:23:39 +08:00
Script Generator
cad190d83b feat: 项目模块加删除按钮(仅超管 + 无版本可删)
- useProductStore 加 deleteProject(productId, projectId) action
- ProjectRow 行右侧加三点菜单(MoreHorizontal)+ 下拉项「删除项目」
- 项目下有版本时菜单项 disabled + tooltip「项目下还有 N 个版本,不可删除」
- 仅有 project:delete 权限的角色(默认仅超管)能看到三点 icon
- 点击删除 → confirm → 调 deleteProject

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-17 11:11:19 +08:00
Script Generator
53ae3f02a5 fix: 新建需求漏传 status 字段导致状态/操作按钮不显示
根因:RequirementModal.handleSubmit 提交时漏传 status,store
createRequirement 也无默认值,落库 status 为 undefined。
page.tsx 的所有操作按钮均按 req.status === '...' 判断,
undefined 不匹配任何分支 → 所有按钮消失;REQ_STATUS_LABEL[undefined]
也是 undefined → 状态列空白。

修复(双兜底,二选一就够,但都改更稳):
- RequirementModal.tsx: handleSubmit 加 status: initial?.status ?? 'pending_review'
- useRequirementStore.ts: createRequirement 加 status: data.status ?? 'pending_review'

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-16 20:55:04 +08:00
Script Generator
75519fd4e3 fix: 需求池操作矩阵微调 + 来源管理 bug 修复
需求池:
- 已采纳状态去掉「删除」操作(推进后不应直接删除,要走拒绝路径)

来源管理:
- 清空预设 mock 数据(海底捞/西贝/喜茶/奈雪等 17 条),用户自己维护
- 修复新建需求选「新建的来源对象」时显示数字 ID bug:
  原因是 RequirementModal 里 <option value={t.id}> 存了 ID,但 mock
  和详情页直接读 sourceTarget 当名字展示,导致新建的对象只显示 ID。
  改为 <option value={t.name}> 与 mock 数据格式对齐

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-16 20:39:03 +08:00
Script Generator
d1b4d81a75 feat: 个人中心 UI 改版(Banner + 大头像 + 卡片化)
从孤立白卡改为 GitHub/Notion 风格个人页:
- 顶部 h-40 渐变 Banner(主色到 hover 色),左下 80px 圆头像 + ring 描边
- Banner 内显示姓名/角色·部门/手机·邮箱,右上白底透明退出按钮
- max-w-3xl 卡片居中:标题 + 副标题(如「修改后立即生效」)+ 字段单栏堆叠
- 保存按钮加 spinner(提交中)+ 已保存绿色文字带 Check icon 3 秒淡出
- refreshUser 后 Banner 立即同步新名字/邮箱
- 不考虑移动端

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-16 20:26:22 +08:00
Script Generator
7c49868c4f feat: 个人中心管理(编辑信息 + 修改密码 + 退出登录)
- 新增 /profile 路由:两个 Tab(个人信息 / 修改密码)+ 退出按钮
- Sidebar 底部用户区改造:绑定真实登录用户(头像/姓名/角色)+ 加 Settings icon 跳 /profile
- useAuthStore 加 refreshUser:保存信息后立即同步 Sidebar 显示
- 个人信息表单:姓名/手机/邮箱可改,部门/角色只读,复用 updateMember
- 密码修改:原密 + 新密(≥8位且≠原密) + 确认 三档校验,眼睛 icon 切换可见,下次登录生效
- 退出登录:confirm → useAuthStore.logout → /login

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-16 19:51:22 +08:00
Script Generator
c2f2fed82c feat: 加班/版本/项目调整 + 角色权限设计
加班记录:
- 加班人默认回显当前用户且不可改
- 列表加创建日期列
- 移除编辑功能(创建即提交,仅可删除)
- 提交时校验结束>开始

版本列表:
- 移除顶部 9 个状态 tab + 表格状态列
- 仅保留搜索、项目、优先级筛选

项目列表:
- 行内显示进度未达 100% 的版本(与版本页同源算法)
- 新增 lib/version-progress.ts 抽出公共进度计算

角色权限:
- RoleItem 加 permissions 字段
- 新建 lib/permissions.ts: 14 组 37 个权限点 + 默认 5 角色映射 + hasPermission
- 角色表单内嵌权限矩阵(主模块 4 件套 + Tab 二档 + Bug Tab 4 档)+ 全选/反选/仅查看快捷
- 新建 components/auth/Guard.tsx: RouteGuard + PermissionGuard + useHasPermission + AccessDenied
- Sidebar 菜单按 view 权限过滤
- 7 个主路由(products/projects/versions/requirements/overtime/admin/members/roles)包 RouteGuard
- 版本详情 Tab 按 view 权限过滤,自动跳转到第一个有权限的 Tab
- 默认未登录/无角色按只读最严格
- 超管 role-admin: ['*'] 通配符,permissions 不可改

通用:
- 新建 components/FieldError.tsx 统一表单错误文案
- PlanTab 提交时校验结束>开始

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-16 19:15:28 +08:00
Script Generator
1f5bed0c79 feat: 开发任务时间字段重构 + 双口径耗时 + 搜索 + 性能优化
核心变更:
- DevTask 字段重构:startDate/dueDate/estimateHours/actualHours 替换为 expectedStartAt/expectedEndAt/actualStartAt/actualEndAt(含时分),预计/实际工时按工作时段(9:00-12:00 + 13:00-18:00)派生计算
- 状态机自动化:到点自动切开发中、未到可手动开干、超期需填延后原因
- 新建 lib/work-hours.ts:calcWorkHours(工作时段过滤)、formatWorkHours(X h(Y 天))、calcTwoMetrics(日历/人力双口径)
- 新建 lib/dev-task-transitions.ts:状态切换守卫
- 三个 Tab 顶部统计:开发任务(预/日历/人力)、测试用例 / Bug(日历 / 人力);版本概览总人天投入改双行(日历总耗时 / 人力总投入)
- 三个 Tab 加搜索框:300ms debounce + 标题/编号模糊匹配
- 性能优化:requirementIds/categories/requirements/testCases 转 Map/Set 索引、Row 组件 React.memo
- 全局耗时显示统一带天数换算:8h(1天)、11h(1.4天)

新增文件: SearchInput.tsx, useDebouncedValue.ts, work-hours.ts, dev-task-transitions.ts, 设计文档

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-16 17:44:59 +08:00
Script Generator
4ac0dab4c5 fix: 时间显示统一使用本地时区(修复UTC显示问题)
之前 ISO 时间戳直接 slice(0, 16).replace('T', ' ') 显示 UTC 时间
(北京时间晚 8 小时),现统一用 formatDateTime 转本地时区。

新增 lib/format.ts:
- formatDateTime(iso) → YYYY-MM-DD HH:mm(本地时区)
- formatDate(iso) → YYYY-MM-DD(本地时区)
- formatDateTimeShort(iso) → MM-DD HH:mm(本地时区)

替换文件:
- versions/[id]/page.tsx (实际开始/截止)
- workspace/page.tsx (计划任务时间)
- BugDetailDrawer.tsx (基本信息+操作日志)
- TestCaseDetailDrawer.tsx (执行时间)
- DevTaskDetailDrawer.tsx (开始/提测时间)
- PlanDetailDrawer.tsx (计划/实际/完成时间)
- PlanTab.tsx (计划任务列表时间)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-16 14:15:20 +08:00
Script Generator
6d2f6d8b9f docs+fix: 4份核心文档 + 项目模块版本记录数据全联动
文档:
- architecture.md - 整体架构、心智模型、关键设计原则
- decisions.md - 16条关键决策记录(含为什么)
- workflow.md - 工作流程和协作偏好
- roadmap.md - V1/V2/V3 路线图和已完成清单

修复项目详情版本记录:
1. 状态胶囊数据联动(开发中分支也补传 stageProgress)
2. 日期数据联动:
   - 实际开始 = 取所有阶段最早 actualStartAt/startDate/startedAt
   - 实际截止 = 取所有阶段最晚 completedAt/closedAt
   - 数据完全和版本详情一致

VersionCard 的 versionData useMemo 增加 actualStart/actualEnd 派生字段,
两种状态分支(developing/released)都使用派生值,不再用静态 version.startDate

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-16 12:40:10 +08:00
Script Generator
4b05e09dab fix: 项目详情顶部卡片 + 版本记录耗时和状态胶囊与版本详情联动
1. 顶部卡片从 6 个改为 4 个:
   - 总版本数、已开发、需求数、Bug 总数
   - 去掉重复的进行中、总耗时(天)、加班(h)
   - bugCount 从 useBugStore 实时统计

2. 版本记录里的耗时与版本详情联动:
   - 不再用 version.startDate 简单计算
   - 改用版本详情同样的算法:取所有阶段最早实际开始
     (plans.actualStartAt / devTasks.startDate / testCases.startedAt)
   - 数据完全一致

3. 版本记录里的状态胶囊与版本详情联动:
   - 之前 <CapsuleStages /> 不传任何数据,永远空胶囊
   - 现在传入 stageProgress (与版本详情同样算法)
   - 调研/产品/UI/开发/测试/BUG 各阶段进度一致

VersionCard 接收 plans/devTasks/testCases/bugs/requirements
useMemo 派生 versionData 和 stageProgress

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-16 11:52:39 +08:00
Script Generator
57e55b6788 fix: 修复录入人员不显示 + 状态列改名区分
1. 录入人员字段(creator):
   - RequirementModal 新增 currentUserName prop
   - handleSubmit 自动填入 creator
   - 编辑时保留原有 creator,新建时取当前登录用户
   - 修复"新建需求后录入人员为空"的 bug

2. 表格状态列改名(消除混淆):
   - "状态" → "业务状态"(req.status,业务流转)
   - "开发状态" → "实际进度"(从 DevTask 派生)
   - 两个含义不同的状态不再叫同一个名字

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-15 19:26:16 +08:00
Script Generator
a3099f6952 feat: 产品页面去掉规划中 + 项目名和版本可点击跳转
1. 移除"规划中"状态:
   - 去掉顶部图例的"规划中"
   - activeVersions 过滤改为只显示 status === 'developing'
   - 项目展开列表中的 projActive 同步只取 developing

2. 项目名可点击跳转:
   - 项目名改为按钮样式,点击跳转 /projects/{id}
   - hover 显示蓝色下划线

3. 版本胶囊可点击跳转:
   - VersionChip 包裹按钮,点击跳转 /versions/{id}
   - hover 半透明效果

4. 数据联动:
   - 不再展示规划中的版本(视觉简洁)
   - 点击直达对应详情页,方便快速访问

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-15 18:29:58 +08:00
Script Generator
fa7a0f7294 fix: 侧边详情显示产品/项目/版本上下文
所有 Drawer 新增 contextLabel 可选属性:
- 从工作台打开时传入"产品 / 项目 / 版本"路径
- 显示在 Drawer 顶部灰色背景条中
- 从版本详情打开时不传,不显示(无需冗余)
- 统一样式:px-5 py-2 bg-[var(--bg-subtle)] text-[11px]

涉及组件:
- PlanDetailDrawer
- DevTaskDetailDrawer
- TestCaseDetailDrawer
- BugDetailDrawer

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-15 17:52:15 +08:00
Script Generator
c7bccd7819 fix: 测试用例提Bug按钮 + 全局侧边栏阴影统一
1. 测试用例"提 BUG"按钮接入工作台:
   - TestCaseDetailDrawer 传入 onCreateBug callback
   - 点击"提 BUG"关闭测试详情,弹出 BugCreateModal
   - 创建后 Bug 自动关联该测试用例

2. 全局侧边弹窗阴影统一为 shadow-2xl:
   - PlanDetailDrawer: shadow-2xl ✓
   - DevTaskDetailDrawer: shadow-[var(--shadow-lg)] → shadow-2xl
   - TestCaseDetailDrawer: shadow-[var(--shadow-lg)] → shadow-2xl
   - BugDetailDrawer: shadow-[var(--shadow-lg)] → shadow-2xl
   - 所有 Drawer 样式一致,阴影明显

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-15 17:45:09 +08:00