generate-admin-coverage.mjs 101 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827
  1. #!/usr/bin/env node
  2. import { readFileSync, writeFileSync } from 'node:fs';
  3. import { resolve } from 'node:path';
  4. const root = resolve(import.meta.dirname, '..');
  5. const sourcePath = resolve(root, 'docs/migration/legacy-admin-inventory.generated.md');
  6. const outputPath = resolve(root, 'projects/xiaoshu-admin/src/app/legacy-admin-coverage.generated.ts');
  7. const blockedOutputPath = resolve(root, 'docs/migration/final-blocked-actions.generated.md');
  8. const checkOnly = process.argv.includes('--check');
  9. const explicit = new Map([
  10. ['User/GroupManage', ['implemented', '已由 Group 资源页与专用帐套组生命周期替代']],
  11. ['User/Group_API', ['implemented', '已覆盖帐套组列表与带引用保护的删除']],
  12. ['User/GroupAdd', ['implemented', '已由动态组表单与专用 saveGroup 替代']],
  13. ['User/GroupAdd_Submit', ['implemented', '已覆盖原子编号、父组校验与保存']],
  14. ['Content/ContentManage_Status', ['implemented', '已由 contentBatch 状态操作替代']],
  15. ['Content/ContentManage_Del', ['implemented', '已由 contentBatch 回收站操作替代']],
  16. ['Content/ContentMove', ['implemented', '已由内容详情与批量节点移动控件替代']],
  17. ['Content/ContentMove_Submit', ['implemented', '已由 contentBatch 帐套节点校验与移动替代']],
  18. ['Content/IHtmlToString', ['implemented', '已由 cms.content-normalizer 替代']],
  19. ['User/UserManage', ['partial', '已提供帐套用户列表、搜索、分页和批量操作;旧多条件筛选与导出仍待补齐']],
  20. ['User/UserAdd', ['partial', '已提供安全普通用户开户;旧扩展资料字段尚未全部复刻']],
  21. ['User/UserAdd_Submit', ['partial', '已覆盖开户、旧用户 ID 与默认账户初始化']],
  22. ['User/UserInfo', ['partial', '已提供动态详情、资料编辑、状态、分组和密码重置']],
  23. ['User/UserInfo_Submit', ['partial', '已覆盖安全字段更新;旧 UserBase 全字段仍待专用映射']],
  24. ['User/User_API', ['partial', '已覆盖锁定、解锁、移动分组;标注、归属管理员和手机归属地尚未迁移']],
  25. ['User/UserExp', ['implemented', 'UserMoneyLog 聚合六类规范化账本,支持类型、用户、日期筛选和只读详情;Angular 页面已提供管理员资金调整入口']],
  26. ['User/Output', ['blocked-infrastructure', '旧 xlsx/docx/md 导出依赖 NPOI/WordAdd、客户端提交表格及 SiteConfig 页眉页脚;现有内容 CSV 导出不等价']],
  27. ['User/dthelp', ['implemented', '该内部表格助手仅把旧用户 ID 转为用户名;当前 _User 资源直接返回已规范化 username,无需二次 SQL 回填']],
  28. ['User/user', ['implemented', '旧内部用户名查找已由帐套隔离的 _User 资源与用户详情返回 username 替代']],
  29. ['User/GetMd', ['blocked-infrastructure', '旧方法只是用户 Output 的 Markdown 内部格式器;目标没有对应任意表格提交与下载协议']],
  30. ['User/UserOrder', ['blocked-data', '目标缺少 ZL_OrderInfo 与 ZL_CartPro,无法还原指定用户订单和金额统计']],
  31. ['User/DelUserPost_Btn_Click', ['blocked-data', 'GuestBar 仅保留只读迁移数据,缺少可证明完整的按用户帖子级联和计数语义']],
  32. ['User/UPClient', ['blocked-data', '目标缺少 CRMS_Client 与模型 48 动态附表,无法同步为旧 CRM 客户']],
  33. ['User/UserInfo_PlatSubmit', ['partial', 'PlatComp 与 legacyUserPlat 已支持企业成员加入、移动和移出;用户详情中的岗位、姓名、手机专用编辑尚未单独复刻']],
  34. ['User/UserBlontoAdmin', ['blocked-data', '目标 Profile/_User 均没有旧 ZL_UserBase.Bugle 归属管理员关系']],
  35. ['User/UserBlontoAdmin_Submit', ['blocked-data', '目标缺少 Bugle 字段,不能批量写入旧 AdminID']],
  36. ['User/UserLogin', ['blocked-infrastructure', '旧动作要求管理员掌握用户明文口令并写 ASP.NET 登录 Cookie;云函数会话不安全模拟密码代登']],
  37. ['User/UserExp_Submit', ['implemented', 'adjustUserBalance 以单个 PostgreSQL 事务锁定用户、写对应六类账本并更新旧余额字段,扣减禁止负数;Angular 资金流水页提供调整表单']],
  38. ['User/AdminManage', ['partial', 'Manager 已可从全部数据类安全分页、搜索和查看,密码与二级密码被隐藏;专用筛选布局未完全复刻']],
  39. ['User/AdminAdd', ['blocked-infrastructure', '旧 Manager 与当前 Parse _User 管理员会话没有可靠一对一外键,单建 Manager 行不会生成可登录管理员']],
  40. ['User/AdminAdd_Submit', ['blocked-infrastructure', '目标缺少 Manager/_User 原子身份绑定、旧 MD5 迁移和二级密码消费链']],
  41. ['User/AdminSuperEdit_Submit', ['partial', 'changeOwnPassword 已覆盖超级管理员安全改密、撤销会话和强制重登;旧 RandNumber、默认页及角色表单未复刻']],
  42. ['User/Admin_API', ['partial', '_User 批量停用/解锁与会话撤销已实现;Manager 同步删除及旧随机密码邮件审核链明确阻塞']],
  43. ['User/PermissionInfo', ['partial', '系统角色页已展示并维护 12 个 ARoleAuth 权限域;旧只读 Razor 权限说明布局未交付']],
  44. ['User/SendMailList', ['blocked-data', '目标缺少旧邮件发送队列、投递日志、收件人与状态历史']],
  45. ['User/SubscriptListManage', ['blocked-data', '目标缺少旧订阅主表、订阅用户与栏目关系']],
  46. ['User/Jobsconfig', ['blocked-infrastructure', '旧页面仅剩未交付 Razor 视图,目标没有可识别任务配置模型或消费者']],
  47. ['User/ZoneConfig', ['blocked-infrastructure', '旧页面仅剩未交付 Razor 视图,目标没有对应会员空间配置或消费者']],
  48. ['User/WSApi', ['blocked-infrastructure', '目标没有 SiteInfo.APIClose 旧 WebService 总开关及 SOAP/WS 运行时']],
  49. ['User/Department', ['blocked-data', '旧页面依赖未迁入的 ZL_Plat_Group 企业部门与成员/管理员关系']],
  50. ['User/Department_Submit', ['blocked-data', '目标缺少 Plat_Group 部门树,不能更新 MemberIDS/ManageIDS']],
  51. ['User/WSApi_Submit', ['blocked-infrastructure', '云函数不能切换不存在的 SiteInfo.APIClose 或旧 SOAP/WS 宿主']],
  52. ['User/UserGraph', ['partial', 'UserPromotion 已还原帐套用户、邀请人和直属推广人数;旧树图交互布局尚未复刻']],
  53. ['Content/ContentManage', ['partial', '已提供帐套内容列表、搜索、分页、审核和批量操作']],
  54. ['Content/EditContent', ['partial', '可编辑安全主表字段;模型附表专用表单尚未全部生成']],
  55. ['Content/Content_Update', ['partial', '可更新安全主表字段;模型附表更新仅覆盖已迁移学习模型']],
  56. ['Content/ContentRecycle', ['partial', '可回收和恢复内容;独立回收站筛选页尚未提供']],
  57. ['Content/ContentManage_API', ['partial', '已覆盖恢复;永久删除、清空、专题移除和排序交换尚未迁移']],
  58. ['Content/GetMDFile', ['implemented', '旧动作固定返回空字符串,已由 legacyContentUtility 原样兼容为空内容']],
  59. ['Content/AddContent', ['partial', '现有 content_add 可为已规范化的六类学习模型生成主表与附表;任意旧动态模型表单仍缺失']],
  60. ['Content/ShowContent', ['partial', '已提供 CommonModel 详情与已规范化模型查询;旧评论、任意动态附表、前后篇及静态页预览未恢复']],
  61. ['Content/Content_Add', ['partial', '已由 content_add 原子创建已签约模型的 CommonModel 与规范化附表;未迁移模型会明确拒绝']],
  62. ['Content/Content_AddToNew', ['blocked-data', '目标缺少按 CommonModel.tableName 动态复制任意旧模型附表的完整结构与数据']],
  63. ['Content/Content_Draft', ['partial', 'content_add 支持把已规范化模型以 status=-3 写为草稿;任意旧动态模型仍不可创建']],
  64. ['Content/Content_API', ['implemented', '已由 legacyContentUtility duplicate-title 帐套隔离、大小写不敏感地检查重复标题']],
  65. ['Content/AddToSpec', ['blocked-data', 'CommonModel.specialId 仅存在于 Parse Schema,PostgreSQL 物理查询仍失败,无法安全读取专题关系']],
  66. ['Content/AddToSpec_Submit', ['blocked-data', '专题关系物理列不可可靠读写,且商品主表未迁移,不能伪造加入专题成功']],
  67. ['Content/ContentManage_Html', ['blocked-infrastructure', '云函数运行时没有旧模板解析器、站点根目录与静态 HTML 文件宿主']],
  68. ['Content/ContentManage_ToExcel', ['partial', '已由帐套隔离导出云函数与 Angular CSV 下载覆盖八个旧导出列;文件格式由 xlsx 降级为安全 CSV']],
  69. ['Content/ContentManage_Refresh', ['implemented', '已由 contentBatch refresh 批量同步刷新 createTime 与 upDateTime']],
  70. ['Content/ContentRelease', ['blocked-data', '目标 Schema 缺少 Content_ScheTask 定时内容任务及既有任务记录']],
  71. ['Content/ContentRelease_Submit', ['blocked-infrastructure', '目标没有 HFHelper 调度器与 ZL_Task_Content 脚本执行运行时']],
  72. ['Content/CreateHtmlContent', ['blocked-infrastructure', '云函数没有旧节点模板、标签解析器与站点文件系统,无法预览静态生成范围']],
  73. ['Content/Create_Submit', ['blocked-infrastructure', '目标没有 ContentHtmlHelper 和旧模板标签运行时,无法执行内容静态生成任务']],
  74. ['Content/CreateHtml', ['blocked-infrastructure', '目标云函数不能写入旧站点 HTML 目录,也没有旧模板渲染环境']],
  75. ['Content/ConCatch', ['blocked-data', '目标缺少旧采集项目、采集规则、来源站点与任务历史数据']],
  76. ['Content/CatchConfig', ['blocked-infrastructure', '目标没有 SiteOption.Coll_Allow/Coll_Key 配置模型及采集运行时消费者']],
  77. ['Content/CatchConfig_Submit', ['blocked-infrastructure', '仅保存采集开关不会产生可执行采集能力,目标也没有旧 SiteConfig 更新链']],
  78. ['Content/MarkDown', ['blocked-data', '目标 Schema 缺少旧 Content_MarkDown 主表与历史 Markdown 记录']],
  79. ['Content/MarkDown_Del', ['blocked-data', '目标没有可定位并删除的旧 Content_MarkDown 记录']],
  80. ['Design / Counter/VisitList', ['blocked-data', '目标 Schema 缺少旧 ZL_Com_VisitCount 访问明细表及 h5 访问记录']],
  81. ['Design / Counter/VisitInfoList', ['blocked-data', '目标没有可按 InfoID 聚合的 h5 访问明细和最近访问记录']],
  82. ['Design / Counter/VisitInfoDetail', ['blocked-data', '目标缺少指定 InfoID 的访问时间、IP、浏览器、系统、地域和来源明细']],
  83. ['Design / Counter/Counter_API', ['blocked-data', '目标没有可定位并删除的旧访问统计记录']],
  84. ['Extend / Counter/StatisticalCode', ['blocked-infrastructure', '目标缺少 SiteInfo.AllSiteJS 配置模型及在所有页面注入统计脚本的运行时']],
  85. ['Extend / Counter/StatisticalCode_Submit', ['blocked-infrastructure', '云函数不能仅保存任意全站脚本而没有可信的前端注入、CSP 与版本发布链']],
  86. ['Extend / Counter/Index', ['blocked-data', '目标 Schema 缺少 ZL_Com_VisitCount 数据,无法生成旧访问统计首页']],
  87. ['Extend / Counter/Site', ['blocked-data', '目标缺少全站访问明细与总访问计数']],
  88. ['Extend / Counter/Month', ['blocked-data', '目标缺少可按年月聚合的访问日期明细']],
  89. ['Extend / Counter/Year', ['blocked-data', '目标缺少可按年度和月份聚合的访问日期明细']],
  90. ['Extend / Counter/Local', ['blocked-data', '目标缺少访客地域 Address 明细']],
  91. ['Extend / Counter/Browser', ['blocked-data', '目标缺少访客浏览器标识与访问明细']],
  92. ['Extend / Counter/Os', ['blocked-data', '目标缺少访客操作系统标识与访问明细']],
  93. ['Extend / Counter/Channel', ['blocked-data', '目标缺少访问来源渠道与 Referer 明细']],
  94. ['CRM/Index', ['blocked-data', '目标 Schema 缺少旧 CRMS_Client 客户主表,无法进入客户列表首页']],
  95. ['CRM/ClientListDiag', ['partial', '现有用户资源页可按账号搜索并选择用户;旧 GroupID/UserID 多条件弹窗布局未逐项复刻']],
  96. ['CRM/ClientList', ['blocked-data', '目标 Schema 缺少旧 CRMS_Client 客户主表与 Model 48 动态附表']],
  97. ['CRM/ClientView', ['blocked-data', '目标缺少客户、联系人、服务记录和动态附表的联合详情数据']],
  98. ['CRM/ClientAdd', ['blocked-data', '目标没有可编辑或新增的 CRMS_Client 客户记录']],
  99. ['CRM/BiServer_Del', ['blocked-data', '目标 Schema 缺少旧 IServer 服务记录主表']],
  100. ['CRM/Client_Add', ['blocked-data', '目标缺少 CRMS_Client 与 Model 48 动态附表原子写入链']],
  101. ['CRM/ClientImport', ['blocked-infrastructure', '目标缺少客户主表,且旧 CRM_Client.xml 导入定义未迁入']],
  102. ['CRM/Import_DownTlp', ['blocked-infrastructure', '交付包没有旧 CRM_Client.xml 字段映射,无法等价生成 xlsx 模板']],
  103. ['CRM/Import_Client', ['blocked-infrastructure', '目标缺少 CRMS_Client/Model 48 写入结构及旧 XML+NPOI 导入流水线']],
  104. ['CRM/AddServiceRecord', ['blocked-data', '目标 Schema 缺少旧 IServer 客户服务记录主表']],
  105. ['CRM/AddServiceRecord_Submit', ['blocked-data', '目标无法保存 crm_ID、管理员、用户、优先级、类型、状态、附件和提醒等服务记录']],
  106. ['CRM/ServiceRecord_List', ['blocked-data', '目标没有可查询的旧 IServer 服务记录']],
  107. ['CRM/CType', ['implemented', '已由 crmClientTypes 提供帐套隔离、仅 ztype=ctype、名称搜索与分页列表']],
  108. ['CRM/CTypeAdd', ['implemented', '已由 Angular CRM 客户类型新建/编辑抽屉替代']],
  109. ['CRM/CType_Add', ['implemented', '已由 saveCrmClientType 覆盖名称防重、白名单保存和原子旧编号分配']],
  110. ['CRM/CType_Del', ['implemented', '已由 crmClientTypeBatch 覆盖每批 1–100 条帐套隔离删除']],
  111. ['CRM/Contact', ['blocked-data', '目标 Schema 缺少旧 CRMS_Contact 联系人主表;ContactInfo 是企业微信联系人,语义不等价']],
  112. ['CRM/ContactAdd', ['blocked-data', '目标无可编辑或新增的 CRMS_Contact 客户联系人记录']],
  113. ['CRM/Contact_Add', ['blocked-data', '不能把旧 CRM 联系人错写到企业微信 ContactInfo']],
  114. ['CRM/ContactImport', ['blocked-infrastructure', '目标缺少 CRM 联系人主表,且旧 CRM_Contact.xml 导入定义未迁入']],
  115. ['CRM/ContactImport_Down', ['blocked-infrastructure', '交付包没有旧 CRM_Contact.xml 字段映射,无法等价生成 xlsx 模板']],
  116. ['CRM/ContactImport_Upload', ['blocked-infrastructure', '目标缺少 CRMS_Contact 写入结构及旧 XML+NPOI 导入流水线']],
  117. ['CRM/BecomeCustomerList', ['blocked-data', '目标 Schema 缺少 user_becustomer 类型 Common_UserApply 经销商申请']],
  118. ['CRM/BecomeCustomerDetail', ['blocked-data', '目标缺少经销商申请、申请用户和资质详情数据']],
  119. ['CRM/BecomeCustomerDetailUpdate', ['blocked-data', '目标没有可更新的经销商申请 Info1/AdminRemind 记录']],
  120. ['CRM/BecomeCustomer_API', ['blocked-infrastructure', '目标缺少申请、LicenceFiles/LicenceUserSign、CRM 客户及 PDF 文件运行时,无法执行审核链']],
  121. ['ECharts / ECharts/EChartList', ['blocked-data', '目标 Schema 缺少旧 Content_Chart 图表定义主表与历史图表']],
  122. ['ECharts / ECharts/ChartCite', ['blocked-infrastructure', '目标缺少图表名称、站点 SiteUrl 和 /Common/ShowM 公开渲染链,无法生成旧 iframe/Markdown 引用']],
  123. ['ECharts / ECharts/ShowM', ['blocked-infrastructure', '目标没有 Content_Chart option/package 数据与旧 ECharts ShowM 渲染页面']],
  124. ['ECharts / ECharts/AddChart', ['blocked-infrastructure', '目标缺少 Content_Chart 持久层和旧七类图表配置生成运行时']],
  125. ['ECharts / ECharts/AddChart_Submit', ['blocked-data', '目标无法持久化 TName、ChartTitle、ToolBox、Package、option、SType 与 Tag 图表定义']],
  126. ['ECharts / ECharts/Default', ['blocked-data', '目标没有可按 SType 筛选分页的旧 Content_Chart 记录']],
  127. ['Exam/Papers_System_Manage', ['partial', '已由只读 ExamSysPapers 帐套列表、试卷名搜索、分页与详情替代;旧分类筛选尚未复刻']],
  128. ['Exam/Papers_System_Add', ['partial', '现有试卷详情可查看;qids/questList、计时、价格与分值需专用写入链后才能编辑或新增']],
  129. ['Exam/Paper_QuestionManage', ['partial', '已提供 PaperQuestions 大题分组与 ExamSysQuestions 历史数据只读页;按单张试卷联合编排尚未复刻']],
  130. ['Exam/ViewPaperCenter', ['partial', '试卷与试题详情均可查看;旧按题型分组、答案和分数排版预览尚未复刻']],
  131. ['Exam/QuestList', ['partial', '已由 ExamSysQuestions 帐套隔离列表、标题搜索、分页和详情替代;年级/难度/版本组合筛选待补']],
  132. ['Exam/AddEngLishQuestion', ['blocked-infrastructure', '旧英语试题页依赖复合小题、音频/图片上传和答案解析器;目标仅保留只读试题记录']],
  133. ['Exam/QuestShow', ['partial', '已提供 ExamSysQuestions 主记录只读详情;旧复合小题递归展示和答案排版尚未复刻']],
  134. ['Exam/Setting', ['blocked-data', '目标 Schema 缺少旧 Exam_Sys_Answer 答卷明细,无法按最近一周统计并重算试题难度']],
  135. ['Exam/QuestGrade', ['partial', '已由 GradeCate/Grade 多级字典页维护旧题型、难度、年级和教材版本选项;考试专用分类快捷筛选待补']],
  136. ['Exam/VersionList', ['blocked-data', '目标 Schema 缺少旧 Exam_Version 教材版本/册/章节树与历史数据']],
  137. ['Exam/AddVersion', ['blocked-data', '目标无可定位或新建的 Exam_Version 版本树记录']],
  138. ['Exam/SchoolManage', ['blocked-data', '目标 Schema 缺少旧 School 学校主表与省市县数据']],
  139. ['Exam/AddSchool', ['blocked-data', '目标无可编辑或新增的 School 记录']],
  140. ['Exam/ClassRoomManage', ['blocked-data', '目标 Schema 缺少旧 ClassRoom 班级主表与学校、年级、教师关系']],
  141. ['Exam/AddClassRoom', ['blocked-data', '目标无可编辑或新增的 ClassRoom 记录']],
  142. ['Exam/StudentList', ['blocked-data', '目标 Schema 缺少 ClassRoomStudent 班级学员关系、审核状态与学员类型']],
  143. ['Exam/CourseManage', ['blocked-data', '目标 Schema 缺少旧 Course 课程主表;CourseBinding 是小树课程绑定,语义不等价']],
  144. ['Exam/AddCourse', ['blocked-data', '目标无旧 Course 名称、科目、教师与课程结构记录']],
  145. ['Exam/order', ['partial', '现有 ExamPoint 由 saveExamPoint 维护父级与 orderBy;旧打开页面即重写全表连续排序的副作用未保留']],
  146. ['Exam/ToScore', ['blocked-data', '目标 Schema 缺少旧 Exam_Sys_Answer 主观题答卷与评分状态']],
  147. ['Exam/SelQuestion', ['partial', '已由只读 ExamSysQuestions 搜索与选择列表提供数据;旧 issmall/qtype 多条件弹窗布局待补']],
  148. ['Exam/Paper_AddLarge', ['partial', '现有 PaperQuestions 与试题详情可查询;按选中题目即时聚合大题 JSON 的专用接口待补']],
  149. ['Exam/Papers_Add', ['blocked-infrastructure', '试卷写入必须原子维护 qids/questList、分类、计时、价格与题目分值;当前只读迁移不允许通用表单破坏结构']],
  150. ['Exam/Question_Add', ['blocked-infrastructure', '旧试题写入依赖题型答案解析、复合小题、知识点和上传资源;当前只读迁移不能安全保存']],
  151. ['Exam/QuestGrade_Add', ['partial', '现有 Grade 专用云函数可新增和编辑多级选项;考试页的 cate=4/5/6/7 快捷入口待补']],
  152. ['Exam/Version_GetList', ['blocked-data', '目标缺少可按 pid 查询的 Exam_Version 版本树']],
  153. ['Exam/Version_Add', ['blocked-data', '目标缺少 Exam_Version 版本、册、章节持久层']],
  154. ['Exam/School_Add', ['blocked-data', '目标缺少 School 主表,无法保存学校类型、地区、校徽和状态']],
  155. ['Exam/ClassRoom_Add', ['blocked-data', '目标缺少 ClassRoom 与学校、教师、年级关系持久层']],
  156. ['Exam/Course_Add', ['blocked-data', '目标缺少旧 Course 主表和科目树关系']],
  157. ['Exam/Setting_Update', ['blocked-data', '目标缺少 Exam_Sys_Answer 作答统计,不能执行 CountDiffcult 难度重算']],
  158. ['Exam/News', ['partial', '已由只读 ContentPublish 报刊内容列表、搜索、分页与详情替代;旧专用树状布局待补']],
  159. ['Exam/NewsAdd', ['partial', '现有报刊记录可查看;新建/编辑需专用旧编号和父子关系写入链']],
  160. ['Exam/NewsAdd_Submit', ['partial', 'ContentPublish 数据已迁入但当前只读,尚未开放 newsName/nid 的专用原子保存']],
  161. ['Exam/News_API', ['partial', '现有报刊详情可安全读取;删除与 publish_GetModel 组合响应尚未开放']],
  162. ['Exam/NewsDiv', ['partial', 'ContentPublish 历史子项可查看;按 pid 的专用分区列表待补']],
  163. ['Exam/PublishDesc', ['partial', 'ContentPublish 与 PublishNode 历史数据均可查看;按 nid 联合展示待补']],
  164. ['Exam/PubNodeAdd', ['partial', '现有 PublishNode 详情可查看;父节点选择与安全新增/编辑尚未开放']],
  165. ['Exam/PubNodeAdd_Submit', ['partial', 'PublishNode 数据已迁入但当前只读,等待父级循环校验和旧编号原子分配']],
  166. ['Exam/PublishAdd', ['partial', '现有 ContentPublish 详情可查看;报刊父项上下文与专用编辑器尚未复刻']],
  167. ['Exam/PublishAdd_Submit', ['partial', 'ContentPublish title/imgPath/json/pid/cdate/attachFile 写入尚未开放专用校验流程']],
  168. ['Exam/PublishDesign', ['blocked-infrastructure', '旧报刊可视化设计器的前端资产、布局协议与渲染运行时未迁入']],
  169. ['Helper/Index', ['blocked-infrastructure', '旧动作读取服务器 DBConfig.json 并执行本地 SQL 脚本建表;云函数没有该文件运行时,目标数据类已由受控迁移预置']],
  170. ['Helper/HelpInfo', ['blocked-infrastructure', '目标缺少 Notification 帮助数据与旧 SignalR 管理员分组 HelpInfo 推送协议']],
  171. ['Hms/UList', ['blocked-data', '目标用户数据未保留旧 ZL_UserBase.cardType 与 ICQ 到期时间']],
  172. ['Hms/VipAdd', ['blocked-data', '目标没有旧 cardType 空值状态,不能判定可开通主题大师 VIP 卡的用户']],
  173. ['Hms/VipAddJump', ['blocked-data', '旧七档主题大师卡与当前小树 VIP 合伙人等级不是同一业务,不能复用 VIP 字段']],
  174. ['Hms/VipUpdate', ['blocked-data', '目标未保留旧 cardType 与 ICQ 卡片到期时间,无法还原编辑页']],
  175. ['Hms/VipUpdate_Submit', ['blocked-data', '目标未保留旧 cardType/ICQ,不能安全重算卡种与期限']],
  176. ['Hms/VipRenewal', ['blocked-data', '目标没有旧主题大师卡到期时间,无法展示续约上下文']],
  177. ['Hms/VipRenewal_Submit', ['blocked-data', '目标没有旧 cardType/ICQ,不能按卡种天数或指定日期续约']],
  178. ['Hms/VipOverdue', ['blocked-data', '目标没有旧主题大师卡到期时间,无法展示强制过期上下文']],
  179. ['Hms/VipOverdue_Submit', ['blocked-data', '目标没有旧 ICQ 到期时间,不能误写当前 VIP 合伙人字段']],
  180. ['Hms/OList', ['blocked-data', '目标 Schema 缺少旧 ZL_Orderinfo 与 ZL_CartPro,无法查询主题大师 VIP 卡订单']],
  181. ['Index/Default', ['implemented', '已由受 adminGuard 保护的 Angular 后台壳与 /admin/dashboard 替代;托管服务无需旧安装页分支']],
  182. ['Index/Main', ['implemented', '已由 Angular AdminShellComponent 主框架替代']],
  183. ['Index/WorkTable', ['implemented', '已由 dashboard 云函数和 Angular 管理概览替代']],
  184. ['Index/Scence', ['blocked-infrastructure', '目标缺少 SiteOption.Desk 与管理员 Theme/StructureID 持久层及旧主题桌面运行时']],
  185. ['Index/FuncList', ['partial', 'Angular 侧栏与资源目录已提供功能入口;旧完整功能磁贴和权限裁剪布局尚未逐项复刻']],
  186. ['Index/Lockin', ['blocked-infrastructure', '目标没有 B_Admin.LockScreen 与 ASP.NET Session 锁屏状态,不能以停用账号冒充屏幕锁']],
  187. ['Index/SiteMap', ['partial', '资源目录和后台快捷入口已支持搜索;旧 SiteMap_Admin.config 的全部 XML 菜单未迁入']],
  188. ['Index/Lockin_Submit', ['blocked-infrastructure', '旧提交动作为空且锁屏状态依赖 ASP.NET Session/B_Admin,云函数无等价数据']],
  189. ['Index/ASCXLoad', ['blocked-infrastructure', 'Angular 构建不允许按请求路径动态执行服务器 Razor/ASCX 局部视图']],
  190. ['Index/Login', ['implemented', '已由 /admin/login 登录页、Parse 登录接口和登录态恢复替代']],
  191. ['Index/Login_AJAX', ['implemented', '已由 Parse 密码校验、admin meta 权限复核和统一错误处理替代']],
  192. ['Index/Logout', ['implemented', '已由 logout 云函数撤销 _Session 并清理 Angular sessionStorage 替代']],
  193. ['Index/API', ['blocked-infrastructure', '目标缺少 SiteOption.Admin_ShowAnimate 全局持久化配置']],
  194. ['Index/AccountForm', ['blocked-infrastructure', '目标没有 SiteOption.RegManager、管理员申请模型和审批链,不能开放高权限自助申请']],
  195. ['Index/AccountForm_API', ['blocked-infrastructure', '目标没有管理员申请开关与待审批模型,不能提供公开账号/邮箱探测接口']],
  196. ['Index/AccountForm_Submit', ['blocked-infrastructure', '旧动作随机生成密码并直接授予固定高权限角色,目标权限模型不等价且没有审批链']],
  197. ['Manager/ModifyPassword', ['implemented', '已由 Angular 修改密码页要求原密码、新密码和确认密码替代']],
  198. ['Manager/ModifyPassword_Submit', ['implemented', 'changeOwnPassword 验证原密码、更新当前管理员并撤销该账号全部会话后强制重登']],
  199. ['Content / MarkDown/Index', ['blocked-data', '目标 Schema 缺少旧 MarkDown 主表及历史记录']],
  200. ['Content / MarkDown/MD', ['blocked-data', '目标没有可新建或编辑的 MarkDown 记录']],
  201. ['Content / MarkDown/Index_submit', ['blocked-infrastructure', '目标缺少 MarkDown 持久层且 Parse 文件适配器不能替代旧本地上传目录']],
  202. ['Content / MarkDown/Dels', ['blocked-data', '目标没有 Markdown 记录与对应服务器文件可同步删除']],
  203. ['Content / MarkDown/Preview', ['blocked-infrastructure', '目标缺少 Markdown 文件、SiteInfo.SiteUrl 与旧 /PreView/md 渲染运行时']],
  204. ['User / Message/Message', ['blocked-data', '目标缺少旧 Message 站内信主表与收发历史;MailTemp 仅是邮件模板']],
  205. ['User / Message/MessageSend', ['blocked-data', '目标没有可编辑的站内信草稿、收件人、抄送和附件记录']],
  206. ['User / Message/Message_Add', ['blocked-data', '目标缺少站内信发送与草稿持久层']],
  207. ['User / Message/MessageRead', ['blocked-data', '目标没有站内信详情与已读状态记录']],
  208. ['User / Message/Message_API', ['blocked-data', '目标没有可删除的站内信记录']],
  209. ['Mobile/Index', ['blocked-infrastructure', '旧动作只有已丢失的 Mobile Razor 视图,没有页面结构、交互或资源基线']],
  210. ['Mobile/MobileBrower', ['blocked-infrastructure', '旧移动浏览器预览页只有已丢失的 Razor 视图,目标没有对应渲染运行时']],
  211. ['Content / Node/ZhiDing', ['partial', 'saveNode/nodeBatch 已在移动时安全维护层级;拒绝旧版将全部有效栏目强制扁平为根节点的破坏性修复']],
  212. ['Content / Node/UnionNode_Merge', ['blocked-data', '旧合并同时改写 CommonModel 与未迁入的 ZL_Commodities,缺商品主表时不能执行半合并']],
  213. ['Office / OA/Default', ['blocked-data', '目标缺少旧 OA_AuditFlow 审核流主表与历史数据']],
  214. ['Office / OA/FlowInfo', ['blocked-data', '目标没有旧审核流名称、模型、模板、角色用户和会签配置']],
  215. ['Office / OA/FlowInfo_Submit', ['blocked-data', '目标缺少 OA_AuditFlow 持久层;MisProcedure 是不同版本结构']],
  216. ['Office / OA/Flow_API', ['blocked-data', '目标没有可删除的旧审核流记录']],
  217. ['Office / OA/SelFlowModel', ['blocked-data', '目标缺少审核流可绑定的旧 Mis_Model 与套红模板关系']],
  218. ['Office / OA/FlowItem', ['blocked-data', '目标缺少 OA_AuditFlowItem 审核步骤表']],
  219. ['Office / OA/FlowItemInfo', ['blocked-data', '目标没有审核步骤、绑定用户、父步骤、会签、转交和退回记录']],
  220. ['Office / OA/FlowItemInfo_Submit', ['blocked-data', '目标缺少审核步骤持久层']],
  221. ['Office / OA/FlowItem_API', ['blocked-data', '目标没有可删除的审核步骤记录']],
  222. ['Office / OA/SelUserModel', ['implemented', '已由帐套隔离的 Angular 用户管理列表和账号搜索替代']],
  223. ['Office / OA/AddMisModel', ['blocked-data', 'DocModel 与旧 Mis_Model 的 ModelContent/BindNode/DocType/WordPath 不等价']],
  224. ['Office / OA/AddMisModel_Submit', ['blocked-infrastructure', '目标缺少旧 Mis_Model 持久层和 FileGuid 套红模板文件运行时']],
  225. ['Office / OA/AddSign', ['blocked-data', '目标 MisSign 是考勤时间表,不是 OA_Sign 签章模型']],
  226. ['Office / OA/AddSign_Submit', ['blocked-data', '目标缺少 OA_Sign 图片、名称、口令、密钥、所属用户与创建人持久层']],
  227. ['Office / OA/AddSign_Delete', ['blocked-data', '目标没有可删除的 OA_Sign 签章记录']],
  228. ['Office / OA/AddWorkFlowType', ['implemented', '已由 Angular OA 流程类型新建/编辑抽屉替代']],
  229. ['Office / OA/AddWorkFlowType_Submit', ['implemented', 'saveMisType 校验名称/说明、防重并原子分配旧数字 ID']],
  230. ['Office / OA/AddWorkFlowType_Delete', ['implemented', 'misTypeBatch 提供帐套隔离和流程引用保护删除']],
  231. ['Office / OA/ApplyManage', ['blocked-data', '目标缺少 OA_Document 文档申请主表']],
  232. ['Office / OA/ApplyManage_Delete', ['blocked-data', '目标没有可删除的 OA 文档申请记录']],
  233. ['Office / OA/FlowTypeList', ['implemented', 'misTypes 提供帐套隔离、名称搜索和分页列表']],
  234. ['Office / OA/MailManage', ['implemented', '已由帐套隔离的 Angular 用户通讯录列表替代']],
  235. ['Office / OA/MisModelManage', ['blocked-data', '目标缺少旧 Mis_Model 套红文档模型数据']],
  236. ['Office / OA/MisModelManage_Delete', ['blocked-data', '目标没有可删除的旧套红文档模型']],
  237. ['Office / OA/OAConfig', ['blocked-infrastructure', '旧动作只有已丢失的 OAConfig Razor 视图,目标没有对应配置模型']],
  238. ['Office / OA/SelModelFieds', ['partial', '目标 Model 数据可只读查看;旧按 ModelType 回填字段的 OA Razor 交互未迁入']],
  239. ['Office / OA/SignManage', ['blocked-data', '目标缺少 OA_Sign 签章列表;MisSign 是不等价的考勤时间表']],
  240. ['Page/ApplyAudit', ['blocked-data', '目标 Schema 缺少旧 PageReg 用户黄页申请主表与审核状态']],
  241. ['Page/ApplyInfo', ['blocked-data', '目标缺少 PageReg 申请详情、用户动态字段和样式关联']],
  242. ['Page/PageStyle', ['implemented', '已由 pageStyles 提供帐套隔离、名称搜索、排序和分页列表']],
  243. ['Page/PageStyleAdd', ['implemented', '已由 Angular 黄页样式新建/编辑抽屉替代']],
  244. ['Page/PageContent', ['partial', '现有 CommonModel 可管理普通内容;PageReg 与黄页专属模型范围缺失']],
  245. ['Page/EditContent', ['partial', '现有内容详情可查看;PageReg 与 PageTemplate 黄页编辑上下文缺失']],
  246. ['Page/Content_Edit', ['partial', '现有内容主字段可安全编辑;黄页模型附表与 PageReg 关系尚未迁入']],
  247. ['Page/PageConfig', ['blocked-infrastructure', '目标没有 SiteOption.RegPageStart/Page_ContentStatus/Page_UserCanNode 配置层']],
  248. ['Page/PageTemplate', ['blocked-data', 'PageTemplate 为空且目标缺少 PageReg 用户归属,无法还原用户与公共模板树']],
  249. ['Page/PageTemplateAdd', ['blocked-data', '目标缺少 PageReg,不能确定模板 RegID、用户和样式上下文']],
  250. ['Page/SetPageOrder', ['blocked-data', '目标没有可按 PageReg 隔离的页面模板集合']],
  251. ['Page/PageConfig_Update', ['blocked-infrastructure', '目标云函数架构没有旧黄页站点配置持久层']],
  252. ['Page/PageTemplate_Add', ['blocked-data', '目标缺少 PageReg 用户归属和旧模型复选关系,不能安全新增页面模板']],
  253. ['Page/SetPageOrder_Batch', ['blocked-data', '目标没有可按 PageReg 隔离的模板排序集合']],
  254. ['Page/SetPageOrder_UpMove', ['blocked-data', '目标没有可按 PageReg 隔离的相邻模板顺序']],
  255. ['Page/SetPageOrder_DownMove', ['blocked-data', '目标没有可按 PageReg 隔离的相邻模板顺序']],
  256. ['Page/Style_Add', ['implemented', '已由 savePageStyle 校验路径、状态、防重并原子分配旧 PageNodeid']],
  257. ['Page/Apply_Update', ['blocked-data', '目标缺少 PageReg 申请主表、黄页模型附表和用户申请字段']],
  258. ['Office / Plat/Default', ['blocked-data', '旧默认页跳转到已缺失的 Blog_Msg 动态管理,目标没有可进入的信息首页']],
  259. ['Office / Plat/AddComp', ['implemented', '已由 Angular 协同办公企业新建/编辑抽屉替代']],
  260. ['Office / Plat/AddComp_Submit', ['implemented', 'savePlatformCompany 校验企业资料、创建人、防重并原子分配旧数字 ID']],
  261. ['Office / Plat/AuditApply', ['blocked-data', '目标 Schema 缺少旧 Common_UserApply 协同办公申请主表']],
  262. ['Office / Plat/AuditApply_Agree', ['blocked-data', '目标没有可批量通过并改为状态 99 的协同办公申请']],
  263. ['Office / Plat/AuditApply_Reject', ['blocked-data', '目标没有可批量拒绝并改为状态 -1 的协同办公申请']],
  264. ['Office / Plat/CompList', ['implemented', 'platformCompanies 提供帐套隔离、关键词、旧编号排序和分页列表']],
  265. ['Office / Plat/CompInfo', ['implemented', '已由协同办公企业详情抽屉显示完整 PlatComp 字段']],
  266. ['Office / Plat/CreateComp', ['partial', 'Angular 企业表单已覆盖主表创建;旧动作仅剩已丢失 Razor 向导,未知交互无法恢复']],
  267. ['Office / Plat/MemberList', ['implemented', 'platformCompanyMembers 从 _User.legacyUserPlat 安全还原企业成员列表']],
  268. ['Office / Plat/Member_Add', ['implemented', 'platformCompanyMemberBatch 按同帐套账号新增或移动旧 User_Plat 成员']],
  269. ['Office / Plat/Member_API', ['implemented', 'platformCompanyMemberBatch remove 等价删除成员的 legacyUserPlat 记录']],
  270. ['Office / Plat/PlatInfoDeail', ['blocked-data', '目标 Schema 缺少旧 Blog_Msg 动态消息主表']],
  271. ['Office / Plat/PlatInfoDetail_Submit', ['blocked-data', '目标没有可编辑正文与日期的旧协同办公动态消息']],
  272. ['Office / Plat/PlatInfoManage', ['blocked-data', '目标没有 Blog_Msg 顶级动态、回收状态和关键词数据']],
  273. ['Office / Plat/TopicList', ['blocked-data', '目标 Schema 缺少旧 Plat_Topic 话题主表与星标状态']],
  274. ['Office / Plat/WordTlp', ['blocked-infrastructure', '旧文字模板仅剩已丢失的 Razor 视图,目标没有模板数据或渲染协议']],
  275. ['Office / Plat/API', ['partial', 'platformCompanyBatch 已覆盖带成员/角色引用保护的 comp_del;消息与话题分支因主表缺失而阻塞']],
  276. ['Office / Plat/Crud', ['blocked-data', '目标 Schema 缺少旧 Plat_Group 企业部门/群组树']],
  277. ['Office / Plat/CrudAdd', ['blocked-data', '目标没有可编辑的企业群组、上级和成员管理员关系']],
  278. ['Office / Plat/CrudAdd_Submit', ['blocked-data', '目标缺少 Plat_Group 的 FirstID/Depth/ManageIDS/MemberIDS 持久层']],
  279. ['Office / Plat/GroupAdmin_API', ['blocked-data', '目标没有可删除的 Plat_Group 企业群组记录']],
  280. ['Printer/Index', ['blocked-infrastructure', '旧控制器只返回已丢失的 Razor 视图;目标 Schema 又缺少 PrintDevice/PrintTlp/PrintMessage,且旧飞印客户端依赖明文 HTTP 第三方协议,无法安全等价恢复']],
  281. ['User / PrivacyPolicy/LicenceList', ['blocked-data', '目标 Schema 缺少 ZL_LicenceFiles 用户协议定义、强制签署类型与限定用户/用户组数据']],
  282. ['User / PrivacyPolicy/LicenceAdd', ['blocked-data', '目标没有可编辑或新增的用户协议、PDF 路径、字段映射和适用范围记录']],
  283. ['User / PrivacyPolicy/LicenceAdd_Submit', ['blocked-data', '目标缺少 LicenceFiles 持久层及协议 PDF 文件,不能只保存失效路径']],
  284. ['User / PrivacyPolicy/Licence_API', ['blocked-data', '目标没有可启用、停用或删除的用户协议定义']],
  285. ['User / PrivacyPolicy/LicenceUserSign', ['blocked-data', '目标 Schema 缺少 ZL_LicenceUserSign 用户签约历史及协议、用户关联']],
  286. ['User / Promo/Index', ['blocked-data', '旧入口只重定向到提现申请页,目标缺少 Cash 提现主表,无法提供等价落点']],
  287. ['User / Promo/WD', ['blocked-data', '目标 Schema 缺少 Cash 提现申请、手续费、结果、凭证与处理状态记录']],
  288. ['User / Promo/WD_API', ['blocked-data', '目标没有可审核的提现申请记录']],
  289. ['User / Promo/WDAudit', ['blocked-data', '目标缺少指定提现申请的金额、手续费、账户和处理详情']],
  290. ['User / Promo/WDAudit_Accept', ['blocked-data', '目标缺少可原子审核的 Cash 提现事务记录']],
  291. ['User / Promo/WDAudit_Reject', ['blocked-data', '目标缺少 Cash 提现申请及对应预扣余额账本,不能安全执行拒绝退款']],
  292. ['User / Promo/PromoList', ['implemented', '已由 UserPromotion 虚拟资源和 userPromotions 云函数从 _User.legacyUserData.ParentUserID 还原推广关系、人数、日期及邀请人筛选']],
  293. ['User / Promo/UserBank', ['blocked-data', '目标 Schema 缺少 User_Bank 提现账户及审核状态数据']],
  294. ['User / Promo/UserBankAdd', ['blocked-data', '目标没有可编辑的开户人、卡号、账户类型和开户行记录']],
  295. ['User / Promo/UserBankAdd_Submit', ['blocked-data', '目标缺少 User_Bank 持久层,不能把提现账户错写到发票银行字段']],
  296. ['User / Promo/UserBank_API', ['blocked-data', '目标没有可删除、审核或取消审核的提现账户记录']],
  297. ['Pub/PubManage', ['blocked-data', '目标 Pub 模块定义与 PubTw/PubWTHD/PubZXDC 提交类均为空,无法还原互动模块列表']],
  298. ['Pub/Pub_API', ['blocked-infrastructure', '旧删除/复制/恢复依赖 Pub 定义与动态表,modelname 还会检查 SQL 物理表;目标没有可操作记录或动态建表运行时']],
  299. ['Pub/Pubinfo', ['blocked-data', '旧动作只跳转到指定 Pub 定义编辑页,目标 Pub 没有任何历史模块']],
  300. ['Pub/PubAdd', ['blocked-infrastructure', '新增互动模块需要动态模型、表、标签与模板选择,目标云函数没有等价创建运行时']],
  301. ['Pub/PubAdd_Submit', ['blocked-infrastructure', '旧提交会动态建 SQL 表、Model/ModelField、XML 标签及两套服务器 HTML 模板,云函数不能等价执行']],
  302. ['Pub/Pubsinfo', ['blocked-data', '目标没有 Pub 定义可确定提交表,三个已签约 Pub 提交类也全部为空']],
  303. ['Pub/PubsinfoAdd', ['blocked-data', '目标缺少互动模块定义、动态字段与可编辑的提交记录']],
  304. ['Pub/PubsinfoAdd_Submit', ['blocked-data', '目标无法根据空的 Pub 定义选择动态提交表并保存系统字段与模型字段']],
  305. ['Pub/PubInfo_API', ['blocked-data', '目标没有可删除、审核或取消审核的互动提交记录']],
  306. ['Pub/PubInfo2_API', ['blocked-data', '旧企业入驻分支硬编码依赖缺失的 ZL_Pub_BDQYSH 提交表,不能直接改写企业与用户归属']],
  307. ['Pub/PubsinfoReply', ['blocked-data', '目标没有互动父记录、动态字段和回复上下文']],
  308. ['Pub/PubsinfoReply_Submit', ['blocked-data', '目标缺少可确定回复表的 Pub 定义及父提交记录']],
  309. ['Push/Index', ['blocked-data', '旧入口只跳转到推送 API 列表,目标缺少 Mobile_PushAPI 配置数据']],
  310. ['Push/APIList', ['blocked-data', '目标 Schema 缺少 Mobile_PushAPI 的别名、平台、AppKey 与密钥记录']],
  311. ['Push/API_del', ['blocked-data', '目标没有可定位并删除的推送服务配置']],
  312. ['Push/AddAPI', ['blocked-data', '目标没有可编辑或新增的极光推送 API 配置模型']],
  313. ['Push/AddAPI_Submit', ['blocked-data', '签约数据库未提供可安全存储和轮换推送 AppKey/AppSecret 的配置类']],
  314. ['Push/PushMsg', ['blocked-data', '目标缺少可选择的推送 API 配置与设备受众数据']],
  315. ['Push/PushMsg_Submit', ['blocked-infrastructure', '目标没有 JPush 凭据、SDK 消费者、ZL_UserBase.UC 设备注册号或移动端注册链,无法真实发送并记录结果']],
  316. ['Push/PushTlp', ['blocked-data', '目标 Schema 缺少 Mobile_PushTlp 推送模板与状态数据']],
  317. ['Push/AddPushTlp', ['blocked-data', '目标没有可编辑或新增的推送模板记录']],
  318. ['Push/AddPushTlp_Submit', ['blocked-data', '目标缺少推送模板名称、标题、内容和参数持久层']],
  319. ['Push/PushTlp_API', ['blocked-data', '目标没有可启用、停用或删除的推送模板']],
  320. ['Push/MsgList', ['blocked-data', '目标 Schema 缺少 Mobile_PushMsg 发送历史、受众与结果记录']],
  321. ['Extend / PWA/Default', ['blocked-infrastructure', '旧入口跳转到离线缓存配置;目标没有可动态改写已部署前端的 PWA 控制面']],
  322. ['Extend / PWA/Default_Submit', ['blocked-infrastructure', '旧提交为空操作,目标不伪造无效果的保存成功']],
  323. ['Extend / PWA/Mobile', ['blocked-infrastructure', '目标缺少旧 SiteOption PWA 配置、manifest 文件和多尺寸图标资产']],
  324. ['Extend / PWA/Mobile_Submit', ['blocked-infrastructure', '云函数不能缩放上传图标、写 manifest.json、注入站点 head 或持久化旧 SiteConfig']],
  325. ['Extend / PWA/Offline', ['blocked-infrastructure', '目标没有旧 PWA_PC_Enable/Exts/IndexUrl/PreCache 配置与服务器模板']],
  326. ['Extend / PWA/Offline_Submit', ['blocked-infrastructure', '云函数不能读取 pwa_sw_js.tlp 并覆盖已部署站点根目录 /sw.js']],
  327. ['Extend / QuartzTask/TaskList', ['blocked-data', '目标 Schema 缺少 QuartzNetTask 任务定义、类型、状态、次数和历史记录;空 SenTask 语义不等价']],
  328. ['Extend / QuartzTask/ViewLog', ['blocked-data', '目标没有 QuartzNetTask.Log 执行日志可按任务查看']],
  329. ['Extend / QuartzTask/TaskAdd', ['blocked-infrastructure', '目标没有 Quartz IScheduler、ScheduleTaskHandler 与任务持久层,无法创建一次或循环任务']],
  330. ['Extend / QuartzTask/TaskEdit', ['blocked-data', '目标没有可编辑的 Quartz 任务定义']],
  331. ['Extend / QuartzTask/TaskUpdate', ['blocked-infrastructure', '目标没有可同步更新持久层与 Quartz 调度器的控制面']],
  332. ['Extend / QuartzTask/ExecuteNow', ['blocked-infrastructure', '云函数环境没有已注册的 Quartz 作业可立即触发']],
  333. ['Extend / QuartzTask/TaskDelete', ['blocked-infrastructure', '目标没有可同时删除 Quartz 作业与任务记录的调度控制面']],
  334. ['Extend / QuartzTask/TaskDeleteRange', ['blocked-infrastructure', '目标没有可批量注销 Quartz 作业与删除任务记录的控制面']],
  335. ['Extend / QuartzTask/TaskPause', ['blocked-infrastructure', '云函数环境没有常驻 Quartz 调度器或可暂停作业']],
  336. ['Extend / QuartzTask/TaskResume', ['blocked-infrastructure', '云函数环境没有常驻 Quartz 调度器或可恢复作业']],
  337. ['Design / Resource/ResList', ['implemented', '已由 DesignRes 专用帐套列表替代,支持分页、名称/用途/路径搜索和 ztype 精确筛选']],
  338. ['Design / Resource/ResourceAdd', ['partial', '现有资源可编辑元数据并查看原文件/预览图路径;新增与文件替换受 Parse 文件适配器阻塞']],
  339. ['Design / Resource/ResourceAdd_Submit', ['partial', 'saveDesignResource 已白名单更新 Name/style/use/Useage/ZStatus/ZType/fun 并保护旧 ID 与文件路径;上传明确返回 migration_blocked']],
  340. ['Design / Resource/Resource_API', ['implemented', '已由 designResourceBatch 覆盖帐套隔离的单条与每批 1–100 条资源记录删除']],
  341. ['Design / Scene/SceneList', ['implemented', '已由 designScenes 按旧 ZType=0、TlpID=0、Status<>-2 条件提供帐套隔离、搜索和分页']],
  342. ['Design / Scene/SceneListRecycle', ['implemented', 'Angular 场景页可切换回收站,designScenes 严格筛选 Status=-2']],
  343. ['Design / Scene/SceneAdd', ['implemented', '已由 Angular 现有场景编辑抽屉替代,并将布局、组件、资源、路径、编号和模板关系锁为只读']],
  344. ['Design / Scene/SceneAdd_Submit', ['implemented', 'saveDesignScene 白名单更新旧页 9 个字段、校验帐套用户并同步 UserName 与更新时间']],
  345. ['Design / Scene/Scene_API', ['implemented', 'designSceneBatch 覆盖回收、恢复、彻底删除;createDesignSceneTemplate 原子分配模板与副本场景编号并提供失败补偿']],
  346. ['Design / Template/GoDesign', ['partial', 'designTemplateEditorTarget 可按模板解析真实场景 GUID 与旧跳转路径;旧 /design/default 可视化编辑器资产及运行时未迁入']],
  347. ['Design / Template/TlpList', ['implemented', 'designTemplates 提供帐套隔离、名称搜索、classId 筛选和正常模板分页']],
  348. ['Design / Template/TlpListRecycle', ['implemented', 'Angular 模板页可切换回收站,designTemplates 严格筛选 ZStatus=-2']],
  349. ['Design / Template/TemlateAdd', ['implemented', '已由 Angular 可视化模板新建/编辑抽屉替代,并明确保留丢失分类的原始 classId']],
  350. ['Design / Template/TemlateAdd_Submit', ['implemented', 'saveDesignTemplate 覆盖旧表单字段;新增时原子创建模板与空模板场景并提供失败补偿']],
  351. ['Design / Template/Temlate_API', ['implemented', 'designTemplateBatch 覆盖回收、恢复和彻底删除,并在永久删除时清理关联模板场景']],
  352. ['User / Role/UserRole', ['implemented', '已由 roles 用户角色列表覆盖帐套隔离、搜索和分页']],
  353. ['User / Role/UserRoleAdd', ['implemented', '已由 Angular 用户角色新建/编辑抽屉替代']],
  354. ['User / Role/UserRoleAdd_Submit', ['implemented', 'saveRole 已覆盖用户角色名称防重、原子旧编号和白名单保存']],
  355. ['User / Role/UserRoleAuth', ['implemented', 'roleAuthorization 已联合返回用户角色与 12 个旧 ARoleAuth 权限域']],
  356. ['User / Role/UserRole_API', ['implemented', 'roleBatch 已覆盖帐套隔离删除、账号引用保护和权限记录级联清理']],
  357. ['User / Role/ARole', ['implemented', '已由 roles 管理员角色列表覆盖旧 500 条上限列表与名称搜索']],
  358. ['User / Role/ARole_API', ['implemented', 'roleBatch 已覆盖管理员角色批量删除与 Manager.adminRole 引用保护']],
  359. ['User / Role/ARoleAdd', ['implemented', '已由 Angular 管理员角色新建/编辑抽屉替代']],
  360. ['User / Role/ARoleAdd_Submit', ['implemented', 'saveRole 已覆盖管理员角色名称、说明、类型固化和原子 roleId']],
  361. ['User / Role/ARoleAuth', ['implemented', '已在角色详情中完整展示 model/content/shop/page/exam/user/system/office/portable/sites/other/extend']],
  362. ['User / Role/ARoleAuth_Submit', ['implemented', 'saveRoleAuthorization 已覆盖 12 域权限码去重校验、新建/更新和原子权限编号']],
  363. ['User / Struct/Default', ['blocked-data', '旧入口跳转组织树;目标缺少 ZL_Structure 主表,无法提供等价落点']],
  364. ['User / Struct/StructList', ['blocked-data', '目标缺少组织名称、父级、排序、成员、管理员、权限、提醒和经验历史数据']],
  365. ['User / Struct/order', ['blocked-data', '目标没有可按父节点连续重排 OrderID 的组织结构记录']],
  366. ['User / Struct/order_submit', ['blocked-data', '目标没有可按旧结构 ID 更新 OrderID 的组织结构记录']],
  367. ['User / Struct/Struct_API', ['blocked-data', '目标缺少 ZL_Structure.UserIDS/ManagerIDS 与 ZL_User.StructureID 双向成员关系']],
  368. ['User / Struct/StructByTree', ['blocked-data', '目标没有 ParentID 层级及组织成员、管理员关系,不能还原结构树']],
  369. ['User / Struct/Struct_ListByTree', ['blocked-data', '目标没有可递归展开并按 OrderID 排序的组织结构记录']],
  370. ['User / Struct/StructAdd', ['blocked-data', '目标没有可编辑或新增的组织结构主记录']],
  371. ['User / Struct/StructAdd_Submit', ['blocked-data', '目标缺少 ZL_Structure 持久层及用户结构关系同步事务']],
  372. ['User / Struct/StructMember', ['blocked-data', '目标缺少 UserIDS/ManagerIDS 组织成员关系;Profile 与 Group 语义不等价']],
  373. ['User / Struct/Structure_update', ['blocked-data', '目标没有可供树形拖动和批量重排的组织结构记录']],
  374. ['User / Struct/Structure_Merge', ['blocked-data', '目标缺少成员、管理员、经验合并与来源结构删除所需数据']],
  375. ['User / Struct/Structure_Move', ['blocked-data', '目标没有可校验循环并更新 ParentID 的组织结构树']],
  376. ['User / Struct/Structure_List', ['blocked-data', '目标 Schema 缺少旧 ZL_Structure 平铺列表及历史记录']],
  377. ['Label / Vue/Index', ['blocked-data', '目标 Schema 缺少旧 ZL_Vue_Tlp 模板代码表与历史记录']],
  378. ['Label / Vue/TlpView', ['blocked-infrastructure', '目标缺少模板路径数据、服务器模板文件和 B_CreateHtml 标签预览运行时']],
  379. ['Label / Vue/VUE_API', ['blocked-infrastructure', '目标缺少 ZL_Vue_Tlp,云函数也没有模板文件、标签渲染、vue.tlp 和目录复制运行时']],
  380. ['Label / Vue/Config', ['blocked-infrastructure', '目标没有 SiteOption.VUE_DirCopy 配置及其服务器发布消费者']],
  381. ['Label / Vue/Config_Submit', ['blocked-infrastructure', '云函数不能更新旧 SiteConfig 或按配置复制服务器目录']],
  382. ['Workload/Default', ['blocked-data', '旧逐日工作量统计必须内连接 ZL_Comment;目标仅有 CommonModel,缺少评论主表与 GeneralID 关系']],
  383. ['Content / VBook/Default', ['blocked-data', '旧入口跳转 H5 电子书列表;目标缺少 ZL_H5_Item/H5Item 主表']],
  384. ['Content / VBook/Add', ['blocked-data', '目标没有可编辑或新增的 H5 电子书标题、封面和模板关系']],
  385. ['Content / VBook/Add_Submit', ['blocked-data', '目标缺少 ZL_H5_Item 持久层,不能保存标题与 coverImage']],
  386. ['Content / VBook/List', ['blocked-data', '目标没有可按标题和模板筛选的 H5 电子书历史数据']],
  387. ['Content / VBook/API', ['blocked-data', '目标没有可删除或 SetTemplate 的 H5 电子书及模板关联']],
  388. ['Content / VBook/Best', ['blocked-data', '目标没有可更新 isbest 推荐状态的 ZL_H5_Item 记录']],
  389. ['Vdesign/Default', ['blocked-data', '目标缺少 ZL_Vdesign;DesignSiteInfo 属于字段和生命周期不同的 ZL_Design_SiteInfo']],
  390. ['Vdesign/SiteAdd', ['blocked-data', '目标没有可编辑的 Vdesign 应用名称、评分、状态、所有者和模板关系']],
  391. ['Vdesign/SiteAdd_Submit', ['blocked-data', '目标缺少 ZL_Vdesign 与应用变更日志,不能原子保存并记录变更']],
  392. ['Vdesign/SiteArticle', ['blocked-data', '目标缺少 ZL_Vdesign_Article 站点—内容绑定表']],
  393. ['Vdesign/SiteShop', ['blocked-data', '目标同时缺少 ZL_Vdesign_Shop 绑定表和 ZL_Commodities 商品主表']],
  394. ['Vdesign/SiteMessage', ['blocked-data', '目标缺少 ZL_Vdesign_Message 站点留言及审核历史']],
  395. ['Vdesign/Site_API', ['blocked-data', '旧站点启停/删除、留言审核及文章/商品解绑依赖四张未迁入表和变更日志']],
  396. ['Vdesign/SiteBoard', ['blocked-data', '目标缺少 ZL_VdesignTemplate;DesignTlp 是另一套可视化场景模板']],
  397. ['Vdesign/SiteBoardAdd', ['blocked-data', '目标没有可编辑的 Vdesign 模板名称、图片、价格、积分、状态、类型和备注']],
  398. ['Vdesign/SiteBoardAdd_Submit', ['blocked-data', '目标缺少 Vdesign 模板持久层,不能错写到 DesignTlp']],
  399. ['Vdesign/Board_API', ['blocked-data', '目标没有可删除、审核、启停、推荐或换图的 Vdesign 模板记录']],
  400. ['Vdesign/SiteBoardType', ['blocked-data', '目标缺少 ZL_VdesignTemplateType 模板分类树']],
  401. ['Vdesign/SiteBoardTypeAdd', ['blocked-data', '目标没有可编辑或新增的 Vdesign 模板分类']],
  402. ['Vdesign/SiteBoardTypeAdd_Submit', ['blocked-data', '目标缺少模板分类名称、父级、顺序和备注持久层']],
  403. ['Vdesign/BoardType_API', ['blocked-data', '目标没有可列出或递归删除的 Vdesign 模板分类树']],
  404. ['Vdesign/SiteChangeLog', ['blocked-data', '目标缺少 ZL_VdesignSiteChangeLog 应用变更历史']],
  405. ['Vdesign/SiteChangeLog_API', ['blocked-data', '旧空操作对应的变更日志数据和页面均未迁入,不能伪报完整能力']],
  406. ['Vdesign/TemplateBuyLog', ['blocked-data', '目标缺少 ZL_VdesignTemplateBuyLog 模板购买历史及关联']],
  407. ['Vdesign/TemplateBuyLog_API', ['blocked-data', '旧空操作对应的购买日志数据和页面均未迁入,不能伪报完整能力']],
  408. ['Extend / VDesign/SPage', ['blocked-data', '目标缺少 ZL_SPage_Page 的页面、布局、资源、页脚和数据源标签数据']],
  409. ['Extend / VDesign/SPageAdd', ['blocked-data', '目标没有可编辑或新增的 SPage;DesignPage 的结构与生命周期不等价']],
  410. ['Extend / VDesign/SPageAdd_Submit', ['blocked-data', '目标缺少 ZL_SPage_Page 持久层']],
  411. ['Extend / VDesign/SPage_API', ['blocked-data', '目标没有可复制或删除的 SPage 页面记录']],
  412. ['Extend / VDesign/SPageEdit', ['blocked-data', '目标缺少 SPage 的 Layouts、PageRes、PageBottom 与数据源标签']],
  413. ['Extend / VDesign/SPageEdit_Submit', ['blocked-data', '目标没有可按旧页面 ID 保存 Layouts 的记录']],
  414. ['Extend / VDesign/SPage_AddComponent', ['blocked-infrastructure', '旧组件选择器视图、组件目录和序列化协议未交付']],
  415. ['Extend / VDesign/SPage_AddLayout', ['blocked-infrastructure', '旧布局选择器视图、布局定义和序列化协议未交付']],
  416. ['Extend / VDesign/SPageDesign', ['blocked-infrastructure', '目标缺少 SPage 数据、B_CreateHtml 标签解析器、编辑器资产和预览运行时']],
  417. ['Extend / VDesign/SPageDesign_API', ['blocked-infrastructure', '云函数没有可执行 Base64 数据源标签的 B_CreateHtml 内容上下文']],
  418. ['Extend / VDesign/SPageDesign_Nav', ['blocked-infrastructure', '旧导航组件视图与序列化协议未交付']],
  419. ['Extend / VDesign/SPageDesign_Label', ['blocked-infrastructure', '旧标签组件依赖未迁入的 Zoomla 标签库与 B_CreateHtml']],
  420. ['Extend / VDesign/SPageDesign_Content', ['blocked-infrastructure', '旧内容组件视图及动态模型/栏目绑定协议未交付']],
  421. ['Extend / VDesign/SPageDesign_Carousel', ['blocked-infrastructure', '旧轮播组件视图、素材与序列化协议未交付']],
  422. ['Extend / VDesign/SPagePreview', ['blocked-infrastructure', '目标缺少 SPage 数据和 B_CreateHtml 标签渲染环境']],
  423. ['WritePearl/Default', ['blocked-data', '目标缺少 ZL_Write_Copybook 字帖主表及历史数据']],
  424. ['WritePearl/CopybookAdd', ['blocked-data', '目标没有可编辑的旧字帖记录']],
  425. ['WritePearl/CopybookAdd_Submit', ['blocked-data', '目标缺少字帖名称、内容和备注持久层']],
  426. ['WritePearl/Copybook_API', ['blocked-data', '目标没有可删除、启用或停用的字帖记录']],
  427. ['WritePearl/Manuscripts', ['blocked-data', '目标缺少 ZL_Write_Manuscripts 文稿主表及状态历史']],
  428. ['WritePearl/ManuscriptsAdd', ['blocked-data', '目标没有可编辑的旧文稿记录']],
  429. ['WritePearl/ManuscriptsAdd_Submit', ['blocked-data', '目标缺少文稿名称和备注持久层']],
  430. ['WritePearl/Manuscripts_API', ['blocked-data', '目标缺少文稿与 ZL_Write_Word 字词子表,不能级联删除或启停']],
  431. ['WritePearl/UserFiles', ['blocked-data', '目标缺少 ZL_Write_UserFiles 用户书写文件授权、等级与到期历史']],
  432. ['WritePearl/UserFiles_API', ['blocked-data', '目标没有可到期或续期的书写文件授权;账户会员期限语义不等价']],
  433. ['Extend / Safe/Default', ['blocked-infrastructure', '旧默认入口只跳转 SiteSwitch;目标没有静态 Angular 站点的安全开关控制面']],
  434. ['Extend / Safe/API', ['blocked-infrastructure', '旧聚合 API 依赖缺失 Safe_IP、服务器站点检查局部页和 ContentWordHelper 常驻线程']],
  435. ['Extend / Safe/SiteSwitch', ['blocked-infrastructure', '目标没有站点上下线状态、下线页文件或前端发布开关']],
  436. ['Extend / Safe/SiteIP', ['blocked-data', '目标 Schema 缺少旧 Safe_IP 白/黑名单、到期时间与管理员历史']],
  437. ['Extend / Safe/SiteIPAdd', ['blocked-data', '目标没有可编辑或新建的 Safe_IP IP 规则记录']],
  438. ['Extend / Safe/SiteIPAdd_Submit', ['blocked-data', '目标缺少 Safe_IP 持久层和实际消费 IP 规则的请求中间件']],
  439. ['Extend / Safe/ContentProtect', ['blocked-infrastructure', '旧内容保护页视图已丢失,目标无签名、防复制或防篡改配置消费链']],
  440. ['Extend / Safe/SiteAssess', ['blocked-infrastructure', '旧站点安全评估视图、评分规则、基线和历史结果均未交付']],
  441. ['Extend / Safe/SiteProtect', ['blocked-infrastructure', '目标无 Safe_ContentCheck_Models 配置模型及内容写入扫描消费层']],
  442. ['Extend / Safe/SiteProtect_Submit', ['blocked-infrastructure', '仅保存模型 ID 字符串不会产生保护;目标缺少 SiteConfig.Update 和扫描运行时']],
  443. ['Extend / Safe/ContentCheck', ['blocked-infrastructure', '目标无 ContentWordHelper 扫描任务、进度结果缓存和待检模型范围']],
  444. ['Extend / Safe/ContentCheckConfig', ['blocked-infrastructure', '云函数运行时没有 IllegalWordsVerify.keywordsVPath 非法词文件与旧编辑视图']],
  445. ['Extend / Safe/ContentCheckConfig_Submit', ['blocked-infrastructure', '云函数不能写旧非法词文件,当前内容接口也没有该文件消费链']],
  446. ['Extend / Safe/ContentFilter', ['blocked-infrastructure', '旧内容过滤视图已丢失,目标无等价替换/阻断规则与执行层']],
  447. ['Extend / Safe/SiteCheck', ['blocked-infrastructure', '旧站点检查依赖服务器文件、局部 Razor 页和丢失的检查规则']],
  448. ['Design / Interactive/InteractiveList', ['blocked-data', '目标缺少旧 Design_Pub 交互提交表及 sceneid、uid、fname 数据;DesignAnswer/Pub 不等价']],
  449. ['Design / Interactive/Interactive_API', ['blocked-data', '目标没有可按旧 Design_Pub ID 删除的交互提交记录']],
  450. ['Office / iServer/Default', ['blocked-data', '目标 Schema 缺少旧 IServer 服务工单主表与回复表']],
  451. ['Office / iServer/AddQuestionRecord', ['blocked-data', '目标无可新增的 IServer 工单、CRM 关联和附件模型']],
  452. ['Office / iServer/AddQuestionRecord_Submit', ['blocked-data', '目标缺少工单字段、附件及 CRM 关系持久层']],
  453. ['Office / iServer/BiServer', ['blocked-data', '目标没有可按状态、类型和标题筛选的 IServer 工单数据']],
  454. ['Office / iServer/BiServer_Del', ['blocked-data', '目标没有可删除的 IServer 工单记录']],
  455. ['Office / iServer/BiServerInfo', ['blocked-data', '目标缺少工单详情、阅读计数及回复关系']],
  456. ['Office / iServer/DelIServer', ['blocked-data', '目标缺少 IServerReply 回复记录']],
  457. ['Office / iServer/UpdateIServer', ['blocked-data', '目标缺少工单状态、优先级、来源、类型、备注和解决时间持久层']],
  458. ['Office / iServer/BselectiServer', ['blocked-data', '目标没有可供 CRM 选择的旧服务工单数据']],
  459. ['Office / iServer/ISReplyAdd', ['blocked-data', '目标缺少工单回复主表与父工单关系']],
  460. ['Office / iServer/ISReplyAdd_Submit', ['blocked-data', '目标缺少管理员工单回复、附件和内容持久层']],
  461. ['Office / Licence/LicenceFiles', ['blocked-data', '目标缺少 LicenceFiles 协议文件定义与限定用户数据']],
  462. ['Office / Licence/LicenceFiles_API', ['blocked-data', '目标没有可删除的协议文件定义']],
  463. ['Office / Licence/LicenceFilesAdd', ['blocked-data', '目标无协议模板路径、字段、状态、限制类型和限定用户模型']],
  464. ['Office / Licence/LicenceFilesAdd_Submit', ['blocked-infrastructure', '目标缺少协议定义持久层且云函数不能写旧本地模板文件']],
  465. ['Office / Licence/LicenceSignApplyList', ['blocked-data', '目标缺少 Common_UserApply 的 user_signlicence 申请数据']],
  466. ['Office / Licence/LicenceSignApplyDetail', ['blocked-data', '目标缺少许可签署申请、用户和协议文件关联']],
  467. ['Office / Licence/LicenceSignApply_API', ['blocked-infrastructure', '目标缺少申请审核、签署记录及服务器 PDF/本地哈希归档运行时']],
  468. ['Office / Licence/LicenceSignList', ['blocked-data', '目标缺少 LicenceUserSign 签约记录']],
  469. ['Office / Licence/LicenceSignDetail', ['blocked-data', '目标缺少签约详情、协议文件和用户关联']],
  470. ['Office / Licence/LicenceSign_API', ['blocked-data', '目标没有可审核或驳回的签约记录']],
  471. ['Extend / Log/TxtLog', ['blocked-infrastructure', '云函数运行时没有旧 /Log/{LogType}/ 本地日志目录']],
  472. ['Extend / Log/TxtLogContent', ['blocked-infrastructure', '云函数不能按文件名读取旧服务器文本日志']],
  473. ['Extend / Log/TxtLog_Down', ['blocked-infrastructure', '云函数没有旧服务器日志文件可下载']],
  474. ['Extend / Log/SysLog', ['implemented', '已由只读 systemLogs 云函数与 Angular 系统日志页覆盖帐套分页、类型、关键词和日期筛选']],
  475. ['Extend / Log/TaskList', ['blocked-data', 'SenTask 为空且字段不含旧 Content_ScheTask 任务定义']],
  476. ['Extend / Log/TaskAdd', ['blocked-infrastructure', '目标缺少旧调度任务模型与 Hangfire 控制面']],
  477. ['Extend / Log/TaskAdd_API', ['blocked-infrastructure', '目标不能复制旧任务并注册 Hangfire RecurringJob']],
  478. ['Extend / Log/TaskAdd_Submit', ['blocked-infrastructure', '目标缺少旧任务持久层、本地脚本校验与 Hangfire 调度运行时']],
  479. ['Extend / Log/Task_API', ['blocked-infrastructure', '目标不能删除、停用、启用或立即执行旧 Hangfire 任务']],
  480. ['Extend / Log/TaskCenter', ['blocked-infrastructure', '云函数环境没有旧 Hangfire Dashboard 管理页面']],
  481. ['Shop / Exp/DeliverType', ['implemented', '已由 shopFareTemplates 提供帐套隔离、名称搜索、分页和旧运费规则列表']],
  482. ['Shop / Exp/DeliverAdd', ['implemented', '已由 Angular 商城运费模板新建/编辑抽屉替代']],
  483. ['Shop / Exp/DeliverAdd_Submit', ['implemented', '已由 saveShopFareTemplate 校验计价方式、规则 JSON、名称防重并原子分配旧编号']],
  484. ['Shop / Exp/Deliver_API', ['implemented', '已由 shopFareTemplateBatch 覆盖每批 1–100 条帐套隔离删除']],
  485. ['Shop / Exp/OrderSend', ['blocked-data', '目标 Schema 缺少旧 OrderList 订单主表与 Order_Exp 物流单']],
  486. ['Shop / Exp/OrderSend_Submit', ['blocked-infrastructure', '目标缺少订单物流状态、物流单、用户收件手机、SMSConfig 发货模板和 SafeMobile 日志链']],
  487. ['Shop / Exp/Factory', ['blocked-data', '目标 Schema 缺少旧 Manufacturers 厂商主表与历史厂商数据']],
  488. ['Shop / Exp/FactoryAdd', ['blocked-data', '目标无可编辑或新增的 Manufacturers 厂商记录']],
  489. ['Shop / Exp/FactoryAdd_Submit', ['blocked-data', '目标缺少厂商名称、简称、地址、电话、传真、网站、分类、图片和介绍持久层']],
  490. ['Shop / Exp/Factory_API', ['blocked-data', '目标没有可删除或启用的厂商记录']],
  491. ['Shop / Exp/Factory_select', ['blocked-data', '目标没有可按 Producername 搜索选择的厂商数据']],
  492. ['Shop / Exp/Trademark', ['blocked-data', '目标 Schema 缺少旧 Trademark 品牌主表与历史品牌数据']],
  493. ['Shop / Exp/TrademarkAdd', ['blocked-data', '目标无可编辑或新增的 Trademark 品牌记录']],
  494. ['Shop / Exp/Trademark_Submit', ['blocked-data', '目标缺少品牌名称、厂商、分类、启用/置顶/推荐、图片和介绍持久层']],
  495. ['Shop / Exp/Trademark_API', ['blocked-data', '目标没有可删除或启用的品牌记录']],
  496. ['Shop / Exp/Trademark_select', ['blocked-data', '目标没有可按 Trname 搜索选择的品牌数据']],
  497. ['Content / Node/NodeManage', ['implemented', '已由 Node 资源列表、分页与专用结构操作替代']],
  498. ['Content / Node/NodeSearch', ['implemented', '已覆盖按栏目名称搜索并保持帐套隔离']],
  499. ['Content / Node/NodeAdd', ['implemented', '已由 Node 动态表单与父节点结构控件替代']],
  500. ['Content / Node/NodeAdd_Submit', ['implemented', '已覆盖原子栏目编号、同级防重、父节点与层级校验']],
  501. ['Content / Node/UnionNode_Move', ['implemented', '已由 nodeBatch 批量移动与递归深度同步替代']],
  502. ['Content / Node/NodeRecycle', ['partial', '已覆盖回收和恢复;独立回收站筛选页尚未提供']],
  503. ['Content / Node/SPageAdd', ['partial', '节点类型与外链字段可编辑;旧单页专用布局尚未逐字段复刻']],
  504. ['Content / Node/OutLinkAdd', ['partial', '节点类型与 URL 字段可编辑;旧外链专用布局尚未逐字段复刻']],
  505. ['Content / Node/Node_API', ['partial', '已覆盖回收、恢复与安全永久删除;清空全部节点被明确禁止']],
  506. ['Content / Node/BatchNode', ['partial', '已提供栏目批量回收、恢复和结构迁移']],
  507. ['Content / Node/BatchNode_Submit', ['partial', '已覆盖结构批处理;旧批量模板、权限与计费字段仍待专用实现']],
  508. ['Content / Node/UnionNode', ['partial', '已提供栏目批量迁移;栏目合并仍待实现']],
  509. ['Content / Node/Special_API', ['partial', '已覆盖删除引用保护与保存时名称/目录校验;旧独立校验响应未保留']],
  510. ['Content / Node/Special', ['implemented', '已由 Special 资源列表、搜索与分页替代']],
  511. ['Content / Node/SpecialAdd', ['implemented', '已由专题动态表单与父专题结构控件替代']],
  512. ['Content / Node/SpecialAdd_Save', ['implemented', '已覆盖原子专题编号、全帐套防重、父专题与循环校验']],
  513. ['Content / Node/UnionSpecial', ['partial', '已提供专题批量迁移;关系合并因目标数据缺失被显式阻塞']],
  514. ['Content / Node/UnionSpecial_Move', ['implemented', '已由 specialBatch 帐套隔离批量移动替代']],
  515. ['Content / Node/UnionSpecial_Merge', ['blocked-data', 'CommonModel.specialId 物理列缺失且商品主表未迁移,无法安全重写专题关系']],
  516. ['Model/Index', ['partial', '已由全部数据类与 Model/ModelField 资源页替代;旧模型类型入口布局未逐项复刻']],
  517. ['Model/ModelManage', ['implemented', '已提供帐套模型列表、搜索、分页与安全元数据编辑']],
  518. ['Model/ModelAdd', ['blocked-infrastructure', '新增模型需要 PostgreSQL 建表、生成标签与写入旧模板文件']],
  519. ['Model/ModelAdd_Submit', ['blocked-infrastructure', '托管云函数未开放模型 DDL 与旧 Zoomla 模板文件运行时']],
  520. ['Model/Model_API', ['partial', '已覆盖安全模板/展示元数据更新;复制和删除模型因 DDL 被阻塞']],
  521. ['Model/ModelData', ['partial', '规范化目标类可从资源页管理;任意旧附表名到 Parse 类的映射尚未完整恢复']],
  522. ['Model/Field', ['implemented', '已提供模型字段列表、搜索、分页与安全展示元数据编辑']],
  523. ['Model/Order_Submit', ['partial', '已提供同模型字段批量排序云函数;专用拖拽界面尚未复刻']],
  524. ['Model/FieldAdd', ['blocked-infrastructure', '新增字段需要 PostgreSQL ALTER TABLE 与旧字段控件模板']],
  525. ['Model/FieldAdd_Submit', ['blocked-infrastructure', '目标托管环境未开放任意物理列 DDL 与旧控件生成器']],
  526. ['Model/Field_API', ['partial', '已覆盖字段顺序更新;字段删除因历史数据与物理列 DDL 被阻塞']],
  527. ['Content / Guest/Default', ['implemented', '已由 Guestbook 资源页与后台导航替代']],
  528. ['Content / Guest/MsgList', ['implemented', '已提供帐套留言列表、标题搜索、分页与批量审核工作流']],
  529. ['Content / Guest/ReplyGuest', ['implemented', '已由留言详情中的管理员回复面板替代']],
  530. ['Content / Guest/EBtnSubmit', ['implemented', '已由 guestbookReply 原子分配回复 GID 并继承分类/父留言关系']],
  531. ['Content / Guest/MsgShow', ['implemented', '已由留言详情抽屉替代']],
  532. ['Content / Guest/MsgShow_Submit', ['implemented', '已由 saveGuestbook 白名单正文编辑替代']],
  533. ['Content / Guest/Msg_API', ['implemented', '已覆盖审核、取消审核、回收、恢复与带回复引用保护的永久删除']],
  534. ['Content / Guest/CateList', ['implemented', '已由 Guestcate 资源列表、搜索和分类结构抽屉替代']],
  535. ['Content / Guest/CateAdd', ['implemented', '已由留言分类专用表单替代']],
  536. ['Content / Guest/CateAdd_Submit', ['implemented', '已覆盖原子 cateid、留言类型锁定与名称防重']],
  537. ['Content / Guest/Cate_API', ['implemented', '已覆盖下级分类、留言与帖子引用保护的删除']],
  538. ['Content / Bar/Default', ['implemented', '已由 Guestcate 贴吧类型列表入口替代']],
  539. ['Content / Bar/CateList', ['implemented', '已提供贴吧分类列表、搜索、分页与父子结构编辑']],
  540. ['Content / Bar/CateAdd', ['partial', '已提供贴吧分类表单;旧版发帖频率文件配置尚未迁移']],
  541. ['Content / Bar/CateAdd_Submit', ['partial', '已覆盖原子编号、防重、父子循环和分类元数据;文件配置尚缺']],
  542. ['Content / Bar/Cate_API', ['partial', '已覆盖删除引用保护及推荐/取消推荐;清空版块帖子尚未开放']],
  543. ['Content / Bar/BarAuthSet', ['blocked-data', '目标 Schema 缺少 ZL_Guest_BarAuth 用户版块权限关系,无法读取逐用户浏览、发帖和回复权限']],
  544. ['Content / Bar/BarAuthSet_Submit', ['blocked-data', '目标 Schema 缺少 Uid、BarID、Look、Send、Reply 权限关系,无法安全保存旧授权']],
  545. ['Content / Bar/TieList', ['implemented', '已提供帐套帖子列表、标题搜索、分页与批量工作流']],
  546. ['Content / Bar/TieDetail', ['implemented', '已由只读帖子详情抽屉和专用工作流面板替代']],
  547. ['Content / Bar/TieMove', ['implemented', '已由 barBatch 目标贴吧分类校验与移动替代']],
  548. ['Content / Bar/Tie_API', ['partial', '已覆盖审核、回收恢复、置顶/沉底、精华和移动;勋章关系未迁移']],
  549. ['Exam/Question_Class_Manage', ['partial', '已提供帐套分类列表、搜索和父分类编号;旧展开树布局尚未逐像素复刻']],
  550. ['Exam/AddQuestion_Class', ['implemented', '已由 ExamClass 专用结构表单替代']],
  551. ['Exam/Question_Class_GetChild', ['implemented', '已由 examClassChildren 帐套隔离子分类接口替代']],
  552. ['Exam/Question_Class_Add', ['implemented', '已由 saveExamClass 原子编号、防重、父级与循环校验替代']],
  553. ['Exam/ExamPointManage', ['implemented', '已提供帐套考点列表、搜索、分页和父子结构字段']],
  554. ['Exam/AddExamPoint', ['implemented', '已由 ExamPoint 专用考点结构表单替代']],
  555. ['Exam/ExamPoint_Add', ['implemented', '已由 saveExamPoint 原子编号、防重、父级与循环校验替代']],
  556. ['Exam/KnowledgeManage', ['partial', '已提供帐套知识点列表、搜索和父级/科目结构字段;旧展开树布局尚未逐像素复刻']],
  557. ['Exam/AddKnowledge', ['implemented', '已由 QuestionsKnowledge 专用知识点结构表单替代']],
  558. ['Exam/Knowledge_Add', ['implemented', '已由 saveKnowledge 原子编号、科目防重、父级与循环校验替代']],
  559. ['Exam/Knowledge_GetChild', ['implemented', '已由 knowledgeChildren 帐套及科目隔离子级接口替代']],
  560. ['Exam/ExTeacherManage', ['implemented', '已提供帐套考试教师列表、搜索、分页与删除']],
  561. ['Exam/AddExTeacher', ['implemented', '已由 ExTeacher 专用教师资料表单替代']],
  562. ['Exam/Teacher_Add', ['implemented', '已由 saveExamTeacher 原子编号和任教分类归属校验替代']],
  563. ['Dict/DicCateList', ['implemented', '已提供帐套字典分类列表、搜索、分页及启用状态管理']],
  564. ['Dict/DictCate_API', ['implemented', '已由字典分类专用保存、批量启停和带字典项引用保护的删除替代']],
  565. ['Dict/DicCateSel', ['implemented', '已由 dictionaryCategories 帐套隔离分类选择接口和 Angular 下拉控件替代']],
  566. ['Dict/DicItemList', ['implemented', '已提供帐套字典项列表、搜索、分页和所属分类选择']],
  567. ['Dict/DicItem_API', ['implemented', '已由字典项专用保存、分类归属校验、批量启停和删除替代']],
  568. ['Dict/GradeCateManage', ['implemented', '已提供多级字典分类列表、搜索、分页和引用保护删除']],
  569. ['Dict/GCateAdd', ['implemented', '已由 GradeCate 专用分类表单与层级别名输入替代']],
  570. ['Dict/GCateAdd_Submit', ['implemented', '已由 saveGradeCategory 编号、防重和层级别名校验替代']],
  571. ['Dict/GCate_API', ['implemented', '已由 gradeBatch 带选项引用保护的批量删除替代']],
  572. ['Dict/GradeOption', ['implemented', '已由按分类和父选项筛选的 gradeOptions 列表替代']],
  573. ['Dict/GOptionAdd', ['implemented', '已由 Grade 专用分类、父级选项表单替代']],
  574. ['Dict/GOptionAdd_Submit', ['implemented', '已由 saveGradeOption 自动层级、同级防重和父级归属校验替代']],
  575. ['Dict/GOption_API', ['implemented', '已由 gradeBatch 带下级引用保护的批量删除替代']],
  576. ['Shop / Exp/Currency', ['implemented', '已提供帐套货币列表、搜索、分页与批量删除']],
  577. ['Shop / Exp/CurrencyAdd', ['blocked-infrastructure', 'Currency.id 与 Parse 保留 id 冲突,物理表又缺少可写旧 ID 列,Angular 已隐藏新增入口']],
  578. ['Shop / Exp/CurrencyAdd_Submit', ['blocked-infrastructure', '无法为新货币持久化旧数字 ID;saveCurrency 对新增明确返回 migration_blocked']],
  579. ['Shop / Exp/Currency_API', ['implemented', '已由 currencyBatch 帐套隔离批量删除替代']],
  580. ['Config/Holiday', ['implemented', '已提供帐套节假日列表、搜索、分页、编辑与批量删除']],
  581. ['Config/Holiday_API', ['implemented', '已由 saveHoliday 白名单更新和 holidayBatch 帐套隔离删除替代']],
  582. ['Config/HolidayAdd', ['blocked-infrastructure', 'SysHoliday.id 与 Parse 保留 id 冲突,物理表又缺少可写旧 ID 列,Angular 已隐藏新增入口']],
  583. ['Config/HolidayAdd_Submit', ['blocked-infrastructure', '无法为新节假日持久化旧数字 ID;saveHoliday 对新增明确返回 migration_blocked']],
  584. ['Config/SearchFunc', ['implemented', '已提供管理后台/用户中心类型、启用状态、推荐状态筛选及排序分页']],
  585. ['Config/SearchFunc_API', ['partial', '已覆盖启停、推荐、取消推荐、排序与删除;设为全局后台起始页缺少 SiteConfig 持久层']],
  586. ['Config/SearchFuncAdd', ['partial', '已由 Search 专用现有入口编辑抽屉替代;新增因旧 id 不可持久化而阻塞']],
  587. ['Config/SearchFuncAdd_Submit', ['partial', '已由 saveSearchNavigation 白名单更新替代;新增明确返回 migration_blocked']],
  588. ['Config/APIInfo', ['partial', '已由实时 Function 元数据目录替代旧 WXAPP.cshtml 注释解析;旧密钥与访问开关无等价执行层']],
  589. ['Config/APIInfo_Submit', ['blocked-infrastructure', '旧 API 密钥、IP 策略与目标 sessionToken/帐套权限不等价,且无全函数生效配置层']],
  590. ['Config/APIInfo_SwaggerClose', ['blocked-infrastructure', '目标云函数引擎没有帐套级 Swagger 调试关闭开关']],
  591. ['Config/APIInfo_SwaggerOpen', ['blocked-infrastructure', '目标云函数引擎没有帐套级 Swagger 调试开启开关']],
  592. ['Config/ReadFile', ['implemented', '已由 apiCatalog 安全读取 Function 名称、路径、描述、参数和响应类型,不暴露源码']],
  593. ['Config/LicenceFile_API', ['blocked-data', '目标 Schema 缺少许可、隐私、协议与版权文档数据,云函数也不能写旧 wwwroot 文件']],
  594. ['Config/FontIcon', ['implemented', '已由 Angular Lucide 完整图标选择器、搜索、分页和点击复制替代']],
  595. ['Config/close_system', ['blocked-infrastructure', '云函数运行时没有可通过 app_offline.htm 关闭的单体 ASP.NET 进程']],
  596. ['Config/Hotkey', ['blocked-infrastructure', '目标 Schema 缺少 KeyboardConfig/Hotkey 持久化模型与旧 XML 数据']],
  597. ['Config/HotkeyAdd', ['blocked-infrastructure', '目标 Schema 缺少 KeyboardConfig/Hotkey 持久化模型,无法安全新增']],
  598. ['Config/HotkeyAdd_Submit', ['blocked-infrastructure', '目标 Schema 缺少 KeyboardConfig/Hotkey 持久化模型,不伪造保存成功']],
  599. ['Config/Hotkey_API', ['blocked-infrastructure', '目标无可执行快捷键启停、删除、重载或脚本匹配的全局运行时']],
  600. ['Config/Prize', ['blocked-infrastructure', '目标 Schema 缺少 PrizeConfig/PrizeTask 配置模型及签到、任务规则数据']],
  601. ['Config/Prize_Submit', ['blocked-infrastructure', '目标无法持久化旧奖励积分、重复周期和过期规则']],
  602. ['Extend / AD/Default', ['implemented', '已由 Angular 广告位导航进入专用列表']],
  603. ['Extend / AD/ZoneManage', ['implemented', '已由 adZones 帐套隔离列表、名称搜索、类型与启停筛选替代']],
  604. ['Extend / AD/Zone_API', ['implemented', '已由 adZoneBatch 覆盖每批 1–100 条启用、停用与引用保护删除']],
  605. ['Extend / AD/ZoneAdd', ['partial', '现有广告位编辑页已迁移;新增因旧 id 与 Parse 保留字段冲突而明确阻塞']],
  606. ['Extend / AD/ZoneAdd_Submit', ['partial', '现有广告位由 saveAdZone 白名单更新;无旧编号的新增明确返回 migration_blocked']],
  607. ['Extend / AD/InfoManage', ['implemented', '已由 adInfos 按帐套、广告位、审核状态和关键词分页筛选']],
  608. ['Extend / AD/Info_API', ['implemented', '已由 adInfoBatch 覆盖审核、取消审核和批量删除']],
  609. ['Extend / AD/InfoAdd', ['partial', '现有广告编辑和广告位选择已迁移;新增因旧 id 不可持久化而阻塞']],
  610. ['Extend / AD/InfoAdd_Submit', ['partial', '现有广告由 saveAdInfo 校验广告位、时间、权重和内容后更新;新增明确阻塞']],
  611. ['Extend / AD/ADPreView', ['partial', '已提供当前生效广告预览;旧 HTML 只显示源码而不执行脚本,避免管理端 XSS']],
  612. ['Content / Addon/Comment', ['blocked-data', '目标 Schema 缺少旧 ZL_Comment 评论主表与历史评论数据']],
  613. ['Content / Addon/Commont_API', ['blocked-data', '目标无可审核、取消审核或删除的旧评论记录']],
  614. ['Content / Addon/ConAudit_API', ['blocked-data', '目标缺少 ContentAudit 记录、节点审核流程与管理员步骤状态']],
  615. ['Content / Addon/ConAudit_SJ_API', ['blocked-data', '目标缺少送审确认/驳回记录和可追溯流程状态']],
  616. ['Content / Addon/ConAudit', ['blocked-data', '目标 Schema 缺少旧 ZL_Content_Audit 审核列表及历史数据']],
  617. ['Content / Addon/ConAuditDetail', ['blocked-data', '目标缺少审核明细、备注、节点和操作人流转记录']],
  618. ['Content / Addon/TagKey', ['implemented', '已由 Angular 全局标签词库编辑页替代旧 tags.json 文件页']],
  619. ['Content / Addon/TagKey_Submit', ['implemented', '已由 saveContentTagKeys 清理标签并持久化到 Parse Config']],
  620. ['Content / Addon/VerBak', ['blocked-data', '目标 Schema 缺少旧 ZL_Content_VerBak 内容/商品版本快照与历史数据']],
  621. ['Content / Addon/VerBak_Del', ['blocked-data', '目标无可定位和删除的旧 ZL_Content_VerBak 版本记录']],
  622. ['Shop / Addon/Vendor', ['blocked-data', '目标 Schema 缺少旧 ZL_Shop_Vendor 供应商主表与历史数据']],
  623. ['Shop / Addon/Vendor_API', ['blocked-data', '目标没有可定位和删除的供应商记录;Agency/DeliveryCenter 语义不等价']],
  624. ['Shop / Addon/VendorAdd', ['blocked-data', '目标无签约数据类承载名称、地址、手机、传真、邮箱和状态']],
  625. ['Shop / Addon/VendorAdd_Submit', ['blocked-data', '按既定数据库设计不能擅自新建 ShopVendor,也不能错写 Agency/DeliveryCenter']],
  626. ['User / Addon/PointGroup', ['implemented', '已由 userLevels 帐套隔离、关键词与排序分页列表替代']],
  627. ['User / Addon/PointGroupAdd', ['partial', '现有积分等级编辑页已迁移;新增因旧 id 与 Parse 保留字段冲突而阻塞']],
  628. ['User / Addon/PointGroup_API', ['implemented', '已由 userLevelBatch 覆盖每批 1–100 条帐套隔离删除']],
  629. ['User / Addon/PointGroup_Submit', ['partial', '现有等级由 saveUserLevel 白名单更新别名、积分阈值、图片和备注;新增明确阻塞']],
  630. ['User / Addon/VMoneyLog', ['implemented', '已由 userMoneyLogs 聚合六类规范化账本,保留类型、日期、关键词与用户名筛选']],
  631. ['User / Addon/ThirdInfo', ['blocked-data', '旧 ThirdInfo.config 六个提供商配置与历史密钥未迁入;ThirdPlatInfo 是不同业务平台']],
  632. ['User / Addon/ThirdInfo_Submit', ['blocked-infrastructure', '云函数没有旧 XML 文件系统与 Baidu/QQ/Sina/Wechat 等 OAuth 运行时消费者']],
  633. ['User / Addon/SigninList', ['blocked-data', '目标 Schema 缺少 PrizeTaskLog 及 Global.SignIn 用户签到任务日志']],
  634. ['User / Addon/RealNameAuth', ['blocked-data', '目标 Schema 缺少 UserRealNameAuth 申请主表、审核状态与历史数据']],
  635. ['User / Addon/RealNameAuthAdd', ['blocked-data', '目标 Profile 零散身份字段不等价于可审阅的实名认证申请']],
  636. ['User / Addon/RealNameAuth_API', ['blocked-data', '目标缺少实名申请记录及 Global.RealNameAuth 任务奖励链']],
  637. ['Content / Ask/Default', ['blocked-data', '目标 Schema 缺少旧 ZL_Ask 问题主表、回收站标记与历史问题数据']],
  638. ['Content / Ask/AskInfo', ['blocked-data', '目标无问答问题详情;Baike/Guestbook/GuestBar/DesignQuestion 均非等价主表']],
  639. ['Content / Ask/AskAdd', ['blocked-data', '目标无 Ask 数据类承载 QTitle/Qcontent 与状态、精华、回收站关系']],
  640. ['Content / Ask/AskAdd_Submit', ['blocked-data', '不能把旧问答问题错写到百科、留言、论坛或问卷题目']],
  641. ['Content / Ask/Ask_API', ['blocked-data', '目标缺少可回收、恢复、删除、审核或加精的旧问答问题记录']],
  642. ['Content / Ask/AnswerList', ['blocked-data', '目标 Schema 缺少旧 ZL_GuestAnswer 回答主表及 QueId 问题外键']],
  643. ['Content / Ask/AnswerAdd', ['blocked-data', '目标无可编辑或新增的问答回答记录与问题归属']],
  644. ['Content / Ask/AnswerAdd_Submit', ['blocked-data', '目标缺少 GuestAnswer QueId/UserId/UserName/Content 数据模型与历史关系']],
  645. ['Content / Ask/Answer_API', ['blocked-data', '目标缺少可审核、取消审核或删除的旧问答回答记录']],
  646. ['Content / Ask/Config', ['blocked-infrastructure', '目标没有 GuestConfig.WDOption 问答运行时和用户组权限消费者']],
  647. ['Content / Ask/Config_Submit', ['blocked-infrastructure', '目标没有问答发布/回复/推荐运行时执行积分与用户组规则']],
  648. ['BiaoCalc/Default', ['blocked-data', '目标 Schema 缺少旧 BiaoCalcModel 裱件模型主表、状态与历史记录']],
  649. ['BiaoCalc/BiaoDetail', ['blocked-data', '目标无可定位的裱件详情及 UserID 用户关系']],
  650. ['BiaoCalc/Biao_API', ['blocked-data', '目标缺少可启用、停用或删除的 BiaoCalcModel 记录']],
  651. ['BiaoCalc/UserFiles', ['blocked-data', '目标 Schema 缺少 BiaoCalcUserFiles 文件授权、等级与到期时间数据']],
  652. ['BiaoCalc/UserFiles_API', ['blocked-data', '目标无 BiaoCalcUserFiles.ExpireTime 可到期或续期;账户会员到期字段语义不等价']],
  653. ['Office / Chart/Index', ['blocked-infrastructure', '旧交付包与官方源码只保留空壳控制器,缺少 Index.cshtml、数据源和交互定义']],
  654. ['Extend / Chat/Default', ['blocked-data', '目标 Schema 缺少 ChatMsg 消息表,无法还原用户消息数']],
  655. ['Extend / Chat/UserChatHistory', ['blocked-data', '目标缺少 ChatMsg/ChatGroup 个人与群会话关系']],
  656. ['Extend / Chat/UserFriend', ['blocked-data', '目标缺少 User_Friend 好友关系;UserFriendGroup 只是分组,语义不等价']],
  657. ['Extend / Chat/Group', ['blocked-data', '目标 Schema 缺少 ChatGroup 群组主表与历史数据']],
  658. ['Extend / Chat/GroupAdd', ['blocked-data', '目标无可定位和编辑的 ChatGroup 群组记录']],
  659. ['Extend / Chat/GroupAdd_Submit', ['blocked-data', '目标缺少 ChatGroup/ChatGroupUser 群主、管理员与成员关系']],
  660. ['Extend / Chat/GroupUser', ['blocked-data', '目标 Schema 缺少 ChatGroupUser 群成员和管理员记录']],
  661. ['Extend / Chat/MessageHistory', ['blocked-data', '目标缺少 ChatMsg 个人/群组消息和收发关系']],
  662. ['Extend / Chat/Config', ['blocked-infrastructure', '目标没有 RoomConfig TRTC 配置持久层和聊天运行时']],
  663. ['Extend / Chat/Config_Submit', ['blocked-infrastructure', '目标没有消费 TRTC AppID/SecretKey 的聊天服务']],
  664. ['Extend / Chat/Chat_API', ['blocked-data', '目标缺少 ChatMsg/ChatGroup/ChatGroupUser 可删除、启停或授权记录']],
  665. ['Design / Class/ClassList', ['blocked-data', '目标 Schema 缺少 DesignTlpClass/Design_TlpClass 模板分类主表与历史数据']],
  666. ['Design / Class/ClassAdd', ['blocked-data', '目标无模板分类数据类;DesignTlp 仅保留数字 classId 引用']],
  667. ['Design / Class/ClassAdd_Submit', ['blocked-data', '现有 DesignTlp 引用 classId=6,但分类 6 的名称、父级、排序和说明已丢失']],
  668. ['Design / Class/Class_API', ['blocked-data', '目标无可删除分类记录,且不能使现有 DesignTlp.classId=6 引用悬空']],
  669. ['Com/Logout', ['implemented', '已由 Angular 退出入口调用管理云函数销毁当前 Parse _Session 后清除本地会话']],
  670. ['Com/SPwdCheck', ['blocked-infrastructure', '目标没有 Manager.RandNumber 二级密码会话状态和业务消费者']],
  671. ['Com/BootLayout', ['implemented', '已迁移为 Angular Bootstrap 栅格生成器,保留框架、列数、断点、预设、预览和复制 HTML']],
  672. ['Com/Import', ['blocked-infrastructure', '目标与云函数运行时缺少 /Config/Import/{mode}.xml 导入定义']],
  673. ['Com/Import_DownTlp', ['blocked-infrastructure', '缺少旧 XML 字段别名、隐藏字段、类型和默认值规则']],
  674. ['Com/Import_Submit', ['blocked-infrastructure', '云函数没有旧 XML+NPOI 动态表 xlsx 导入流水线']],
  675. ['Com/ImportForContent', ['blocked-infrastructure', '目标缺少旧动态模型附表结构与通用 xlsx 导入页']],
  676. ['Com/ImportForContent_DownTlp', ['blocked-infrastructure', '无法从已缺失的动态模型附表还原完整 xlsx 字段模板']],
  677. ['Com/ImportForContent_Submit', ['blocked-infrastructure', '缺少动态附表批量写入流程,商品分支还缺少 ZL_Commodities']],
  678. ['Com/Sort', ['partial', '模型字段顺序已由 modelFieldOrder 迁移;内容、商品、栏目和贴吧分类的旧统一排序页尚未完整迁移']],
  679. ['Com/Sort_API', ['partial', 'modelFieldOrder 已覆盖 ModelField 白名单帐套排序;其余 4 类旧表名分支未提供等价云函数']],
  680. ['Common/UserBaseField', ['blocked-data', '目标缺少 B_UserBaseField 动态字段定义与 ZL_UserBase 原始扩展行']],
  681. ['Common/ContentField', ['blocked-data', '目标缺少按 CommonModel.TableName/ModelID 动态解析任意旧内容附表的数据与渲染层']],
  682. ['Common/SelUploadFiles', ['blocked-infrastructure', '旧交付包/官方源码缺少视图,当前 PostgreSQL Parse 文件适配器也无法上传']],
  683. ['Config/Index', ['blocked-infrastructure', '旧配置首页只跳转 SiteInfo,目标无签约的统一站点配置模型和运行时']],
  684. ['Config/SiteInfo', ['blocked-infrastructure', '目标缺少 SiteInfo/SiteOption 站点、Logo、版权、全站 JS 与后台目录配置']],
  685. ['Config/SiteInfo_Submit', ['blocked-infrastructure', '云函数无法更名 ASP.NET 后台路径、改写 web.config 或重启旧宿主']],
  686. ['Config/SiteOption', ['blocked-infrastructure', '目标无 SiteOption/ShopConfig/UserConfig 的域名、模板、上传、审核、积分和安全策略模型']],
  687. ['Config/SiteOption_Submit', ['blocked-infrastructure', '现有云函数未消费旧 SiteOption 的数十项站点/商城/互动规则']],
  688. ['Config/MailConfig', ['blocked-infrastructure', '目标缺少 SMTP 服务器、端口、帐号和收件列表配置模型']],
  689. ['Config/MailConfig_Submit', ['blocked-infrastructure', '目标无统一 SMTP 发送运行时;MailTemp 仅是模板而非邮件通道']],
  690. ['Config/UserConfig', ['blocked-infrastructure', '目标缺少注册、审核、验证码、必填字段、奖励与提现规则模型']],
  691. ['Config/UserConfig_Submit', ['blocked-infrastructure', '当前注册/登录云函数未实现旧 UserConfig 规则消费层']],
  692. ['Config/SetOrderStatus', ['blocked-infrastructure', '目标缺少 OrderConfig 状态文案与订单/商品主运行链']],
  693. ['Config/SetOrderStatus_Submit', ['blocked-infrastructure', '目标无订单运行时消费 21 类旧订单/配送/支付状态文案']],
  694. ['Config/SMSCfg', ['blocked-infrastructure', '目标缺少 SMSConfig 多供应商帐号、密钥、签名、模板和频控模型']],
  695. ['Config/SMSConfig_Submit', ['blocked-infrastructure', '当前云函数无短信网关,密码重置也因缺短信验证而阻塞']],
  696. ['Config/ThumbConfig', ['blocked-infrastructure', '目标缺少 WaterModuleConfig/ThumbsConfig 水印、文字样式、尺寸和缩略图规则']],
  697. ['Config/ThumbConfig_Submit', ['blocked-infrastructure', '当前 Parse 文件适配器错误,也无上传后执行水印/缩略图规则的处理器']],
  698. ['Config/AppConfig', ['blocked-infrastructure', '目标云函数宿主无 ASP.NET defaultDocument、customErrors、MIME 和扩展名配置']],
  699. ['Config/AppConfig_Submit', ['blocked-infrastructure', '云函数无法改写/重启旧 web.config,目标运行时也不消费这些选项']],
  700. ['Config/APPConfig_ReInstall', ['blocked-infrastructure', '目标没有 IsInstalled 状态与 /Install/Index 重新安装流程']],
  701. ['Content / Baike/Default', ['partial', '已由 Angular 百科审核入口替代;旧默认跳转的 BaikeEdit 版本列表因数据缺失而阻塞']],
  702. ['Content / Baike/BKVersionList', ['blocked-data', '目标 Schema 缺少旧 BaikeEdit 版本表、待审版本内容与历史版本数据']],
  703. ['Content / Baike/Version_API', ['blocked-data', '目标无 BaikeEdit 版本记录,无法审核并 Apply、取消审核、驳回或删除']],
  704. ['Content / Baike/BKList', ['blocked-data', '旧 BKList 按 Flow 读取 BaikeEdit 版本链,目标仅保留 Baike 主记录']],
  705. ['Content / Baike/BK_API', ['partial', '已由 baikeBatch 覆盖主词条审核、取消审核、推荐和取消推荐;版本删除/应用与奖励链缺失']],
  706. ['Content / Baike/Config', ['blocked-infrastructure', '目标没有 GuestConfig.BKOption 百科运行时、用户组权限和积分奖励消费者']],
  707. ['Content / Baike/Config_Submit', ['blocked-infrastructure', '目标没有百科创建/编辑/推荐运行时执行 CreatePoint/EditPoint/RemmPoint 规则']],
  708. ['Content / Baike/BkCheck', ['implemented', '已由 baikeEntries 按帐套、关键词、审核与推荐状态分页审查主词条']],
  709. ['FontPic/Index', ['blocked-data', '目标 Schema 缺少旧 FontPic 成品字体图主表与历史数据']],
  710. ['FontPic/FontPicInfo', ['blocked-data', '目标 Schema 缺少旧 FontPic 成品字体图详情数据']],
  711. ['FontPic/FontPicInfo_Submit', ['blocked-data', '目标 Schema 缺少旧 FontPic 成品字体图持久化模型']],
  712. ['FontPic/FontPic_API', ['blocked-data', '目标 Schema 缺少旧 FontPic 成品字体图可删除记录']],
  713. ['FontPic/Shape', ['implemented', '已由 fontShapes 按帐套、分类和关键词分页筛选图形素材']],
  714. ['FontPic/ShapeInfo', ['partial', '现有图形素材编辑、分类选择和安全预览已迁移;新增因旧 id 不可持久化而阻塞']],
  715. ['FontPic/ShapeInfo_Submit', ['partial', '现有素材由 saveFontShape 更新元数据;新增受旧 id 阻塞,图片替换受 Parse 文件适配器错误阻塞']],
  716. ['FontPic/Shape_API', ['implemented', '已由 fontShapeBatch 覆盖每批 1–100 条帐套隔离删除']],
  717. ['FontPic/ShapeType', ['implemented', '已由 fontShapeTypes 帐套隔离分类列表替代']],
  718. ['FontPic/ShapeTypeInfo', ['partial', '现有图形分类编辑已迁移;新增因旧 id 不可持久化而阻塞']],
  719. ['FontPic/ShapeTypeInfo_Submit', ['partial', '现有分类由 saveFontShapeType 白名单更新;新增明确返回 migration_blocked']],
  720. ['FontPic/ShapeType_API', ['implemented', '已覆盖分类列表和引用保护删除']],
  721. ['FontPic/Draft', ['blocked-data', '目标 Schema 缺少旧 FontPicDraft 草稿表与历史数据']],
  722. ['FontPic/DraftInfo', ['blocked-data', '目标 Schema 缺少旧 FontPicDraft 草稿详情数据']],
  723. ['FontPic/DraftInfo_Submit', ['blocked-data', '目标 Schema 缺少旧 FontPicDraft 草稿持久化模型']],
  724. ['FontPic/Draft_API', ['blocked-data', '目标 Schema 缺少旧 FontPicDraft 可删除记录']],
  725. ['Extend / Survey/SurveyManage', ['implemented', '已由 surveys 按帐套、状态和关键词分页读取旧 DesignAsk 问卷']],
  726. ['Extend / Survey/Survey_API', ['implemented', '已由 surveyBatch 覆盖问卷启停/删除及答卷嵌入明细删除']],
  727. ['Extend / Survey/SurveyAdd', ['partial', '现有问卷编辑页已迁移;新增因旧 id 无法持久化而明确阻塞']],
  728. ['Extend / Survey/SurveyAdd_Submit', ['partial', '现有问卷由 saveSurvey 校验时间、状态和访问设置后更新;新增明确阻塞']],
  729. ['Extend / Survey/SurveyItemList', ['implemented', '已由 surveyQuestions 校验问卷归属后按排序分页读取题目']],
  730. ['Extend / Survey/SurveyItemAdd', ['partial', '现有题目编辑页已迁移;新增因旧 id 无法持久化而明确阻塞']],
  731. ['Extend / Survey/SurveyItemAdd_Submit', ['partial', '现有题目由 saveSurveyQuestion 校验题型、选项和扩展 JSON 后更新;新增明确阻塞']],
  732. ['Extend / Survey/SurveyItem_API', ['implemented', '已由 surveyBatch 覆盖题目删除和按选择顺序重排']],
  733. ['Extend / Survey/SurveyResultChart', ['implemented', '已由 surveyResultChart 从旧 answer JSON 安全聚合选项计数并报告不可解析答卷']],
  734. ['Extend / Survey/SurveyResultList', ['implemented', '已由 surveyResults 提供帐套与问卷隔离的答卷分页和只读详情']],
  735. ['Office / Service/Default', ['implemented', '已由 Angular 客服席位导航替代旧重定向']],
  736. ['Office / Service/Seat', ['implemented', '已由 serviceSeats 帐套隔离、关键词和排序分页列表替代']],
  737. ['Office / Service/SeatAdd', ['partial', '客服席位新建/编辑页已迁移;旧固定密码自动开户行为因安全原因不迁移']],
  738. ['Office / Service/SeatAdd_Submit', ['partial', 'saveServiceSeat 可绑定现有同帐套账号并原子生成席位 ID;缺失账号时明确阻塞弱密码开户']],
  739. ['Office / Service/CodeAdd', ['partial', '现有 useType=12 欢迎语编辑页已迁移;新增受 Temp.id 保留字段冲突阻塞']],
  740. ['Office / Service/CodeAdd_Submit', ['partial', '现有欢迎语由 saveServiceCode 白名单更新名称、HTML 内容和主题;新增明确阻塞']],
  741. ['Office / Service/Seat_API', ['partial', 'serviceBatch 已覆盖席位和欢迎语删除;chat_del 因 ChatMsg 数据类缺失而阻塞']],
  742. ['Office / Service/CodeList', ['implemented', '已由 serviceCodes 仅按 useType=12 帐套隔离读取客服欢迎语']],
  743. ['Office / Service/MsgEx', ['blocked-data', '目标 Schema 缺少旧 ChatMsg 会话消息表与历史数据']],
  744. ['Office / Service/MsgInfo', ['blocked-data', '目标 Schema 缺少旧 ChatMsg 单条消息详情数据']],
  745. ['Office / Service/MsgList', ['blocked-data', '目标 Schema 缺少旧 ChatMsg 消息列表数据']],
  746. ['Shop / Store/StoreManage', ['implemented', '已由 storeApplications 按帐套、审核状态和关键词分页读取店铺']],
  747. ['Shop / Store/Store_API', ['partial', 'storeBatch 已覆盖审核、取消审核、推荐和取消推荐;因商品主表缺失而阻止真实删除店铺']],
  748. ['Shop / Store/StoreStyle', ['implemented', '已由 storeStyles 帐套隔离分页和关键词检索替代']],
  749. ['Shop / Store/Style_API', ['implemented', '已由 storeBatch 覆盖带店铺引用保护的样式删除']],
  750. ['Shop / Store/StoreStyleAdd', ['partial', '现有店铺样式编辑页已迁移;新增因旧 id 无法持久化而阻塞']],
  751. ['Shop / Store/StoreStyleAdd_Submit', ['partial', '现有样式由 saveStoreStyle 白名单更新模板路径、缩略图与说明;新增明确阻塞']],
  752. ['Shop / Store/StoreUpdate', ['partial', '现有店铺资料、所属账号和样式编辑页已迁移;旧模型 6 创建链缺失']],
  753. ['Shop / Store/StoreUpdate_Submit', ['partial', '现有店铺由 saveStoreApplication 校验同帐套用户和样式后更新;新增明确阻塞']],
  754. ['Shop / Store/Product', ['blocked-data', '旧 ZL_Commodities 商品主表缺失,目标 Product/StoreProduct 只有扩展碎片,无法重建商品列表']],
  755. ]);
  756. const blockedDataModules = new Map([
  757. ['Order', '目标库缺少订单、订单商品、支付与物流主表'],
  758. ['Pay', '目标库缺少支付流水、订单支付明细及可验证的交易数据'],
  759. ['Sale', '目标库缺少订单销售明细与可复算的销售事实表'],
  760. ['Shop / Coupon', '目标库无优惠券、促销实例与用户领取关系'],
  761. ['Shop / Refund', '目标库无订单退款与退款流水'],
  762. ['Product', '目标 Product 仅为旧商品附表,缺少 ZL_Commodities 主表'],
  763. ]);
  764. const blockedInfrastructureModules = new Map([
  765. ['Extend / DBTool', '依赖数据库备份恢复、建表或服务器文件系统,不适用于托管 Parse 运行时'],
  766. ['Files', '依赖旧站点文件系统与文件云配置,尚无新对象存储方案'],
  767. ['FontManager', '依赖服务器字体文件安装与删除权限'],
  768. ['Label / PowerShell', '依赖 Windows PowerShell 与服务器命令执行,云函数明确禁止'],
  769. ['Label / SiteDeploy', '依赖站点发布、远程命令与文件下载基础设施'],
  770. ['Site', '依赖 IIS 站点、虚拟目录、主机池与数据库服务器管理'],
  771. ['Template', '依赖旧模板/CSS 文件系统和 Zoomla 标签运行时'],
  772. ['Extend / MyCss', '依赖旧站点 CSS 文件读写与下载'],
  773. ['Mobile / WeiXin', '依赖新版微信、支付、模板消息和服务通知凭据'],
  774. ['User / Mail', '依赖邮件与短信服务商配置及发送凭据'],
  775. ]);
  776. const markdown = readFileSync(sourcePath, 'utf8');
  777. const entries = [];
  778. const occurrences = new Map();
  779. for (const line of markdown.split(/\r?\n/)) {
  780. const match = line.match(/^\| ([^|]+) \| (\d+) \| (.+) \|$/);
  781. if (!match || match[1].trim() === '模块 / 控制器') continue;
  782. const moduleName = match[1].trim();
  783. const actions = [...match[3].matchAll(/`([^`]+)`/g)].map((item) => item[1]);
  784. if (actions.length !== Number(match[2])) throw new Error(`${moduleName}: 动作数量不一致`);
  785. for (const action of actions) {
  786. const key = `${moduleName}/${action}`;
  787. const occurrence = (occurrences.get(key) || 0) + 1;
  788. occurrences.set(key, occurrence);
  789. let status = 'pending';
  790. let reason = '尚未逐项迁移或完成等价性核验';
  791. if (explicit.has(key)) [status, reason] = explicit.get(key);
  792. else if (blockedDataModules.has(moduleName)) { status = 'blocked-data'; reason = blockedDataModules.get(moduleName); }
  793. else if (blockedInfrastructureModules.has(moduleName)) { status = 'blocked-infrastructure'; reason = blockedInfrastructureModules.get(moduleName); }
  794. entries.push({ module: moduleName, action, occurrence, status, reason });
  795. }
  796. }
  797. if (entries.length !== 1042) throw new Error(`预期 1042 个后台动作,实际 ${entries.length}`);
  798. const generated = `// Generated by scripts/generate-admin-coverage.mjs. Do not edit by hand.\n` +
  799. `export type LegacyAdminCoverageStatus = 'implemented' | 'partial' | 'blocked-data' | 'blocked-infrastructure' | 'pending';\n` +
  800. `export interface LegacyAdminCoverageEntry { module: string; action: string; occurrence: number; status: LegacyAdminCoverageStatus; reason: string; }\n` +
  801. `export const LEGACY_ADMIN_COVERAGE: readonly LegacyAdminCoverageEntry[] = ${JSON.stringify(entries, null, 2)};\n`;
  802. const blockedEntries = entries.filter((entry) => entry.status === 'blocked-data' || entry.status === 'blocked-infrastructure');
  803. const blockedCounts = blockedEntries.reduce((counts, entry) => ({ ...counts, [entry.status]: (counts[entry.status] || 0) + 1 }), {});
  804. const escapeCell = (value) => String(value).replace(/\|/g, '\\|').replace(/\r?\n/g, '<br>');
  805. const blockedGenerated = `<!-- Generated by scripts/generate-admin-coverage.mjs. Do not edit by hand. -->\n# 最终无法等价迁移动作清单\n\n` +
  806. `本清单来自 1,042 项旧后台动作逐项核验结果。共 ${blockedEntries.length} 项明确阻塞:数据缺失 ${blockedCounts['blocked-data'] || 0} 项,基础设施缺失 ${blockedCounts['blocked-infrastructure'] || 0} 项。其余动作状态请查看 Angular 后台“迁移状态”页。\n\n` +
  807. `| 模块 | Action | 阻塞类型 | 原因 |\n|---|---|---|---|\n` +
  808. blockedEntries.map((entry) => `| ${escapeCell(entry.module)} | \`${escapeCell(entry.action)}\`${entry.occurrence > 1 ? ` #${entry.occurrence}` : ''} | ${entry.status === 'blocked-data' ? '数据缺失' : '基础设施缺失'} | ${escapeCell(entry.reason)} |`).join('\n') + '\n';
  809. if (checkOnly) {
  810. const current = readFileSync(outputPath, 'utf8');
  811. if (current !== generated) throw new Error('后台迁移覆盖台账已过期,请运行 npm run admin-coverage:generate');
  812. const blockedCurrent = readFileSync(blockedOutputPath, 'utf8');
  813. if (blockedCurrent !== blockedGenerated) throw new Error('最终无法迁移动作清单已过期,请运行 npm run admin-coverage:generate');
  814. console.log(`Admin coverage is current: ${entries.length} actions.`);
  815. } else {
  816. writeFileSync(outputPath, generated);
  817. writeFileSync(blockedOutputPath, blockedGenerated);
  818. console.log(`Generated ${outputPath}: ${entries.length} actions; ${blockedOutputPath}: ${blockedEntries.length} blockers.`);
  819. }