Files
EveryPublish/docs/web-client-page-spec.md
T

9.6 KiB

Web-only 客户端页面规格

当前版本只交付浏览器控制台。macOS/Windows Agent、客户端配对码、设备列表和 Agent 日志不进入菜单,也不参与验收。浏览器与本机 Go 服务之间只有 REST 和 Browser WebSocket 两条链路。

视觉与交互基线

  • 形态:左侧固定导航 + 顶部工作区/实时连接状态 + 右侧内容区;桌面宽度下优先扫描效率,窄屏下导航折叠为抽屉。
  • 颜色:中性灰白背景,蓝色只用于主操作和进行中状态,绿色表示成功,橙色表示等待,红色表示失败/危险;不使用渐变、装饰性大卡片或模拟客户端窗口。
  • 页面结构:一个页面一个主任务;统计使用紧凑指标条,列表使用表格,详情使用抽屉,确认操作使用弹窗,长流程使用分步表单。
  • 状态:所有异步操作都显示 loading、成功、失败和可重试入口;WebSocket 断开时顶部显示“实时连接断开”,页面继续用 REST 刷新。
  • 日志:任务详情必须展示时间、状态、动作、平台错误分类和可公开的回执;不展示 cookie、二维码 token 或原始响应体。

页面地图

EveryPublish Web Console
├─ 工作台
│  ├─ 今日任务 / 成功率 / 待处理挑战 / 执行器健康
│  └─ 最近任务与需要处理的异常
├─ 发布管理
│  ├─ 新建发布:素材 → 账号 → 内容 → 时间 → 预览 → 保存/提交
│  ├─ 任务列表:筛选、审核、重试、取消、详情
│  └─ 排期日历:查看和编辑草稿/定时任务
├─ 素材库:上传进度、去重、预览、分组、删除、一次性直链
├─ 账号管理:平台账号、登录二维码、登录状态、重新登录、解绑
├─ 审核中心:待审、通过、驳回批注
├─ 挑战中心:二维码/验证码、等待扫码、已扫码、确认、过期、重发
├─ 通知:任务失败、登录过期、挑战到达、审核结果
├─ 成员管理:成员、角色、工作区切换
├─ 设置:工作区资料、安全(密码修改)、站内通知
└─ 审计日志:登录、账号、素材、任务、挑战和设置操作

关键页面 ASCII

1. 工作台

┌────────────────────────────────────────────────────────────────────────────┐
│ EveryPublish   工作区 ▾                         实时连接 ●  用户 ▾          │
├───────────────┬────────────────────────────────────────────────────────────┤
│ 工作台        │  今日概览                                                   │
│ 发布管理      │  ┌────────┐ ┌────────┐ ┌────────┐ ┌──────────────────────┐ │
│ 素材库        │  │待审核  │ │执行中  │ │已成功  │ │挑战/异常             │ │
│ 账号管理      │  │  12    │ │   3    │ │  86    │ │ 需要处理 2           │ │
│ 审核中心      │  └────────┘ └────────┘ └────────┘ └──────────────────────┘ │
│ 挑战中心      │  最近任务                                                     │
│ 通知          │  标题              平台       状态       时间       操作      │
│ 成员管理      │  春季活动主片      B站        执行中     12:10     详情      │
│ 设置          │  产品短视频        抖音       失败       11:54     重试      │
│ 审计日志      │  [新建发布] [查看全部任务]                                   │
└───────────────┴────────────────────────────────────────────────────────────┘

2. 账号登录(单一二维码状态机)

┌─账号管理─────────────────────────────────────────────────────────────────────┐
│ [添加账号]  平台 ▾  状态 ▾  [刷新]                                           │
│ 平台       备注/账号          状态       最后活跃       操作                  │
│ B站        品牌主号           已绑定     08-21 12:03   重新登录 解绑         │
│ 抖音       投放号             绑定中     -              查看挑战             │
└─────────────────────────────────────────────────────────────────────────────┘

登录弹窗(服务器生成一次二维码,服务端后台轮询)
┌──────────────────────────────┐
│ 登录 B站                     │
│          ┌──────────┐        │
│          │  QR 图片 │        │
│          └──────────┘        │
│ 等待扫码 → 已扫码 → 登录成功 │
│ [稍后处理]                    │
└──────────────────────────────┘

网页不会生成配对码,客户端也不会再要求网页生成第二个码。真实扫码成功只能由平台适配器轮询确认;没有扫码时保持“等待扫码”,不能自动激活账号。

3. 新建发布

┌─新建发布─────────────────────────────────────────────────────────────────────┐
│ ①素材             ②账号             ③内容             ④时间/预览            │
│ [上传素材]        [选择账号]        标题 [____________]  (●)立即 ( )定时     │
│ ┌──────────────┐  ☑ B站 品牌号      正文               ┌───────────────┐   │
│ │ 视频缩略图   │  ☑ 抖音 投放号     [                  ]  │ 平台预览       │   │
│ └──────────────┘                   标签 [____________]  │ 标题/正文/封面 │   │
│                                                                └───────────────┘   │
│ [保存草稿]                                      [提交审核]                     │
└─────────────────────────────────────────────────────────────────────────────┘

排期日历中的草稿/驳回任务可点击打开排期抽屉,修改计划时间或清除为立即发布;已入队、执行中和已完成任务只读。

4. 任务详情与日志

┌─任务 #1042 详情──────────────────────────────────────────────────────────────┐
│ 春季活动主片   B站 / 品牌号        状态:执行中      [取消]                   │
│ 内容、素材、计划时间、审核批注                                               │
├─执行日志─────────────────────────────────────────────────────────────────────┤
│ 12:10:01  created       任务已创建                                             │
│ 12:10:03  pending_review 已提交审核                                           │
│ 12:10:12  dispatched    平台适配器已接收任务                                  │
│ 12:10:13  running       平台适配器开始处理                                    │
│ 12:10:29  failed        network: 上传分片失败                                  │
│ [重试]                                                                         │
├─结果─────────────────────────────────────────────────────────────────────────┤
│ 发布链接:-    平台回执:-    原始 cookie/token:永不显示                     │
└─────────────────────────────────────────────────────────────────────────────┘

状态与 API 约定

账号:unbound → binding → active,登录失败为 expired 或 suspended;挑战:active/pending/scanned/solved/expired/suspended。任务:draft → pending_review → queued → dispatched → running → success/failed,失败允许 retry → queued。

登录绑定返回 challengeId、qrUrl、qrToken、prompt、expiresAt。后续状态由 Browser WebSocket challenge.status 推送,刷新页面再通过 GET /challenges 和 GET /accounts 补齐,不依赖单次推送。