const { Dept } = require("../models/dept"); const { validatedRequest } = require("../utils/middleware/validatedRequest"); const { strictMultiUserRoleValid, ROLES } = require("../utils/middleware/multiUserProtected"); const { reqBody } = require("../utils/http"); function deptEndpoints(app) { if (!app) return; app.get( "/dept/list", [validatedRequest, strictMultiUserRoleValid([ROLES.admin])], async (_request, response) => { try { const depts = await Dept.where({ delFlag: 0 }); response.status(200).json({ depts }); } catch (e) { console.error(e); response.sendStatus(500).end(); } } ); // 获取组织机构树状结构 app.get( "/dept/tree", [validatedRequest, strictMultiUserRoleValid([ROLES.admin])], async (_request, response) => { try { const deptTree = await Dept.getDeptTree(); response.status(200).json({ deptTree }); } catch (e) { console.error(e); response.sendStatus(500).end(); } } ); // 懒加载子组织机构列表 app.get( "/dept/children", [validatedRequest, strictMultiUserRoleValid([ROLES.admin])], async (request, response) => { try { const parentId = request.query.parentId ? parseInt(request.query.parentId) : null; const children = await Dept.getChildrenByParentId(parentId); response.status(200).json({ children }); } catch (e) { console.error(e); response.sendStatus(500).end(); } } ); app.post("/dept/add", [validatedRequest, strictMultiUserRoleValid([ROLES.admin])], async (request, response) => { try { const dept = reqBody(request); // 获取请求体中的组织机构数据 console.log("dept 类型:", typeof dept); // 检查组织机构名称是否唯一 const isUnique = await Dept.checkDeptNameUnique(dept); if (!isUnique) { return response.status(400).json({ success: false, message: `新增组织机构 '${dept.deptName}' 失败,组织机构名称已存在`, }); }; // 按照deptId查询父组织机构 const parentDept = await Dept.get({ deptId: dept.parentId }); dept.ancestors = parentDept.dept.ancestors + ',' + dept.parentId; // 插入组织机构数据 const insertedDept = await Dept.insertDept(dept); // 返回成功响应 response.status(200).json({ success: true, data: insertedDept, }); } catch (error) { // 处理错误 console.error("添加组织机构失败:", error); response.status(500).json({ success: false, message: "添加组织机构失败,服务器内部错误", }); } }); app.post("/dept/edit/:deptId", [validatedRequest, strictMultiUserRoleValid([ROLES.admin])], async (request, response) => { try { const deptId = parseInt(request.params.deptId); const dept = reqBody(request); // 获取请求体中的组织机构数据 // 检查组织机构名称是否唯一 const isUnique = await Dept.checkDeptNameUnique(dept); console.log("isUnique:", isUnique); if (!isUnique) { return response.status(400).json({ success: false, message: `修改组织机构 '${dept.deptName}' 失败,组织机构名称已存在`, }); } // 检查上级组织机构是否是自己 if (dept.parentId === deptId) { return response.status(400).json({ success: false, message: `修改组织机构 '${dept.deptName}' 失败,上级组织机构不能是自己`, }); } // 检查组织机构是否包含未停用的子组织机构 if (dept.status === 1) { const normalChildrenCount = await Dept.selectNormalChildrenDeptById(deptId); if (normalChildrenCount > 0) { return response.status(400).json({ success: false, message: "该组织机构包含未停用的子组织机构!", }); } } // 更新组织机构数据 const updatedDept = await Dept.update(deptId, dept); // 返回成功响应 response.status(200).json({ success: true, data: updatedDept, }); } catch (error) { // 处理错误 console.error("修改组织机构失败:", error); response.status(500).json({ success: false, message: "修改组织机构失败,服务器内部错误", }); } }); // 删除组织机构的接口 app.delete("/dept/:deptId", [validatedRequest, strictMultiUserRoleValid([ROLES.admin])], async (request, response) => { try { const deptId = parseInt(request.params.deptId); // 获取组织机构 ID // 检查组织机构是否有子组织机构 const hasChild = await Dept.hasChildByDeptId(deptId); if (hasChild) { return response.status(400).json({ success: false, message: "存在下级组织机构,不允许删除", }); } // 检查组织机构是否存在用户 const hasUser = await Dept.checkDeptExistUser(deptId); if (hasUser) { return response.status(400).json({ success: false, message: "组织机构存在用户,不允许删除", }); } // // 检查组织机构数据权限 // const hasDataScope = await Dept.checkDeptDataScope(deptId); // if (!hasDataScope) { // return response.status(403).json({ // success: false, // message: "无权限删除该组织机构", // }); // } // 删除组织机构 const deletedDept = await Dept.softDelete(deptId); // 返回成功响应 response.status(200).json({ success: true, data: deletedDept, }); } catch (error) { // 处理错误 console.error("删除组织机构失败:", error); response.status(500).json({ success: false, message: "删除组织机构失败,服务器内部错误", }); } }); } module.exports = { deptEndpoints };