Files
zeling_f/mock/college.ts

216 lines
4.9 KiB
TypeScript
Raw Normal View History

2026-03-17 14:30:02 +08:00
// 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: '保存成功',
});
},
};