Files
ccdi/docs/plans/frontend/2026-03-26-results-overview-project-analysis-dialog-display-fix-frontend-implementation.md

314 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Results Overview Project Analysis Dialog Display Fix Frontend Implementation Plan
> **For agentic workers:** REQUIRED: Use superpowers:executing-plans to implement this plan. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** 在不改动结果总览入口、路由和后端接口的前提下,修正“项目分析”弹窗的展示问题,明确解决顶部留白过大、左右布局比例失衡、右侧独立滚动割裂、左侧侧栏被拉满以及左下角核心异常标签显示不全的问题。
**Architecture:** 保持 `PreliminaryCheck.vue` 作为唯一入口,不新增页面、不改数据链路。实现收敛在 `ProjectAnalysisDialog.vue``ProjectAnalysisSidebar.vue``ProjectAnalysisAbnormalTab.vue``ProjectAnalysisPlaceholderTab.vue` 四个组件内按“TDD 锁契约 -> 最小样式与结构改造 -> 聚焦回归 -> 补文档记录”的顺序推进。滚动策略统一改为弹窗内容区单一纵向滚动,左侧档案栏按内容自然高度展开,当前命中模型并入头带。
**Tech Stack:** Vue 2, Element UI, SCSS, Node.js
---
### Task 1: 锁定弹窗尺寸、头带和统一滚动契约
**Files:**
- Modify: `ruoyi-ui/tests/unit/project-analysis-dialog-layout.test.js`
- Modify: `ruoyi-ui/tests/unit/project-analysis-dialog-source-highlight.test.js`
- Modify: `ruoyi-ui/tests/unit/project-analysis-dialog-default-tab.test.js`
- Modify: `ruoyi-ui/src/views/ccdiProject/components/detail/ProjectAnalysisDialog.vue`
- [ ] **Step 1: Write the failing test**
在 3 个现有单测中补充断言,锁定以下契约:
- 弹窗尺寸明显放大,不再保留当前 `width="80%"``top="5vh"` 组合
- 不再存在 `project-analysis-shell`
- 存在头带容器,例如 `project-analysis-header`
- “当前命中模型”并入头带,不再保留主区顶部 `source-summary`
- 不再存在 `project-analysis-layout__main-scroll`
- 不再存在 `overflow-y: auto``max-height: calc(90vh - 120px)` 这种右侧独立滚动实现
- 关闭后再次打开仍默认回到 `异常明细`
示例断言片段:
```js
assert(source.includes("project-analysis-header"), "缺少弹窗头带");
assert(!source.includes('width="80%"'), "不应继续使用 80% 宽度");
assert(!source.includes('top="5vh"'), "不应继续保留过大的顶部空白");
assert(!source.includes("project-analysis-layout__main-scroll"), "不应继续保留右侧独立滚动容器");
assert(!source.includes('class="source-summary"'), "当前命中模型不应继续占用主区独立一行");
```
- [ ] **Step 2: Run test to verify it fails**
Run:
```bash
cd ruoyi-ui
node tests/unit/project-analysis-dialog-layout.test.js
node tests/unit/project-analysis-dialog-source-highlight.test.js
node tests/unit/project-analysis-dialog-default-tab.test.js
```
Expected:
- `FAIL`
- [ ] **Step 3: Write minimal implementation**
`ProjectAnalysisDialog.vue` 中完成最小结构改造:
- 放大弹窗宽高占比并压缩顶部空白
- 删除 `project-analysis-shell`
- 新增“头带 + 主体工作区”的单一主壳结构
- 将“当前命中模型”并入头带
- 去掉右侧独立滚动容器,让弹窗内容区统一滚动
- 保持现有详情请求、错误态、重试和默认页签行为不变
- [ ] **Step 4: Run test to verify it passes**
Run:
```bash
cd ruoyi-ui
node tests/unit/project-analysis-dialog-layout.test.js
node tests/unit/project-analysis-dialog-source-highlight.test.js
node tests/unit/project-analysis-dialog-default-tab.test.js
```
Expected:
- `PASS`
- [ ] **Step 5: Commit**
```bash
git add ruoyi-ui/src/views/ccdiProject/components/detail/ProjectAnalysisDialog.vue ruoyi-ui/tests/unit/project-analysis-dialog-layout.test.js ruoyi-ui/tests/unit/project-analysis-dialog-source-highlight.test.js ruoyi-ui/tests/unit/project-analysis-dialog-default-tab.test.js
git commit -m "收紧项目分析弹窗头带与滚动布局"
```
### Task 2: 修正左侧档案栏高度与标签完整展示
**Files:**
- Modify: `ruoyi-ui/src/views/ccdiProject/components/detail/ProjectAnalysisSidebar.vue`
- Modify: `ruoyi-ui/src/views/ccdiProject/components/detail/ProjectAnalysisDialog.vue`
- Modify: `ruoyi-ui/tests/unit/project-analysis-dialog-sidebar.test.js`
- Modify: `ruoyi-ui/tests/unit/project-analysis-dialog-empty-field.test.js`
- [ ] **Step 1: Write the failing test**
补充断言,锁定侧栏边界:
- 左侧侧栏不再被右侧主区强制拉满
- 存在人物档案结构块,例如 `sidebar-profile`
- 风险等级改为状态块或等价样式位
- “核心异常标签”区域占满可用宽度,并支持完整换行
- 不允许恢复表单式强左右对齐布局
- 空值仍统一显示 `-`
示例断言片段:
```js
assert(source.includes("sidebar-profile"), "缺少人物档案区");
assert(source.includes("sidebar-risk-badge"), "缺少风险等级状态块");
assert(source.includes("flex-wrap: wrap"), "核心异常标签必须支持换行");
assert(!source.includes("justify-content: space-between"), "不应继续以表单式左右对齐作为主体布局");
```
- [ ] **Step 2: Run test to verify it fails**
Run:
```bash
cd ruoyi-ui
node tests/unit/project-analysis-dialog-sidebar.test.js
node tests/unit/project-analysis-dialog-empty-field.test.js
```
Expected:
- `FAIL`
- [ ] **Step 3: Write minimal implementation**
`ProjectAnalysisSidebar.vue` 中完成最小改造:
- 身份区突出姓名、风险等级、工号、部门、所属项目
- 命中模型摘要区保留命中模型数与核心异常标签
- 核心异常标签区域改为整行左对齐换行展示
- 删除会导致标签被压缩或侧栏被拉满的布局约束
如需配合,在 `ProjectAnalysisDialog.vue` 中补充侧栏容器样式,使其按内容自然结束。
- [ ] **Step 4: Run test to verify it passes**
Run:
```bash
cd ruoyi-ui
node tests/unit/project-analysis-dialog-sidebar.test.js
node tests/unit/project-analysis-dialog-empty-field.test.js
```
Expected:
- `PASS`
- [ ] **Step 5: Commit**
```bash
git add ruoyi-ui/src/views/ccdiProject/components/detail/ProjectAnalysisSidebar.vue ruoyi-ui/src/views/ccdiProject/components/detail/ProjectAnalysisDialog.vue ruoyi-ui/tests/unit/project-analysis-dialog-sidebar.test.js ruoyi-ui/tests/unit/project-analysis-dialog-empty-field.test.js
git commit -m "修正项目分析弹窗侧栏档案展示"
```
### Task 3: 收口右侧主区和异常明细阅读节奏
**Files:**
- Modify: `ruoyi-ui/src/views/ccdiProject/components/detail/ProjectAnalysisAbnormalTab.vue`
- Modify: `ruoyi-ui/src/views/ccdiProject/components/detail/ProjectAnalysisPlaceholderTab.vue`
- Modify: `ruoyi-ui/src/views/ccdiProject/components/detail/ProjectAnalysisDialog.vue`
- Modify: `ruoyi-ui/tests/unit/project-analysis-dialog-abnormal-tab.test.js`
- Modify: `ruoyi-ui/tests/unit/project-analysis-dialog-layout.test.js`
- [ ] **Step 1: Write the failing test**
补充断言,锁定右侧主区边界:
- 头带下方紧跟页签,减少无效留白
- 异常明细保持“分组标题 + 主体内容”的连续阅读流
- 主区容器与占位页签采用统一面板基线
- 不恢复主区内部独立滚动
示例断言片段:
```js
assert(source.includes("project-analysis-tabs"), "缺少主区页签容器");
assert(source.includes("abnormal-card__title"), "异常明细应保留分组标题");
assert(!source.includes("project-analysis-layout__main-scroll"), "主区不应再有独立滚动");
```
- [ ] **Step 2: Run test to verify it fails**
Run:
```bash
cd ruoyi-ui
node tests/unit/project-analysis-dialog-abnormal-tab.test.js
node tests/unit/project-analysis-dialog-layout.test.js
```
Expected:
- `FAIL`
- [ ] **Step 3: Write minimal implementation**
在 3 个组件中完成最小样式与结构收口:
- 页签导航上移,紧跟头带
- 异常明细区块保持连续阅读流,不再被多层壳体打断
- 占位页签与异常明细主视图统一容器基线
- 保持现有真实数据渲染规则和分页逻辑不变
- [ ] **Step 4: Run test to verify it passes**
Run:
```bash
cd ruoyi-ui
node tests/unit/project-analysis-dialog-abnormal-tab.test.js
node tests/unit/project-analysis-dialog-layout.test.js
```
Expected:
- `PASS`
- [ ] **Step 5: Commit**
```bash
git add ruoyi-ui/src/views/ccdiProject/components/detail/ProjectAnalysisAbnormalTab.vue ruoyi-ui/src/views/ccdiProject/components/detail/ProjectAnalysisPlaceholderTab.vue ruoyi-ui/src/views/ccdiProject/components/detail/ProjectAnalysisDialog.vue ruoyi-ui/tests/unit/project-analysis-dialog-abnormal-tab.test.js ruoyi-ui/tests/unit/project-analysis-dialog-layout.test.js
git commit -m "收口项目分析弹窗右侧主区节奏"
```
### Task 4: 做前端回归并补充记录
**Files:**
- Create: `docs/reports/implementation/2026-03-26-results-overview-project-analysis-dialog-display-fix-frontend-record.md`
- Create: `docs/tests/records/2026-03-26-results-overview-project-analysis-dialog-display-fix-frontend-verification.md`
- Test: `ruoyi-ui/tests/unit/project-analysis-dialog-layout.test.js`
- Test: `ruoyi-ui/tests/unit/project-analysis-dialog-source-highlight.test.js`
- Test: `ruoyi-ui/tests/unit/project-analysis-dialog-default-tab.test.js`
- Test: `ruoyi-ui/tests/unit/project-analysis-dialog-sidebar.test.js`
- Test: `ruoyi-ui/tests/unit/project-analysis-dialog-empty-field.test.js`
- Test: `ruoyi-ui/tests/unit/project-analysis-dialog-abnormal-tab.test.js`
- Test: `ruoyi-ui/tests/unit/preliminary-check-project-analysis-entry.test.js`
- Test: `ruoyi-ui/tests/unit/preliminary-check-project-analysis-source-context.test.js`
- [ ] **Step 1: Run the focused regression suite**
Run:
```bash
cd ruoyi-ui
node tests/unit/project-analysis-dialog-layout.test.js
node tests/unit/project-analysis-dialog-source-highlight.test.js
node tests/unit/project-analysis-dialog-default-tab.test.js
node tests/unit/project-analysis-dialog-sidebar.test.js
node tests/unit/project-analysis-dialog-empty-field.test.js
node tests/unit/project-analysis-dialog-abnormal-tab.test.js
node tests/unit/preliminary-check-project-analysis-entry.test.js
node tests/unit/preliminary-check-project-analysis-source-context.test.js
```
Expected:
- 全部 `PASS`
- [ ] **Step 2: Run the production build**
Run:
```bash
cd ruoyi-ui
npm run build:prod
```
Expected:
- `BUILD SUCCESS` 或等价成功输出
- [ ] **Step 3: Write the verification record**
`docs/tests/records/2026-03-26-results-overview-project-analysis-dialog-display-fix-frontend-verification.md` 记录:
- 执行命令
- 执行时间
- 测试结果
- 验收结论:顶部留白、统一滚动、侧栏高度和标签展示问题已被覆盖验证
- [ ] **Step 4: Write the implementation record**
`docs/reports/implementation/2026-03-26-results-overview-project-analysis-dialog-display-fix-frontend-record.md` 记录:
- 头带与弹窗尺寸调整
- 统一滚动实现
- 侧栏自然高度与标签换行展示
- 主区阅读节奏收口
- [ ] **Step 5: Commit**
```bash
git add docs/reports/implementation/2026-03-26-results-overview-project-analysis-dialog-display-fix-frontend-record.md docs/tests/records/2026-03-26-results-overview-project-analysis-dialog-display-fix-frontend-verification.md
git commit -m "补充项目分析弹窗前端修复记录"
```
## Done When
- 顶部空白明显收紧,弹窗尺寸较现状更大
- 弹窗改为统一滚动,右侧不再独立滚动
- 左侧侧栏按内容自然结束,不再被强制拉满
- 左下角“核心异常标签”在长标签、多标签场景下可完整换行展示
- 结果总览入口、默认页签、详情接口链路和现有业务边界保持不变