文件
shanghaipeiwan/server/tests/theme-and-admin-cleanup.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.5 KiB
TypeScript

// 已读取AGENTS.md
import * as fs from 'fs';
import * as path from 'path';
/**
* 第八十四批:剩余页面主题补全 + 管理后台模板 demo 清理。
*/
describe('第八十四批主题补全与后台清理闸门', () => {
const root = path.resolve(__dirname, '../../');
const read = (p: string) => fs.readFileSync(path.join(root, p), 'utf-8');
const exists = (p: string) => fs.existsSync(path.join(root, p));
const admin = 'admin/arco-design-pro-vite/src';
it('大神工作台/我的门票接入主题(根节点主题类 + 颜色变量)', () => {
const ws = read('pwuniapp/pages/expert/workspace.vue');
const mt = read('pwuniapp/pages/activity/my-ticket.vue');
expect(ws).toContain("'theme-' + currentThemeKey");
expect(ws).toContain('var(--bg-primary)');
expect(ws).toContain('var(--bg-surface)');
expect(ws).toContain('var(--text-primary)');
expect(ws).toContain('var(--border-subtle)');
expect(mt).toContain("'theme-' + currentThemeKey");
expect(mt).toContain('var(--bg-primary)');
expect(mt).toContain('var(--color-brand');
// 条码/二维码必须保持黑白(可扫描),不做主题化
expect(mt).toContain('background-color: #0F172A;');
expect(mt).toContain('background-color: #FFFFFF;');
});
it('后台模板 demo 路由模块与视图已删除', () => {
for (const f of ['form.ts', 'list.ts', 'profile.ts', 'result.ts', 'visualization.ts']) {
expect(exists(`${admin}/router/routes/modules/${f}`)).toBe(false);
}
for (const d of ['views/form', 'views/list', 'views/profile', 'views/result', 'views/visualization', 'views/dashboard/monitor', 'mock']) {
expect(exists(`${admin}/${d}`)).toBe(false);
}
for (const f of ['api/form.ts', 'api/list.ts', 'api/profile.ts', 'api/visualization.ts', 'api/dashboard.ts']) {
expect(exists(`${admin}/${f}`)).toBe(false);
}
// 真实业务模块仍在
for (const f of ['activity.ts', 'banner.ts', 'community.ts', 'companion.ts', 'dashboard.ts', 'finance.ts', 'order.ts', 'safety.ts', 'user.ts']) {
expect(exists(`${admin}/router/routes/modules/${f}`)).toBe(true);
}
});
it('可见工作台不再引用失效图表/假活动数据组件,且不再加载 mock', () => {
const workplace = read(`${admin}/views/dashboard/workplace/index.vue`);
expect(workplace).not.toContain('ContentChart');
expect(workplace).not.toContain('PopularContent');
expect(read(`${admin}/main.ts`)).not.toContain("import './mock'");
});
});