add backend

This commit is contained in:
yoyuzh
2026-03-14 11:03:07 +08:00
parent d993d3f943
commit 8db2fa2aab
130 changed files with 15152 additions and 11861 deletions

View File

@@ -0,0 +1,668 @@
# Personal Portal 前端页面需求文档
## 1. 文档说明
- 设计来源:`草图/pencil-new.pen`
- 目标:将设计稿整理为可执行的前端页面需求,供 UI 开发、接口联调、测试验收使用
- 适用范围PC Web 端个人门户站点
- 设计基准尺寸:`1440 x 1024`
- 说明:文档中未在设计稿中直接标注但对实现必需的内容,已按常规门户产品逻辑做合理补充,并明确写为“建议”或“推断”
## 2. 产品定位
这是一个统一个人门户站点,用于集中承载以下能力:
- 账号登录
- 首页总览
- 网盘文件管理
- 教务数据查询
- 游戏入口聚合
站点风格偏深色、毛玻璃、卡片式信息展示,强调“统一入口”和“个人数据聚合”。
## 3. 站点信息架构
建议前端按以下一级路由组织:
| 页面 | 建议路由 | 页面目标 |
| --- | --- | --- |
| 登录页 | `/login` | 完成身份认证并进入门户 |
| 总览页 | `/overview` | 汇总展示用户、文件、课程、成绩等核心信息 |
| 网盘页 | `/files` | 浏览、筛选、查看和上传个人文件 |
| 教务页 | `/school` | 查询课表、成绩并展示学期数据 |
| 游戏页 | `/games` | 提供小游戏入口和分类切换 |
## 4. 全局设计与交互要求
### 4.1 全局视觉规范
- 页面主背景为深蓝黑色系,建议主背景色接近 `#07101D`
- 卡片、导航、输入框采用半透明深色背景叠加模糊效果,形成毛玻璃风格
- 主强调色为亮蓝色,建议主色接近 `#336EFF`
- 文字颜色分三级:
- 一级文字:高亮白色,用于标题、主按钮文字、关键数据
- 二级文字:浅蓝灰色,用于说明文案、次要导航
- 三级文字:更浅的透明文字,用于分隔说明和弱提示
- 整站圆角统一偏大,按钮、卡片、胶囊标签均使用较高圆角
### 4.2 全局布局要求
- 所有页面采用顶部导航 + 主内容区结构
- 顶部导航固定在页面顶部,默认包含站点品牌和一级导航入口
- 主内容区使用卡片化分区布局,不同页面根据业务类型使用多列或多卡片排布
- 所有卡片之间需要保留清晰的间距层级,避免信息拥挤
### 4.3 全局导航要求
- 顶部左侧固定展示站点品牌:
- 主标题:`YOYUZH.XYZ`
- 副标题:`Personal Portal`
- 顶部右侧固定展示一级导航:
- 总览
- 网盘
- 教务
- 游戏
- 当前所在页面的导航项为激活态:
- 高亮蓝色背景
- 白色文字
- 带轻微发光或阴影
- 非当前页面为普通态:
- 半透明深色背景
- 浅色文字
- 点击一级导航后执行页面切换,建议保留当前登录态
### 4.4 全局交互要求
- 所有按钮、胶囊标签、切换项、列表行都应具备 hover、focus、active 状态
- 键盘 Tab 顺序必须与视觉顺序一致
- 图标型按钮若后续补充图标,必须提供 `aria-label`
- 卡片内部若有按钮组,主操作需突出显示,次操作保持弱化视觉
- 页面切换过程中应有最基本的加载保护,避免空白闪烁
### 4.5 全局状态要求
每个业务页面至少支持以下状态:
- 加载中:显示骨架屏或占位态
- 加载成功:展示设计稿对应内容
- 空状态:当列表、课表、成绩无数据时显示空态说明
- 错误状态:接口失败时显示错误提示与重试入口
- 未登录状态:除登录页外,若无有效登录态应跳回登录页
### 4.6 响应式要求
设计稿是桌面端稿件,前端实现时建议补齐以下断点:
- `>= 1280px`:按设计稿布局展示
- `768px - 1279px`:多列卡片可改为 2 列,右侧预览或抽屉可下移
- `< 768px`:顶部导航压缩为可滚动标签或抽屉菜单;卡片全部改为单列堆叠
移动端适配要求:
- 不允许出现横向滚动条
- 卡片内文字不可溢出遮挡
- 按钮点击热区不小于 `44 x 44px`
- 文件表格在小屏下可切换为列表卡片模式
### 4.7 可访问性要求
- 文本与背景对比度满足基本可读性
- 表单字段必须带标签
- 所有可点击控件需支持键盘操作
- 当前导航项、当前分段切换项需要有明确的选中态
- 动画需兼容 `prefers-reduced-motion`
## 5. 登录页需求
### 5.1 页面目标
为用户提供统一入口,完成账号认证并进入门户首页。
### 5.2 页面结构
页面分为左右两区:
- 左侧品牌介绍区
- 右侧登录表单区
### 5.3 左侧品牌介绍区
应包含以下元素:
- 品牌标题:`YOYUZH.XYZ`
- 品牌副标题:`Personal Portal`
- 胶囊标签:`Access Portal`
- 主标题:`个人网站统一入口`
- 一段站点简介文案
实现要求:
- 左侧内容垂直排列,整体偏页面左上区域
- 背景需要有大面积柔和发光装饰,营造氛围感
- 简介文案允许后续替换为真实站点介绍
### 5.4 右侧登录表单区
表单卡片应包含以下字段和元素:
- 表单标题:`登录`
- 用户名输入框
- 密码输入框
- 主按钮:`进入系统`
字段要求:
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| 用户名 | 文本输入 | 是 | 支持账号、用户名或学号 |
| 密码 | 密码输入 | 是 | 采用掩码显示 |
交互要求:
- 用户名、密码均为空时点击按钮,给出必填校验
- 支持按 Enter 提交表单
- 登录请求发起后按钮进入 loading 状态并禁用重复点击
- 登录成功后跳转至 `/overview`
- 登录失败时在表单区域显示错误提示
建议补充能力:
- 记住登录状态
- 登录态过期自动跳转登录页
- 允许后续增加验证码或二次验证
### 5.5 登录页验收标准
- 页面首屏能清晰表达“统一入口”的产品定位
- 输入框、按钮在视觉上与整体毛玻璃风格统一
- 表单校验、提交、错误反馈完整
- 登录成功跳转逻辑正常
## 6. 总览页需求
### 6.1 页面目标
集中展示用户最常用的跨模块摘要信息,让用户在一个页面看到文件、课程、成绩、账号等核心状态。
### 6.2 页面结构
总览页包含以下模块:
- 顶部导航栏
- 欢迎 Hero 区
- 4 张数据指标卡片
- 最近文件卡片
- 今日 / 本周课程卡片
- 快捷操作卡片
- 存储空间卡片
- 账号信息卡片
### 6.3 Hero 欢迎区
需展示以下内容:
- 欢迎语:如 `欢迎回来tester5595`
- 当前时间与问候语:如 `现在时间 20:17 · 晚上好`
- 简短页面说明
实现要求:
- 欢迎语作为页面最强视觉标题
- 当前时间应来自前端运行时或服务端返回,不应硬编码
- 问候语应根据时间段变化,建议分为凌晨、早上、下午、晚上
### 6.4 指标卡片区
共 4 个指标模块:
| 模块 | 示例值 | 说明 |
| --- | --- | --- |
| 网盘文件总数 | `128` | 展示文件总量及分类说明 |
| 最近 7 天上传 | `6` | 展示近 7 日上传数量和最近更新时间 |
| 本周课程 | `18` | 展示本周课程总量及今日课节数 |
| 已录入成绩 | `42` | 展示成绩总数及最近学期 |
实现要求:
- 数字需突出显示
- 标题、数字、补充描述分层明显
- 支持接口数据为空时展示 `0` 和空说明
### 6.5 最近文件模块
需展示:
- 模块标题:`最近文件`
- 最近文件列表,建议至少显示 3 条
- 每条信息至少包含:
- 文件名
- 文件大小
- 最近更新时间
交互要求:
- 点击文件项可跳转 `/files`,并定位到该文件
- 文件名超长时需截断并保留 tooltip 或完整展示方案
### 6.6 课程模块
模块标题:`今日 / 本周课程`
模块内包含:
- 分段切换:`今日` / `本周`
- 课程列表,建议显示:
- 时间段
- 课程名称
- 教室或地点
交互要求:
- 默认选中 `今日`
- 点击 `本周` 后刷新为本周课表摘要
- 切换过程不可造成卡片高度明显抖动
### 6.7 快捷操作模块
需提供 4 个快捷入口:
- 上传文件
- 新建文件夹
- 进入网盘
- 查询成绩
交互要求:
- 上传文件:打开上传弹窗或跳转文件页并打开上传面板
- 新建文件夹:打开新建文件夹表单
- 进入网盘:跳转 `/files`
- 查询成绩:跳转 `/school` 并聚焦成绩查询区域
### 6.8 存储空间模块
需展示:
- 模块标题:`存储空间`
- 已使用容量 / 总容量,如 `12.6 GB / 50 GB`
- 使用进度条
- 百分比数值,如 `25%`
实现要求:
- 进度条宽度与百分比联动
- 数值格式统一保留 1 位小数或按产品约定显示
### 6.9 账号信息模块
需展示:
- 模块标题:`账号信息`
- 用户名
- 邮箱
建议补充:
- 后续预留头像、绑定状态、退出登录入口
### 6.10 总览页验收标准
- 各卡片数据层级清晰,首屏即可理解
- 快捷操作能通往对应模块
- 时间、课表、文件、容量信息均支持动态数据渲染
- 页面在 1280px 以上布局稳定,在平板和移动端能正常堆叠
## 7. 网盘页需求
### 7.1 页面目标
提供个人网盘文件浏览、路径导航、详情预览和基础操作入口。
### 7.2 页面结构
网盘页采用三栏布局:
- 左侧目录导航栏
- 中间文件内容区
- 右侧详细信息预览栏
### 7.3 左侧目录导航栏
建议包括两组内容:
- 快速访问
- 桌面
- 下载
- 文档
- 图片
- 网盘目录
- 我的文件
- 课程资料
- 项目归档
- 收藏夹
交互要求:
- 点击目录项刷新中间内容区
- 当前目录项应有激活态
- 若目录层级增加,建议支持树形展开
### 7.4 中间文件内容区
应包含以下元素:
- 路径面包屑栏
- 视图切换控件:`列表` / `分栏` / `预览`
- 文件列表表头
- 文件列表内容
- 底部操作按钮:`新建``上传`
面包屑要求:
- 当前示例路径为:`网盘 > 我的文件 > 课程资料 > 软件工程`
- 每一级路径应可点击返回
文件列表字段要求:
| 列名 | 说明 |
| --- | --- |
| 名称 | 文件或文件夹名称 |
| 修改日期 | 最近更新时间 |
| 类型 | 文件类型或目录类型 |
| 大小 | 文件大小;文件夹可显示 `—` |
列表交互要求:
- 支持单行选中
- 支持文件夹进入下一级目录
- 支持当前选中项同步到右侧详情栏
- 当前选中行需有明显高亮
- 文件名过长时截断处理
建议补充能力:
- 双击打开文件
- 右键菜单
- 多选
- 排序
- 搜索
### 7.5 右侧详细信息预览栏
需展示当前选中文件的详细信息:
- 当前选择的文件名
- 文件路径
- 文件大小
- 上传时间
建议扩展字段:
- 文件类型图标
- 最近编辑人
- 下载次数
- 预览缩略图
### 7.6 网盘页操作要求
主操作:
- 上传
- 新建
交互说明:
- 上传:支持本地文件选择,建议支持拖拽上传
- 新建:默认创建文件夹,也可为后续扩展新建文档保留能力
- 操作成功后,文件列表与统计信息应刷新
### 7.7 网盘页状态要求
- 空目录:显示空状态文案和“上传文件”入口
- 加载中:文件表格骨架屏
- 上传中:显示上传进度
- 上传失败:显示失败原因并支持重试
### 7.8 网盘页验收标准
- 三栏布局信息职责明确
- 面包屑、目录树、列表选中、右侧详情联动正常
- 上传与新建入口位置明显,交互闭环完整
- 小屏情况下可退化为“目录 / 列表 / 详情”分步展示
## 8. 教务页需求
### 8.1 页面目标
提供统一教务查询入口,用于查看课表、成绩及历史学期数据摘要。
### 8.2 页面结构
页面包含以下主要区域:
- 教务查询卡片
- 数据摘要卡片
- 课表抽屉卡片
- 成绩热力图区域
### 8.3 教务查询卡片
应包含以下字段:
| 字段 | 示例 | 说明 |
| --- | --- | --- |
| 学号 | `2023123456` | 查询账号 |
| 密码 | `••••••••` | 教务系统密码 |
| 学期 | `2025 秋` | 当前选择学期 |
按钮包括:
- 查询课表
- 查询成绩
交互要求:
- 学号、密码、学期为必填项
- 点击 `查询课表` 后刷新课表抽屉和摘要区对应信息
- 点击 `查询成绩` 后刷新成绩区域和摘要区对应信息
- 建议保留上次成功查询的账号与学期缓存
### 8.4 数据摘要卡片
需展示缓存或最近一次查询结果摘要:
- 当前缓存账号
- 已保存课表学期
- 已保存成绩学期列表
实现要求:
- 未查询时显示空态说明
- 查询成功后即时更新
### 8.5 课表抽屉卡片
模块标题:`课表抽屉`
展示形式:
- 按星期分组展示课程
- 每条课程至少包含:
- 上课时间
- 课程名称
- 教室
交互要求:
- 右侧有明显的抽屉把手视觉提示
- 建议支持展开 / 收起或横向滑出效果
- 抽屉在平板和移动端可切为底部弹层
### 8.6 成绩视图切换
查询卡片内存在分段切换:
- 课表
- 成绩
要求:
- 默认激活 `课表`
- 切换到 `成绩` 时,页面焦点应转向成绩区域
- 当前激活项需具备明显视觉反馈
### 8.7 成绩热力图区域
模块标题:`成绩热力图`
需展示多个学期的成绩分布示意,设计稿中包含:
- `2024 秋`
- `2025 春`
- `2025 秋`
实现要求:
- 每个学期形成独立列
- 每列包含多个课程成绩条
- 颜色深浅或透明度表示成绩高低
- 条形右侧或内部显示分数
建议补充能力:
- 悬浮提示课程名、学分、绩点
- 学期筛选
- 按成绩排序
### 8.8 教务页状态要求
- 未查询:显示引导说明
- 查询中:按钮 loading结果区骨架屏
- 查询成功:更新课表、摘要、成绩
- 查询失败:展示错误原因和重试入口
### 8.9 教务页验收标准
- 查询表单、结果摘要、课表和成绩之间联动清晰
- 抽屉与热力图区域在不同状态下布局稳定
- 历史学期成绩能正确映射为视觉强弱差异
## 9. 游戏页需求
### 9.1 页面目标
作为轻量娱乐入口页,承载站内小游戏展示和启动入口。
### 9.2 页面结构
页面包含:
- 顶部导航
- 页面说明 Hero 区
- 分类切换
- 游戏卡片列表
### 9.3 Hero 区
需展示:
- 模块标题:`游戏入口`
- 一段说明文案,表达“保留轻量试玩与静态资源检查入口,维持与整站一致的毛玻璃语言”
### 9.4 分类切换
设计稿中包含:
- 精选
- 全部
交互要求:
- 默认选中 `精选`
- 点击后刷新卡片列表
- 若当前仅有少量游戏,`全部` 可与 `精选` 数据一致
### 9.5 游戏卡片
设计稿中至少包含两个游戏入口:
| 名称 | 描述 | 按钮文案 |
| --- | --- | --- |
| CAT | 简单的小猫升级游戏 | Launch |
| RACE | 赛车休闲小游戏 | Launch |
交互要求:
- 点击 `Launch` 后进入游戏详情页、游戏运行页或新窗口
- 游戏卡片需支持封面图扩展位
- 后续支持增加更多游戏时,卡片布局可扩展
### 9.6 游戏页验收标准
- 卡片入口清晰,用户能快速理解每个游戏内容
- 分类切换有效
- 启动按钮行为明确,不产生死链
## 10. 数据与接口需求建议
### 10.1 登录相关
- 登录接口:提交用户名和密码,返回用户信息与 token
- 获取当前登录用户接口:用于页面初始化恢复登录态
### 10.2 总览相关
- 获取总览统计接口
- 获取最近文件接口
- 获取今日 / 本周课表摘要接口
- 获取账号信息接口
- 获取存储容量接口
### 10.3 网盘相关
- 获取目录树接口
- 获取当前路径文件列表接口
- 获取文件详情接口
- 上传文件接口
- 新建文件夹接口
### 10.4 教务相关
- 查询课表接口
- 查询成绩接口
- 获取历史查询缓存接口
### 10.5 游戏相关
- 获取游戏列表接口
- 获取游戏分类接口
## 11. 前端实现建议
- 建议将顶部导航抽为全局公共组件
- 建议将卡片、按钮、分段切换、信息列表抽为复用组件
- 建议为每个页面单独维护数据请求与状态管理
- 建议所有动态时间、容量、数量、成绩统一做格式化封装
- 建议页面首屏背景光斑与毛玻璃效果使用纯 CSS 或轻量方案实现,避免过重图像资源
## 12. 测试验收清单
- 登录页表单校验、错误提示、提交跳转正常
- 顶部导航在 5 个页面间切换正常,当前态正确
- 总览页卡片数据渲染与快捷跳转正常
- 网盘页目录、路径、列表、详情联动正常
- 教务页查询、切换、热力图展示正常
- 游戏页分类切换和启动行为正常
- 页面在桌面、平板、移动端无明显布局错乱
- 页面无横向滚动,文本无明显遮挡
- 键盘可访问性与 focus 状态正常
## 13. 交付物建议
前端开发阶段建议同步产出以下内容:
- 页面路由结构
- 公共布局组件
- 各页面接口类型定义
- 空状态、错误状态、加载状态组件
- 基础 UI 规范说明文档