Skip to content

feat(casual-ux): inline hints + advanced hide + help FAB - #10

Merged
hades217 merged 1 commit into
mainfrom
feat/casual-ux
May 16, 2026
Merged

feat(casual-ux): inline hints + advanced hide + help FAB#10
hades217 merged 1 commit into
mainfrom
feat/casual-ux

Conversation

@hades217

Copy link
Copy Markdown

Summary

实施 `docs/tasks/casual-ux-prd.md`(PR #9)的 5 天工程方案。让 casual(非技术)用户在每个配置界面都看到"白话解释",同时对 dev/team/admin 零打扰

三层改造

Foundation

  • `hooks/use-casual.ts`:`useIsCasual()` —— 检测当前 persona 是否 casual
  • `components/casual-gates.tsx`:`` + ``
  • `components/ui/field-hint.tsx`:casual 用户 inline 显示 💡 提示,dev 用户 hover ? 才看到

应用到 4 个高频配置面

页面 Casual 看到 Dev / 管理员看到
/welcome wizard persona / brand / client 卡片描述比之前详细 2-3 倍 同 casual(一次性页面,详细对所有人都好)
/keys Simple 6 卡片 每张卡多一行 "💡 配 X 客户端用" 提示 不显示这行
/onboarding 教程页 Base URL / Model 字段下方常驻"粘到 X 字段、别加斜杠"提示 同(hint 一直显示)
/wallet 充值 隐藏:自定义金额输入框、兑换码输入框;只剩预设档位 + 支付方式 完整字段

全局求助 FAB

  • 右下角浮窗,所有 _authenticated 页面
  • 4 个入口:📺 视频教程 / 💬 微信群 / 📷 图文教程 / ✉️ 客服邮箱
  • URL 全部 admin 后台可配(在 System Settings → Operations 添加 `HelpVideoUrl`, `HelpWeChatQR`, `HelpWeChatID`, `HelpSupportEmail` 4 个 option),未配置自动 fallback "整理中" 占位
  • Casual 用户图标带 ❗️ 鼓动点击;点过一次后消失(localStorage)

后端改动极小

`controller/misc.go::GetStatus` 多吐 4 个 `help_*` key from `common.OptionMap`。零 schema migration

兼容性

  • 老用户(persona = 'dev' legacy fallback):完全不变,看不到 inline hint,看不到 NEW 红点
  • /wallet 自定义金额对 casual 隐藏但 dev 可见 → 不破坏现有功能
  • 视频 / 微信群 / 邮箱未配置时所有入口显示"整理中"占位 → 你 / 运营可以慢慢补,不阻塞上线

Test plan

  • `bun run typecheck` 通过
  • `bunx eslint` 通过(修了一个 setState-in-effect 警告 + 拆了 hook + components 同文件警告)
  • 用 casual persona 账号登录:右下角红点 FAB,点开看到 4 个入口(都是"整理中"因为 admin 未配 URL)
  • 改 admin 后台 `HelpVideoUrl` = `https://b23.tv/xxx\`,刷新 → FAB 第一项可点
  • /wallet:casual 用户看不到自定义金额、兑换码
  • 切到 dev persona:自定义金额、兑换码恢复显示
  • /keys Simple 6 卡片:casual 看到 "💡 配 Cherry Studio / Chatbox 用..." 一行;dev 不显示
  • /onboarding/cherry-studio:Base URL 下方 casual 看到 "💡 粘到 API 地址栏...";dev hover ? 才看到

文件

新增 (4):

  • `web/default/src/hooks/use-casual.ts`
  • `web/default/src/components/casual-gates.tsx`
  • `web/default/src/components/ui/field-hint.tsx`
  • `web/default/src/components/help-fab.tsx`

修改 (8):

  • `controller/misc.go` — GetStatus 加 4 个 help_* key
  • `web/default/src/components/layout/components/authenticated-layout.tsx` — mount HelpFab
  • `web/default/src/features/auth/types.ts` — SystemStatus 镜像 4 个 help_* field
  • `web/default/src/features/welcome/index.tsx` — persona / brand / client 描述加强
  • `web/default/src/features/keys/components/api-key-purpose-picker.tsx` — casual hint
  • `web/default/src/features/onboarding/index.tsx` — CopyField + FieldHint
  • `web/default/src/features/wallet/components/recharge-form-card.tsx` — casual 隐藏 advanced
  • `web/default/src/i18n/locales/{en,zh}.json` — 30 keys

🤖 Generated with Claude Code

Implements docs/tasks/casual-ux-prd.md. Where onboarding-prd shipped
the registration FLOW (PR #8) and persona-system (PR #3), this PR
makes every CONFIGURATION SURFACE friendly to casual (non-tech) users
without changing anything for dev/team/admin.

Foundation:
- New hooks/use-casual.ts: useIsCasual() — sugar over usePersona()
- New components/casual-gates.tsx: <HideForCasual> + <CasualOnly>
- New components/ui/field-hint.tsx: FieldHint component renders as
  inline always-visible 💡 line for casual, as ? + popover for dev

Surfaces patched:
- /welcome wizard: persona / brand / client card descriptions
  rewritten verbose-by-default (single-time post-signup screen, all
  users benefit from extra context)
- /keys Simple purpose picker: per-purpose casual hint pairing each
  purpose with the matching client (Chat ↔ Cherry Studio, Coding ↔
  Cursor, etc.) so users immediately understand "what next"
- /onboarding tutorial pages: CopyField on Base URL + Model gets
  FieldHint underneath (auto-renders inline for casual, hover for dev)
- /wallet topup: casual mode hides custom-amount input + redemption
  code section entirely (presets-only experience). Dev / admin still
  see the full surface.

Global help FAB (components/help-fab.tsx):
- Fixed bottom-right of every authenticated page
- Casual users see a pulsing rose dot until first interaction
  (localStorage flag `dr_help_seen`)
- 4 sections, all admin-configurable via /api/status:
  - help_video_url    → 3-minute tutorial video
  - help_wechat_qr    → WeChat group QR / id
  - help_wechat_id    → alternative wechat reference
  - help_support_email → mailto link
- Unset URLs render as disabled "coming soon" placeholders, never
  dead links. Operations team fills these via System Settings →
  Operations options without touching code.

Backend (controller/misc.go): GetStatus now surfaces 4 new help_*
keys reading from common.OptionMap. Zero schema changes.

i18n: 30 new en + zh keys for hints / FAB labels / welcome
descriptions.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@hades217
hades217 merged commit baaf1b6 into main May 16, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant