/** * 批量审计页面(使用 reLaunch 避免页面栈限制) */ const automator = require('miniprogram-automator'); const ALL_PAGES = [ 'pages/health/input/index', 'pages/health/trend/index', 'pages/health/daily-monitoring/index', 'pages/appointment/index', 'pages/appointment/create/index', 'pages/article/index', 'pages/ai-report/list/index', 'pages/followup/detail/index', 'pages/consultation/detail/index', 'pages/mall/orders/index', 'pages/profile/family/index', 'pages/profile/reports/index', 'pages/profile/followups/index', 'pages/profile/medication/index', 'pages/profile/settings/index', 'pages/legal/user-agreement', 'pages/legal/privacy-policy', 'pages/doctor/index', 'pages/doctor/patients/index', 'pages/doctor/consultation/index', 'pages/doctor/followup/index', 'pages/doctor/report/index', 'pages/events/index', 'pages/device-sync/index', ]; // 带参数的页面(需要 id 等参数) const PAGES_WITH_PARAMS = { 'pages/appointment/detail/index': '?id=test-123', 'pages/article/detail/index': '?id=test-123', 'pages/report/detail/index': '?id=test-123', 'pages/ai-report/detail/index': '?id=test-123', 'pages/mall/exchange/index': '?id=test-123', 'pages/mall/detail/index': '?id=test-123', 'pages/profile/family-add/index': '?id=test-123', 'pages/doctor/patients/detail/index': '?id=test-123', 'pages/doctor/consultation/detail/index': '?id=test-123', 'pages/doctor/followup/detail/index': '?id=test-123', 'pages/doctor/report/detail/index': '?id=test-123', }; async function main() { console.log('连接 DevTools...'); const mp = await automator.connect({ wsEndpoint: 'ws://localhost:9420' }); // 验证 token const tokenLen = await mp.evaluate(() => { const t = wx.getStorageSync('access_token'); return t ? t.length : 0; }); if (tokenLen === 0) { console.log('ERROR: 无 token,请先运行 inject-auth.cjs'); process.exit(1); } console.log(`Token: ${tokenLen} chars\n`); const results = { ok: [], redirectToLogin: [], redirectOther: [], error: [] }; for (const pagePath of ALL_PAGES) { const param = PAGES_WITH_PARAMS[pagePath] || ''; const url = `/${pagePath}${param}`; try { await mp.reLaunch(url); await new Promise(r => setTimeout(r, 2000)); const current = await mp.currentPage(); if (current.path === pagePath) { results.ok.push(pagePath); console.log(` OK: ${pagePath}`); } else if (current.path === 'pages/login/index') { results.redirectToLogin.push(pagePath); console.log(` AUTH: ${pagePath} → login (需登录)`); } else { results.redirectOther.push(`${pagePath} → ${current.path}`); console.log(` REDIR: ${pagePath} → ${current.path}`); } } catch (e) { const msg = e.message.slice(0, 60); results.error.push(`${pagePath}: ${msg}`); console.log(` ERR: ${pagePath} - ${msg}`); } } console.log(`\n===== 审计摘要 =====`); console.log(`正常: ${results.ok.length}/${ALL_PAGES.length}`); console.log(`需登录: ${results.redirectToLogin.length}`); console.log(`重定向: ${results.redirectOther.length}`); console.log(`错误: ${results.error.length}`); if (results.redirectToLogin.length > 0) { console.log(`\n需登录页面 (API 401 → login):`); results.redirectToLogin.forEach(p => console.log(` - ${p}`)); } if (results.error.length > 0) { console.log(`\n错误页面:`); results.error.forEach(p => console.log(` - ${p}`)); } if (results.ok.length > 0) { console.log(`\n正常页面:`); results.ok.forEach(p => console.log(` - ${p}`)); } await mp.disconnect(); } main().catch(e => { console.error(e); process.exit(1); });