共 37 屏 HTML · iPhone 15 Pro Max · 对齐 PRD §4.2 + 1.1 扩展 + 增长 G2/G4。
结构:增长落地 → 四 Tab 壳层 → 主路径漏斗 → 支路/扩展 → 系统页
打开方式:Finder 双击本页即可,无需起本地服务。
⓪ 增长 / 渠道(未登录可访问)
① Tab 壳层 · 首页 / 简历 / 助手 / 我的
枢纽·工具箱·解锁态
列表·链 F5
职业能力宫格
能量·订单·入口
P-unlock 全集
协议·注销·退款
协议·隐私·AI 说明
支付记录
邀请码·复制链接
选款·保存分享
投诉建议
② 主路径漏斗(沉浸 · 无 Tab)
③ 支路 · P0/P1(导出后解锁等)
④ 1.1 扩展模块(PRD Q8 测试数据)
1.1
3 门测试课
TCPlayer · 三跳闭环
1.1
1.1
1.1 · 链 36
D-EMO
1.1
⑤ 系统 / 合规补全(诚实清单)
预览 · 四 Tab 壳层
四 Tab 预览一行一个(首页 / 简历 / 助手 / 我的 各占一行);机模左侧 · 开发说明打开后占满该行剩余宽度
用法见 README · index 使用说明 · 推荐本地服务打开,比 file:// 稳定
← 步骤衔接核对:左栏上一步 · 右栏下一步 →
首页
页面02-home.html · 产品首页 · 底部 Tab「首页」。说明顺序 = 界面自上而下 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上长什么样、能不能点,再写元素 ID 与接口;鼠标悬停页面控件会出现黄框对照 ID。
展示顺序(按角色 · 章节号固定)
接口本页共 3 个读接口 · GET /wallet/balance · GET /user/unlocks · GET /resume/progress · 原型 HTML 写死 mock,上线接 API · 完整见下方 ⑥
一句话:App 首页枢纽——引导用户开始优化简历,并提供工具箱、邀请、四 Tab 导航。
GET /wallet/balance → label_energy_balance 等 · 详 ⑥ · dev-notes · 首页label_social_proof 后台可配;邀请条文案对齐邀请有礼页label_brand_subtitlelabel_brand_titlelabel_energy_balance09-pay.htmlGET /wallet/balance;原型可写示例数,正式上线勿写死fas fa-bolt · H5 app-image/icons/icon-bolt.svg · 小程序 src/assets/icons/icon-bolt.svg#F9B400 · 与胶囊文案同色<i class="fas fa-bolt"> · 上线:Image + SVGcopy_ai_disclaimerhero_title(文案可 A/B)hero_subtitlehero_cta_start03-f2-exam.html(步骤 1/7)01-landing-login.htmllabel_social_proof
state-panel 对齐)图标怎么查:每个控件下 缩进子列表(spec-sub)写 容器/尺寸/资产(H5+小程序)/着色/显隐 · 全表 ICON-CATALOG.md §5 · index 机模默认 新用户 · 顶栏状态 Tab 可切进行中/已导出 · 详 dev-notes · 首页其它态。
#new · index 默认)tool_grid_resume
GET /resumes 条数(原型 mock 对齐 15 列表)15-resume-list.htmlspan.tile-icon.chip-gold · 约 40×40fas fa-folder-open · H5 app-image/icons/icon-folder-open-gold.svg · 小程序 src/assets/icons/icon-folder-open-gold.svgchip-goldtool_grid_apply
fas fa-paper-plane · H5 app-image/icons/icon-paper-plane.svg · 小程序同名apply_track unlock · 已导出态见下节蓝变体tool_grid_interview
fas fa-comments · H5 app-image/icons/icon-comments.svg · 小程序同名mock_interview unlock · 已导出态见下节 icon-microphone-lines.svgtool_grid_share_card
fas fa-chart-pie · H5 app-image/icons/icon-chart-pie.svg · 小程序同名share_card unlock · 已导出态见下节橙变体#progress)04-f4-draft.html(无独立 data-spec-id · 与进度条同屏)fas fa-pen · H5 app-image/icons/icon-pen.svg · 小程序 src/assets/icons/icon-pen.svgchip-blue05-jd-paste.html
fas fa-briefcase · H5 app-image/icons/icon-briefcase.svg · 小程序同名#exported)fas fa-circle-check · H5 app-image/icons/icon-circle-check-gold.svg · 小程序同名text-accent08-export-pdf.html
fas fa-download · H5 app-image/icons/icon-download.svg · 小程序同名chip-gold12-share-card.html · 副文案「分享前打码」
fas fa-share-nodes · H5 app-image/icons/icon-share-nodes-orange.svg · 小程序同名rgba(255,119,15,0.2) · 与 23 助手宫格一致13-f6-apply.html
fas fa-paper-plane · H5 app-image/icons/icon-paper-plane-blue.svg · 小程序同名chip-blue17-f7-interview.html
fas fa-microphone-lines · H5 app-image/icons/icon-microphone-lines.svg · 小程序同名rgba(0,46,159,0.4)19-career-plan.html
fas fa-route · H5 app-image/icons/icon-route-blue.svg · 小程序同名chip-blue20-skill-courses.html → tile_skill_courses
fas fa-graduation-cap · H5 app-image/icons/icon-graduation-cap-gold.svg · 小程序同名chip-goldpublished_count=0 时隐藏整格 · 详 ⑥ · 与 14/23 一致22-growth-diary.html
fas fa-seedling · H5 app-image/icons/icon-seedling.svg · 小程序同名14-unlock-hub.html
fas fa-table-cells · H5 app-image/icons/icon-table-cells.svg · 小程序同名06-f1-align.html · 无宫格图标专章link_all_tools23-assistant-tab.htmlbanner_invite
27-invite-g6.html(文案对齐 PRD §9 Q11)icon-gift.svgfas fa-chevron-right · H5 app-image/icons/icon-chevron-right.svg · 小程序同名nav.tab-bar · 四 Tab 共用资产 · 详 ICON-CATALOG.md §1
tab_home · 02-home.html
app-image/tab/tab-home.svg · 选中 tab-home-active.svgiconPath / selectedIconPathfas fa-house · 选中色 #F9B400tab_resume · 15-resume-list.html
app-image/tab/tab-resume.svg · 选中 tab-resume-active.svgfas fa-file-linestab_assistant · 23-assistant-tab.html
app-image/tab/tab-assistant.svg · 选中 tab-assistant-active.svgfas fa-wand-magic-sparklestab_me · 10-me.html
app-image/tab/tab-me.svg · 选中 tab-me-active.svgfas fa-user说明:右上角「28 点」、工具宫格锁态、进行中进度条均为静态 mock;上线分别由下列读接口渲染对应控件。替换清单 → dev-notes · 静态 mock → API。
GET /wallet/balance · 能量点余额
onLoad / Tab 切到首页且未缓存 · 充值/消费成功后 revalidatebalance(number)→ label_energy_balance 如「28 点」{ "balance": 28 }GET /user/unlocks · 能力解锁态
unlocks[](如 share_card · apply_track · mock_interview)→ tool_grid_* 锁/解锁{ "unlocks": ["share_card"] }(未导出时为空数组,宫格④带锁)20-skill-courses(PRD Q8)
tile_skill_courses · 与 23/14 同规则GET /courses(或 BFF 含 published_count)· published_count=0 → 隐藏该宫格empty_reason 展示 20 ③GET /resume/progress · 主路径进度(进行中态)
progress_step · progress_percent → step_progress_bar · 继续 CTA 文案{ "progress_step": "f4", "progress_percent": 42, "title": "产品运营 · 秋招版" }badge-v11 或可见「1.1」版本角标 · 能力分期见 ⑨ / feature flag。index.html 或 02-home.html(file:// 即可)。label_energy_balance。app-image/icons/icon-download.svg 等路径。published_count 隐藏规则 · 与 20-skill-courses ⑥ 一致(原型已导出 Tab 仍展示「技能课程」宫格)。app-image/ICON-CATALOG.md · 工具箱/宫格见 §5 首页 · 底栏 Tab 见 §1 · 顶栏能量点 icon-bolt.svgapp-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10ICON-CATALOG.md §1 §5 · 小程序约定 app-image/README.mdhome_view · hero_cta_click · tool_grid_click(附 tool_id)20-skill-courses.html字段/API 见 dev-notes · 首页;UX 见 mkq产品规则 · UX。
开发说明 · F2 简历摸底页面03-f2-exam.html · 简历摸底(主路径第 1 步 / 共 7 步)· 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口;可点击控件悬停有黄框。
展示顺序(按角色 · 章节号固定)
接口本页唯一 · POST /ai/f2/analyze → 结果态区 · 原型 mock · 完整见下方 ⑥
一句话:用户粘贴或上传旧简历 → AI 给出待改指数与待改清单 → 去改简历;也可跳过直接写。
modal_agreement_ack(见 开放项)f2_start / f2_done / f2_skip(见 ⑨)btn_nav_back
02-home.htmlpage_titlepage_titlelabel_f2_step(输入「5 能量点」/ 加载「分析中…」/ 结果「待改指数」/ 失败「分析未成功」)copy_ai_disclaimercopy_f2_introbtn_upload_resume_image(JPG/PNG 等)btn_upload_resume_file(PDF/Word)
list_resume_attachments
btn_remove_attachmentcopy_f2_upload_hint
zone_f2_inputinput_resume_paste
label_resume_counter · 超出 Toast「内容不能超过 5000 字」· 与 OCR 合并后总上限 20000(见 ⑥)bar_f2_input_actionsbtn_analyze_f2
modal_agreement_ack(须勾选)→ 见 开放项POST /ai/f2/analyze · 请求含 resume_text、附件元数据btn_skip_f2
04-f4-draft.html;首页步骤 1 应标「已跳过」(PRD §2.4)f2_skipcopy_f2_loadingstate_ai_loadingdisplay_f2_score
score(0~100)list_checklist
checklist[] · ≥1 条btn_go_f4_draft
bar_f2_result_actions · 进入 F4 分段初稿state_ai_error(超时 / AI 拒绝 / 服务异常)btn_retry_f2
POST /ai/f2/analyze(本页唯一)说明:待改指数「62」与待改清单由 _f2-prototype.js mock;上线由本接口响应渲染结果态区。替换清单 → dev-notes · 静态 mock → API。
btn_analyze_f2 且校验通过(文字或附件至少一项)· 协议已确认 · 已登录 · 能量 ≥ 5resume_text 再提交btn_retry_f2 可重试 · 分析中防重复点击resume_text(string,与 OCR 合并后 ≤20000 字)→ input_resume_pasteattachment_ids[] · 附件元数据 → list_resume_attachmentsscore(0~100)→ display_f2_score · 待改指数checklist[](≥1 条,每条 ≤200 字)→ list_checklistissues[] · 摘要句「有 N 处建议优先修改」由条数推导{ "score": 62, "checklist": ["实习描述缺少量化结果", "项目经历未体现用户增长", "技能区未覆盖 JD 关键词 Python", "教育经历时间格式不统一"] }zone_f2_input,不调 APIstate_ai_error · 保留已填内容btn_go_f4_draft);跳过 → F4(不扣点、无待改指数);返回 ← → 首页(index 机模 data-embed-back="shell")POST /ai/f2/analyze 何时调、字段→控件、扣点与失败边界。03-f2-exam.html,或 index 首页机模点「开始优化简历」。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10f2_start · f2_done(附 duration_sec · score)· f2_skipmodal_agreement_ack;结果页保留 AI 标识;对外禁用「羞耻分」旧称UX 见 mkq产品规则 · UX;字段/API 见 dev-notes · F2。
开发说明 · 邀请有礼27-invite-g6.html
页面27-invite-g6.html · 邀请有礼 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口;复制成功 embed 时由 index 父页 HUD 展示。
展示顺序(按角色 · 章节号固定)
接口本页唯一 · GET /growth/invite/code → display_invite_code 等 · 原型 mock · 完整字段/何时调/失败见 ⑥
一句话:用户复制邀请链接/码或生成带二维码的海报拉新,邀请人得能量点(被邀请人无赠送,对齐 PRD §9 Q11)。
GET /growth/invite/code · dev-notes · G6btn_nav_back
history.back();无历史 fallback 02-home.htmlpage_titlecopy_invite_headline(非「各得」;文案可后台配置)copy_invite_rule + display_invite_reward
reward_points 示例值,须读后台,禁止写死copy_invite_fineprint + display_invite_monthly_cap
monthly_limit 示例值,须读后台display_invite_code(原型 mock;上线读接口禁止写死)GET /growth/invite/code · 需带登录态code(建议 8 位字母数字)并绑定 user_id 持久化;再次进入返回同一码code → 写入 display_invite_codeinvite_link → 含 code 的分享 URL(H5 / 小程序 path + query);「复制邀请链接」整链复制此字段,前端勿自行拼接code / invite_link 须传给下游海报页,供大图 foot 邀请码与 QR 使用(须同码同链)btn_copy_invite_link
invite_link(非前端拼 URL)→ HUD「已复制」invite_share_click · share_type=linkbtn_gen_invite_poster
27-invite-poster.html(选款/预览在本页完成 · 非同页弹层)invite_share_click · share_type=postercopy_invite_footer · CMS 可配GET /growth/invite/code(本页唯一)说明:邀请码/规则/链接为 _invite-prototype.js mock;上线由 GET /growth/invite/code 渲染 display_invite_code 等。海报页共用本接口 · 响应含 posters[] 在下游页渲染 · 详例见 27-invite-poster.html ⑥。替换清单 → dev-notes · 静态 mock → API。
headline → copy_invite_headline · CMS 可配reward_points → display_invite_reward(+N)· 禁止写死monthly_limit → display_invite_monthly_cap · 禁止写死code → display_invite_code · 服务端按用户生成/读取(见 ③)invite_link → btn_copy_invite_link 剪贴板 · 禁止前端拼 URLposters[] → 本页不渲染 · 跳转海报页使用 · 须同一次响应{ "code": "INV8K2M9", "invite_link": "https://…/invite?code=INV8K2M9", "reward_points": 10, "monthly_limit": 5, "headline": "邀请好友,你得能量点", "posters": […] } · posters[] 供下游海报页banner_invite · 我的页 menu_invite02-home.html)· 「生成邀请海报」→ 27-invite-poster.html · 「复制邀请链接」→ 系统剪贴板 + HUDGET /growth/invite/code 响应须缓存供海报页 · code/invite_link 两页一致GET /growth/invite/code 何时调、字段→控件、失败重试。27-invite-g6.html 或 index 首页邀请条进入。27-invite-poster.html 独立全屏页(选款/大图在海报页 · 见该页 ⑧)。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10invite_page_view · invite_share_click(share_type=link|poster)· invite_bind(绑定成功 · 防刷 unionId/设备)copy_invite_fineprint · copy_invite_footer(非 ⑥ 响应字段)_invite-prototype.js · ⑥ 字段禁止写死进生产 · 正式上线 → launch-static-to-api字段/API 见 dev-notes · G6。
开发说明 · 邀请海报27-invite-g6.html
页面27-invite-poster.html · 邀请海报(邀请有礼子页)· 验收见 ⑧
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页唯一 · GET /growth/invite/code → display_poster_result · 与邀请有礼页同响应 · 完整见 ⑥
一句话:选海报规格、预览合成大图,保存到相册或分享给好友(独立全屏页,非弹层)。
poster(可选)· mock 真源 _invite-prototype.js · 见 dev-notes · 小程序保存分享btn_nav_back · fallback 27-invite-g6.htmlpage_titlecopy_poster_picker_hint · CMS 可配list_poster_specs · chip_poster_specposters[]:poster_id · name · thumb_url(缩略图)· 运营上下架 · 禁止写死三款poster_id 的素材与文案display_poster_result · display_qr_invite?poster=cheer|fresh|campus(可选;缺省列表首项;切换模版时 URL 同步)posters[] 当前项:bg_url(或主题色)· kicker · tagline · subline · 后台 CMScode(与 27 页 display_invite_code 必须一致)invite_link(与「复制邀请链接」同链,禁止前端另拼)copy_poster_save_hint(保存前/后两套 · 保存成功后切「已保存…」)copy_poster_saved_toast(默认见 **⑨**)· H5 成功 Toast 见 **⑨** · 与 copy_poster_save_hint 静态引导不同bar_poster_actionsbtn_poster_share(未保存 Toast 提醒;已保存走微信分享,见 dev-notes)btn_poster_save · 成功反馈见 **⑨**(H5 原型 _invite-prototype.js · 小程序 CMS copy_poster_saved_toast)
posterTempPath → 再 wx.saveImageToPhotosAlbum(系统可能同步弹授权)errMsg 含授权拒绝 → wx.showModal 说明「保存海报需相册权限」+ wx.openSetting · 未授权则不写入、不 Toast 成功invite_poster_album_deniedcopy_poster_save_hint 切已保存态 · 埋点 invite_poster_save(save_success=true)saveImageToPhotosAlbum · 降级下载/长按保存 · 成功 Toast 见 **⑨** · 不 silent fail · 禁止 Toast「已保存到相册」GET /growth/invite/code(本页唯一 · 与 27-invite-g6 相同)说明:海报页没有单独的「拉海报列表」接口;模版、邀请码、分享链均来自同一个接口。与 27-invite-g6.html 共用,避免两页 code 不一致。原型 HTML 静态兜底 + _invite-prototype.js 重绘 QR;上线由响应渲染 display_poster_result。替换清单 → dev-notes · 静态 mock → API。
onLoad 必须请求chip_poster_spec)不再请求接口,只用已下发的 posters[] 本地切换reward_points 仅邀请页用,本页可忽略)
code(string)→ 大图 foot「我的邀请码」· 须与邀请页 display_invite_code 相同invite_link(string)→ display_qr_invite 二维码内容 · 与「复制邀请链接」同一 URL · 禁止前端拼接posters(array)→ list_poster_specs 缩略图列表 + display_poster_result 大图合成posters[] 单项结构(CMS 上传 · 运营上下架 · 按 sort 排序展示)
poster_id(string)→ chip_poster_spec 的 data-poster-id · URL 参数 ?poster=name(string)→ 缩略图下方模版名称(如「加油求职」)thumb_url(string)→ 缩略图图片 URLbg_url(string)→ 大图背景图(无图时可用主题色兜底)kicker · tagline · subline(string)→ 大图内三行营销文案{ "code": "INV8K2M9", "invite_link": "https://…/invite?code=INV8K2M9", "posters": [{ "poster_id": "cheer", "name": "加油求职", "thumb_url": "…", "bg_url": "…", "kicker": "春招季…", "tagline": "祝你早日…", "subline": "AI 改简历…" }] }posters 为空 → 展示空态「暂无可用海报」· 隐藏缩略图区 · 大图区勿留黑框27-invite-g6.html · btn_gen_invite_poster · 可选 URL ?poster=cheer|fresh|campus27-invite-g6.html)· 「保存到相册」· 「分享给好友」(微信 · 见 dev-notes)codeGET /growth/invite/code · posters[] 结构与缓存策略。27-invite-g6.html 点「生成邀请海报」→ 进入本页全屏。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10btn_poster_save 成功 · 与 copy_poster_save_hint 静态引导无关)
_invite-prototype.js · 上线:合成图 blob/下载后同句 · 禁止 Toast「已保存到相册」saveImageToPhotosAlbum 成功 · Toast/HUD(CMS · copy_poster_saved_toast · 默认):**「已保存到相册 · 打开「照片」按时间查找,或搜索 AI简历优化」**btn_poster_share · 双端同句 Toast「请先保存到相册,再分享给好友」· 已保存:小程序 showShareImageMenu / onShareAppMessage · H5 原型 mock「正在打开微信分享…」· 详 App-weapp-notesinvite_poster_view · invite_poster_spec_change(poster_id)· invite_poster_save · invite_poster_sharecopy_poster_picker_hint · copy_poster_save_hint · copy_poster_saved_toast(**小程序保存成功** · 非 ⑥ 响应字段)· 模版素材走 posters[]posterTempPath · saveImageToPhotosAlbum · showShareImageMenu · 详表 dev-notes_invite-prototype.js 重绘 QR · 仅 mock H5 保存 Toast · 正式上线 → launch-static-to-api页面04-f4-draft.html · 分段初稿(主路径第 2 步 / 共 7 步)· 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页共 3 个 · PATCH /resume/sections/{module_key} · POST /ai/f4/generate · GET /resume/{id}/sections · 完整见下方 ⑥
一句话:按教育/实习/项目/技能/其他五模块填写简历初稿,可 AI 润色,保存后进入 JD 对齐。
POST /ai/f4/generate · 5 点/模块 · dev-notes · F4 · 自动保存 开放项btn_nav_back
03-f2-exam.htmllabel_step_progresscopy_ai_disclaimerform_profile_basic · 写入 profile · 每字段独占一行 · 预览/PDF 副标题由求职目标 + 城市 + 打码手机 + 打码邮箱拼接input_profile_name
maxlength="30"input_profile_phone
maxlength="11"inputmode="tel" · 保存前 triminput_profile_email
maxlength="100"type="email" · trim · 不含空格input_profile_city
maxlength="30"input_profile_target
maxlength="50"33-resume-preview · 07-e2-hr-preview mock 齐套 · 真源 _f4-prototype.js · PROFILE_DEFAULTStab_module_education · 图标 icon_module_education · 资产 app-image/icons/icon-module-education.svgtab_module_internship · icon_module_internship · icon-module-internship.svgtab_module_project · icon_module_project · icon-module-project.svgtab_module_skills · icon_module_skills · icon-module-skills.svgtab_module_other · icon_module_other · icon-module-other.svgtab_module · 横向可滑动;切换 Tab 换表单 · 选中态金底胶囊 + 图标不透明(详 §18)form_module_fields;切换 Tab 时标签/占位/示例同步切换,各模块数据分存input_bullets(各模块共用 · 切换 Tab 换 label/placeholder)
maxlength="2000" · 教育/实习/项目等模块描述05-jd-paste.html · AI 润色成功 → 回填本框可再编辑input_company · 学历/专业各占一行(input_degree · input_major)· 开始/结束时间各占一行
input_company):1~100 字 · maxlength="100"btn_add_entry)· 每条公司 → input_company(动态)· 职位 → input_position · 时间/描述
input_position):1~100 字 · maxlength="100"select_project_org 关联实习公司或「个人/校内项目」state_other_empty ·「+ 添加其他经历」才展开表单;无内容可直接「完成初稿」list_f4_entries;时间合成 input_period;可勾选「至今」input_degree · input_major · select_project_org · input_project_name · input_project_rolebtn_ai_polish_modulePOST /ai/f4/generate;成功扣 5 点,失败不扣bar_f4_actionsbtn_save_draft
btn_next_module
05-jd-paste.htmlstate_ai_loadingstate_ai_error · btn_retry_f4说明:表单默认值为 _f4-prototype.js 静态 mock(张小雨演示简历);上线进页拉 GET 回填各模块,保存/润色走写接口。替换清单 → dev-notes · 静态 mock → API。
PATCH /resume/sections/{module_key} · 分模块保存
btn_save_draft · 小程序 onHide / H5 visibilitychangeresume_id · module_key(education/internship/project/skills/other)· 模块结构化字段 → form_module_fields / list_f4_entries{ "module_key": "education", "company": "某某大学", "degree": "本科", "major": "市场营销", "period": "2020.09—2024.06" }POST /ai/f4/generate · 当前模块 AI 润色(5 点/模块)
btn_ai_polish_module · 当前模块必填非空 · 额度充足 · 非 loadingresume_id · module_key · 当前模块结构化字段bullets → 回填 input_bullets 等;用户可再编辑state_ai_errorGET /resume/{id}/sections · 续编拉取各模块草稿
profile → form_profile_basic(name · phone · email · city · target)· 各 module_key → 对应 Tab · 演示数据须与 E2/33/08 齐套{ "name": "张小雨", "phone": "13812345678", "email": "zhangxiaoyu@163.com", "city": "上海", "target": "产品运营 · 应届生", "headline": "产品运营 · 应届生 · 上海 · 138****5678 · z***@163.com" }05-jd-paste.html;← fallback 03-f2-exam.html_f4-prototype.js 一致;模块 Tab 五个胶囊左侧均可见小图标(教育/实习/项目/技能/其他)。04-f4-draft.html,或 index 经 F2「跳过」进入。33-resume-preview 副标题齐套(含打码手机 · 打码邮箱)。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10draft_done(附 modules_filled · duration_sec)_f4-prototype.js → mock-resume-demo · 正式上线 → launch-static-to-api字段/API 见 dev-notes · F4;UX 见 mkq产品规则 · UX。
开发说明 · 粘贴 JD页面05-jd-paste.html · 粘贴 JD(主路径第 3 步 / 共 7 步)· 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页唯一 · POST /resume/jd · 保存后进 F1 · 完整见下方 ⑥
一句话:用户粘贴或上传截图目标岗位 JD,保存后进入 JD 镜像对齐(F1,消耗 10 能量点)。
POST /resume/jd → F1 · dev-notes · JDbtn_nav_back
04-f4-draft.htmlpage_titlelabel_step_progresscopy_ai_disclaimercopy_jd_introbtn_upload_jd_image(JPG/PNG/WebP 等)
input_jd_imagelist_jd_attachmentscopy_jd_upload_hint(有附件后变为「已添加 N 张…」)zone_jd_input(空校验红框作用域,同 F2 zone_f2_input)input_jd_text
label_jd_counter06-f1-align.html · 失败见乱码态input_target_role
maxlength="50"msg_jd_invalid · 「无法识别有效岗位描述」bar_jd_actionsbtn_start_f1
06-f1-align.htmlPOST /resume/jd(本页唯一)说明:校验与 OCR 合并为前端 mock;上线保存走本接口,成功带 jd_id 进 F1。10 能量点在 F1 align 扣,本页不扣。替换清单 → dev-notes · 静态 mock → API。
btn_start_f1 且校验通过(文字或截图 OCR 至少一项 · 非乱码 · 已有初稿 · 额度够进 F1)jd_id 避免重复 POSTresume_id · 当前简历jd_text(1~20000 字)→ input_jd_text;超出截断 + Toast「不能超出 20000 字」target_role(≤50,可选)→ input_target_roleattachment_ids[] · 截图 OCR 合并 → list_jd_attachments · btn_upload_jd_image(图片自动压缩见 upload-compress){ "jd_id": "jd_001", "jd_text": "…岗位描述全文…" }zone_jd_input,不调 APImsg_jd_invalid「无法识别有效岗位描述」06-f1-align.html?from=jd(F1 页内再调 POST /ai/f1/align);← fallback 04-f4-draft.htmlPOST /resume/jd 何时调、字段→控件、OCR/截断与失败边界。05-jd-paste.html 或从 F4 末模块进入。asdf !!! →「无法识别有效岗位描述」。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10jd_paste(附 jd_length)compressImage 对齐 H5 · 正式上线 → launch-static-to-api字段/API 见 dev-notes · JD。
开发说明 · JD 镜像对齐 F1页面06-f1-align.html · JD 镜像对齐(主路径第 4 步 / 共 7 步)· 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口;多态页打开说明时只展示当前态 + ⓪①⑧⑨。
展示顺序(按角色 · 章节号固定)
接口本页共 2 个 · POST /ai/f1/align · POST /ai/f1/apply · 完整见下方 ⑥
一句话:对比 JD 与简历,给出匹配度、关键词缺口与改写建议,用户勾选后部分/全部应用。
POST /ai/f1/align、POST /ai/f1/apply · dev-notes · F1btn_nav_back
05-jd-paste.htmlpage_titlelabel_f1_step(加载「对齐中…」/ 失败「对齐未成功」)copy_ai_disclaimerdisplay_match_scorecopy_match_disclaimerlist_keyword_gaps
list_f1_suggestionscard_suggestion(首条为代表)chk_apply_itembar_f1_actionsbtn_apply_partial
chk_apply_item;否则 Toast「请至少勾选一条建议」btn_apply_all
07-e2-hr-preview.htmlstate_ai_loading · copy_f1_loading?from=jd)· 底栏隐藏state_ai_errorbtn_retry_f1(原型 mock 回结果态)state_quota_emptycopy_quota_emptybtn_go_pay → 09-pay.html说明:匹配度「68/100」、关键词缺口与 3 条建议由 _f1-prototype.js mock;上线 align 渲染结果区、apply 写版本。替换清单 → dev-notes · 静态 mock → API。
POST /ai/f1/align · 生成对齐结果
?from=jd)· 失败页 btn_retry_f1 · 同 resume_id+jd_id 未变可不重复请求state_quota_emptyresume_id · jd_id(或 jd_text)match_score(0~100)→ display_match_score · 免责声明 copy_match_disclaimerkeyword_gaps[] · term + status(miss/hit/weak)→ list_keyword_gapssuggestions[] → list_f1_suggestions · chk_apply_item · card_suggestion{ "match_score": 68, "keyword_gaps": [{ "term": "Python", "status": "miss" }, { "term": "Excel", "status": "hit" }], "suggestions": [{ "suggestion_id": "s1", "original": "…", "suggested": "…" }] }POST /ai/f1/apply · 应用改写
btn_apply_partial 或 btn_apply_allresume_id · apply_type=partial|all · partial 时 suggestion_ids[](≥1 条勾选)version_id · 写入版本历史(每份简历最多 15 条)state_ai_errorstate_ai_loading(?from=jd)07-e2-hr-preview.html?from=f1;← fallback 05-jd-paste.html06-f1-align.html,或从 JD 页「开始 JD 对齐」进入(先 loading 再结果)。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10f1_apply(附 apply_type)_f1-prototype.js · 正式上线 → launch-static-to-api字段/API 见 dev-notes · F1。
开发说明 · HR 第一视角 E2页面07-e2-hr-preview.html · HR 第一视角预览(主路径第 5 步 / 共 7 步)· 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口;多态页打开说明时只展示当前态 + ⓪①⑧⑨。
展示顺序(按角色 · 章节号固定)
接口本页唯一 · GET /ai/e2/preview → preview_resume · 完整见下方 ⑥
一句话:模拟 HR 6 秒扫读,高亮简历第一眼(姓名/岗位)与第二眼(最近实习),帮助用户优化「被看见」的信息。
GET /ai/e2/preview · dev-notes · E2copy_not_real_hr · copy_e2_disclaimerbtn_nav_back
06-f1-align.htmlpage_titlelabel_e2_step(加载「生成预览中…」)copy_ai_disclaimerbtn_play_scan(按序高亮第一眼→第二眼)copy_e2_disclaimerpreview_resumecopy_profile_targetblock_profile_contact(「上海」·「138****5678」·「z***@163.com」)highlight_blocks(姓名区)copy_not_real_hrbar_e2_actionsbtn_go_export → 08-export-pdf.html
e2_view(用户完成 HR 扫读后导出)btn_preview_full → 33-resume-preview.html
state_ai_loading · copy_e2_loading?from=f1)后自动播放扫读btn_preview_full_from_panelbtn_skip_e2_from_panel · 埋点 e2_skipcopy_e2_skip_hintGET /ai/e2/preview(本页唯一 · 0 能量点)说明:白底简历排版与金/蓝高亮为 HTML/CSS mock(张小雨演示简历);上线由本接口渲染 preview_resume 与高亮层。替换清单 → dev-notes · 静态 mock → API。
?from=f1)· 带 resume_id + version_id(apply 后新版本)btn_play_scan 仅前端动效,不调接口resume.name → 「张小雨」resume.target · resume.city · 打码 phone/email → 分行渲染(与 33 齐套)highlight_blocks[] → 金/蓝高亮 · data-glance · block_id · glance_order(1=第一眼 0.8s · 2=第二眼 2.1s){ "resume": { "name": "张小雨", "target": "产品运营 · 应届生", "city": "上海", "phone": "138****5678", "email": "z***@163.com" }, "highlight_blocks": [{ "block_id": "name", "glance_order": 1, "label": "0.8s" }, { "block_id": "intern_0", "glance_order": 2, "label": "2.1s" }] }state_ai_error 或 Toast + 重试?from=f1(先 loading 再预览)btn_go_export / 跳过态 → 08-export-pdf.html · btn_preview_full → 33-resume-preview.html;← fallback 06-f1-align.htmlGET /ai/e2/preview 何时调、preview_resume/高亮字段、失败边界。07-e2-hr-preview.html,或 F1「全部应用」进入(先 loading 再预览)。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10e2_view(点「导出 PDF」)· e2_skip(停留 <3s 导出或跳过态)copy_not_real_hr · copy_e2_disclaimer · 可跳过(PRD §9 Q4)_e2-prototype.js · 跨页须与 33/PDF 齐套 → mock-resume-demo · 正式上线 → launch-static-to-api字段/API 见 dev-notes · E2。
开发说明 · PDF 导出页面08-export-pdf.html · PDF 导出(主路径第 6~7 步 · 交付终点)· 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页共 2 个 · POST /resume/export/pdf → card_export_file · GET /user/unlocks · 完整见下方 ⑥
一句话:生成可投递的 PDF;失败时仍可用在线预览;导出后解锁支路(报告卡、投递追踪等)。
POST /resume/export/pdf · P95 ≤30s · dev-notes · 导出state_pdf_generatingcard_export_filelink_online_previewbtn_download_pdf
_export-prototype.js):**「已开始下载,请在浏览器下载记录中查看」** · 小程序上线 Toast 见 **⑨**(禁止复用本句)copy_download_hint(**页面静态文案,非 Toast**)link_share_card(G1 · 须打码)link_e6_checklist(P1)state_pdf_failbtn_retry_export说明:文件名卡片与进度为静态 mock;上线 POST /resume/export/pdf 渲染 card_export_file。替换清单 → dev-notes · 静态 mock → API。
POST /resume/export/pdf · 生成 PDF
resume_id+version_id)· 失败页 btn_retry_exportresume_id · version_id · 可选 template_idpdf_url · file_name · file_size → card_export_file · preview_url → link_online_preview{ "file_name": "张小雨-产品运营.pdf", "file_size": "186 KB", "pdf_url": "…" }state_pdf_fail,保留在线预览降级btn_download_pdf · H5 浏览器下载 + Toast 见 **⑨** · 小程序 wx.downloadFile → wx.openDocument + Toast 见 **⑨**(禁止 H5 文案)GET /user/unlocks · 导出后能力解锁
unlocks[] → 首页工具箱、link_share_card 等支路可见性state_pdf_fail · Toast + 重试 + 在线预览仍可用33-resume-preview.html · G1 link_share_card · E6 link_e6_checklist(P1)08-export-pdf.html。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10btn_download_pdf 点击后 · 与 copy_download_hint 静态说明无关)
_export-prototype.js · 上线:<a download> 或 blob 下载后同句 Toastwx.downloadFile(pdf_url)→ wx.openDocument · 成功 Toast(CMS 可配 · 默认):**「已打开文档,可通过右上角保存或转发」**downloadFile / openDocument 失败 → Toast「暂时打不开文档,请稍后重试」+ 保留 link_online_preview 在线预览 · 禁止 silent fail · 禁止 Toast 成功export_pdf(附 resume_id · duration_sec)state_pdf_generating 静态进度 · 文件名 mock 须与演示简历齐套 → mock-resume-demo · 仅 mock H5 Toast · 正式上线 → launch-static-to-api字段/API 见 dev-notes · 导出。
打开 02-home 打开 03-f2 打开 04-f4 打开 05-jd 打开 06-f1 打开 07-e2 打开 27-invite简历
页面15-resume-list.html · 我的简历 · 底部 Tab「简历」· 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页唯一 · GET /resumes → 渲染 list_resume_items · 原型 HTML 写死两行 mock,上线接 API · 完整字段/何时调/失败见下方 ⑥
一句话:管理多份简历草稿与成品,新建或断点续编。
GET /resumes → list_resume_items · 详 ⑥ · dev-notes · 我的简历page_titlebtn_create_resume
03-f2-exam.html01-landing-login.htmllist_resume_items · 渲染 GET /resumes 响应数组 · 最近更新倒序 · 详 ⑥resume_row_draft
resume_title_draft · 对应响应 titleresume_meta_draft · status + progress_step + updated_atresume_progress_draft · progress_percent(可选)04-f4-draft.html(按 progress_step 亦可跳 F2/JD/F1)resume_row_exported
resume_title_exported · titleresume_meta_exported · status=exported + updated_at33-resume-preview.htmlcopy_empty_resumecopy_empty_hintbtn_empty_create(同顶栏「+ 新建」)state_unauth_blocktab_hometab_resumetab_assistanttab_meGET /resumes(本页唯一)说明:左侧每一行简历卡片均来自本接口;原型 HTML 写死两行 mock,上线由响应渲染 list_resume_items。
onLoad / Tab 切到「简历」且列表未缓存01-landing-login.html 或展示 state_unauth_blockitems[](或根数组)→ list_resume_items 逐行渲染
id(string)→ 行路由参数 · 续编/预览 URLtitle(string)→ resume_title_* · 空则展示「未命名简历」status(enum)→ resume_meta_* 文案:draft / in_progress / exported 等updated_at(ISO)→ 「更新于 今天 / MM-DD」progress_step(string,可选)→ 断点:f2 / f4 / jd / f1 / e2 / exportprogress_percent(number,可选)→ resume_progress_draft 如「已完成 42%」exported_at(可选)→ 已导出行「已导出 PDF · 日期」{ "items": [{ "id": "r1", "title": "产品运营 · 秋招版", "status": "in_progress", "progress_step": "f4", "progress_percent": 42, "updated_at": "…" }, { "id": "r2", "title": "用户运营实习 · 腾讯 JD", "status": "exported", "updated_at": "…" }] }state_list_loadingitems 为空 → 切空态 state_empty_resume(见 ④)GET /resumes 何时调、字段→list_resume_items、失败空态。15-resume-list.html 或 index「简历」Tab 机模。04-f4-draft.html;第二行 → 33-resume-preview.html。02-home)。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10resume_list_view · resume_create_click · resume_row_open(附 resume_id · status)35-resume-versions.html 仅研发验收 · 后台仍存版本历史(F1 apply)GET /resumes;长按删改为 P1 · 正式上线 → launch-static-to-api字段/API 见 dev-notes · 我的简历;UX 见 mkq产品规则 · UX。
开发说明 · 在线预览页面33-resume-preview.html · 在线预览 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页唯一 · GET /resume/{id}/preview → preview_resume · 原型 HTML 写死张小雨 mock,与 F4/E2 齐套 · 完整见 ⑥
一句话:只读展示完整简历(与 PDF 内容一致),支持导出前检查。
GET /resume/{id}/preview → preview_resume · 详 ⑥ · mock 真源 _f4-prototype.jsbtn_nav_back · fallback 08-export-pdf.htmlpage_titlecopy_preview_intropreview_resume · 白底 ATS 单栏卡片 · 分行展示(求职目标 / 联系方式 / 各模块分段,避免一行挤满)copy_profile_targetblock_profile_contact
copy_profile_citycopy_profile_phonecopy_profile_emailcopy_ai_disclaimerstate_pdf_fail_hint · 「在线预览仍可用…」preview_resume · 预览内容同默认态(可缩写展示)btn_retry_export → 08-export-pdf.htmlbar_preview_actionsbtn_go_export → 08-export-pdf.htmllink_e6_checklist → 32-e6-checklist.htmlGET /resume/{id}/preview(本页唯一)说明:左侧 preview_resume 卡片均来自本接口;原型 HTML 写死张小雨 mock,上线由响应渲染。字段对齐 F4 MODULE_FORMS · 与 E2 preview_resume 齐套。
resume_idpreview_resume
profile.name → 「张小雨」profile.target → copy_profile_targetprofile.city · profile.phone(打码)· profile.email(打码)→ block_profile_contact 各占一行profile.headline · 可选拼接字段 · PDF 导出兼容 · 在线预览优先用分行控件sections.education[] → 教育背景段(校名 + 学历/专业/时间分行)sections.internship[] → 实习经历段(标题 + 时间 + bullets)sections.project[] → 项目经历段sections.skills → 技能与工具段{ "profile": { "name": "张小雨", "target": "产品运营 · 应届生", "city": "上海", "phone": "138****5678", "email": "z***@163.com" }, "sections": { "education": [{ "school": "某某大学", "degree": "本科", "major": "市场营销", "period": "2020.09—2024.06" }], "internship": [{ "company": "某互联网科技有限公司", "role": "产品运营实习生", "period": "2024.06—2024.09", "bullets": ["使用 Excel 复盘 UV/转化,参与用户增长执行,协助完成 3 场线上活动落地"] }], "project": [{ "name": "公众号运营优化", "role": "产品运营", "period": "2024.07—2024.08", "bullets": ["搭建内容排期表与数据看板,阅读完成率提升 18%"] }], "skills": "Excel 数据透视 · Figma 原型 · SQL 基础 · 普通话二级甲等" } }state_pdf_fail_hint 降级态15-resume-list.html 已导出行 · 07-e2-hr-preview.html「预览完整简历」· 08-export-pdf.html「预览」GET /resume/{id}/preview JSON 示例与 preview_resume 字段映射。33-resume-preview.html 或从 15-resume-list 第二行进入。07-e2-hr-preview mock 齐套 · 导出 PDF 文件名与 08 一致。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10resume_preview_view · preview_go_export · preview_go_checklist← 步骤衔接核对:左栏上一步 · 右栏下一步 →
助手
页面23-assistant-tab.html · 助手 Tab · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页唯一 · GET /user/unlocks → 控制 state_locked_assistant / grid_assistant_tiles · 原型 Tab 演示两态 · 完整见下方 ⑥
一句话:第四 Tab「助手」——导出 PDF 后开放的扩展能力宫格(非 F1~F7 五能力 Tab 并列)。
tool_grid_* 解锁规则一致GET /user/unlocks → 锁态/宫格 · 详 ⑥ · 与 02-home.html 共用同一响应page_title宫格图标 · 嵌套含 容器/尺寸/资产/着色/机模与上线/显隐 · 机模为 Font Awesome · 上线用 app-image/icons/*.svg · 全表 ICON-CATALOG.md §3。
copy_unlock_banner
grid_assistant_tiles · 2 列 8 项 · 由 GET /user/unlocks 控制各 tile 可见/可点 · 详 ⑥ · 各宫格「机模 vs 上线」同「模拟面试」(机模 Font Awesome · 上线 SVG)tile_f7_interview · unlock mock_interview · 链 17-f7-interview.html · 与首页 tool_grid_interview 同规则
span.tile-icon.chip-blue(或项目宫格 class)· 约 24×24 / 外框 32×32fas fa-comments · H5 app-image/icons/icon-comments-blue.svg · 小程序 src/assets/icons/icon-comments-blue.svg#7EB8FF · 无独立 -active 图<i class="fas …">)· 上线:Image + 上文 SVGhas_exported + mock_interview · 未解锁置灰或隐藏 tiletile_f6_apply · unlock apply_track · 链 13-f6-apply.html · 与 tool_grid_apply 同规则
chip-gold · 约 24×24fas fa-paper-plane · H5 app-image/icons/icon-paper-plane-blue.svg · 小程序 src/assets/icons/icon-paper-plane-blue.svgchip-gold(与 14 投递图标文件共用)apply_track unlocktile_g1_share · unlock share_card · 链 12-share-card.html · 与 tool_grid_share_card 同规则
fas fa-share-nodes · H5 app-image/icons/icon-share-nodes-orange.svg · 小程序 src/assets/icons/icon-share-nodes-orange.svg#FF7710share_card unlocktile_career_plan · unlock career_plan · 链 19-career-plan.html
chip-blue · 约 24×24fas fa-route · H5 app-image/icons/icon-route-blue.svg · 小程序 src/assets/icons/icon-route-blue.svgcareer_plan unlocktile_skill_courses · unlock skill_courses · 链 20-skill-courses.html
chip-gold · 约 24×24fas fa-graduation-cap · H5 app-image/icons/icon-graduation-cap-gold.svg · 小程序 src/assets/icons/icon-graduation-cap-gold.svgskill_courses + published_count>0 · published_count=0 → 隐藏 tile_skill_courses(原型 mock 常显)· 详 ⑥tile_growth_diary · unlock growth_diary · 链 22-growth-diary.html
fas fa-seedling · H5 app-image/icons/icon-seedling.svg · 小程序 src/assets/icons/icon-seedling.svggrowth_diary unlocktile_f8_voice · unlock f8_voice · 链 28-f8-voice.html
fas fa-microphone · H5 app-image/icons/icon-microphone.svg · 小程序 src/assets/icons/icon-microphone.svgf8_voice unlock · 子页麦克风按需授权tile_desc / tile-desc · 可点击 → tile_emotion_d · unlock emotion_d · 链 29-emotion-d.html
fas fa-leaf · H5 app-image/icons/icon-leaf.svg · 小程序 src/assets/icons/icon-leaf.svg(14 用 icon-face-smile.svg)emotion_d unlocklink_unlock_hub · 链 14-unlock-hub.html · 无宫格图标state_locked_assistant · 未导出 PDF / unlocks 为空时展示fas fa-lock · H5 app-image/icons/icon-lock.svg · 小程序 src/assets/icons/icon-lock.svg#locked · has_exported=false 时整页copy_locked_hintbtn_go_f2 · 链 03-f2-exam.html(步骤 1/7 摸底)tab_home · 02-home.html
app-image/tab/tab-home.svg · 选中 tab-home-active.svgapp.json iconPath / selectedIconPath#94A3B8 · 选中 #F9B400(--lux-gold)tab_resume · 15-resume-list.html
app-image/tab/tab-resume.svg · 选中 tab-resume-active.svgtab_assistant · 本页
app-image/tab/tab-assistant.svg · 选中 tab-assistant-active.svg(本 Tab 高亮)selectedIconPathtab_me · 10-me.html
app-image/tab/tab-me.svg · 选中 tab-me-active.svgTab 壳层页 · 宫格点击即跳转子能力页;锁态 CTA 居中。
GET /user/unlocks(本页唯一 · 与 02 首页共用)说明:原型 HTML 静态展示「已解锁/新用户」两 Tab;上线由本接口决定锁态 vs 宫格,以及各 tile_* 可见/可点。与首页 tool_grid_* 读同一响应,导出 PDF 后须 revalidate。替换清单 → dev-notes · 静态 mock → API。
onShow · 列表未缓存01-landing-login.html · 成功后回跳本 Tabhas_exported(boolean,或 infer 自 unlocks 非空)→ 无导出 → 展示 state_locked_assistant(③);已导出 → 展示 copy_unlock_banner + grid_assistant_tiles(②)unlocks[](string[])→ 各 tile_* 与首页 tool_grid_* 锁/解锁:
mock_interview → tile_f7_interview · tool_grid_interviewapply_track → tile_f6_apply · tool_grid_applyshare_card → tile_g1_share · tool_grid_share_cardcareer_plan → tile_career_planskill_courses → tile_skill_coursesgrowth_diary → tile_growth_diaryf8_voice → tile_f8_voiceemotion_d → tile_emotion_d{ "has_exported": true, "unlocks": ["mock_interview", "apply_track", "share_card", "career_plan", "skill_courses", "growth_diary", "f8_voice", "emotion_d"] }{ "has_exported": false, "unlocks": [] }state_assistant_loading(可选)20-skill-courses 联动
onShow 并行 GET /courses(或 unlocks 含 published_count)published_count=0 → 隐藏 tile_skill_courses · 与 14 row_unlock_skill_courses · 02 已导出态「技能课程」齐套published_count>0 + skill_courses 已解锁 → 展示 · 列表空/无匹配在 20 页处理(empty_reason)link_all_tools → 本页14-unlock-hub.html · 锁态「去优化简历」→ F2 摸底data-spec-state 对应章节(已解锁/新用户)badge-v11 或可见「1.1」版本角标 · 能力分期见 ⑨ / feature flag。published_count 隐藏规则 · Tab PNG 81×81 说明。GET /user/unlocks 何时调、字段→grid_assistant_tiles / 锁态、与首页联动。23-assistant-tab.html 或 index.html 机模「助手」Tab(file:// 即可)。tool_grid_* 与本页 tile 解锁规则一致(见 ⑥)· 课程入口隐藏规则与 20-skill-courses ⑥ 一致。app-image/ICON-CATALOG.md · 宫格见 §3 助手 Tab · 底栏 Tab 见 §1 · 与 14-unlock-hub 同名图标共用 icons/icon-*.svgapp-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10ICON-CATALOG.md §3 §1assistant_tab_view · assistant_tile_click(附 tile_id)· assistant_locked_go_f2 · assistant_hub_linkpublished_count → launch-static-to-api(研发)· 空态真源 20-skill-courses.html字段/API 见 dev-notes · 助手 Tab;首页联动见 02-home.html ⑥。
页面09-pay.html · 能量点充值 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页共 2 个 · GET /pay/packages · POST /pay/orders · 余额读 GET /wallet/balance · 完整见 ⑥
一句话:选择能量点套餐并完成微信支付,成功后余额增加。
btn_nav_back · history.back()page_titlelabel_wallet_balance · 读 GET /wallet/balancesku_trialsku_monthlysku_seasonbtn_wechat_pay(价格随选中 SKU 变)state_payingstate_pay_success · btn_pay_continue 返回来源页state_pay_cancelstate_quota_exhaustedlabel_wallet_balance · 进页读 GET /wallet/balance · 支付成功后 revalidateGET /pay/packages · POST /pay/orderspackages[] → sku_* · 字段 sku_id · name · price · points · duration_days · is_recommended{ "packages": [{ "sku_id": "trial", "name": "体验包", "price": 6.9, "points": 50, "is_recommended": true }, …] }btn_wechat_pay · 请求体 { "sku_id": "trial" }state_payingGET /wallet/balance → state_pay_successstate_pay_cancel · 不扣款balance → label_wallet_balancestate_quota_exhausted10-me card_wallet / btn_recharge · F1 额度不足引导26-orders.html · ← 返回上一页09-pay.html。10-me「充值」进入 · 返回应回到我的页。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10pay_page_view · pay_sku_select · pay_wechat_click · pay_success · pay_cancel_pay-prototype.js · 未真调微信 · 正式上线 联调 → launch-static-to-api · 价格见 open-items页面10-me.html · 我的 · 底部 Tab · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页共 2 个 · GET /wallet/balance · GET /resumes(条数摘要)· 菜单为纯导航 · 完整见 ⑥
一句话:账户中心 — 余额充值、简历/订单/增长入口、设置。
15-resume-list 两行 mock 一致label_user_namecopy_user_metacard_wallet → 09-pay.htmllabel_energy_balance · 读 GET /wallet/balancebtn_recharge → 同跳转充值页copy_resume_count_hint · 读 GET /resumes 条数 · 可点击 → menu_resume_list → 15-resume-list.htmlmenu_apply_track → 13-f6-apply.htmlmenu_orders → 26-orders.htmlmenu_invite → 27-invite-g6.htmlmenu_unlock_hub → 14-unlock-hub.htmlmenu_feedback → 16-feedback.htmlmenu_settings → 11-settings.htmlstate_low_balance · 「完成 JD 对齐需 10 点」btn_recharge_urgent → 09-pay.htmltab_hometab_resumetab_assistanttab_mebalance(number)→ label_energy_balance · 原型 mock 28state_low_balance(可选)items.length → copy_resume_count_hint 如「2 份草稿」/「1 份草稿」/ 空则「还没有简历」15-resume-list ② 两行):{ "items": [{ "id": "r1", "title": "产品运营 · 秋招版", "status": "in_progress" }, { "id": "r2", "title": "用户运营实习 · 腾讯 JD", "status": "exported" }] } → 展示「2 份草稿」09-pay.html · 我的简历 → 15-resume-list.htmlGET /resumes 条数映射。10-me.html · Tab 高亮「我的」。09-pay.html;各菜单跳转正确。15-resume-list 两行(产品运营/用户运营实习)一致 · 与 02-home 能量数字 28 点一致。app-image/ICON-CATALOG.md · 菜单 menu-icon 见 §4 我的 · 底栏 Tab 见 §1app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10me_tab_view · me_recharge_click · me_menu_click(附 menu_id)页面11-settings.html · 设置 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口无进页拉数 · 注销 POST /account/delete · 详 ⑥
一句话:协议与合规入口、退款与系统状态跳转、账号注销与版本信息。
btn_nav_back · 优先 history.back() · fallback 10-me.html · index 机模 data-embed-back="shell"page_titlelink_user_agreement · 跳 39-legal-doc.html?doc=user-agreementlink_privacy · 跳 39-legal-doc.html?doc=privacylink_ai_terms · 跳 39-legal-doc.html?doc=ai-termslink_deepfake_compliance · 跳 39-legal-doc.html?doc=deep-synthesis · 含 AI 生成内容标识规则 · 禁止机模角标「合规」link_refund · 跳 34-refund.htmllink_org_bind · 跳 40-org-bind.html · 机构码绑定 · 详 40-org-bind ⑥link_system_status · 跳 37-system-status.html · 禁止机模「演示」标记copy_no_invoice_note · PRD Q1 无发票 · 禁止写「1.0 不支持发票」btn_delete_account
POST /account/delete · 详 ⑥copy_delete_account_hint · 对齐 PRD Q9 / §5.3copy_app_version · 上线读 CMS/包版本 · 非产品分期号沉浸页 · 无底部 Tab · 操作在卡片菜单与注销按钮完成。
POST /account/delete(本页唯一 · 非进页 GET)说明:菜单与协议链为静态/CMS 外链,进页无 GET;仅「注销账号」走本接口。原型按钮 UI mock。替换清单 → dev-notes · 静态 mock → API。
btn_delete_account · 二次确认后提交 · 非进页拉数{ "reason": "user_initiated" } · 无请求体亦可(以 dev-notes 拍板为准)01-landing-login.html · Toast「注销申请已提交」39-legal-doc.html(四文档) · 34-refund.html · 40-org-bind.html · 37-system-status.html · 注销流程 · 返回我的POST /account/delete 注销流程。11-settings.html 或 index → 我的 → 设置。39-legal-doc.html 对应正文(与「申请退款」同级页内跳转)。34-refund.html;点「学校/机构额度」→ 40-org-bind.html;点「网络与系统状态」→ 37-system-status.html。10-me.html(embed 回 Tab 壳层)。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10settings_view · settings_link_click(附 link_id)39-legal-doc.html + _legal-doc-prototype.js mock · 注销 confirm+Toast · 上线 CMS 替换正文 → launch-static-to-api页面39-legal-doc.html · 法务文档 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页唯一 · GET /cms/legal/{doc} → 渲染 article_legal_body · 原型 mock · 完整见 ⑥
一句话:展示用户协议/隐私政策/AI 与深度合成说明正文,供设置页与登录页链入。
?doc= 路由 · CMS 渲染 · 详 ⑥btn_nav_back · 优先 history.back() · fallback 11-settings.html?doc= 变化 · 如「用户协议」「隐私政策」→ page_titlecopy_legal_updated · 字段 updated_atcopy_legal_intro · 字段 introh2)+ 多段正文 · 隐私政策含小节(h3)· 容器 → article_legal_body_legal-doc-content.js · 四文档均为完整章节 mock(非四行摘要)copy_legal_intro?doc=privacy · 九节 + 收集信息四小节 · 含 60 天/注销 30 天?doc=ai-terms · 七节 · 含非录用/非心理咨询边界?doc=deep-synthesis · 七节 · 含标识与权限说明?doc= 并重绘 ①~③沉浸阅读页 · 仅顶栏返回 · 正文区滚动。
GET /cms/legal/{doc}(本页唯一)说明:原型 _legal-doc-content.js 完整 mock;上线由 GET /cms/legal/{doc} 渲染 copy_legal_intro · article_legal_body。替换清单 → dev-notes · 静态 mock → API。
doc:user-agreement · privacy · ai-terms · deep-synthesistitle → page_title · updated_at → copy_legal_updated · intro → copy_legal_intro · sections[](heading · paragraphs[] · 可选 subsections[])→ article_legal_bodydoc → 回退用户协议 · 网络失败 Toast + 重试11-settings.html 四项法务链 · 01-landing-login.html 协议/隐私 · 22-growth-diary.html 隐私政策链_legal-doc-content.js 一致。11-settings.html · 点四项法务链 → 分别打开对应 ?doc= 正文页(与点「申请退款」同级体验)。?doc=privacy。11-settings.html 或上一页。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10legal_doc_view(附 doc)_legal-doc-content.js 完整 mock · 上线法务/CMS 替换正文 · Tab 仅原型预览 → launch-static-to-api页面12-share-card.html · 诊断报告卡 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页共 2 个 · GET /share-card · POST /share-card/render · 原型 mock · 完整见 ⑥
一句话:F2 待改指数可视化分享卡,隐私打码完成后才可分享至微信。
btn_nav_back · 优先 history.back() · fallback 23-assistant-tab.html · index 机模 data-embed-back="shell" 回当前 Tab 壳层page_title(禁止内部编号上屏 · 代号见 ⑨)display_scorechk_mask_name · chk_mask_phone · chk_mask_email · 邮箱行容器 row_mask_emailbtn_share_friend · 分享 Toast 见 **⑨**btn_share_moments · 分享 Toast 见 **⑨**state_share_blockedblocked=true 进页态 · 不是 编辑态点「生成分享图」的跳转(该路径见 ⑤ 红框 + Toast)btn_generate_share
row_mask_email 红框(is-invalid)+ Toast「请先勾选邮箱打码后再生成」· 停留编辑态 · 不跳拦截全屏 · 双端同句见 **⑨**说明:分数与阻断态来自 F2 结果;原型 HTML 写死 mock。上线由下列接口渲染 display_score · state_share_blocked。替换清单 → dev-notes · 静态 mock → API。
GET /share-card · 进页读卡数据
resume_idscore → display_score · blocked → state_share_blocked · mask_options[] → 勾选区POST /share-card/render · 生成分享图
btn_generate_share · 含脱敏选项mask_phone · mask_email 等image_url 或小程序分享参数 · 调起分享 · Toast 分端见 **⑨**GET /share-card 与 POST /share-card/render 字段映射。12-share-card.html · 顶栏三态 Tab 可切换。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10btn_generate_share · btn_share_friend · btn_share_moments)
row_mask_email 红框 · 不 Toast 羞辱 · 不切 state_share_blocked_share-prototype.jsonShareAppMessage / onShareTimeline · 调起系统分享面板 · 禁止 Toast「已调起微信分享(原型 mock)」等假成功句 · 失败 → Toast「分享失败,请重试」share_card_view · share_generate · share_wechat_share-prototype.js · 正式上线 → launch-static-to-api页面13-f6-apply.html · 投递追踪 · F6 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页共 2 个 · GET /applications · POST /applications(含改删)· 原型 mock · 完整见 ⑥
一句话:手动记录投递公司与状态,点列表可改;标记「受挫」可解锁 E5 急救包。
_f6-prototype.js · 详 ⑥btn_nav_back · 优先 history.back() · fallback 23-assistant-tab.html · index 机模 data-embed-back="shell" 回当前 Tab 壳层page_titlebtn_add_apply · 打开新增表单(表单态隐藏)list_apply_items · 脚本渲染 · 默认两行 mockrow_apply_item · 进入编辑表单copy_f6_frustrated_hintlink_e5_rescue · 链 30-e5-rescue.html?application_id={id} · id 来自该条 F6 记录state_empty_applybtn_empty_add_applyform_apply_addcopy_apply_form_titleinput_apply_company
maxlength="100"input_apply_role
maxlength="100"input_apply_date
maxlength="5" · 占位「如 05-20」select_apply_status · 拒信展示为「已拒」胶囊btn_save_apply · 空公司/岗位/日期 → 红框 · 无 Toast 骂人btn_cancel_apply · 回列表/空态btn_delete_apply · 二次确认_f6-prototype.js · sessionStorage mock · 正式上线 换 API沉浸页 · 表单内嵌保存/取消。
说明:列表与表单均来自投递 API;原型由 _f6-prototype.js + sessionStorage mock。上线渲染 list_apply_items。替换清单 → dev-notes · 静态 mock → API。
GET /applications · 列表
items[] → list_apply_items · 字段 company · role · date · status(已投递/已读/拒信/受挫){ "items": [{ "id": "f6-1", "company": "某科技公司", "role": "产品运营", "date": "05-20", "status": "已投递" }, { "id": "f6-2", "company": "某互联网公司", "role": "用户增长", "date": "05-18", "status": "拒信" }] }POST /applications · 新增 · PATCH /applications/{id} · 编辑 · DELETE /applications/{id} · 删除
btn_save_apply / btn_delete_applycompany · role · date · statusstatus=受挫 触发 unlock · 展示 link_e5_rescue · href 带 application_id → E5 读同条上下文link_e5_rescue · 30-e5-rescue.html?application_id= · 返回助手 Tabbadge-v11 或可见「1.1」版本角标 · 能力分期见 ⑨ / feature flag。GET /applications · CRUD 字段→list_apply_items。13-f6-apply.html 或 index 机模进入。_proto-form-input.js30-e5-rescue ⑥ 分档)。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10f6_list_view · f6_add_save · f6_edit_save · f6_status_frustrated页面14-unlock-hub.html · 能力中心 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页唯一 · GET /user/unlocks → 三列表 · 与 23 助手 Tab 同响应 · 完整见 ⑥
一句话:全站能力清单与解锁状态一览,节点解锁非五 Tab 并列。
btn_nav_back · 优先 history.back() · fallback 23-assistant-tab.html · index 机模 data-embed-back="shell" 回当前 Tab 壳层
fas fa-arrow-left · H5 app-image/icons/icon-arrow-left.svg · 小程序 src/assets/icons/icon-arrow-left.svg#E8EDF2 · 单色 SVGfas fa-arrow-left(顶栏 <i>)· 上线:Image + 上文 SVGpage_title列表行图标 · 嵌套含 容器/尺寸/资产/着色/机模与上线/显隐 · 机模左侧为 Font Awesome(网页图标库)· 上线用 app-image/icons/*.svg · 全表 ICON-CATALOG.md §2。
list_unlock_main03-f2-exam.html
span.menu-icon.chip-gold · 约 24×24 / 外框 32×32 · 行内无独立 icon data-spec-idfas fa-stethoscope · H5 app-image/icons/icon-stethoscope-gold.svg · 小程序 src/assets/icons/icon-stethoscope-gold.svg#F9B400 · 底 chip-gold · 无独立 -active 图fa-check · H5/小程序 icon-check.svg · 色 #F9B400 · 机模无独立 IDfas fa-stethoscope(本行 menu-icon 内 <i>)· 上线:Image + 上文 SVGrow_unlock_f7 · 副文案 「已解锁」 → copy_unlock_f7_hint · 右侧 金色对勾(与摸底一致,禁止灰底「可用」胶囊)→ icon_unlock_f7 · 链 17-f7-interview.html
span.menu-icon.chip-blue · 约 24×24 / 外框 32×32fas fa-comments · H5 app-image/icons/icon-comments-blue.svg · 小程序 src/assets/icons/icon-comments-blue.svg#7EB8FF · 底 chip-blueicon-check.svg · data-spec-id="icon_unlock_f7" · aria-hiddenfas fa-comments / fas fa-check · 上线:左图 + 右勾各 Image + SVGunlocks 含 mock_interview 时展示 · 未解锁隐藏行或锁态29-emotion-d.html
span.menu-icon(默认底)· 约 24×24fas fa-face-smile · H5 app-image/icons/icon-face-smile.svg · 小程序 src/assets/icons/icon-face-smile.svg#E8EDF2 · 单色 SVG<i class="fas …">)· 上线:Image + 上文 SVGemotion_d 已解锁 · 混合态展示36-emoji-capture.html
span.menu-icon · 约 24×24fas fa-camera · H5 app-image/icons/icon-camera.svg · 小程序 src/assets/icons/icon-camera.svg#E8EDF2<i class="fas …">)· 上线:Image + 上文 SVGscope.camera(子页 ②)28-f8-voice.html
span.menu-icon · 约 24×24fas fa-microphone · H5 app-image/icons/icon-microphone.svg · 小程序 src/assets/icons/icon-microphone.svg#E8EDF2<i class="fas …">)· 上线:Image + 上文 SVGf8_voice 已解锁时展示30-e5-rescue.html
span.menu-icon · 约 24×24fas fa-kit-medical · H5 app-image/icons/icon-kit-medical.svg · 小程序 src/assets/icons/icon-kit-medical.svg#E8EDF2<i class="fas …">)· 上线:Image + 上文 SVGlist_unlock_growth12-share-card.html
span.menu-icon · 行内橙字 var(--lux-orange) · 约 24×24fas fa-share-nodes · H5 app-image/icons/icon-share-nodes-orange.svg · 小程序 src/assets/icons/icon-share-nodes-orange.svg#FF7710 · 无 chip 底share_card unlock · 混合态展示27-invite-g6.html
span.menu-icon · 约 24×24fas fa-gift · H5 app-image/icons/icon-gift.svg · 小程序 src/assets/icons/icon-gift.svg#E8EDF218-g2-channel.html
span.menu-icon · 约 24×24fas fa-bullhorn · H5 app-image/icons/icon-bullhorn.svg · 小程序 src/assets/icons/icon-bullhorn.svg#E8EDF2list_unlock_v11 · 职业规划 · 技能提升课程 · 成长陪伴19-career-plan.html
span.menu-icon.chip-blue · 约 24×24fas fa-route · H5 app-image/icons/icon-route-blue.svg · 小程序 src/assets/icons/icon-route-blue.svg#7EB8FF · chip-bluecareer_plan unlockrow_unlock_skill_courses · 链 20-skill-courses.html
span.menu-icon.chip-gold · 约 24×24fas fa-graduation-cap · H5 app-image/icons/icon-graduation-cap-gold.svg · 小程序 src/assets/icons/icon-graduation-cap-gold.svg#F9B400 · chip-gold<i class="fas …">)· 上线:Image + 上文 SVGskill_courses + published_count>0 · published_count=0 → 不渲染本行(原型 mock 仍展示)20-skill-courses ⑥22-growth-diary.html
span.menu-icon · 约 24×24fas fa-seedling · H5 app-image/icons/icon-seedling.svg · 小程序 src/assets/icons/icon-seedling.svg#E8EDF2growth_diary unlockfas fa-lock · H5 app-image/icons/icon-lock.svg · 小程序 src/assets/icons/icon-lock.svgopacity-30 机模样式 · SVG 默认 #E8EDF2#locked 全屏态 · 混合态不展示copy_locked_hintbtn_go_f2_locked · 链 F2列表点击即跳转子能力页。
GET /user/unlocks(本页唯一 · 与 02/23 共用)说明:主路径/增长/1.1 三列解锁态来自本接口;原型 Tab 演示 mock。上线渲染 list_unlock_main · list_unlock_growth · list_unlock_v11。替换清单 → dev-notes · 静态 mock → API。
unlocks[] 或 features.{key}.unlocked · 每项含 id · title · locked · hint20-skill-courses 联动(PRD Q8)
GET /courses 并行(或 unlocks/BFF 响应含 published_count)published_count=0 → 不渲染 row_unlock_skill_courses · 误入 20 见 state_courses_hidden(20 ④)published_count>0 且 skill_courses 已解锁 → 展示本行 · 副文案可读推荐条数(非写死「3 门」)empty_reason=no_gap_match 展示 20 ③progress_step · 未解锁显示 copy_locked_hintmock_interview 显隐。GET /user/unlocks 与三列表容器映射。14-unlock-hub.html · 两态 Tab 可切换。published_count=0 时 14/23 均隐藏课程行/宫格 · 与 20-skill-courses ⑥ 一致。app-image/ICON-CATALOG.md · 本页列表图标见 §2 能力中心 · 底栏 Tab 见 §1 · 文件在 app-image/icons/ · app-image/tab/(选中 *-active.svg)· 用法 app-image/README.mdapp-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10ICON-CATALOG.md §2 · 小程序路径约定见 app-image/README.mdunlocks[].idbadge-v11 与可见「1.1」· 未开放 → 锁/隐藏unlock_hub_view · unlock_item_click(附 item_id)GET /user/unlocks + 课程 published_count → launch-static-to-api(研发)· 空态 UI 真源 20-skill-courses.html ③④页面17-f7-interview.html · 文字模拟面试 · F7 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页唯一 · POST /ai/f7/reply → list_chat_messages · 原型 mock · 完整见 ⑥
一句话:基于简历的 AI 文字模拟面试,3 能量点/轮,非真实 HR 承诺。
btn_nav_back · 优先 history.back() · fallback 23-assistant-tab.html · index 机模 data-embed-back="shell" 回当前 Tab 壳层page_titlelist_chat_messages · chat-scroll-inner 贴 composer 上方 · 脚本追加用户气泡入此容器chat_interviewerchat_userchat_interviewerchat-scroll-footerinput_interview_reply · type="text" · maxlength="2000" · enterkeyhint="send"
maxlength + 粘贴超限 Toast「内容不能超过 2000 字」· 上线 API 同上限校验trim · 气泡用 textContent 渲染(不解析 HTML/脚本)POST /ai/f7/reply 追加 AI 回复btn_send_replyvisualViewport 贴键盘上方 · 消息区滚到底_chat-composer.js · 与 29-emotion-d 共用单屏对话态 · 加载/失败态上线扩展见 ⑨。
沉浸主路径支路 · 仅顶栏返回。
POST /ai/f7/reply(本页唯一)说明:每轮用户发送走本接口;原型由 _chat-composer.js mock 气泡。上线追加 AI 回复到 list_chat_messages。路径以 dev-notes 拍板为准。替换清单 → dev-notes · 静态 mock → API。
session_id · message(1~2000 字 · trim 后非空)· 可选 resume_idreply.text → 新 AI 气泡 · reply.follow_up 可选POST /ai/f7/reply 何时调与消息区映射。17-f7-interview.html。23-assistant-tab.html(非首页)。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10f7_start · f7_reply_send · f7_round_complete页面18-g2-channel.html · 渠道落地 · G2 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页唯一 · GET /channels/{channel_id} → 文案 + img_channel_hero · 原型 mock · 完整见 ⑥
一句话:运营可配渠道落地页模板,带 UTM 归因与登录 CTA。
copy_channel_tag_qiuzhao · URL 读 utm_source=qiuzhao2026(仅 ⑥⑨)hero.title · 详 ⑥hero.subtitledisplay_channel_hero · 图片 img_channel_hero
hero_image_url · 详 ⑥bullets[]copy_channel_footer_hint · CMS/模板示意仅 ⑨btn_channel_login · 链登录link_channel_home · 链首页copy_channel_tag_campuscopy_channel_tag_boss外链落地 · 状态栏 + 全屏内容 · CTA 贴内容区底部。
GET /channels/{channel_id}(本页唯一)说明:秋招/高校/Boss 三态文案、CTA 与 Hero 宣传图 均来自 B 端渠道配置(CMS 上传);原型 HTML 写死 mock。上线解析 channel_id / UTM 后请求本接口,渲染 copy_channel_tag_* · img_channel_hero · btn_channel_login 等。替换清单 → dev-notes · 静态 mock → API。
onLoad · query channel_id 或由 UTM 映射为 channel_id01-landing-login.html · 401 不影响落地页只读展示tag(string)→ copy_channel_tag_* · 如「秋招专场」hero.title · hero.subtitle(string)→ 大标题/副标题(秋招态 ①)hero_image_url(string · HTTPS CDN)→ img_channel_hero · <img src> · 容器 display_channel_herobullets[](string[])→ 卖点列表 · 逐条渲染cta.label · cta.link → btn_channel_loginfooter_hint(string)→ copy_channel_footer_hint · 后台可配 · 非埋点template(enum)→ 渲染哪套模板:qiuzhao / campus / boss · 原型用 Tab 演示三态{ "channel_id": "qiuzhao2026", "template": "qiuzhao", "tag": "秋招专场", "hero": { "title": "秋招季 · 15 分钟拿到敢投递简历", "subtitle": "专为应届生设计 · 简历摸底 + JD 对齐 + HR 预览" }, "hero_image_url": "https://cdn.example.com/channels/qiuzhao2026/hero.jpg", "bullets": ["新用户注册赠 10 能量点", "针对 JD 关键词一键对齐"], "cta": { "label": "微信登录 · 免费开始", "link": "/pages/login" }, "footer_hint": "活动规则以页面展示为准" }channel_id → 默认落地页或 404 友好页hero_image_url 空或加载失败 → 隐藏 display_channel_hero 或展示默认占位图 · 不影响 CTA01-landing-login.html · 02-home.htmlGET /channels/{channel_id} · hero_image_url → img_channel_hero · 后台上传说明。18-g2-channel.html · 三 Tab 文案/图不同。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10app_launch · channel_cta_click(附 utm_*)hero_image_url 替换 → launch-static-to-apiGET /channels/{channel_id} · 不在小程序/H5 包内写死渠道图页面19-career-plan.html · 职业规划 · 1.1 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页唯一 · POST /ai/career/plan → display_plan_report · 原型 mock · 完整见 ⑥
一句话:简历+意向生成简版职业路径建议,非 Offer/猎头承诺。
btn_nav_back · 优先 history.back() · fallback 23-assistant-tab.html · index 机模 data-embed-back="shell" 回当前 Tab 壳层btn_start_formform_career_intake · 意向行业/城市/困惑input_career_concern
maxlength="500"concern 提交 · 成功切 loading → 报告态 · 原型保留输入btn_generate_plandisplay_plan_reportlink_career_to_courses · 链 20-skill-courses.html
published_count=0(PRD Q8)→ 隐藏本行 · 原型 mock 仍展示POST /ai/career/plan(本页唯一)说明:表单 + 简历摘要生成报告;原型 mock 报告区。上线渲染 display_plan_report。替换清单 → dev-notes · 静态 mock → API。
btn_generate_plan · 非进页 GETindustry · cities · concern · resume_idreport.sections[] → display_plan_report · show_course_cta(boolean,或进页读 GET /courses 的 published_count)→ 控制 link_career_to_courses 显隐20-skill-courses ⑥
show_course_cta=false 或 published_count=0 → 不渲染 link_career_to_courses20-skill-courses.html · 返回能力中心POST /ai/career/plan 请求体与报告区映射。19-career-plan.html · 四态 Tab 可切换。20-skill-courses.html · 全站无课时本行隐藏 · 无匹配时在 20 见 ③。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10career_plan_start · career_plan_done · career_to_course_career-prototype.js mock 流程 · 正式上线 AI + 课程 published_count 控 CTA → launch-static-to-api页面20-skill-courses.html · 技能提升 · 1.1 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页唯一 · GET /courses → 渲染 list_courses · 原型 mock · 完整见 ⑥
一句话:按简历缺口推荐课程;空列表须给用户人话提示(无匹配 / 全站无课两种);点课进入详情→播放闭环。
GET /courses · 按 empty_reason 切空态 · 详 ⑥published_count · 详 ⑥btn_nav_back · 优先 history.back() · fallback 23-assistant-tab.html · index 机模 data-embed-back="shell"page_titlecopy_courses_introlist_coursescopy_courses_footer21-course-detail.html · 本页无贴底 Tabstate_courses_emptycopy_courses_empty_titlecopy_courses_empty_hintbtn_courses_go_f2 · 链 03-f2-exam.htmlbtn_courses_empty_back · history.back()items 为空 · 详 ⑥ empty_reason=no_gap_matchstate_courses_hiddencopy_courses_hidden_title · 不上屏「已发布/CMS」copy_courses_hidden_hintbtn_courses_go_home · 链 02-home.htmlpublished_count=0 · 正常应隐藏助手/能力中心入口(PRD Q8)· 深链误入才见本态 · 详 ⑥GET /courses(本页唯一)说明:列表/空态均由本接口驱动;原型 Tab 演示三态(有课/暂无匹配/全站无课)。课程均为在线视频(无图文/练习章节)。上线 B 端 CMS 维护 · 响应渲染 list_courses 或切换空态容器。替换清单 → dev-notes · 静态 mock → API。
onLoad · 助手/能力中心/职业规划出口进入gap= 简历缺口标签 · 服务端按缺口过滤推荐published_count=0 → C 端不展示技能/课程入口(PRD Q8)· 详 ④items[] → list_courses 逐行(非空时展示 ②)published_count(number)→ 全站已发布课程总数 · 与 items 区分empty_reason(enum,items 为空时必返)→ 切空态:
no_gap_match → state_courses_empty(见 ③)none_published → state_courses_hidden(见 ④)items[].id → 点行进 21-course-detail.html?course_id=items[].title · chapter_count · format · gap_label · cover_url · recommended → 行 UI · 同前{ "published_count": 3, "items": [{ "id": "c1", "title": "Excel 数据分析入门", "chapter_count": 3, "format": "video", "gap_label": "数据分析", "recommended": true }, { "id": "c2", "title": "Python 自动化小项目", "chapter_count": 2, "format": "video" }, { "id": "c3", "title": "用户增长实战清单", "chapter_count": 1, "format": "video" }] }{ "published_count": 5, "items": [], "empty_reason": "no_gap_match" }{ "published_count": 0, "items": [], "empty_reason": "none_published" }items 空且缺 empty_reason → 前端兜底 state_courses_emptyvideo(B 端上传 mp4 · C 端播放页)tile_skill_courses · 能力中心 row_unlock_skill_courses · 首页已导出态 tile_skill_courses · 职业规划 link_career_to_coursespublished_count=0 时上述入口均不展示 · 详 14/23/02/19 ⑥ · 误入本页 → ④ 全站无课21-course-detail.html?course_id= · 经详情 → 38-course-play.html · 空态「去优化简历」→ F2 · 「返回首页」→ 02empty_reason 两种空态分支 + JSON 示例。20-skill-courses.html · 三 Tab 可切换(有课/暂无匹配/全站无课)。21-course-detail.html?course_id=c1。38-course-play.html · 播放器非空。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10courses_view · course_row_click页面21-course-detail.html · 课程详情 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页唯一 · GET /courses/{id} → 目录/阅读区 · 原型 mock · 完整见 ⑥
一句话:单门课程封面、简介与章节目录;可学章节均为视频,点击进入 38-course-play 播放。
GET /courses/{id}course_id · _course-prototype.js 跳转播放 · 详 ⑥38 playback 接口btn_nav_back · 优先 history.back() · fallback 20-skill-courses.htmlpage_titlecopy_course_video_hintlist_course_chapters38-course-play.html?chapter_id=ch1btn_start_course · 进 38-course-play.html 首章(chapter_id=ch1)单课详情 · 章节锁定/解锁由 CMS 控制。
GET /courses/{id}(本页唯一)说明:封面、简介、章节目录来自 GET · 章节 type 仅 video。视频由 B 端 CMS 上传维护。原型 HTML/JS mock;上线渲染目录与播放页。替换清单 → dev-notes · 静态 mock → API。
① GET /courses/{id} · 进页拉取课程与章节
20-skill-courses 进详情 · URL course_id · 无 id 回列表title → page_titlecover_url → 顶图summary · video_hint → 信息卡chapters[] → list_course_chapters · id · locked · type(video)chapters[0].id → btn_start_course 默认首章播放{ "id": "c1", "chapters": [{ "id": "ch1", "type": "video", "locked": false }, { "id": "ch2", "type": "video", "locked": true }, { "id": "ch3", "type": "video", "locked": false, "title": "第3课 活动复盘小结" }] }20-skill-courses.html 列表行 · 带 course_id38-course-play.html · btn_start_course 或可播章节 · 返回列表经顶栏badge-v11 或可见「1.1」版本角标 · 能力分期见 ⑨ / feature flag。20 点课 → 本页 → 点「开始学习」 → 38-course-play.html · 播放器区非空。GET /courses/{id} 与章节字段。38-course-play · 播放器非空。?course_id=c1&chapter_id=ch3 进页自动展开阅读区。20-skill-courses.html。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10course_detail_view · course_start_course-prototype.js · 静态 mp4 · 上线 playback · 链 launch-static-to-api · 仅 video 章节页面22-growth-diary.html · 成长陪伴 · 1.1 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页共 2 个 · POST /diaries · GET /diaries/weekly-summary · 原型 mock · 完整见 ⑥
一句话:求职情绪日记与 AI 自知报告,非心理咨询。
btn_nav_back · 优先 history.back() · fallback 23-assistant-tab.html · index 机模 data-embed-back="shell" 回当前 Tab 壳层page_titleinput_diary
maxlength="2000" · 右下角 「0 / 2000」 → label_diary_counter · 实时计数trim 首尾空白 · 不解析 HTML/富文本is-invalid 红框 · 无 Toast · 不调 APItextarea · 真机可唤起输入法(见 ⑧)link_diary_privacy · 跳 39-legal-doc.html?doc=privacydisplay_weekly_reportlink_emotion_d · 29-emotion-d.htmlbtn_save_diary
POST /diaries 成功后再 GET /diaries/weekly-summary 刷新 display_weekly_report · 详 ⑥说明:日记保存与周报摘要;原型 mock。上线渲染 input_diary · display_weekly_report。替换清单 → dev-notes · 静态 mock → API。
POST /diaries · btn_save_diary · body { "content": "…" } · content 1~2000 字 · trim 后非空GET /diaries/weekly-summary · 进页/保存成功后 · → display_weekly_report29-emotion-d.html · 返回能力中心POST /diaries 与周报 GET。22-growth-diary.html · 三 Tab 可切换。39-legal-doc.html?doc=privacy。29-emotion-d.html。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10diary_save · diary_report_view · diary_to_emotion_diary-prototype.js 保存 mock · 正式上线 接 API → launch-static-to-api · 字段真源 dev-notes · 成长陪伴页面26-orders.html · 我的订单 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页唯一 · GET /pay/orders → list_order_items · 原型 HTML 写死一行 mock · 完整字段见 ⑥
一句话:展示能量点充值订单记录;需退款或发票说明见「设置」。
GET /pay/orders → list_order_items · 详 ⑥11-settings.html · 本页不上屏btn_nav_back · 优先 history.back() · fallback 10-me.html · index 机模 data-embed-back="shell" 回当前 Tab 壳层page_titlelist_order_items · 渲染 GET /pay/orders · 详 ⑥state_empty_ordersbtn_go_pay · 链 09-pay.html沉浸列表页 · 空态 CTA 居中。
从「我的」进入 · 返回回我的。
GET /pay/orders(本页唯一)说明:左侧每一行订单均来自本接口;原型 HTML 写死一行「体验包 ¥6.9」mock。
items[] → list_order_items
id · 订单号 · 退款页带入product_name · 如「体验包」amount · 如 6.9 · 展示 ¥status · paid / refunded / pendingpoints_granted · 如 +50 能量点paid_at · ISO → 「2026-05-20 · 已支付」{ "items": [{ "id": "wx_882…", "product_name": "体验包", "amount": 6.9, "status": "paid", "points_granted": 50, "paid_at": "2026-05-20T…" }] }items 空 → state_empty_orders09-pay.html · 退款 → 设置 → 34-refund.htmlGET /pay/orders 字段与空态。26-orders.html · 有订单/空态 Tab 可切换。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10orders_view · orders_go_paylink_refund → 34-refund.html;发票说明见设置 copy_no_invoice_note(与 PRD Q1 一致 · 人工审批)页面28-f8-voice.html · 语音电梯演讲 · F8 · 1.1 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页共 2 步 · ASR 转写 → display_voice_transcript · 通义点评 → display_voice_feedback · 详 ⑥
一句话:60 秒自我介绍录音 → 先展示转写原文再 AI 点评,帮助用户对照「说了什么」。
bar_f8_record · 详 ⑥copy_f8_disclaimer「非录用承诺」· 麦克风按需授权(见 ② 点击规则 · ⑨ 技术栈)btn_nav_back · 优先 history.back() · fallback 23-assistant-tab.html · index 机模 data-embed-back="shell" 回当前 Tab 壳层page_titlecopy_f8_promptcopy_f8_subhint · 后台可配bar_f8_record(待录音/录音中显示 · 点评态隐藏)
btn_hold_record
wx.getSetting · scope.record → 未授权 wx.authorize;用户曾拒绝 → wx.showModal 说明用途 + wx.openSetting 引导开启 · 未授权则不开始录音navigator.mediaDevices.getUserMedia({ audio: true }) · 拒绝 → Toast「需要麦克风才能演练」+ 可选说明链隐私政策 · 不 silent failf8_record_startf8_mic_deniedcopy_hold_hintcopy_recording_labeldisplay_recording_timer · 容器 state_recording
copy_recording_seconds · 原型 mock 42copy_recording_hintbar_f8_record · 按钮文案可切「松开结束」(上线)max-height 可滚
display_voice_transcript · 冷灰调(左灰条 + 灰底 + 浅灰字)· 标题 → copy_transcript_label · 正文 → copy_voice_transcriptdisplay_voice_feedback · 暖橙调(左橙条 + 浅橙底 + 暖白字)· 标题 → copy_feedback_label · 正文 → copy_voice_feedbackcopy_f8_disclaimerbar_f8_recordbar_f8_record 使用 fixed-bottom-bar · 对齐微信/WhatsApp 语音习惯 · 点评态不展示。
说明:无列表类 REST;录音上传 → 讯飞 ASR → 通义点评。原型静态三 Tab;上线按序渲染转写卡与点评卡。
transcript(string)→ copy_voice_transcriptfeedback(string)→ display_voice_feedbackcopy_f8_prompt 副文案区(后台可配)tile_f8_voice · 能力中心 F828-f8-voice.html · 三态 Tab 可切换。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10f8_record_start · f8_record_done · f8_transcript_view · f8_feedback_view · f8_mic_denied · f8_mic_open_settings页面29-emotion-d.html · 情绪倾听 · D · 1.1 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页唯一 · POST /ai/emotion/reply → list_chat_messages · 原型 mock · 完整见 ⑥
一句话:24h 情绪对话陪伴(1.1 文本档),非心理咨询/医疗,可链表情分析。
btn_nav_back · 优先 history.back() · fallback 23-assistant-tab.html · index 机模 data-embed-back="shell" 回当前 Tab 壳层page_titlecopy_disclaimer_medicalbar_emotion_mode(分期 ① 文本 · ②③ 视频 · 见 ⑨)
chip_emotion_text_mode · 只展示chip_video_companion_soon · 上线后改为扣能量点入口(后台可配文案/点数)list_chat_messages · 贴 composer 上方 · 发送 mock 追加 chat_usercopy_emotion_greeting · chat_emotion_openchat_userchat_emotionlink_emoji_capture · 链 36-emoji-capture.htmlinput_emotion · maxlength="1000" · enterkeyhint="send"
_chat-composer.jstextContent(不执行脚本)POST /ai/emotion/replybtn_send_emotionvisualViewport 顶起 composerPOST /ai/emotion/reply(本页唯一)说明:D 模块对话;原型由 composer mock。上线每轮发送走本接口,非心理咨询承诺见 ② 免责声明。替换清单 → dev-notes · 静态 mock → API。
session_id · message(1~1000 字 · trim 后非空)list_chat_messages · 危机词 → 转介模板(后台可配)context 时返回开放问句(对齐 copy_emotion_greeting)· 有 context.snippet(日记/E5)时可个性化 · 禁止无依据假定拒信36-emoji-capture.html · 继续对话 · 返回POST /ai/emotion/reply。29-emotion-d.html · 见完整对话流。36-emoji-capture.html。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10emotion_d_view · emotion_send · emotion_to_emoji页面30-e5-rescue.html · 挫败急救包 · E5 · 1.1 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页共 2 个 · GET /rescue-pack · POST /rescue-pack/debrief · 原型读 F6 + 通用清单 · 完整见 ⑥
一句话:F6 标记受挫后,先收集面试/投递反馈,再结合 JD 与简历生成 72h 行动清单(非心理咨询)。
_e5-prototype.js 读 F6 · 详 ⑥ 分档btn_nav_back · 优先 history.back() · fallback 13-f6-apply.htmlpage_titlecopy_e5_introcopy_rescue_context · label_rescue_company · label_rescue_rolesessionStorage proto_f6_applications_v1 · query application_id(F6 链接带入)· 无数据时用 HTML 静态兜底block_e5_debriefcopy_e5_debrief_hintinput_e5_debrief
maxlength="2000" · 右下角 「0 / 2000」 → label_e5_debrief_counteris-invalid 红框 · 无 Toast · 不调 APIlist_rescue_actions)btn_submit_debriefcopy_e5_fallback_labellist_rescue_actions · 无 JD 版(不假定实习 bullet / 已对齐 JD)
btn_go_jd · 链 05-jd-paste.htmllink_emotion_d · 链 29-emotion-d.html说明:F6 受挫记录 + 用户 debrief +(可选)JD/简历 → 分档生成清单;原型由 _e5-prototype.js 读 F6 · 展示档 A 通用 3 条 · debrief 仅 Toast。替换清单 → dev-notes · 静态 mock → API。
GET /rescue-pack?application_id= · 进页 · 渲染 copy_rescue_context · list_rescue_actions(按档)POST /rescue-pack/debrief · btn_submit_debrief · body { application_id, debrief_text, jd_id? } → 返回 actions[] · 替换通用清单05-jd-paste.htmllink_e5_rescue?application_id=05-jd-paste.html · 29-emotion-d.html · 返回 F630-e5-rescue.html · 见 debrief 区 + 通用清单 + 双 CTA。05-jd-paste.html · 点「需要聊聊」→ 情绪倾听。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10e5_rescue_view · e5_debrief_submit · e5_action_check · e5_go_jd · e5_to_emotion页面31-g4-shortvideo.html · 短视频落地 · G4 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页唯一 · GET /channels/g4(同 G2 渠道模型)· 原型 mock · 完整见 ⑥
一句话:抖音等短视频挂载落地页占位,运营配内容 + 埋点归因。
copy_g4_channel · UTM 仅 ⑥⑨copy_g4_subtitledisplay_video_placeholder · 运营替换真实封面/视频btn_g4_cta · 链 18-g2-channel.html 或登录外链落地 · 全屏内容 + home indicator。
GET /channels/g4(本页唯一)说明:G4 渠道文案/占位视频/CTA 来自 CMS;原型写死。与 18-g2-channel 同渠道 API 模型,channel_id=g4。替换清单 → dev-notes · 静态 mock → API。
copy_g4_channel · display_video_placeholder · btn_g4_cta18-g2-channel.html · 登录领取新人点GET /channels/g4。31-g4-shortvideo.html · 见 G4 占位与 CTA。18-g2-channel.html 或登录链可达。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10app_launch · g4_cta_click(附 utm_source)页面32-e6-checklist.html · 导出前检查 · E6 · P1 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页唯一 · POST /resumes/{id}/export-check → list_export_checks · 原型 mock · 完整见 ⑥
一句话:导出 PDF 前规则+轻量 AI 检查,降低后悔率。
btn_nav_back · 优先 history.back() · fallback 08-export-pdf.htmlpage_titlelist_export_checksbtn_export_anyway · 链 08-export-pdf.htmlbtn_back_edit · 链 04-f4-draft.html单屏检查结果 · 与 F4/E2 mock 简历齐套(上线动态计算)。
POST /resumes/{id}/export-check(本页唯一)说明:规则检查列表来自本接口;原型 mock 勾选项。上线渲染 list_export_checks · btn_export_anyway 仍链 08。替换清单 → dev-notes · 静态 mock → API。
resume_idchecks[] · 每项 label · passed · severitybtn_export_anyway · btn_back_edit → F433-resume-preview.html · 08-export-pdf.html 导出前POST /resumes/{{id}}/export-check。32-e6-checklist.html · 见通过/警告/待联调图标。08-export-pdf.html。04-f4-draft.html。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10e6_checklist_view · e6_export_anyway · e6_back_edit页面34-refund.html · 退款申请 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页唯一 · POST /pay/refunds · 提交 btn_submit_refund · 完整字段见 ⑥
一句话:选择可退订单与原因提交退款,后台人工审批原路退回。
POST /pay/refunds · 详 ⑥btn_nav_back · 优先 history.back() · fallback 11-settings.htmlpage_titlecopy_refund_hintform_refund_applycard_refund_order · mock 来自订单列表select_refund_reason(未使用能量点/服务不满意/重复支付/其他)input_refund_note
maxlength="500" · 可不填note 字段提交btn_submit_refund · 调 POST /pay/refundsstate_refund_pendingstate_refund_rejectedstate_refund_approvedPOST /pay/refunds(本页唯一)说明:用户选定订单与原因后提交;审批结果由后台更新,前端轮询或推送切换 #pending/#rejected/#approved。
btn_submit_refund · 原因必选order_id · 来自 card_refund_orderreason · select_refund_reason enumnote · input_refund_note 可选{ "refund_id": "…", "status": "pending" } → 切 state_refund_pendingstate_refund_rejected + 运营理由POST /pay/refunds 请求体与状态流转。26-orders.html mock 对齐。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10refund_apply_view · refund_submit · refund_result(附 status)_refund-prototype.js · 正式上线 → launch-static-to-api页面35-resume-versions.html · 简历版本对比 F5(P1)· 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页共 2 个 · GET /resumes/{id}/versions · POST /resumes/{id}/restore · 原型静态 mock · 完整见 ⑥
一句话:同一份简历的多个历史版本左右对照,支持预览当前版、回滚到旧版(P1)。
GET /resumes/{id}/versions · POST /resumes/{id}/restore · dev-notes · F5btn_nav_back
15-resume-list.html 或 33-resume-preview.htmlpage_titlebadge_f5copy_version_policylist_version_pickerbtn_version_left · btn_version_rightbtn_version_rightpanel_version_diffcompare_col_left · label_version_left「v2」· diff_content_left「负责公众号排期」(删除线示意)label_version_right「v3 当前」· diff_content_right「使用 Excel 复盘 UV/转化,参与用户增长执行」copy_version_hintstate_single_version · copy_single_hint · btn_go_continue → F4state_versions_loadingstate_versions_empty · btn_empty_create → F2bar_f5_actionsbtn_restore_version · 二次确认 · Toast「已回滚」(原型 mock)btn_preview_current → 33-resume-preview.html说明:版本 chip 与双栏 diff 为静态 mock;上线由下列接口渲染 list_version_picker · panel_version_diff。替换清单 → dev-notes · 静态 mock → API。
resume_id · 从列表/预览「版本」进入versions[] → chip + diff · 字段 version_id · label · is_current · diff_summary{ "versions": [{ "version_id": "v2", "label": "腾讯 JD · v2" }, { "version_id": "v3", "label": "秋招版 · v3 当前", "is_current": true }] }state_single_version · 0 条 → state_versions_empty · 最多 15 条 FIFObtn_restore_version 且用户确认 HUD{ "version_id": "v2" }35-resume-versions.html 或 index 研发目录 · 勿从列表/预览链入35-resume-versions.html(P1 原型 · 无用户路径入口)。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10version_compare_view · version_restore_click · version_restore_confirm_f5-prototype.js · 正式上线 → launch-static-to-api字段/API 见 dev-notes · F5;UX 见 mkq产品规则 · UX。
开发说明 · 表情分析页面36-emoji-capture.html · 表情分析 · 表情分析 · 1.1 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页唯一 · POST /ai/emoji/analyze → display_emoji_result · 原型 mock · 完整见 ⑥
一句话:摄像头采集表情,有效帧 ≥70%、时长 ≥15s,腾讯云分析后给建议。
btn_nav_back · 优先 history.back() · fallback 29-emotion-d.htmlpage_titlecopy_emoji_hint · 不上屏腾讯云/§9copy_emoji_camera_hint
scope.camera)
openSetting · 不羞辱 · 埋点 emoji_cam_denieddisplay_capture_previewbtn_start_capture · 点击后 mock 权限 + 约 1.5s 切完成态state_low_frame_ratebtn_retry_capturedisplay_emoji_resultbtn_go_f7 · 链 17-f7-interview.html采集态全屏取景 · 完成态 CTA 随内容。
POST /ai/emoji/analyze(本页唯一)说明:摄像头帧上传分析;原型 mock。上线渲染 display_emoji_result · 低帧率 state_low_frame_rate。供应商细节仅 ⑨。替换清单 → dev-notes · 静态 mock → API。
scope.cameraemotions[] · summary → 结果区17-f7-interview.html · 返回情绪页copy_emoji_camera_hint36-emoji-capture.html · 三态 Tab 可切换。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10emoji_capture_start · emoji_capture_fail · emoji_capture_done · emoji_to_f7_emoji-prototype.js mock · 无真摄像头 · 正式上线 → launch-static-to-api页面37-system-status.html · 系统状态 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页唯一 · GET /system/status → 三态文案 · 原型 Tab 演示 · 完整见 ⑥
一句话:全屏异常态演示:弱网/离线、服务繁忙、系统维护。
state_offlinecopy_offline_hintbtn_retry02-home.htmlstate_busycopy_busy_hint · §10.1.3 仅 ⑨state_maintain全局拦截/fullscreen · 原型用 Tab 切换三态演示。
GET /system/status(本页唯一)说明:离线/繁忙/维护文案来自本接口 + 客户端网络检测;原型 Tab 演示 mock。上线渲染 state_offline · state_busy · state_maintain 及 hint。替换清单 → dev-notes · 静态 mock → API。
status(offline/busy/maintain)· message → copy_*_hint · retry_after 可选GET /system/status 与三态 Tab 对照。37-system-status.html · 三 Tab 全屏态可切换。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10system_offline_view · system_busy_view · system_retry页面40-org-bind.html · 学校/机构额度 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页共 2 个 · GET /user/org · POST /user/org/bind · 完整见 ⑥
一句话:学生/合作方用户输入机构码绑定学校额度;绑定后 AI 能力优先消耗机构额度(与 B 端机构管理、用户 360°「机构绑定」只读区联动)。
GET /admin/users/{id}/growth 同步展示03-user-detail.html「增长与绑定 → 机构绑定」btn_nav_back · fallback 11-settings.html · index 机模 data-embed-back="shell"page_titlecopy_org_bind_hintpanel_org_unbound)list_org_bind_steps · 文案与 B 端运维说明逐字一致input_org_code
maxlength="32" · 提交前 trim · 转大写is-invalid 红框 · 无羞辱 Toast · 不调 APIpanel_org_bound · 失败见 ⑥copy_org_bind_demo_hint · 仅原型 · 正式上线隐藏或换运营文案panel_org_bound)display_org_name · 响应 org.namedisplay_org_code · org.codedisplay_org_quota · org.quota_used / org.quota_totalcopy_org_bound_at · org.bound_atcopy_org_bound_notebtn_bind_org · 已绑定态隐藏底栏设置 11-settings.html · link_org_bind「学校/机构额度」→ 本页 · 详 ⑦
说明:原型 _org-bind-mock.js · sessionStorage · 上线替换 · 清单 → dev-notes · 静态 mock → API
① GET /user/org · 进页 / 绑定成功后刷新
{ "bound": false, "org": null } · 已绑:org 含 code · name · bound_at · quota_used · quota_totalpanel_org_unbound 与底栏② POST /user/org/bind · 点 btn_bind_org
{ "org_code": "ORG-SH-001" } · trim · 大写 · 1~32 字GET /admin/users/{id}/growth · org 字段与本响应一致 · 机构主数据 GET /admin/orgs11-settings.html · link_org_bind · 我的 Tab → 设置03-user-detail.html · Tab「增长与绑定」· 机构绑定区块ORG-SH-001 → Toast「绑定成功」→ 见机构名与额度 · 底栏消失ORG-WH-004 → Toast「该机构已停用…」_org-bind-mock.js · 演示码仅 file:// · ⑨ 不上屏 PRD 编号copy_org_bind_demo_hint · 渠道深链自动带码为 P1 扩展12-org-list.html · 1.0 验后台 · 无试点校页面38-course-play.html · 单节视频播放 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页唯一 · GET /courses/{course_id}/chapters/{chapter_id}/playback → display_course_player · 原型 mock · 完整见 ⑥
一句话:单节课程视频全屏播放;上线用腾讯云点播 TCPlayer;后台 CMS 上传维护 file_id。
course_id · chapter_id · 详 ⑥app_id · file_id · psign · 详 ⑥btn_nav_back · 优先 history.back() · fallback 21-course-detail.html?course_id=page_titledisplay_course_player · 16:9 黑底 · 上线 TCPlayer 挂载点<video> 兜底 · 路径 mp4/22c68da31c79a48861af6d896553f8ce.mp4 · JS COURSE_MOCK_VIDEO.protoSrc · TCPlayer 同路径演示TCPlayer + playback 接口 tcplayer.file_id / psign · 视频源来自后台 CMS 上传copy_lesson_title · 来自 playback titlecopy_lesson_meta · duration · typecopy_course_play_hint播放即主任务 · 返回详情继续目录。
单节播放 · 锁定章节不可从详情进入。
GET /courses/{course_id}/chapters/{chapter_id}/playback(本页唯一)说明:播放器凭证与标题来自本接口;视频文件由 B 端 CMS 上传至腾讯云点播。原型用仓库内静态 mp4 演示播放效果;上线由本接口返回 tcplayer.* 渲染 display_course_player。替换清单 → dev-notes · 静态 mock → API。
21-course-detail 点「开始学习」或可播章节 · 进页带 course_id · chapter_idlocked=true → 403 · 回详情 Toasttitle → copy_lesson_titleduration · type → copy_lesson_metatcplayer.app_id · tcplayer.file_id · tcplayer.psign → 初始化 TCPlayer{ "title": "第1课 透视表快速上手", "duration": "12:30", "type": "video", "tcplayer": { "app_id": "…", "file_id": "…", "psign": "…" } }21-course-detail.html · btn_start_course 或 list_course_chapters 可播行20-skill-courses → 点课 → 21 → 点「开始学习」 → 进入本页 · 播放器区非空(可播 mp4 · TCPlayer)。tcplayer.* 字段。21-course-detail.html。chapter_id)。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10course_play_start · course_play_completemp4/22c68da31c79a48861af6d896553f8ce.mp4 · _course-prototype.js · 正式上线 关 PROTO_COURSE_USE_STATIC_MOCK 接 playback · 链 launch-static-to-api页面01-landing-login.html · 未登录落地 / 微信登录 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口;机模上方 Tab 切换态时,说明滚到对应章节。
展示顺序(按角色 · 章节号固定)
接口本页主接口 · POST /auth/wechat · H5 站外另需 GET /auth/wechat/poll · 完整见下方 ⑥
一句话:未登录用户看价值主张 → 微信一键登录 → 进入产品首页;H5 站外可走扫码。
POST /auth/wechat · 详 ⑥ · dev-notes · 登录copy_ai_disclaimerhero_titlehero_subtitlehero_imagelist_value_propsbar_login_actions
btn_wechat_login
02-home.html;上线 wx.login / OAuth → POST /auth/wechatcopy_login_consent
link_user_agreement → 39-legal-doc.html?doc=user-agreement · link_privacy → ?doc=privacycopy_unauth_hintstate_auth_loading / copy_auth_loadingcopy_auth_loading_sub02-home.htmlstate_auth_error / copy_auth_error_titlecopy_auth_error_bodybtn_retry_auth · 原型切回加载态copy_scan_hintpage_title_scandisplay_qr_placeholdercopy_qr_ttlqr_login_refresh
state_unauth_block / copy_unauth_block_titlecopy_unauth_block_subbtn_go_login · 回落地页POST /auth/wechat(本页主接口 · H5 扫码见②)说明:默认落地 / 小程序 / H5 微信内均走本接口;站外扫码态另需轮询接口。原型由 _landing-prototype.js mock 加载后跳首页;上线接真实授权。替换清单 → dev-notes · 静态 mock → API。
① POST /auth/wechat · 微信一键登录 · 未登录可调用 · 正式上线
btn_wechat_login → wx.login 取 code → 提交本接口code → 提交本接口code(string,必填)· 微信临时登录凭证channel(string,可选)· 渠道归因,与落地 UTM 对齐invite_code(string,可选)· 邀请码,与邀请有礼页对齐token / session_key · 写入客户端会话user.id · nickname · avatar_url(可选)is_new_user(boolean)· 新用户可走 onboarding02-home.html#error · btn_retry_authcode 无效 / 过期 → Toast + 重试② GET /auth/wechat/poll · H5 站外扫码登录(#scan 态 · 正式上线 待定)
#scan 展示二维码后轮询;display_qr_placeholder 编码 scene_idqr_login_refresh 刷新 scene · 120s 超时 Toast「扫码超时,请刷新后重试」02-home.html;拒绝授权 → #error 可重试state-panel.active;换态关说明 · 再开滚到 data-spec-state 对应章节POST /auth/wechat 何时调、请求/响应字段、H5 扫码轮询与失败边界。01-landing-login.html,默认只见落地页;微信登录按钮贴底,中间内容可滚动。02-home.html(原型)。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10landing_view · auth_wechat_click · auth_wechat_success · auth_wechat_fail · qr_login_refreshmodal_agreement_ack(F2)字段/API 见 dev-notes · 登录。
开发说明 · 留言板页面16-feedback.html · 留言板 · 验收见 ⑧ · 分工见 ⓪
阅读方式:每条先写界面上是什么,再写元素 ID 与接口。
展示顺序(按角色 · 章节号固定)
接口本页共 2 个 · GET /feedback · POST /feedback · 原型 mock · 完整见 ⑥
一句话:用户投诉与建议提交,后台人工回复后可在本页查看。
btn_nav_back · 优先 history.back() · fallback 10-me.html · index 机模 data-embed-back="shell" 回当前 Tab 壳层page_titlecopy_feedback_hintinput_feedback
maxlength="1000" · 右下角 「0 / 1000」 → label_feedback_countertrim · 不解析 HTMLis-invalid 红框 · 无 Toastbtn_upload_feedback_image
input_feedback_imagelist_feedback_attachments · 删除 → btn_remove_feedback_attachmentcopy_feedback_upload_hint(有图后变为「已添加 N 张…」)zone_feedback_upload(空提交时与输入框一并红框)state_feedback_replieddisplay_feedback_reply_images(上线由接口 image_urls[] 渲染)btn_submit_feedback原型用顶栏外 Tab 切换提交/已回复演示态。
说明:提交与已回复态来自本组接口;原型未真上传。上线渲染 input_feedback · list_feedback_attachments · state_feedback_replied。替换 → launch-static-to-api。
① GET /feedback · 最近一条
reply → 展示 state_feedback_replied · 原文 + image_urls[] → display_feedback_reply_images② POST /feedback · 提交
btn_submit_feedback{ "content": "…", "attachment_ids": ["…"] }content:0~1000 字 · trim · 与附件至少一项非空attachment_ids:0~5 个 · 图片已压缩上传 OSS 后的 IDGET /feedback · POST /feedback。16-feedback.html · 提交/已回复 Tab 可切换。app-image/ICON-CATALOG.md · 全站通用 §7 · 上传 §8 · 品牌 §9 · 本页见 §10 索引表app-image/ICON-CATALOG.md · 状态栏 §11 · 增长/分享 §12 · 表单/附件 §13 · 法务 §14 · 订单/空态 §15 · 媒体/语音 §16 · 本页见 §10app-image/ICON-CATALOG.md · F4 模块 §18 · 状态徽章 §19 · 弹窗/加载 §20 · 联系打码 §21 · 折叠/更多 §22 · 文件类型 §23 · 分享装饰 §24 · 账号 §25 · 本页见 §10feedback_view · feedback_submit_upload-compress.js · 小程序上线前须 compressImage 对齐参数_feedback-prototype.js · 正式上线 → launch-static-to-apiP1/P2 C 端缺口已补至 33~37。仍缺:B-admin 后台、真实路由栈与支付唤起。详见 GAPS.md。