Files
qhmes/yy-admin-master/YY.Admin/menu_fix.csx

198 lines
8.3 KiB
C#

#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();
}
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.");