kindergarten_java/reading-platform-frontend/vite.config.ts
En b361b1885b fix: 教师端首页今日课程 courseName 和 className 关联查询
问题:
- 今日课程功能只查询了 lesson 表,没有 JOIN 关联表
- TeacherLessonVO 的 courseName 和 className 字段为 null
- 前端无法显示课程名称和班级名称

修复:
- LessonMapper 新增 selectTodayLessonsWithDetails() 方法
- 通过 LEFT JOIN course_package 和 clazz 表获取名称
- TeacherStatsServiceImpl 重写 getTodayLessons() 方法
- 添加类型转换辅助方法 (getLong/getString/getLocalDate/getLocalTime/getLocalDateTime)

影响范围:
- 教师端首页 - 今日课程模块
- API: GET /api/v1/teacher/today-lessons
- API: GET /api/v1/teacher/dashboard

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 18:43:47 +08:00

88 lines
2.1 KiB
TypeScript

import { defineConfig, loadEnv } from 'vite';
import vue from '@vitejs/plugin-vue';
import { resolve } from 'path';
import AutoImport from 'unplugin-auto-import/vite';
import Components from 'unplugin-vue-components/vite';
import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers';
import viteCompression from 'vite-plugin-compression';
import fileRouter from 'unplugin-vue-router/vite';
import UnoCSS from 'unocss/vite';
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, process.cwd(), '');
const port = parseInt(env.VITE_APP_PORT) || 5173;
const backendPort = env.VITE_BACKEND_PORT || '8480';
return {
plugins: [
vue(),
UnoCSS(),
fileRouter({
routesFolder: 'src/views',
extensions: ['.vue'],
importMode: 'sync',
}),
AutoImport({
imports: [
'vue',
'vue-router',
'pinia',
{
'ant-design-vue': ['message', 'notification', 'Modal'],
},
],
dts: 'src/auto-imports.d.ts',
// 添加 vue-router 的自动导入
vueTemplate: true,
}),
Components({
resolvers: [
AntDesignVueResolver({
importStyle: false,
}),
],
dts: 'src/components.d.ts',
}),
viteCompression({
verbose: true,
disable: false,
threshold: 10240,
algorithm: 'gzip',
ext: '.gz',
}),
],
resolve: {
alias: {
'@': resolve(__dirname, 'src'),
},
},
server: {
port,
host: true,
proxy: {
'/api': {
target: `http://localhost:${backendPort}`,
changeOrigin: true,
},
'/uploads': {
target: `http://localhost:${backendPort}`,
changeOrigin: true,
},
},
},
build: {
rollupOptions: {
output: {
manualChunks: {
'ant-design-vue': ['ant-design-vue', '@ant-design/icons-vue'],
'echarts': ['echarts'],
'fullcalendar': ['@fullcalendar/vue3', '@fullcalendar/core', '@fullcalendar/daygrid', '@fullcalendar/timegrid', '@fullcalendar/interaction'],
'dayjs': ['dayjs'],
},
},
},
chunkSizeWarningLimit: 1000,
},
};
});