import express from 'express' import { permissions, rolePermissions } from '../db/seedAuth.js' import { nextId } from '../utils/id.js' import { sendOk, sendFail } from '../utils/response.js' import { requireAuth } from '../middleware/requireAuth.js' const router = express.Router() router.use(requireAuth) function toTreeVo(p) { return { id: p.id, permissionName: p.permissionName, permissionCode: p.permissionCode, permissionType: p.permissionType, parentId: p.parentId, level: p.level, sortOrder: p.sortOrder, icon: p.icon, routePath: p.routePath, children: [], pageResourceList: (p.pageResourcePathList || []).map((path, idx) => ({ id: p.id * 1000 + idx, permissionId: p.id, pageResourcePath: path })), apiResourceList: (p.apiResourcePathList || []).map((path, idx) => ({ id: p.id * 2000 + idx, permissionId: p.id, apiResourcePath: path })) } } function buildTree() { const sorted = [...permissions].sort((a, b) => (a.sortOrder ?? 0) - (b.sortOrder ?? 0)) const nodeMap = new Map(sorted.map((p) => [p.id, toTreeVo(p)])) const roots = [] nodeMap.forEach((node) => { if (node.parentId && nodeMap.has(node.parentId)) { nodeMap.get(node.parentId).children.push(node) } else { roots.push(node) } }) return roots } router.get('/tree', (req, res) => { sendOk(res, buildTree()) }) router.post('/create', (req, res) => { const { permissionType, permissionName, permissionCode, parentId, level, sortOrder, icon, routePath, pageResourcePaths, apiResourcePaths } = req.body || {} if (!permissionName || !permissionCode) return sendFail(res, '权限名称和编码不能为空', 400) if (permissions.some((p) => p.permissionCode === permissionCode)) return sendFail(res, '权限编码已存在', 400) const id = nextId('permission') const permission = { id, permissionType: permissionType || 'PAGE', permissionName, permissionCode, parentId: parentId || null, level: level ?? 0, sortOrder: sortOrder ?? 0, icon: icon || '', routePath: routePath || '', pageResourcePathList: pageResourcePaths || [], apiResourcePathList: apiResourcePaths || [] } permissions.push(permission) sendOk(res, { id, permissionCode }, '创建成功') }) router.post('/update', (req, res) => { const { id, permissionName, permissionCode, parentId, level, sortOrder, icon, routePath, pageResourcePaths, apiResourcePaths } = req.body || {} const permission = permissions.find((p) => p.id === id) if (!permission) return sendFail(res, '权限不存在', 404) if (permissionName !== undefined) permission.permissionName = permissionName if (permissionCode !== undefined) permission.permissionCode = permissionCode if (parentId !== undefined) permission.parentId = parentId if (level !== undefined) permission.level = level if (sortOrder !== undefined) permission.sortOrder = sortOrder if (icon !== undefined) permission.icon = icon if (routePath !== undefined) permission.routePath = routePath if (pageResourcePaths !== undefined) permission.pageResourcePathList = pageResourcePaths if (apiResourcePaths !== undefined) permission.apiResourcePathList = apiResourcePaths sendOk(res, true, '更新成功') }) router.post('/delete', (req, res) => { const { id } = req.body || {} const index = permissions.findIndex((p) => p.id === id) if (index === -1) return sendFail(res, '权限不存在', 404) const hasChildren = permissions.some((p) => p.parentId === id) if (hasChildren) return sendFail(res, '存在子级权限,不可删除', 400) permissions.splice(index, 1) for (let i = rolePermissions.length - 1; i >= 0; i -= 1) { if (rolePermissions[i].permissionId === id) rolePermissions.splice(i, 1) } sendOk(res, true, '删除成功') }) export default router