136 lines
3.5 KiB
JavaScript
Raw Normal View History

2026-07-27 11:28:33 +08:00
const common = require("../../common.js");
let db = null;
exports.main = async (content, DB) => {
db = DB;
switch (content.type) {
case "getMenus":
return await exports.getMenus(content);
case "getMenusByMenuIds":
return await exports.getMenusByMenuIds(content);
case "setCorpMenuConfig":
return await exports.setCorpMenuConfig(content);
}
};
// 获取菜单
exports.getMenus = async (ctx) => {
const { success, message, data } = await getCorpMenus({}, ctx.corpId);
if (success) return { success, message, data };
return { success, message };
};
// 根据菜单ID列表获取菜单
exports.getMenusByMenuIds = async (context) => {
const menuIdList = Array.isArray(context.menuIdList)
? context.menuIdList
: [];
const {
success,
message,
data: menuList,
} = await getCorpMenus({ menuId: { $in: menuIdList } }, context.corpId);
if (!success) return { success, message };
const parentIds = menuList
.map((item) => item.parentId)
.filter((item) => Boolean(item) && !menuIdList.includes(item));
if (parentIds.length == 0) return { success, message, data: menuList };
const {
success: success2,
message: message2,
data: parentMenuList,
} = await getCorpMenus({ menuId: { $in: parentIds } }, context.corpId);
if (success2) {
return {
success: success2,
message: message2,
data: [...menuList, ...parentMenuList],
};
}
return { success: success2, message: message2 };
};
// 设置企业菜单配置
exports.setCorpMenuConfig = async (ctx) => {
const { corpId, menuId, menuName: customMenuName } = ctx;
if (!corpId || !menuId || typeof customMenuName !== "string") {
return {
success: false,
message: "参数错误",
};
}
try {
const res = await db
.collection("corp-menu-config")
.updateOne({ menuId, corpId }, { $set: { customMenuName } });
if (res.modifiedCount > 0) return { success: true, message: "操作成功" };
const result = await db.collection("corp-menu-config").insertOne({
_id: common.generateRandomString(24),
corpId,
menuId,
customMenuName,
});
return { success: true, message: "操作成功", data: result };
} catch (e) {
return {
success: false,
message: e.message,
};
}
};
// 获取企业菜单
async function getCorpMenus(query = {}, corpId) {
try {
const params = {
$or: [
{ disabledCorps: { $exists: false } },
{ disabledCorps: { $nin: [corpId] } },
],
...query,
};
const res = await db
.collection("sys-menu")
.aggregate([
{ $match: params },
{
$lookup: {
from: "corp-menu-config",
let: { menuId: "$menuId" },
pipeline: [
{
$match: {
$expr: {
$and: [
{ $eq: ["$menuId", "$$menuId"] },
{ $eq: ["$corpId", corpId] },
],
},
},
},
{ $project: { customMenuName: 1 } },
],
as: "customSet",
},
},
{ $limit: 10000 },
])
.toArray();
const list = res.map((item) => {
const { customSet, ...menu } = item;
return {
...menu,
customMenuName: customSet[0]?.customMenuName || "",
};
});
return { success: true, message: "获取成功", data: list };
} catch (e) {
return {
success: false,
message: e.message,
};
}
}