MilliSim/毫秒数仿需求文档-详细版.md

676 lines
21 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 毫秒数仿MilliSim详细需求文档
> 版本v1.0
> 更新日期2026-06-19
> 状态:已确认,可进入设计开发阶段
---
## 0. 技术栈与项目约束
### 0.1 前端技术栈
| 项 | 选型 |
|----|------|
| 框架 | Vue 3 + TypeScript |
| 构建工具 | Vite |
| UI 框架 | Element Plus浅色模式定制 |
| 状态管理 | Pinia |
| 路由 | Vue Router 4 |
| HTTP | Axios |
| 图表 | ECharts 5 |
| 富文本 | WangEditor 5 |
| 视频播放 | Video.js |
| 图标 | 全局 SVG 图标iconify 或本地 SVG sprite |
| 国际化 | 仅中文,不引入 i18n |
### 0.2 后端技术栈
| 项 | 选型 |
|----|------|
| 框架 | .NET Core 10ASP.NET Core Web API |
| ORM | Entity Framework Core 10 + Pomelo MySQL Provider |
| 数据库 | MySQL 5.7 |
| 认证 | JWT Bearer Token7天有效期 |
| 密码哈希 | BCrypt.Net-Next |
| 日志 | Serilog文件 + 数据库) |
| 对象存储 | 腾讯云 COS SDK + 本地文件系统(双模式动态切换) |
| 验证码 | Lazy.Captcha.Net |
### 0.3 数据库连接
```
Server=sh-cdb-67f2jqfa.sql.tencentcdb.com;Port=27319;Database=millisim4;Uid=unity;Pwd=unity@1478;CharSet=utf8mb4;
```
### 0.4 部署方式
- 前后端均部署于 IIS
- 前端构建为静态文件IIS 站点托管
- 后端发布为 DLLIIS 应用程序池托管ASP.NET Core Module V2
- 静态资源由 IIS 直接响应API 请求反代至 Kestrel
### 0.5 全局设计规范
- **浅色模式**:全局浅色背景,科技蓝主色调(#1677FF / #0958D9 渐变)
- **SVG 图标**:所有交互元素、导航、状态指示均使用 SVG 图标,禁止使用字体图标
- **设计感**:圆角卡片、柔和阴影、渐变点缀、微交互动画、留白克制
- **全响应式**前台完整响应式PC / 平板 / 手机),管理后台以 PC 为主
- **字体**:系统字体栈,中文优先 `"PingFang SC", "Microsoft YaHei", sans-serif`
---
## 1. 产品定位
一站式虚拟仿真项目资产库 + 商业化展示平台 + 精细化权限管控系统。
面向虚拟仿真行业,提供项目展示、在线体验、客户授权、销售管理、内容运营的一体化解决方案。
---
## 2. 用户角色与权限
### 2.1 角色定义
| 角色 | 说明 | 数据范围 |
|------|------|----------|
| 访客 | 浏览公开项目,无需登录 | 公开项目 |
| 客户 | 浏览 + 授权体验 + 收藏 + 个人中心 | 本人数据 |
| 销售 | 客户管理 + 授权管理 + 咨询消息 | 仅本人创建的客户 |
| 产品经理 | 项目管理 + 内容管理 + 无需授权即可体验 | 全部项目 |
| 管理员 | 全部权限 | 全部数据 |
### 2.2 权限矩阵
| 功能模块 | 访客 | 客户 | 销售 | 产品经理 | 管理员 |
|----------|:----:|:----:|:----:|:--------:|:------:|
| 前台浏览项目 | ✓ | ✓ | ✓ | ✓ | ✓ |
| 在线体验 WebGL | ✗ | 需授权 | ✓ | ✓ | ✓ |
| 收藏 / 个人中心 | ✗ | ✓ | ✓ | ✓ | ✓ |
| 管理后台访问 | ✗ | ✗ | ✓ | ✓ | ✓ |
| 项目管理 | ✗ | ✗ | ✗ | ✓ | ✓ |
| 客户管理 | ✗ | ✗ | 仅本人 | ✗ | ✓ |
| 授权管理 | ✗ | ✗ | 仅本人客户 | ✗ | ✓ |
| 员工管理 | ✗ | ✗ | ✗ | ✗ | ✓ |
| 系统设置 | ✗ | ✗ | ✗ | ✗ | ✓ |
### 2.3 销售数据隔离规则
- 销售仅能查看、编辑、授权**自己创建**的客户
- 销售之间客户数据完全隔离
- 管理员可查看全部客户数据
- 客户创建时自动绑定创建人销售ID
---
## 3. 前台功能详细需求
### 3.1 首页
#### 3.1.1 轮播 Banner
- 支持后台配置,可上传图片 / 设置标题 / 跳转链接 / 排序
- 默认科技风格背景图
- 自动轮播5秒间隔支持手动切换
- 响应式适配PC 1920×600 / 平板 1024×400 / 手机 750×360
#### 3.1.2 核心优势展示
- 4 个优势卡片,图标 + 标题 + 描述
- 后台可配置内容
#### 3.1.3 精选项目推荐
- 展示 8 个精选项目(后台标记为推荐)
- 纵向网格卡片布局PC 4列 / 平板 2列 / 手机 1列
#### 3.1.4 分类快捷导航
- 展示所有启用的项目分类
- 图标 + 名称,点击跳转项目中心并筛选
#### 3.1.5 合作伙伴展示
- 可控制显隐(后台开关)
- Logo 滚动展示
#### 3.1.6 CTA 引导区
- 引导注册 / 联系咨询
- 渐变背景 + 行动按钮
### 3.2 项目中心
#### 3.2.1 筛选区
- **关键词搜索**SQL LIKE 查询项目名称和描述
- **分类筛选**:单选下拉
- **平台筛选**多选WebGL / Android / Windows / Mac / VR
- **排序**:最新发布 / 最多浏览 / 最多体验 / 最多收藏
#### 3.2.2 项目卡片列表
- **纵向网格卡片**布局
- 卡片内容:封面图、名称、分类标签、平台标签、浏览数、体验数、收藏数、收藏按钮
- 悬浮效果:卡片上浮 + 阴影增强 + 封面缩放
- 响应式PC 4列 / 平板 2列 / 手机 1列
#### 3.2.3 分页
- 默认每页 12 条
- 页码展示 + 上一页 / 下一页
### 3.3 项目详情
#### 3.3.1 基础信息
- 项目名称、分类、平台标签、浏览数、体验数、收藏数
- 发布时间、更新时间
- 特性标签展示
#### 3.3.2 视频播放
- **格式支持**MP4 + WebM
- **防盗链**:代理模式隐藏 COS URLBlob URL 加载
- **水印**:动态水印(用户名 + 时间戳)
- **封面**:支持设置视频封面图
- **控件**:播放/暂停、进度条、音量、全屏、倍速
- **快捷键**空格暂停、左右快进、上下音量、F 全屏
#### 3.3.3 截图画廊
- 缩略图列表 + 点击放大查看
- 支持左右切换、键盘导航
#### 3.3.4 富文本详情
- WangEditor 渲染,支持图片、视频、代码块、表格
#### 3.3.5 交互操作
- **收藏 / 取消收藏**:登录后可用
- **分享**:复制链接 + 二维码
- **在线运行**WebGL 项目展示,需授权
- **下载**:安卓 APK / 桌面端压缩包,需授权
- **唤醒**桌面端协议唤醒custom://protocol
#### 3.3.6 相关项目推荐
- 同分类下取 4 个项目(排除当前)
- 纵向网格卡片
### 3.4 WebGL 在线运行
#### 3.4.1 运行环境
- 全屏 iframe 加载 Unity WebGL 项目
- 加载进度动画(百分比 + 旋转图标)
- 运行计时显示(右上角)
#### 3.4.2 安全措施
- **动态水印**:半透明用户名 + 时间戳,随机位置
- **禁用右键**contextmenu 事件拦截
- **防盗链**HTML/JSON 代理模式改写资源引用
#### 3.4.3 自适应
- 代理注入 CSS解决 Unity 固定分辨率适配问题
- 全屏切换支持
#### 3.4.4 限制策略
- **不限制**运行时长和并发数
- 记录每次体验日志(用户、项目、开始时间、时长)
### 3.5 个人中心
#### 3.5.1 个人信息
- 头像、昵称、手机号、邮箱编辑
- 用户名只读
#### 3.5.2 我的收藏
- 收藏项目列表,支持取消收藏
- 纵向网格卡片展示
#### 3.5.3 体验记录
- 体验历史列表(项目名、体验时长、体验时间)
- 分页展示
#### 3.5.4 修改密码
- 需验证旧密码
- 新密码强度校验8位以上含字母数字
### 3.6 其他页面
| 页面 | 说明 |
|------|------|
| 用户登录 | 账号密码 + 图形验证码 |
| 技术能力 | 富文本静态页,展示技术栈 |
| 关于我们 | 公司介绍,富文本 |
| 联系咨询 | 表单提交(姓名、联系方式、需求描述) |
| 隐私政策 | 静态文本 |
| 服务条款 | 静态文本 |
---
## 4. 管理后台功能详细需求
### 4.1 工作台
#### 4.1.1 统计卡片
- 项目总数、客户总数、今日访问量、有效授权数
- 卡片含图标 + 数值 + 同比环比
#### 4.1.2 趋势图
- 访问 / 体验趋势折线图(近 7 天 / 30 天切换)
- ECharts 渲染
#### 4.1.3 分类分布
- 饼图展示项目分类分布
#### 4.1.4 其他面板
- 最近动态操作日志摘要10 条)
- 热门项目 Top 5
- 未读消息数 + 快捷查看
### 4.2 项目管理
#### 4.2.1 项目列表
- 搜索(名称)+ 筛选(分类 / 平台 / 状态)
- 列表展示:封面、名称、分类、平台、状态、浏览数、体验数、操作
- 状态切换:发布 / 下架(开关)
- 操作:编辑、删除、资源包管理
#### 4.2.2 项目编辑
- **基础信息**:名称、分类、平台(多选)、封面图、简介
- **特性标签**:多选关联
- **截图管理**:多图上传 + 拖拽排序
- **视频管理**:上传 MP4/WebM + 设置封面
- **富文本详情**WangEditor 编辑
- **发布配置**:发布状态、发布时间、是否推荐、排序权重
#### 4.2.3 资源包管理
- **WebGL**zip 上传自动解压部署到指定目录
- **Android**APK 上传
- **桌面端**压缩包上传zip/rar
- 每个资源包记录版本号、上传时间、文件大小
#### 4.2.4 编辑方式
- 弹窗快速编辑(基础字段)
- 独立页面完整编辑(所有字段)
### 4.3 客户管理
#### 4.3.1 客户列表
- 搜索(用户名 / 昵称 / 手机号)
- 筛选(创建人 / 授权状态)
- 列表:头像、用户名、昵称、联系方式、授权状态、到期时间、创建人、操作
#### 4.3.2 客户 CRUD
- **新增**:自动生成用户名(`user` + 6位随机数默认密码 `123456`BCrypt 哈希)
- **编辑**:昵称、手机号、邮箱、状态
- **删除**:软删除,关联数据级联处理
- **重置密码**:重置为默认密码
#### 4.3.3 授权管理
- **授权**:选择项目 + 天数(默认 365 天)
- **续期**:在原到期时间基础上增加天数
- **取消授权**:立即失效
- 授权记录可查看历史
### 4.4 授权管理
#### 4.4.1 授权记录
- 查看所有授权记录(客户、项目、授权人、开始时间、到期时间、状态)
- 按状态筛选(有效 / 已过期 / 已取消)
#### 4.4.2 批量授权
- 选择多个客户 + 多个项目
- 统一设置授权天数
### 4.5 员工管理(仅管理员)
#### 4.5.1 员工列表
- 搜索 + 筛选角色 / 状态
- 列表:头像、用户名、姓名、角色、状态、创建时间、操作
#### 4.5.2 员工 CRUD
- 新增:用户名 + 密码 + 角色 + 基本信息
- 编辑:基本信息 + 角色
- 启用 / 禁用
- 重置密码
### 4.6 系统设置
#### 4.6.1 基础配置
- 平台名称、标语、公司名称、联系方式、备案号
- 存储模式切换COS / 本地)
#### 4.6.2 Logo 管理
- 5 个位置:前台顶部、前台页脚、浏览器图标、后台登录页、后台顶部
- 支持上传 SVG / PNG
#### 4.6.3 上传限制
| 类型 | 默认限制 |
|------|----------|
| 图片 | 5 MB |
| 视频 | 500 MB |
| 资源包 | 2 GB |
| 文档 | 20 MB |
#### 4.6.4 分类管理
- CRUD + 拖拽排序 + 图标上传SVG
- 字段:名称、图标、排序、状态、描述
#### 4.6.5 平台类型管理
- CRUD + 排序 + 图标
- 字段:名称、图标、排序、状态
#### 4.6.6 特性标签管理
- CRUD + 排序 + 图标
- 字段:名称、图标、排序、状态
#### 4.6.7 操作日志
- 记录所有后台操作操作人、操作类型、模块、详情、IP、时间
- 查询(按操作人 / 模块 / 时间范围)
- 清理(手动清理 + 自动清理配置,默认保留 90 天)
#### 4.6.8 数据备份
- **手动备份**:一键触发,生成 .sql 文件
- **自动备份**:定时任务(默认每日凌晨 2:00
- **保留策略**:默认保留 30 天,可配置
- 备份记录列表:文件名、大小、类型(手动/自动)、创建时间
- 操作:下载、删除
### 4.7 内容管理
#### 4.7.1 轮播图管理
- CRUD + 图片上传 + 排序 + 跳转链接
- 字段:标题、图片、链接、排序、状态
#### 4.7.2 合作伙伴管理
- CRUD + Logo 上传 + 排序 + 显隐控制
#### 4.7.3 咨询消息管理
- 列表查看(姓名、联系方式、需求、提交时间、状态)
- 标记已读 / 未读
- 删除
### 4.8 唤醒协议对接
- 配置各终端Windows / Mac唤醒协议
- 字段:终端类型、协议前缀、协议参数模板、状态
---
## 5. 核心机制
### 5.1 存储双模式
| 模式 | 说明 | 使用场景 |
|------|------|----------|
| COS 模式 | 腾讯云 COS 对象存储 | 生产环境 |
| 本地模式 | 服务器本地文件系统 | 开发环境 |
- 通过系统设置动态切换
- 切换后新上传文件使用新模式,历史文件保持原模式
- 配置项COS SecretId / SecretKey / Bucket / Region / 自定义域名
### 5.2 COS 资源访问策略
| 资源类型 | 访问方式 | 说明 |
|----------|----------|------|
| HTML / JSON | 代理模式 | 改写资源引用路径,隐藏真实 URL |
| 详情页视频 | 代理模式防盗链 | `?proxy=1` 参数Blob URL 加载 |
| WebGL 内视频 | 302 重定向 | 签名 URL 临时跳转 |
| 下载文件 | 签名 URL + attachment 头 | 强制下载,不在线预览 |
| 其他文件 | 302 重定向 | 签名 URL 临时跳转 |
### 5.3 视频防盗链
- 代理模式隐藏 COS 真实 URL
- Blob URL 加载视频流
- Canvas 渲染(可选,增强防盗)
- 动态水印(用户名 + 时间戳)
### 5.4 WebGL 自适应
- 代理注入 CSS 脚本
- 解决 Unity 固定分辨率适配问题
- 全屏自适应 + 宽高比保持
### 5.5 认证授权
#### 5.5.1 JWT 认证
- Bearer Token 模式
- 有效期 7 天
- Token 中包含UserId、Username、Role、CreateTime
- 刷新机制:过期前 1 天可刷新
#### 5.5.2 RBAC 权限
- 基于角色的权限控制
- 接口级权限校验(中间件)
- 数据级权限校验(销售数据隔离)
#### 5.5.3 密码安全
- BCrypt 哈希存储cost factor = 12
- 默认密码:`123456`
- 密码强度校验8位以上含字母 + 数字
### 5.6 通知系统
#### 5.6.1 通知类型
| 类型 | 触发场景 | 接收人 |
|------|----------|--------|
| 系统通知 | 系统公告、维护通知 | 全部用户 |
| 项目通知 | 新项目发布、项目更新 | 关注相关分类的用户 |
| 账号通知 | 密码重置、授权变更 | 当事用户 |
| 授权通知 | 授权即将到期、已到期 | 当事客户 + 创建销售 |
#### 5.6.2 推送机制
- **仅站内消息**:用户登录后在消息中心查看
- **轮询拉取**:前端每 30 秒轮询未读消息数
- 防重复同步机制:基于业务事件 ID 去重
---
## 6. 数据库设计概要
### 6.1 核心表结构
```
users -- 用户表(员工 + 客户)
roles -- 角色表
projects -- 项目表
project_categories -- 项目分类表
project_platforms -- 平台类型表
project_tags -- 特性标签表
project_tag_relations-- 项目标签关联表
project_screenshots -- 项目截图表
project_packages -- 项目资源包表
favorites -- 收藏表
experience_logs -- 体验记录表
authorizations -- 授权记录表
banners -- 轮播图表
partners -- 合作伙伴表
consultations -- 咨询消息表
notifications -- 通知表
notification_reads -- 通知已读记录表
operation_logs -- 操作日志表
system_settings -- 系统设置表
backups -- 备份记录表
wake_protocols -- 唤醒协议配置表
```
### 6.2 关键字段说明
#### users 表
| 字段 | 类型 | 说明 |
|------|------|------|
| Id | bigint PK | 主键 |
| Username | varchar(50) | 用户名(唯一) |
| Password | varchar(255) | BCrypt 哈希 |
| Nickname | varchar(50) | 昵称 |
| Avatar | varchar(500) | 头像 URL |
| Phone | varchar(20) | 手机号 |
| Email | varchar(100) | 邮箱 |
| Role | tinyint | 角色0访客 1客户 2销售 3产品经理 4管理员 |
| Status | tinyint | 状态0禁用 1启用 |
| CreatedBy | bigint? | 创建人 ID销售创建客户时记录 |
| CreatedAt | datetime | 创建时间 |
| UpdatedAt | datetime | 更新时间 |
| IsDeleted | bit | 软删除标记 |
#### projects 表
| 字段 | 类型 | 说明 |
|------|------|------|
| Id | bigint PK | 主键 |
| Name | varchar(100) | 项目名称 |
| CategoryId | bigint | 分类 ID |
| CoverImage | varchar(500) | 封面图 URL |
| VideoUrl | varchar(500) | 视频 URL |
| VideoCover | varchar(500) | 视频封面 |
| Description | text | 简介 |
| Content | longtext | 富文本详情 |
| Platforms | varchar(200) | 平台标签(逗号分隔) |
| Status | tinyint | 0下架 1发布 |
| IsFeatured | bit | 是否推荐 |
| SortOrder | int | 排序权重 |
| ViewCount | int | 浏览数 |
| ExperienceCount | int | 体验数 |
| FavoriteCount | int | 收藏数 |
| PublishedAt | datetime? | 发布时间 |
| CreatedAt | datetime | 创建时间 |
| UpdatedAt | datetime | 更新时间 |
| IsDeleted | bit | 软删除 |
#### authorizations 表
| 字段 | 类型 | 说明 |
|------|------|------|
| Id | bigint PK | 主键 |
| UserId | bigint | 客户 ID |
| ProjectId | bigint | 项目 ID |
| AuthorizedBy | bigint | 授权人 ID销售/管理员) |
| StartTime | datetime | 开始时间 |
| EndTime | datetime | 到期时间 |
| Status | tinyint | 0已取消 1有效 2已过期 |
| CreatedAt | datetime | 创建时间 |
---
## 7. API 设计规范
### 7.1 RESTful 规范
- 基础路径:`/api`
- 资源命名:复数形式(`/api/projects``/api/users`
- HTTP 方法GET 查询、POST 新增、PUT 更新、DELETE 删除
- 分页参数:`pageIndex``pageSize`,返回 `total``items`
### 7.2 统一响应格式
```json
{
"code": 200,
"message": "success",
"data": { }
}
```
### 7.3 认证
- Header`Authorization: Bearer {token}`
- 未授权返回 401无权限返回 403
---
## 8. UI/UX 设计规范
### 8.1 色彩系统
| 用途 | 色值 |
|------|------|
| 主色 | #1677FF |
| 主色悬浮 | #4096FF |
| 主色点击 | #0958D9 |
| 主色浅底 | #E6F4FF |
| 成功 | #52C41A |
| 警告 | #FAAD14 |
| 错误 | #FF4D4F |
| 背景 | #F5F7FA |
| 卡片背景 | #FFFFFF |
| 主文字 | #1F2937 |
| 次文字 | #6B7280 |
| 边框 | #E5E7EB |
### 8.2 圆角与阴影
- 卡片圆角12px
- 按钮圆角8px
- 输入框圆角8px
- 卡片阴影:`0 2px 8px rgba(0, 0, 0, 0.08)`
- 悬浮阴影:`0 8px 24px rgba(22, 119, 255, 0.15)`
### 8.3 间距系统
- 基础单位8px
- 常用8 / 16 / 24 / 32 / 48
### 8.4 图标规范
- **全部使用 SVG 格式**
- 线性风格stroke-width: 1.5
- 尺寸16px / 20px / 24px / 32px
- 颜色继承 currentColor
- 统一封装为 Vue 组件 `<SvgIcon name="xxx" />`
### 8.5 管理后台布局
- **侧边栏布局**:左侧菜单 + 顶部导航 + 内容区
- 侧边栏:可折叠,宽度 240px / 折叠后 64px
- 顶部导航:面包屑 + 用户信息 + 消息通知
- 内容区:卡片式布局,留白充足
### 8.6 前台布局
- 顶部导航栏Logo + 菜单 + 搜索 + 登录/用户
- 内容区:最大宽度 1200px居中
- 页脚:公司信息 + 友链 + 备案号
### 8.7 交互动画
- 页面切换:淡入淡出 300ms
- 卡片悬浮transform 200ms ease
- 按钮ripple 涟漪效果
- 加载:骨架屏 + 旋转图标
- 消息提示:顶部滑入 300ms
---
## 9. 非功能性需求
### 9.1 性能
- 首屏加载 < 3 PC
- API 响应 < 500ms常规接口
- 列表查询支持索引优化
- 图片懒加载 + WebP 格式
### 9.2 安全
- SQL 参数化查询EF Core 默认
- XSS 防护富文本内容过滤
- CSRF Token
- 接口限流 IP 每分钟 60
- 敏感操作二次确认
### 9.3 兼容性
- 前台Chrome 90+ / Edge 90+ / Safari 14+ / Firefox 88+
- 后台Chrome / Edge 最新版
- WebGLWebGL 2.0 支持的浏览器
### 9.4 可维护性
- 代码分层Controller Service Repository
- DTO Entity 分离
- 统一异常处理中间件
- 配置项集中管理appsettings.json + 数据库
---
## 10. 项目里程碑
| 阶段 | 内容 |
|------|------|
| 阶段一 | 数据库设计 + 后端基础框架 + 认证授权 |
| 阶段二 | 前端基础框架 + UI 组件库 + 前台首页 + 项目中心 |
| 阶段三 | 项目详情 + WebGL 运行 + 个人中心 |
| 阶段四 | 管理后台工作台 + 项目管理 + 客户/授权管理 |
| 阶段五 | 系统设置 + 内容管理 + 员工管理 |
| 阶段六 | 通知系统 + 操作日志 + 数据备份 |
| 阶段七 | 联调测试 + 性能优化 + 部署上线 |
---
## 附录 A确认决策汇总
| 决策项 | 选择 |
|--------|------|
| 用户注册方式 | 仅管理员创建 |
| 登录认证 | 账号密码 + 图形验证码 |
| 多语言 | 仅中文 |
| 响应式 | 全响应式前台 PC/平板/手机后台 PC |
| 销售数据隔离 | 销售间数据隔离 |
| 通知渠道 | 仅站内消息 |
| 实时性 | 轮询拉取30秒 |
| 搜索能力 | 简单关键词查询SQL LIKE |
| 视频格式 | MP4 + WebM |
| 部署方式 | 前后端均部署 IIS |
| 数据备份 | 手动 + 自动备份 |
| WebGL 限制 | 不限制 |
| 主题色 | 科技蓝#1677FF |
| 后台布局 | 侧边栏布局 |
| 项目卡片 | 纵向网格卡片 |
| 图表库 | ECharts |