rentease-backend/addExpenseMenu.js

99 lines
4.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();