const assert = require('node:assert/strict'); const fs = require('node:fs'); const vm = require('node:vm'); const ts = require('../admin-web/node_modules/typescript'); (async () => { let pending = 2; const responses = { '/operator/analytics/dashboard': { totalUsers: 12, approvedProfiles: 10 }, '/operator/analytics/v11-dashboard': { localEligibility: { pending: 99 } }, '/operator/activities': [], '/operator/matchmaker/management/services': [ { serviceId: 'demo', status: 'waiting_user', userDisplayNumber: 'YH2026051502', latestFollowupContent: 'Demo验收跟进', latestFollowupAt: new Date().toISOString() }, ], }; const exports = {}; const source = fs.readFileSync('admin-web/src/services/dashboard.ts', 'utf8'); vm.runInNewContext(ts.transpileModule(source, { compilerOptions: { module: ts.ModuleKind.CommonJS } }).outputText, { exports, require: () => ({ default: { get: async url => ({ success: true, data: url === '/operator/reviews/stats' ? { pending, processing: 1 } : responses[url] }) } }), }); const perms = ['analytics.view', 'activity.view', 'matchmaker.view', 'matchmaker.assign', 'review.view']; let model = await exports.loadDashboard(perms); assert.equal(model.metrics.find(m => m.key === 'pending_reviews').value, 3); assert.equal(model.metrics.find(m => m.key === 'matchmaker_todos').value, 1); assert.equal(model.followups[0].content, 'Demo验收跟进'); assert.equal(exports.summarizeMatchmakerServices(responses['/operator/matchmaker/management/services']).total, 1); assert.equal(model.metrics.find(m => m.key === 'matchmaker_todos').route, '/matchmaker'); pending = 1; model = await exports.loadDashboard(perms); assert.equal(model.metrics.find(m => m.key === 'pending_reviews').value, 2); assert.match(fs.readFileSync('admin-web/src/views/DashboardView.vue', 'utf8'), /onActivated\(retryLoad\)/); console.log('PASS: 审核队列真实计数、审核后减一、管理服务待办与跟进、缓存返回刷新'); })().catch(error => { console.error(error); process.exitCode = 1; });