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