#r "nuget: Microsoft.Data.Sqlite, 8.0.0" using Microsoft.Data.Sqlite; var dbPath = @"D:/XSL-PROJECT/QH-MES/qhmes/yy-admin-master/YY.Admin/Admin.NET.db"; using var conn = new SqliteConnection($"Data Source={dbPath}"); conn.Open(); using var tx = conn.BeginTransaction(); long baseMenuId = 1300150000101; long vehicleMenuId = 1300150010101; long customerMenuId = 1300150010201; var ensureBase = conn.CreateCommand(); ensureBase.Transaction = tx; ensureBase.CommandText = @" INSERT INTO sys_menu (id, pid, title, path, name, component, icon, type, status, order_no, create_time) SELECT $id, 0, '基础资料', '/base', 'base', 'Layout', '', 0, 0, 9000, datetime('now') WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE id = $id OR title = '基础资料'); "; ensureBase.Parameters.AddWithValue("$id", baseMenuId); ensureBase.ExecuteNonQuery(); var locateBase = conn.CreateCommand(); locateBase.Transaction = tx; locateBase.CommandText = "SELECT id FROM sys_menu WHERE title='基础资料' ORDER BY id LIMIT 1;"; var baseIdObj = locateBase.ExecuteScalar(); if (baseIdObj == null || baseIdObj == DBNull.Value) throw new Exception("未找到或创建‘基础资料’菜单"); baseMenuId = Convert.ToInt64(baseIdObj); var ensureVehicle = conn.CreateCommand(); ensureVehicle.Transaction = tx; ensureVehicle.CommandText = @" INSERT INTO sys_menu (id, pid, title, path, name, component, icon, type, status, order_no, create_time) SELECT $id, $pid, '车辆管理', '/xslmes/mesXslVehicle', 'mesXslVehicle', 'VehicleListView', '', 1, 0, 100, datetime('now') WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE id = $id OR title = '车辆管理' OR name='mesXslVehicle'); "; ensureVehicle.Parameters.AddWithValue("$id", vehicleMenuId); ensureVehicle.Parameters.AddWithValue("$pid", baseMenuId); ensureVehicle.ExecuteNonQuery(); var ensureCustomer = conn.CreateCommand(); ensureCustomer.Transaction = tx; ensureCustomer.CommandText = @" INSERT INTO sys_menu (id, pid, title, path, name, component, icon, type, status, order_no, create_time) SELECT $id, $pid, '客户管理', '/xslmes/mesXslCustomer', 'mesXslCustomer', 'CustomerListView', '', 1, 0, 101, datetime('now') WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE id = $id OR title = '客户管理' OR name='mesXslCustomer'); "; ensureCustomer.Parameters.AddWithValue("$id", customerMenuId); ensureCustomer.Parameters.AddWithValue("$pid", baseMenuId); ensureCustomer.ExecuteNonQuery(); var moveVehicle = conn.CreateCommand(); moveVehicle.Transaction = tx; moveVehicle.CommandText = @" UPDATE sys_menu SET pid = $pid, status = 0 WHERE title='车辆管理' OR name='mesXslVehicle' OR path='/xslmes/mesXslVehicle' OR path='/xslmes/vehicle' OR component='VehicleListView'; "; moveVehicle.Parameters.AddWithValue("$pid", baseMenuId); moveVehicle.ExecuteNonQuery(); var moveCustomer = conn.CreateCommand(); moveCustomer.Transaction = tx; moveCustomer.CommandText = @" UPDATE sys_menu SET pid = $pid, status = 0 WHERE title='客户管理' OR name='mesXslCustomer' OR path='/xslmes/mesXslCustomer' OR component='CustomerListView'; "; moveCustomer.Parameters.AddWithValue("$pid", baseMenuId); moveCustomer.ExecuteNonQuery(); var grantTenant = conn.CreateCommand(); grantTenant.Transaction = tx; grantTenant.CommandText = @" INSERT INTO sys_tenant_menu (tenant_id, menu_id) SELECT 1300000000001, m.id FROM sys_menu m WHERE m.id IN ($baseId, (SELECT id FROM sys_menu WHERE title='车辆管理' ORDER BY id LIMIT 1), (SELECT id FROM sys_menu WHERE title='客户管理' ORDER BY id LIMIT 1)) AND NOT EXISTS ( SELECT 1 FROM sys_tenant_menu t WHERE t.tenant_id = 1300000000001 AND t.menu_id = m.id ); "; grantTenant.Parameters.AddWithValue("$baseId", baseMenuId); grantTenant.ExecuteNonQuery(); // 系统管理下「登录设置」菜单(桌面端会话配置) long systemDirId = 1300200000101; long loginSettingsMenuId = 1300200013001; var ensureLoginSettings = conn.CreateCommand(); ensureLoginSettings.Transaction = tx; ensureLoginSettings.CommandText = @" INSERT INTO sys_menu (id, pid, title, path, name, component, icon, type, status, order_no, create_time) SELECT $id, $pid, '登录设置', 'LoginSettingsView', 'loginSettings', 'LoginSettingsView', '', 1, 0, 107, datetime('now') WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE id = $id OR name = 'loginSettings'); "; ensureLoginSettings.Parameters.AddWithValue("$id", loginSettingsMenuId); ensureLoginSettings.Parameters.AddWithValue("$pid", systemDirId); ensureLoginSettings.ExecuteNonQuery(); var normalizeLoginSettings = conn.CreateCommand(); normalizeLoginSettings.Transaction = tx; normalizeLoginSettings.CommandText = @" UPDATE sys_menu SET pid = $pid, title = '登录设置', path = 'LoginSettingsView', name = 'loginSettings', component = 'LoginSettingsView', type = 1, status = 0, order_no = 107 WHERE id = $id OR name = 'loginSettings' OR title IN ('登录设置','登陆设置'); "; normalizeLoginSettings.Parameters.AddWithValue("$id", loginSettingsMenuId); normalizeLoginSettings.Parameters.AddWithValue("$pid", systemDirId); normalizeLoginSettings.ExecuteNonQuery(); var grantLoginSettingsTenant = conn.CreateCommand(); grantLoginSettingsTenant.Transaction = tx; grantLoginSettingsTenant.CommandText = @" INSERT INTO sys_tenant_menu (tenant_id, menu_id) SELECT 1300000000001, $menuId WHERE NOT EXISTS ( SELECT 1 FROM sys_tenant_menu t WHERE t.tenant_id = 1300000000001 AND t.menu_id = $menuId ); "; grantLoginSettingsTenant.Parameters.AddWithValue("$menuId", loginSettingsMenuId); grantLoginSettingsTenant.ExecuteNonQuery(); // 补充「登录永不过期」配置项 var ensureNeverExpireConfig = conn.CreateCommand(); ensureNeverExpireConfig.Transaction = tx; ensureNeverExpireConfig.CommandText = @" INSERT INTO sys_config (id, name, code, value, sys_flag, remark, order_no, group_code, create_time) SELECT 1300000000194, '登录永不过期', 'sys_token_never_expire', 'False', 'Y', '桌面端:开启后不触发登录过期提示与自动踢回登录页', 119, 'Default', datetime('now') WHERE NOT EXISTS (SELECT 1 FROM sys_config WHERE code = 'sys_token_never_expire'); "; ensureNeverExpireConfig.ExecuteNonQuery(); // 给 admin 角色(通常为最小id角色)补 role_menu var adminRoleCmd = conn.CreateCommand(); adminRoleCmd.Transaction = tx; adminRoleCmd.CommandText = "SELECT id FROM sys_role ORDER BY id LIMIT 1;"; var roleObj = adminRoleCmd.ExecuteScalar(); if (roleObj != null && roleObj != DBNull.Value) { var adminRoleId = Convert.ToInt64(roleObj); var grantRole = conn.CreateCommand(); grantRole.Transaction = tx; grantRole.CommandText = @" INSERT INTO sys_role_menu (id, role_id, menu_id) SELECT (SELECT IFNULL(MAX(id),0)+1 FROM sys_role_menu), $roleId, m.id FROM sys_menu m WHERE m.id IN ($baseId, (SELECT id FROM sys_menu WHERE title='车辆管理' ORDER BY id LIMIT 1), (SELECT id FROM sys_menu WHERE title='客户管理' ORDER BY id LIMIT 1)) AND NOT EXISTS ( SELECT 1 FROM sys_role_menu r WHERE r.role_id = $roleId AND r.menu_id = m.id ); "; grantRole.Parameters.AddWithValue("$roleId", adminRoleId); grantRole.Parameters.AddWithValue("$baseId", baseMenuId); grantRole.ExecuteNonQuery(); var grantLoginSettingsRole = conn.CreateCommand(); grantLoginSettingsRole.Transaction = tx; grantLoginSettingsRole.CommandText = @" INSERT INTO sys_role_menu (id, role_id, menu_id) SELECT (SELECT IFNULL(MAX(id),0)+1 FROM sys_role_menu), $roleId, $menuId WHERE NOT EXISTS ( SELECT 1 FROM sys_role_menu r WHERE r.role_id = $roleId AND r.menu_id = $menuId ); "; grantLoginSettingsRole.Parameters.AddWithValue("$roleId", adminRoleId); grantLoginSettingsRole.Parameters.AddWithValue("$menuId", loginSettingsMenuId); grantLoginSettingsRole.ExecuteNonQuery(); } // 基础资料下「密炼物料皮重策略」菜单 long tareStrategyMenuId = 1300150011101; var ensureTareStrategy = conn.CreateCommand(); ensureTareStrategy.Transaction = tx; ensureTareStrategy.CommandText = @" INSERT INTO sys_menu (id, pid, type, name, path, component, title, icon, is_iframe, is_hide, is_keep_alive, is_affix, order_no, status, create_time) SELECT $id, $pid, 2, 'mesXslMixerMaterialTareStrategy', '/xslmes/mesXslMixerMaterialTareStrategy', 'MixerMaterialTareStrategyListView', '密炼物料皮重策略', '', 0, 0, 1, 0, 110, 1, datetime('now') WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE id = $id OR name = 'mesXslMixerMaterialTareStrategy'); "; ensureTareStrategy.Parameters.AddWithValue("$id", tareStrategyMenuId); ensureTareStrategy.Parameters.AddWithValue("$pid", baseMenuId); ensureTareStrategy.ExecuteNonQuery(); var grantTareStrategyTenant = conn.CreateCommand(); grantTareStrategyTenant.Transaction = tx; grantTareStrategyTenant.CommandText = @" INSERT INTO sys_tenant_menu (tenant_id, menu_id) SELECT 1300000000001, $menuId WHERE NOT EXISTS ( SELECT 1 FROM sys_tenant_menu t WHERE t.tenant_id = 1300000000001 AND t.menu_id = $menuId ); "; grantTareStrategyTenant.Parameters.AddWithValue("$menuId", tareStrategyMenuId); grantTareStrategyTenant.ExecuteNonQuery(); if (roleObj != null && roleObj != DBNull.Value) { var adminRoleId = Convert.ToInt64(roleObj); var grantTareStrategyRole = conn.CreateCommand(); grantTareStrategyRole.Transaction = tx; grantTareStrategyRole.CommandText = @" INSERT INTO sys_role_menu (id, role_id, menu_id) SELECT (SELECT IFNULL(MAX(id),0)+1 FROM sys_role_menu), $roleId, $menuId WHERE NOT EXISTS ( SELECT 1 FROM sys_role_menu r WHERE r.role_id = $roleId AND r.menu_id = $menuId ); "; grantTareStrategyRole.Parameters.AddWithValue("$roleId", adminRoleId); grantTareStrategyRole.Parameters.AddWithValue("$menuId", tareStrategyMenuId); grantTareStrategyRole.ExecuteNonQuery(); } var verify = conn.CreateCommand(); verify.Transaction = tx; verify.CommandText = @" SELECT id, pid, title, path, name, component, type, status, order_no FROM sys_menu WHERE title IN ('基础资料','车辆管理','客户管理','密炼物料皮重策略') ORDER BY title, id; "; using var reader = verify.ExecuteReader(); while (reader.Read()) { Console.WriteLine($"menu: id={reader.GetInt64(0)}, pid={reader.GetInt64(1)}, title={reader.GetString(2)}, path={reader.GetString(3)}, name={reader.GetString(4)}, component={reader.GetString(5)}, type={reader.GetInt32(6)}, status={reader.GetInt32(7)}, order={reader.GetInt32(8)}"); } tx.Commit(); Console.WriteLine("DB menu update done.");