216 lines
4.9 KiB
TypeScript
216 lines
4.9 KiB
TypeScript
// Mock data for college management
|
|
const collegeTree = [
|
|
{
|
|
id: '1',
|
|
name: '设计学院',
|
|
depts: [
|
|
{
|
|
id: '1-1',
|
|
name: '视觉传达设计系',
|
|
majors: [
|
|
{
|
|
id: '1-1-1',
|
|
name: '平面设计',
|
|
classes: [
|
|
{ id: '1-1-1-1', name: '平面设计1班' },
|
|
{ id: '1-1-1-2', name: '平面设计2班' },
|
|
],
|
|
},
|
|
{
|
|
id: '1-1-2',
|
|
name: '数字媒体设计',
|
|
classes: [
|
|
{ id: '1-1-2-1', name: '数字媒体1班' },
|
|
],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: '1-2',
|
|
name: '环境设计系',
|
|
majors: [
|
|
{
|
|
id: '1-2-1',
|
|
name: '室内设计',
|
|
classes: [
|
|
{ id: '1-2-1-1', name: '室内设计1班' },
|
|
{ id: '1-2-1-2', name: '室内设计2班' },
|
|
{ id: '1-2-1-3', name: '室内设计3班' },
|
|
],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: '2',
|
|
name: '管理学院',
|
|
depts: [
|
|
{
|
|
id: '2-1',
|
|
name: '工商管理系',
|
|
majors: [
|
|
{
|
|
id: '2-1-1',
|
|
name: '工商管理',
|
|
classes: [
|
|
{ id: '2-1-1-1', name: '工商管理1班' },
|
|
{ id: '2-1-1-2', name: '工商管理2班' },
|
|
],
|
|
},
|
|
{
|
|
id: '2-1-2',
|
|
name: '市场营销',
|
|
classes: [
|
|
{ id: '2-1-2-1', name: '市场营销1班' },
|
|
],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: '2-2',
|
|
name: '会计系',
|
|
majors: [
|
|
{
|
|
id: '2-2-1',
|
|
name: '财务管理',
|
|
classes: [
|
|
{ id: '2-2-1-1', name: '财务管理1班' },
|
|
{ id: '2-2-1-2', name: '财务管理2班' },
|
|
],
|
|
},
|
|
{
|
|
id: '2-2-2',
|
|
name: '审计学',
|
|
classes: [],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: '3',
|
|
name: '艺术学院',
|
|
depts: [
|
|
{
|
|
id: '3-1',
|
|
name: '音乐系',
|
|
majors: [
|
|
{
|
|
id: '3-1-1',
|
|
name: '声乐表演',
|
|
classes: [
|
|
{ id: '3-1-1-1', name: '声乐表演1班' },
|
|
],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: '4',
|
|
name: '信息工程学院',
|
|
depts: [
|
|
{
|
|
id: '4-1',
|
|
name: '计算机系',
|
|
majors: [
|
|
{
|
|
id: '4-1-1',
|
|
name: '软件工程',
|
|
classes: [
|
|
{ id: '4-1-1-1', name: '软件工程1班' },
|
|
{ id: '4-1-1-2', name: '软件工程2班' },
|
|
{ id: '4-1-1-3', name: '软件工程3班' },
|
|
],
|
|
},
|
|
{
|
|
id: '4-1-2',
|
|
name: '计算机科学与技术',
|
|
classes: [
|
|
{ id: '4-1-2-1', name: '计科1班' },
|
|
{ id: '4-1-2-2', name: '计科2班' },
|
|
],
|
|
},
|
|
{
|
|
id: '4-1-3',
|
|
name: '人工智能',
|
|
classes: [
|
|
{ id: '4-1-3-1', name: 'AI1班' },
|
|
],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: '4-2',
|
|
name: '电子信息系',
|
|
majors: [
|
|
{
|
|
id: '4-2-1',
|
|
name: '通信工程',
|
|
classes: [
|
|
{ id: '4-2-1-1', name: '通信工程1班' },
|
|
],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: '5',
|
|
name: '外国语学院',
|
|
depts: [],
|
|
},
|
|
];
|
|
|
|
export default {
|
|
'GET /api/admin/college': (_req: any, res: any) => {
|
|
res.json({
|
|
code: 0,
|
|
data: collegeTree,
|
|
message: 'ok',
|
|
});
|
|
},
|
|
|
|
'POST /api/admin/college': (req: any, res: any) => {
|
|
const { data } = req.body;
|
|
if (!data || !Array.isArray(data)) {
|
|
return res.json({ code: 40000, data: null, message: '参数错误' });
|
|
}
|
|
|
|
// Validate: all names must be non-empty
|
|
const validate = (items: any[], level: string): string | null => {
|
|
for (const item of items) {
|
|
if (!item.name || !item.name.trim()) {
|
|
return `${level}名称不能为空`;
|
|
}
|
|
if (item.depts) {
|
|
const err = validate(item.depts, '系');
|
|
if (err) return err;
|
|
}
|
|
if (item.majors) {
|
|
const err = validate(item.majors, '专业');
|
|
if (err) return err;
|
|
}
|
|
if (item.classes) {
|
|
const err = validate(item.classes, '班级');
|
|
if (err) return err;
|
|
}
|
|
}
|
|
return null;
|
|
};
|
|
|
|
const err = validate(data, '学院');
|
|
if (err) {
|
|
return res.json({ code: 40001, data: null, message: err });
|
|
}
|
|
|
|
console.log('[Mock] 保存学校管理数据, 学院数量:', data.length);
|
|
res.json({
|
|
code: 0,
|
|
data: null,
|
|
message: '保存成功',
|
|
});
|
|
},
|
|
};
|