import { existsSync, readFileSync } from 'node:fs' import { resolve } from 'node:path' import process from 'node:process' const root = process.cwd() const expectedPages = [ ['business', 'renew', '套餐续费确认'], ['business', 'change', '套餐变更确认'], ['business', 'addon', '订购加油包'], ['business', 'diagnosis', '智能诊断'], ['business', 'workOrder', '工单列表'], ['business', 'workOrderCreate', '提交工单'], ['business', 'workOrderDetail', '工单详情'], ['card', 'detail', '卡片详情'], ['card', 'packageDetail', '套餐详情'], ['message', 'systemDetail', '系统消息详情'], ['message', 'cardDetail', '卡片消息详情'], ['user', 'profile', '账号资料'], ['user', 'realName', '实名信息'], ['user', 'notification', '通知设置'], ['user', 'feedback', '帮助与反馈'], ['user', 'contact', '联系客服'], ['user', 'agreement', '协议与隐私'], ['user', 'about', '关于我们'], ] for (const [owner, name, title] of expectedPages) { const file = resolve(root, `src/pages/${owner}/views/${name}/index.vue`) if (!existsSync(file)) { throw new Error(`缺少子界面文件:src/pages/${owner}/views/${name}/index.vue`) } const source = readFileSync(file, 'utf8') if (!source.includes('definePage({')) { throw new Error(`子界面缺少 definePage:${file}`) } if (!source.includes(`navigationBarTitleText: '${title}'`)) { throw new Error(`子界面标题不匹配:${file},期望 ${title}`) } } const entryFiles = [ 'src/pages/business/index.vue', 'src/pages/card/components/CardList.vue', 'src/pages/card/components/PackageList.vue', 'src/pages/message/components/MessageList.vue', 'src/pages/user/components/UserServiceCells.vue', 'src/pages/user/components/UserSupportCells.vue', ] for (const relative of entryFiles) { const source = readFileSync(resolve(root, relative), 'utf8') if (!source.includes('RouterPath')) { throw new Error(`入口未使用 RouterPath 跳转:${relative}`) } if (!source.includes('navigateTo')) { throw new Error(`入口未调用 navigateTo:${relative}`) } } console.log('sub pages checked')