import type { MenuDataItem } from '@ant-design/pro-components'; // 页头标题/副标题规则:语义对齐 web.archived/src/app/Layout.jsx 的 pageMetadataRules。 const rules: Array<{ test: (path: string) => boolean; title: string; subtitle: string }> = [ { test: (p) => p === '/accounts/import', title: '账号导入', subtitle: '管理分享链接解析任务,解析成功后自动加入监控账号。' }, { test: (p) => p === '/accounts', title: '我的账号', subtitle: '创建和管理自己维护的账号。' }, { test: (p) => p === '/accounts/monitoring', title: '监控账号', subtitle: '管理需要持续跟踪的竞品账号及采集状态。' }, { test: (p) => p === '/accounts/new', title: '创建社媒账号', subtitle: '创建账号后,再在编辑页配置登录身份与账号策略。' }, { test: (p) => /\/edit$/.test(p) && p.startsWith('/accounts/'), title: '编辑社媒账号', subtitle: '维护账号资料、登录核验与自动响应策略。' }, { test: (p) => p.startsWith('/accounts/'), title: '账号详情', subtitle: '查看账号状态、登录身份与运行环境绑定。' }, { test: (p) => p === '/creator/competitors', title: '竞品分析', subtitle: '查看竞品作品与指标,分享链接导入请前往账号导入。' }, { test: (p) => p === '/creator/workbench', title: '运营工作台', subtitle: '评论、线索、私信与写操作均保留来源和明确结果。' }, { test: (p) => p === '/creator/settings', title: '采集设置', subtitle: '统一配置采集窗口、指标采集和已批准的服务。' }, { test: (p) => p === '/competitors' || p.startsWith('/competitors/'), title: '竞品分析', subtitle: '粘贴作品分享内容,自动识别作者并加入监听队列。' }, { test: (p) => p.startsWith('/drafts/'), title: '草稿核对', subtitle: '核对版本化草稿,确认后再将操作加入队列。' }, { test: (p) => p.startsWith('/attempts/'), title: 'Attempt 详情', subtitle: '查看执行结果、运行环境与网络出口。' }, { test: (p) => p === '/tasks', title: '任务中心', subtitle: '逐条处理暂停、版本变化与未知执行结果。' }, { test: (p) => p.startsWith('/tasks/'), title: '任务详情', subtitle: '查看任务状态、执行结果与允许的下一步操作。' }, { test: (p) => p === '/browsers', title: '运行环境', subtitle: '启动、停止并回收隔离的指纹浏览器运行环境。' }, { test: (p) => p === '/browsers/new', title: '创建运行环境', subtitle: '为已授权且暂停的账号绑定网关、指纹与网络出口。' }, { test: (p) => p.startsWith('/browsers/'), title: '运行环境详情', subtitle: '查看环境状态、账号绑定和运行实例信息。' }, { test: (p) => p === '/network-exits', title: '网络出口', subtitle: '维护固定出口、健康观测与账号绑定。' }, { test: (p) => p.startsWith('/network-exits/'), title: '网络出口详情', subtitle: '查看出口配置、健康状态和绑定关系。' }, { test: (p) => p === '/gateways', title: '网关管理', subtitle: '注册并检查宿主机 native browser gateway。' }, { test: (p) => p.startsWith('/gateways/'), title: '网关详情', subtitle: '查看网关连接信息和运行状态。' }, ]; // 菜单结构:与 web.archived/src/app/Layout.jsx 完全一致(运营 / 资源 两组)。 export const menu: MenuDataItem[] = [ { name: '运营', children: [ { path: '/accounts/import', name: '账号导入' }, { path: '/accounts', name: '我的账号' }, { path: '/accounts/monitoring', name: '监控账号' }, { path: '/creator/competitors', name: '竞品分析' }, { path: '/creator/workbench', name: '运营工作台' }, { path: '/creator/settings', name: '采集设置' }, { path: '/tasks', name: '任务中心' }, ], }, { name: '资源', children: [ { path: '/browsers', name: '运行环境' }, { path: '/network-exits', name: '网络出口' }, { path: '/gateways', name: '网关管理' }, ], }, ]; export function pageMetadata(pathname: string): { title: string; subtitle: string } { const matched = rules.find((item) => item.test(pathname)); if (matched) return { title: matched.title, subtitle: matched.subtitle }; for (const group of menu) { const hit = (group.children ?? []).find((item) => item.path && (pathname === item.path || pathname.startsWith(`${item.path}/`))); if (hit) return { title: hit.name ?? '', subtitle: 'CreatorHub 运营控制台' }; } return { title: 'CreatorHub', subtitle: '运营控制台' }; }