434 lines
14 KiB
JavaScript
434 lines
14 KiB
JavaScript
/**
|
|
* 更新菜单数据以匹配前端路由
|
|
* @file update-menu-to-match-routes.js
|
|
* @description 根据前端routes.js更新后端菜单数据
|
|
*/
|
|
|
|
const { MenuPermission } = require('../models');
|
|
|
|
async function updateMenuToMatchRoutes() {
|
|
try {
|
|
console.log('开始更新菜单数据以匹配前端路由...');
|
|
|
|
// 清空现有菜单数据
|
|
await MenuPermission.destroy({ where: {} });
|
|
console.log('已清空现有菜单数据');
|
|
|
|
// 根据前端routes.js定义菜单数据
|
|
const menuData = [
|
|
// 系统概览
|
|
{
|
|
menu_key: 'dashboard',
|
|
menu_name: '系统概览',
|
|
menu_path: '/dashboard',
|
|
parent_id: null,
|
|
menu_type: 'page',
|
|
required_roles: '["admin", "manager", "operator"]',
|
|
icon: 'dashboard-outlined',
|
|
sort_order: 1,
|
|
is_visible: true,
|
|
is_enabled: true,
|
|
description: '系统概览和统计信息'
|
|
},
|
|
|
|
// 智能设备管理
|
|
{
|
|
menu_key: 'smart_device.main',
|
|
menu_name: '智能设备',
|
|
menu_path: '/smart-devices',
|
|
parent_id: null,
|
|
menu_type: 'page',
|
|
required_roles: '["admin", "manager", "operator"]',
|
|
icon: 'SettingOutlined',
|
|
sort_order: 2,
|
|
is_visible: true,
|
|
is_enabled: true,
|
|
description: '智能设备管理',
|
|
permission: 'smart_device:view'
|
|
},
|
|
{
|
|
menu_key: 'smart_device.eartag',
|
|
menu_name: '智能耳标',
|
|
menu_path: '/smart-devices/eartag',
|
|
parent_id: null, // 将在后面更新
|
|
menu_type: 'page',
|
|
required_roles: '["admin", "manager", "operator"]',
|
|
icon: 'FileOutlined',
|
|
sort_order: 1,
|
|
is_visible: true,
|
|
is_enabled: true,
|
|
description: '智能耳标管理',
|
|
permission: 'smart_eartag:view'
|
|
},
|
|
{
|
|
menu_key: 'smart_device.collar',
|
|
menu_name: '智能项圈',
|
|
menu_path: '/smart-devices/collar',
|
|
parent_id: null, // 将在后面更新
|
|
menu_type: 'page',
|
|
required_roles: '["admin", "manager", "operator"]',
|
|
icon: 'FileOutlined',
|
|
sort_order: 2,
|
|
is_visible: true,
|
|
is_enabled: true,
|
|
description: '智能项圈管理',
|
|
permission: 'smart_collar:view'
|
|
},
|
|
{
|
|
menu_key: 'smart_device.host',
|
|
menu_name: '智能主机',
|
|
menu_path: '/smart-devices/host',
|
|
parent_id: null, // 将在后面更新
|
|
menu_type: 'page',
|
|
required_roles: '["admin", "manager", "operator"]',
|
|
icon: 'FileOutlined',
|
|
sort_order: 3,
|
|
is_visible: true,
|
|
is_enabled: true,
|
|
description: '智能主机管理',
|
|
permission: 'smart_host:view'
|
|
},
|
|
{
|
|
menu_key: 'smart_device.fence',
|
|
menu_name: '电子围栏',
|
|
menu_path: '/smart-devices/fence',
|
|
parent_id: null, // 将在后面更新
|
|
menu_type: 'page',
|
|
required_roles: '["admin", "manager", "operator"]',
|
|
icon: 'FileOutlined',
|
|
sort_order: 4,
|
|
is_visible: true,
|
|
is_enabled: true,
|
|
description: '电子围栏管理',
|
|
permission: 'smart_fence:view'
|
|
},
|
|
|
|
// 智能预警管理
|
|
{
|
|
menu_key: 'smart_alert.main',
|
|
menu_name: '智能预警总览',
|
|
menu_path: '/smart-alerts',
|
|
parent_id: null,
|
|
menu_type: 'page',
|
|
required_roles: '["admin", "manager", "operator"]',
|
|
icon: 'AlertOutlined',
|
|
sort_order: 3,
|
|
is_visible: true,
|
|
is_enabled: true,
|
|
description: '智能预警管理',
|
|
permission: 'smart_alert:view'
|
|
},
|
|
{
|
|
menu_key: 'smart_alert.eartag',
|
|
menu_name: '智能耳标预警',
|
|
menu_path: '/smart-alerts/eartag',
|
|
parent_id: null, // 将在后面更新
|
|
menu_type: 'page',
|
|
required_roles: '["admin", "manager", "operator"]',
|
|
icon: 'FileOutlined',
|
|
sort_order: 1,
|
|
is_visible: true,
|
|
is_enabled: true,
|
|
description: '智能耳标预警管理',
|
|
permission: 'smart_eartag_alert:view'
|
|
},
|
|
{
|
|
menu_key: 'smart_alert.collar',
|
|
menu_name: '智能项圈预警',
|
|
menu_path: '/smart-alerts/collar',
|
|
parent_id: null, // 将在后面更新
|
|
menu_type: 'page',
|
|
required_roles: '["admin", "manager", "operator"]',
|
|
icon: 'FileOutlined',
|
|
sort_order: 2,
|
|
is_visible: true,
|
|
is_enabled: true,
|
|
description: '智能项圈预警管理',
|
|
permission: 'smart_collar_alert:view'
|
|
},
|
|
|
|
// 牛只管理
|
|
{
|
|
menu_key: 'animal.management',
|
|
menu_name: '牛只管理',
|
|
menu_path: '/cattle-management',
|
|
parent_id: null,
|
|
menu_type: 'page',
|
|
required_roles: '["admin", "manager", "operator"]',
|
|
icon: 'BugOutlined',
|
|
sort_order: 4,
|
|
is_visible: true,
|
|
is_enabled: true,
|
|
description: '牛只管理',
|
|
permission: 'animal:view'
|
|
},
|
|
{
|
|
menu_key: 'cattle.archives',
|
|
menu_name: '牛只档案',
|
|
menu_path: '/cattle-management/archives',
|
|
parent_id: null, // 将在后面更新
|
|
menu_type: 'page',
|
|
required_roles: '["admin", "manager", "operator"]',
|
|
icon: 'FileOutlined',
|
|
sort_order: 1,
|
|
is_visible: true,
|
|
is_enabled: true,
|
|
description: '牛只档案管理',
|
|
permission: 'cattle:archives:view'
|
|
},
|
|
{
|
|
menu_key: 'cattle.pens',
|
|
menu_name: '栏舍设置',
|
|
menu_path: '/cattle-management/pens',
|
|
parent_id: null, // 将在后面更新
|
|
menu_type: 'page',
|
|
required_roles: '["admin", "manager", "operator"]',
|
|
icon: 'FileOutlined',
|
|
sort_order: 2,
|
|
is_visible: true,
|
|
is_enabled: true,
|
|
description: '栏舍设置管理',
|
|
permission: 'cattle:pens:view'
|
|
},
|
|
{
|
|
menu_key: 'cattle.batches',
|
|
menu_name: '批次设置',
|
|
menu_path: '/cattle-management/batches',
|
|
parent_id: null, // 将在后面更新
|
|
menu_type: 'page',
|
|
required_roles: '["admin", "manager", "operator"]',
|
|
icon: 'FileOutlined',
|
|
sort_order: 3,
|
|
is_visible: true,
|
|
is_enabled: true,
|
|
description: '批次设置管理',
|
|
permission: 'cattle:batches:view'
|
|
},
|
|
{
|
|
menu_key: 'cattle.transfer',
|
|
menu_name: '转栏记录',
|
|
menu_path: '/cattle-management/transfer-records',
|
|
parent_id: null, // 将在后面更新
|
|
menu_type: 'page',
|
|
required_roles: '["admin", "manager", "operator"]',
|
|
icon: 'FileOutlined',
|
|
sort_order: 4,
|
|
is_visible: true,
|
|
is_enabled: true,
|
|
description: '转栏记录管理',
|
|
permission: 'cattle:transfer:view'
|
|
},
|
|
{
|
|
menu_key: 'cattle.exit',
|
|
menu_name: '离栏记录',
|
|
menu_path: '/cattle-management/exit-records',
|
|
parent_id: null, // 将在后面更新
|
|
menu_type: 'page',
|
|
required_roles: '["admin", "manager", "operator"]',
|
|
icon: 'FileOutlined',
|
|
sort_order: 5,
|
|
is_visible: true,
|
|
is_enabled: true,
|
|
description: '离栏记录管理',
|
|
permission: 'cattle:exit:view'
|
|
},
|
|
|
|
// 养殖场管理
|
|
{
|
|
menu_key: 'farm.main',
|
|
menu_name: '养殖场管理',
|
|
menu_path: '/farm-management',
|
|
parent_id: null,
|
|
menu_type: 'page',
|
|
required_roles: '["admin", "manager"]',
|
|
icon: 'HomeOutlined',
|
|
sort_order: 5,
|
|
is_visible: true,
|
|
is_enabled: true,
|
|
description: '养殖场管理',
|
|
permission: 'farm:view'
|
|
},
|
|
{
|
|
menu_key: 'farm.info',
|
|
menu_name: '养殖场信息管理',
|
|
menu_path: '/farm-management/info',
|
|
parent_id: null, // 将在后面更新
|
|
menu_type: 'page',
|
|
required_roles: '["admin", "manager"]',
|
|
icon: 'FileOutlined',
|
|
sort_order: 1,
|
|
is_visible: true,
|
|
is_enabled: true,
|
|
description: '养殖场信息管理',
|
|
permission: 'farm_info:view'
|
|
},
|
|
{
|
|
menu_key: 'farm.pens',
|
|
menu_name: '栏舍管理',
|
|
menu_path: '/farm-management/pens',
|
|
parent_id: null, // 将在后面更新
|
|
menu_type: 'page',
|
|
required_roles: '["admin", "manager"]',
|
|
icon: 'FileOutlined',
|
|
sort_order: 2,
|
|
is_visible: true,
|
|
is_enabled: true,
|
|
description: '栏舍管理',
|
|
permission: 'pen:view'
|
|
},
|
|
{
|
|
menu_key: 'farm.users',
|
|
menu_name: '用户管理',
|
|
menu_path: '/farm-management/users',
|
|
parent_id: null, // 将在后面更新
|
|
menu_type: 'page',
|
|
required_roles: '["admin"]',
|
|
icon: 'FileOutlined',
|
|
sort_order: 3,
|
|
is_visible: true,
|
|
is_enabled: true,
|
|
description: '用户管理',
|
|
permission: 'user:view'
|
|
},
|
|
{
|
|
menu_key: 'farm.role_permissions',
|
|
menu_name: '角色权限管理',
|
|
menu_path: '/farm-management/role-permissions',
|
|
parent_id: null, // 将在后面更新
|
|
menu_type: 'page',
|
|
required_roles: '["admin"]',
|
|
icon: 'SafetyCertificateOutlined',
|
|
sort_order: 4,
|
|
is_visible: true,
|
|
is_enabled: true,
|
|
description: '角色权限管理',
|
|
permission: 'role:view'
|
|
},
|
|
|
|
// 系统管理
|
|
{
|
|
menu_key: 'system.config',
|
|
menu_name: '系统管理',
|
|
menu_path: '/system',
|
|
parent_id: null,
|
|
menu_type: 'page',
|
|
required_roles: '["admin"]',
|
|
icon: 'setting-outlined',
|
|
sort_order: 6,
|
|
is_visible: true,
|
|
is_enabled: true,
|
|
description: '系统管理',
|
|
permission: 'system:config'
|
|
}
|
|
];
|
|
|
|
// 创建菜单
|
|
const createdMenus = [];
|
|
for (const menuDataItem of menuData) {
|
|
try {
|
|
const menu = await MenuPermission.create(menuDataItem);
|
|
createdMenus.push(menu);
|
|
console.log(`创建菜单: ${menu.menu_name} (ID: ${menu.id})`);
|
|
} catch (error) {
|
|
console.error(`创建菜单失败 ${menuDataItem.menu_name}:`, error.message);
|
|
}
|
|
}
|
|
|
|
// 更新子菜单的parent_id
|
|
const menuMap = new Map();
|
|
createdMenus.forEach(menu => {
|
|
menuMap.set(menu.menu_key, menu.id);
|
|
});
|
|
|
|
// 更新智能设备子菜单
|
|
const smartDeviceMenus = [
|
|
{ key: 'smart_device.eartag', parent: 'smart_device.main' },
|
|
{ key: 'smart_device.collar', parent: 'smart_device.main' },
|
|
{ key: 'smart_device.host', parent: 'smart_device.main' },
|
|
{ key: 'smart_device.fence', parent: 'smart_device.main' }
|
|
];
|
|
|
|
for (const menu of smartDeviceMenus) {
|
|
const menuId = menuMap.get(menu.key);
|
|
const parentId = menuMap.get(menu.parent);
|
|
if (menuId && parentId) {
|
|
await MenuPermission.update(
|
|
{ parent_id: parentId },
|
|
{ where: { id: menuId } }
|
|
);
|
|
console.log(`更新菜单关系: ${menu.key} -> ${menu.parent}`);
|
|
}
|
|
}
|
|
|
|
// 更新智能预警子菜单
|
|
const smartAlertMenus = [
|
|
{ key: 'smart_alert.eartag', parent: 'smart_alert.main' },
|
|
{ key: 'smart_alert.collar', parent: 'smart_alert.main' }
|
|
];
|
|
|
|
for (const menu of smartAlertMenus) {
|
|
const menuId = menuMap.get(menu.key);
|
|
const parentId = menuMap.get(menu.parent);
|
|
if (menuId && parentId) {
|
|
await MenuPermission.update(
|
|
{ parent_id: parentId },
|
|
{ where: { id: menuId } }
|
|
);
|
|
console.log(`更新菜单关系: ${menu.key} -> ${menu.parent}`);
|
|
}
|
|
}
|
|
|
|
// 更新牛只管理子菜单
|
|
const cattleMenus = [
|
|
{ key: 'cattle.archives', parent: 'animal.management' },
|
|
{ key: 'cattle.pens', parent: 'animal.management' },
|
|
{ key: 'cattle.batches', parent: 'animal.management' },
|
|
{ key: 'cattle.transfer', parent: 'animal.management' },
|
|
{ key: 'cattle.exit', parent: 'animal.management' }
|
|
];
|
|
|
|
for (const menu of cattleMenus) {
|
|
const menuId = menuMap.get(menu.key);
|
|
const parentId = menuMap.get(menu.parent);
|
|
if (menuId && parentId) {
|
|
await MenuPermission.update(
|
|
{ parent_id: parentId },
|
|
{ where: { id: menuId } }
|
|
);
|
|
console.log(`更新菜单关系: ${menu.key} -> ${menu.parent}`);
|
|
}
|
|
}
|
|
|
|
// 更新养殖场管理子菜单
|
|
const farmMenus = [
|
|
{ key: 'farm.info', parent: 'farm.main' },
|
|
{ key: 'farm.pens', parent: 'farm.main' },
|
|
{ key: 'farm.users', parent: 'farm.main' },
|
|
{ key: 'farm.role_permissions', parent: 'farm.main' }
|
|
];
|
|
|
|
for (const menu of farmMenus) {
|
|
const menuId = menuMap.get(menu.key);
|
|
const parentId = menuMap.get(menu.parent);
|
|
if (menuId && parentId) {
|
|
await MenuPermission.update(
|
|
{ parent_id: parentId },
|
|
{ where: { id: menuId } }
|
|
);
|
|
console.log(`更新菜单关系: ${menu.key} -> ${menu.parent}`);
|
|
}
|
|
}
|
|
|
|
console.log('菜单数据更新完成!');
|
|
console.log(`共创建了 ${createdMenus.length} 个菜单项`);
|
|
|
|
} catch (error) {
|
|
console.error('更新菜单数据失败:', error);
|
|
} finally {
|
|
process.exit(0);
|
|
}
|
|
}
|
|
|
|
// 运行脚本
|
|
updateMenuToMatchRoutes();
|