-- ===================================================================== -- 修复库结构/数据常见问题(基于 2026-05-09 导出库核对) -- 1) sys_menu 根节点被误写成「菜单管理」且 parent_id=1,导致侧栏树异常 -- 2) 缺少 menu_id=2/3/102,监控/工具目录与菜单管理入口悬空 -- 3) huayang_site_config 重复 contact_* 键(保存联系我们页时重复 INSERT) -- 4) huayang_i18n.i18n_value 仍为 varchar(500) 时扩展为 LONGTEXT -- 执行环境:MySQL 8+ -- 幂等:可重复执行 -- ===================================================================== SET NAMES utf8mb4; -- ---------- 1. 修复 sys_menu 根目录 ---------- UPDATE `sys_menu` SET `menu_name` = '系统管理', `parent_id` = 0, `order_num` = 1, `path` = 'system', `component` = NULL, `perms` = '', `icon` = 'system', `menu_type` = 'M', `remark` = '系统管理目录' WHERE `menu_id` = 1; INSERT INTO `sys_menu` ( `menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `route_name`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark` ) SELECT 2, '系统监控', 0, 2, 'monitor', NULL, '', '', 1, 0, 'M', '0', '0', '', 'monitor', 'admin', NOW(), '', NULL, '系统监控目录' FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `menu_id` = 2); INSERT INTO `sys_menu` ( `menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `route_name`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark` ) SELECT 3, '系统工具', 0, 3, 'tool', NULL, '', '', 1, 0, 'M', '0', '0', '', 'tool', 'admin', NOW(), '', NULL, '系统工具目录' FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `menu_id` = 3); INSERT INTO `sys_menu` ( `menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `route_name`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark` ) SELECT 102, '菜单管理', 1, 3, 'menu', 'system/menu/index', '', '', 1, 0, 'C', '0', '0', 'system:menu:list', 'tree-table', 'admin', NOW(), '', NULL, '菜单管理菜单' FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `menu_id` = 102); -- 普通角色补挂目录与菜单管理(按钮权限 1012~1015 的父菜单) INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) SELECT 2, 2 FROM DUAL WHERE EXISTS (SELECT 1 FROM `sys_role` WHERE `role_id` = 2) AND NOT EXISTS (SELECT 1 FROM `sys_role_menu` WHERE `role_id` = 2 AND `menu_id` = 2); INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) SELECT 2, 3 FROM DUAL WHERE EXISTS (SELECT 1 FROM `sys_role` WHERE `role_id` = 2) AND NOT EXISTS (SELECT 1 FROM `sys_role_menu` WHERE `role_id` = 2 AND `menu_id` = 3); INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) SELECT 2, 102 FROM DUAL WHERE EXISTS (SELECT 1 FROM `sys_role` WHERE `role_id` = 2) AND NOT EXISTS (SELECT 1 FROM `sys_role_menu` WHERE `role_id` = 2 AND `menu_id` = 102); -- ---------- 2. 去重站点配置 contact_*(保留最小 config_id) ---------- DELETE t FROM `huayang_site_config` t INNER JOIN ( SELECT `config_key`, MIN(`config_id`) AS keep_id FROM `huayang_site_config` WHERE `config_key` IN ('contact_phone', 'contact_email', 'contact_address') GROUP BY `config_key` HAVING COUNT(*) > 1 ) d ON t.`config_key` = d.`config_key` AND t.`config_id` > d.keep_id; -- ---------- 3. i18n 富文本字段(与 patch_i18n_value_to_longtext.sql 一致) ---------- ALTER TABLE `huayang_i18n` MODIFY COLUMN `i18n_value` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '翻译值(支持富文本,HTML/Markdown 等)';