198 lines
8.3 KiB
C#
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.");
|