--- title: 会员中心 - FAQ 管理 type: design module: member page_type: list created: 2026-09-05 updated: 2026-09-05 sources: [design/c-end/c-end-tables, design/c-end/c-end-decisions, design/c-end/pages/cend-service/service-center, design/c-end/pages/cend-service/unplug-guide, design/rules/member-business-rules, design/design-conventions] priority: P1 confidence: medium --- # FAQ 管理 — 页面详细设计 > **待确认清单**(原型先行页,2026-09-05 spec 补写批次,未确认前不臆造): > - `[待确认-1]` **接口未排期(2026-09-02 决议,E5=乙)**:本页为演示 mock,`member-api` 无本页契约;启用前须先增补 [[design/api/member-api]] 契约并排期(M2.x 后置)。 > - `[待确认-2]` 分类表 `is_entry/entry_icon` 语义:c-end-tables §四 记录为「客服中心自助宫格入口(B5)」,但 **B5 已修订(2026-08-24)删除 4 宫格**,客服中心聚焦「8 高频问题直达 + FAQ 分类 + 在线客服」——`is_entry/entry_icon` 是否废弃/改义待 C 端客服中心定稿(原型仍展示两列,mock 语义为入口宫格消费)。 > - `[待确认-3]` 分类 CRUD:原型仅提供分类只读列表(mock 固定 6 类 C1-C6),分类的新增/编辑/停用未提供——如需运营自建分类,开发期补(接口一并排期)。 > - `[待确认-4]` 已解决/未解决计数(`resolved_count/unresolved_count`,C3):计数来源为 C 端 FAQ 详情「解决了我的问题/没有解决」按钮反馈,自助解决率口径 S3 ≥60%;C 端落点待定稿后回填本页口径。 > - `[待确认-5]` 品牌解锁的 `brand_name` 双维度(B6:充电枪品牌 + 车型):车型写 title/content 文案不建独立列;枪品牌字典(多斯达/永贵等)来源待定(开发期补下拉)。 ## 1. 页面定位与用户目标 - 一句话描述:本页是 C 端「客服中心 / 拔枪指引」FAQ 内容的后台维护页,按分类维护 FAQ/教程内容(分类名 + 类型 + 品牌 + is_hot + 解决率计数 + 排序 + 状态),保存即时对 C 端生效,是自助客服(FAQ)的内容管理入口。 - 用户目标/任务: - 运营/客服内容维护(主角色):新增/编辑 FAQ、置高频、删除,保障 C 端自助问题可解答(自助解决率 S3 ≥60%)。 - 值班员:查 FAQ 命中率(已解决/未解决),识别高频问题内容缺口。 - 入口路径:`/member/faq`(PC) - 所属模块:[[modules/member-prd]](页面登记于 design-index 88 页口径,P1;**后端能力规划中 E5=乙,见 §8**) - 页面类型:list(分类只读表 + FAQ 列表双区块) - 优先级:P1(原型先行,spec 2026-09-05 补写) - 设计来源(调研依据): - 行为基准 = 原型 `prototype/src/views/member/Faq.vue`(mock 演示 + 页面内「功能规划中(E5=乙)」警示条)与 `prototype/src/mock/member.ts`(faqCategories/faqs 样例,C1-C6 六类 + 9 条 FAQ)。 - 表结构 = C 端专属新增表 `member_service_faq_category` / `member_service_faq`([[design/c-end/c-end-tables]] §四/§五)。 - C 端消费侧 = 客服中心(分类 Tab/高频问题/FAQ 列表,[[design/c-end/pages/cend-service/service-center]])与拔枪指引(品牌解锁/通用教程,[[design/c-end/pages/cend-service/unplug-guide]])。 - 决策:T10 高频共用 member_service_faq(is_hot 标记)、C3 已解决/未解决按钮、S3 自助解决率、B6 品牌教程双维度([[design/c-end/c-end-decisions]] §四/§五/§七)。 ## 2. 布局与交互线框(ASCII) ### PC 端 ``` +------------------------------------------------------------------+ | ⚠ [功能规划中(E5=乙):后端接口未排期(2026-09-02 决议)…] | +------------------------------------------------------------------+ | [页面头] FAQ 管理(member_service_faq_category / member_service_faq · C 端专属表) | [+ 新增 FAQ] | +------------------------------------------------------------------+ | [分类管理(is_entry / entry_icon)— 只读] | | ID | 入口图标 | 分类名 | 是否入口 | 排序 | 状态 | | C1 | 🔌 | 无法拔枪 | 入口 | 1 | 启用 | | C2 | 💰 | 费用问题 | 入口 | 2 | 启用 | | C3-C6(订单/会员/设备异常/优惠退款)… | +------------------------------------------------------------------+ | [筛选区] 分类[下拉▼] 类型[下拉▼] 标题/正文/品牌[____] [仅高频☐] | | [查询] [重置] | +------------------------------------------------------------------+ | [表格区] | | ID | 分类 | 类型(品牌) | 标题(高频) | 已解决/未解决 | 排序 | 状态 | 操作 | | FAQ001 | 费用问题 | FAQ | 停车费怎么计算?[高频] | 128/6 | 1 | 启用 | 编辑 取消高频 删除 | | BRAND001 | 无法拔枪 | 品牌解锁(多斯达) | 多斯达枪解锁指引 | 22/2 | 1 | 启用 | 编辑 置高频 删除 | +------------------------------------------------------------------+ | [分页] | +------------------------------------------------------------------+ ``` > 分类区块无行操作(只读,[待确认-3]);FAQ 行标题列可点击进入编辑(同"编辑")。 ## 3. 功能点清单 | 编号 | 功能点 | 触发位置 | 权限码 | 行为描述 | 来源 | |------|--------|---------|--------|---------|------| | FP-01 | 列表加载 | 页面加载 | member:view | 并行加载分类(fetchFaqCategories)+ FAQ 全量(fetchFaqs),本地过滤 + 装饰分页 | 原型 Faq.vue | | FP-02 | 筛选 | 筛选区 | member:view | 分类(单选)/类型/关键词(标题/正文/品牌子串)/仅高频 组合过滤;重置清空 | 原型 Faq.vue | | FP-03 | 新增 FAQ | 头部"新增 FAQ" | member:faq:edit | 弹窗表单:分类/类型/品牌(仅类型=品牌解锁 显示)/标题/正文/排序/高频,校验后入列 | 原型 Faq.vue | | FP-04 | 编辑 FAQ | 行"编辑"/标题链接 | member:faq:edit | 回填弹窗修改,保存覆盖原行 | 原型 Faq.vue | | FP-05 | 置/取消高频 | 行"置高频"/"取消高频" | member:faq:edit | 翻转 is_hot,即时提示"C 端优先展示/已取消高频" | 原型 Faq.vue(T10) | | FP-06 | 删除 FAQ | 行"删除" | member:faq:edit | 二次确认"删除后 C 端不再展示",确认后移除 | 原型 Faq.vue | | FP-07 | 分类只读列表 | 分类管理区 | member:view | 展示分类 ID/入口图标/名称/是否入口/排序/状态([待确认-3] 无 CRUD) | 原型 Faq.vue | > 权限码:`member:faq:edit` 为扩展码(按操作域细分,开发期对齐 [[design/permission-matrix]],主码 member:edit,约定见 [[design/api/member-api]] 说明)。 ## 4. 字段定义 | 字段 | key | 类型 | 必填 | 校验规则 | 枚举/默认 | 单位 | 来源 | 说明 | |------|-----|------|------|---------|-----------|------|------|------| | FAQ ID | faqId | bigint | 是 | - | - | - | c-end-tables §五 | 主键;mock 生成 `FAQ{3 位序号}`(BRAND001/GENERAL001 等演示前缀,真实生成规则开发期定稿) | | 分类 ID | categoryId | bigint | 是 | 必选 | - | - | c-end-tables §四/§五 | FK→member_service_faq_category.category_id | | 分类名 | categoryName | string | 是 | ≤50 | C1-C6 六类(原型固定) | - | 同上 | 随 categoryId 冗余展示 | | FAQ 类型 | faqType | enum | 是 | 三选一 | 1=FAQ/2=品牌解锁/3=通用教程(原型枚举 FAQ/品牌解锁/通用教程) | - | c-end-tables §五 | 色码:FAQ 蓝/品牌解锁 橙/通用教程 绿(FAQ_TYPE_TAG_TYPE) | | 品牌 | brandName | string | 否 | ≤50 | 类型=品牌解锁 时必填(原型校验缺失,开发期补) | - | c-end-tables §五 | 枪品牌(B6),如 多斯达/永贵;车型写 title/content 文案不建列 | | 标题 | title | string | 是 | 必填 ≤50(DB ≤200) | - | - | 同上 | FAQ 问题/教程标题 | | 正文 | content | string | 是 | 必填 ≤1000 | - | - | 同上 | FAQ 答案/教程正文 | | 高频标记 | isHot | bool | 否 | - | false | - | c-end-tables §五(T10) | true=C 端"高频问题"优先展示;行内红色"高频"tag | | 已解决数 | resolvedCount | int | 否 | ≥0 | 0 | 次 | 同上(C3) | C 端"解决了我的问题"按钮累计;只读展示(绿) | | 未解决数 | unresolvedCount | int | 否 | ≥0 | 0 | 次 | 同上(C3) | C 端"没有解决"按钮累计;只读展示(红) | | 排序 | sortOrder | int | 是 | ≥1 | 新增默认末位+1 | - | c-end-tables §五 | 同分类内升序展示;高频列表亦按 sortOrder | | 状态 | status | enum | 是 | - | 1=启用/2=停用(原型默认"启用",**启停交互未提供** [待确认-3 同族]) | - | c-end-tables §五 | 停用 FAQ C 端不展示 | | 入口图标 | entryIcon | string | 否 | - | emoji/图标名 | - | c-end-tables §四 | isEntry=true 时展示于分类下拉/列表;语义见 [待确认-2] | | 是否入口 | isEntry | bool | 否 | - | false | - | c-end-tables §四 | mock 语义=C 端入口宫格消费,见 [待确认-2] | > 枚举与状态色码已登记于 `prototype/src/constants/status.ts`(FAQ_TYPES/FAQ_TYPE_TAG_TYPE);无新硬编码枚举。表结构权威见 [[design/c-end/c-end-tables]] §四/§五。 ## 5. 业务逻辑规则卡 > 本页暂无已登记的 R-member-* 规则(客服 FAQ 体系为 C 端新增能力);R-faq-* 为页面派生局部规则,待接真/规则评审时并入 [[design/rules/member-business-rules]] 登记。 | 编号 | 规则名 | 触发条件 | 业务逻辑 | 边界/异常 | 来源 | |------|--------|---------|---------|----------|------| | R-faq-01 | FAQ 内容即时生效 | 保存/删除 FAQ | FAQ 维护结果**实时**对 C 端客服中心/拔枪指引生效(无发布审批环节);删除后 C 端不再展示 | 编辑后 C 端同分类列表/详情同步刷新;缓存一致性开发期定稿 | 原型 Faq.vue 提示文案;service-center | | R-faq-02 | 高频问题标记(T10) | is_hot 置位 | is_hot=true 的 FAQ 进入 C 端客服中心"高频问题直达"(与 8 高频问题共用 member_service_faq) | 高频问题直达落地 7 项(service-center 待确认 #1,小桔文档缺第 8 项,已决策 2026-08-17);数量/排序规则待 C 端定稿 | [[design/c-end/c-end-decisions]] §七 T10;service-center | | R-faq-03 | 解决率计数(C3/S3) | C 端 FAQ 详情按钮反馈 | resolved_count/unresolved_count 由 C 端"已解决/未解决"按钮累加;自助解决率 = resolved/(resolved+unresolved),目标 S3 ≥60% | 防重复点赞(单用户单 FAQ 计 1 次)开发期定稿;计数口径见 [待确认-4] | c-end-decisions C3/S3 | | R-faq-04 | 品牌教程维度(B6) | 类型=品牌解锁 | brand_name 承载充电枪品牌;车型教程写 title/content 文案,不新增车型字段 | brand_name 为空但类型=品牌解锁 → 保存校验拦截(原型未做,开发期补 40002) | c-end-decisions B6 | ## 6. 操作流程与状态机 ### 6.0 FAQ 生命周期状态机(status,2 态) ```mermaid stateDiagram-v2 [*] --> 启用: 新增(默认) 启用 --> 停用: 运营停用(原型未提供交互,开发期补) 停用 --> 启用: 运营启用 启用 --> [*]: 删除(二次确认) ``` > is_hot 为独立布尔维度,与 status 正交:高频 FAQ 停用后 C 端不展示(高频列表同样过滤停用项)。 ### 6.1 用户故事 - US-1(运营,PC):作为运营,我想把高频投诉问题维护成 FAQ 并"置高频",以便用户在客服中心自助解决。验收:新增 FAQ 选择分类保存后列表即时出现;置高频后行内出现红色"高频"tag;提示"C 端实时生效"。 - US-2(值班员):作为值班员,我想按类型/分类筛选 FAQ 查看解决率,以便发现内容缺口。验收:筛选"品牌解锁"仅剩枪解锁教程,已解决/未解决列计数正确。 ### 6.2 测试场景(五要素:目标/前置/角色/步骤/预期) - TS-1(正常):运营新增 FAQ(分类=费用问题、类型=FAQ)→ 保存成功入列,C 端 mock 同源即时可见。 - TS-2(边界):类型=品牌解锁 未填品牌 → 原型当前可保存(校验缺失),预期开发期拦截([待确认-5]/R-faq-04)。 - TS-3(异常):删除被 C 端高频引用 FAQ → 二次确认后删除,列表移除。 ## 7. 权限控制 | 操作 | 权限码 | 角色([[permission-matrix]]) | 无权限表现 | |------|--------|------------------------------|-----------| | 查看列表/分类 | member:view | 值班员/运营商/站长 | 隐藏菜单 | | FAQ 新增/编辑/删除/置高频 | member:faq:edit(扩展码,主码 member:edit) | 运营商/客服内容维护(T11 客服体系定稿后对齐) | 按钮禁用/隐藏 | > 扩展码约定:按操作域细分,开发期并入 permission-matrix 并回填(对齐 [[design/api/member-api]] 文件头说明)。 ## 8. 接口契约 > **接口未实现、未排期(2026-09-02 决议 E5=乙)**:前端 `fetchFaqCategories()/fetchFaqs()`(`prototype/src/api/member.ts`)仅动态 import `@/mock/member`(无 real 分支)。启用前提:先在 [[design/api/member-api]] 增补本页契约并排期(M2.x 后置)。以下按原型调用形态登记功能接口,**路径列不臆造(未定稿,禁止按此联调)**: | 功能 | 方法 | 路径 | 请求关键参数 | 响应关键字段 | 备注 | |------|------|------|-------------|-------------|------| | FAQ 分类列表 | GET | 待定(member-api 增补时定稿) | - | List | 原型 fetchFaqCategories(),mock 6 类 | | FAQ 列表 | GET | 待定(member-api 增补时定稿) | categoryId,faqType,keyword,hotOnly,page,size | Page | 原型 fetchFaqs();原型为前端本地过滤 | | 新增/编辑 FAQ | POST/PUT | 待定(member-api 增补时定稿) | FaqDTO 字段子集 | faqId | 原型 openNew/openEdit 本地数组操作 | | 置/取消高频 | PUT | 待定(member-api 增补时定稿) | faqId,isHot | - | 原型 toggleHot 本地翻转 | | 删除 FAQ | DELETE | 待定(member-api 增补时定稿) | faqId | - | 原型 onDel 二次确认 | | 分类维护(增删改/启停) | - | - | - | - | 原型未提供([待确认-3]),一并排期 | ## 9. 异常与边界场景 - 加载态:骨架屏 300ms(分类表 + FAQ 表骨架)。 - 空态:"暂无 FAQ,点击右上角新增"(筛选无命中与空库共用)。 - 错误态:错误码 + "FAQ 加载失败,请检查后重试" + 重试按钮(对齐 [[design-conventions]] §九;原型 error 态以页面级 StateView 呈现)。 - 无权限态:无 member:view → 菜单隐藏(403"您无 FAQ 查看权限,请联系管理员开通")。 - 规划中警示:页面顶部常驻黄色警示条"功能规划中(E5=乙):后端接口未排期(2026-09-02 决议)"(原型现状,接真排期后移除)。 - 边界值:标题 ≤50(DB ≤200)、正文 ≤1000、单页 10/20/50/100;排序最小值 1;关键词对标题/正文/品牌三字段子串匹配;仅高频 + 类型 + 分类组合过滤 AND 语义。 - 删除/保存提示:删除二次确认(文案含"C 端不再展示");保存成功提示含"C 端实时生效"(R-faq-01)。 ## 10. 关联页面与数据流 - [[design/c-end/pages/cend-service/service-center]] — C 端消费侧:分类 Tab/高频问题直达/FAQ 列表(is_hot + sort_order 驱动) - [[design/c-end/pages/cend-service/unplug-guide]] — C 端消费侧:品牌解锁/通用教程 FAQ(无法拔枪自助) - [[design/c-end/pages/cend-service/live-chat]] — 人工兜底通道:FAQ 未解决 → 在线客服转人工(本页内容质量影响自助解决率 S3) - [[design/pages/member/service-session]] — 同族"客服体系"后台页(IM 会话,与 FAQ 同为 E5=乙 规划中) - [[design/pages/member/feedback]] — 用户自助失败后的反馈通道(FAQ 未命中 → 意见反馈,SLA 处理) - [[design/c-end/c-end-tables]] §四/§五 — 表结构权威:member_service_faq_category / member_service_faq - [[design/c-end/c-end-decisions]] T10/C3/S3/B6 — 决策源 - 数据流:本页写 member_service_faq(+分类引用)→ C 端客服中心/拔枪指引读同表;resolved/unresolved_count 由 C 端详情反馈按钮回写(计数与自助解决率口径见 [待确认-4])。实体见 [[design/er/er-member]](客服 4 表族同 c-end 域,er 待补登记)。