feat(activity&admin): 优化组局起止时段与性别限制,PC后台核销看板与登录页体验升级
这个提交包含在:
@@ -0,0 +1,45 @@
|
||||
// 已读取AGENTS.md
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
|
||||
/**
|
||||
* 第一百二十二批全量活动核销状态看板闸门 (查看所有活动的核销状态)
|
||||
*/
|
||||
describe('第一百二十二批全量活动核销状态看板闸门', () => {
|
||||
const rootDir = path.resolve(__dirname, '../../');
|
||||
const indexCode = fs.readFileSync(path.join(rootDir, 'server/src/index.ts'), 'utf-8');
|
||||
const repoCode = fs.readFileSync(path.join(rootDir, 'server/src/db/repository.ts'), 'utf-8');
|
||||
const verifyVuePath = path.join(
|
||||
rootDir,
|
||||
'admin/arco-design-pro-vite/src/views/activity/verify/index.vue'
|
||||
);
|
||||
const verifyVueCode = fs.readFileSync(verifyVuePath, 'utf-8');
|
||||
|
||||
it('仓储层必须实现 getAllActivityParticipants 方法并关联活动与用户详情', () => {
|
||||
expect(repoCode).toContain('getAllActivityParticipants(): Promise<any[]>');
|
||||
expect(repoCode).toContain('FROM participants p');
|
||||
expect(repoCode).toContain('LEFT JOIN activities a ON a.id = p.activity_id');
|
||||
expect(repoCode).toContain('checkinStatus: Boolean(p.checkinStatus)');
|
||||
});
|
||||
|
||||
it('服务端路由必须挂载 GET /api/activities/all 并限制管理员权限', () => {
|
||||
expect(indexCode).toContain("app.get('/api/activities/all'");
|
||||
expect(indexCode).toContain('isVerifiedAdminRequest(req)');
|
||||
expect(indexCode).toContain('repo.getAllActivityParticipants()');
|
||||
expect(indexCode).toContain("app.post('/api/activities/all/verify'");
|
||||
});
|
||||
|
||||
it('管理后台核销看板必须提供「全部」选项并支持全量核销追踪', () => {
|
||||
expect(verifyVueCode).toContain('value="all"');
|
||||
expect(verifyVueCode).toContain('全部 (查看所有活动核销状态)');
|
||||
expect(verifyVueCode).toContain('所属活动 / 组局');
|
||||
expect(verifyVueCode).toContain('filterStatus');
|
||||
expect(verifyVueCode).toContain('selectedActivityId.value === \'all\'');
|
||||
});
|
||||
|
||||
it('新增的前后端代码与测试严禁包含任何系统 Emoji 字符', () => {
|
||||
const emojiRegex = /(?:\p{Extended_Pictographic}|\p{Emoji_Presentation}|[\u2600-\u27BF])/u;
|
||||
expect(emojiRegex.test(indexCode)).toBe(false);
|
||||
expect(emojiRegex.test(verifyVueCode)).toBe(false);
|
||||
});
|
||||
});
|
||||
在新工单中引用
屏蔽一个用户