rentease-backend/addExpenseMenu.js

99 lines
4.0 KiB
JavaScript
Raw Permalink Normal View History

2026-03-15 12:37:31 +00:00
const sequelize = require('./config/db');
// 添加费用支出管理菜单
const addExpenseMenu = async () => {
try {
console.log('开始添加费用支出管理菜单...');
// 检查费用支出菜单是否已存在
const [expenseMenus] = await sequelize.query("SELECT id FROM menus WHERE code = 'expenses' LIMIT 1");
let expenseMenuId;
if (expenseMenus.length > 0) {
expenseMenuId = expenseMenus[0].id;
console.log('费用支出菜单已存在ID:', expenseMenuId);
// 更新现有菜单为一级菜单
await sequelize.query(`
UPDATE menus SET
parentId = NULL,
path = '/expenses',
icon = 'Wallet'
WHERE id = ${expenseMenuId}
`);
console.log('费用支出菜单已更新为一级菜单');
} else {
// 直接创建费用支出作为一级菜单
console.log('正在添加费用支出管理菜单...');
const expenseMenu = await sequelize.query(`
INSERT INTO menus (parentId, name, code, type, path, component, icon, sort, visible, status, createdAt, updatedAt)
VALUES (NULL, '费用支出', 'expenses', 'menu', '/expenses', 'finance/Expenses', 'Wallet', 5, 'show', 'active', NOW(), NOW())
`, { type: sequelize.QueryTypes.INSERT });
expenseMenuId = expenseMenu[0];
console.log('费用支出菜单创建成功ID:', expenseMenuId);
}
// 检查按钮权限是否已存在
const [existingButtons] = await sequelize.query("SELECT code FROM menus WHERE parentId = :expenseMenuId AND type = 'button'", {
replacements: { expenseMenuId }
});
const existingButtonCodes = existingButtons.map(btn => btn.code);
const requiredButtons = [
{ name: '查看', code: 'expenses:view', sort: 1 },
{ name: '新增', code: 'expenses:add', sort: 2 },
{ name: '编辑', code: 'expenses:edit', sort: 3 },
{ name: '删除', code: 'expenses:delete', sort: 4 }
];
// 只添加不存在的按钮
for (const button of requiredButtons) {
if (!existingButtonCodes.includes(button.code)) {
await sequelize.query(`
INSERT INTO menus (parentId, name, code, type, path, icon, sort, visible, status, createdAt, updatedAt)
VALUES (${expenseMenuId}, '${button.name}', '${button.code}', 'button', '', '', ${button.sort}, 'show', 'active', NOW(), NOW())
`);
console.log(`按钮权限 ${button.name} 创建成功`);
}
}
// 为管理员角色分配权限
console.log('正在为管理员角色分配权限...');
const [adminRoles] = await sequelize.query("SELECT id FROM roles WHERE code = 'admin' LIMIT 1");
if (adminRoles.length > 0) {
const adminRoleId = adminRoles[0].id;
console.log('管理员角色ID:', adminRoleId);
// 获取所有相关菜单ID
const [menus] = await sequelize.query(`
SELECT id FROM menus WHERE code IN ('expenses', 'expenses:view', 'expenses:add', 'expenses:edit', 'expenses:delete')
`);
// 获取已分配的权限
const [existingPermissions] = await sequelize.query(`
SELECT menuId FROM role_menus WHERE roleId = ${adminRoleId}
`);
const existingMenuIds = existingPermissions.map(p => p.menuId);
// 只分配不存在的权限
for (const menu of menus) {
if (!existingMenuIds.includes(menu.id)) {
await sequelize.query(`
INSERT IGNORE INTO role_menus (roleId, menuId, createdAt, updatedAt)
VALUES (${adminRoleId}, ${menu.id}, NOW(), NOW())
`);
console.log(`菜单ID ${menu.id} 权限分配成功`);
}
}
console.log('管理员角色权限分配完成');
} else {
console.log('管理员角色不存在,跳过权限分配');
}
console.log('费用支出管理菜单添加完成');
process.exit(0);
} catch (error) {
console.error('添加费用支出管理菜单失败:', error);
process.exit(1);
}
};
addExpenseMenu();