Files
hzdyjs/docs/code-adjust-record.md
T
2025-06-26 18:30:03 +08:00

575 lines
22 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.
# 代码调整记录
> 本文件用于记录所有前端代码的调整历史,确保变更的可追溯性和团队协作的透明度。
## 📋 记录规范说明
### 记录格式模板
每次调整后请按以下格式记录:
```markdown
## 调整记录 - YYYY-MM-DD HH:mm:ss
**调整时间**: YYYY-MM-DD HH:mm:ss
**调整人**: [开发者姓名/Cursor AI 辅助]
**调整目的**: [简述调整原因和目标]
**涉及文件**:
- src/views/[module]/[file].vue
- src/api/[module]/[file].ts
- src/components/[ComponentName]/index.vue
**调整内容详述**:
1. 具体调整了哪些代码
2. 修改了哪些功能
3. 优化了哪些性能
4. 修复了哪些问题
**技术细节**:
- 使用的技术栈: Vue 3.5.13 + TypeScript 5.8.3 + Element Plus 2.9.8
- 遵循的设计规范: Art Design Pro 轮廓式按钮系统
- CSS 变量使用: --art-\*变量系统
- 其他重要技术决策
**测试验证**:
- [ ] 功能测试通过
- [ ] 样式规范检查通过
- [ ] TypeScript 类型检查通过
- [ ] 响应式布局测试通过
- [ ] 暗色主题兼容性测试通过
**备注**: 其他需要说明的内容
---
```
### 📝 记录要求
- **及时性**: 每次代码调整完成后立即记录
- **完整性**: 包含所有必要信息字段
- **准确性**: 详细描述实际的调整内容
- **可追溯性**: 便于后续查看和维护
---
## 📅 调整记录历史
### 示例记录
## 调整记录 - 2024-01-20 14:30:00
**调整时间**: 2024-01-20 14:30:00
**调整人**: 开发者/Cursor AI 辅助
**调整目的**: 建立代码调整记录管理制度,确保项目变更的可追溯性
**涉及文件**:
- docs/code-adjust-record.md (新建)
- .cursorrules (更新)
**调整内容详述**:
1. 创建了代码调整记录的标准模板
2. 在.cursorrules 中添加了强制记录要求
3. 建立了记录格式规范和管理制度
4. 为后续的代码变更管理提供标准化流程
**技术细节**:
- 文件格式: Markdown
- 遵循的规范: Plus UI 项目开发规范
- 管理方式: 版本控制与文档管理结合
- 强制性要求: 所有 Cursor AI 代码调整都必须记录
**测试验证**:
- [x] 模板格式检查通过
- [x] 文档结构清晰易读
- [x] 符合团队协作要求
- [x] .cursorrules 规范更新完成
**备注**: 这是第一条记录,用作模板示例。后续所有通过 Cursor AI 进行的代码调整都必须在此文件中留下记录。
---
<!--
以下为实际的代码调整记录,请按照上述模板格式添加新的记录
新记录请添加在此行下方,保持时间倒序排列(最新的在前)
-->
## 调整记录 - 2025-01-26 20:30:00
**调整时间**: 2025-01-26 20:30:00
**调整人**: 开发者/Cursor AI 辅助
**调整目的**: 优化问卷答题页面操作按钮的显示方式,统一使用图标显示并添加 tooltip 提示
**涉及文件**:
- web/src/views/hq/answerSurvey/index.vue
**调整内容详述**:
1. **移除按钮文字,统一使用图标**
- 答题按钮:移除"答题"文字,只保留 Edit 图标
- 查看结果按钮:移除"查看结果"文字,只保留 Document 图标
- 查看详情按钮:移除"查看详情"文字,只保留 View 图标
2. **添加 tooltip 提示系统**
- 为每个操作按钮添加 el-tooltip 组件
- 鼠标悬停显示对应功能名称:"答题"、"查看结果"、"查看详情"
- 设置 tooltip 位置为 top,确保最佳显示效果
3. **统一按钮尺寸和样式**
- 设置所有操作按钮为固定尺寸:32px × 32px
- 移除按钮内边距,使用 flex 布局居中图标
- 调整操作列宽度从 200px 缩减为 140px
4. **保持按钮功能和状态逻辑**
- 进行中状态(1):显示答题按钮(warning 类型)
- 已结束状态(2):显示查看结果按钮(info 类型)
- 所有状态:显示查看详情按钮(primary 类型)
**技术细节**:
- 使用的技术栈: Vue 3.5.13 + TypeScript 5.8.3 + Element Plus 2.9.8
- 遵循的设计规范: Art Design Pro 轮廓式按钮系统
- Tooltip 组件: 使用 Element Plus 的 el-tooltip 组件,placement="top"
- CSS 优化: 使用!important 确保按钮尺寸统一,防止样式被覆盖
- 图标系统: 保持原有的 Edit、Document、View 图标
**测试验证**:
- [x] 功能测试通过 - 所有按钮点击功能正常
- [x] 样式规范检查通过 - 按钮尺寸统一,图标居中
- [x] TypeScript 类型检查通过 - 无类型错误
- [x] 响应式布局测试通过 - 操作列宽度适配
- [x] 用户体验提升 - 界面更简洁,tooltip 提示清晰
**备注**: 这次调整显著提升了表格的视觉效果,通过纯图标按钮减少了视觉噪音,同时通过 tooltip 保持了功能的可识别性。操作列宽度的缩减也为表格内容提供了更多空间。
---
## 调整记录 - 2025-01-26 16:40:00
**调整时间**: 2025-01-26 16:40:00
**调整人**: 开发者/Cursor AI 辅助
**调整目的**: 优化答题按钮的视觉优先级,让答题功能更加突出
**涉及文件**:
- web/src/views/hq/answerSurvey/index.vue
**调整内容详述**:
1. 将答题按钮类型从 `success` 改为 `warning`,使用更醒目的橙色
2. 将答题按钮位置调整到第一位,优先于查看按钮显示
3. 保持查看按钮为 `primary` 类型,作为次要操作按钮
4. 通过颜色和位置的调整,突出答题的重要性和优先级
**技术细节**:
- 使用的技术栈: Vue 3.5.13 + TypeScript 5.8.3 + Element Plus 2.9.8
- 遵循的设计规范: Art Design Pro 轮廓式按钮系统
- 颜色调整: `type="warning"` 提供更醒目的橙色背景
- 布局调整: 将答题按钮放在第一位,符合操作优先级
**测试验证**:
- [x] 功能测试通过 - 按钮点击功能正常
- [x] 样式规范检查通过 - 按钮颜色醒目突出
- [x] TypeScript 类型检查通过 - 无类型错误
- [x] 用户体验测试通过 - 答题按钮更容易识别
- [x] 视觉优先级测试通过 - 主要操作更加突出
**备注**: 这次调整明确了操作按钮的优先级,答题作为核心功能使用醒目的橙色并放在首位,而查看作为辅助功能使用蓝色并放在次位,提升了用户的操作体验和效率。
---
## 调整记录 - 2025-01-26 16:35:00
**调整时间**: 2025-01-26 16:35:00
**调整人**: 开发者/Cursor AI 辅助
**调整目的**: 优化问卷列表操作按钮布局和文本,提升用户体验
**涉及文件**:
- web/src/views/hq/answerSurvey/index.vue
**调整内容详述**:
1. 修改操作列按钮文本:"查看题目" 改为 "查看","开始答题" 改为 "答题"
2. 添加 `action-buttons` 容器包裹操作按钮,使用 Flexbox 布局确保按钮在一行显示
3. 调整操作列宽度从 200px 减少到 160px,更好地适应缩短后的按钮文本
4. 添加 CSS 样式 `.action-buttons`,设置 `display: flex`、`gap: 8px` 等属性
5. 设置按钮居中对齐和禁止换行,确保界面整洁美观
**技术细节**:
- 使用的技术栈: Vue 3.5.13 + TypeScript 5.8.3 + Element Plus 2.9.8
- 遵循的设计规范: Art Design Pro 轮廓式按钮系统
- 布局优化: 使用 Flexbox 确保按钮水平排列
- 样式调整: `gap: 8px` 按钮间距,`white-space: nowrap` 禁止换行
**测试验证**:
- [x] 功能测试通过 - 按钮点击功能正常
- [x] 样式规范检查通过 - 按钮保持在一行显示
- [x] TypeScript 类型检查通过 - 无类型错误
- [x] 响应式布局测试通过 - 表格列宽度适配
- [x] 用户体验提升 - 按钮文本简洁,布局紧凑
**备注**: 这次调整简化了按钮文本并优化了布局,使操作列更加紧凑,提升了表格的整体视觉效果和用户操作体验。
---
## 调整记录 - 2025-01-26 16:30:00
**调整时间**: 2025-01-26 16:30:00
**调整人**: 开发者/Cursor AI 辅助
**调整目的**: 统一问卷弹窗中开始时间和结束时间字段的宽度,与其他表单字段保持一致
**涉及文件**:
- web/src/views/hq/satSurvey/index.vue
**调整内容详述**:
1. 为问卷编辑弹窗中的开始时间日期选择器添加 `style="width: 100%"` 属性
2. 为问卷编辑弹窗中的结束时间日期选择器添加 `style="width: 100%"` 属性
3. 同时优化了代码格式,将单行属性改为多行格式,提高代码可读性
4. 确保所有表单字段在视觉上保持统一的宽度和对齐
**技术细节**:
- 使用的技术栈: Vue 3.5.13 + TypeScript 5.8.3 + Element Plus 2.9.8
- 遵循的设计规范: Art Design Pro 轮廓式按钮系统
- 样式调整: 使用 `style="width: 100%"` 确保日期选择器占满容器宽度
- 代码优化: 多行属性格式提高可维护性
**测试验证**:
- [x] 功能测试通过 - 日期选择器正常工作
- [x] 样式规范检查通过 - 字段宽度统一一致
- [x] TypeScript 类型检查通过 - 无类型错误
- [x] 响应式布局测试通过 - 弹窗内字段对齐美观
- [x] 用户体验提升 - 表单字段视觉统一
**备注**: 这个调整解决了表单字段宽度不一致的视觉问题,提升了用户界面的专业性和一致性。日期选择器现在与其他输入字段保持相同的宽度。
---
## 调整记录 - 2025-01-26 16:25:00
**调整时间**: 2025-01-26 16:25:00
**调整人**: 开发者/Cursor AI 辅助
**调整目的**: 在.cursorrules 文件中加入代码与文档同步更新的强制规则
**涉及文件**:
- .cursorrules (添加新规则)
**调整内容详述**:
1. 在"项目文档管理规范"部分添加了"核心原则:代码与文档同步更新"
2. 明确了强制规则:每次代码调整完成后,必须同步更新相应的项目文档
3. 扩充了强制更新规则列表,新增功能文档和设计文档的更新要求
4. 添加了详细的"文档同步更新清单",分别针对前端、后端、移动端的不同更新要求
5. 建立了完整的"文档更新工作流程",确保文档更新的系统性和完整性
**技术细节**:
- 规则强化: 将文档同步更新上升为强制性要求
- 分类管理: 按照前端、后端、移动端分别制定文档更新清单
- 流程规范: 建立 5 步文档更新工作流程
- 检查机制: 提供 checkbox 清单确保文档更新的完整性
**测试验证**:
- [x] 新规则添加完成
- [x] 文档更新清单完整
- [x] 工作流程清晰明确
- [x] 涵盖所有开发场景
- [x] 确保文档永远保持最新状态
**备注**: 这个新规则确保了项目文档与代码的高度同步,避免了文档滞后的问题,为项目的长期维护提供了重要保障。
---
## 调整记录 - 2025-01-26 16:15:00
**调整时间**: 2025-01-26 16:15:00
**调整人**: 开发者/Cursor AI 辅助
**调整目的**: 重新组织.cursorrules 文件结构,按照项目实际情况分为四个主要部分
**涉及文件**:
- .cursorrules (重新组织)
- docs/代码调整记录.md (重命名为 docs/code-adjust-record.md)
**调整内容详述**:
1. 重新组织.cursorrules 文件,分为四个主要部分:
- 第一部分:项目文档管理规范 (docs 中的文件) 及代码调整记录管理
- 第二部分:Web 前端开发规范 (web/)
- 第三部分:后端开发规范 (backend/)
- 第四部分:移动端开发规范 (mobile/)
2. 将"代码调整记录.md"重命名为"code-adjust-record.md"
3. 更新项目结构说明,明确指出各目录的用途
4. 强化代码调整记录的管理要求,确保每次代码变更都有记录
5. 为移动端添加了完整的开发规范
**技术细节**:
- 文档组织: 按照实际项目结构(backend/, web/, mobile/, docs/)进行重新组织
- 规范分类: 将前端、后端、移动端规范独立管理,便于维护
- 记录管理: 统一代码调整记录文件命名和格式
- 强制要求: 所有代码调整都必须在 docs/code-adjust-record.md 中记录
**测试验证**:
- [x] .cursorrules 文件结构调整完成
- [x] 代码调整记录文件重命名成功
- [x] 四个部分的规范内容完整
- [x] 文档结构清晰易读
- [x] 符合项目实际开发需求
**备注**: 这次调整让.cursorrules 文件更加符合项目的实际结构,便于不同技术栈的开发人员快速找到对应的规范。同时统一了代码调整记录的管理方式。
---
## 调整记录 - 2025-01-26 10:15:00
**调整时间**: 2025-01-26 10:15:00
**调整人**: 开发者/Cursor AI 辅助
**调整目的**: 创建根目录统一的 .gitignore 文件,融合前端和后端的忽略规则
**涉及文件**:
- .gitignore (新建/重写)
- web/.gitignore (参考)
- backend/.gitignore (参考)
**调整内容详述**:
1. 分析了 web 和 backend 目录下现有的 .gitignore 文件内容
2. 创建了一个统一的根目录 .gitignore 文件,包含以下分类:
- 操作系统相关文件 (.DS_Store, Thumbs.db 等)
- IDE 和编辑器配置文件 (.idea/, .vscode/ 等)
- 前端相关忽略 (node_modules/, dist/, 锁定文件等)
- 后端相关忽略 (target/, .gradle/, Maven 相关文件)
- 环境配置文件 (.env 系列, 数据库配置)
- 其他常见忽略项 (压缩包, 备份文件, 证书等)
3. 使用路径前缀区分不同模块的特定忽略项 (web/, backend/, mobile/)
4. 添加了详细的注释说明每个分类的用途
5. 保持了原有 .gitignore 文件的核心规则,避免遗漏重要忽略项
**技术细节**:
- 文件格式: Git ignore 规则文件
- 覆盖范围: 整个项目的前端、后端、移动端和文档
- 路径策略: 使用相对路径前缀确保规则准确性
- 安全考虑: 包含敏感配置文件的忽略规则
- 兼容性: 支持 Vue 3 + TypeScript 前端和 Spring Boot 后端
**测试验证**:
- [x] 文件创建成功
- [x] Git ignore 语法正确
- [x] 涵盖前端所有必要忽略项
- [x] 涵盖后端所有必要忽略项
- [x] 包含安全相关配置的忽略规则
- [x] 注释清晰,便于维护
**备注**: 这个统一的 .gitignore 文件整合了前端 Vue 项目、后端 Spring Boot 项目以及移动端项目的所有忽略需求,提供了完整的版本控制支持。原有的 web/.gitignore 和 backend/.gitignore 文件仍然保留,但根目录的这个文件会作为主要的忽略规则文件。
---
## 调整记录 - 2024-12-28 16:50:00
**调整时间**: 2024-12-28 16:50:00
**调整人**: 开发者/Cursor AI 辅助
**调整目的**: 优化问卷弹窗中的按钮布局,让确定和取消按钮相邻排列
**涉及文件**:
- src/views/hq/satSurvey/index.vue
**调整内容详述**:
1. 修改问卷编辑弹窗的 footer 布局,使用`dialog-footer-right`类替代`dialog-footer`
2. 修改题目管理弹窗的 footer 布局,统一使用右对齐样式
3. 新增 CSS 样式`.dialog-footer-right`,实现按钮右对齐且相邻排列
4. 移除题目管理弹窗 footer 的冗余样式,简化 CSS 结构
5. 保持题目选择器弹窗的原有布局(因其有特殊的左右分栏需求)
**技术细节**:
- 使用的技术栈: Vue 3.5.13 + TypeScript 5.8.3 + Element Plus 2.9.8
- 遵循的设计规范: Art Design Pro 轮廓式按钮系统
- CSS 布局优化: 使用`justify-content: flex-end`实现右对齐
- 按钮间距: 统一使用`gap: 12px`保证合理间距
- 布局兼容性: 保持不同弹窗的布局需求
**测试验证**:
- [x] 功能测试通过 - 问卷编辑弹窗按钮布局优化
- [x] 样式规范检查通过 - 按钮靠右且相邻排列
- [x] TypeScript 类型检查通过 - 无类型错误
- [x] 响应式布局测试通过 - 不同屏幕尺寸下表现正常
- [x] 用户体验提升 - 操作按钮更加紧凑易用
**备注**: 此次调整解决了原有按钮分别靠左右两端导致距离过远的问题,提升了用户操作的便利性。题目选择器弹窗保持原有布局,因为其左侧需要显示统计信息。
---
## 调整记录 - 2024-12-28 16:45:00
**调整时间**: 2024-12-28 16:45:00
**调整人**: 开发者/Cursor AI 辅助
**调整目的**: 简化问卷编辑弹窗表单,隐藏不必要的状态相关字段
**涉及文件**:
- src/views/hq/satSurvey/index.vue
**调整内容详述**:
1. 隐藏问卷编辑弹窗中的"是否匿名"表单项
2. 隐藏问卷编辑弹窗中的"是否发布"表单项
3. 隐藏问卷编辑弹窗中的"状态"表单项
4. 使用 HTML 注释方式隐藏这些字段,便于后续恢复
5. 简化用户操作流程,将状态控制逻辑交由系统自动管理
**技术细节**:
- 使用的技术栈: Vue 3.5.13 + TypeScript 5.8.3 + Element Plus 2.9.8
- 遵循的设计规范: Art Design Pro 轮廓式按钮系统
- 表单简化: 移除业务状态相关的用户输入字段
- 保留字段的数据绑定: form.isAnonymous, form.isPublished, form.status 仍可在代码中使用
**测试验证**:
- [x] 功能测试通过 - 弹窗正常打开且表单简化
- [x] 样式规范检查通过 - 布局保持美观
- [x] TypeScript 类型检查通过 - 无类型错误
- [x] 表单提交测试通过 - 隐藏字段不影响提交逻辑
- [x] 用户体验优化 - 表单更加简洁易用
**备注**: 隐藏的字段可以在后续需要时通过取消注释快速恢复。这样的调整使得问卷创建流程更加简洁,状态管理逻辑由系统后台自动处理,减少用户的操作复杂度。
---
## 调整记录 - 2025-01-10 16:35:00
**调整时间**: 2025-01-10 16:35:00
**调整人**: Cursor AI 辅助
**调整目的**: 优化问卷答题页面的数据权限控制和状态处理,实现按用户角色显示不同问卷和根据问卷状态显示不同操作
**涉及文件**:
- web/src/views/hq/answerSurvey/index.vue
**调整内容详述**:
1. 修改数据权限控制逻辑
- 超级管理员可查看所有已发布问卷
- 学生角色可查看目标群体为学生(1)和全体(3)的已发布问卷
- 教师角色可查看目标群体为教职工(2)和全体(3)的已发布问卷
2. 扩展问卷状态支持
- 修改查询条件支持显示进行中(1)和已结束(2)状态的问卷
- 移除对单一状态的硬编码限制
3. 优化操作按钮显示
- 进行中状态问卷显示"答题"按钮
- 已结束状态问卷显示"查看结果"按钮
- 所有状态都显示"查看详情"按钮
4. 新增功能函数
- 添加 handleViewResult 函数处理已结束问卷的结果查看
- 调整表格操作列宽度以适应新的按钮布局
5. **权限控制 bug 修复**
- 发现后端 API 不支持 targetGroupIn 和 statusIn 参数过滤
- 实现前端临时权限过滤方案,在获取数据后进行客户端过滤
- 添加详细的调试日志输出,便于排查权限问题
**技术细节**:
- 使用的技术栈: Vue 3 + TypeScript + Element Plus
- 遵循的设计规范: Art Design Pro UI 规范
- 前端临时权限过滤:通过数组 filter 方法实现目标群体和状态过滤
- 响应式按钮显示通过 v-if 指令根据问卷状态控制
- 添加全面的调试日志系统,便于问题定位
**测试验证**:
- [x] 功能测试通过 - 学生角色无法看到教职工问卷
- [ ] 代码规范检查通过
- [ ] 类型检查通过
- [ ] 兼容性测试通过
**备注**:
- 角色权限映射:student 对应学生角色,teacher 对应教师角色
- 状态码映射:0=草稿,1=进行中,2=已结束
- 目标群体码映射:1=学生,2=教职工,3=全体
- **⚠️ 重要**:当前使用前端临时权限过滤方案,后续需要修改后端 API 支持 targetGroupIn 和 statusIn 参数
- TODO: 需要实现具体的答题页面路由(/hq/survey-answer/{id})和结果查看页面路由(/hq/survey-result/{id})
- TODO: 后端需要在 HqSatSurveyController 中添加对 targetGroupIn 和 statusIn 参数的支持
---
## 调整记录 - 2025-01-10 17:15:00
**调整时间**: 2025-01-10 17:15:00
**调整人**: Cursor AI 辅助
**调整目的**: 实现后端数据权限过滤功能,替换前端临时过滤方案,提升性能和安全性
**涉及文件**:
- backend/ruoyi-admin/src/main/java/org/dromara/zhxy/domain/bo/HqSatSurveyBo.java
- backend/ruoyi-admin/src/main/java/org/dromara/zhxy/controller/HqSatSurveyController.java
- backend/ruoyi-admin/src/main/java/org/dromara/zhxy/service/impl/HqSatSurveyServiceImpl.java
- web/src/views/hq/answerSurvey/index.vue
**调整内容详述**:
1. **后端 Bo 类扩展**
- 在 HqSatSurveyBo 中添加 targetGroupIn 和 statusIn 字段
- 支持 List<String>类型的 IN 查询参数
2. **Controller 层参数处理**
- 在 list 方法中添加 params 参数解析逻辑
- 将前端传递的 targetGroupIn 和 statusIn 参数设置到 Bo 对象
3. **Service 层查询优化**
- 在 buildQueryWrapper 方法中添加 IN 查询条件
- 使用 CollUtil.isNotEmpty 进行空值检查
- 通过 LambdaQueryWrapper.in()实现数据库级过滤
4. **前端代码重构**
- 移除前端临时权限过滤逻辑
- 恢复使用 params 参数传递过滤条件
- 保留调试日志系统便于问题排查
**技术细节**:
- 使用 MyBatis-Plus 的 LambdaQueryWrapper.in()方法实现数据库级 IN 查询
- 通过 params 参数传递复杂查询条件,避免 URL 参数限制
- 权限过滤在 SQL 层面执行,支持大数据量场景
- 分页功能正常工作,只对符合权限的数据进行分页
**性能优化效果**:
- **数据库级过滤**: 减少无效数据传输,提升查询性能
- **内存使用优化**: 避免前端加载大量无权限数据
- **网络传输优化**: 只传输用户有权限查看的数据
- **分页精确性**: 分页基于过滤后的真实数据量
**测试验证**:
- [x] 功能测试通过 - 学生角色只能查看学生和全体问卷
- [x] 性能测试通过 - 数据库级过滤,无前端性能问题
- [x] 权限测试通过 - 教师角色只能查看教职工和全体问卷
- [x] 分页测试通过 - 分页基于过滤后数据正常工作
**备注**:
- 已完全替换前端临时过滤方案,提升了系统性能和安全性
- 后端权限过滤支持大数据量场景,无性能瓶颈
- 调试日志保留,便于后续问题排查和系统监控
- SQL 示例:`SELECT * FROM hq_sat_survey WHERE target_group IN ('1','3') AND status IN ('1','2')`
---
## 后端权限过滤参数支持 - ✅ 已完成