Files
wordpress-theme-aksrt/.specs/plans/user-creator-center-zibll.md
T
2026-08-06 15:07:35 +08:00

105 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Plan: 用户中心创作中心与文章价格表
## Architectural Decisions
Durable decisions that apply across all phases:
- **唯一入口使用 `posts`**:将现有“我的文章”面板升级为“创作中心”,不新增重复的 `creator` 面板或路由。
- **复用用户中心壳**:继续使用 `AKSRT\\User\\Center`、现有 `?tab=posts`、REST panel、运行时配置、侧栏和移动端导航。
- **复用现有投稿页**:新建和编辑文章继续跳转现有 `page-submit.php`,不把 TinyMCE 编辑器复制到用户中心。
- **价格使用唯一业务通路**:单篇和批量价格修改必须复用 `FrontSubmitPay::save_pay_meta()`,或先将其抽取为唯一共享价格服务;不复制价格校验逻辑。
- **价格数据模型不变**:继续使用当前 `aksrt_pay` 及统一付费元数据,订单、购买和收益逻辑无需修改。
- **服务端权限为最终边界**:每篇文章重新检查作者归属、编辑权限和 `new_post_pay` 能力;前端选择结果不可信。
- **批量更新采用逐项结果**:服务端返回每篇文章的成功/失败结果,前端不得把部分失败伪装成整体成功。
- **复杂付费资源继续走完整编辑器**:价格表优先处理价格和基础付费字段;付费下载资源等复杂结构不重复实现。
---
## Phase 1 — 创作中心文章总览可端到端使用
**用户故事**:US1、US2、US3、US8
### What to build
升级现有 `posts` 面板的名称、信息层级和文章管理体验:增加创作中心标题及新建文章主操作,整合状态概览、文章列表、编辑/预览/删除操作,并复用现有文章查询、状态筛选、权限和用户中心 REST 加载机制。
### Done when
- [ ] `src/User/Center.php`、用户中心渲染映射和入口文案仍只注册/渲染 `posts`,不存在第二个重复的 `creator` 文章管理面板。
- [ ] `profile-posts.php` 展示创作中心标题、新建文章入口、发布/草稿/待审/私密/全部状态数量,并继续使用现有状态筛选参数。
- [ ] 文章列表展示标题、封面或占位图、状态、更新时间、付费摘要和按权限过滤后的操作按钮。
- [ ] 编辑、预览和删除按钮分别遵循现有 `can_edit_post()`、文章可访问性和 `can_delete_post()` 判断;删除继续使用现有 nonce/AJAX 语义。
- [ ] 通过用户中心 REST panel 和 `?tab=posts&post_status=...` 深链访问时,服务端和客户端均能激活正确面板与筛选状态。
---
## Phase 2 — 新建与编辑文章工作流连通
**用户故事**:US3、US8、US9
### What to build
将创作中心的新建/编辑操作与现有前台投稿工作台完整连通,保留 zibll 参考中的双栏创作层级,同时只复用 AKSRT 已有的编辑器、文章参数、封面、草稿、审核和付费配置能力。保存或提交后回到创作中心时保留上下文并反馈结果。
### Done when
- [ ] 新建按钮使用 `aksrt_get_new_post_url()`,编辑按钮传递现有文章 ID,并由 `FrontSubmit::can_submit()`/`can_edit_post()` 控制可用性。
- [ ] `page-submit.php` 的标题、编辑器、封面、分类、专题、高级筛选、标签、付费侧栏和操作区保持现有 AJAX、nonce 和权限链路。
- [ ] 草稿保存、提交审核/发布、编辑已有文章和离开页面警告均继续由现有 `FrontSubmit` 与 `front-submit.js` 处理。
- [ ] 从创作中心进入编辑器后返回时,能够恢复文章列表的状态筛选或分页上下文,并显示保存/提交结果。
- [ ] 运行 PHP lint 及项目可执行的前端静态检查,确认本阶段未破坏现有投稿页面。
---
## Phase 3 — 文章价格表支持单篇与批量调价
**用户故事**:US4、US5、US6、US9
### What to build
在创作中心增加文章价格表,支持免费/付费阅读/付费资源摘要、现金/积分、普通价格和 VIP 价格展示;实现单篇快速编辑及“选择文章 → 统一价格方案 → 预览 → 确认”的批量调价流程。必要时先抽取共享价格服务,再接入单篇和批量请求。
### Done when
- [ ] 价格表按当前用户可管理文章展示免费、付费类型、现金/积分、普通价、VIP1/VIP2 及购买限制摘要;关闭付费时显示“免费”而不是误显示为 0。
- [ ] 单篇编辑支持免费开关、支付模式、普通价、VIP1/VIP2、付费类型、购买限制和登录限制;不修改正文、封面或分类。
- [ ] 单篇保存请求验证登录、作者归属、编辑能力和 `new_post_pay`,并复用 `FrontSubmitPay::save_pay_meta()` 或唯一共享价格服务。
- [ ] 批量工具支持多选、免费/现金/积分价格方案、影响数量预览、确认和逐项成功/失败反馈;请求大小受控。
- [ ] 最低/最高价、免费规则、VIP1/VIP2 层级、折扣计算、支付模式和付费类型校验与投稿页一致,且价格失败时保留输入值。
---
## Phase 4 — 移动端、可访问性与完整验收
**用户故事**:US7、US8、US9
### What to build
完成创作中心文章列表和价格表的响应式布局、键盘交互、加载/空数据/失败/部分成功反馈,以及接口和安全边界验收。确保桌面端高密度工作台和移动端卡片/展开式编辑体验都可用。
### Done when
- [ ] 在窄屏下文章列表和价格表转换为卡片或垂直字段布局,无页面级横向溢出,筛选、批量选择、编辑和确认操作均可通过触控完成。
- [ ] 加载、空数据、请求失败和批量部分失败均有明确文本反馈;失败时不会显示误导性的 0 或清空用户输入。
- [ ] 关键按钮、价格输入、状态标签和确认弹窗具备语义化结构、可见焦点和键盘操作能力,状态不只依赖颜色。
- [ ] 所有新增 REST/AJAX 入口具备 `permission_callback` 或 nonce;输入使用项目既有清洗与价格归一化,输出完成转义。
- [ ] `php tools/audit-admin-contracts.php` 退出码为 0 且无错误,并完成项目可执行的 PHP lint、前端构建或对应静态检查。
---
## Out of Scope
- 不复制 zibll 的 PHP 函数、字段名、商品规格模型、订单模型或主题配置 API。
- 不在用户中心新增独立的 `creator` 页面、第二套文章管理 tab 或第二套前台路由;`posts` 是唯一文章管理入口,界面标题可升级为“创作中心”。
- 不把完整 TinyMCE 编辑器复制嵌入用户中心;新建/编辑继续跳转 `aksrt_get_new_post_url()` 对应的投稿页面。
- 不修改文章购买、订单结算、收益分成、优惠码、付费下载实际业务规则。
- 不新增旧选项双读、旧路由兼容层、数据迁移或新旧 UI 并存实现。
- 不把日常创作工作台迁入配置型 Admin SPA。
## Open Questions
- 默认将 `posts` 面板的显示标题改为“创作中心”,内部 tab key 保持 `posts`;若产品希望 URL 也改为 `creator`,需在实现前明确选择,因为项目规则不允许长期保留两个重复入口。
- 默认批量调价采用“选择文章 → 统一价格方案 → 预览 → 确认”的模式;不包含按比例涨跌或价格模板市场。后续如需比例调整,应另立需求。
- 默认价格表只覆盖安全可复用的价格字段;付费下载资源等复杂结构继续通过完整投稿编辑器维护,除非实现阶段确认现有服务可提供等价的批量契约。
- 默认创作中心不内嵌完整编辑器;若需要无跳转编辑体验,应另行评估 TinyMCE 生命周期、自动保存和页面性能。