You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
196 lines
6.1 KiB
196 lines
6.1 KiB
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 };
|