Files
ystp/docs/frontend.md

159 lines
4.3 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.
# 前端工程设计Vue3- ImageForge
目标:支撑“网站压缩 + 开发者 API 控制台 + 计费/发票 + 管理后台”的一个 Vue3 SPA或同仓多入口
UI/UX 规格见 `docs/ui.md`
---
## 1. 技术栈(确定)
- Vue 3 + TypeScript + Vite
- 路由Vue Router
- 状态Pinia
- 网络Fetch 或 Axios统一封装支持幂等头、错误归一
- 样式Tailwind CSS推荐或 CSS Variables + 自研组件
- 工具VueUse、Day.js或 date-fns、Zod表单校验可选
---
## 2. 路由与页面
### 2.1 公共
```
/ 首页压缩
/pricing 套餐与 FAQ
/docs 开发者文档(引导)
/login
/register
/terms
/privacy
```
### 2.2 用户控制台(登录)
```
/dashboard
/dashboard/history
/dashboard/api-keys
/dashboard/billing
/dashboard/settings
```
### 2.3 管理后台(管理员)
```
/admin
/admin/users
/admin/tasks
/admin/billing
/admin/config
```
---
## 3. 前端项目结构(建议)
```
src/
app/ # 路由、布局、鉴权守卫
pages/ # 页面route components
components/ # 通用组件UI、上传、表格等
features/
compress/ # 压缩:上传、任务、下载
billing/ # 套餐、订阅、发票、用量
apiKeys/ # API Key 管理
admin/ # 管理后台
services/ # API 封装http client + endpoints
stores/ # Pinia stores
styles/ # 主题变量、tailwind 入口
utils/ # 格式化、文件校验、错误处理
```
---
## 4. API 调用规范(前端约定)
### 4.1 Base URL
- 统一使用 `/api/v1`
### 4.2 幂等与重试
-`POST /compress/*``POST /billing/checkout` 等请求默认注入 `Idempotency-Key`UUID
- 网络重试仅限“明确幂等”的请求(否则会重复扣费/重复建任务)。
### 4.3 错误处理
将后端错误码映射为统一 UI 提示:
- `QUOTA_EXCEEDED`:引导升级/查看账单页
- `RATE_LIMITED`:展示倒计时(读取 `Retry-After`
- `FILE_TOO_LARGE` / `TOO_MANY_PIXELS`:定位到具体文件并提示如何处理
---
## 5. 压缩流程Web
### 5.1 同步 vs 异步
- 小文件/少量:可直接调用 `POST /compress`,拿到 `download_url`
- 批量/大文件:调用 `POST /compress/batch`,拿到 `task_id` 后:
- 优先 WebSocket/SSE 订阅进度;
- fallback轮询 `GET /compress/tasks/{task_id}`
### 5.2 上传前校验
前端必须做“用户体验级校验”(后端仍需二次校验):
- 格式白名单png/jpg/jpeg/webp/avif/gif/bmp/tiff/icoGIF 仅静态)
- 文件大小与数量(按匿名/登录/套餐提示不同上限)
- 匿名试用:每日 10 次限制提示(达到后引导登录/升级)
- 可选:读取图片宽高(避免明显超限)
---
## 6. 计费与用量(前端展示)
对接 `docs/api.md` 的 Billing 模块:
- `/pricing` 页面:读取 `GET /billing/plans`
- 控制台概览:读取 `GET /billing/usage``GET /billing/subscription`
- 订阅升级:调用 `POST /billing/checkout` 获取 `checkout_url` 并跳转
- 支付方式/取消订阅:调用 `POST /billing/portal` 获取 portal 链接
- 发票列表:`GET /billing/invoices`
UI 必须展示:
- 当期已用/剩余、重置时间
- 当前订阅状态active/past_due/canceled
---
## 7. API Key 控制台(开发者体验)
页面提供三类信息:
1) Key 管理:创建/禁用/轮换(创建时只展示一次完整 Key
2) 用量:本周期已用/剩余(与 Billing 用量一致)
3) 快速接入curl 示例 + 常见错误码 + 幂等建议
---
## 8. 安全建议(前端侧)
- 若使用 Bearer Token避免 localStorageXSS 风险),优先 HttpOnly Cookie 会话(需要 CSRF 策略)。
- 上传与下载链接:明确到期时间与隐私说明(默认去 EXIF
- 管理后台路由加守卫:`role=admin` 才可进入。
---
## 9. 主题变量CSS Variables
首期可用 Tailwind 或自研组件,但建议保留一层 CSS 变量,方便后续主题化/暗色模式:
```css
:root {
--bg: 248 250 252;
--card: 255 255 255;
--text: 15 23 42;
--muted: 71 85 105;
--border: 226 232 240;
--brand: 99 102 241;
--brand-strong: 79 70 229;
--success: 34 197 94;
--warning: 245 158 11;
--danger: 239 68 68;
}
```