3.4 KiB
3.4 KiB
帮助与反馈入口案例(2026-05-08)
本案例来自 Genarrative “我的”页签新增反馈入口与独立反馈页实现。
目标
- 在“我的”页签新增“反馈”快捷入口。
- 点击后进入独立路由
/profile/feedback。 - 页面按移动端参考图实现“帮助与反馈”表单:问题描述、上传凭证、联系电话、提交、查看反馈与投诉记录。
关键文件
docs/prd/PROFILE_FEEDBACK_ENTRY_PRD_2026-05-08.mdsrc/components/platform-entry/platformEntryTypes.tssrc/routing/appPageRoutes.tssrc/components/platform-entry/PlatformFeedbackView.tsxsrc/components/rpg-entry/RpgEntryHomeView.tsxsrc/components/platform-entry/PlatformEntryFlowShellImpl.tsxsrc/routing/appPageRoutes.test.tssrc/components/platform-entry/PlatformFeedbackView.test.tsx
落地顺序
- 先补 PRD,避免从参考图直接猜代码细节。
- 在
SelectionStage中新增'profile-feedback'。 - 在
STAGE_ROUTE_ENTRIES添加:['profile-feedback', '/profile/feedback']
- 新建
PlatformFeedbackView:onBack: () => voidonSubmit?: (payload) => void | Promise<void>- 内部维护描述、联系电话、上传图片预览、错误态、成功态。
- 首版没有后端接口时,
onSubmit为后续 API 接入点。
- 在
RpgEntryHomeViewProps添加onOpenFeedback?: () => void。 - 在“我的”页签快捷入口区新增
ProfileShortcutButton:label="反馈"subLabel="帮助与反馈"onClick={onOpenFeedback}
- 在
PlatformEntryFlowShellImpl:- import
PlatformFeedbackView - 新增
openProfileFeedback - 未登录则
authUi?.openLoginModal() - 已登录则
setPlatformTab('profile')+setSelectionStage('profile-feedback') - 直达阶段时
useEffect同步profiletab - 渲染
selectionStage === 'profile-feedback'的独立<motion.div>
- import
- 增加测试:
- 路由双向解析
- 页面字段渲染
- 描述低于 10 字不提交
- 提交时 trim payload
- 顶部返回按钮调用
onBack
UI 参考要点
- 移动端优先,页面最大宽度约 30rem。
- 浅灰背景,白色圆角卡片。
- 顶部标题:
帮助与反馈。 - 分区标题:
反馈问题。 - 问题描述 placeholder:提示填写 10 字以上,勿填身份证号等隐私。
- 字数计数:
0/200。 - 上传凭证:最多四张,上传占位显示
上传凭证和(最多四张)。 - 联系电话:选填。
- 主按钮:蓝色圆角
提交。 - 底部链接:
查看反馈与投诉记录。
验证命令
npm run check:encoding
npm run typecheck
npx vitest run src/routing/appPageRoutes.test.ts src/components/platform-entry/PlatformFeedbackView.test.tsx
# 或
npm run test -- --run src/routing/appPageRoutes.test.ts src/components/platform-entry/PlatformFeedbackView.test.tsx
已踩坑/经验
appPageRoutes.test.ts若已有历史内容,写入测试时注意不要误删旧用例;最终 commit 里出现 “insertions + deletions” 时要检查是否覆盖了既有测试。- 页面组件里的图片预览需要在移除或卸载时
URL.revokeObjectURL,避免泄漏。 - 对隐藏 file input 的测试可以先不强行覆盖,首版覆盖表单字段、校验和 payload 更稳定。
- 如果用
authUi对象作为 callback 依赖,需确认引用稳定性;现有 shell 中可接受,但复杂化时考虑拆出具体字段依赖。