/** * 每菜单页的操作提示(guides)文案,对齐旧版 backend/static/admin-interactions.js 的 guides 表原文 * (除 group-manage / duplicate-check 用通用 fallback)。key = 路由 meta.menuKey。 */ export interface OperationGuideData { text: string steps: string[] } export const OPERATION_GUIDE_FALLBACK: OperationGuideData = { text: '先使用筛选定位记录,再进行新增、编辑、导出等操作。涉及删除的数据会要求二次确认。', steps: ['选择筛选条件', '处理记录', '核对反馈'], } /** 折叠状态 localStorage key(沿用旧版 shufuAdminGuideCollapsed 语义)。 */ export const OPERATION_GUIDE_STORAGE_KEY = 'shufuAdminGuideCollapsed' export const OPERATION_GUIDES: Record = { admin_users: { text: '先用筛选定位账号,再编辑角色和菜单权限;删除账号会要求二次确认。', steps: ['筛选账号', '编辑权限', '确认保存'], }, admin_columns: { text: '菜单会影响后台和软件端的可见范围。先填写名称并选择对应页面,再设置上级菜单;顺序直接拖动列表左侧手柄调整。', steps: ['新增或调整菜单', '设置层级', '拖动排序'], }, admin_group_manage: OPERATION_GUIDE_FALLBACK, admin_user_secrets: { text: '用户密钥按账号绑定,列表只展示脱敏值。可对单条立即检测连通性;清空后该用户需要重新配置密钥。', steps: ['筛选用户或状态', '立即检测连通性', '必要时清空'], }, admin_dedupe_total_data: { text: '支持按关键词、用户、分组和国家筛选;导入前先确认所选分组,导出会按日期范围生成文件。', steps: ['选择分组', '筛选或导入', '核对并导出'], }, admin_invalid_asin_data: { text: '维护不符合规则的 ASIN 或品牌。添加后可使用上方筛选快速回查。', steps: ['填写 ASIN/品牌', '选择分组', '保存并回查'], }, admin_query_asin: { text: '查询 ASIN 以店铺为单位维护。列表里点击 ASIN 即可复制,点右侧「配置」可一次维护该店铺所有站点的 ASIN。', steps: ['筛选店铺', '打开配置抽屉', '保存或导出'], }, admin_product_categories: { text: '类目树支持展开查看层级。搜索、编辑和删除都在同一列表中完成。', steps: ['搜索类目', '展开层级', '新增或编辑'], }, admin_skip_price_asin: { text: '最低价 ASIN 以店铺为单位维护。列表里点击 ASIN 即可复制,点右侧「配置」可一次维护该店铺所有站点的 ASIN 与最低价。', steps: ['筛选店铺', '打开配置抽屉', '保存或批量导入'], }, admin_shop_keys: { text: '紫鸟令牌属于敏感配置。白名单状态可悬停查看检测详情,编辑前请先核对账号名称。', steps: ['新增或筛选密钥', '查看白名单状态', '编辑或删除'], }, admin_shop_manage: { text: '店铺信息按分组管理。长商城名会自动缩略,悬停即可查看完整内容。', steps: ['选择分组', '维护店铺信息', '筛选核对结果'], }, admin_shop_data_crawl_tasks: { text: '店铺数据任务按状态和时间筛选。批量操作前请核对已选任务。', steps: ['筛选任务', '检查状态', '执行批量操作'], }, // admin_shop_data_duplicate_check(店铺撞款监控)为例外页:不展示全局提示条,不参与对齐。 admin_image_video_tasks: { text: '可先使用筛选缩小任务范围,再查看任务状态、结果和权限范围。', steps: ['设置筛选', '查看任务结果', '按需处理任务'], }, admin_history: { text: '生成记录可按用户和时间范围回溯,用于核对结果文件和执行时间。', steps: ['设置时间范围', '筛选记录', '查看结果预览'], }, admin_version: { text: '上传版本后请核对版本号和下载链接,再通知用户更新。', steps: ['上传压缩包', '检查版本记录', '维护历史版本'], }, admin_tutorial: { text: '上传新的教程压缩包后即刻生效:工具台首页「立即下载教程」以下载最新上传的包为准。确认旧包不再需要后再删除。', steps: ['上传教程压缩包', '到工具台核对下载', '清理历史包'], }, digital_human_version: { text: '数字人版本需先上传草稿,再发布并标记最新版本。', steps: ['上传草稿', '确认更新日志', '发布或设为最新'], }, admin_user_secret_usage: { text: '按日期范围统计各用户的密钥调用次数(货源查询与外观专利按 LLM 请求次数、代理按提取次数),用于评估用户资源损耗。', steps: ['选择日期范围', '筛选用户或分组', '核对各模块次数'], }, } /** 全部有独立/兜底提示的后台业务菜单 key。 */ export const OPERATION_GUIDE_MENU_KEYS = Object.keys(OPERATION_GUIDES) /** 返回指定菜单 key 的提示数据;menuKey 不在已知集合时返回 null(登录/404 等页面不展示)。 */ export function operationGuideFor(menuKey: unknown): OperationGuideData | null { if (typeof menuKey !== 'string' || !menuKey) return null return OPERATION_GUIDES[menuKey] ?? null }