5 Commits

Author SHA1 Message Date
wkc
ea70710804 接口变动 2026-03-06 13:59:27 +08:00
wkc
69284d7da6 feat: 将默认主题修改为浅色模式
- 修改 settings.js 中 sideTheme 默认值从 'theme-dark' 改为 'theme-light'
- 新用户首次访问时将看到浅色模式侧边栏
- 老用户的自定义设置不受影响(localStorage 优先)
2026-03-06 11:30:03 +08:00
wkc
2fde76d180 docs: 添加默认主题修改实施计划 2026-03-06 11:24:52 +08:00
wkc
6148d5fb69 docs: 添加默认主题修改为浅色模式的设计文档 2026-03-06 11:23:19 +08:00
wkc
4b0ccb194b docs: 完善 AGENTS.md 添加构建命令和代码规范 2026-03-06 09:43:09 +08:00
7 changed files with 735 additions and 6 deletions

168
AGENTS.md
View File

@@ -15,4 +15,170 @@ Use `@/openspec/AGENTS.md` to learn:
Keep this managed block so 'openspec update' can refresh the instructions. Keep this managed block so 'openspec update' can refresh the instructions.
<!-- OPENSPEC:END --> <!-- OPENSPEC:END -->
# AGENTS.md - AI Coding Assistant Guide
## 项目概述
基于若依 v3.9.1 的纪检初核系统Java 21 + Spring Boot 3 + Vue 2
---
## Build / Lint / Test Commands
### 后端 (Maven)
```bash
# 编译项目
mvn clean compile
# 运行应用
mvn spring-boot:run
# 打包部署
mvn clean package
# 运行单个测试类
mvn test -Dtest=ClassName
# 运行单个测试方法
mvn test -Dtest=ClassName#methodName
# 跳过测试
mvn clean package -DskipTests
```
### 前端 (npm)
```bash
cd ruoyi-ui
# 安装依赖
npm install --registry=https://registry.npmmirror.com
# 开发服务器
npm run dev
# 生产构建
npm run build:prod
```
### API 测试
```bash
# 获取 Token (测试账号: admin/admin123)
POST http://localhost:8080/login/test?username=admin&password=admin123
# Swagger 文档
http://localhost:8080/swagger-ui/index.html
```
---
## 代码规范
### Java 代码风格
- **注解**: 使用 Lombok `@Data` 简化实体类
- **依赖注入**: 使用 `@Resource` 而非 `@Autowired`
- **实体类**: 不继承 BaseEntity单独添加审计字段
- **禁止**: 禁止使用全限定类名 (如 `java.util.List`),必须 import
```java
@Data
public class CcdiBaseStaff {
/** 创建者 */
private String createBy;
/** 创建时间 */
private Date createTime;
/** 更新者 */
private String updateBy;
/** 更新时间 */
private Date updateTime;
}
@Resource
private ICcdiBaseStaffService baseStaffService;
```
### 分层规范
- **Controller**: 添加 Swagger 注释,分页使用 MyBatis Plus Page
- **Service**: 简单 CRUD 用 MyBatis Plus复杂操作在 XML 写 SQL
- **DTO/VO**: 接口传参用独立 DTO返回用独立 VO禁止与 entity 混用
- **禁止**: 禁止 `extends ServiceImpl<>`
### API 响应格式
```java
// 成功
AjaxResult.success("操作成功", data);
// 错误
AjaxResult.error("操作失败");
// 分页
Page<CcdiBaseStaff> page = new Page<>(pageNum, pageSize);
IPage<CcdiBaseStaff> result = baseStaffMapper.selectPage(page, queryWrapper);
return AjaxResult.success(result);
```
### 数据库规范
- 表名: `ccdi_` 前缀 (如 `ccdi_base_staff`)
- 非业务字段 (create_by, create_time 等) 由后端自动处理,前端表单不显示
### 前端规范
- **目录结构**: `views/` 按功能模块组织,`api/` 对应后端 Controller
- **API 调用**: 使用 `@/utils/request` 封装
- **菜单联动**: 添加页面后需同步修改数据库 `sys_menu`
### 导入功能规范
- 批量操作提高性能
- 返回结果只展示失败数据,不展示成功数据
- 使用 EasyExcel + 异步处理大数据量导入
---
## 模块架构
```
ccdi/
├── ruoyi-admin/ # 启动入口
├── ruoyi-framework/ # 安全配置
├── ruoyi-system/ # 系统模块
├── ruoyi-common/ # 通用工具
├── ccdi-info-collection/ # 信息采集 (员工、中介、黑名单)
├── ccdi-project/ # 项目管理
├── ccdi-lsfx/ # 流水分析对接
└── ruoyi-ui/ # 前端
```
### 添加新模块
1. 根 pom.xml 添加 `<module>`
2. pom.xml 添加 `ruoyi-common` 依赖
3. `ruoyi-admin/pom.xml` 添加模块依赖
4. 按分层创建 controller/service/mapper/domain 包
---
## 常用路径
| 用途 | 路径 |
|------|------|
| 应用入口 | `ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java` |
| 信息采集 Controller | `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/controller/` |
| 项目管理 Controller | `ccdi-project/src/main/java/com/ruoyi/ccdi/project/controller/` |
| 前端 API | `ruoyi-ui/src/api/` |
| Vue 路由 | `ruoyi-ui/src/router/index.js` |
---
## 沟通规范
- 使用简体中文进行思考和对话
- 遇到 MCP 数据库操作时,使用项目配置文件中的数据库

View File

@@ -0,0 +1,259 @@
# 默认主题修改为浅色模式 - 设计文档
**日期:** 2026-03-06
**状态:** 已批准
**作者:** Claude Code
## 1. 概述
### 1.1 背景
当前系统默认使用深色模式侧边栏(`theme-dark`),需要将默认主题修改为浅色模式(`theme-light`)。
### 1.2 目标
- 将新用户的默认主题从深色模式改为浅色模式
- 保持老用户的自定义设置不受影响
- 确保主题切换功能完全正常
### 1.3 范围
- 仅修改前端默认配置
- 不涉及后端修改
- 不涉及数据库修改
## 2. 当前架构
### 2.1 主题配置层级
```
settings.js (默认配置)
store/modules/settings.js (Vuex 状态管理)
layout/components/Settings/index.vue (用户界面设置)
localStorage (持久化用户设置)
```
### 2.2 主题初始化逻辑
**文件:** `ruoyi-ui/src/store/modules/settings.js`
```javascript
const storageSetting = JSON.parse(localStorage.getItem('layout-setting')) || ''
const state = {
sideTheme: storageSetting.sideTheme || sideTheme, // localStorage 优先
// ...
}
```
**逻辑:**
1.`settings.js` 读取默认值
2. 检查 `localStorage` 是否有用户设置
3. 如果有用户设置,使用用户设置覆盖默认值
4. 如果没有用户设置,使用默认值
## 3. 设计方案
### 3.1 修改内容
**文件:** `ruoyi-ui/src/settings.js`
**变更:** 第 9 行
```javascript
// 修改前
sideTheme: 'theme-dark',
// 修改后
sideTheme: 'theme-light',
```
### 3.2 数据流
#### 新用户首次访问
```
用户访问系统
store/modules/settings.js 初始化
读取 settings.js: sideTheme = 'theme-light'
检查 localStorage: 为空
使用默认值: 'theme-light'
渲染浅色模式侧边栏
```
#### 老用户访问(已保存设置)
```
用户访问系统
store/modules/settings.js 初始化
读取 settings.js: sideTheme = 'theme-light'
检查 localStorage: 有值 { sideTheme: 'theme-dark' }
使用 localStorage 中的值: 'theme-dark'
渲染深色模式侧边栏(保持用户设置)
```
### 3.3 兼容性
**向后兼容:**
- ✅ 老用户的 localStorage 设置不受影响
- ✅ 老用户看到的主题与之前一致
**向前兼容:**
- ✅ 新用户默认看到浅色模式
- ✅ 用户仍可自由切换主题
- ✅ 保存/重置功能完全正常
## 4. 影响分析
### 4.1 影响范围
**文件变更:**
- `ruoyi-ui/src/settings.js`1 行代码)
**功能影响:**
- ✅ 无功能变更
- ✅ 无接口变更
- ✅ 无数据结构变更
### 4.2 用户体验影响
**新用户:**
- 从深色模式默认值 → 浅色模式默认值
**老用户:**
- 无影响localStorage 中的设置优先)
## 5. 测试计划
### 5.1 测试用例
| 测试场景 | 操作步骤 | 预期结果 |
|---------|---------|---------|
| 新用户首次访问 | 1. 清除 localStorage<br>2. 刷新页面 | 侧边栏为浅色模式 |
| 老用户(深色模式) | 1. localStorage 保存深色模式<br>2. 刷新页面 | 侧边栏仍为深色模式 |
| 老用户(浅色模式) | 1. localStorage 保存浅色模式<br>2. 刷新页面 | 侧边栏仍为浅色模式 |
| 切换主题 | 1. 打开设置抽屉<br>2. 点击深色/浅色图标 | 侧边栏立即切换 |
| 保存设置 | 1. 切换主题<br>2. 点击"保存配置"<br>3. 刷新页面 | 设置保持不变 |
| 重置设置 | 1. 修改多个设置<br>2. 点击"重置配置" | 恢复为默认值(浅色模式) |
### 5.2 浏览器兼容性
测试浏览器:
- ✅ Chrome (最新版)
- ✅ Firefox (最新版)
- ✅ Edge (最新版)
- ✅ Safari (最新版)
## 6. 部署方案
### 6.1 部署步骤
1. **修改代码**
```bash
# 修改 ruoyi-ui/src/settings.js
```
2. **提交代码**
```bash
git add ruoyi-ui/src/settings.js
git commit -m "feat: 将默认主题修改为浅色模式"
```
3. **构建前端**
```bash
cd ruoyi-ui
npm run build:prod
```
4. **部署静态资源**
- 将 `ruoyi-ui/dist/` 目录部署到生产服务器
5. **验证部署**
- 清除浏览器缓存
- 访问系统
- 验证新用户看到浅色模式
### 6.2 回滚方案
如果发现问题,可快速回滚:
```javascript
// settings.js 第 9 行
sideTheme: 'theme-dark', // 改回深色模式
```
然后重新构建和部署。
## 7. 风险评估
### 7.1 风险列表
| 风险 | 概率 | 影响 | 缓解措施 |
|-----|------|------|---------|
| 老用户困惑 | 低 | 低 | 老用户设置不受影响 |
| 浅色模式样式问题 | 低 | 中 | 需要充分测试 |
| 部署失败 | 低 | 高 | 准备回滚方案 |
### 7.2 总体风险
**风险等级:** 低
**理由:**
- 仅修改一行配置代码
- 不影响老用户设置
- 可以快速回滚
## 8. 验收标准
### 8.1 功能验收
- ✅ 新用户首次访问看到浅色模式侧边栏
- ✅ 老用户的自定义主题设置保持不变
- ✅ 主题切换功能正常
- ✅ 主题保存功能正常
- ✅ 主题重置功能正常
### 8.2 质量验收
- ✅ 代码审查通过
- ✅ 测试用例全部通过
- ✅ 无控制台错误
- ✅ 浏览器兼容性测试通过
## 9. 后续优化建议
### 9.1 短期优化
- 可以考虑在设置界面添加"推荐"标签,标注浅色模式
- 可以考虑在首次登录时提示用户可以自定义主题
### 9.2 长期优化
- 可以考虑添加更多预设主题(护眼模式、高对比度模式等)
- 可以考虑将主题设置保存到后端数据库,实现跨设备同步
## 10. 附录
### 10.1 相关文件
- `ruoyi-ui/src/settings.js` - 默认配置文件
- `ruoyi-ui/src/store/modules/settings.js` - Vuex 状态管理
- `ruoyi-ui/src/layout/components/Settings/index.vue` - 设置界面组件
- `ruoyi-ui/src/components/ThemePicker/index.vue` - 主题颜色选择器
### 10.2 参考资料
- [Element UI 主题定制](https://element.eleme.cn/#/zh-CN/theme)
- [Vuex 状态管理](https://vuex.vuejs.org/zh/)

View File

@@ -0,0 +1,304 @@
# 默认主题修改为浅色模式 - 实施计划
> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
**目标:** 将前端默认主题从深色模式改为浅色模式,新用户首次访问时看到浅色侧边栏
**架构:** 修改 `settings.js` 中的默认配置Vuex store 会自动读取该配置并应用到界面
**技术栈:** Vue.js 2.6, Vuex 3.6, Element UI 2.15
---
## Task 1: 修改默认主题配置
**文件:**
- Modify: `ruoyi-ui/src/settings.js:10`(修改第 10 行)
### Step 1: 读取当前配置文件
**操作:** 使用 Read 工具读取文件
```
Read: ruoyi-ui/src/settings.js
```
**预期结果:** 看到第 10 行为 `sideTheme: 'theme-dark',`
### Step 2: 修改默认主题为浅色模式
**操作:** 使用 Edit 工具修改配置
```javascript
// 修改 ruoyi-ui/src/settings.js 第 10 行
// 修改前:
sideTheme: 'theme-dark',
// 修改后:
sideTheme: 'theme-light',
```
**完整代码:**
```javascript
module.exports = {
/**
* 网页标题
*/
title: process.env.VUE_APP_TITLE,
/**
* 侧边栏主题 深色主题theme-dark浅色主题theme-light
*/
sideTheme: 'theme-light',
/**
* 系统布局配置
*/
showSettings: true,
/**
* 菜单导航模式 1、纯左侧 2、混合左侧+顶部) 3、纯顶部
*/
navType: 1,
/**
* 是否显示 tagsView
*/
tagsView: true,
/**
* 显示页签图标
*/
tagsIcon: false,
/**
* 是否固定头部
*/
fixedHeader: true,
/**
* 是否显示logo
*/
sidebarLogo: true,
/**
* 是否显示动态标题
*/
dynamicTitle: false,
/**
* 是否显示底部版权
*/
footerVisible: false,
/**
* 底部版权文本内容
*/
footerContent: 'Copyright © 2018-2026 RuoYi. All Rights Reserved.'
}
```
### Step 3: 提交代码变更
**命令:**
```bash
git add ruoyi-ui/src/settings.js
git commit -m "feat: 将默认主题修改为浅色模式
- 修改 settings.js 中 sideTheme 默认值从 'theme-dark' 改为 'theme-light'
- 新用户首次访问时将看到浅色模式侧边栏
- 老用户的自定义设置不受影响localStorage 优先)"
```
**预期结果:** Git 提交成功
---
## Task 2: 手动测试验证
**说明:** 此任务需要手动在浏览器中测试,无法自动化
### Step 1: 启动前端开发服务器
**命令:**
```bash
cd ruoyi-ui
npm run dev
```
**预期结果:** 前端服务启动在 http://localhost:80
### Step 2: 测试新用户体验
**操作步骤:**
1. 打开浏览器开发者工具F12
2. 进入 Application/应用 标签
3. 在左侧找到 Local Storage
4. 删除所有 `layout-setting` 相关的存储项
5. 刷新页面Ctrl+F5 强制刷新)
**预期结果:**
- 侧边栏为浅色模式(白色背景,深色文字)
- 侧边栏 Logo 区域为浅色
- 菜单项为深色文字
### Step 3: 测试老用户体验(深色模式)
**操作步骤:**
1. 打开浏览器开发者工具F12
2. 进入 Application/应用 标签
3. 在 Local Storage 中添加/修改 `layout-setting`
```json
{
"sideTheme": "theme-dark",
"theme": "#409EFF"
}
```
4. 刷新页面Ctrl+F5 强制刷新)
**预期结果:**
- 侧边栏为深色模式(深色背景,浅色文字)
- 老用户的设置被保留
### Step 4: 测试主题切换功能
**操作步骤:**
1. 登录系统
2. 点击右上角设置图标(齿轮图标)
3. 在右侧抽屉中找到"主题风格设置"
4. 点击深色模式图标
5. 观察侧边栏变化
**预期结果:**
- 侧边栏立即切换为深色模式
- 菜单颜色变为浅色文字
### Step 5: 测试主题保存功能
**操作步骤:**
1. 在设置抽屉中切换为深色模式
2. 点击底部的"保存配置"按钮
3. 等待提示"正在保存到本地"
4. 刷新页面F5
**预期结果:**
- 刷新后侧边栏仍为深色模式
- localStorage 中保存了 `layout-setting` 数据
### Step 6: 测试主题重置功能
**操作步骤:**
1. 在设置抽屉中切换为深色模式并保存
2. 点击底部的"重置配置"按钮
3. 等待页面自动刷新
**预期结果:**
- 页面自动刷新
- 侧边栏恢复为浅色模式(默认值)
- localStorage 中的 `layout-setting` 被清除
---
## Task 3: 更新项目文档(可选)
**文件:**
- Modify: `CLAUDE.md` 或 `README.md`(如果有主题相关的说明)
### Step 1: 更新 CLAUDE.md 中的主题说明
**操作:** 检查 CLAUDE.md 中是否有关于默认主题的说明,如果有则更新
**修改位置:** 如果文档中提到"默认深色模式",需要更新为"默认浅色模式"
### Step 2: 提交文档更新
**命令:**
```bash
git add CLAUDE.md
git commit -m "docs: 更新文档中的默认主题说明"
```
---
## 验收清单
在完成所有任务后,请验证以下内容:
- [ ] `ruoyi-ui/src/settings.js` 中 `sideTheme` 值为 `'theme-light'`
- [ ] 新用户首次访问看到浅色模式侧边栏
- [ ] 老用户的深色模式设置被保留
- [ ] 主题切换功能正常(深色 ↔ 浅色)
- [ ] 主题保存功能正常(保存到 localStorage
- [ ] 主题重置功能正常(恢复为浅色模式)
- [ ] 浏览器控制台无错误信息
- [ ] 代码已提交到 Git
---
## 回滚方案
如果发现问题需要回滚:
### 回滚步骤
**命令:**
```bash
git revert <commit-hash>
```
或手动修改 `ruoyi-ui/src/settings.js`:
```javascript
sideTheme: 'theme-dark', // 改回深色模式
```
然后重新构建:
```bash
cd ruoyi-ui
npm run build:prod
```
---
## 部署说明
### 开发环境
无需额外操作,修改后自动生效(热更新)
### 生产环境
1. 构建前端:
```bash
cd ruoyi-ui
npm run build:prod
```
2. 部署 `ruoyi-ui/dist/` 目录到生产服务器
3. 用户刷新浏览器即可看到效果
**注意:**
- 不需要重启后端服务
- 不需要清理数据库
- 不需要用户做任何操作
---
## 相关文件
- `ruoyi-ui/src/settings.js` - 默认配置文件(本次修改)
- `ruoyi-ui/src/store/modules/settings.js` - Vuex 状态管理(无需修改)
- `ruoyi-ui/src/layout/components/Settings/index.vue` - 设置界面(无需修改)
- `docs/plans/2026-03-06-theme-light-default-design.md` - 设计文档

View File

@@ -6,7 +6,7 @@ ruoyi:
server: server:
# 服务器的HTTP端口默认为8080 # 服务器的HTTP端口默认为8080
port: 8080 port: 62318
servlet: servlet:
# 应用的访问路径 # 应用的访问路径
context-path: / context-path: /

View File

@@ -7,7 +7,7 @@ module.exports = {
/** /**
* 侧边栏主题 深色主题theme-dark浅色主题theme-light * 侧边栏主题 深色主题theme-dark浅色主题theme-light
*/ */
sideTheme: 'theme-dark', sideTheme: 'theme-light',
/** /**
* 系统布局配置 * 系统布局配置

View File

@@ -61,7 +61,7 @@
</template> </template>
<script> <script>
import {listProject, getStatusCounts} from '@/api/ccdiProject' import {getStatusCounts, listProject} from '@/api/ccdiProject'
import SearchBar from './components/SearchBar' import SearchBar from './components/SearchBar'
import ProjectTable from './components/ProjectTable' import ProjectTable from './components/ProjectTable'
import QuickEntry from './components/QuickEntry' import QuickEntry from './components/QuickEntry'
@@ -264,7 +264,7 @@ export default {
.dpc-project-container { .dpc-project-container {
padding: 24px; padding: 24px;
background: #F8F9FA; background: #F8F9FA;
min-height: calc(100vh - 140px); min-height: calc(100vh - 84px);
} }
.page-header { .page-header {

View File

@@ -9,7 +9,7 @@ const CompressionPlugin = require('compression-webpack-plugin')
const name = process.env.VUE_APP_TITLE || '纪检初核系统' // 网页标题 const name = process.env.VUE_APP_TITLE || '纪检初核系统' // 网页标题
const baseUrl = 'http://localhost:8080' // 后端接口 const baseUrl = 'http://localhost:62318' // 后端接口
const port = process.env.port || process.env.npm_config_port || 80 // 端口 const port = process.env.port || process.env.npm_config_port || 80 // 端口