Commit 073fdd9a9c87ffbdeaaf3c66737e44d214434958
1 parent
31673a02
chore: remove PROJECT_RULES.md file
- Deleted the comprehensive project development guidelines document, which included technical stacks, development standards, and database norms.
Showing
1 changed file
with
0 additions
and
245 deletions
PROJECT_RULES.md deleted
| 1 | -# 绿纤美业ERP系统 - 项目开发规范 | |
| 2 | - | |
| 3 | -## 🛠 技术栈 | |
| 4 | - | |
| 5 | -### 前端技术栈 | |
| 6 | -- **框架**: Vue 2.6 + Element UI | |
| 7 | -- **样式**: SCSS (scoped) | |
| 8 | -- **HTTP客户端**: Axios | |
| 9 | -- **状态管理**: Vuex | |
| 10 | -- **构建工具**: Webpack | |
| 11 | - | |
| 12 | -### 后端技术栈 | |
| 13 | -- **框架**: ASP.NET Core | |
| 14 | -- **ORM**: SqlSugar | |
| 15 | -- **认证**: JWT Token | |
| 16 | -- **日志**: Serilog | |
| 17 | -- **架构**: 分层架构 (Entitys/Interfaces/Services) | |
| 18 | - | |
| 19 | -## 🎨 前端开发规范 | |
| 20 | - | |
| 21 | -### 组件开发规范 | |
| 22 | -- ✅ **模块化**: views 与 components 分离 | |
| 23 | -- ✅ **文件命名**: 使用 kebab-case (如: user-dialog.vue) | |
| 24 | -- ✅ **组件封装**: 弹窗、二级页面必须单独创建 Vue 文件 | |
| 25 | -- ❌ **禁止**: 在主页面 template 中直接编写弹窗内容 | |
| 26 | - | |
| 27 | -### UI/UX 规范 | |
| 28 | -- **表格组件**: 统一使用 NCC-table | |
| 29 | -- **表单组件**: Element UI 表单,标签右对齐 | |
| 30 | -- **色彩规范**: | |
| 31 | - - 主色: `#409EFF` | |
| 32 | - - 辅助色: `#67C23A` / `#F56C6C` / `#909399` | |
| 33 | -- **卡片规范**: 高度 100px,内边距 12px,圆角 12px | |
| 34 | -- **按钮对齐**: 操作按钮左对齐,统计卡片内容垂直居中 | |
| 35 | -- **图标显示**: 所有列表数据都要有图标,不同颜色区分类型 | |
| 36 | -- **空值显示**: 没有信息的字段显示"无" | |
| 37 | -- **列表规范**: 列表数据不能换行 | |
| 38 | -- **弹窗显示**: 弹窗需要使用圆角 12px | |
| 39 | - | |
| 40 | -### 性能要求 | |
| 41 | -- 启用懒加载和代码分割 | |
| 42 | -- Vuex 仅缓存必要数据 | |
| 43 | -- 页面加载时间 < 3s | |
| 44 | - | |
| 45 | -## ⚙️ 后端开发规范 | |
| 46 | - | |
| 47 | -### 架构规范 | |
| 48 | -- **分层架构**: Entitys → Interfaces → Services | |
| 49 | -- **依赖注入**: 使用 ASP.NET Core DI 容器 | |
| 50 | -- **异常处理**: 全局捕获,统一 JSON 格式返回 | |
| 51 | - | |
| 52 | -### 数据访问规范 | |
| 53 | -- **分页查询**: 所有列表接口必须分页 | |
| 54 | -- **索引优化**: 关键字段建立索引 | |
| 55 | -- **SQL安全**: 使用 WhereIF 条件查询避免 SQL 注入 | |
| 56 | -- **查询优化**: 避免 N+1 查询,使用 JOIN 优化 | |
| 57 | - | |
| 58 | -### 代码规范 | |
| 59 | -- **XML注释**: 关键方法必须添加 XML 注释 | |
| 60 | -- **异常处理**: 统一异常处理,返回友好错误信息 | |
| 61 | -- **枚举使用**: 状态、类型等固定值必须使用枚举,禁止魔法数字 | |
| 62 | - | |
| 63 | -### ID生成规范 | |
| 64 | -```csharp | |
| 65 | -// ✅ 正确:必须使用YitIdHelper | |
| 66 | -Id = YitIdHelper.NextId().ToString() | |
| 67 | - | |
| 68 | -// ❌ 错误:禁止使用Guid | |
| 69 | -Id = Guid.NewGuid().ToString() | |
| 70 | -``` | |
| 71 | - | |
| 72 | -## 🗄️ 数据库规范 | |
| 73 | - | |
| 74 | -### 命名规范 | |
| 75 | -- **表命名**: 业务前缀 + 功能名称 (如: lq_) | |
| 76 | -- **字段命名**: 驼峰化 | |
| 77 | -- **时间字段**: 统一使用 DateTime 类型 | |
| 78 | - | |
| 79 | -### 查询规范 | |
| 80 | -- **分页查询**: 避免全表扫描 | |
| 81 | -- **索引建立**: 关键查询字段建立索引 | |
| 82 | -- **删除标记**: `base_organize.DeleteMark` 为 `null` 表示未删除 | |
| 83 | - | |
| 84 | -### MCP MySQL 使用规范 | |
| 85 | -- **只支持**: SELECT 语句 | |
| 86 | -- **查看表结构**: | |
| 87 | - ```sql | |
| 88 | - SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_KEY, COLUMN_DEFAULT, EXTRA, COLUMN_COMMENT | |
| 89 | - FROM INFORMATION_SCHEMA.COLUMNS | |
| 90 | - WHERE TABLE_NAME = '<表名>'; | |
| 91 | - ``` | |
| 92 | - | |
| 93 | -### 数据库文档要求 | |
| 94 | -- **文档维护**: 所有数据库信息记录到 `数据库说明.md` | |
| 95 | -- **表结构记录**: 表名、字段名、字段解释、字段关联 | |
| 96 | -- **变更同步**: 表结构变更时同步更新文档 | |
| 97 | - | |
| 98 | -### SQL查询验证规范 | |
| 99 | -- **统计SQL验证**: 对于统计类型的SQL查询,在提交代码前必须先使用MCP MySQL工具执行验证 | |
| 100 | -- **验证要求**: | |
| 101 | - - 确保SQL语法正确 | |
| 102 | - - 验证字段存在且类型匹配 | |
| 103 | - - 检查JOIN关系正确 | |
| 104 | - - 确认统计逻辑准确 | |
| 105 | - - 使用实际数据测试返回结果 | |
| 106 | -- **验证通过**: 只有验证通过的SQL才能提交到代码中 | |
| 107 | - | |
| 108 | -## 🔌 API接口规范 | |
| 109 | - | |
| 110 | -### 接口注释规范 | |
| 111 | -所有API接口方法必须按照以下标准格式编写XML注释: | |
| 112 | - | |
| 113 | -```csharp | |
| 114 | -/// <summary> | |
| 115 | -/// 接口功能描述(简洁明了的一句话) | |
| 116 | -/// </summary> | |
| 117 | -/// <remarks> | |
| 118 | -/// 详细功能说明和使用场景 | |
| 119 | -/// | |
| 120 | -/// 示例请求: | |
| 121 | -/// ```json | |
| 122 | -/// { | |
| 123 | -/// "参数名": "参数值", | |
| 124 | -/// "参数名2": "参数值2" | |
| 125 | -/// } | |
| 126 | -/// ``` | |
| 127 | -/// | |
| 128 | -/// 参数说明: | |
| 129 | -/// - 参数名: 参数描述 | |
| 130 | -/// - 参数名2: 参数描述 | |
| 131 | -/// </remarks> | |
| 132 | -/// <param name="参数名">参数描述</param> | |
| 133 | -/// <returns>返回值描述</returns> | |
| 134 | -/// <response code="200">成功响应描述</response> | |
| 135 | -/// <response code="400">错误响应描述</response> | |
| 136 | -/// <response code="500">服务器错误描述</response> | |
| 137 | -``` | |
| 138 | - | |
| 139 | -### 注释要求 | |
| 140 | -- `<summary>` 必须简洁明了,一句话概括功能 | |
| 141 | -- `<remarks>` 包含详细说明、示例请求、参数说明 | |
| 142 | -- 示例请求使用JSON格式,参数说明使用列表格式 | |
| 143 | -- 必须包含所有可能的HTTP状态码响应说明 | |
| 144 | -- 复杂接口必须提供完整的请求示例 | |
| 145 | - | |
| 146 | -### 接口测试规范 | |
| 147 | -- **必须测试**: 所有新开发的接口或修改的接口都必须进行测试 | |
| 148 | -- **测试要求**: | |
| 149 | - - 使用实际数据测试接口功能 | |
| 150 | - - 验证接口返回数据的正确性 | |
| 151 | - - 测试边界情况和异常情况 | |
| 152 | - - 验证接口性能和响应时间 | |
| 153 | - - 确保接口符合业务逻辑要求 | |
| 154 | -- **测试方式**: 可以使用 curl、Postman、Swagger 等工具进行接口测试 | |
| 155 | -- **测试通过**: 只有测试通过的接口才能提交代码 | |
| 156 | -- **测试token获取**: | |
| 157 | - - **接口地址**: `/api/oauth/Login` | |
| 158 | - - **请求方式**: POST | |
| 159 | - - **Content-Type**: `application/x-www-form-urlencoded` | |
| 160 | - - **请求参数**: | |
| 161 | - - `account`: `admin` | |
| 162 | - - `password`: `e10adc3949ba59abbe56e057f20f883e` | |
| 163 | - - **curl示例**: | |
| 164 | - ```bash | |
| 165 | - curl -X POST "http://localhost:2011/api/oauth/Login" \ | |
| 166 | - -H "Content-Type: application/x-www-form-urlencoded" \ | |
| 167 | - -d "account=admin&password=e10adc3949ba59abbe56e057f20f883e" | |
| 168 | - ``` | |
| 169 | - - **返回格式**: | |
| 170 | - ```json | |
| 171 | - { | |
| 172 | - "code": 200, | |
| 173 | - "msg": "操作成功", | |
| 174 | - "data": { | |
| 175 | - "theme": "functional", | |
| 176 | - "token": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", | |
| 177 | - "user": null | |
| 178 | - } | |
| 179 | - } | |
| 180 | - ``` | |
| 181 | - - **token使用**: 返回的token已包含"Bearer "前缀,可直接在请求头中使用:`Authorization: {data.token}` | |
| 182 | - | |
| 183 | - | |
| 184 | -## 📊 数据一致性规范 | |
| 185 | - | |
| 186 | -### 统计与列表数据 | |
| 187 | -- **数据一致性**: 统计接口与列表接口使用相同的过滤条件、时间范围、权限控制 | |
| 188 | -- **字段命名规范**: DTO字段名称、大小写必须完全一致 | |
| 189 | -- **计算逻辑统一**: 统计数据计算逻辑与列表数据筛选逻辑保持一致 | |
| 190 | -- **权限过滤**: 所有数据查询必须添加相同的园区权限过滤条件 | |
| 191 | -- **分页一致性**: 统计接口和列表接口的分页参数和逻辑必须保持一致 | |
| 192 | - | |
| 193 | -## 📝 代码质量规范 | |
| 194 | - | |
| 195 | -### 代码风格 | |
| 196 | -- **缩进**: 2 空格 | |
| 197 | -- **行长度**: 单行 <= 120 字符 | |
| 198 | -- **注释**: 关键逻辑必须添加注释 | |
| 199 | - | |
| 200 | -### 代码审查 | |
| 201 | -- **自检**: 提交前进行自检 | |
| 202 | -- **审查**: 重要功能需代码审查 | |
| 203 | - | |
| 204 | -## ⚠️ 特殊要求 | |
| 205 | - | |
| 206 | -### 前端特殊要求 | |
| 207 | -- 操作按钮必须左对齐,不要居中 | |
| 208 | -- 统计卡片内容必须垂直居中 | |
| 209 | -- 所有列表数据都要有图标显示,不同类型的图标需要有不同的颜色,但是颜色不能太多 | |
| 210 | -- 没有信息的字段显示"无" | |
| 211 | -- 卡片高度统一为100px,内边距12px,圆角12px | |
| 212 | -- 弹窗、二级页面、复杂表单等必须单独创建 Vue 文件或封装成组件 | |
| 213 | -- 禁止在主页面的 template 中直接编写弹窗内容或复杂交互逻辑 | |
| 214 | -- 组件文件命名使用 kebab-case,如:user-dialog.vue、edit-form.vue | |
| 215 | -- 列表数据不能换行 | |
| 216 | - | |
| 217 | -### 后端特殊要求 | |
| 218 | -- 使用 WhereIF 条件查询避免 SQL 注入 | |
| 219 | -- 关键方法必须添加 XML 注释 | |
| 220 | -- 统一异常处理,返回友好错误信息 | |
| 221 | -- 系统内涉及状态、类型等固定值的字段必须使用枚举类型(enum)定义,禁止使用魔法数字或硬编码字符串;同时需为枚举成员添加 XML 注释,保证可读性与可维护性 | |
| 222 | -- 不需要在NCC.API创建controller,因为Extend里面的service都是可以直接使用的 | |
| 223 | - | |
| 224 | -## 🚨 强制约束 | |
| 225 | - | |
| 226 | -### 环境要求 | |
| 227 | -1. **Node.js版本**: 必须使用16.20.2版本,项目在Node 18下会失败 | |
| 228 | -2. **API传参**: GET请求使用data字段传参,不使用params | |
| 229 | - | |
| 230 | -### 功能要求 | |
| 231 | -3. **权限控制**: 所有数据查询必须添加园区权限过滤 | |
| 232 | -4. **数据一致性**: 统计数据和列表数据必须使用相同的过滤条件 | |
| 233 | -5. **UI一致性**: 所有页面必须使用统一的布局和样式规范 | |
| 234 | -6. **错误处理**: 统一异常处理,返回友好错误信息 | |
| 235 | -7. **性能优化**: 所有列表接口支持分页,避免大数据量查询 | |
| 236 | -8. **安全防护**: 使用SqlSugar ORM防止SQL注入,前端数据渲染时进行HTML转义 | |
| 237 | -9. **数据库文档**: 所有数据库表结构、字段说明、关联关系必须记录到数据库说明文档中 | |
| 238 | -10. **ID生成规范**: 所有实体ID的生成都必须使用 `YitIdHelper.NextId().ToString()`,禁止使用 `Guid.NewGuid().ToString()` 或其他ID生成方式 | |
| 239 | -11.**说明文档规范**:没有要求生成新的md文件的时候,严禁生成新md文件。 | |
| 240 | - | |
| 241 | -## 📋 重要变更记录 | |
| 242 | - | |
| 243 | -### 已弃用的表 | |
| 244 | -- **lq_ryzl (人员资料表) 已弃用**: 人员信息现在统一使用系统用户表 `BASE_USER` 管理 | |
| 245 | -- **lq_mdxx_mdgs (门店归属表) 已弃用**: 门店归属信息已整合到 `lq_mdxx` 表中 |