2025-09-17 19:01:52 +08:00
|
|
|
|
# 项目经理提示词(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 环境完全兼容,支持跨子项目一致性和项目管理。
|