租户端基础设施: - 新增工作台首页(欢迎信息/统计/待办/快捷操作/新手引导) - 新增机构信息管理页(自助查看编辑机构信息) - 修复403报错(fetchTenants加超管守卫) - 修复权限(log:read/notice:update/notice:delete/contest:work:read) - 修复评审规则组件映射 活动管理全模块优化(机构端视角): - 活动列表:加统计概览+精简列+筛选自动查询+发布弹窗修复+操作逻辑优化 - 创建/编辑活动:重构布局(去card嵌套+栅格响应式+分区卡片) - 评委管理:统一主色调+冻结确认+导入导出disabled - 报名管理:去Tab+统计+审核状态列+批量审核接口 - 报名记录:统计概览+去机构列+撤销审核+返回按钮+去参与方式列 - 作品管理:去Tab+统计+递交进度彩色+筛选修复(assignStatus/submitTime) - 评审进度:去Tab+统计+实际完成率状态+筛选修复 - 评审规则:表格加评委数/计算方式+描述列修复+删除保护 - 成果发布:去Tab+统计+操作文案优化 - 通知公告:统一主色调+发布确认+操作逻辑+状态筛选+时间范围 成果发布详情功能补全: - 计算得分/排名/设置奖项三步操作流程 - 排名列(金银铜徽章)+奖项列+奖项筛选 - 自定义奖项(动态添加行替代硬编码一二三等奖) - 后端AutoSetAwardsDto改为awards数组格式 数据统计看板(新模块): - 后端analytics module(overview+review两个接口) - 运营概览:6指标卡片+报名转化漏斗+ECharts月度趋势+活动对比表 - 评审分析:4效率卡片+评委工作量表+ECharts奖项分布饼图 - 菜单注册:数据统计→运营概览+评审分析 Bug修复: - 超管重置其他租户用户密码报"用户不存在" - gdlib登录快捷标签密码不一致 - 分配评委去掉评审时间限制 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
83 lines
2.8 KiB
TypeScript
83 lines
2.8 KiB
TypeScript
import { Module } from '@nestjs/common';
|
|
import { ConfigModule } from '@nestjs/config';
|
|
import { APP_GUARD, APP_INTERCEPTOR, APP_FILTER } from '@nestjs/core';
|
|
import { PrismaModule } from './prisma/prisma.module';
|
|
import { AuthModule } from './auth/auth.module';
|
|
import { UsersModule } from './users/users.module';
|
|
import { RolesModule } from './roles/roles.module';
|
|
import { PermissionsModule } from './permissions/permissions.module';
|
|
import { MenusModule } from './menus/menus.module';
|
|
import { DictModule } from './dict/dict.module';
|
|
import { ConfigModule as SystemConfigModule } from './config/config.module';
|
|
import { LogsModule } from './logs/logs.module';
|
|
import { TenantsModule } from './tenants/tenants.module';
|
|
import { SchoolModule } from './school/school.module';
|
|
import { ContestsModule } from './contests/contests.module';
|
|
import { AnalyticsModule } from './contests/analytics/analytics.module';
|
|
import { JudgesManagementModule } from './judges-management/judges-management.module';
|
|
import { UploadModule } from './upload/upload.module';
|
|
import { HomeworkModule } from './homework/homework.module';
|
|
import { OssModule } from './oss/oss.module';
|
|
import { AI3DModule } from './ai-3d/ai-3d.module';
|
|
import { PublicModule } from './public/public.module';
|
|
import { JwtAuthGuard } from './auth/guards/jwt-auth.guard';
|
|
import { RolesGuard } from './auth/guards/roles.guard';
|
|
import { TransformInterceptor } from './common/interceptors/transform.interceptor';
|
|
import { LoggingInterceptor } from './common/interceptors/logging.interceptor';
|
|
import { HttpExceptionFilter } from './common/filters/http-exception.filter';
|
|
|
|
@Module({
|
|
imports: [
|
|
ConfigModule.forRoot({
|
|
isGlobal: true,
|
|
// envFilePath 数组中第一个文件优先级最高
|
|
envFilePath: [
|
|
`.env.${process.env.NODE_ENV || 'development'}`, // 优先加载环境特定配置
|
|
'.env', // 通用配置作为后备
|
|
],
|
|
}),
|
|
PrismaModule,
|
|
AuthModule,
|
|
UsersModule,
|
|
RolesModule,
|
|
PermissionsModule,
|
|
MenusModule,
|
|
DictModule,
|
|
SystemConfigModule,
|
|
LogsModule,
|
|
TenantsModule,
|
|
SchoolModule,
|
|
ContestsModule,
|
|
AnalyticsModule,
|
|
JudgesManagementModule,
|
|
UploadModule,
|
|
HomeworkModule,
|
|
OssModule,
|
|
AI3DModule,
|
|
PublicModule,
|
|
],
|
|
providers: [
|
|
{
|
|
provide: APP_GUARD,
|
|
useClass: JwtAuthGuard,
|
|
},
|
|
{
|
|
provide: APP_GUARD,
|
|
useClass: RolesGuard,
|
|
},
|
|
{
|
|
provide: APP_INTERCEPTOR,
|
|
useClass: LoggingInterceptor, // 日志拦截器,先执行
|
|
},
|
|
{
|
|
provide: APP_INTERCEPTOR,
|
|
useClass: TransformInterceptor, // 响应转换拦截器
|
|
},
|
|
{
|
|
provide: APP_FILTER,
|
|
useClass: HttpExceptionFilter,
|
|
},
|
|
],
|
|
})
|
|
export class AppModule {}
|