8.0 KiB
8.0 KiB
创作者中心(/creator)设计 / Creator Center Design
- 状态:设计已批准(2026-09-30;入口=主导航、教程卡=占位+链现有文档、数据卡按登录态分流,逐项与维护者确认),待 spec 审阅后转实现计划。
- 路线图:维护者直接需求,未列入既有波次(P1–P8);仅在文末索引登记。
- 范围定性:纯前端新页面(crearte 仓);零后端、零数据迁移、crearte-deploy 零改动。
1. 背景与意图
站内投稿入口埋在登录后的用户下拉菜单里,主导航只有「作品 / 文档」:潜在创作者从任何公开页面都看不到"成为创作者"的路径;已投稿的创作者也没有回看自己作品数据(浏览 / 下载 / 评分)的承载页。
本子项目先搭骨架:一个首页样式的创作者中心(hero + 两张卡)——「作品数据」占位(后续接真实数据)与「创作教程」占位(教程内容维护者仍在构思,文档可能大规模重构,本轮只做占位并链向现有文档)。
成功标准:主导航出现第三个 tab;/creator 渲染 hero 与两张卡;未登录时数据卡引导登录并可回跳,已登录显示建设中文案;noauth 部署下页面可达且不出现死链。
约束(与维护者确认):
- 入口放页头主导航(「作品」「文档」旁),匿名可进。
- 教程内容定稿前,教程卡只放占位说明 + 链到现有《提交作品指南》。
- 数据卡是纯占位:不接任何真实聚合,不做图表。
2. 方案选型
| 方案 | 内容 | 取舍 |
|---|---|---|
| A. 独立新视图 + 主导航 tab(已选) | 新路由 /creator(无参数)、新 CreatorCenterView、AppHeader 加第三个 tab |
与既有信息架构同构(作品 / 文档 / 创作者中心);页面无参数无 404 面;后续数据卡、教程都可原地替换 |
| B. 收进登录后用户下拉菜单 | 与「提交作品」并列 | 仅登录可见,潜在创作者看不到路径;维护者已明确否 |
C. 并入 /docs 文档流 |
教程进文档 sidebar,数据卡无处安放 | 数据卡无归属;且文档即将重构,现在挂进去白做 |
卡内三态(authEnabled 未登录 / 已登录 / noauth)直接用既有 authEnabled + session(@/auth,AppHeader 同款用法),不引入新的状态管理。
3. 设计详述
3.1 路由与导航
src/app/router/index.ts注册{ path: '/creator', name: 'creator', component: () => import('@/views/CreatorCenterView.vue') },不加meta.requiresAuth(公开页,登录态只在卡内部分流)。src/app/components/AppHeader.vue:- 新增
onCreatorcomputed(route.name === 'creator')。 - 主导航加第三个
RouterLink「创作者中心」,激活样式与「作品 / 文档」完全一致(border-b-accent-ink+aria-current="page")。 - 贴纸(sticker)逻辑不变:creator 页回落默认
HOST YOUR CREATIONS。
- 新增
3.2 页面结构(src/app/views/CreatorCenterView.vue)
复刻 LandingView.vue 的墨纸语言:同类 class,不引新 design token、不改 main.css。
- hero 区(
border-[3px] border-ink bg-surface px-6 py-10 text-center shadow-hard sm:px-10 sm:py-14):- 徽章「创作者」(
bg-ink反转块,同首页「创艺」徽章样式); - 标题「创作者中心」(
font-display大字); - 等宽字体标语行
SHARE YOUR CREATIONS; - 分隔条 + 说明行「把你的作品分享给所有人」;
- 两个按钮:「提交作品」→
/submit/new(该路由requiresAuth,未登录由既有守卫转/login?next=/submit/new,无需本页处理)、「投稿指南」→/docs/contribute。
- 徽章「创作者」(
- 卡片行(
mt-8 flex flex-col gap-4 sm:flex-row,与首页「投稿与文档」行同款;外层sr-onlyh2「创作者中心」保持大纲结构):- 卡 1 作品数据(占位),三态:
authEnabled && !user:「登录后即可查看您作品的数据。」+ 链接「登录」→/login?next=/creator;authEnabled && user:「数据面板正在建设中。上线后将展示您作品的浏览、下载与评分。」;!authEnabled(noauth 部署):「数据面板正在建设中。」——不给登录链接(该模式无账号体系,链过去会被守卫打回首页)。
- 卡 2 创作教程(占位):「教程整理中,敬请期待。」+「投稿流程、打包规范与过审要点正在重新整理,完成后在本页发布。」+ 链接「《提交作品指南》」→
/docs/contribute(先行阅读)。 - 卡片与链接样式复用首页卡片同款 class(
flex-1 border-2 border-ink bg-surface p-4 shadow-hard-sm、h3 text-sm font-black、正文mt-2 text-xs leading-relaxed text-ink-soft、链接underline)。
- 卡 1 作品数据(占位),三态:
3.3 数据流与状态
- 无数据请求:页面不调
repo,不用useAsync;无加载 / 失败态,不套StatePanel(与首页 hero 区一致)。 - 登录态:
import { authEnabled, session } from '@/auth',user = computed(() => session.state.user);authEnabled为构建期常量(VITE_API_BASE_URL判空,src/app/content/index.ts同款判定)。 - 不新增路由守卫、不新增 store、不新增 composable。
3.4 边界与错误处理
- 无异步 ⇒ 无错误面;
/creator无参数 ⇒ 无 404 面。 - noauth 部署:页面可达,数据卡降级为纯建设中文案(无登录死链)。
- 登录链接的
next经LoginView既有sanitizeNext处理,只接受站内路径(/creator合法)。
4. 测试
- Playwright 新增
src/e2e/creator.spec.ts:- 主导航存在「创作者中心」tab;
/creator上该 tabaria-current="page";hero 与两张卡渲染。 - 未登录(默认 context):数据卡含「登录」链接,
href="/login?next=/creator"。 - 已登录(
seedSession,参考auth.spec.ts既有用法):数据卡显示建设中文案、无登录链接。 - 教程卡含指向
/docs/contribute的链接。 - noauth 配置(
playwright.noauth.config.ts):/creator可达、数据卡无登录链接。
- 主导航存在「创作者中心」tab;
- 无 Vitest 单测:视图只有登录态分支、无业务逻辑,e2e 覆盖更值(作者页有过滤逻辑故有单测,本页无可测逻辑)。
- 门槛:
vue-tsc --noEmit全量绿;默认 + noauth 两套 e2e 全量绿(存量不回归)。
5. 影响文件(预估)
| 文件 | 改动 |
|---|---|
src/app/router/index.ts |
注册 /creator |
src/app/views/CreatorCenterView.vue |
新建 |
src/app/components/AppHeader.vue |
主导航加 tab + onCreator |
src/e2e/creator.spec.ts |
新建 |
docs/CHANGELOG.md(crearte 仓) |
0.17.0 双语条目(master 顶部为 0.16.0,本功能自 master 切分支) |
docs/ROADMAP.md(wrapper 仓) |
文末索引登记本 spec 与实现计划 |
6. 验收标准
- 主导航出现「创作者中心」tab,激活态与「作品 / 文档」一致。
/creator渲染 hero + 两张卡,视觉语言与首页一致(同类边框 / 阴影 / 字号,零新 token)。- 三态分流正确:未登录给登录链接(
next=/creator);已登录给建设中文案;noauth 可达且无登录死链。 - 教程卡占位文案 +
/docs/contribute链接就位。 e2e/creator.spec.ts新增用例通过,且存量全量(vitest + 默认 / noauth e2e +vue-tsc)全绿。crearte-server/crearte-deploy零 diff。
7. 明确不做(Out of scope)
- 作品数据面板的真实聚合:浏览 / 下载 / 评分的查询、图表、口径——后续数据卡范围,需先定数据来源与埋点。
- 教程正文:待维护者文档重构定稿后另行立项;本轮的占位卡即为将来的替换点。
- 「我的提交」入口从用户下拉菜单迁移 / 合并(
/submit留在原处)。 - 导航贴纸计数、hero 统计条等首页既有元件的复制。
- 任何后端 / 部署 / 数据迁移改动。