317 lines
7.2 KiB
TypeScript
317 lines
7.2 KiB
TypeScript
import request from '@/utils/request';
|
|
import { AxiosPromise } from 'axios';
|
|
import { ClassInfoVO, ClassInfoQuery, ClassInfoForm, OptionData } from './classInfo/types';
|
|
import { getToken } from '@/utils/auth';
|
|
import { DeptTreeVO, DeptVO } from '@/api/system/dept/types';
|
|
import { treeselect as deptTreeselect, listDeptExcludeChild } from '@/api/system/dept';
|
|
|
|
// 通用类型定义
|
|
interface TableDataInfo<T> {
|
|
code: number;
|
|
msg: string;
|
|
rows: T[];
|
|
total: number;
|
|
}
|
|
|
|
interface R<T> {
|
|
code: number;
|
|
msg: string;
|
|
data: T;
|
|
}
|
|
|
|
/**
|
|
* 查询班级信息列表
|
|
*/
|
|
export const listClassInfo = (query: ClassInfoQuery): AxiosPromise<TableDataInfo<ClassInfoVO>> => {
|
|
return request({
|
|
url: '/xg/classInfo/list',
|
|
method: 'get',
|
|
params: query
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 查询班级信息详细
|
|
*/
|
|
export const getClassInfo = (id: string | number): AxiosPromise<R<ClassInfoVO>> => {
|
|
return request({
|
|
url: '/xg/classInfo/' + id,
|
|
method: 'get'
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 新增班级信息
|
|
*/
|
|
export const addClassInfo = (data: ClassInfoForm): AxiosPromise<R<void>> => {
|
|
return request({
|
|
url: '/xg/classInfo',
|
|
method: 'post',
|
|
data: data
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 修改班级信息
|
|
*/
|
|
export const updateClassInfo = (data: ClassInfoForm): AxiosPromise<R<void>> => {
|
|
return request({
|
|
url: '/xg/classInfo',
|
|
method: 'put',
|
|
data: data
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 删除班级信息
|
|
*/
|
|
export const delClassInfo = (id: string | number | Array<string | number>): AxiosPromise<R<void>> => {
|
|
return request({
|
|
url: '/xg/classInfo/' + id,
|
|
method: 'delete'
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 导出班级信息
|
|
*/
|
|
export const exportClassInfo = (query: ClassInfoQuery): AxiosPromise<any> => {
|
|
return request({
|
|
url: '/xg/classInfo/export',
|
|
method: 'post',
|
|
data: query
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 根据班级代码查询班级信息
|
|
*/
|
|
export const getClassInfoByCode = (classCode: string): AxiosPromise<R<ClassInfoVO>> => {
|
|
return request({
|
|
url: '/xg/classInfo/getByClassCode/' + classCode,
|
|
method: 'get'
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 根据年级查询班级信息列表
|
|
*/
|
|
export const getClassInfoByGrade = (grade: string): AxiosPromise<R<ClassInfoVO[]>> => {
|
|
return request({
|
|
url: '/xg/classInfo/getByGrade/' + grade,
|
|
method: 'get'
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 根据学院代码查询班级信息列表
|
|
*/
|
|
export const getClassInfoByCollege = (collegeCode: string): AxiosPromise<R<ClassInfoVO[]>> => {
|
|
return request({
|
|
url: '/xg/classInfo/getByCollegeCode/' + collegeCode,
|
|
method: 'get'
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 根据专业代码查询班级信息列表
|
|
*/
|
|
export const getClassInfoByMajor = (majorCode: string): AxiosPromise<R<ClassInfoVO[]>> => {
|
|
return request({
|
|
url: '/xg/classInfo/getByMajorCode/' + majorCode,
|
|
method: 'get'
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 根据辅导员ID查询班级信息列表
|
|
*/
|
|
export const getClassInfoByCounselor = (counselorId: number): AxiosPromise<R<ClassInfoVO[]>> => {
|
|
return request({
|
|
url: '/xg/classInfo/getByCounselorId/' + counselorId,
|
|
method: 'get'
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 根据班主任ID查询班级信息列表
|
|
*/
|
|
export const getClassInfoByClassTeacher = (classTeacherId: number): AxiosPromise<R<ClassInfoVO[]>> => {
|
|
return request({
|
|
url: '/xg/classInfo/getByClassTeacherId/' + classTeacherId,
|
|
method: 'get'
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 获取班级选项列表(用于下拉框)
|
|
*/
|
|
export const getClassOptions = (): AxiosPromise<R<ClassInfoVO[]>> => {
|
|
return request({
|
|
url: '/xg/classInfo/getClassOptions', // 修正路径:从 /options 改为 /getClassOptions
|
|
method: 'get'
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 更新班级学生统计
|
|
*/
|
|
export const updateStudentCount = (classId: number): AxiosPromise<R<void>> => {
|
|
return request({
|
|
url: '/xg/classInfo/updateStudentCount/' + classId,
|
|
method: 'post' // 修正HTTP方法:从 put 改为 post
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 批量更新班级学生统计
|
|
*/
|
|
export const batchUpdateStudentCount = (classIds: number[]): AxiosPromise<R<void>> => {
|
|
return request({
|
|
url: '/xg/classInfo/batchUpdateStudentCount',
|
|
method: 'post', // 修正HTTP方法:从 put 改为 post
|
|
data: classIds
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 启用班级
|
|
*/
|
|
export const enableClass = (id: number): AxiosPromise<R<void>> => {
|
|
return request({
|
|
url: '/xg/classInfo/enable/' + id,
|
|
method: 'post' // 修正HTTP方法:从 put 改为 post
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 禁用班级
|
|
*/
|
|
export const disableClass = (id: number): AxiosPromise<R<void>> => {
|
|
return request({
|
|
url: '/xg/classInfo/disable/' + id,
|
|
method: 'post' // 修正HTTP方法:从 put 改为 post
|
|
});
|
|
};
|
|
|
|
// ================================
|
|
// 统计数据接口 - 新增
|
|
// ================================
|
|
|
|
/**
|
|
* 获取班级信息统计概览
|
|
*/
|
|
export const getClassStatistics = (): AxiosPromise<R<any>> => {
|
|
return request({
|
|
url: '/xg/classInfo/statistics',
|
|
method: 'get'
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 统计各学院班级数量
|
|
*/
|
|
export const countClassByCollege = (): AxiosPromise<R<any[]>> => {
|
|
return request({
|
|
url: '/xg/classInfo/statistics/college',
|
|
method: 'get'
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 统计各年级班级数量
|
|
*/
|
|
export const countClassByGrade = (): AxiosPromise<R<any[]>> => {
|
|
return request({
|
|
url: '/xg/classInfo/statistics/grade',
|
|
method: 'get'
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 统计各专业班级数量
|
|
*/
|
|
export const countClassByMajor = (): AxiosPromise<R<any[]>> => {
|
|
return request({
|
|
url: '/xg/classInfo/statistics/major',
|
|
method: 'get'
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 统计班级状态分布
|
|
*/
|
|
export const countClassByStatus = (): AxiosPromise<R<any[]>> => {
|
|
return request({
|
|
url: '/xg/classInfo/statistics/status',
|
|
method: 'get'
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 获取学院选项
|
|
*/
|
|
export const getCollegeOptions = (): AxiosPromise<R<any[]>> => {
|
|
return request({
|
|
url: '/xg/studentInfo/options/colleges',
|
|
method: 'get'
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 从系统部门获取学院选项(二级学院)
|
|
*/
|
|
export const getDeptCollegeOptions = (): AxiosPromise<DeptTreeVO[]> => {
|
|
console.log('直接调用部门树API,避免treeselect参数问题');
|
|
return request({
|
|
url: '/system/dept/treeselect',
|
|
method: 'get'
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 从系统部门获取专业选项(学院的下级部门)
|
|
*/
|
|
export const getDeptMajorOptions = (deptId: string | number): AxiosPromise<DeptVO[]> => {
|
|
// 确保deptId是有效的数字ID
|
|
if (!deptId || isNaN(Number(deptId))) {
|
|
console.error('Invalid deptId:', deptId);
|
|
return Promise.reject(new Error('无效的部门ID'));
|
|
}
|
|
|
|
// 直接调用接口,不使用封装的系统API
|
|
const numericDeptId = Number(deptId);
|
|
console.log('直接调用部门API,使用数字ID:', numericDeptId);
|
|
|
|
return request({
|
|
url: '/system/dept/list/exclude/' + numericDeptId,
|
|
method: 'get'
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 获取辅导员选项
|
|
*/
|
|
export const getCounselorOptions = (): AxiosPromise<R<any[]>> => {
|
|
return request({
|
|
url: '/xg/studentInfo/options/counselors',
|
|
method: 'get'
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 获取班主任选项列表
|
|
*/
|
|
export const getClassTeacherOptions = (): AxiosPromise<R<OptionData[]>> => {
|
|
console.log('调用班主任API: /xg/classInfo/teacherOptions');
|
|
return request({
|
|
url: '/xg/classInfo/teacherOptions',
|
|
method: 'get',
|
|
headers: {
|
|
// 确保请求带有认证信息
|
|
'Authorization': 'Bearer ' + getToken(),
|
|
'clientid': import.meta.env.VITE_APP_CLIENT_ID
|
|
}
|
|
});
|
|
};
|