#!/usr/bin/env node import { readFileSync, writeFileSync } from 'node:fs'; import { resolve } from 'node:path'; const root = resolve(import.meta.dirname, '..'); const sourcePath = resolve(root, 'docs/migration/legacy-admin-inventory.generated.md'); const outputPath = resolve(root, 'src/app/admin/legacy-admin-coverage.generated.ts'); const checkOnly = process.argv.includes('--check'); const explicit = new Map([ ['User/GroupManage', ['implemented', '已由 Group 资源页与专用帐套组生命周期替代']], ['User/Group_API', ['implemented', '已覆盖帐套组列表与带引用保护的删除']], ['User/GroupAdd', ['implemented', '已由动态组表单与专用 saveGroup 替代']], ['User/GroupAdd_Submit', ['implemented', '已覆盖原子编号、父组校验与保存']], ['Content/ContentManage_Status', ['implemented', '已由 contentBatch 状态操作替代']], ['Content/ContentManage_Del', ['implemented', '已由 contentBatch 回收站操作替代']], ['Content/ContentMove', ['implemented', '已由内容详情与批量节点移动控件替代']], ['Content/ContentMove_Submit', ['implemented', '已由 contentBatch 帐套节点校验与移动替代']], ['Content/IHtmlToString', ['implemented', '已由 cms.content-normalizer 替代']], ['User/UserManage', ['partial', '已提供帐套用户列表、搜索、分页和批量操作;旧多条件筛选与导出仍待补齐']], ['User/UserAdd', ['partial', '已提供安全普通用户开户;旧扩展资料字段尚未全部复刻']], ['User/UserAdd_Submit', ['partial', '已覆盖开户、旧用户 ID 与默认账户初始化']], ['User/UserInfo', ['partial', '已提供动态详情、资料编辑、状态、分组和密码重置']], ['User/UserInfo_Submit', ['partial', '已覆盖安全字段更新;旧 UserBase 全字段仍待专用映射']], ['User/User_API', ['partial', '已覆盖锁定、解锁、移动分组;标注、归属管理员和手机归属地尚未迁移']], ['User/UserExp', ['partial', '现有账本可查询,管理员余额变更表单与事务规则尚未补齐']], ['Content/ContentManage', ['partial', '已提供帐套内容列表、搜索、分页、审核和批量操作']], ['Content/EditContent', ['partial', '可编辑安全主表字段;模型附表专用表单尚未全部生成']], ['Content/Content_Update', ['partial', '可更新安全主表字段;模型附表更新仅覆盖已迁移学习模型']], ['Content/ContentRecycle', ['partial', '可回收和恢复内容;独立回收站筛选页尚未提供']], ['Content/ContentManage_API', ['partial', '已覆盖恢复;永久删除、清空、专题移除和排序交换尚未迁移']], ['Content/GetMDFile', ['implemented', '旧动作固定返回空字符串,已由 legacyContentUtility 原样兼容为空内容']], ['Content/AddContent', ['partial', '现有 content_add 可为已规范化的六类学习模型生成主表与附表;任意旧动态模型表单仍缺失']], ['Content/ShowContent', ['partial', '已提供 CommonModel 详情与已规范化模型查询;旧评论、任意动态附表、前后篇及静态页预览未恢复']], ['Content/Content_Add', ['partial', '已由 content_add 原子创建已签约模型的 CommonModel 与规范化附表;未迁移模型会明确拒绝']], ['Content/Content_AddToNew', ['blocked-data', '目标缺少按 CommonModel.tableName 动态复制任意旧模型附表的完整结构与数据']], ['Content/Content_Draft', ['partial', 'content_add 支持把已规范化模型以 status=-3 写为草稿;任意旧动态模型仍不可创建']], ['Content/Content_API', ['implemented', '已由 legacyContentUtility duplicate-title 帐套隔离、大小写不敏感地检查重复标题']], ['Content/AddToSpec', ['blocked-data', 'CommonModel.specialId 仅存在于 Parse Schema,PostgreSQL 物理查询仍失败,无法安全读取专题关系']], ['Content/AddToSpec_Submit', ['blocked-data', '专题关系物理列不可可靠读写,且商品主表未迁移,不能伪造加入专题成功']], ['Content/ContentManage_Html', ['blocked-infrastructure', '云函数运行时没有旧模板解析器、站点根目录与静态 HTML 文件宿主']], ['Content/ContentManage_ToExcel', ['partial', '已由帐套隔离导出云函数与 Angular CSV 下载覆盖八个旧导出列;文件格式由 xlsx 降级为安全 CSV']], ['Content/ContentManage_Refresh', ['implemented', '已由 contentBatch refresh 批量同步刷新 createTime 与 upDateTime']], ['Content/ContentRelease', ['blocked-data', '目标 Schema 缺少 Content_ScheTask 定时内容任务及既有任务记录']], ['Content/ContentRelease_Submit', ['blocked-infrastructure', '目标没有 HFHelper 调度器与 ZL_Task_Content 脚本执行运行时']], ['Content/CreateHtmlContent', ['blocked-infrastructure', '云函数没有旧节点模板、标签解析器与站点文件系统,无法预览静态生成范围']], ['Content/Create_Submit', ['blocked-infrastructure', '目标没有 ContentHtmlHelper 和旧模板标签运行时,无法执行内容静态生成任务']], ['Content/CreateHtml', ['blocked-infrastructure', '目标云函数不能写入旧站点 HTML 目录,也没有旧模板渲染环境']], ['Content/ConCatch', ['blocked-data', '目标缺少旧采集项目、采集规则、来源站点与任务历史数据']], ['Content/CatchConfig', ['blocked-infrastructure', '目标没有 SiteOption.Coll_Allow/Coll_Key 配置模型及采集运行时消费者']], ['Content/CatchConfig_Submit', ['blocked-infrastructure', '仅保存采集开关不会产生可执行采集能力,目标也没有旧 SiteConfig 更新链']], ['Content/MarkDown', ['blocked-data', '目标 Schema 缺少旧 Content_MarkDown 主表与历史 Markdown 记录']], ['Content/MarkDown_Del', ['blocked-data', '目标没有可定位并删除的旧 Content_MarkDown 记录']], ['Design / Counter/VisitList', ['blocked-data', '目标 Schema 缺少旧 ZL_Com_VisitCount 访问明细表及 h5 访问记录']], ['Design / Counter/VisitInfoList', ['blocked-data', '目标没有可按 InfoID 聚合的 h5 访问明细和最近访问记录']], ['Design / Counter/VisitInfoDetail', ['blocked-data', '目标缺少指定 InfoID 的访问时间、IP、浏览器、系统、地域和来源明细']], ['Design / Counter/Counter_API', ['blocked-data', '目标没有可定位并删除的旧访问统计记录']], ['Extend / Counter/StatisticalCode', ['blocked-infrastructure', '目标缺少 SiteInfo.AllSiteJS 配置模型及在所有页面注入统计脚本的运行时']], ['Extend / Counter/StatisticalCode_Submit', ['blocked-infrastructure', '云函数不能仅保存任意全站脚本而没有可信的前端注入、CSP 与版本发布链']], ['Extend / Counter/Index', ['blocked-data', '目标 Schema 缺少 ZL_Com_VisitCount 数据,无法生成旧访问统计首页']], ['Extend / Counter/Site', ['blocked-data', '目标缺少全站访问明细与总访问计数']], ['Extend / Counter/Month', ['blocked-data', '目标缺少可按年月聚合的访问日期明细']], ['Extend / Counter/Year', ['blocked-data', '目标缺少可按年度和月份聚合的访问日期明细']], ['Extend / Counter/Local', ['blocked-data', '目标缺少访客地域 Address 明细']], ['Extend / Counter/Browser', ['blocked-data', '目标缺少访客浏览器标识与访问明细']], ['Extend / Counter/Os', ['blocked-data', '目标缺少访客操作系统标识与访问明细']], ['Extend / Counter/Channel', ['blocked-data', '目标缺少访问来源渠道与 Referer 明细']], ['CRM/Index', ['blocked-data', '目标 Schema 缺少旧 CRMS_Client 客户主表,无法进入客户列表首页']], ['CRM/ClientListDiag', ['partial', '现有用户资源页可按账号搜索并选择用户;旧 GroupID/UserID 多条件弹窗布局未逐项复刻']], ['CRM/ClientList', ['blocked-data', '目标 Schema 缺少旧 CRMS_Client 客户主表与 Model 48 动态附表']], ['CRM/ClientView', ['blocked-data', '目标缺少客户、联系人、服务记录和动态附表的联合详情数据']], ['CRM/ClientAdd', ['blocked-data', '目标没有可编辑或新增的 CRMS_Client 客户记录']], ['CRM/BiServer_Del', ['blocked-data', '目标 Schema 缺少旧 IServer 服务记录主表']], ['CRM/Client_Add', ['blocked-data', '目标缺少 CRMS_Client 与 Model 48 动态附表原子写入链']], ['CRM/ClientImport', ['blocked-infrastructure', '目标缺少客户主表,且旧 CRM_Client.xml 导入定义未迁入']], ['CRM/Import_DownTlp', ['blocked-infrastructure', '交付包没有旧 CRM_Client.xml 字段映射,无法等价生成 xlsx 模板']], ['CRM/Import_Client', ['blocked-infrastructure', '目标缺少 CRMS_Client/Model 48 写入结构及旧 XML+NPOI 导入流水线']], ['CRM/AddServiceRecord', ['blocked-data', '目标 Schema 缺少旧 IServer 客户服务记录主表']], ['CRM/AddServiceRecord_Submit', ['blocked-data', '目标无法保存 crm_ID、管理员、用户、优先级、类型、状态、附件和提醒等服务记录']], ['CRM/ServiceRecord_List', ['blocked-data', '目标没有可查询的旧 IServer 服务记录']], ['CRM/CType', ['implemented', '已由 crmClientTypes 提供帐套隔离、仅 ztype=ctype、名称搜索与分页列表']], ['CRM/CTypeAdd', ['implemented', '已由 Angular CRM 客户类型新建/编辑抽屉替代']], ['CRM/CType_Add', ['implemented', '已由 saveCrmClientType 覆盖名称防重、白名单保存和原子旧编号分配']], ['CRM/CType_Del', ['implemented', '已由 crmClientTypeBatch 覆盖每批 1–100 条帐套隔离删除']], ['CRM/Contact', ['blocked-data', '目标 Schema 缺少旧 CRMS_Contact 联系人主表;ContactInfo 是企业微信联系人,语义不等价']], ['CRM/ContactAdd', ['blocked-data', '目标无可编辑或新增的 CRMS_Contact 客户联系人记录']], ['CRM/Contact_Add', ['blocked-data', '不能把旧 CRM 联系人错写到企业微信 ContactInfo']], ['CRM/ContactImport', ['blocked-infrastructure', '目标缺少 CRM 联系人主表,且旧 CRM_Contact.xml 导入定义未迁入']], ['CRM/ContactImport_Down', ['blocked-infrastructure', '交付包没有旧 CRM_Contact.xml 字段映射,无法等价生成 xlsx 模板']], ['CRM/ContactImport_Upload', ['blocked-infrastructure', '目标缺少 CRMS_Contact 写入结构及旧 XML+NPOI 导入流水线']], ['CRM/BecomeCustomerList', ['blocked-data', '目标 Schema 缺少 user_becustomer 类型 Common_UserApply 经销商申请']], ['CRM/BecomeCustomerDetail', ['blocked-data', '目标缺少经销商申请、申请用户和资质详情数据']], ['CRM/BecomeCustomerDetailUpdate', ['blocked-data', '目标没有可更新的经销商申请 Info1/AdminRemind 记录']], ['CRM/BecomeCustomer_API', ['blocked-infrastructure', '目标缺少申请、LicenceFiles/LicenceUserSign、CRM 客户及 PDF 文件运行时,无法执行审核链']], ['ECharts / ECharts/EChartList', ['blocked-data', '目标 Schema 缺少旧 Content_Chart 图表定义主表与历史图表']], ['ECharts / ECharts/ChartCite', ['blocked-infrastructure', '目标缺少图表名称、站点 SiteUrl 和 /Common/ShowM 公开渲染链,无法生成旧 iframe/Markdown 引用']], ['ECharts / ECharts/ShowM', ['blocked-infrastructure', '目标没有 Content_Chart option/package 数据与旧 ECharts ShowM 渲染页面']], ['ECharts / ECharts/AddChart', ['blocked-infrastructure', '目标缺少 Content_Chart 持久层和旧七类图表配置生成运行时']], ['ECharts / ECharts/AddChart_Submit', ['blocked-data', '目标无法持久化 TName、ChartTitle、ToolBox、Package、option、SType 与 Tag 图表定义']], ['ECharts / ECharts/Default', ['blocked-data', '目标没有可按 SType 筛选分页的旧 Content_Chart 记录']], ['Exam/Papers_System_Manage', ['partial', '已由只读 ExamSysPapers 帐套列表、试卷名搜索、分页与详情替代;旧分类筛选尚未复刻']], ['Exam/Papers_System_Add', ['partial', '现有试卷详情可查看;qids/questList、计时、价格与分值需专用写入链后才能编辑或新增']], ['Exam/Paper_QuestionManage', ['partial', '已提供 PaperQuestions 大题分组与 ExamSysQuestions 历史数据只读页;按单张试卷联合编排尚未复刻']], ['Exam/ViewPaperCenter', ['partial', '试卷与试题详情均可查看;旧按题型分组、答案和分数排版预览尚未复刻']], ['Exam/QuestList', ['partial', '已由 ExamSysQuestions 帐套隔离列表、标题搜索、分页和详情替代;年级/难度/版本组合筛选待补']], ['Exam/AddEngLishQuestion', ['blocked-infrastructure', '旧英语试题页依赖复合小题、音频/图片上传和答案解析器;目标仅保留只读试题记录']], ['Exam/QuestShow', ['partial', '已提供 ExamSysQuestions 主记录只读详情;旧复合小题递归展示和答案排版尚未复刻']], ['Exam/Setting', ['blocked-data', '目标 Schema 缺少旧 Exam_Sys_Answer 答卷明细,无法按最近一周统计并重算试题难度']], ['Exam/QuestGrade', ['partial', '已由 GradeCate/Grade 多级字典页维护旧题型、难度、年级和教材版本选项;考试专用分类快捷筛选待补']], ['Exam/VersionList', ['blocked-data', '目标 Schema 缺少旧 Exam_Version 教材版本/册/章节树与历史数据']], ['Exam/AddVersion', ['blocked-data', '目标无可定位或新建的 Exam_Version 版本树记录']], ['Exam/SchoolManage', ['blocked-data', '目标 Schema 缺少旧 School 学校主表与省市县数据']], ['Exam/AddSchool', ['blocked-data', '目标无可编辑或新增的 School 记录']], ['Exam/ClassRoomManage', ['blocked-data', '目标 Schema 缺少旧 ClassRoom 班级主表与学校、年级、教师关系']], ['Exam/AddClassRoom', ['blocked-data', '目标无可编辑或新增的 ClassRoom 记录']], ['Exam/StudentList', ['blocked-data', '目标 Schema 缺少 ClassRoomStudent 班级学员关系、审核状态与学员类型']], ['Exam/CourseManage', ['blocked-data', '目标 Schema 缺少旧 Course 课程主表;CourseBinding 是小树课程绑定,语义不等价']], ['Exam/AddCourse', ['blocked-data', '目标无旧 Course 名称、科目、教师与课程结构记录']], ['Exam/order', ['partial', '现有 ExamPoint 由 saveExamPoint 维护父级与 orderBy;旧打开页面即重写全表连续排序的副作用未保留']], ['Exam/ToScore', ['blocked-data', '目标 Schema 缺少旧 Exam_Sys_Answer 主观题答卷与评分状态']], ['Exam/SelQuestion', ['partial', '已由只读 ExamSysQuestions 搜索与选择列表提供数据;旧 issmall/qtype 多条件弹窗布局待补']], ['Exam/Paper_AddLarge', ['partial', '现有 PaperQuestions 与试题详情可查询;按选中题目即时聚合大题 JSON 的专用接口待补']], ['Exam/Papers_Add', ['blocked-infrastructure', '试卷写入必须原子维护 qids/questList、分类、计时、价格与题目分值;当前只读迁移不允许通用表单破坏结构']], ['Exam/Question_Add', ['blocked-infrastructure', '旧试题写入依赖题型答案解析、复合小题、知识点和上传资源;当前只读迁移不能安全保存']], ['Exam/QuestGrade_Add', ['partial', '现有 Grade 专用云函数可新增和编辑多级选项;考试页的 cate=4/5/6/7 快捷入口待补']], ['Exam/Version_GetList', ['blocked-data', '目标缺少可按 pid 查询的 Exam_Version 版本树']], ['Exam/Version_Add', ['blocked-data', '目标缺少 Exam_Version 版本、册、章节持久层']], ['Exam/School_Add', ['blocked-data', '目标缺少 School 主表,无法保存学校类型、地区、校徽和状态']], ['Exam/ClassRoom_Add', ['blocked-data', '目标缺少 ClassRoom 与学校、教师、年级关系持久层']], ['Exam/Course_Add', ['blocked-data', '目标缺少旧 Course 主表和科目树关系']], ['Exam/Setting_Update', ['blocked-data', '目标缺少 Exam_Sys_Answer 作答统计,不能执行 CountDiffcult 难度重算']], ['Exam/News', ['partial', '已由只读 ContentPublish 报刊内容列表、搜索、分页与详情替代;旧专用树状布局待补']], ['Exam/NewsAdd', ['partial', '现有报刊记录可查看;新建/编辑需专用旧编号和父子关系写入链']], ['Exam/NewsAdd_Submit', ['partial', 'ContentPublish 数据已迁入但当前只读,尚未开放 newsName/nid 的专用原子保存']], ['Exam/News_API', ['partial', '现有报刊详情可安全读取;删除与 publish_GetModel 组合响应尚未开放']], ['Exam/NewsDiv', ['partial', 'ContentPublish 历史子项可查看;按 pid 的专用分区列表待补']], ['Exam/PublishDesc', ['partial', 'ContentPublish 与 PublishNode 历史数据均可查看;按 nid 联合展示待补']], ['Exam/PubNodeAdd', ['partial', '现有 PublishNode 详情可查看;父节点选择与安全新增/编辑尚未开放']], ['Exam/PubNodeAdd_Submit', ['partial', 'PublishNode 数据已迁入但当前只读,等待父级循环校验和旧编号原子分配']], ['Exam/PublishAdd', ['partial', '现有 ContentPublish 详情可查看;报刊父项上下文与专用编辑器尚未复刻']], ['Exam/PublishAdd_Submit', ['partial', 'ContentPublish title/imgPath/json/pid/cdate/attachFile 写入尚未开放专用校验流程']], ['Exam/PublishDesign', ['blocked-infrastructure', '旧报刊可视化设计器的前端资产、布局协议与渲染运行时未迁入']], ['Helper/Index', ['blocked-infrastructure', '旧动作读取服务器 DBConfig.json 并执行本地 SQL 脚本建表;云函数没有该文件运行时,目标数据类已由受控迁移预置']], ['Helper/HelpInfo', ['blocked-infrastructure', '目标缺少 Notification 帮助数据与旧 SignalR 管理员分组 HelpInfo 推送协议']], ['Hms/UList', ['blocked-data', '目标用户数据未保留旧 ZL_UserBase.cardType 与 ICQ 到期时间']], ['Hms/VipAdd', ['blocked-data', '目标没有旧 cardType 空值状态,不能判定可开通主题大师 VIP 卡的用户']], ['Hms/VipAddJump', ['blocked-data', '旧七档主题大师卡与当前小树 VIP 合伙人等级不是同一业务,不能复用 VIP 字段']], ['Hms/VipUpdate', ['blocked-data', '目标未保留旧 cardType 与 ICQ 卡片到期时间,无法还原编辑页']], ['Hms/VipUpdate_Submit', ['blocked-data', '目标未保留旧 cardType/ICQ,不能安全重算卡种与期限']], ['Hms/VipRenewal', ['blocked-data', '目标没有旧主题大师卡到期时间,无法展示续约上下文']], ['Hms/VipRenewal_Submit', ['blocked-data', '目标没有旧 cardType/ICQ,不能按卡种天数或指定日期续约']], ['Hms/VipOverdue', ['blocked-data', '目标没有旧主题大师卡到期时间,无法展示强制过期上下文']], ['Hms/VipOverdue_Submit', ['blocked-data', '目标没有旧 ICQ 到期时间,不能误写当前 VIP 合伙人字段']], ['Hms/OList', ['blocked-data', '目标 Schema 缺少旧 ZL_Orderinfo 与 ZL_CartPro,无法查询主题大师 VIP 卡订单']], ['Index/Default', ['implemented', '已由受 adminGuard 保护的 Angular 后台壳与 /admin/dashboard 替代;托管服务无需旧安装页分支']], ['Index/Main', ['implemented', '已由 Angular AdminShellComponent 主框架替代']], ['Index/WorkTable', ['implemented', '已由 dashboard 云函数和 Angular 管理概览替代']], ['Index/Scence', ['blocked-infrastructure', '目标缺少 SiteOption.Desk 与管理员 Theme/StructureID 持久层及旧主题桌面运行时']], ['Index/FuncList', ['partial', 'Angular 侧栏与资源目录已提供功能入口;旧完整功能磁贴和权限裁剪布局尚未逐项复刻']], ['Index/Lockin', ['blocked-infrastructure', '目标没有 B_Admin.LockScreen 与 ASP.NET Session 锁屏状态,不能以停用账号冒充屏幕锁']], ['Index/SiteMap', ['partial', '资源目录和后台快捷入口已支持搜索;旧 SiteMap_Admin.config 的全部 XML 菜单未迁入']], ['Index/Lockin_Submit', ['blocked-infrastructure', '旧提交动作为空且锁屏状态依赖 ASP.NET Session/B_Admin,云函数无等价数据']], ['Index/ASCXLoad', ['blocked-infrastructure', 'Angular 构建不允许按请求路径动态执行服务器 Razor/ASCX 局部视图']], ['Index/Login', ['implemented', '已由 /admin/login 登录页、Parse 登录接口和登录态恢复替代']], ['Index/Login_AJAX', ['implemented', '已由 Parse 密码校验、admin meta 权限复核和统一错误处理替代']], ['Index/Logout', ['implemented', '已由 logout 云函数撤销 _Session 并清理 Angular sessionStorage 替代']], ['Index/API', ['blocked-infrastructure', '目标缺少 SiteOption.Admin_ShowAnimate 全局持久化配置']], ['Index/AccountForm', ['blocked-infrastructure', '目标没有 SiteOption.RegManager、管理员申请模型和审批链,不能开放高权限自助申请']], ['Index/AccountForm_API', ['blocked-infrastructure', '目标没有管理员申请开关与待审批模型,不能提供公开账号/邮箱探测接口']], ['Index/AccountForm_Submit', ['blocked-infrastructure', '旧动作随机生成密码并直接授予固定高权限角色,目标权限模型不等价且没有审批链']], ['Manager/ModifyPassword', ['implemented', '已由 Angular 修改密码页要求原密码、新密码和确认密码替代']], ['Manager/ModifyPassword_Submit', ['implemented', 'changeOwnPassword 验证原密码、更新当前管理员并撤销该账号全部会话后强制重登']], ['Content / MarkDown/Index', ['blocked-data', '目标 Schema 缺少旧 MarkDown 主表及历史记录']], ['Content / MarkDown/MD', ['blocked-data', '目标没有可新建或编辑的 MarkDown 记录']], ['Content / MarkDown/Index_submit', ['blocked-infrastructure', '目标缺少 MarkDown 持久层且 Parse 文件适配器不能替代旧本地上传目录']], ['Content / MarkDown/Dels', ['blocked-data', '目标没有 Markdown 记录与对应服务器文件可同步删除']], ['Content / MarkDown/Preview', ['blocked-infrastructure', '目标缺少 Markdown 文件、SiteInfo.SiteUrl 与旧 /PreView/md 渲染运行时']], ['User / Message/Message', ['blocked-data', '目标缺少旧 Message 站内信主表与收发历史;MailTemp 仅是邮件模板']], ['User / Message/MessageSend', ['blocked-data', '目标没有可编辑的站内信草稿、收件人、抄送和附件记录']], ['User / Message/Message_Add', ['blocked-data', '目标缺少站内信发送与草稿持久层']], ['User / Message/MessageRead', ['blocked-data', '目标没有站内信详情与已读状态记录']], ['User / Message/Message_API', ['blocked-data', '目标没有可删除的站内信记录']], ['Mobile/Index', ['blocked-infrastructure', '旧动作只有已丢失的 Mobile Razor 视图,没有页面结构、交互或资源基线']], ['Mobile/MobileBrower', ['blocked-infrastructure', '旧移动浏览器预览页只有已丢失的 Razor 视图,目标没有对应渲染运行时']], ['Content / Node/ZhiDing', ['partial', 'saveNode/nodeBatch 已在移动时安全维护层级;拒绝旧版将全部有效栏目强制扁平为根节点的破坏性修复']], ['Content / Node/UnionNode_Merge', ['blocked-data', '旧合并同时改写 CommonModel 与未迁入的 ZL_Commodities,缺商品主表时不能执行半合并']], ['Office / OA/Default', ['blocked-data', '目标缺少旧 OA_AuditFlow 审核流主表与历史数据']], ['Office / OA/FlowInfo', ['blocked-data', '目标没有旧审核流名称、模型、模板、角色用户和会签配置']], ['Office / OA/FlowInfo_Submit', ['blocked-data', '目标缺少 OA_AuditFlow 持久层;MisProcedure 是不同版本结构']], ['Office / OA/Flow_API', ['blocked-data', '目标没有可删除的旧审核流记录']], ['Office / OA/SelFlowModel', ['blocked-data', '目标缺少审核流可绑定的旧 Mis_Model 与套红模板关系']], ['Office / OA/FlowItem', ['blocked-data', '目标缺少 OA_AuditFlowItem 审核步骤表']], ['Office / OA/FlowItemInfo', ['blocked-data', '目标没有审核步骤、绑定用户、父步骤、会签、转交和退回记录']], ['Office / OA/FlowItemInfo_Submit', ['blocked-data', '目标缺少审核步骤持久层']], ['Office / OA/FlowItem_API', ['blocked-data', '目标没有可删除的审核步骤记录']], ['Office / OA/SelUserModel', ['implemented', '已由帐套隔离的 Angular 用户管理列表和账号搜索替代']], ['Office / OA/AddMisModel', ['blocked-data', 'DocModel 与旧 Mis_Model 的 ModelContent/BindNode/DocType/WordPath 不等价']], ['Office / OA/AddMisModel_Submit', ['blocked-infrastructure', '目标缺少旧 Mis_Model 持久层和 FileGuid 套红模板文件运行时']], ['Office / OA/AddSign', ['blocked-data', '目标 MisSign 是考勤时间表,不是 OA_Sign 签章模型']], ['Office / OA/AddSign_Submit', ['blocked-data', '目标缺少 OA_Sign 图片、名称、口令、密钥、所属用户与创建人持久层']], ['Office / OA/AddSign_Delete', ['blocked-data', '目标没有可删除的 OA_Sign 签章记录']], ['Office / OA/AddWorkFlowType', ['implemented', '已由 Angular OA 流程类型新建/编辑抽屉替代']], ['Office / OA/AddWorkFlowType_Submit', ['implemented', 'saveMisType 校验名称/说明、防重并原子分配旧数字 ID']], ['Office / OA/AddWorkFlowType_Delete', ['implemented', 'misTypeBatch 提供帐套隔离和流程引用保护删除']], ['Office / OA/ApplyManage', ['blocked-data', '目标缺少 OA_Document 文档申请主表']], ['Office / OA/ApplyManage_Delete', ['blocked-data', '目标没有可删除的 OA 文档申请记录']], ['Office / OA/FlowTypeList', ['implemented', 'misTypes 提供帐套隔离、名称搜索和分页列表']], ['Office / OA/MailManage', ['implemented', '已由帐套隔离的 Angular 用户通讯录列表替代']], ['Office / OA/MisModelManage', ['blocked-data', '目标缺少旧 Mis_Model 套红文档模型数据']], ['Office / OA/MisModelManage_Delete', ['blocked-data', '目标没有可删除的旧套红文档模型']], ['Office / OA/OAConfig', ['blocked-infrastructure', '旧动作只有已丢失的 OAConfig Razor 视图,目标没有对应配置模型']], ['Office / OA/SelModelFieds', ['partial', '目标 Model 数据可只读查看;旧按 ModelType 回填字段的 OA Razor 交互未迁入']], ['Office / OA/SignManage', ['blocked-data', '目标缺少 OA_Sign 签章列表;MisSign 是不等价的考勤时间表']], ['Page/ApplyAudit', ['blocked-data', '目标 Schema 缺少旧 PageReg 用户黄页申请主表与审核状态']], ['Page/ApplyInfo', ['blocked-data', '目标缺少 PageReg 申请详情、用户动态字段和样式关联']], ['Page/PageStyle', ['implemented', '已由 pageStyles 提供帐套隔离、名称搜索、排序和分页列表']], ['Page/PageStyleAdd', ['implemented', '已由 Angular 黄页样式新建/编辑抽屉替代']], ['Page/PageContent', ['partial', '现有 CommonModel 可管理普通内容;PageReg 与黄页专属模型范围缺失']], ['Page/EditContent', ['partial', '现有内容详情可查看;PageReg 与 PageTemplate 黄页编辑上下文缺失']], ['Page/Content_Edit', ['partial', '现有内容主字段可安全编辑;黄页模型附表与 PageReg 关系尚未迁入']], ['Page/PageConfig', ['blocked-infrastructure', '目标没有 SiteOption.RegPageStart/Page_ContentStatus/Page_UserCanNode 配置层']], ['Page/PageTemplate', ['blocked-data', 'PageTemplate 为空且目标缺少 PageReg 用户归属,无法还原用户与公共模板树']], ['Page/PageTemplateAdd', ['blocked-data', '目标缺少 PageReg,不能确定模板 RegID、用户和样式上下文']], ['Page/SetPageOrder', ['blocked-data', '目标没有可按 PageReg 隔离的页面模板集合']], ['Page/PageConfig_Update', ['blocked-infrastructure', '目标云函数架构没有旧黄页站点配置持久层']], ['Page/PageTemplate_Add', ['blocked-data', '目标缺少 PageReg 用户归属和旧模型复选关系,不能安全新增页面模板']], ['Page/SetPageOrder_Batch', ['blocked-data', '目标没有可按 PageReg 隔离的模板排序集合']], ['Page/SetPageOrder_UpMove', ['blocked-data', '目标没有可按 PageReg 隔离的相邻模板顺序']], ['Page/SetPageOrder_DownMove', ['blocked-data', '目标没有可按 PageReg 隔离的相邻模板顺序']], ['Page/Style_Add', ['implemented', '已由 savePageStyle 校验路径、状态、防重并原子分配旧 PageNodeid']], ['Page/Apply_Update', ['blocked-data', '目标缺少 PageReg 申请主表、黄页模型附表和用户申请字段']], ['Office / Plat/Default', ['blocked-data', '旧默认页跳转到已缺失的 Blog_Msg 动态管理,目标没有可进入的信息首页']], ['Office / Plat/AddComp', ['implemented', '已由 Angular 协同办公企业新建/编辑抽屉替代']], ['Office / Plat/AddComp_Submit', ['implemented', 'savePlatformCompany 校验企业资料、创建人、防重并原子分配旧数字 ID']], ['Office / Plat/AuditApply', ['blocked-data', '目标 Schema 缺少旧 Common_UserApply 协同办公申请主表']], ['Office / Plat/AuditApply_Agree', ['blocked-data', '目标没有可批量通过并改为状态 99 的协同办公申请']], ['Office / Plat/AuditApply_Reject', ['blocked-data', '目标没有可批量拒绝并改为状态 -1 的协同办公申请']], ['Office / Plat/CompList', ['implemented', 'platformCompanies 提供帐套隔离、关键词、旧编号排序和分页列表']], ['Office / Plat/CompInfo', ['implemented', '已由协同办公企业详情抽屉显示完整 PlatComp 字段']], ['Office / Plat/CreateComp', ['partial', 'Angular 企业表单已覆盖主表创建;旧动作仅剩已丢失 Razor 向导,未知交互无法恢复']], ['Office / Plat/MemberList', ['implemented', 'platformCompanyMembers 从 _User.legacyUserPlat 安全还原企业成员列表']], ['Office / Plat/Member_Add', ['implemented', 'platformCompanyMemberBatch 按同帐套账号新增或移动旧 User_Plat 成员']], ['Office / Plat/Member_API', ['implemented', 'platformCompanyMemberBatch remove 等价删除成员的 legacyUserPlat 记录']], ['Office / Plat/PlatInfoDeail', ['blocked-data', '目标 Schema 缺少旧 Blog_Msg 动态消息主表']], ['Office / Plat/PlatInfoDetail_Submit', ['blocked-data', '目标没有可编辑正文与日期的旧协同办公动态消息']], ['Office / Plat/PlatInfoManage', ['blocked-data', '目标没有 Blog_Msg 顶级动态、回收状态和关键词数据']], ['Office / Plat/TopicList', ['blocked-data', '目标 Schema 缺少旧 Plat_Topic 话题主表与星标状态']], ['Office / Plat/WordTlp', ['blocked-infrastructure', '旧文字模板仅剩已丢失的 Razor 视图,目标没有模板数据或渲染协议']], ['Office / Plat/API', ['partial', 'platformCompanyBatch 已覆盖带成员/角色引用保护的 comp_del;消息与话题分支因主表缺失而阻塞']], ['Office / Plat/Crud', ['blocked-data', '目标 Schema 缺少旧 Plat_Group 企业部门/群组树']], ['Office / Plat/CrudAdd', ['blocked-data', '目标没有可编辑的企业群组、上级和成员管理员关系']], ['Office / Plat/CrudAdd_Submit', ['blocked-data', '目标缺少 Plat_Group 的 FirstID/Depth/ManageIDS/MemberIDS 持久层']], ['Office / Plat/GroupAdmin_API', ['blocked-data', '目标没有可删除的 Plat_Group 企业群组记录']], ['Printer/Index', ['blocked-infrastructure', '旧控制器只返回已丢失的 Razor 视图;目标 Schema 又缺少 PrintDevice/PrintTlp/PrintMessage,且旧飞印客户端依赖明文 HTTP 第三方协议,无法安全等价恢复']], ['User / PrivacyPolicy/LicenceList', ['blocked-data', '目标 Schema 缺少 ZL_LicenceFiles 用户协议定义、强制签署类型与限定用户/用户组数据']], ['User / PrivacyPolicy/LicenceAdd', ['blocked-data', '目标没有可编辑或新增的用户协议、PDF 路径、字段映射和适用范围记录']], ['User / PrivacyPolicy/LicenceAdd_Submit', ['blocked-data', '目标缺少 LicenceFiles 持久层及协议 PDF 文件,不能只保存失效路径']], ['User / PrivacyPolicy/Licence_API', ['blocked-data', '目标没有可启用、停用或删除的用户协议定义']], ['User / PrivacyPolicy/LicenceUserSign', ['blocked-data', '目标 Schema 缺少 ZL_LicenceUserSign 用户签约历史及协议、用户关联']], ['User / Promo/Index', ['blocked-data', '旧入口只重定向到提现申请页,目标缺少 Cash 提现主表,无法提供等价落点']], ['User / Promo/WD', ['blocked-data', '目标 Schema 缺少 Cash 提现申请、手续费、结果、凭证与处理状态记录']], ['User / Promo/WD_API', ['blocked-data', '目标没有可审核的提现申请记录']], ['User / Promo/WDAudit', ['blocked-data', '目标缺少指定提现申请的金额、手续费、账户和处理详情']], ['User / Promo/WDAudit_Accept', ['blocked-data', '目标缺少可原子审核的 Cash 提现事务记录']], ['User / Promo/WDAudit_Reject', ['blocked-data', '目标缺少 Cash 提现申请及对应预扣余额账本,不能安全执行拒绝退款']], ['User / Promo/PromoList', ['implemented', '已由 UserPromotion 虚拟资源和 userPromotions 云函数从 _User.legacyUserData.ParentUserID 还原推广关系、人数、日期及邀请人筛选']], ['User / Promo/UserBank', ['blocked-data', '目标 Schema 缺少 User_Bank 提现账户及审核状态数据']], ['User / Promo/UserBankAdd', ['blocked-data', '目标没有可编辑的开户人、卡号、账户类型和开户行记录']], ['User / Promo/UserBankAdd_Submit', ['blocked-data', '目标缺少 User_Bank 持久层,不能把提现账户错写到发票银行字段']], ['User / Promo/UserBank_API', ['blocked-data', '目标没有可删除、审核或取消审核的提现账户记录']], ['Pub/PubManage', ['blocked-data', '目标 Pub 模块定义与 PubTw/PubWTHD/PubZXDC 提交类均为空,无法还原互动模块列表']], ['Pub/Pub_API', ['blocked-infrastructure', '旧删除/复制/恢复依赖 Pub 定义与动态表,modelname 还会检查 SQL 物理表;目标没有可操作记录或动态建表运行时']], ['Pub/Pubinfo', ['blocked-data', '旧动作只跳转到指定 Pub 定义编辑页,目标 Pub 没有任何历史模块']], ['Pub/PubAdd', ['blocked-infrastructure', '新增互动模块需要动态模型、表、标签与模板选择,目标云函数没有等价创建运行时']], ['Pub/PubAdd_Submit', ['blocked-infrastructure', '旧提交会动态建 SQL 表、Model/ModelField、XML 标签及两套服务器 HTML 模板,云函数不能等价执行']], ['Pub/Pubsinfo', ['blocked-data', '目标没有 Pub 定义可确定提交表,三个已签约 Pub 提交类也全部为空']], ['Pub/PubsinfoAdd', ['blocked-data', '目标缺少互动模块定义、动态字段与可编辑的提交记录']], ['Pub/PubsinfoAdd_Submit', ['blocked-data', '目标无法根据空的 Pub 定义选择动态提交表并保存系统字段与模型字段']], ['Pub/PubInfo_API', ['blocked-data', '目标没有可删除、审核或取消审核的互动提交记录']], ['Pub/PubInfo2_API', ['blocked-data', '旧企业入驻分支硬编码依赖缺失的 ZL_Pub_BDQYSH 提交表,不能直接改写企业与用户归属']], ['Pub/PubsinfoReply', ['blocked-data', '目标没有互动父记录、动态字段和回复上下文']], ['Pub/PubsinfoReply_Submit', ['blocked-data', '目标缺少可确定回复表的 Pub 定义及父提交记录']], ['Push/Index', ['blocked-data', '旧入口只跳转到推送 API 列表,目标缺少 Mobile_PushAPI 配置数据']], ['Push/APIList', ['blocked-data', '目标 Schema 缺少 Mobile_PushAPI 的别名、平台、AppKey 与密钥记录']], ['Push/API_del', ['blocked-data', '目标没有可定位并删除的推送服务配置']], ['Push/AddAPI', ['blocked-data', '目标没有可编辑或新增的极光推送 API 配置模型']], ['Push/AddAPI_Submit', ['blocked-data', '签约数据库未提供可安全存储和轮换推送 AppKey/AppSecret 的配置类']], ['Push/PushMsg', ['blocked-data', '目标缺少可选择的推送 API 配置与设备受众数据']], ['Push/PushMsg_Submit', ['blocked-infrastructure', '目标没有 JPush 凭据、SDK 消费者、ZL_UserBase.UC 设备注册号或移动端注册链,无法真实发送并记录结果']], ['Push/PushTlp', ['blocked-data', '目标 Schema 缺少 Mobile_PushTlp 推送模板与状态数据']], ['Push/AddPushTlp', ['blocked-data', '目标没有可编辑或新增的推送模板记录']], ['Push/AddPushTlp_Submit', ['blocked-data', '目标缺少推送模板名称、标题、内容和参数持久层']], ['Push/PushTlp_API', ['blocked-data', '目标没有可启用、停用或删除的推送模板']], ['Push/MsgList', ['blocked-data', '目标 Schema 缺少 Mobile_PushMsg 发送历史、受众与结果记录']], ['Extend / PWA/Default', ['blocked-infrastructure', '旧入口跳转到离线缓存配置;目标没有可动态改写已部署前端的 PWA 控制面']], ['Extend / PWA/Default_Submit', ['blocked-infrastructure', '旧提交为空操作,目标不伪造无效果的保存成功']], ['Extend / PWA/Mobile', ['blocked-infrastructure', '目标缺少旧 SiteOption PWA 配置、manifest 文件和多尺寸图标资产']], ['Extend / PWA/Mobile_Submit', ['blocked-infrastructure', '云函数不能缩放上传图标、写 manifest.json、注入站点 head 或持久化旧 SiteConfig']], ['Extend / PWA/Offline', ['blocked-infrastructure', '目标没有旧 PWA_PC_Enable/Exts/IndexUrl/PreCache 配置与服务器模板']], ['Extend / PWA/Offline_Submit', ['blocked-infrastructure', '云函数不能读取 pwa_sw_js.tlp 并覆盖已部署站点根目录 /sw.js']], ['Extend / QuartzTask/TaskList', ['blocked-data', '目标 Schema 缺少 QuartzNetTask 任务定义、类型、状态、次数和历史记录;空 SenTask 语义不等价']], ['Extend / QuartzTask/ViewLog', ['blocked-data', '目标没有 QuartzNetTask.Log 执行日志可按任务查看']], ['Extend / QuartzTask/TaskAdd', ['blocked-infrastructure', '目标没有 Quartz IScheduler、ScheduleTaskHandler 与任务持久层,无法创建一次或循环任务']], ['Extend / QuartzTask/TaskEdit', ['blocked-data', '目标没有可编辑的 Quartz 任务定义']], ['Extend / QuartzTask/TaskUpdate', ['blocked-infrastructure', '目标没有可同步更新持久层与 Quartz 调度器的控制面']], ['Extend / QuartzTask/ExecuteNow', ['blocked-infrastructure', '云函数环境没有已注册的 Quartz 作业可立即触发']], ['Extend / QuartzTask/TaskDelete', ['blocked-infrastructure', '目标没有可同时删除 Quartz 作业与任务记录的调度控制面']], ['Extend / QuartzTask/TaskDeleteRange', ['blocked-infrastructure', '目标没有可批量注销 Quartz 作业与删除任务记录的控制面']], ['Extend / QuartzTask/TaskPause', ['blocked-infrastructure', '云函数环境没有常驻 Quartz 调度器或可暂停作业']], ['Extend / QuartzTask/TaskResume', ['blocked-infrastructure', '云函数环境没有常驻 Quartz 调度器或可恢复作业']], ['Design / Resource/ResList', ['implemented', '已由 DesignRes 专用帐套列表替代,支持分页、名称/用途/路径搜索和 ztype 精确筛选']], ['Design / Resource/ResourceAdd', ['partial', '现有资源可编辑元数据并查看原文件/预览图路径;新增与文件替换受 Parse 文件适配器阻塞']], ['Design / Resource/ResourceAdd_Submit', ['partial', 'saveDesignResource 已白名单更新 Name/style/use/Useage/ZStatus/ZType/fun 并保护旧 ID 与文件路径;上传明确返回 migration_blocked']], ['Design / Resource/Resource_API', ['implemented', '已由 designResourceBatch 覆盖帐套隔离的单条与每批 1–100 条资源记录删除']], ['Design / Scene/SceneList', ['implemented', '已由 designScenes 按旧 ZType=0、TlpID=0、Status<>-2 条件提供帐套隔离、搜索和分页']], ['Design / Scene/SceneListRecycle', ['implemented', 'Angular 场景页可切换回收站,designScenes 严格筛选 Status=-2']], ['Design / Scene/SceneAdd', ['implemented', '已由 Angular 现有场景编辑抽屉替代,并将布局、组件、资源、路径、编号和模板关系锁为只读']], ['Design / Scene/SceneAdd_Submit', ['implemented', 'saveDesignScene 白名单更新旧页 9 个字段、校验帐套用户并同步 UserName 与更新时间']], ['Design / Scene/Scene_API', ['implemented', 'designSceneBatch 覆盖回收、恢复、彻底删除;createDesignSceneTemplate 原子分配模板与副本场景编号并提供失败补偿']], ['Design / Template/GoDesign', ['partial', 'designTemplateEditorTarget 可按模板解析真实场景 GUID 与旧跳转路径;旧 /design/default 可视化编辑器资产及运行时未迁入']], ['Design / Template/TlpList', ['implemented', 'designTemplates 提供帐套隔离、名称搜索、classId 筛选和正常模板分页']], ['Design / Template/TlpListRecycle', ['implemented', 'Angular 模板页可切换回收站,designTemplates 严格筛选 ZStatus=-2']], ['Design / Template/TemlateAdd', ['implemented', '已由 Angular 可视化模板新建/编辑抽屉替代,并明确保留丢失分类的原始 classId']], ['Design / Template/TemlateAdd_Submit', ['implemented', 'saveDesignTemplate 覆盖旧表单字段;新增时原子创建模板与空模板场景并提供失败补偿']], ['Design / Template/Temlate_API', ['implemented', 'designTemplateBatch 覆盖回收、恢复和彻底删除,并在永久删除时清理关联模板场景']], ['User / Role/UserRole', ['implemented', '已由 roles 用户角色列表覆盖帐套隔离、搜索和分页']], ['User / Role/UserRoleAdd', ['implemented', '已由 Angular 用户角色新建/编辑抽屉替代']], ['User / Role/UserRoleAdd_Submit', ['implemented', 'saveRole 已覆盖用户角色名称防重、原子旧编号和白名单保存']], ['User / Role/UserRoleAuth', ['implemented', 'roleAuthorization 已联合返回用户角色与 12 个旧 ARoleAuth 权限域']], ['User / Role/UserRole_API', ['implemented', 'roleBatch 已覆盖帐套隔离删除、账号引用保护和权限记录级联清理']], ['User / Role/ARole', ['implemented', '已由 roles 管理员角色列表覆盖旧 500 条上限列表与名称搜索']], ['User / Role/ARole_API', ['implemented', 'roleBatch 已覆盖管理员角色批量删除与 Manager.adminRole 引用保护']], ['User / Role/ARoleAdd', ['implemented', '已由 Angular 管理员角色新建/编辑抽屉替代']], ['User / Role/ARoleAdd_Submit', ['implemented', 'saveRole 已覆盖管理员角色名称、说明、类型固化和原子 roleId']], ['User / Role/ARoleAuth', ['implemented', '已在角色详情中完整展示 model/content/shop/page/exam/user/system/office/portable/sites/other/extend']], ['User / Role/ARoleAuth_Submit', ['implemented', 'saveRoleAuthorization 已覆盖 12 域权限码去重校验、新建/更新和原子权限编号']], ['User / Struct/Default', ['blocked-data', '旧入口跳转组织树;目标缺少 ZL_Structure 主表,无法提供等价落点']], ['User / Struct/StructList', ['blocked-data', '目标缺少组织名称、父级、排序、成员、管理员、权限、提醒和经验历史数据']], ['User / Struct/order', ['blocked-data', '目标没有可按父节点连续重排 OrderID 的组织结构记录']], ['User / Struct/order_submit', ['blocked-data', '目标没有可按旧结构 ID 更新 OrderID 的组织结构记录']], ['User / Struct/Struct_API', ['blocked-data', '目标缺少 ZL_Structure.UserIDS/ManagerIDS 与 ZL_User.StructureID 双向成员关系']], ['User / Struct/StructByTree', ['blocked-data', '目标没有 ParentID 层级及组织成员、管理员关系,不能还原结构树']], ['User / Struct/Struct_ListByTree', ['blocked-data', '目标没有可递归展开并按 OrderID 排序的组织结构记录']], ['User / Struct/StructAdd', ['blocked-data', '目标没有可编辑或新增的组织结构主记录']], ['User / Struct/StructAdd_Submit', ['blocked-data', '目标缺少 ZL_Structure 持久层及用户结构关系同步事务']], ['User / Struct/StructMember', ['blocked-data', '目标缺少 UserIDS/ManagerIDS 组织成员关系;Profile 与 Group 语义不等价']], ['User / Struct/Structure_update', ['blocked-data', '目标没有可供树形拖动和批量重排的组织结构记录']], ['User / Struct/Structure_Merge', ['blocked-data', '目标缺少成员、管理员、经验合并与来源结构删除所需数据']], ['User / Struct/Structure_Move', ['blocked-data', '目标没有可校验循环并更新 ParentID 的组织结构树']], ['User / Struct/Structure_List', ['blocked-data', '目标 Schema 缺少旧 ZL_Structure 平铺列表及历史记录']], ['Label / Vue/Index', ['blocked-data', '目标 Schema 缺少旧 ZL_Vue_Tlp 模板代码表与历史记录']], ['Label / Vue/TlpView', ['blocked-infrastructure', '目标缺少模板路径数据、服务器模板文件和 B_CreateHtml 标签预览运行时']], ['Label / Vue/VUE_API', ['blocked-infrastructure', '目标缺少 ZL_Vue_Tlp,云函数也没有模板文件、标签渲染、vue.tlp 和目录复制运行时']], ['Label / Vue/Config', ['blocked-infrastructure', '目标没有 SiteOption.VUE_DirCopy 配置及其服务器发布消费者']], ['Label / Vue/Config_Submit', ['blocked-infrastructure', '云函数不能更新旧 SiteConfig 或按配置复制服务器目录']], ['Workload/Default', ['blocked-data', '旧逐日工作量统计必须内连接 ZL_Comment;目标仅有 CommonModel,缺少评论主表与 GeneralID 关系']], ['Extend / Safe/Default', ['blocked-infrastructure', '旧默认入口只跳转 SiteSwitch;目标没有静态 Angular 站点的安全开关控制面']], ['Extend / Safe/API', ['blocked-infrastructure', '旧聚合 API 依赖缺失 Safe_IP、服务器站点检查局部页和 ContentWordHelper 常驻线程']], ['Extend / Safe/SiteSwitch', ['blocked-infrastructure', '目标没有站点上下线状态、下线页文件或前端发布开关']], ['Extend / Safe/SiteIP', ['blocked-data', '目标 Schema 缺少旧 Safe_IP 白/黑名单、到期时间与管理员历史']], ['Extend / Safe/SiteIPAdd', ['blocked-data', '目标没有可编辑或新建的 Safe_IP IP 规则记录']], ['Extend / Safe/SiteIPAdd_Submit', ['blocked-data', '目标缺少 Safe_IP 持久层和实际消费 IP 规则的请求中间件']], ['Extend / Safe/ContentProtect', ['blocked-infrastructure', '旧内容保护页视图已丢失,目标无签名、防复制或防篡改配置消费链']], ['Extend / Safe/SiteAssess', ['blocked-infrastructure', '旧站点安全评估视图、评分规则、基线和历史结果均未交付']], ['Extend / Safe/SiteProtect', ['blocked-infrastructure', '目标无 Safe_ContentCheck_Models 配置模型及内容写入扫描消费层']], ['Extend / Safe/SiteProtect_Submit', ['blocked-infrastructure', '仅保存模型 ID 字符串不会产生保护;目标缺少 SiteConfig.Update 和扫描运行时']], ['Extend / Safe/ContentCheck', ['blocked-infrastructure', '目标无 ContentWordHelper 扫描任务、进度结果缓存和待检模型范围']], ['Extend / Safe/ContentCheckConfig', ['blocked-infrastructure', '云函数运行时没有 IllegalWordsVerify.keywordsVPath 非法词文件与旧编辑视图']], ['Extend / Safe/ContentCheckConfig_Submit', ['blocked-infrastructure', '云函数不能写旧非法词文件,当前内容接口也没有该文件消费链']], ['Extend / Safe/ContentFilter', ['blocked-infrastructure', '旧内容过滤视图已丢失,目标无等价替换/阻断规则与执行层']], ['Extend / Safe/SiteCheck', ['blocked-infrastructure', '旧站点检查依赖服务器文件、局部 Razor 页和丢失的检查规则']], ['Design / Interactive/InteractiveList', ['blocked-data', '目标缺少旧 Design_Pub 交互提交表及 sceneid、uid、fname 数据;DesignAnswer/Pub 不等价']], ['Design / Interactive/Interactive_API', ['blocked-data', '目标没有可按旧 Design_Pub ID 删除的交互提交记录']], ['Office / iServer/Default', ['blocked-data', '目标 Schema 缺少旧 IServer 服务工单主表与回复表']], ['Office / iServer/AddQuestionRecord', ['blocked-data', '目标无可新增的 IServer 工单、CRM 关联和附件模型']], ['Office / iServer/AddQuestionRecord_Submit', ['blocked-data', '目标缺少工单字段、附件及 CRM 关系持久层']], ['Office / iServer/BiServer', ['blocked-data', '目标没有可按状态、类型和标题筛选的 IServer 工单数据']], ['Office / iServer/BiServer_Del', ['blocked-data', '目标没有可删除的 IServer 工单记录']], ['Office / iServer/BiServerInfo', ['blocked-data', '目标缺少工单详情、阅读计数及回复关系']], ['Office / iServer/DelIServer', ['blocked-data', '目标缺少 IServerReply 回复记录']], ['Office / iServer/UpdateIServer', ['blocked-data', '目标缺少工单状态、优先级、来源、类型、备注和解决时间持久层']], ['Office / iServer/BselectiServer', ['blocked-data', '目标没有可供 CRM 选择的旧服务工单数据']], ['Office / iServer/ISReplyAdd', ['blocked-data', '目标缺少工单回复主表与父工单关系']], ['Office / iServer/ISReplyAdd_Submit', ['blocked-data', '目标缺少管理员工单回复、附件和内容持久层']], ['Office / Licence/LicenceFiles', ['blocked-data', '目标缺少 LicenceFiles 协议文件定义与限定用户数据']], ['Office / Licence/LicenceFiles_API', ['blocked-data', '目标没有可删除的协议文件定义']], ['Office / Licence/LicenceFilesAdd', ['blocked-data', '目标无协议模板路径、字段、状态、限制类型和限定用户模型']], ['Office / Licence/LicenceFilesAdd_Submit', ['blocked-infrastructure', '目标缺少协议定义持久层且云函数不能写旧本地模板文件']], ['Office / Licence/LicenceSignApplyList', ['blocked-data', '目标缺少 Common_UserApply 的 user_signlicence 申请数据']], ['Office / Licence/LicenceSignApplyDetail', ['blocked-data', '目标缺少许可签署申请、用户和协议文件关联']], ['Office / Licence/LicenceSignApply_API', ['blocked-infrastructure', '目标缺少申请审核、签署记录及服务器 PDF/本地哈希归档运行时']], ['Office / Licence/LicenceSignList', ['blocked-data', '目标缺少 LicenceUserSign 签约记录']], ['Office / Licence/LicenceSignDetail', ['blocked-data', '目标缺少签约详情、协议文件和用户关联']], ['Office / Licence/LicenceSign_API', ['blocked-data', '目标没有可审核或驳回的签约记录']], ['Extend / Log/TxtLog', ['blocked-infrastructure', '云函数运行时没有旧 /Log/{LogType}/ 本地日志目录']], ['Extend / Log/TxtLogContent', ['blocked-infrastructure', '云函数不能按文件名读取旧服务器文本日志']], ['Extend / Log/TxtLog_Down', ['blocked-infrastructure', '云函数没有旧服务器日志文件可下载']], ['Extend / Log/SysLog', ['implemented', '已由只读 systemLogs 云函数与 Angular 系统日志页覆盖帐套分页、类型、关键词和日期筛选']], ['Extend / Log/TaskList', ['blocked-data', 'SenTask 为空且字段不含旧 Content_ScheTask 任务定义']], ['Extend / Log/TaskAdd', ['blocked-infrastructure', '目标缺少旧调度任务模型与 Hangfire 控制面']], ['Extend / Log/TaskAdd_API', ['blocked-infrastructure', '目标不能复制旧任务并注册 Hangfire RecurringJob']], ['Extend / Log/TaskAdd_Submit', ['blocked-infrastructure', '目标缺少旧任务持久层、本地脚本校验与 Hangfire 调度运行时']], ['Extend / Log/Task_API', ['blocked-infrastructure', '目标不能删除、停用、启用或立即执行旧 Hangfire 任务']], ['Extend / Log/TaskCenter', ['blocked-infrastructure', '云函数环境没有旧 Hangfire Dashboard 管理页面']], ['Shop / Exp/DeliverType', ['implemented', '已由 shopFareTemplates 提供帐套隔离、名称搜索、分页和旧运费规则列表']], ['Shop / Exp/DeliverAdd', ['implemented', '已由 Angular 商城运费模板新建/编辑抽屉替代']], ['Shop / Exp/DeliverAdd_Submit', ['implemented', '已由 saveShopFareTemplate 校验计价方式、规则 JSON、名称防重并原子分配旧编号']], ['Shop / Exp/Deliver_API', ['implemented', '已由 shopFareTemplateBatch 覆盖每批 1–100 条帐套隔离删除']], ['Shop / Exp/OrderSend', ['blocked-data', '目标 Schema 缺少旧 OrderList 订单主表与 Order_Exp 物流单']], ['Shop / Exp/OrderSend_Submit', ['blocked-infrastructure', '目标缺少订单物流状态、物流单、用户收件手机、SMSConfig 发货模板和 SafeMobile 日志链']], ['Shop / Exp/Factory', ['blocked-data', '目标 Schema 缺少旧 Manufacturers 厂商主表与历史厂商数据']], ['Shop / Exp/FactoryAdd', ['blocked-data', '目标无可编辑或新增的 Manufacturers 厂商记录']], ['Shop / Exp/FactoryAdd_Submit', ['blocked-data', '目标缺少厂商名称、简称、地址、电话、传真、网站、分类、图片和介绍持久层']], ['Shop / Exp/Factory_API', ['blocked-data', '目标没有可删除或启用的厂商记录']], ['Shop / Exp/Factory_select', ['blocked-data', '目标没有可按 Producername 搜索选择的厂商数据']], ['Shop / Exp/Trademark', ['blocked-data', '目标 Schema 缺少旧 Trademark 品牌主表与历史品牌数据']], ['Shop / Exp/TrademarkAdd', ['blocked-data', '目标无可编辑或新增的 Trademark 品牌记录']], ['Shop / Exp/Trademark_Submit', ['blocked-data', '目标缺少品牌名称、厂商、分类、启用/置顶/推荐、图片和介绍持久层']], ['Shop / Exp/Trademark_API', ['blocked-data', '目标没有可删除或启用的品牌记录']], ['Shop / Exp/Trademark_select', ['blocked-data', '目标没有可按 Trname 搜索选择的品牌数据']], ['Content / Node/NodeManage', ['implemented', '已由 Node 资源列表、分页与专用结构操作替代']], ['Content / Node/NodeSearch', ['implemented', '已覆盖按栏目名称搜索并保持帐套隔离']], ['Content / Node/NodeAdd', ['implemented', '已由 Node 动态表单与父节点结构控件替代']], ['Content / Node/NodeAdd_Submit', ['implemented', '已覆盖原子栏目编号、同级防重、父节点与层级校验']], ['Content / Node/UnionNode_Move', ['implemented', '已由 nodeBatch 批量移动与递归深度同步替代']], ['Content / Node/NodeRecycle', ['partial', '已覆盖回收和恢复;独立回收站筛选页尚未提供']], ['Content / Node/SPageAdd', ['partial', '节点类型与外链字段可编辑;旧单页专用布局尚未逐字段复刻']], ['Content / Node/OutLinkAdd', ['partial', '节点类型与 URL 字段可编辑;旧外链专用布局尚未逐字段复刻']], ['Content / Node/Node_API', ['partial', '已覆盖回收、恢复与安全永久删除;清空全部节点被明确禁止']], ['Content / Node/BatchNode', ['partial', '已提供栏目批量回收、恢复和结构迁移']], ['Content / Node/BatchNode_Submit', ['partial', '已覆盖结构批处理;旧批量模板、权限与计费字段仍待专用实现']], ['Content / Node/UnionNode', ['partial', '已提供栏目批量迁移;栏目合并仍待实现']], ['Content / Node/Special_API', ['partial', '已覆盖删除引用保护与保存时名称/目录校验;旧独立校验响应未保留']], ['Content / Node/Special', ['implemented', '已由 Special 资源列表、搜索与分页替代']], ['Content / Node/SpecialAdd', ['implemented', '已由专题动态表单与父专题结构控件替代']], ['Content / Node/SpecialAdd_Save', ['implemented', '已覆盖原子专题编号、全帐套防重、父专题与循环校验']], ['Content / Node/UnionSpecial', ['partial', '已提供专题批量迁移;关系合并因目标数据缺失被显式阻塞']], ['Content / Node/UnionSpecial_Move', ['implemented', '已由 specialBatch 帐套隔离批量移动替代']], ['Content / Node/UnionSpecial_Merge', ['blocked-data', 'CommonModel.specialId 物理列缺失且商品主表未迁移,无法安全重写专题关系']], ['Model/Index', ['partial', '已由全部数据类与 Model/ModelField 资源页替代;旧模型类型入口布局未逐项复刻']], ['Model/ModelManage', ['implemented', '已提供帐套模型列表、搜索、分页与安全元数据编辑']], ['Model/ModelAdd', ['blocked-infrastructure', '新增模型需要 PostgreSQL 建表、生成标签与写入旧模板文件']], ['Model/ModelAdd_Submit', ['blocked-infrastructure', '托管云函数未开放模型 DDL 与旧 Zoomla 模板文件运行时']], ['Model/Model_API', ['partial', '已覆盖安全模板/展示元数据更新;复制和删除模型因 DDL 被阻塞']], ['Model/ModelData', ['partial', '规范化目标类可从资源页管理;任意旧附表名到 Parse 类的映射尚未完整恢复']], ['Model/Field', ['implemented', '已提供模型字段列表、搜索、分页与安全展示元数据编辑']], ['Model/Order_Submit', ['partial', '已提供同模型字段批量排序云函数;专用拖拽界面尚未复刻']], ['Model/FieldAdd', ['blocked-infrastructure', '新增字段需要 PostgreSQL ALTER TABLE 与旧字段控件模板']], ['Model/FieldAdd_Submit', ['blocked-infrastructure', '目标托管环境未开放任意物理列 DDL 与旧控件生成器']], ['Model/Field_API', ['partial', '已覆盖字段顺序更新;字段删除因历史数据与物理列 DDL 被阻塞']], ['Content / Guest/Default', ['implemented', '已由 Guestbook 资源页与后台导航替代']], ['Content / Guest/MsgList', ['implemented', '已提供帐套留言列表、标题搜索、分页与批量审核工作流']], ['Content / Guest/ReplyGuest', ['implemented', '已由留言详情中的管理员回复面板替代']], ['Content / Guest/EBtnSubmit', ['implemented', '已由 guestbookReply 原子分配回复 GID 并继承分类/父留言关系']], ['Content / Guest/MsgShow', ['implemented', '已由留言详情抽屉替代']], ['Content / Guest/MsgShow_Submit', ['implemented', '已由 saveGuestbook 白名单正文编辑替代']], ['Content / Guest/Msg_API', ['implemented', '已覆盖审核、取消审核、回收、恢复与带回复引用保护的永久删除']], ['Content / Guest/CateList', ['implemented', '已由 Guestcate 资源列表、搜索和分类结构抽屉替代']], ['Content / Guest/CateAdd', ['implemented', '已由留言分类专用表单替代']], ['Content / Guest/CateAdd_Submit', ['implemented', '已覆盖原子 cateid、留言类型锁定与名称防重']], ['Content / Guest/Cate_API', ['implemented', '已覆盖下级分类、留言与帖子引用保护的删除']], ['Content / Bar/Default', ['implemented', '已由 Guestcate 贴吧类型列表入口替代']], ['Content / Bar/CateList', ['implemented', '已提供贴吧分类列表、搜索、分页与父子结构编辑']], ['Content / Bar/CateAdd', ['partial', '已提供贴吧分类表单;旧版发帖频率文件配置尚未迁移']], ['Content / Bar/CateAdd_Submit', ['partial', '已覆盖原子编号、防重、父子循环和分类元数据;文件配置尚缺']], ['Content / Bar/Cate_API', ['partial', '已覆盖删除引用保护及推荐/取消推荐;清空版块帖子尚未开放']], ['Content / Bar/BarAuthSet', ['blocked-data', '目标 Schema 缺少 ZL_Guest_BarAuth 用户版块权限关系,无法读取逐用户浏览、发帖和回复权限']], ['Content / Bar/BarAuthSet_Submit', ['blocked-data', '目标 Schema 缺少 Uid、BarID、Look、Send、Reply 权限关系,无法安全保存旧授权']], ['Content / Bar/TieList', ['implemented', '已提供帐套帖子列表、标题搜索、分页与批量工作流']], ['Content / Bar/TieDetail', ['implemented', '已由只读帖子详情抽屉和专用工作流面板替代']], ['Content / Bar/TieMove', ['implemented', '已由 barBatch 目标贴吧分类校验与移动替代']], ['Content / Bar/Tie_API', ['partial', '已覆盖审核、回收恢复、置顶/沉底、精华和移动;勋章关系未迁移']], ['Exam/Question_Class_Manage', ['partial', '已提供帐套分类列表、搜索和父分类编号;旧展开树布局尚未逐像素复刻']], ['Exam/AddQuestion_Class', ['implemented', '已由 ExamClass 专用结构表单替代']], ['Exam/Question_Class_GetChild', ['implemented', '已由 examClassChildren 帐套隔离子分类接口替代']], ['Exam/Question_Class_Add', ['implemented', '已由 saveExamClass 原子编号、防重、父级与循环校验替代']], ['Exam/ExamPointManage', ['implemented', '已提供帐套考点列表、搜索、分页和父子结构字段']], ['Exam/AddExamPoint', ['implemented', '已由 ExamPoint 专用考点结构表单替代']], ['Exam/ExamPoint_Add', ['implemented', '已由 saveExamPoint 原子编号、防重、父级与循环校验替代']], ['Exam/KnowledgeManage', ['partial', '已提供帐套知识点列表、搜索和父级/科目结构字段;旧展开树布局尚未逐像素复刻']], ['Exam/AddKnowledge', ['implemented', '已由 QuestionsKnowledge 专用知识点结构表单替代']], ['Exam/Knowledge_Add', ['implemented', '已由 saveKnowledge 原子编号、科目防重、父级与循环校验替代']], ['Exam/Knowledge_GetChild', ['implemented', '已由 knowledgeChildren 帐套及科目隔离子级接口替代']], ['Exam/ExTeacherManage', ['implemented', '已提供帐套考试教师列表、搜索、分页与删除']], ['Exam/AddExTeacher', ['implemented', '已由 ExTeacher 专用教师资料表单替代']], ['Exam/Teacher_Add', ['implemented', '已由 saveExamTeacher 原子编号和任教分类归属校验替代']], ['Dict/DicCateList', ['implemented', '已提供帐套字典分类列表、搜索、分页及启用状态管理']], ['Dict/DictCate_API', ['implemented', '已由字典分类专用保存、批量启停和带字典项引用保护的删除替代']], ['Dict/DicCateSel', ['implemented', '已由 dictionaryCategories 帐套隔离分类选择接口和 Angular 下拉控件替代']], ['Dict/DicItemList', ['implemented', '已提供帐套字典项列表、搜索、分页和所属分类选择']], ['Dict/DicItem_API', ['implemented', '已由字典项专用保存、分类归属校验、批量启停和删除替代']], ['Dict/GradeCateManage', ['implemented', '已提供多级字典分类列表、搜索、分页和引用保护删除']], ['Dict/GCateAdd', ['implemented', '已由 GradeCate 专用分类表单与层级别名输入替代']], ['Dict/GCateAdd_Submit', ['implemented', '已由 saveGradeCategory 编号、防重和层级别名校验替代']], ['Dict/GCate_API', ['implemented', '已由 gradeBatch 带选项引用保护的批量删除替代']], ['Dict/GradeOption', ['implemented', '已由按分类和父选项筛选的 gradeOptions 列表替代']], ['Dict/GOptionAdd', ['implemented', '已由 Grade 专用分类、父级选项表单替代']], ['Dict/GOptionAdd_Submit', ['implemented', '已由 saveGradeOption 自动层级、同级防重和父级归属校验替代']], ['Dict/GOption_API', ['implemented', '已由 gradeBatch 带下级引用保护的批量删除替代']], ['Shop / Exp/Currency', ['implemented', '已提供帐套货币列表、搜索、分页与批量删除']], ['Shop / Exp/CurrencyAdd', ['blocked-infrastructure', 'Currency.id 与 Parse 保留 id 冲突,物理表又缺少可写旧 ID 列,Angular 已隐藏新增入口']], ['Shop / Exp/CurrencyAdd_Submit', ['blocked-infrastructure', '无法为新货币持久化旧数字 ID;saveCurrency 对新增明确返回 migration_blocked']], ['Shop / Exp/Currency_API', ['implemented', '已由 currencyBatch 帐套隔离批量删除替代']], ['Config/Holiday', ['implemented', '已提供帐套节假日列表、搜索、分页、编辑与批量删除']], ['Config/Holiday_API', ['implemented', '已由 saveHoliday 白名单更新和 holidayBatch 帐套隔离删除替代']], ['Config/HolidayAdd', ['blocked-infrastructure', 'SysHoliday.id 与 Parse 保留 id 冲突,物理表又缺少可写旧 ID 列,Angular 已隐藏新增入口']], ['Config/HolidayAdd_Submit', ['blocked-infrastructure', '无法为新节假日持久化旧数字 ID;saveHoliday 对新增明确返回 migration_blocked']], ['Config/SearchFunc', ['implemented', '已提供管理后台/用户中心类型、启用状态、推荐状态筛选及排序分页']], ['Config/SearchFunc_API', ['partial', '已覆盖启停、推荐、取消推荐、排序与删除;设为全局后台起始页缺少 SiteConfig 持久层']], ['Config/SearchFuncAdd', ['partial', '已由 Search 专用现有入口编辑抽屉替代;新增因旧 id 不可持久化而阻塞']], ['Config/SearchFuncAdd_Submit', ['partial', '已由 saveSearchNavigation 白名单更新替代;新增明确返回 migration_blocked']], ['Config/APIInfo', ['partial', '已由实时 Function 元数据目录替代旧 WXAPP.cshtml 注释解析;旧密钥与访问开关无等价执行层']], ['Config/APIInfo_Submit', ['blocked-infrastructure', '旧 API 密钥、IP 策略与目标 sessionToken/帐套权限不等价,且无全函数生效配置层']], ['Config/APIInfo_SwaggerClose', ['blocked-infrastructure', '目标云函数引擎没有帐套级 Swagger 调试关闭开关']], ['Config/APIInfo_SwaggerOpen', ['blocked-infrastructure', '目标云函数引擎没有帐套级 Swagger 调试开启开关']], ['Config/ReadFile', ['implemented', '已由 apiCatalog 安全读取 Function 名称、路径、描述、参数和响应类型,不暴露源码']], ['Config/LicenceFile_API', ['blocked-data', '目标 Schema 缺少许可、隐私、协议与版权文档数据,云函数也不能写旧 wwwroot 文件']], ['Config/FontIcon', ['implemented', '已由 Angular Lucide 完整图标选择器、搜索、分页和点击复制替代']], ['Config/close_system', ['blocked-infrastructure', '云函数运行时没有可通过 app_offline.htm 关闭的单体 ASP.NET 进程']], ['Config/Hotkey', ['blocked-infrastructure', '目标 Schema 缺少 KeyboardConfig/Hotkey 持久化模型与旧 XML 数据']], ['Config/HotkeyAdd', ['blocked-infrastructure', '目标 Schema 缺少 KeyboardConfig/Hotkey 持久化模型,无法安全新增']], ['Config/HotkeyAdd_Submit', ['blocked-infrastructure', '目标 Schema 缺少 KeyboardConfig/Hotkey 持久化模型,不伪造保存成功']], ['Config/Hotkey_API', ['blocked-infrastructure', '目标无可执行快捷键启停、删除、重载或脚本匹配的全局运行时']], ['Config/Prize', ['blocked-infrastructure', '目标 Schema 缺少 PrizeConfig/PrizeTask 配置模型及签到、任务规则数据']], ['Config/Prize_Submit', ['blocked-infrastructure', '目标无法持久化旧奖励积分、重复周期和过期规则']], ['Extend / AD/Default', ['implemented', '已由 Angular 广告位导航进入专用列表']], ['Extend / AD/ZoneManage', ['implemented', '已由 adZones 帐套隔离列表、名称搜索、类型与启停筛选替代']], ['Extend / AD/Zone_API', ['implemented', '已由 adZoneBatch 覆盖每批 1–100 条启用、停用与引用保护删除']], ['Extend / AD/ZoneAdd', ['partial', '现有广告位编辑页已迁移;新增因旧 id 与 Parse 保留字段冲突而明确阻塞']], ['Extend / AD/ZoneAdd_Submit', ['partial', '现有广告位由 saveAdZone 白名单更新;无旧编号的新增明确返回 migration_blocked']], ['Extend / AD/InfoManage', ['implemented', '已由 adInfos 按帐套、广告位、审核状态和关键词分页筛选']], ['Extend / AD/Info_API', ['implemented', '已由 adInfoBatch 覆盖审核、取消审核和批量删除']], ['Extend / AD/InfoAdd', ['partial', '现有广告编辑和广告位选择已迁移;新增因旧 id 不可持久化而阻塞']], ['Extend / AD/InfoAdd_Submit', ['partial', '现有广告由 saveAdInfo 校验广告位、时间、权重和内容后更新;新增明确阻塞']], ['Extend / AD/ADPreView', ['partial', '已提供当前生效广告预览;旧 HTML 只显示源码而不执行脚本,避免管理端 XSS']], ['Content / Addon/Comment', ['blocked-data', '目标 Schema 缺少旧 ZL_Comment 评论主表与历史评论数据']], ['Content / Addon/Commont_API', ['blocked-data', '目标无可审核、取消审核或删除的旧评论记录']], ['Content / Addon/ConAudit_API', ['blocked-data', '目标缺少 ContentAudit 记录、节点审核流程与管理员步骤状态']], ['Content / Addon/ConAudit_SJ_API', ['blocked-data', '目标缺少送审确认/驳回记录和可追溯流程状态']], ['Content / Addon/ConAudit', ['blocked-data', '目标 Schema 缺少旧 ZL_Content_Audit 审核列表及历史数据']], ['Content / Addon/ConAuditDetail', ['blocked-data', '目标缺少审核明细、备注、节点和操作人流转记录']], ['Content / Addon/TagKey', ['implemented', '已由 Angular 全局标签词库编辑页替代旧 tags.json 文件页']], ['Content / Addon/TagKey_Submit', ['implemented', '已由 saveContentTagKeys 清理标签并持久化到 Parse Config']], ['Content / Addon/VerBak', ['blocked-data', '目标 Schema 缺少旧 ZL_Content_VerBak 内容/商品版本快照与历史数据']], ['Content / Addon/VerBak_Del', ['blocked-data', '目标无可定位和删除的旧 ZL_Content_VerBak 版本记录']], ['Shop / Addon/Vendor', ['blocked-data', '目标 Schema 缺少旧 ZL_Shop_Vendor 供应商主表与历史数据']], ['Shop / Addon/Vendor_API', ['blocked-data', '目标没有可定位和删除的供应商记录;Agency/DeliveryCenter 语义不等价']], ['Shop / Addon/VendorAdd', ['blocked-data', '目标无签约数据类承载名称、地址、手机、传真、邮箱和状态']], ['Shop / Addon/VendorAdd_Submit', ['blocked-data', '按既定数据库设计不能擅自新建 ShopVendor,也不能错写 Agency/DeliveryCenter']], ['User / Addon/PointGroup', ['implemented', '已由 userLevels 帐套隔离、关键词与排序分页列表替代']], ['User / Addon/PointGroupAdd', ['partial', '现有积分等级编辑页已迁移;新增因旧 id 与 Parse 保留字段冲突而阻塞']], ['User / Addon/PointGroup_API', ['implemented', '已由 userLevelBatch 覆盖每批 1–100 条帐套隔离删除']], ['User / Addon/PointGroup_Submit', ['partial', '现有等级由 saveUserLevel 白名单更新别名、积分阈值、图片和备注;新增明确阻塞']], ['User / Addon/VMoneyLog', ['implemented', '已由 userMoneyLogs 聚合六类规范化账本,保留类型、日期、关键词与用户名筛选']], ['User / Addon/ThirdInfo', ['blocked-data', '旧 ThirdInfo.config 六个提供商配置与历史密钥未迁入;ThirdPlatInfo 是不同业务平台']], ['User / Addon/ThirdInfo_Submit', ['blocked-infrastructure', '云函数没有旧 XML 文件系统与 Baidu/QQ/Sina/Wechat 等 OAuth 运行时消费者']], ['User / Addon/SigninList', ['blocked-data', '目标 Schema 缺少 PrizeTaskLog 及 Global.SignIn 用户签到任务日志']], ['User / Addon/RealNameAuth', ['blocked-data', '目标 Schema 缺少 UserRealNameAuth 申请主表、审核状态与历史数据']], ['User / Addon/RealNameAuthAdd', ['blocked-data', '目标 Profile 零散身份字段不等价于可审阅的实名认证申请']], ['User / Addon/RealNameAuth_API', ['blocked-data', '目标缺少实名申请记录及 Global.RealNameAuth 任务奖励链']], ['Content / Ask/Default', ['blocked-data', '目标 Schema 缺少旧 ZL_Ask 问题主表、回收站标记与历史问题数据']], ['Content / Ask/AskInfo', ['blocked-data', '目标无问答问题详情;Baike/Guestbook/GuestBar/DesignQuestion 均非等价主表']], ['Content / Ask/AskAdd', ['blocked-data', '目标无 Ask 数据类承载 QTitle/Qcontent 与状态、精华、回收站关系']], ['Content / Ask/AskAdd_Submit', ['blocked-data', '不能把旧问答问题错写到百科、留言、论坛或问卷题目']], ['Content / Ask/Ask_API', ['blocked-data', '目标缺少可回收、恢复、删除、审核或加精的旧问答问题记录']], ['Content / Ask/AnswerList', ['blocked-data', '目标 Schema 缺少旧 ZL_GuestAnswer 回答主表及 QueId 问题外键']], ['Content / Ask/AnswerAdd', ['blocked-data', '目标无可编辑或新增的问答回答记录与问题归属']], ['Content / Ask/AnswerAdd_Submit', ['blocked-data', '目标缺少 GuestAnswer QueId/UserId/UserName/Content 数据模型与历史关系']], ['Content / Ask/Answer_API', ['blocked-data', '目标缺少可审核、取消审核或删除的旧问答回答记录']], ['Content / Ask/Config', ['blocked-infrastructure', '目标没有 GuestConfig.WDOption 问答运行时和用户组权限消费者']], ['Content / Ask/Config_Submit', ['blocked-infrastructure', '目标没有问答发布/回复/推荐运行时执行积分与用户组规则']], ['BiaoCalc/Default', ['blocked-data', '目标 Schema 缺少旧 BiaoCalcModel 裱件模型主表、状态与历史记录']], ['BiaoCalc/BiaoDetail', ['blocked-data', '目标无可定位的裱件详情及 UserID 用户关系']], ['BiaoCalc/Biao_API', ['blocked-data', '目标缺少可启用、停用或删除的 BiaoCalcModel 记录']], ['BiaoCalc/UserFiles', ['blocked-data', '目标 Schema 缺少 BiaoCalcUserFiles 文件授权、等级与到期时间数据']], ['BiaoCalc/UserFiles_API', ['blocked-data', '目标无 BiaoCalcUserFiles.ExpireTime 可到期或续期;账户会员到期字段语义不等价']], ['Office / Chart/Index', ['blocked-infrastructure', '旧交付包与官方源码只保留空壳控制器,缺少 Index.cshtml、数据源和交互定义']], ['Extend / Chat/Default', ['blocked-data', '目标 Schema 缺少 ChatMsg 消息表,无法还原用户消息数']], ['Extend / Chat/UserChatHistory', ['blocked-data', '目标缺少 ChatMsg/ChatGroup 个人与群会话关系']], ['Extend / Chat/UserFriend', ['blocked-data', '目标缺少 User_Friend 好友关系;UserFriendGroup 只是分组,语义不等价']], ['Extend / Chat/Group', ['blocked-data', '目标 Schema 缺少 ChatGroup 群组主表与历史数据']], ['Extend / Chat/GroupAdd', ['blocked-data', '目标无可定位和编辑的 ChatGroup 群组记录']], ['Extend / Chat/GroupAdd_Submit', ['blocked-data', '目标缺少 ChatGroup/ChatGroupUser 群主、管理员与成员关系']], ['Extend / Chat/GroupUser', ['blocked-data', '目标 Schema 缺少 ChatGroupUser 群成员和管理员记录']], ['Extend / Chat/MessageHistory', ['blocked-data', '目标缺少 ChatMsg 个人/群组消息和收发关系']], ['Extend / Chat/Config', ['blocked-infrastructure', '目标没有 RoomConfig TRTC 配置持久层和聊天运行时']], ['Extend / Chat/Config_Submit', ['blocked-infrastructure', '目标没有消费 TRTC AppID/SecretKey 的聊天服务']], ['Extend / Chat/Chat_API', ['blocked-data', '目标缺少 ChatMsg/ChatGroup/ChatGroupUser 可删除、启停或授权记录']], ['Design / Class/ClassList', ['blocked-data', '目标 Schema 缺少 DesignTlpClass/Design_TlpClass 模板分类主表与历史数据']], ['Design / Class/ClassAdd', ['blocked-data', '目标无模板分类数据类;DesignTlp 仅保留数字 classId 引用']], ['Design / Class/ClassAdd_Submit', ['blocked-data', '现有 DesignTlp 引用 classId=6,但分类 6 的名称、父级、排序和说明已丢失']], ['Design / Class/Class_API', ['blocked-data', '目标无可删除分类记录,且不能使现有 DesignTlp.classId=6 引用悬空']], ['Com/Logout', ['implemented', '已由 Angular 退出入口调用管理云函数销毁当前 Parse _Session 后清除本地会话']], ['Com/SPwdCheck', ['blocked-infrastructure', '目标没有 Manager.RandNumber 二级密码会话状态和业务消费者']], ['Com/BootLayout', ['implemented', '已迁移为 Angular Bootstrap 栅格生成器,保留框架、列数、断点、预设、预览和复制 HTML']], ['Com/Import', ['blocked-infrastructure', '目标与云函数运行时缺少 /Config/Import/{mode}.xml 导入定义']], ['Com/Import_DownTlp', ['blocked-infrastructure', '缺少旧 XML 字段别名、隐藏字段、类型和默认值规则']], ['Com/Import_Submit', ['blocked-infrastructure', '云函数没有旧 XML+NPOI 动态表 xlsx 导入流水线']], ['Com/ImportForContent', ['blocked-infrastructure', '目标缺少旧动态模型附表结构与通用 xlsx 导入页']], ['Com/ImportForContent_DownTlp', ['blocked-infrastructure', '无法从已缺失的动态模型附表还原完整 xlsx 字段模板']], ['Com/ImportForContent_Submit', ['blocked-infrastructure', '缺少动态附表批量写入流程,商品分支还缺少 ZL_Commodities']], ['Com/Sort', ['partial', '模型字段顺序已由 modelFieldOrder 迁移;内容、商品、栏目和贴吧分类的旧统一排序页尚未完整迁移']], ['Com/Sort_API', ['partial', 'modelFieldOrder 已覆盖 ModelField 白名单帐套排序;其余 4 类旧表名分支未提供等价云函数']], ['Common/UserBaseField', ['blocked-data', '目标缺少 B_UserBaseField 动态字段定义与 ZL_UserBase 原始扩展行']], ['Common/ContentField', ['blocked-data', '目标缺少按 CommonModel.TableName/ModelID 动态解析任意旧内容附表的数据与渲染层']], ['Common/SelUploadFiles', ['blocked-infrastructure', '旧交付包/官方源码缺少视图,当前 PostgreSQL Parse 文件适配器也无法上传']], ['Config/Index', ['blocked-infrastructure', '旧配置首页只跳转 SiteInfo,目标无签约的统一站点配置模型和运行时']], ['Config/SiteInfo', ['blocked-infrastructure', '目标缺少 SiteInfo/SiteOption 站点、Logo、版权、全站 JS 与后台目录配置']], ['Config/SiteInfo_Submit', ['blocked-infrastructure', '云函数无法更名 ASP.NET 后台路径、改写 web.config 或重启旧宿主']], ['Config/SiteOption', ['blocked-infrastructure', '目标无 SiteOption/ShopConfig/UserConfig 的域名、模板、上传、审核、积分和安全策略模型']], ['Config/SiteOption_Submit', ['blocked-infrastructure', '现有云函数未消费旧 SiteOption 的数十项站点/商城/互动规则']], ['Config/MailConfig', ['blocked-infrastructure', '目标缺少 SMTP 服务器、端口、帐号和收件列表配置模型']], ['Config/MailConfig_Submit', ['blocked-infrastructure', '目标无统一 SMTP 发送运行时;MailTemp 仅是模板而非邮件通道']], ['Config/UserConfig', ['blocked-infrastructure', '目标缺少注册、审核、验证码、必填字段、奖励与提现规则模型']], ['Config/UserConfig_Submit', ['blocked-infrastructure', '当前注册/登录云函数未实现旧 UserConfig 规则消费层']], ['Config/SetOrderStatus', ['blocked-infrastructure', '目标缺少 OrderConfig 状态文案与订单/商品主运行链']], ['Config/SetOrderStatus_Submit', ['blocked-infrastructure', '目标无订单运行时消费 21 类旧订单/配送/支付状态文案']], ['Config/SMSCfg', ['blocked-infrastructure', '目标缺少 SMSConfig 多供应商帐号、密钥、签名、模板和频控模型']], ['Config/SMSConfig_Submit', ['blocked-infrastructure', '当前云函数无短信网关,密码重置也因缺短信验证而阻塞']], ['Config/ThumbConfig', ['blocked-infrastructure', '目标缺少 WaterModuleConfig/ThumbsConfig 水印、文字样式、尺寸和缩略图规则']], ['Config/ThumbConfig_Submit', ['blocked-infrastructure', '当前 Parse 文件适配器错误,也无上传后执行水印/缩略图规则的处理器']], ['Config/AppConfig', ['blocked-infrastructure', '目标云函数宿主无 ASP.NET defaultDocument、customErrors、MIME 和扩展名配置']], ['Config/AppConfig_Submit', ['blocked-infrastructure', '云函数无法改写/重启旧 web.config,目标运行时也不消费这些选项']], ['Config/APPConfig_ReInstall', ['blocked-infrastructure', '目标没有 IsInstalled 状态与 /Install/Index 重新安装流程']], ['Content / Baike/Default', ['partial', '已由 Angular 百科审核入口替代;旧默认跳转的 BaikeEdit 版本列表因数据缺失而阻塞']], ['Content / Baike/BKVersionList', ['blocked-data', '目标 Schema 缺少旧 BaikeEdit 版本表、待审版本内容与历史版本数据']], ['Content / Baike/Version_API', ['blocked-data', '目标无 BaikeEdit 版本记录,无法审核并 Apply、取消审核、驳回或删除']], ['Content / Baike/BKList', ['blocked-data', '旧 BKList 按 Flow 读取 BaikeEdit 版本链,目标仅保留 Baike 主记录']], ['Content / Baike/BK_API', ['partial', '已由 baikeBatch 覆盖主词条审核、取消审核、推荐和取消推荐;版本删除/应用与奖励链缺失']], ['Content / Baike/Config', ['blocked-infrastructure', '目标没有 GuestConfig.BKOption 百科运行时、用户组权限和积分奖励消费者']], ['Content / Baike/Config_Submit', ['blocked-infrastructure', '目标没有百科创建/编辑/推荐运行时执行 CreatePoint/EditPoint/RemmPoint 规则']], ['Content / Baike/BkCheck', ['implemented', '已由 baikeEntries 按帐套、关键词、审核与推荐状态分页审查主词条']], ['FontPic/Index', ['blocked-data', '目标 Schema 缺少旧 FontPic 成品字体图主表与历史数据']], ['FontPic/FontPicInfo', ['blocked-data', '目标 Schema 缺少旧 FontPic 成品字体图详情数据']], ['FontPic/FontPicInfo_Submit', ['blocked-data', '目标 Schema 缺少旧 FontPic 成品字体图持久化模型']], ['FontPic/FontPic_API', ['blocked-data', '目标 Schema 缺少旧 FontPic 成品字体图可删除记录']], ['FontPic/Shape', ['implemented', '已由 fontShapes 按帐套、分类和关键词分页筛选图形素材']], ['FontPic/ShapeInfo', ['partial', '现有图形素材编辑、分类选择和安全预览已迁移;新增因旧 id 不可持久化而阻塞']], ['FontPic/ShapeInfo_Submit', ['partial', '现有素材由 saveFontShape 更新元数据;新增受旧 id 阻塞,图片替换受 Parse 文件适配器错误阻塞']], ['FontPic/Shape_API', ['implemented', '已由 fontShapeBatch 覆盖每批 1–100 条帐套隔离删除']], ['FontPic/ShapeType', ['implemented', '已由 fontShapeTypes 帐套隔离分类列表替代']], ['FontPic/ShapeTypeInfo', ['partial', '现有图形分类编辑已迁移;新增因旧 id 不可持久化而阻塞']], ['FontPic/ShapeTypeInfo_Submit', ['partial', '现有分类由 saveFontShapeType 白名单更新;新增明确返回 migration_blocked']], ['FontPic/ShapeType_API', ['implemented', '已覆盖分类列表和引用保护删除']], ['FontPic/Draft', ['blocked-data', '目标 Schema 缺少旧 FontPicDraft 草稿表与历史数据']], ['FontPic/DraftInfo', ['blocked-data', '目标 Schema 缺少旧 FontPicDraft 草稿详情数据']], ['FontPic/DraftInfo_Submit', ['blocked-data', '目标 Schema 缺少旧 FontPicDraft 草稿持久化模型']], ['FontPic/Draft_API', ['blocked-data', '目标 Schema 缺少旧 FontPicDraft 可删除记录']], ['Extend / Survey/SurveyManage', ['implemented', '已由 surveys 按帐套、状态和关键词分页读取旧 DesignAsk 问卷']], ['Extend / Survey/Survey_API', ['implemented', '已由 surveyBatch 覆盖问卷启停/删除及答卷嵌入明细删除']], ['Extend / Survey/SurveyAdd', ['partial', '现有问卷编辑页已迁移;新增因旧 id 无法持久化而明确阻塞']], ['Extend / Survey/SurveyAdd_Submit', ['partial', '现有问卷由 saveSurvey 校验时间、状态和访问设置后更新;新增明确阻塞']], ['Extend / Survey/SurveyItemList', ['implemented', '已由 surveyQuestions 校验问卷归属后按排序分页读取题目']], ['Extend / Survey/SurveyItemAdd', ['partial', '现有题目编辑页已迁移;新增因旧 id 无法持久化而明确阻塞']], ['Extend / Survey/SurveyItemAdd_Submit', ['partial', '现有题目由 saveSurveyQuestion 校验题型、选项和扩展 JSON 后更新;新增明确阻塞']], ['Extend / Survey/SurveyItem_API', ['implemented', '已由 surveyBatch 覆盖题目删除和按选择顺序重排']], ['Extend / Survey/SurveyResultChart', ['implemented', '已由 surveyResultChart 从旧 answer JSON 安全聚合选项计数并报告不可解析答卷']], ['Extend / Survey/SurveyResultList', ['implemented', '已由 surveyResults 提供帐套与问卷隔离的答卷分页和只读详情']], ['Office / Service/Default', ['implemented', '已由 Angular 客服席位导航替代旧重定向']], ['Office / Service/Seat', ['implemented', '已由 serviceSeats 帐套隔离、关键词和排序分页列表替代']], ['Office / Service/SeatAdd', ['partial', '客服席位新建/编辑页已迁移;旧固定密码自动开户行为因安全原因不迁移']], ['Office / Service/SeatAdd_Submit', ['partial', 'saveServiceSeat 可绑定现有同帐套账号并原子生成席位 ID;缺失账号时明确阻塞弱密码开户']], ['Office / Service/CodeAdd', ['partial', '现有 useType=12 欢迎语编辑页已迁移;新增受 Temp.id 保留字段冲突阻塞']], ['Office / Service/CodeAdd_Submit', ['partial', '现有欢迎语由 saveServiceCode 白名单更新名称、HTML 内容和主题;新增明确阻塞']], ['Office / Service/Seat_API', ['partial', 'serviceBatch 已覆盖席位和欢迎语删除;chat_del 因 ChatMsg 数据类缺失而阻塞']], ['Office / Service/CodeList', ['implemented', '已由 serviceCodes 仅按 useType=12 帐套隔离读取客服欢迎语']], ['Office / Service/MsgEx', ['blocked-data', '目标 Schema 缺少旧 ChatMsg 会话消息表与历史数据']], ['Office / Service/MsgInfo', ['blocked-data', '目标 Schema 缺少旧 ChatMsg 单条消息详情数据']], ['Office / Service/MsgList', ['blocked-data', '目标 Schema 缺少旧 ChatMsg 消息列表数据']], ['Shop / Store/StoreManage', ['implemented', '已由 storeApplications 按帐套、审核状态和关键词分页读取店铺']], ['Shop / Store/Store_API', ['partial', 'storeBatch 已覆盖审核、取消审核、推荐和取消推荐;因商品主表缺失而阻止真实删除店铺']], ['Shop / Store/StoreStyle', ['implemented', '已由 storeStyles 帐套隔离分页和关键词检索替代']], ['Shop / Store/Style_API', ['implemented', '已由 storeBatch 覆盖带店铺引用保护的样式删除']], ['Shop / Store/StoreStyleAdd', ['partial', '现有店铺样式编辑页已迁移;新增因旧 id 无法持久化而阻塞']], ['Shop / Store/StoreStyleAdd_Submit', ['partial', '现有样式由 saveStoreStyle 白名单更新模板路径、缩略图与说明;新增明确阻塞']], ['Shop / Store/StoreUpdate', ['partial', '现有店铺资料、所属账号和样式编辑页已迁移;旧模型 6 创建链缺失']], ['Shop / Store/StoreUpdate_Submit', ['partial', '现有店铺由 saveStoreApplication 校验同帐套用户和样式后更新;新增明确阻塞']], ['Shop / Store/Product', ['blocked-data', '旧 ZL_Commodities 商品主表缺失,目标 Product/StoreProduct 只有扩展碎片,无法重建商品列表']], ]); const blockedDataModules = new Map([ ['Order', '目标库缺少订单、订单商品、支付与物流主表'], ['Pay', '目标库缺少支付流水、订单支付明细及可验证的交易数据'], ['Sale', '目标库缺少订单销售明细与可复算的销售事实表'], ['Shop / Coupon', '目标库无优惠券、促销实例与用户领取关系'], ['Shop / Refund', '目标库无订单退款与退款流水'], ['Product', '目标 Product 仅为旧商品附表,缺少 ZL_Commodities 主表'], ]); const blockedInfrastructureModules = new Map([ ['Extend / DBTool', '依赖数据库备份恢复、建表或服务器文件系统,不适用于托管 Parse 运行时'], ['Files', '依赖旧站点文件系统与文件云配置,尚无新对象存储方案'], ['FontManager', '依赖服务器字体文件安装与删除权限'], ['Label / PowerShell', '依赖 Windows PowerShell 与服务器命令执行,云函数明确禁止'], ['Label / SiteDeploy', '依赖站点发布、远程命令与文件下载基础设施'], ['Site', '依赖 IIS 站点、虚拟目录、主机池与数据库服务器管理'], ['Template', '依赖旧模板/CSS 文件系统和 Zoomla 标签运行时'], ['Extend / MyCss', '依赖旧站点 CSS 文件读写与下载'], ['Mobile / WeiXin', '依赖新版微信、支付、模板消息和服务通知凭据'], ['User / Mail', '依赖邮件与短信服务商配置及发送凭据'], ]); const markdown = readFileSync(sourcePath, 'utf8'); const entries = []; const occurrences = new Map(); for (const line of markdown.split(/\r?\n/)) { const match = line.match(/^\| ([^|]+) \| (\d+) \| (.+) \|$/); if (!match || match[1].trim() === '模块 / 控制器') continue; const moduleName = match[1].trim(); const actions = [...match[3].matchAll(/`([^`]+)`/g)].map((item) => item[1]); if (actions.length !== Number(match[2])) throw new Error(`${moduleName}: 动作数量不一致`); for (const action of actions) { const key = `${moduleName}/${action}`; const occurrence = (occurrences.get(key) || 0) + 1; occurrences.set(key, occurrence); let status = 'pending'; let reason = '尚未逐项迁移或完成等价性核验'; if (explicit.has(key)) [status, reason] = explicit.get(key); else if (blockedDataModules.has(moduleName)) { status = 'blocked-data'; reason = blockedDataModules.get(moduleName); } else if (blockedInfrastructureModules.has(moduleName)) { status = 'blocked-infrastructure'; reason = blockedInfrastructureModules.get(moduleName); } entries.push({ module: moduleName, action, occurrence, status, reason }); } } if (entries.length !== 1042) throw new Error(`预期 1042 个后台动作,实际 ${entries.length}`); const generated = `// Generated by scripts/generate-admin-coverage.mjs. Do not edit by hand.\n` + `export type LegacyAdminCoverageStatus = 'implemented' | 'partial' | 'blocked-data' | 'blocked-infrastructure' | 'pending';\n` + `export interface LegacyAdminCoverageEntry { module: string; action: string; occurrence: number; status: LegacyAdminCoverageStatus; reason: string; }\n` + `export const LEGACY_ADMIN_COVERAGE: readonly LegacyAdminCoverageEntry[] = ${JSON.stringify(entries, null, 2)};\n`; if (checkOnly) { const current = readFileSync(outputPath, 'utf8'); if (current !== generated) throw new Error('后台迁移覆盖台账已过期,请运行 npm run admin-coverage:generate'); console.log(`Admin coverage is current: ${entries.length} actions.`); } else { writeFileSync(outputPath, generated); console.log(`Generated ${outputPath}: ${entries.length} actions.`); }