提交 e8ef7079 authored 作者: 陈泽健's avatar 陈泽健

docs(service-manage): 新增服务管理模块 PRD 与交接文档

- 新增 PRD_需求文档_服务管理模块.md(页面结构、功能设计、交互流程)

- 新增 PRD_计划执行_服务管理模块.md(静态页面开发执行计划)

- 新增 HANDOFF_服务管理.md(模块交接文档,记录已完成项与下一步)
Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
上级 dfe01cae
# HANDOFF 服务管理模块交接文档
> 文档生成时间:2026-07-22
> 分支:troubleshoot-ai-assistant
> 状态:静态页面开发完成
---
## 一、任务概述
开发"服务管理"模块静态页面,参考 `https://192.168.5.44` 统一管理平台的设计风格,实现服务授权、服务升级、服务信息三个子页面。
---
## 二、已完成项
### 2.1 PRD 文档
| 文档 | 路径 | 状态 |
|------|------|------|
| 需求文档 | `Docs/需求文档/服务管理/PRD_需求文档_服务管理模块.md` | ✅ 完成 |
| 执行计划 | `Docs/需求文档/服务管理/PRD_计划执行_服务管理模块.md` | ✅ 完成 |
### 2.2 代码文件
| 文件 | 路径 | 说明 |
|------|------|------|
| 路由文件 | `skill/code/web/routes/service_manage.py` | 三个子页面路由 + 管理员权限校验 |
| 基础模板 | `skill/code/web/templates/service_manage/base.html` | 侧边栏导航 + 顶部栏 + 响应式布局 |
| 服务授权页 | `skill/code/web/templates/service_manage/authorization.html` | 4步骤流程卡片 + 项目信息表单 |
| 服务升级页 | `skill/code/web/templates/service_manage/upgrade.html` | Tab切换 + 服务列表表格 + 批量操作 |
| 服务信息页 | `skill/code/web/templates/service_manage/info.html` | 监控类型筛选 + CPU/内存/硬盘使用率卡片 |
### 2.3 路由测试
```
GET /service-manage/authorization → 200 ✅
GET /service-manage/upgrade → 200 ✅
GET /service-manage/info → 200 ✅
```
- 未登录访问:重定向到 `/login`
- 管理员登录后访问:正常渲染页面
---
## 三、页面结构
### 3.1 服务授权 (authorization.html)
**布局**:4个步骤卡片,Grid 响应式排列
| 步骤 | 功能 | 组件 |
|------|------|------|
| 1 | 申请服务授权 | 下载激活文件按钮 + 上传授权文件 |
| 2 | 填写项目信息 | 5字段表单(项目销售、部署人员、下单时间、服务器密码、项目概述) |
| 3 | 填写并提交部署视图 | 下载部署视图 + 上传 |
| 4 | 填写并提交自检文档 | 下载自检文档 + 上传 |
### 3.2 服务升级 (upgrade.html)
**布局**:Tab 切换 + 工具栏 + 服务列表表格
| Tab | 内容 |
|-----|------|
| 服务重启 | 服务列表(服务名称、类型、升级路径、重启脚本路径、操作) |
| 服务回滚 | 服务列表(服务名称、类型、当前版本、回滚版本、操作) |
**工具栏按钮**
- 下载配置、备份数据库文件、上传更新服务
- 重启已选服务(批量)、下载日志(批量)
### 3.3 服务信息 (info.html)
**布局**:筛选栏 + 3个信息卡片
| 卡片 | 内容 |
|------|------|
| CPU 使用率 | 数值 + 进度条 + 核心数/负载 |
| 内存使用率 | 数值 + 进度条 + 已用/总计 |
| 硬盘使用率 | 数值 + 进度条 + 已用/总计 |
---
## 四、隔离设计
`service_monitor` 模块完全隔离:
| 隔离项 | 实现 |
|--------|------|
| 代码隔离 | `routes/service_manage.py` 独立文件,不导入 service_monitor |
| 模板隔离 | `templates/service_manage/` 独立目录 |
| 数据隔离 | 暂无数据存储需求 |
---
## 五、下一步
### 5.1 功能开发(后续迭代)
| 页面 | 待开发功能 |
|------|------------|
| 服务授权 | 下载激活文件、上传授权文件、保存项目信息、上传部署视图、上传自检文档 |
| 服务升级 | 下载配置、备份数据库、上传更新服务、服务重启/回滚、下载日志 |
| 服务信息 | 监控类型筛选、实时数据获取 |
### 5.2 后端服务层
需要创建 `skill/code/web/services/service_manage_service.py`
- 授权文件处理
- 项目信息存储
- 服务重启/回滚 API 调用
- 监控数据获取
### 5.3 数据存储
可能需要:
- 项目信息存储(JSON 或数据库)
- 服务配置缓存
---
## 六、踩坑警示
### 6.1 模板继承
- 子模板必须使用 `{% extends "service_manage/base.html" %}`(注意路径)
- `base.html` 已定义 `{% block title %}``{% block breadcrumb %}``{% block content %}``{% block extra_css %}``{% block extra_js %}`
### 6.2 权限控制
- 所有页面路由使用 `@page_login_required` 装饰器
- 内部检查 `_is_admin()`,非管理员重定向到首页
### 6.3 静态资源
- 当前页面内联 CSS,复用 `service_monitor` 的颜色变量
- 如需添加 JS/CSS 文件,放入 `static/` 目录
---
## 七、相关文档
- [[PRD_需求文档_服务管理模块]]
- [[PRD_计划执行_服务管理模块]]
- [[PRD_需求文档_服务监测模块]](参考模板结构)
\ No newline at end of file
# PRD 计划执行:服务管理模块
## 项目概述
### 背景
基于 `PRD_需求文档_服务管理模块.md`,实现服务管理模块的静态页面开发。参考 `https://192.168.5.44` 统一管理平台的设计风格,与现有 service-monitor 模块完全隔离。
### 目标
| 目标 | 说明 |
|------|------|
| 模块隔离 | 新模块 service-manage 与 service-monitor 物理隔离,互不影响 |
| 静态页面 | 实现三个页面:服务授权、服务升级、服务信息 |
| 权限控制 | 仅管理员可访问 |
| 响应式设计 | 适配桌面/平板/移动端 |
### 开发周期
- 预计总工时: 7h
- 开发周期: 1-2 天
---
## 技术方案
### 目录结构
```
skill/code/web/
├── service_manage/ # 新增目录
│ ├── __init__.py # Blueprint 暴露
│ └── routes.py # 路由定义
└── templates/service_manage/ # 新增目录
├── base.html # 基础模板(侧边栏 + 顶栏 + 内容区)
├── authorization.html # 服务授权页
├── upgrade.html # 服务升级页
└── info.html # 服务信息页
```
### Blueprint 定义
**文件**: `skill/code/web/service_manage/__init__.py`
```python
"""
service_manage — 服务管理模块(自包含子包)
对外仅暴露 Blueprint:
from service_manage import bp
app.register_blueprint(bp)
"""
from .routes import bp
__all__ = ["bp"]
```
**文件**: `skill/code/web/service_manage/routes.py`
```python
from flask import Blueprint, render_template
from web.decorators import page_login_required
bp = Blueprint('service-manage', __name__, url_prefix='/service-manage')
@bp.route('/')
@bp.route('/authorization')
@page_login_required
def authorization():
"""服务授权页面"""
return render_template('service_manage/authorization.html')
@bp.route('/upgrade')
@page_login_required
def upgrade():
"""服务升级页面"""
return render_template('service_manage/upgrade.html')
@bp.route('/info')
@page_login_required
def info():
"""服务信息页面"""
return render_template('service_manage/info.html')
```
### 模板继承关系
```
templates/base.html (主应用基础模板)
└── templates/service_manage/base.html (模块基础模板)
├── authorization.html
├── upgrade.html
└── info.html
```
### 样式方案
复用主应用 CSS(`/static/css/style.css`),并在 `service_manage/base.html` 中定义模块私有样式:
- 步骤卡片样式
- Tab 切换样式
- 服务列表表格样式
- 信息卡片样式
---
## 实施计划
### 阶段 1: 模块基础结构(1h)
| 序号 | 任务 | 预计时间 | 依赖 |
|------|------|----------|------|
| 1.1 | 创建 `skill/code/web/service_manage/` 目录 | 5min | - |
| 1.2 | 编写 `__init__.py`(Blueprint 暴露) | 10min | 1.1 |
| 1.3 | 编写 `routes.py`(路由定义) | 20min | 1.2 |
| 1.4 | 在 `server.py` 注册 Blueprint | 10min | 1.3 |
| 1.5 | 创建 `templates/service_manage/` 目录 | 5min | - |
| 1.6 | 编写 `base.html` 基础模板 | 10min | 1.5 |
### 阶段 2: 服务授权页面(2h)
| 序号 | 任务 | 预计时间 | 依赖 |
|------|------|----------|------|
| 2.1 | 编写 `authorization.html` 页面框架 | 30min | 1.6 |
| 2.2 | 实现 4 个步骤卡片布局 | 45min | 2.1 |
| 2.3 | 实现步骤 2 表单(5 个字段) | 30min | 2.2 |
| 2.4 | 样式调整和细节优化 | 15min | 2.3 |
### 阶段 3: 服务升级页面(2h)
| 序号 | 任务 | 预计时间 | 依赖 |
|------|------|----------|------|
| 3.1 | 编写 `upgrade.html` 页面框架 | 20min | 1.6 |
| 3.2 | 实现 Tab 切换功能(服务重启/服务回滚) | 30min | 3.1 |
| 3.3 | 实现顶部操作按钮栏 | 20min | 3.2 |
| 3.4 | 实现服务列表表格 | 40min | 3.3 |
| 3.5 | 样式调整和细节优化 | 10min | 3.4 |
### 阶段 4: 服务信息页面(1h)
| 序号 | 任务 | 预计时间 | 依赖 |
|------|------|----------|------|
| 4.1 | 编写 `info.html` 页面框架 | 15min | 1.6 |
| 4.2 | 实现监控类型下拉选择 | 15min | 4.1 |
| 4.3 | 实现 3 个信息卡片(CPU/内存/硬盘) | 20min | 4.2 |
| 4.4 | 样式调整和细节优化 | 10min | 4.3 |
### 阶段 5: 集成与验收(1h)
| 序号 | 任务 | 预计时间 | 依赖 |
|------|------|----------|------|
| 5.1 | 更新 `utils/modules.py` 模块元数据 | 10min | 1.4 |
| 5.2 | 验证三个页面路由正常 | 10min | 5.1 |
| 5.3 | 验证与 service-monitor 模块隔离 | 10min | 5.2 |
| 5.4 | 响应式布局测试和调整 | 20min | 5.3 |
| 5.5 | 管理员权限验证 | 10min | 5.4 |
---
## 测试验证
### 功能测试项
| 序号 | 测试项 | 预期结果 |
|------|--------|----------|
| 1 | 访问 `/service-manage/authorization` | 正确显示服务授权页面 |
| 2 | 访问 `/service-manage/upgrade` | 正确显示服务升级页面 |
| 3 | 访问 `/service-manage/info` | 正确显示服务信息页面 |
| 4 | 点击 Tab 切换(服务重启/服务回滚) | Tab 正确切换 |
| 5 | 服务升级页表格复选框全选 | 所有行被选中 |
| 6 | 响应式布局(移动端) | 页面自适应 |
### 隔离验证
| 序号 | 测试项 | 预期结果 |
|------|--------|----------|
| 1 | service-manage 代码不导入 service_monitor | 无交叉导入 |
| 2 | service-monitor 代码不导入 service_manage | 无交叉导入 |
| 3 | 两个模块数据目录独立 | 无共享数据 |
### 权限验证
| 序号 | 测试项 | 预期结果 |
|------|--------|----------|
| 1 | 未登录访问 `/service-manage/*` | 重定向到登录页 |
| 2 | 普通用户访问 `/service-manage/*` | 无权限提示(待定) |
| 3 | 管理员访问 `/service-manage/*` | 正常访问 |
---
## 执行记录
### 2026-07-22
| 时间 | 完成项 | 备注 |
|------|--------|------|
| - | 需求文档编写 | 完成 |
| - | 计划执行文档编写 | 完成 |
---
## 注意事项
### 隔离原则
- **代码隔离**: `service_manage/` 目录独立,不与 `service_monitor/` 共享代码
- **模板隔离**: `templates/service_manage/` 目录独立
- **数据隔离**: 暂无数据存储需求
### 样式复用
- 复用主应用 CSS,避免重复定义
- 遵循现有设计规范(颜色、字体、间距)
### 响应式设计
- 参考现有 `service_monitor` 的响应式实现
- 使用 CSS Grid/Flexbox 布局
---
## 相关文档
- [[PRD_需求文档_服务管理模块]]
- [[PRD_需求文档_服务监测模块]]
- [[PRD_计划执行_平台化改造与模块切换]]
\ No newline at end of file
# PRD 需求文档:服务管理模块
## 基本信息
| 项目 | 内容 |
|------|------|
| 文档类型 | PRD 需求文档 |
| 所属模块 | 服务管理(service-manage) |
| 创建日期 | 2026-07-22 |
| 负责人 | czj |
| 优先级 | P1 |
| 状态 | 开发中 |
| 关联分支 | troubleshoot-ai-assistant |
## 背景与目标
### 背景
当前项目已实现"服务监测"模块(service-monitor),用于监测服务器/服务状态并输出报告。现需要开发配套的"服务管理"模块(service-manage),提供服务授权管理、服务升级管理、服务信息查看等功能。
### 目标
1. 参考 `https://192.168.5.44` 统一管理平台的模块设计,实现静态页面
2. 与现有"服务监测"模块完全隔离,互不影响
3. 仅管理员可访问,确保安全性
### 非目标
- 本次仅开发静态页面,不实现后端业务逻辑
- 不涉及与外部系统的集成(如授权文件生成、服务重启等)
## 需求详情
### 1. 服务授权页面(Service Authorization)
**页面路径**: `/service-manage/authorization`
**功能描述**: 服务授权申请流程,分4个步骤卡片展示
#### 步骤 1: 申请服务授权
- 卡片标题:"1. 申请服务授权"
- 操作按钮:
- "下载激活文件" 按钮
- "上传授权文件" 按钮(文件上传控件)
#### 步骤 2: 填写项目信息
- 卡片标题:"2. 填写项目信息"
- 表单字段(带必填标记 *):
- 项目销售(文本输入框)
- 部署人员(文本输入框)
- 下单时间(日期时间选择器)
- 服务器密码(密码输入框)
- 项目概述(多行文本框)
- 操作按钮:"保存" 按钮
#### 步骤 3: 填写并提交部署视图
- 卡片标题:"3. 填写并提交部署视图"
- 操作按钮:"下载部署视图" 按钮
#### 步骤 4: 填写并提交自检文档
- 卡片标题:"4. 填写并提交自检文档"
- 操作按钮:"下载自检文档" 按钮
**验收标准**:
- [ ] 页面正确显示4个步骤卡片
- [ ] 表单字段布局合理,标签清晰
- [ ] 按钮样式与平台整体风格一致
- [ ] 响应式布局适配移动端
---
### 2. 服务升级页面(Service Upgrade)
**页面路径**: `/service-manage/upgrade`
**功能描述**: 服务重启/回滚管理,Tab 切换 + 服务列表表格
#### 顶部标签页
- Tab 1: "服务重启"(默认选中)
- Tab 2: "服务回滚"
#### 顶部操作栏
- "下载配置" 按钮
- "备份数据库文件" 按钮
- "上传更新服务" 按钮(文件上传)
- "重启已选服务" 按钮(批量操作,默认禁用)
- "下载日志" 按钮(批量操作,默认禁用)
#### 服务列表表格
| 列名 | 说明 |
|------|------|
| ☐ | 全选复选框 |
| 服务名称 | 如"运维系统"、"预定系统2.0" |
| 服务类型 | 如"PYTHON"、"JAVA" |
| 升级路径 | 服务部署路径 |
| 重启脚本路径 | 启动脚本路径 |
| 操作 | "重启"按钮、"下载日志"按钮 |
**验收标准**:
- [ ] Tab 切换功能正常
- [ ] 表格正确渲染,列宽合理
- [ ] 复选框可选择/取消
- [ ] 批量操作按钮根据选择状态启用/禁用
- [ ] 响应式布局适配移动端
---
### 3. 服务信息页面(Service Info)
**页面路径**: `/service-manage/info`
**功能描述**: 服务监控信息概览
#### 筛选区域
- 监控类型下拉选择框(默认值:"system")
#### 信息卡片区域
- CPU 使用率(进度条/数值展示)
- 内存使用率(进度条/数值展示)
- 硬盘使用率(进度条/数值展示)
**验收标准**:
- [ ] 下拉选择框功能正常
- [ ] 信息卡片布局清晰
- [ ] 进度条/数值展示直观
---
## 页面布局设计
### 通用布局
- 继承 `base.html` 模板
- 顶部导航栏:显示当前模块路径(如"系统管理 / 服务授权")
- 左侧菜单栏:
- 服务授权(链接到 `/service-manage/authorization`
- 服务升级(链接到 `/service-manage/upgrade`
- 服务信息(链接到 `/service-manage/info`
### 顶部 Tab 导航
- 三个一级菜单作为 Tab:
- 服务授权
- 服务升级
- 服务信息
- 点击 Tab 切换到对应页面
---
## 技术方案
### 模块隔离方案
参考 `service_monitor` 的隔离模式:
```
skill/code/web/
├── service_manage/ # 新增:服务管理模块(自包含子包)
│ ├── __init__.py # 仅暴露 Blueprint
│ ├── routes.py # 路由层:页面路由
│ └── templates/ # 模板(可选,或复用主 templates/)
└── templates/service_manage/ # 模板目录
├── base.html # 基础模板
├── authorization.html # 服务授权页
├── upgrade.html # 服务升级页
└── info.html # 服务信息页
```
### Blueprint 注册
- Blueprint 名称: `service-manage`
- URL 前缀: `/service-manage`
- 权限控制: `@page_login_required` + 管理员权限检查
### 模板继承
- 创建 `templates/service_manage/base.html` 作为模块基础模板
- 子模板继承 base.html,填充 `{% block content %}`
---
## 影响范围
| 文件 | 变更类型 | 说明 |
|------|----------|------|
| `skill/code/web/service_manage/__init__.py` | 新增 | Blueprint 定义 |
| `skill/code/web/service_manage/routes.py` | 新增 | 页面路由 |
| `skill/code/web/templates/service_manage/base.html` | 新增 | 基础模板 |
| `skill/code/web/templates/service_manage/authorization.html` | 新增 | 服务授权页 |
| `skill/code/web/templates/service_manage/upgrade.html` | 新增 | 服务升级页 |
| `skill/code/web/templates/service_manage/info.html` | 新增 | 服务信息页 |
| `skill/code/web/server.py` | 修改 | 注册新 Blueprint |
| `skill/code/web/utils/modules.py` | 修改 | 更新模块元数据 |
---
## 非功能需求
| 项目 | 要求 |
|------|------|
| 性能 | 静态页面加载时间 < 500ms |
| 兼容性 | 支持 Chrome、Edge、Firefox 最新版本 |
| 响应式 | 适配桌面(>1200px)、平板(768-1200px)、移动端(<768px) |
| 可访问性 | 符合 WCAG 2.1 AA 标准 |
---
## 时间估算
| 任务 | 预计时间 |
|------|----------|
| 创建模块目录结构和 Blueprint | 0.5h |
| 开发基础模板 (base.html) | 1h |
| 开发服务授权页面 | 2h |
| 开发服务升级页面 | 2h |
| 开发服务信息页面 | 1h |
| 注册 Blueprint 和模块元数据更新 | 0.5h |
| 响应式适配和样式调整 | 1h |
| **总计** | **7h** |
---
## 验收清单
- [ ] 三个页面均可正常访问
- [ ] 页面布局与参考平台一致
- [ ] Tab 切换功能正常
- [ ] 表单和按钮样式统一
- [ ] 响应式布局正常
- [ ] 与 service-monitor 模块完全隔离,无交叉影响
- [ ] 仅管理员可访问
---
## 附录
### 参考链接
- 参考平台: `https://192.168.5.44/#/backend/backstage`
- 账号: superadmin / Ubains@1357
### 相关文档
- [[PRD_需求文档_服务监测模块]]
- [[PRD_计划执行_平台化改造与模块切换]]
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论