文件
shanghaipeiwan/server/tests/dashboard-reality.spec.ts
xcbyy 05815b4708 feat(ui): 余下两页接入主题 + 清理后台模板 demo(1+2)
【1. 主题补全】
- pwuniapp/pages/expert/workspace.vue(大神工作台):根节点加 theme class,66 处深色硬编码改为全局主题变量(bg-primary/surface/surface-elevated/text-*/border-subtle/color-brand(-gradient))
- pwuniapp/pages/activity/my-ticket.vue(我的门票):同样接入主题;条码/二维码区域保持黑白(可扫描,不做主题化)
- 两页 onShow 刷新 currentThemeKey,切换主题回到页面即时生效

【2. 后台模板 demo 清理】
- 删除模板路由模块:form / list / profile / result / visualization(原本 hideInMenu 不可见)
- 删除对应 views 目录、api(form/list/profile/visualization/dashboard)、dashboard/monitor
- 删除 src/mock 与全部 views/**/mock.ts,并移除 main.ts 的 `import './mock'`
- 可见工作台移除:content-chart(调用不存在的 /api/content-data)、popular-content(写死假活动数据);分类占比卡片改为整行
- 同步清理 zh-CN/en-US locale 中对应导入与展开

【验证】
- 后台 `pnpm build` 通过,产物显著减小(chart 分块 1026KB→576KB)
- 新增 theme-and-admin-cleanup.spec.ts;更新 dashboard-reality.spec.ts
- 全量 100 套件 / 685 用例全绿
2026-10-20 15:01:50 +08:00

53 行
2.2 KiB
TypeScript

// 已读取AGENTS.md
import * as fs from 'fs';
import * as path from 'path';
/**
* 第九批回归闸门:后台经营看板真实数据化
* 禁止服务端返回硬编码假经营数据,前后端均不得再以假走势兜底。
*/
describe('第九批看板真实数据闸门 (禁止硬编码经营指标)', () => {
const rootDir = path.resolve(__dirname, '../../');
const repoCode = fs.readFileSync(path.join(rootDir, 'server/src/db/repository.ts'), 'utf-8');
const statsStart = repoCode.indexOf('async getDashboardStats(');
const statsBlock = repoCode.slice(statsStart, statsStart + 3600);
describe('1. 服务端 getDashboardStats 必须来自真实聚合', () => {
it('不得再返回硬编码假指标', () => {
expect(statsStart).toBeGreaterThan(-1);
expect(statsBlock).not.toContain('todayGmv: 58920');
expect(statsBlock).not.toContain('activeUsers: 1250');
expect(statsBlock).not.toContain("date: '09-22'");
expect(statsBlock).not.toContain('{ name: \'同城陪吃\', value: 42 }');
});
it('必须基于订单表实时聚合今日 GMV / 走势 / 品类', () => {
expect(statsBlock).toContain('DATE(created_at) = CURDATE()');
expect(statsBlock).toContain('GROUP BY track');
expect(statsBlock).toContain('DATE_SUB(CURDATE(), INTERVAL 6 DAY)');
expect(statsBlock).toContain('recentGmvTrend');
});
it('接单中大神数量来自真实计数', () => {
expect(statsBlock).toContain('FROM companions WHERE status = "接单中"');
});
});
describe('2. 前端走势图不得以假数据兜底', () => {
it('已移除调用不存在接口(/api/content-data)的走势图组件,工作台不再引用', () => {
const chartPath = path.join(
rootDir,
'admin/arco-design-pro-vite/src/views/dashboard/workplace/components/content-chart.vue'
);
expect(fs.existsSync(chartPath)).toBe(false);
const workplace = fs.readFileSync(
path.join(rootDir, 'admin/arco-design-pro-vite/src/views/dashboard/workplace/index.vue'),
'utf-8'
);
expect(workplace).not.toContain('ContentChart');
expect(workplace).not.toContain('PopularContent');
});
});
});