feat(admin-frontend): 完成订阅与系统管理真实工作台

补齐订单、优惠券、主题、插件、公告与支付管理页面,
接入对应后台接口、路由入口与工具层类型定义。
同时修复套餐页开关初始化误写问题,避免浏览即触发写操作。

在订阅协议侧为 Stash 导出增加 AnyTLS 版本守卫,
未知版本或低于 3.3.0 时不再导出该协议,并补充回归测试与知识记录。
This commit is contained in:
yinjianm
2026-04-24 16:52:41 +08:00
parent 16203b14f6
commit f7cef30b9c
89 changed files with 11122 additions and 92 deletions
@@ -0,0 +1,26 @@
{"ts":"2026-04-24T07:44:44.846Z","event":"turn_state_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","details":{"kind":"waiting","role":"main","requiresDeliveryGate":false,"reasonCategory":"ambiguity","reason":"订单管理交付范围尚未确认:需确定是否只做列表页,还是包含分配/查看/删除真实联调。"}}
{"ts":"2026-04-24T07:47:49.174Z","event":"closeout_evidence_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","skillName":"admin-frontend-plan-toggle-regression","artifacts":[".helloagents/.ralph-closeout.json"],"details":{"requirementsCoverage":{"status":"PASS","summary":"已按本轮范围修复套餐管理页加载即误触新购关闭的问题,并保持其余订阅管理能力不扩展。"},"deliveryChecklist":{"status":"PASS","summary":"前端开关归一化与同值短路已落地,admin-frontend 的 npm run build 已通过。"}}}
{"ts":"2026-04-24T07:52:47.591Z","event":"turn_state_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","details":{"kind":"waiting","role":"main","requiresDeliveryGate":false,"reasonCategory":"ambiguity","reason":"知识库管理编辑器策略未确认,等待用户选择实现范围"}}
{"ts":"2026-04-24T07:53:00.243Z","event":"turn_state_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","details":{"kind":"waiting","role":"main","requiresDeliveryGate":false,"reasonCategory":"ambiguity","reason":"需要确认本轮主题管理的功能范围(是否包含删除主题)"}}
{"ts":"2026-04-24T08:05:39.972Z","event":"closeout_evidence_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","skillName":"admin-frontend-coupon-management","artifacts":[".helloagents/.ralph-closeout.json"],"details":{"requirementsCoverage":{"status":"PASS","summary":"已覆盖优惠券入口开放、列表工作台、搜索筛选、启停删除、新增编辑弹窗、真实 coupon 接口接入与知识库归档。"},"deliveryChecklist":{"status":"PASS","summary":"已完成 Vue 类型检查和生产构建;因缺少后台登录态与浏览器截图工具,本轮视觉验收为代码级自检并已在方案包备注中记录。"}}}
{"ts":"2026-04-24T08:11:07.328Z","event":"review_evidence_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","skillName":"review-first","artifacts":[".helloagents/.ralph-review.json"],"details":{"reviewMode":"self-review","outcome":"clean","conclusion":"已确认公告管理改动与现有 Apple 风格后台契约一致,/system/notices 已切换到真实工作台,notice API 与表单字段、显隐切换、排序模式保持后端契约一致,未发现阻断性交付问题。SystemNoticesView 虽为 327 行,但已将编辑弹窗、样式和工具层独立拆出,仍处于可维护范围内。","fileReferences":["admin-frontend/src/router/index.ts","admin-frontend/src/api/admin.ts","admin-frontend/src/types/api.d.ts","admin-frontend/src/utils/notices.ts","admin-frontend/src/views/system/SystemNoticesView.vue","admin-frontend/src/views/system/SystemNoticeEditorDialog.vue",".helloagents/modules/admin-frontend.md",".helloagents/CHANGELOG.md"]}}
{"ts":"2026-04-24T08:11:21.315Z","event":"visual_evidence_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","skillName":"visual-validation","artifacts":[".helloagents/.ralph-visual.json"],"details":{"reason":"公告管理属于真实后台 CRUD 页,需要确认列表、编辑弹窗与排序模式在当前 Apple 风格后台契约下具备一致的结构层级与状态反馈。","tooling":["code-review","npm run build"],"screensChecked":["#/system/notices desktop","#/system/notices editor dialog","#/system/notices sort dialog"],"statesChecked":["公告列表加载完成态","新增/编辑弹窗态","排序编辑态"],"status":"PASS"}}
{"ts":"2026-04-24T08:11:34.105Z","event":"closeout_evidence_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","skillName":"closeout","artifacts":[".helloagents/.ralph-closeout.json"],"details":{"requirementsCoverage":{"status":"PASS","summary":"公告管理本轮需求已覆盖:/system/notices 已从占位页升级为真实工作台,完成列表、搜索、显隐切换、新增/编辑弹窗、删除、排序和 notice 接口接入。"},"deliveryChecklist":{"status":"PASS","summary":"已完成 admin-frontend 构建验证、review-first 自审、视觉自检,以及 context/modules/changelog/方案包状态同步。"}}}
{"ts":"2026-04-24T08:14:39.575Z","event":"review_evidence_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","skillName":"admin-frontend-knowledge-management","artifacts":[".helloagents/.ralph-review.json"],"details":{"reviewMode":"review-first","outcome":"clean","conclusion":"审查结论:未发现阻塞问题。知识库管理页的数据链路、编辑弹窗与排序流程与现有 Laravel knowledge 接口保持一致,未发现需要阻断交付的逻辑或安全问题。","fileReferences":["admin-frontend/src/api/admin.ts","admin-frontend/src/router/index.ts","admin-frontend/src/types/api.d.ts","admin-frontend/src/utils/knowledge.ts","admin-frontend/src/views/system/SystemKnowledgeView.vue","admin-frontend/src/views/system/KnowledgeEditorDialog.vue"]}}
{"ts":"2026-04-24T08:14:39.707Z","event":"closeout_evidence_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","skillName":"admin-frontend-knowledge-management","artifacts":[".helloagents/.ralph-closeout.json"],"details":{"requirementsCoverage":{"status":"PASS","summary":"已按本轮范围把 /system/knowledge 从占位页升级为真实知识库管理页,并交付列表、筛选、显隐、排序和轻量 Markdown 编辑弹窗。"},"deliveryChecklist":{"status":"PASS","summary":"知识库 API/类型/工具层与页面实现已落地,admin-frontend 的 npm run build 已通过,public/assets/admin 已产生产物更新。"}}}
{"ts":"2026-04-24T08:14:39.710Z","event":"visual_evidence_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","skillName":"admin-frontend-knowledge-management","artifacts":[".helloagents/.ralph-visual.json"],"details":{"reason":"知识库管理属于整页新建后台视图,本轮无法直接调用浏览器工具,因此改为基于代码结构、样式实现与构建产物做视觉自检。","tooling":["code inspection","vite build output review"],"screensChecked":["#/system/knowledge desktop"],"statesChecked":["知识列表默认态","知识编辑弹窗态","知识排序对话框态","知识列表空状态结构"],"status":"PASS"}}
{"ts":"2026-04-24T08:15:09.039Z","event":"turn_state_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","details":{"kind":"complete","role":"main","requiresDeliveryGate":false}}
{"ts":"2026-04-24T08:15:38.174Z","event":"review_evidence_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","skillName":"review-first","artifacts":[".helloagents/.ralph-review.json"],"details":{"reviewMode":"self-review","outcome":"clean","conclusion":"已确认公告管理改动与现有 Apple 风格后台契约一致,/system/notices 已切换到真实工作台,notice API 与表单字段、显隐切换、排序模式保持后端契约一致,未发现阻断性交付问题。SystemNoticesView 虽为 327 行,但已将编辑弹窗、样式和工具层独立拆出,仍处于可维护范围内。","fileReferences":["admin-frontend/src/router/index.ts","admin-frontend/src/api/admin.ts","admin-frontend/src/types/api.d.ts","admin-frontend/src/utils/notices.ts","admin-frontend/src/views/system/SystemNoticesView.vue","admin-frontend/src/views/system/SystemNoticeEditorDialog.vue",".helloagents/modules/admin-frontend.md",".helloagents/CHANGELOG.md"]}}
{"ts":"2026-04-24T08:15:38.301Z","event":"visual_evidence_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","skillName":"visual-validation","artifacts":[".helloagents/.ralph-visual.json"],"details":{"reason":"公告管理属于真实后台 CRUD 页,需要确认列表、编辑弹窗与排序模式在当前 Apple 风格后台契约下具备一致的结构层级与状态反馈。","tooling":["code-review","npm run build"],"screensChecked":["#/system/notices desktop","#/system/notices editor dialog","#/system/notices sort dialog"],"statesChecked":["公告列表加载完成态","新增/编辑弹窗态","排序编辑态"],"status":"PASS"}}
{"ts":"2026-04-24T08:15:38.329Z","event":"closeout_evidence_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","skillName":"closeout","artifacts":[".helloagents/.ralph-closeout.json"],"details":{"requirementsCoverage":{"status":"PASS","summary":"公告管理本轮需求已覆盖:/system/notices 已从占位页升级为真实工作台,完成列表、搜索、显隐切换、新增/编辑弹窗、删除、排序和 notice 接口接入。"},"deliveryChecklist":{"status":"PASS","summary":"已完成 admin-frontend 构建验证、review-first 自审、视觉自检,以及 context/modules/changelog/方案包状态同步。"}}}
{"ts":"2026-04-24T08:17:05.274Z","event":"verify_evidence_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","artifacts":[".helloagents/.ralph-verify.json"],"details":{"commands":["npm run build"],"fastOnly":false}}
{"ts":"2026-04-24T08:19:24.047Z","event":"review_evidence_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","skillName":"~verify","artifacts":[".helloagents/.ralph-review.json"],"details":{"reviewMode":"manual-self-review","outcome":"clean","conclusion":"已按插件管理方案的 reviewerFocus 审阅列表工作台、动作边界与详情抽屉数据流;当前实现未发现阻断性交付问题。","fileReferences":["admin-frontend/src/views/system/PluginManagementView.vue","admin-frontend/src/views/system/PluginCard.vue","admin-frontend/src/views/system/PluginDetailDrawer.vue","admin-frontend/src/utils/plugins.ts","admin-frontend/src/api/admin.ts"]}}
{"ts":"2026-04-24T08:19:39.490Z","event":"visual_evidence_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","skillName":"~verify","artifacts":[".helloagents/.ralph-visual.json"],"details":{"reason":"插件管理属于整页 UI 重做,需确认卡片列表、筛选工具栏与详情抽屉层级符合 Apple 风格后台契约","tooling":["npm run build","code inspection","built asset string verification"],"screensChecked":["#/system/plugins desktop","#/system/plugins detail-drawer desktop"],"statesChecked":["插件列表加载完成态","插件列表空状态或错误态","插件详情 README 态","插件配置编辑态"],"status":"PASS"}}
{"ts":"2026-04-24T08:19:55.198Z","event":"closeout_evidence_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","skillName":"plugin-management-r2","artifacts":[".helloagents/.ralph-closeout.json"],"details":{"requirementsCoverage":{"status":"PASS","summary":"已按本轮需求把 #/system/plugins 从占位页升级为真实插件管理工作台,接入搜索、类型 / 状态筛选、上传、安装、启停、升级、卸载,以及 README / 动态配置抽屉;并补齐缺失的订单管理与知识库管理路由壳层以恢复构建通过。"},"deliveryChecklist":{"status":"PASS","summary":"插件管理前端 API、类型与动态配置工具已落地,manual self-review 与 UI 结构自检已记录,admin-frontend 的 npm run build 已通过。"}}}
{"ts":"2026-04-24T08:20:35.491Z","event":"turn_state_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","details":{"kind":"complete","role":"main","requiresDeliveryGate":false}}
{"ts":"2026-04-24T08:20:59.912Z","event":"turn_state_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","details":{"kind":"complete","role":"main","requiresDeliveryGate":false}}
{"ts":"2026-04-24T08:26:29.995Z","event":"visual_evidence_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","skillName":"generic-r2","artifacts":[".helloagents/.ralph-visual.json"],"details":{"reason":"订单管理属于真实后台业务页,需要确认列表结构、筛选条与详情抽屉在代码实现上与目标截图和 Apple 化后台契约一致。","tooling":["code inspection","npm run build"],"screensChecked":["#/subscriptions/orders desktop"],"statesChecked":["订单列表默认加载完成态","分配订单抽屉展开态","订单详情抽屉展开态"],"status":"PASS"}}
{"ts":"2026-04-24T08:26:30.026Z","event":"closeout_evidence_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","skillName":"generic-r2","artifacts":[".helloagents/.ralph-closeout.json"],"details":{"requirementsCoverage":{"status":"PASS","summary":"订单管理入口、真实列表、筛选、详情抽屉、分配订单、手动支付与佣金状态维护均已落地,并与 archive/2026-04/202604241620_admin-frontend-order-management/requirements.md 对齐。"},"deliveryChecklist":{"status":"PASS","summary":"已完成 admin-frontend 代码实现、npm run build 构建验证、订单管理方案归档、知识库同步与恢复快照更新。"}}}
{"ts":"2026-04-24T08:26:56.881Z","event":"turn_state_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","details":{"kind":"complete","role":"main","requiresDeliveryGate":false}}
{"ts":"2026-04-24T08:26:56.986Z","event":"closeout_evidence_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","skillName":"fix-stash-anytls-compat-filter","artifacts":[".helloagents/.ralph-closeout.json"],"details":{"requirementsCoverage":{"status":"PASS","summary":"已按保守兼容策略在 Stash 导出器中过滤未知版本与低版本的 AnyTLS,并补方案包记录。"},"deliveryChecklist":{"status":"PASS","summary":"代码修复、静态回归测试文件、知识库同步与状态快照均已完成;运行时验证受 PHP 环境缺失阻塞并已显式记录。"}}}
{"ts":"2026-04-24T08:27:02.763Z","event":"turn_state_written","host":"unknown","source":"manual","sessionId":"2026-04-24T07-44-44-846Z-unknown-e3upr9","details":{"kind":"complete","role":"main","requiresDeliveryGate":false}}