library-picturebook-activity/docs/design/public/activity-results-public-display.md
2026-04-08 16:31:48 +08:00

7.1 KiB
Raw Blame History

公众端活动详情 —「活动成果」Tab 设计方案

所属端:用户端(公众端 /p/
状态:需求已补充,待开发实现
创建日期2026-04-08
关联需求:总需求 US-105开发计划 P1 成果查看详情


1. 背景与目标

1.1 问题

机构在管理端「成果发布」中发布活动成果后,参与者与公众需要在公众端活动详情页查看评审结果。当前实现仅在「活动成果」Tab 内展示奖杯图标与提示语「活动成果已发布,敬请查看!」,未展示具体获奖名单与得分,与总需求中「查看活动成果和评审结果」不一致。

1.2 目标

  • 不降低隐私安全的前提下,使公众端 Tab 内容与管理端已发布成果的业务口径一致(排名、奖项、分数来源同一套计算与数据)。
  • 将「活动成果已发布,敬请查看!」定位为辅助提示(如副标题或加载态提示),主内容为可浏览的成果列表及必要元信息。

1.3 关联文档

文档 说明
成果发布优化(超管) 活动维度发布状态、列表筛选
租户端全面优化 — 成果发布 Detail 统计摘要、排名、设奖、发布流程
UGC 社区升级 公众端整体信息架构,本设计细化「活动」模块下成果 Tab

2. 入口与可见性

2.1 Tab 显示条件

  • 仅当活动 resultState === 'published' 时显示「活动成果」Tab。
  • 未发布:不展示该 Tab与当前 ActivityDetail.vue 逻辑一致)。

2.2 主操作区「查看成果」

  • 活动阶段为「已结束」时,主按钮「查看成果」将 activeTab 切换为 results用户在同一页查看「活动成果」Tab 内容。
  • 文档约定:默认不跳转独立路由;若未来产品改为「成果专页」,需单独迭代路由与返回行为。

2.3 是否需要登录

策略 说明
默认(推荐) 无需登录即可查看已发布活动的成果列表,与公开浏览活动信息一致。
可选 若合规或机构要求「仅报名用户可见」,可在活动级增加配置,此时未登录用户看到引导登录或模糊提示;需在实现阶段单独评审,本文档以默认策略为验收基线。

3. Tab 内信息架构

3.1 文案「活动成果已发布,敬请查看!」的定位

  • 不作为唯一内容:数据加载完成后,主区域应为成果列表。
  • 可用作:副文案骨架屏/加载中的简短说明,或列表上方的温和提示。

3.2 主内容:成果列表

与管理端活动详情「活动结果」Tabcontests/Detail.vue同一业务数据口径,公众端字段可裁剪如下:

字段 是否展示(默认) 说明
名次(排名) 与管理端排名一致
作品编号 若有业务编号则展示,便于用户核对
奖项 如一等奖、二等奖等
最终得分 与机构发布策略一致;若机构侧不公开分数,后端可不返回或由配置控制
姓名/展示名 个人:用户昵称;团队:队名
报名账号 见第 4 节

3.3 元信息

  • 成果发布时间:展示活动级 resultPublishTime(公众活动详情接口已返回该字段,见前端 PublicActivity 类型)。

3.4 空状态

  • resultState === 'published' 但公示列表为空时:展示明确空状态文案,例如「暂无公示信息」,避免长时间加载无反馈。

4. 隐私与脱敏

  • 默认不展示:登录账号、手机号、邮箱等可直接识别身份或联系方式的字段。
  • 展示名:优先使用昵称、队名等已在业务中用于对外的名称。
  • 少儿场景:不展示精确联系方式;仅展示机构允许公示的字段。
  • 若需展示账号类信息,须为脱敏形式(如仅保留前后若干位),且需产品/合规确认。

5. 交互与体验

5.1 列表与分页

  • 移动端优先:采用 分页加载更多 之一,避免单次加载数据量过大。
  • 列表项在窄屏下可用卡片式排布,保证名次、奖项、得分可读。

5.2 行内「查看详情」(分期)

阶段 范围
P1 完成公示列表(排名、奖项、得分、展示名、作品编号等)。
P2可选 点击行进入参赛作品/绘本预览详情,依赖作品公开范围与权限策略。

5.3 数据一致性

  • 排名、奖项、最终得分的计算与更新与租户端「成果发布」模块一致,避免公众端与后台两套数据。参见 租户端成果发布 Detail

6. 后端与接口(需求说明)

6.1 现状

  • 管理端使用 GET /contests/results/{contestId}(需 contest:read不适合匿名公众直接调用。

6.2 建议新增(实现时)

  • 提供公众专用只读接口,例如:
    GET /public/activities/{id}/results
    • 查询参数:分页(page / pageSize),可选关键词(若需按作品编号搜索可后续扩展)。
    • 仅当该活动 resultState === 'published' 时返回公示字段;否则返回空列表或 404,具体策略在实现时二选一并写清(推荐与详情接口状态一致:未发布则列表接口返回空列表 + 前端不展示 Tab减少歧义

6.3 多租户与安全

  • 服务端必须按活动 tenant_idcontest_id 限定查询,仅返回该活动下已发布结果数据,防止跨租户泄露。
  • 不依赖前端传 tenantId 作为信任来源。

7. 验收标准

编号 场景 预期
AC-1 成果已发布 公众端「活动成果」Tab 展示与文档一致的列表字段,不含未授权敏感信息
AC-2 成果未发布 不展示「活动成果」Tab
AC-3 机构撤回发布 活动 resultStatepublished 后,公众端不再展示该 Tab 或列表内容
AC-4 匿名用户 默认策略下,无需登录即可查看已发布列表
AC-5 发布时间 可看到与活动一致的成果发布时间(若接口与 UI 已接通)

8. 前端实现参考(待开发)

位置 说明
frontend/src/views/public/ActivityDetail.vue 替换纯占位为列表 + 加载/空状态;接入公众成果 API
frontend/src/api/public.ts 新增 publicActivitiesApi.getPublishedResults(contestId, params)

9. 修订记录

日期 说明
2026-04-08 初稿:入口、字段、隐私、接口、验收与分期