Files
ystp/docs/frontend.md

4.3 KiB
Raw Permalink Blame History

前端工程设计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-KeyUUID
  • 网络重试仅限“明确幂等”的请求(否则会重复扣费/重复建任务)。

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/usageGET /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 变量,方便后续主题化/暗色模式:

: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;
}