完善基础数据

This commit is contained in:
yanpeng200212
2026-10-08 15:44:07 +08:00
parent 8430ba0452
commit 2ffb83830c
95 changed files with 37759 additions and 5 deletions
@@ -7,6 +7,7 @@ using F9WebAiTest.Domain.Entities.Base;
using F9WebAiTest.Domain.Entities.Notice;
using F9WebAiTest.Domain.Enums.SYS.RBAC;
using SysMenu = F9WebAiTest.Domain.Entities.SYS.RBAC.Menu;
using SysRole = F9WebAiTest.Domain.Entities.SYS.RBAC.Role;
using SysPermission = F9WebAiTest.Domain.Entities.SYS.RBAC.Permission;
using SysRolePermission = F9WebAiTest.Domain.Entities.SYS.RBAC.RolePermission;
@@ -59,6 +60,21 @@ public static class DbSeeder
// 6.6 F9 风格 RBAC 菜单(用户/角色/菜单/部门管理,写入新 sys_rbac_menus 表)
SeedSysRbacMenus(fsql, snowflake);
// 6.65 基础数据(工种 + 注册表配置 + 原料庄口 + 物资 + 往来单位,F9 导出数据幂等导入)
WorkTypeSeedData.Seed(fsql, snowflake);
RegistrySeedData.Seed(fsql);
YuanliaoZhuangkouSeedData.Seed(fsql);
WuziSeedData.Seed(fsql);
GongyingshangSeedData.Seed(fsql);
// 6.66 基础数据菜单(工种管理、账期管理、注册表、原料庄口、物资目录、往来单位)
SeedWorkTypeMenus(fsql, snowflake);
SeedZhangqiMenus(fsql, snowflake);
SeedRegistryMenus(fsql, snowflake);
SeedYuanliaoZhuangkouMenus(fsql, snowflake);
SeedWuziMenus(fsql, snowflake);
SeedGongyingshangMenus(fsql, snowflake);
// 6.7 为菜单创建权限单元(Permission),并修正旧菜单权限关联(统一权限模型)
FixMenuPermissions(fsql, snowflake);
@@ -429,7 +445,7 @@ public static class DbSeeder
if (sysDir.Rows.Count == 0)
{
sysDirId = snowflake.CreateId();
fsql.Ado.ExecuteNonQuery($"INSERT INTO sys_rbac_menus (id, icon_svg, name, menu_type, parent_id, level, is_active, sort_order, path, component, permission) VALUES ({sysDirId}, 'UserFilled', '系统管理(RBAC)', 1, 0, 1, 0, 6, '/sys', '', '')");
fsql.Ado.ExecuteNonQuery($"INSERT INTO sys_rbac_menus (id, icon_svg, name, menu_type, parent_id, level, is_active, sort_order, path, component, permission, created_at, is_deleted) VALUES ({sysDirId}, 'UserFilled', '系统管理(RBAC)', 1, 0, 1, 0, 6, '/sys', '', '', datetime('now'), 0)");
}
else
{
@@ -441,7 +457,7 @@ public static class DbSeeder
var exist = fsql.Ado.ExecuteDataTable($"SELECT id FROM sys_rbac_menus WHERE path = '{path}'");
if (exist.Rows.Count > 0) return;
var id = snowflake.CreateId();
fsql.Ado.ExecuteNonQuery($"INSERT INTO sys_rbac_menus (id, icon_svg, name, menu_type, parent_id, level, is_active, sort_order, path, component, permission) VALUES ({id}, '{icon}', '{name}', 2, {sysDirId}, 2, 0, {sort}, '{path}', '{component}', '{permission}')");
fsql.Ado.ExecuteNonQuery($"INSERT INTO sys_rbac_menus (id, icon_svg, name, menu_type, parent_id, level, is_active, sort_order, path, component, permission, created_at, is_deleted) VALUES ({id}, '{icon}', '{name}', 2, {sysDirId}, 2, 0, {sort}, '{path}', '{component}', '{permission}', datetime('now'), 0)");
}
AddMenu("用户管理", "/sys/user", "sys/user/index", "User", "sys:user:list", 1);
@@ -461,14 +477,145 @@ public static class DbSeeder
var exist = fsql.Ado.ExecuteDataTable($"SELECT id FROM sys_rbac_role_permissions WHERE role_id = {roleId} AND permission_id = {menuId}");
if (exist.Rows.Count == 0)
{
fsql.Ado.ExecuteNonQuery($"INSERT INTO sys_rbac_role_permissions (id, role_id, permission_id) VALUES ({snowflake.CreateId()}, {roleId}, {menuId})");
fsql.Ado.ExecuteNonQuery($"INSERT INTO sys_rbac_role_permissions (id, role_id, permission_id, created_at, is_deleted) VALUES ({snowflake.CreateId()}, {roleId}, {menuId})");
}
}
}
}
catch (Exception ex)
{
Console.WriteLine($"[DbSeeder] RBAC 菜单种子跳过:{ex.Message}");
Console.WriteLine($"[DbSeeder] RBAC 菜单种子跳过:{ex}");
}
}
/// <summary>工种管理菜单(挂在"基础数据"目录下)</summary>
private static void SeedWorkTypeMenus(IFreeSql fsql, ISnowflakeIdGenerator snowflake)
{
try
{
EnsureBaseDataMenu(fsql, snowflake, "/base/worktype", "工种管理", "base/worktype/index", "base:worktype:list", "Postcard", 5);
Console.WriteLine("[DbSeeder] 工种管理菜单已就绪");
}
catch (Exception ex)
{
Console.WriteLine($"[DbSeeder] 工种菜单种子跳过:{ex}");
}
}
/// <summary>账期管理菜单(挂在"基础数据"目录下)</summary>
private static void SeedZhangqiMenus(IFreeSql fsql, ISnowflakeIdGenerator snowflake)
{
try
{
EnsureBaseDataMenu(fsql, snowflake, "/base/zhangqi", "账期管理", "base/zhangqi/index", "base:zhangqi:list", "Tickets", 6);
Console.WriteLine("[DbSeeder] 账期管理菜单已就绪");
}
catch (Exception ex)
{
Console.WriteLine($"[DbSeeder] 账期菜单种子跳过:{ex}");
}
}
/// <summary>注册表菜单(挂在"基础数据"目录下)</summary>
private static void SeedRegistryMenus(IFreeSql fsql, ISnowflakeIdGenerator snowflake)
{
try
{
EnsureBaseDataMenu(fsql, snowflake, "/base/registry", "注册表", "base/registry/index", "base:registry:list", "Setting", 7);
Console.WriteLine("[DbSeeder] 注册表菜单已就绪");
}
catch (Exception ex)
{
Console.WriteLine($"[DbSeeder] 注册表菜单种子跳过:{ex}");
}
}
/// <summary>原料庄口菜单(挂在"基础数据"目录下)</summary>
private static void SeedYuanliaoZhuangkouMenus(IFreeSql fsql, ISnowflakeIdGenerator snowflake)
{
try
{
EnsureBaseDataMenu(fsql, snowflake, "/base/yuanliaozhuangkou", "原料庄口", "base/yuanliaozhuangkou/index", "base:yuanliaozhuangkou:list", "Box", 8);
Console.WriteLine("[DbSeeder] 原料庄口菜单已就绪");
}
catch (Exception ex)
{
Console.WriteLine($"[DbSeeder] 原料庄口菜单种子跳过:{ex}");
}
}
/// <summary>物资目录菜单(挂在"基础数据"目录下)</summary>
private static void SeedWuziMenus(IFreeSql fsql, ISnowflakeIdGenerator snowflake)
{
try
{
EnsureBaseDataMenu(fsql, snowflake, "/base/wuzimulu", "物资目录", "base/wuzimulu/index", "base:wuzimulu:list", "Goods", 9);
Console.WriteLine("[DbSeeder] 物资目录菜单已就绪");
}
catch (Exception ex)
{
Console.WriteLine($"[DbSeeder] 物资目录菜单种子跳过:{ex}");
}
}
/// <summary>往来单位菜单(挂在"基础数据"目录下)</summary>
private static void SeedGongyingshangMenus(IFreeSql fsql, ISnowflakeIdGenerator snowflake)
{
try
{
EnsureBaseDataMenu(fsql, snowflake, "/base/gongyingshang", "往来单位", "base/gongyingshang/index", "base:gongyingshang:list", "Connection", 10);
Console.WriteLine("[DbSeeder] 往来单位菜单已就绪");
}
catch (Exception ex)
{
Console.WriteLine($"[DbSeeder] 往来单位菜单种子跳过:{ex}");
}
}
/// <summary>
/// 确保"基础数据"目录下的菜单存在(含启用状态与图标校正),并给 admin 角色授权。
/// 注意:图标名必须是 Element Plus 图标组件名,前端按图标名渲染菜单图标。
/// </summary>
private static void EnsureBaseDataMenu(IFreeSql fsql, ISnowflakeIdGenerator snowflake,
string path, string name, string component, string permission, string icon, int sort)
{
// 基础数据目录:不存在则创建,已存在则复用
var baseDir = fsql.Select<SysMenu>().Where(m => m.Path == "/base").First();
if (baseDir == null)
{
baseDir = new SysMenu(snowflake.CreateId(), "基础数据", "Files", MenuType_Enum.分组, null, null, 0, 3, 0);
baseDir.SetWebInfo("/base", "", "");
fsql.Insert(baseDir).ExecuteAffrows();
}
var menu = fsql.Select<SysMenu>().Where(m => m.Path == path).First();
if (menu == null)
{
menu = new SysMenu(snowflake.CreateId(), name, icon, MenuType_Enum.页面, null, null, baseDir.Id, sort, 1);
menu.SetWebInfo(path, component, permission);
fsql.Insert(menu).ExecuteAffrows();
}
else if (!menu.IsActive || menu.IconSvg != icon)
{
// 兼容历史数据:补齐启用状态与图标
fsql.Update<SysMenu>()
.Set(x => x.IconSvg, icon)
.Set(x => x.IsActive, true)
.Where(x => x.Id == menu.Id)
.ExecuteAffrows();
}
// admin 角色授权(后续 FixMenuPermissions 会把 permission_id 修正为权限单元 Id)
var adminRole = fsql.Select<SysRole>().Where(r => r.Code == "admin").First();
if (adminRole != null)
{
var any = fsql.Select<SysRolePermission>()
.Where(x => x.RoleId == adminRole.Id && x.PermissionId == menu.Id)
.First();
if (any == null)
{
fsql.Insert(new SysRolePermission(snowflake.CreateId(), adminRole.Id, menu.Id)).ExecuteAffrows();
}
}
}