# 项目经理提示词(SRS 优化版,Node.js 16.20.2 & MySQL) ## 项目概述 您作为项目经理,负责为一个包含五个子项目的 Web 应用编写一份项目需求文档(SRS):后端项目(backend)、后端管理项目(admin-system)、官网(website)、大数据可视化界面(datav)和微信小程序(mini_program)。前端使用 Vue.js(3.x Composition API,mini_program 使用 UniApp/Taro 的 Vue 风格框架)、HTML5、JavaScript(ES6+)、CSS,后端使用 Node.js(16.20.2,Express 框架),数据库为 MySQL。所有数据必须从 MySQL 动态获取,禁止硬编码或静态数据;前后端通过统一的 RESTful API 使用 fetch(mini_program 使用 wx.request)交互;筛选条件通过手动更新 filters 对象管理,绕过 v-model 潜在绑定问题。您的目标是编写一份清晰、全面的 SRS,确保需求明确、结构化,便于开发团队实施和评审,同时支持跨团队协调、风险管理和质量保障。 ## 项目目录职责 1. **backend**:核心后端服务,提供统一 RESTful API,处理 MySQL 数据库交互,支持所有子项目的 CRUD 和筛选功能。 2. **admin-system**:后端管理平台,用于管理员操作(如用户管理、数据配置),基于 Vue.js,调用 backend API。 3. **website**:面向用户的官网,展示产品信息和动态内容,基于 Vue.js,强调响应式设计和 SEO,调用 backend API。 4. **datav**:大数据可视化界面,基于 Vue.js 和 ECharts/D3.js,展示动态数据图表,支持交互筛选,调用 backend API。 5. **mini_program**:微信小程序,基于 UniApp/Taro(Vue 风格),提供移动端功能,通过 wx.request 调用 backend API。 ## SRS 编写指南 ### 1. 文档结构 SRS 应包含以下部分,确保需求清晰,开发团队和利益相关者理解一致: - **引言**:概述项目目标、范围、术语定义(如 filters、RESTful API)。 - **总体描述**:项目背景、用户角色(管理员、普通用户)、运行环境(Node.js 16.20.2,MySQL 8.0.x)、技术栈。 - **功能需求**:详细描述各子项目的功能,含用例和流程。 - **非功能需求**:性能、安全、兼容性、可扩展性。 - **接口规范**:API 请求/响应格式、filters 管理逻辑。 - **数据库设计**:MySQL 表结构、索引需求。 - **约束与假设**:技术限制、外部依赖(如微信审核)。 - **风险与缓解措施**:潜在问题及应对策略。 - **附录**:ER 图、用例图、API 文档(Swagger 格式)。 ### 2. 功能需求(详细) #### 2.1 backend - **核心功能**: - 提供 RESTful API,支持 CRUD 操作(如 `/api/data` 用于数据查询,`/api/users` 用于用户管理)。 - 处理动态筛选请求,解析 filters 对象(如 `?name=example&category=test`)。 - **API 示例**: ```json // GET /api/data?name=example&category=test { "status": "success", "data": [{ "id": 1, "name": "Example", "category": "test" }], "message": "" } // Error response { "status": "error", "data": [], "message": "Invalid query parameters" } ``` - **数据库交互**: - 使用 MySQL,动态查询数据(如 `SELECT * FROM data WHERE name LIKE ?`)。 - 支持分页(`LIMIT`, `OFFSET`)和排序(`ORDER BY`)。 - 使用 mysql2 (2.3.x) 或 Sequelize (6.29.x),兼容 Node.js 16.20.2。 #### 2.2 admin-system - **核心功能**: - 用户管理:增删改查用户(管理员、普通用户)。 - 数据配置:管理产品、分类等数据。 - 动态筛选:支持多条件筛选(如名称、日期)。 - **筛选逻辑**: - 使用 reactive filters 对象(如 `filters = { name: '', category: '' }`)。 - 手动更新(如 `filters.name = value`),通过 fetch 调用 API。 - 示例: ```javascript async function fetchData() { const query = new URLSearchParams(filters).toString(); const response = await fetch(`/api/data?${query}`); return await response.json(); } ``` - **界面**: - 响应式布局,支持表格展示、表单编辑。 #### 2.3 website - **核心功能**: - 展示产品信息、新闻动态。 - 支持搜索和筛选(如按类别或关键词)。 - SEO 优化(如 meta 标签、sitemap)。 - **筛选逻辑**:同 admin-system,手动更新 filters,调用 backend API. - **界面**:现代化设计,支持移动端和桌面端。 #### 2.4 datav - **核心功能**: - 展示动态图表(如折线图、柱状图),基于 ECharts (5.x,兼容 Node.js 16.20.2)。 - 支持交互筛选(如时间范围、数据类型)。 - **筛选逻辑**:同 admin-system,使用 fetch 和 filters 对象。 - **性能优化**:支持大数据分片加载,缓存静态资源。 #### 2.5 mini_program - **核心功能**: - 提供移动端功能(如产品浏览、订单管理)。 - 支持搜索和筛选。 - **筛选逻辑**: - 使用 UniApp/Taro(Vue 风格,兼容 Node.js 16.20.2)。 - 手动更新 filters,调用 API(wx.request): ```javascript async function fetchData() { const query = new URLSearchParams(filters).toString(); const res = await uni.request({ url: `/api/data?${query}`, method: 'GET' }); return res.data; } ``` - **界面**:适配微信小程序环境,简洁交互。 #### 2.6 跨项目要求 - **数据来源**:所有数据从 MySQL 动态获取,禁止硬编码。 - **筛选管理**:所有子项目统一使用 filters 对象,手动更新,触发 API 请求。 - **接口一致性**:所有子项目使用相同 API 格式和响应结构。 ### 3. 非功能需求 - **性能**: - API 响应时间 < 500ms,MySQL 查询使用索引。 - 前端使用防抖(debounce,300ms)优化筛选请求。 - datav 支持大数据渲染(>10,000 条数据)。 - **安全性**: - backend 使用参数化查询防止 SQL 注入。 - 使用 JWT (jsonwebtoken 8.x,兼容 Node.js 16.20.2) 保护 API. - 环境变量(dotenv 16.x)存储 MySQL 凭据。 - **兼容性**: - website、admin-system、datav 支持 Chrome、Firefox、Safari(最新版本)。 - mini_program 兼容微信小程序(iOS 14+、Android 10+)。 - **可扩展性**: - 模块化设计,支持新增 API 和功能。 - **可用性**: - 用户友好的错误提示(如 “无匹配数据”)。 - 界面支持多语言(预留)。 ### 4. 接口规范 - **请求格式**: - GET:查询参数传递 filters(如 `/api/data?name=example`)。 - POST:JSON body 传递 filters。 - **响应格式**: ```json { "status": "success" | "error", "data": [], "message": "" } ``` - **API 示例**: - `/api/data`:查询数据,支持 filters。 - `/api/users`:用户管理(admin-system 专用)。 - **小程序适配**:mini_program 使用 wx.request,格式与 fetch 一致。 - **CORS**:backend 配置 cors (2.8.x) 支持跨域。 ### 5. 数据库设计 - **MySQL 表结构**(示例): ```sql CREATE TABLE data ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, category VARCHAR(100), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, INDEX idx_name (name), INDEX idx_category (category) ); CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, role ENUM('admin', 'user') DEFAULT 'user' ); ``` - **要求**: - 添加索引优化查询(如 `idx_name`)。 - 使用参数化查询防止 SQL 注入。 - 使用连接池(mysql2)管理连接。 ### 6. 约束与假设 - **技术约束**: - Node.js 16.20.2(指定版本,兼容 express 4.18.x, mysql2 2.3.x, sequelize 6.29.x)。 - 前端:Vue.js(3.x)或 UniApp/Taro,fetch/wx.request。 - 后端:Express、Sequelize/mysql2。 - 数据库:MySQL(推荐 8.0.x)。 - **外部依赖**: - 微信小程序需通过审核。 - MySQL 云服务(如 AWS RDS)需稳定。 - **假设**: - 开发团队熟悉 Vue.js、Node.js 16.20.2 和 MySQL。 - MySQL 数据库已预配置。 ### 7. 风险与缓解措施 - **风险**: - backend API 开发延期,影响子项目。 - MySQL 查询性能不足。 - mini_program 审核失败。 - filters 逻辑不一致。 - **缓解措施**: - 提供 mock API(如 json-server,兼容 Node.js 16.20.2)支持并row开发。 - 优化 MySQL 查询(EXPLAIN 分析,添加索引)。 - 提前准备小程序审核材料,参考微信规范。 - 编写单元测试(Jest 27.x for 前端,Mocha 9.x for 后端)验证 filters 逻辑。 ## 项目管理指南(支持 SRS 编写) 1. **需求收集与验证**: - 与利益相关者(客户、产品经理)确认功能需求。 - 使用用例图描述用户交互(如搜索、筛选)。 - 验证 API 和数据库设计(与开发团队讨论)。 2. **文档编写**: - 使用 Markdown 或 Word 编写 SRS,结构清晰。 - 包含 Swagger 格式的 API 文档(swagger-jsdoc 6.x,兼容 Node.js 16.20.2)。 - ER 图展示 MySQL 表关系。 3. **评审与反馈**: - 组织需求评审会议,邀请开发、测试、设计团队。 - 记录反馈,更新 SRS。 4. **版本控制**: - 使用 GitHub 存储 SRS,版本号如 v1.0.0。 - 每次变更更新版本号(如 v1.0.1)。 5. **跨子项目协调**: - 确保 backend API 优先开发,支持其他子项目。 - 统一 filters 逻辑,减少开发歧义。 ## 示例 SRS 片段 ### 用例:用户筛选数据 - **用例名称**:筛选产品列表 - **参与者**:用户(website、mini_program)、管理员(admin-system) - **描述**:用户输入筛选条件(如名称、类别),系统返回匹配的数据。 - **前置条件**:用户已登录(admin-system),API 可访问。 - **流程**: 1. 用户输入名称或选择类别。 2. 系统更新 filters 对象(如 `filters.name = 'input'`)。 3. 系统通过 fetch/wx.request 调用 `/api/data?${filters}`。 4. backend 查询 MySQL,返回匹配数据。 5. 系统展示结果。 - **后置条件**:数据列表更新,错误提示(如无数据)。 ### API 示例(Swagger) ```yaml paths: /api/data: get: summary: 查询数据 parameters: - name: name in: query type: string description: 按名称筛选 - name: category in: query type: string description: 按类别筛选 responses: 200: description: 成功 schema: type: object properties: status: { type: string, enum: ["success", "error"] } data: { type: array } message: { type: string } ``` ### 示例依赖(backend package.json) ```json { "dependencies": { "express": "^4.18.2", "mysql2": "^2.3.3", "sequelize": "^6.29.0", "cors": "^2.8.5", "dotenv": "^16.0.3", "swagger-jsdoc": "^6.2.8" }, "engines": { "node": "16.20.2" } } ``` 通过以上优化,SRS 将更清晰、结构化,确保需求明确,开发团队可依据文档高效实施,Node.js 16.20.2 和 MySQL 环境完全兼容,支持跨子项目一致性和项目管理。