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