Kaynağa Gözat

新增代码生成规范

liujiejie 2 ay önce
ebeveyn
işleme
c6740bd089

+ 17 - 0
.cursor/rules/backend-rules.mdc

@@ -0,0 +1,17 @@
+---
+description: Node Express 服务、数据库读取、下载图表服务与后端安全规范
+alwaysApply: true
+---
+
+# Backend Rules
+
+- 后端目录包括 `server/` 和 `downLoadServer/`,均为 Node.js ESM + Express;保持现有模块拆分和 `import/export` 风格。
+- `server/index.js` 使用 `mysql2/promise` 动态连接 MySQL;不得直接硬编码数据库凭据或输出请求中的数据库密码。
+- 动态 SQL 必须校验表名、字段名和输入来源;优先使用反引号保护标识符和参数化查询,避免 SQL 注入。
+- 当前未使用 ORM 或迁移框架;任何数据库结构变更必须先给出迁移 SQL、回滚 SQL、影响范围和兼容方案。
+- `downLoadServer/src/server/server.js` 的路由按 `routes -> controllers -> utils` 组织;新增图表接口应放入对应 route/controller/util。
+- 上传、下载、MinIO、Puppeteer、临时文件、压缩包和图表渲染逻辑必须复用 `utils/chartService`、`uploadService`、`fileManager` 等已有能力。
+- 服务端接口修改必须保持原有路径、方法和响应结构兼容;新增参数必须可选,新增错误信息不得泄漏内部路径、密钥或环境变量。
+- 不得修改 PM2、nginx、部署脚本、生产端口、host 或 `.env` 配置,除非用户明确授权。
+- Express 错误处理应进入现有 `errorHandler` 或局部 `try/catch`;异步任务失败要释放资源并避免进程挂死。
+- 涉及文件系统操作时限制路径范围,避免目录穿越,临时文件应可清理。

+ 17 - 0
.cursor/rules/frontend-rules.mdc

@@ -0,0 +1,17 @@
+---
+description: Vue 2 前端代码、样式、请求、路由、状态和图表规范
+alwaysApply: true
+---
+
+# Frontend Rules
+
+- 前端使用 Vue 2.6、Vue Router 3、Vuex 3、Vue CLI 5、Element UI、SCSS;新增代码保持 Options API 写法。
+- `.vue` 文件保持现有 `template/script/style` 结构;字符串和 import 风格跟随当前文件,不进行无关格式化。
+- API 调用优先放入 `src/api/*.js` 并通过 `@/utils/request`;若所在旧模块已直接使用 `axios`,只做局部兼容修改。
+- 请求必须兼容 `src/utils/request.js` 的 token、`code === 200`、文件流和错误提示处理方式。
+- 路由遵循 `src/router/index.js` 的动态导入和环境变量切换方式;不要破坏 `/home` 子路由和 `resetRouter`。
+- Vuex 修改应放在 `src/store/` 对应模块,保持 sessionStorage 持久化路径和已有命名空间约定。
+- 样式优先使用 SCSS、已有主题变量和 `html[data-theme="..."]`;不要随意引入新的 UI 库或全局 CSS 框架。
+- 驾驶舱相关样式集中维护 `src/views/admin/cockpitManage/cockpit-dashboard.scss`,该文件为全局主题样式,不能改为 scoped。
+- ECharts、Plotly、OpenLayers 功能应复用已有组件、mixin 和配置文件;组件销毁/路由返回时注意清理实例、监听器和定时器。
+- 新增交互必须保持 Element UI 体验一致,并兼容现有权限指令 `v-hasPermi`、主题和环境变量。

+ 16 - 0
.cursor/rules/project-rules.mdc

@@ -0,0 +1,16 @@
+---
+description: 全项目 AI 代码生成规范、复用原则与生产安全底线
+alwaysApply: true
+---
+
+# Project Rules
+
+- AI 必须优先遵守 `docs/AI_SPECS.md`,生成代码前先理解现有目录、技术栈和局部实现风格。
+- 优先复用已有组件、工具函数、API 封装、Vuex 模块、SCSS 变量、图表配置和服务端工具;不要为单个需求创建新的架构方案。
+- 保持现有 JavaScript / Vue 2 Options API 风格,不主动迁移到 TypeScript、Vue 3、Composition API 或其他框架。
+- 修改范围应尽量小、可回滚;不得无理由重构无关文件或格式化大文件。
+- 不得输出、复制或硬编码密钥、token、数据库密码、MinIO 凭据、私有服务口令或 `.env*` 中的敏感值。
+- 禁止修改 PM2 配置、部署脚本、nginx 配置、生产环境变量和代理目标,除非用户明确要求并确认风险。
+- 修改接口必须保持兼容:原 URL、请求方法、字段名、返回结构不破坏;新增字段必须可选并兼容旧数据。
+- 涉及数据库结构或数据迁移时,先生成迁移方案、回滚方案和兼容性说明,不得直接改库。
+- 修改后优先使用项目现有 lint/构建/局部验证方式;无法验证时必须说明风险。

+ 116 - 0
docs/AI_SPECS.md

@@ -0,0 +1,116 @@
+# AI Specs
+
+本文档用于约束 AI 在本项目中生成、修改和审查代码时的行为。所有 AI 输出应优先保持现有实现方式、目录组织和编码风格一致,避免引入不必要的新架构。
+
+## 项目概览
+
+- 项目名称:风机数据管理平台(`pref-web` / `performance-test`)。
+- 主体是 Vue 2 前端工程,基于 Vue CLI 5 构建。
+- 仓库内包含两个 Node.js 服务:
+  - `server/`:Express + mysql2 的数据库读取服务。
+  - `downLoadServer/`:Express 图表/报告下载服务,包含 ECharts、Plotly、Puppeteer、MinIO、DOCX 等能力。
+- 项目通过多套 `.env.*` 与 `vue.config.js` 代理区分不同环境和客户模式。
+
+## 技术栈
+
+### 前端
+
+- Vue `^2.6.14`
+- Vue Router `^3.5.1`
+- Vuex `^3.6.2`
+- Vue CLI Service `~5.0.0`
+- Element UI `^2.15.14`
+- SCSS / Sass,入口样式位于 `src/styles/index.scss`
+- Tailwind CSS PostCSS 7 兼容版本
+- ECharts `^5.5.1`、ECharts GL `^2.0.9`
+- OpenLayers `ol ^9.2.3`
+- Axios `^1.6.8`
+- DataV、Quill、WangEditor、Vue Virtual Scroller、Vue Draggable Resizable 等
+
+### 服务端
+
+- `server/`:Node.js ESM、Express `^4.21.1`、mysql2 `^3.11.5`
+- `downLoadServer/`:Node.js ESM、Express `^4.19.1`、CORS、dotenv、multer、archiver、docx/docxtemplater、Puppeteer、MinIO、Plotly/ECharts
+
+## 目录结构
+
+- `src/main.js`:Vue 入口,注册 Element UI、全局组件、指令、主题、日期工具和路由守卫。
+- `src/router/index.js`:Vue Router 配置,按环境变量切换驾驶舱组件。
+- `src/store/`:Vuex 模块,使用 `vuex-persistedstate` 持久化部分模块。
+- `src/api/`:前端接口封装,优先通过 `@/utils/request` 统一请求。
+- `src/utils/request.js`:Axios 实例、token 注入、响应错误处理和统一请求函数。
+- `src/views/`:业务页面,按模块组织,如 `admin/cockpitManage`、`performance`、`health`、`overview`。
+- `src/components/`:通用组件,包括地图、虚拟列表、富文本、SVG 等。
+- `src/assets/js/constants/echarts-config/`:图表配置模板。
+- `src/styles/`、`src/themes/`:全局样式和主题样式。
+- `server/index.js`:数据库读取服务入口。
+- `downLoadServer/src/server/`:下载服务入口、路由、控制器、中间件和图表工具。
+- `public/runtime-config.js`:运行时配置。
+
+## 编码风格
+
+- 前端主要使用 Vue 2 Options API(`data`、`computed`、`watch`、`methods`、生命周期钩子)。
+- `.vue` 文件通常采用单文件组件结构:`template`、`script`、`style lang="scss"`。
+- 现有代码以 JavaScript 为主,不使用 TypeScript。
+- 字符串多使用双引号;分号保留。
+- 业务接口函数使用具名导出,例如 `export function getWindFieldNames(data) { ... }`。
+- 组件和页面命名混合使用 PascalCase 与业务英文/拼音名;新增代码应优先跟随所在目录命名风格。
+- 样式优先沿用 SCSS、CSS 变量和已有主题选择器,例如 `html[data-theme="tech-blue"]`。
+- 大屏/驾驶舱样式集中在 `cockpit-dashboard.scss`,该文件为全局样式,不能随意改为 scoped。
+- 图表逻辑大量使用 ECharts/Plotly 配置对象,应复用已有图表配置和 mixin。
+
+## 框架版本与构建方式
+
+- 构建命令来自根目录 `package.json`:
+  - `serve:dev`、`serve:hd`、`serve:dt`、`serve:demo`、`serve:jl`
+  - `build:dev`、`build:hd`、`build:dt`、`build:demo`、`build:jl`
+- `vue.config.js` 使用 Vue CLI 配置:
+  - `@` 指向 `src`
+  - `svg-sprite-loader` 处理 `src/icons`
+  - Workbox 生成 Service Worker
+  - `devServer.proxy` 代理 `/api`、`/WZLapi`、`/ETLapi`、`/tiles`、`/AnalysisMulti`、`/transDataWeb`、`/sAlgorithm`、`/databaseApi`、`/downLoadChart`
+
+## API 组织方式
+
+- 前端统一请求优先使用 `src/utils/request.js`。
+- `request` 默认 `baseURL` 为 `window?._BASE_CONFIG?.API || "/api"`。
+- 请求拦截器从 `sessionStorage.vuex.auth.userInfo.token` 注入 `headers.token`。
+- 响应拦截器期望后端返回 `code === 200`,否则使用 Element UI `Message` 提示并 reject。
+- `src/api/*.js` 按业务模块组织 API 函数。
+- 少量旧代码仍直接使用 `axios.get/post`,修改时优先保持局部兼容,不应大范围重写。
+
+## 数据库使用方式
+
+- 前端本身不直接连接数据库。
+- `server/index.js` 使用 `mysql2/promise` 动态创建连接池。
+- 数据库连接参数来自请求参数或请求体(`IP`、`host`、`baseName`、`username`、`password`)。
+- SQL 主要使用 `SHOW TABLES`、`DESCRIBE`、`SHOW COLUMNS`、`SELECT ... LIMIT 500`。
+- 当前未发现 ORM 或数据库迁移框架。
+- 涉及数据库结构变更时,必须先输出迁移方案、回滚方案和兼容性评估,不得直接修改生产数据。
+
+## 生产环境安全规范
+
+- 禁止修改 PM2 配置。
+- 禁止修改部署脚本。
+- 禁止修改 nginx 配置。
+- 禁止输出包含密钥、token、数据库密码、MinIO 凭据、私有地址口令的信息。
+- 禁止将 `.env*`、`downLoadServer/.env` 中的敏感内容复制到回答或新文件。
+- 修改接口时必须保持兼容:保留原 URL、请求方法、字段名和返回结构,新增字段必须可选。
+- 涉及数据库变更必须先生成迁移方案和回滚方案,并等待确认。
+- 不得在未授权情况下修改 `public/runtime-config.js`、环境变量、代理目标或构建/部署命令。
+
+## AI 生成代码原则
+
+1. 优先查找并复用已有组件、工具函数、API 封装、样式变量和图表配置。
+2. 不要为了单个需求引入新框架、新状态管理、新请求库或新 UI 库。
+3. 对已有复杂页面只做局部、可回滚修改,避免重构式改写。
+4. 修改接口调用时优先放在 `src/api/*.js`,除非所在模块已有直接 `axios` 风格。
+5. 新增样式应优先作用于明确作用域,避免污染全局;驾驶舱主题例外,应维护 `cockpit-dashboard.scss` 的主题结构。
+6. 不输出密钥,不读取或展示 `.env` 内容中的具体敏感值。
+7. 变更后应检查相关文件 lint;如无法运行完整测试,应说明未验证项。
+
+## 规则文件映射
+
+- `.cursor/rules/project-rules.mdc`:全项目通用规则、复用原则和生产安全底线。
+- `.cursor/rules/frontend-rules.mdc`:Vue 2 前端、样式、请求、路由、状态、图表与大屏页面规则。
+- `.cursor/rules/backend-rules.mdc`:`server/` 与 `downLoadServer/` 的 Express、数据库、文件上传、图表导出与安全规则。