99 lines
4.0 KiB
JavaScript
99 lines
4.0 KiB
JavaScript
|
|
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();
|