320 lines
7.0 KiB
TypeScript
320 lines
7.0 KiB
TypeScript
|
|
import { Request, Response } from 'express';
|
||
|
|
|
||
|
|
// 模拟角色数据
|
||
|
|
const roleList = [
|
||
|
|
{
|
||
|
|
id: '1',
|
||
|
|
name: '超级管理员',
|
||
|
|
description: '拥有系统所有权限',
|
||
|
|
permissions: ['user_manage', 'role_manage', 'system_config', 'data_view'],
|
||
|
|
status: 'active',
|
||
|
|
createTime: '2024-01-01 10:00:00',
|
||
|
|
updateTime: '2024-01-01 10:00:00',
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: '2',
|
||
|
|
name: '学院管理员',
|
||
|
|
description: '管理学院相关事务',
|
||
|
|
permissions: ['student_manage', 'staff_manage', 'data_view'],
|
||
|
|
status: 'active',
|
||
|
|
createTime: '2024-01-02 10:00:00',
|
||
|
|
updateTime: '2024-01-02 10:00:00',
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: '3',
|
||
|
|
name: '教师',
|
||
|
|
description: '教师角色,可查看学生信息',
|
||
|
|
permissions: ['student_view', 'data_view'],
|
||
|
|
status: 'active',
|
||
|
|
createTime: '2024-01-03 10:00:00',
|
||
|
|
updateTime: '2024-01-03 10:00:00',
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: '4',
|
||
|
|
name: '学生',
|
||
|
|
description: '学生角色,基础权限',
|
||
|
|
permissions: ['profile_view'],
|
||
|
|
status: 'inactive',
|
||
|
|
createTime: '2024-01-04 10:00:00',
|
||
|
|
updateTime: '2024-01-04 10:00:00',
|
||
|
|
},
|
||
|
|
];
|
||
|
|
|
||
|
|
// 权限树数据
|
||
|
|
const permissionTree = [
|
||
|
|
{
|
||
|
|
id: 'user_manage',
|
||
|
|
name: '用户管理',
|
||
|
|
code: 'user_manage',
|
||
|
|
type: 'menu',
|
||
|
|
children: [
|
||
|
|
{
|
||
|
|
id: 'student_manage',
|
||
|
|
name: '学生管理',
|
||
|
|
code: 'student_manage',
|
||
|
|
type: 'menu',
|
||
|
|
parentId: 'user_manage',
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 'staff_manage',
|
||
|
|
name: '教职工管理',
|
||
|
|
code: 'staff_manage',
|
||
|
|
type: 'menu',
|
||
|
|
parentId: 'user_manage',
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 'student_view',
|
||
|
|
name: '学生查看',
|
||
|
|
code: 'student_view',
|
||
|
|
type: 'button',
|
||
|
|
parentId: 'user_manage',
|
||
|
|
},
|
||
|
|
],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 'role_manage',
|
||
|
|
name: '角色管理',
|
||
|
|
code: 'role_manage',
|
||
|
|
type: 'menu',
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 'system_config',
|
||
|
|
name: '系统配置',
|
||
|
|
code: 'system_config',
|
||
|
|
type: 'menu',
|
||
|
|
children: [
|
||
|
|
{
|
||
|
|
id: 'banner_manage',
|
||
|
|
name: '轮播图管理',
|
||
|
|
code: 'banner_manage',
|
||
|
|
type: 'menu',
|
||
|
|
parentId: 'system_config',
|
||
|
|
children: [
|
||
|
|
{
|
||
|
|
id: 'banner_add',
|
||
|
|
name: '新增轮播图',
|
||
|
|
code: 'banner_add',
|
||
|
|
type: 'button',
|
||
|
|
parentId: 'banner_manage',
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 'banner_edit',
|
||
|
|
name: '编辑轮播图',
|
||
|
|
code: 'banner_edit',
|
||
|
|
type: 'button',
|
||
|
|
parentId: 'banner_manage',
|
||
|
|
},
|
||
|
|
],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 'security_config',
|
||
|
|
name: '安全配置',
|
||
|
|
code: 'security_config',
|
||
|
|
type: 'menu',
|
||
|
|
parentId: 'system_config',
|
||
|
|
},
|
||
|
|
],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 'data_view',
|
||
|
|
name: '数据查看',
|
||
|
|
code: 'data_view',
|
||
|
|
type: 'menu',
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 'profile_view',
|
||
|
|
name: '个人信息查看',
|
||
|
|
code: 'profile_view',
|
||
|
|
type: 'button',
|
||
|
|
},
|
||
|
|
];
|
||
|
|
|
||
|
|
// 组织架构数据
|
||
|
|
const organizationData = [
|
||
|
|
{
|
||
|
|
id: 'school_1',
|
||
|
|
name: '学校管理',
|
||
|
|
type: 'school',
|
||
|
|
expanded: true,
|
||
|
|
children: [
|
||
|
|
{
|
||
|
|
id: 'school_2',
|
||
|
|
name: '学校管理',
|
||
|
|
type: 'school',
|
||
|
|
expanded: false,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 'dept_1',
|
||
|
|
name: '编辑',
|
||
|
|
type: 'department',
|
||
|
|
expanded: true,
|
||
|
|
children: [
|
||
|
|
{
|
||
|
|
id: 'major_1',
|
||
|
|
name: '批量导入',
|
||
|
|
type: 'major',
|
||
|
|
expanded: false,
|
||
|
|
children: [
|
||
|
|
{
|
||
|
|
id: 'class_1',
|
||
|
|
name: '批量导入',
|
||
|
|
type: 'class',
|
||
|
|
},
|
||
|
|
],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 'major_2',
|
||
|
|
name: '新增',
|
||
|
|
type: 'major',
|
||
|
|
expanded: false,
|
||
|
|
},
|
||
|
|
],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 'school_3',
|
||
|
|
name: '角色管理',
|
||
|
|
type: 'school',
|
||
|
|
expanded: true,
|
||
|
|
},
|
||
|
|
],
|
||
|
|
},
|
||
|
|
];
|
||
|
|
|
||
|
|
// 获取角色列表
|
||
|
|
export default {
|
||
|
|
'GET /api/admin/role': (req: Request, res: Response) => {
|
||
|
|
const { page = 1, pageSize = 10, name } = req.query;
|
||
|
|
|
||
|
|
let filteredList = [...roleList];
|
||
|
|
|
||
|
|
// 按名称筛选
|
||
|
|
if (name) {
|
||
|
|
filteredList = filteredList.filter(item =>
|
||
|
|
item.name.includes(name as string)
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
const start = (Number(page) - 1) * Number(pageSize);
|
||
|
|
const end = start + Number(pageSize);
|
||
|
|
const list = filteredList.slice(start, end);
|
||
|
|
|
||
|
|
res.json({
|
||
|
|
code: 0,
|
||
|
|
message: 'success',
|
||
|
|
data: {
|
||
|
|
list,
|
||
|
|
total: filteredList.length,
|
||
|
|
},
|
||
|
|
});
|
||
|
|
},
|
||
|
|
|
||
|
|
// 获取组织架构数据
|
||
|
|
'GET /api/admin/organization': (req: Request, res: Response) => {
|
||
|
|
res.json({
|
||
|
|
code: 0,
|
||
|
|
message: 'success',
|
||
|
|
data: organizationData,
|
||
|
|
});
|
||
|
|
},
|
||
|
|
|
||
|
|
// 获取权限树
|
||
|
|
'GET /api/admin/role/permissions': (req: Request, res: Response) => {
|
||
|
|
res.json({
|
||
|
|
code: 0,
|
||
|
|
message: 'success',
|
||
|
|
data: permissionTree,
|
||
|
|
});
|
||
|
|
},
|
||
|
|
|
||
|
|
// 创建角色
|
||
|
|
'POST /api/admin/role/create': (req: Request, res: Response) => {
|
||
|
|
const { name, description, permissions } = req.body;
|
||
|
|
|
||
|
|
const newRole = {
|
||
|
|
id: String(Date.now()),
|
||
|
|
name,
|
||
|
|
description: description || '',
|
||
|
|
permissions: permissions || [],
|
||
|
|
status: 'active',
|
||
|
|
createTime: new Date().toLocaleString('zh-CN'),
|
||
|
|
updateTime: new Date().toLocaleString('zh-CN'),
|
||
|
|
};
|
||
|
|
|
||
|
|
roleList.push(newRole);
|
||
|
|
|
||
|
|
res.json({
|
||
|
|
code: 0,
|
||
|
|
message: '创建成功',
|
||
|
|
data: newRole,
|
||
|
|
});
|
||
|
|
},
|
||
|
|
|
||
|
|
// 更新角色
|
||
|
|
'POST /api/admin/role/update': (req: Request, res: Response) => {
|
||
|
|
const { id, name, description, permissions } = req.body;
|
||
|
|
|
||
|
|
const index = roleList.findIndex(item => item.id === id);
|
||
|
|
if (index === -1) {
|
||
|
|
return res.json({
|
||
|
|
code: 1,
|
||
|
|
message: '角色不存在',
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
roleList[index] = {
|
||
|
|
...roleList[index],
|
||
|
|
name,
|
||
|
|
description: description || '',
|
||
|
|
permissions: permissions || [],
|
||
|
|
updateTime: new Date().toLocaleString('zh-CN'),
|
||
|
|
};
|
||
|
|
|
||
|
|
res.json({
|
||
|
|
code: 0,
|
||
|
|
message: '更新成功',
|
||
|
|
data: roleList[index],
|
||
|
|
});
|
||
|
|
},
|
||
|
|
|
||
|
|
// 切换角色状态
|
||
|
|
'POST /api/admin/role/toggle-status': (req: Request, res: Response) => {
|
||
|
|
const { id } = req.body;
|
||
|
|
|
||
|
|
const role = roleList.find(item => item.id === id);
|
||
|
|
if (!role) {
|
||
|
|
return res.json({
|
||
|
|
code: 1,
|
||
|
|
message: '角色不存在',
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
role.status = role.status === 'active' ? 'inactive' : 'active';
|
||
|
|
role.updateTime = new Date().toLocaleString('zh-CN');
|
||
|
|
|
||
|
|
res.json({
|
||
|
|
code: 0,
|
||
|
|
message: '状态更新成功',
|
||
|
|
data: role,
|
||
|
|
});
|
||
|
|
},
|
||
|
|
|
||
|
|
// 删除角色
|
||
|
|
'POST /api/admin/role/delete': (req: Request, res: Response) => {
|
||
|
|
const { id } = req.body;
|
||
|
|
|
||
|
|
const index = roleList.findIndex(item => item.id === id);
|
||
|
|
if (index === -1) {
|
||
|
|
return res.json({
|
||
|
|
code: 1,
|
||
|
|
message: '角色不存在',
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
roleList.splice(index, 1);
|
||
|
|
|
||
|
|
res.json({
|
||
|
|
code: 0,
|
||
|
|
message: '删除成功',
|
||
|
|
});
|
||
|
|
},
|
||
|
|
};
|