危险源管理模块接入真实数据库:新增危大/超危工程、风险控制清单、安全验收、安全巡检、临时用电管理(含前端页面、BLL/API服务、WebAPI控制器、Model项、SQL脚本与接口文档)

排除 CreateModel.bat(含明文sa密码与本地服务器名,未入库)
This commit is contained in:
2026-08-24 11:07:59 +08:00
parent 4925a6c4b0
commit 55944d732a
323 changed files with 9806 additions and 922 deletions
+80 -9
View File
@@ -24,9 +24,12 @@ namespace FineUIPro.Web
#region Page_Init
private string _menuType = "menu";
public string cssMessage = "";
private int _examplesCount = 0;
private string _searchText = "";
private HashSet<string> _userPowerMenuIds; // 当前用户有权限的菜单ID集合
private Dictionary<string, string> _menuTypeMap; // 菜单ID -> 菜单类型 缓存
private bool _menuPowerLoaded = false; // 菜单权限是否已加载
private bool _isAdminUser = false; // 是否系统管理员
public string User_Id
{
get
@@ -82,7 +85,11 @@ namespace FineUIPro.Web
////////////////////////////////////////////////////////////////
if (!IsPostBack)
{
if (this.CurrUser == null)
{
PageBase.PageRefresh(Request.ApplicationPath + "/Login.aspx");
return;
}
}
}
@@ -326,11 +333,81 @@ namespace FineUIPro.Web
XmlAttribute isNewAttr = node.Attributes["id"];
if (isNewAttr != null)
{
result = BLL.CommonService.ReturnMenuByUserIdMenuId(this.CurrUser.UserId, isNewAttr.Value.ToString(), this.CurrUser.LoginProjectId);
EnsureMenuPowerLoaded();
string menuId = isNewAttr.Value.ToString();
if (_isAdminUser || _userPowerMenuIds.Contains(menuId))
{
result = true;
}
else
{
// 个人设置类菜单始终显示(与原 ReturnMenuByUserIdMenuId 逻辑一致)
string menuType;
result = _menuTypeMap.TryGetValue(menuId, out menuType) && menuType == Const.Menu_Personal;
}
}
return result;
}
/// <summary>
/// 一次性加载当前用户在当前项目下的菜单权限,避免每个菜单节点重复查询数据库(N+1)。
/// 判定逻辑与逐节点调用 BLL.CommonService.ReturnMenuByUserIdMenuId 保持一致。
/// </summary>
private void EnsureMenuPowerLoaded()
{
if (_menuPowerLoaded)
{
return;
}
_menuPowerLoaded = true;
_isAdminUser = this.CurrUser.UserId == Const.sysglyId || this.CurrUser.UserId == Const.hfnbdId || this.CurrUser.UserId == Const.sedinId;
_userPowerMenuIds = new HashSet<string>();
if (_isAdminUser)
{
return;
}
// 缓存菜单ID -> 菜单类型(个人设置菜单特判用)
try
{
_menuTypeMap = Funs.DB.Sys_Menu.GroupBy(m => m.MenuId).ToDictionary(g => g.Key, g => g.First().MenuType);
}
catch
{
_menuTypeMap = new Dictionary<string, string>();
}
var getUser = Funs.DB.Sys_User.FirstOrDefault(x => x.UserId == this.CurrUser.UserId);
if (getUser == null)
{
return;
}
List<string> powerMenuIds;
if (string.IsNullOrEmpty(this.CurrUser.LoginProjectId))
{
if (string.IsNullOrEmpty(getUser.RoleId))
{
return;
}
powerMenuIds = Funs.DB.Sys_RolePower.Where(x => x.RoleId == getUser.RoleId).Select(x => x.MenuId).ToList();
}
else
{
List<string> roleIdList = UserService.GetRoleListByProjectIdUserId(this.CurrUser.LoginProjectId, this.CurrUser.UserId);
powerMenuIds = Funs.DB.Sys_RolePower.Where(x => roleIdList.Contains(x.RoleId)).Select(x => x.MenuId).ToList();
}
foreach (string menuId in powerMenuIds)
{
if (!string.IsNullOrEmpty(menuId))
{
_userPowerMenuIds.Add(menuId);
}
}
}
#endregion
#region GetIsNewHtml
@@ -365,12 +442,6 @@ namespace FineUIPro.Web
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
var getDataList = Funs.DB.Sp_Main_GetToDoItems(this.CurrUser.UserId, CurrUser.LoginProjectId).ToList();
if (getDataList.Count == 0)
{
cssMessage = "style='display: none'";
}
if (!IsPostBack)
{
string needProjectId = "";