|
|
@@ -15,12 +15,12 @@ const CLASS_LABELS = {
|
|
|
GradeCate: '多级字典分类', Grade: '多级字典选项',
|
|
|
Currency: '货币管理', SysHoliday: '节假日管理',
|
|
|
Product: '商品', StoreProduct: '门店商品', StoreApplication: '门店申请', ShopFareTlp: '商城运费模板', ShopMoneyRegular: '金额规则', PayPlat: '支付平台',
|
|
|
- GuestBar: '互动社区', Guestbook: '留言', Guestcate: '留言分类', Feedback: '反馈', Baike: '百科审核', Search: '后台快捷入口', AdZone: '广告位管理', AdInfo: '广告内容管理', FontPicShape: '字体图形素材', FontPicShapeType: '字体图形分类', DesignAsk: '问卷调查', DesignQuestion: '问卷题目', DesignAnswer: '问卷答卷', ServiceSeat: '客服席位', Temp: '客服欢迎语', StoreApplication: '店铺管理', StoreStyle: '店铺样式', PageStyle: '黄页样式', PlatComp: '协同办公企业', ContentTagKey: '内容标签词库', UserLevel: '积分等级', UserMoneyLog: '资金积分流水', UserPromotion: '用户推广关系', CRMSAttr: 'CRM 客户类型', SysLog: '系统日志', MisType: 'OA 流程类型', Agency: '代理机构', DeliveryCenter: '交付中心'
|
|
|
+ GuestBar: '互动社区', Guestbook: '留言', Guestcate: '留言分类', Feedback: '反馈', Baike: '百科审核', Pub: '互动模块定义', PubTw: '提问互动提交', PubWTHD: '问题回答提交', PubZXDC: '在线调查提交', Search: '后台快捷入口', AdZone: '广告位管理', AdInfo: '广告内容管理', FontPicShape: '字体图形素材', FontPicShapeType: '字体图形分类', DesignAsk: '问卷调查', DesignQuestion: '问卷题目', DesignAnswer: '问卷答卷', ServiceSeat: '客服席位', Temp: '客服欢迎语', StoreApplication: '店铺管理', StoreStyle: '店铺样式', PageStyle: '黄页样式', PlatComp: '协同办公企业', ContentTagKey: '内容标签词库', UserLevel: '积分等级', UserMoneyLog: '资金积分流水', UserPromotion: '用户推广关系', CRMSAttr: 'CRM 客户类型', SysLog: '系统日志', MisType: 'OA 流程类型', Agency: '代理机构', DeliveryCenter: '交付中心'
|
|
|
};
|
|
|
const ALLOWED_CLASSES = new Set([
|
|
|
'PageTemplate','PaperQuestions','PayPlat','Permission','PlatComp','App','DesignAnswer','DesignAsk','Attachment','DesignPage','DesignQuestion','DesignRes','Feedback','DesignScence','StudentAchieve','ContentArticle','DesignSiteInfo','Profile','AdInfo','AdZone','ARoleAuth','Baike','ExamSysQuestions','ContactInfo','VocabularyWord','AssessmentProfile','Agency','MemoryPracticeRecord','DeliveryCenter','CourseBinding','PracticeRecord','CourseAppointment','Account','SurveyItem','SurveyLog','LessonRecord','DailyStudyRecord','CommonModel','ContentPublish','Company','_Role','_User','CRMSAttr','Currency','Datadic','Datadiccategory','DesignTlp','DocModel','DocPermission','ExamClass','ExamSysPapers','ExamType','ExamPoint','ExTeacher','FontPicShape','FontPicShapeType','Grade','GradeCate','Group','GroupModel','GuestBar','Guestbook','Guestcate','MailTemp','Manager','MisProcedure','MisProLevel','MisSign','MisType','PageStyle','Model','ModelField','Node','NodeAuth','NodeModelTemplate','Product','PlatUserRole','Pub','PubTw','PubWTHD','PubZXDC','PublishNode','QuestionsKnowledge','Role','StoreProduct','SafeMobile','Search','SenTask','ServiceSeat','ShopFareTlp','ShopMoneyRegular','Special','StoreApplication','StoreStyle','SysCSSManage','SysHoliday','SysLog','Temp','ThirdPlatInfo','UserCredit','UserDummyPoint','UserFriendGroup','UserLevel','UserMoneyLog','UserPromotion','UserSIcon','UserUserPoint','UserExpDomP','UserExpHis'
|
|
|
]);
|
|
|
-const READ_ONLY_CLASSES = new Set(['_Role','Permission','PayPlat','ThirdPlatInfo','GuestBar','DesignAnswer','Baike','ExamSysPapers','ExamSysQuestions','PaperQuestions','ExamType','ContentPublish','PublishNode','SysLog']);
|
|
|
+const READ_ONLY_CLASSES = new Set(['_Role','Permission','PayPlat','ThirdPlatInfo','GuestBar','DesignAnswer','Baike','ExamSysPapers','ExamSysQuestions','PaperQuestions','ExamType','ContentPublish','PublishNode','SysLog','Pub','PubTw','PubWTHD','PubZXDC']);
|
|
|
const SYSTEM_FIELDS = new Set(['objectId','createdAt','updatedAt','ACL','company','password','authData','sessionToken','legacyPasswordHash','legacyPasswordHashType','appPassword','newapiToken','fmodeApiToken','useMasterKey','adminPassword','randNumber','adminRoleKey','isAdmin','roles','role','isDisabled','legacyUserId','legacyGroupId','legacyUserData','legacyUserPlat','groupId']);
|
|
|
const HIDDEN_FIELDS = new Set(['password','authData','sessionToken','legacyPasswordHash','legacyPasswordHashType','appPassword','newapiToken','fmodeApiToken','useMasterKey','adminPassword','randNumber','apiKey','appSecret','secret','token']);
|
|
|
const GENERIC_WRITE_TYPES = new Set(['String','Number','Boolean','Date','Pointer','Object','Array']);
|
|
|
@@ -1496,6 +1496,16 @@ async function handler(request, response) {
|
|
|
Index: '旧入口只重定向到提现申请页,目标缺少 Cash 提现主表,无法提供等价落点', WD: '目标 Schema 缺少 Cash 提现申请、手续费、结果、凭证与处理状态记录', WD_API: '目标没有可审核的提现申请记录', WDAudit: '目标缺少指定提现申请的金额、手续费、账户和处理详情', WDAudit_Accept: '目标缺少可原子审核的 Cash 提现事务记录', WDAudit_Reject: '目标缺少 Cash 提现申请及对应预扣余额账本,不能安全执行拒绝退款', UserBank: '目标 Schema 缺少 User_Bank 提现账户及审核状态数据', UserBankAdd: '目标没有可编辑的开户人、卡号、账户类型和开户行记录', UserBankAdd_Submit: '目标缺少 User_Bank 持久层,不能把提现账户错写到发票银行字段', UserBank_API: '目标没有可删除、审核或取消审核的提现账户记录'
|
|
|
}; if (!Object.prototype.hasOwnProperty.call(blockers, action)) fail(400, '不支持的旧推广提现动作'); fail(501, 'migration_blocked: ' + blockers[action]);
|
|
|
}
|
|
|
+ if (operation === 'legacyPubBlocker') {
|
|
|
+ const action = String(input.action || ''); const blockers = {
|
|
|
+ PubManage: '目标 Pub 模块定义与 PubTw/PubWTHD/PubZXDC 提交类均为空,无法还原互动模块列表', Pub_API: '旧删除、复制、恢复依赖 Pub 定义与动态表,modelname 还会检查 SQL 物理表;目标没有可操作记录或动态建表运行时', Pubinfo: '旧动作只跳转到指定 Pub 定义编辑页,目标 Pub 没有任何历史模块', PubAdd: '新增互动模块需要动态模型、表、标签与模板选择,目标云函数没有等价创建运行时', PubAdd_Submit: '旧提交会动态建 SQL 表、Model/ModelField、XML 标签及两套服务器 HTML 模板,云函数不能等价执行', Pubsinfo: '目标没有 Pub 定义可确定提交表,三个已签约 Pub 提交类也全部为空', PubsinfoAdd: '目标缺少互动模块定义、动态字段与可编辑的提交记录', PubsinfoAdd_Submit: '目标无法根据空的 Pub 定义选择动态提交表并保存系统字段与模型字段', PubInfo_API: '目标没有可删除、审核或取消审核的互动提交记录', PubInfo2_API: '旧企业入驻分支硬编码依赖缺失的 ZL_Pub_BDQYSH 提交表,不能直接改写企业与用户归属', PubsinfoReply: '目标没有互动父记录、动态字段和回复上下文', PubsinfoReply_Submit: '目标缺少可确定回复表的 Pub 定义及父提交记录'
|
|
|
+ }; if (!Object.prototype.hasOwnProperty.call(blockers, action)) fail(400, '不支持的旧互动模块动作'); fail(501, 'migration_blocked: ' + blockers[action]);
|
|
|
+ }
|
|
|
+ if (operation === 'legacyPushBlocker') {
|
|
|
+ const action = String(input.action || ''); const blockers = {
|
|
|
+ Index: '旧入口只跳转到推送 API 列表,目标缺少 Mobile_PushAPI 配置数据', APIList: '目标 Schema 缺少 Mobile_PushAPI 的别名、平台、AppKey 与密钥记录', API_del: '目标没有可定位并删除的推送服务配置', AddAPI: '目标没有可编辑或新增的极光推送 API 配置模型', AddAPI_Submit: '签约数据库未提供可安全存储和轮换推送 AppKey/AppSecret 的配置类', PushMsg: '目标缺少可选择的推送 API 配置与设备受众数据', PushMsg_Submit: '目标没有 JPush 凭据、SDK 消费者、ZL_UserBase.UC 设备注册号或移动端注册链,无法真实发送并记录结果', PushTlp: '目标 Schema 缺少 Mobile_PushTlp 推送模板与状态数据', AddPushTlp: '目标没有可编辑或新增的推送模板记录', AddPushTlp_Submit: '目标缺少推送模板名称、标题、内容和参数持久层', PushTlp_API: '目标没有可启用、停用或删除的推送模板', MsgList: '目标 Schema 缺少 Mobile_PushMsg 发送历史、受众与结果记录'
|
|
|
+ }; if (!Object.prototype.hasOwnProperty.call(blockers, action)) fail(400, '不支持的旧推送动作'); fail(501, 'migration_blocked: ' + blockers[action]);
|
|
|
+ }
|
|
|
if (operation === 'legacyLogBlocker') {
|
|
|
const action = String(input.action || ''); const blockers = {
|
|
|
TxtLog: '云函数运行时没有旧 /Log/{LogType}/ 本地日志目录', TxtLogContent: '云函数不能按文件名读取旧服务器文本日志', TxtLog_Down: '云函数没有旧服务器日志文件可下载',
|