{"id":16640080,"url":"https://github.com/2881099/adminblazor","last_synced_at":"2025-04-04T11:10:48.000Z","repository":{"id":220069247,"uuid":"750671265","full_name":"2881099/AdminBlazor","owner":"2881099","description":"AdminBlazor 是一款 Blazor Server SaaS 后台管理项目，支持 RABC 权限菜单/按钮，支持一对一、一对多、多对多代码生成 .razor 界面。  集成功能：菜单、角色、用户、定时任务、数据字典、租户  依赖组件：BootstrapBlazor、FreeSql","archived":false,"fork":false,"pushed_at":"2024-12-27T10:41:55.000Z","size":3576,"stargazers_count":69,"open_issues_count":11,"forks_count":18,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-12-27T11:09:26.234Z","etag":null,"topics":["admin","blazor","management-system","saas"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/2881099.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-01-31T04:45:11.000Z","updated_at":"2024-12-27T10:41:59.000Z","dependencies_parsed_at":"2024-02-08T09:28:54.472Z","dependency_job_id":"fb611f43-dd6a-42e6-b396-e063f0ad5fa9","html_url":"https://github.com/2881099/AdminBlazor","commit_stats":null,"previous_names":["2881099/adminblazor"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2881099%2FAdminBlazor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2881099%2FAdminBlazor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2881099%2FAdminBlazor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2881099%2FAdminBlazor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/2881099","download_url":"https://codeload.github.com/2881099/AdminBlazor/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":232333555,"owners_count":18507049,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["admin","blazor","management-system","saas"],"created_at":"2024-10-12T07:07:49.224Z","updated_at":"2025-01-03T12:09:00.845Z","avatar_url":"https://github.com/2881099.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"## 项目介绍\n\nAdminBlazor 是一款 Blazor Server SaaS 后台管理项目，支持 RABC 权限菜单/按钮，支持一对一、一对多、多对多代码生成 .razor 界面。\n\n集成功能：菜单、角色、用户、定时任务、数据字典、租户\n\n依赖组件：BootstrapBlazor、FreeSql、FreeScheduler、Rougamo\n\n## 快速开始\n\n1. 安装模板\n\n\u003e dotnet new install AdminBlazor.Template\n\n2. 新建项目\n\n\u003e dotnet new admin\n\n3. 运行访问\n\n\u003e http://localhost:5231/Admin\n\n用户名：admin 密码：freesql\n\n4. 新建菜单，类型选择增删改查\n\n![image](Images/01.png)\n\n5. 生成代码，在实体类型维护注释、导航属性\n\n- 实体上的注释，会生成 HTML Label\n- 实体上的导航属性，会生成丰富的 UI\n- 创建实体类型，建议继承 Entity/EntityCreated/EntityModifed\n\n![image](Images/02.png)\n\n## 权限\n\n- UserEntity 多对多 RoleEntity\n- RoleEntity 多对多 MenuEntity\n\n提示：AdminContext 类型已注入为 Scoped\n\n```csharp\nclass AdminContext\n{\n    public IServiceProvider Service { get; }\n    public UserEntity User { get; set; }\n    public List\u003cRoleEntity\u003e Roles { get; }\n    public List\u003cMenuEntity\u003e RoleMenus { get; }\n\n    //路由、按钮权限验证\n    public Task\u003cbool\u003e AuthPath(string path);\n    public Task\u003cbool\u003e AuthButton(string path)\n}\n```\n\n按钮权限，在 razor 中设置特性：\n\n```csharp\n[AdminButton(\"name\")]\nvoid ButtonClick()\n{\n}\n```\n\n之后菜单管理，会出现对应的按钮项，勾选设置角色是否有按钮的权限。\n\n![image](Images/03.png)\n\n## 租户\n\n提示：AdminContext 类型已注入为 Scoped\n\n```csharp\nclass AdminContext\n{\n    public IServiceProvider Service { get; }\n    public TenantEntity Tenant { get; }\n}\n```\n\n每个租户独立数据库，注入方式：\n\n- 访问租户：IFreeSql/IAggregateRootRepository\\\u003cT\\\u003e\n- 访问主库：FreeSqlCloud\n\n\u003e FreeSqlCloud API 访问方式与 IFreeSql 一样\n\u003e IAggregateRootRepository 是级联操作友好的仓储模式\n\n![image](Images/04.png)\n\n## 定时任务\n\n```csharp\n[Scheduler(\"任务1\", \"0/30 * * * * *\")]\nstatic void Scheduler001()\n{\n    System.Console.WriteLine(\"任务1 被触发...\");\n}\n\n[Scheduler(\"任务2\", Interval = TaskInterval.SEC, Argument = \"10\")]\nstatic void Scheduler002(IServiceProvider service, TaskInfo task)\n{\n    System.Console.WriteLine(\"任务2 被触发...\");\n}\n\n//运行时 scheduler.AddTask(\"任务3\"...)\n[Scheduler(\"任务3\")]\nstatic void Scheduler003()\n{\n    System.Console.WriteLine(\"任务3 被触发...\");\n}\n```\n\n## 组件\n\n以下几个是 AdminBlazor 封装的组件，更多丰富的 UI 组件可以看：BootstrapBlazor\n\n### 1. 增删改查 AdminTable2\\\u003cTItem\\\u003e\n\n\u003e 使用 FreeSql 对实体类型 TItem 增删改查\n\n| 名称 | 说明 |\n| --- | --- |\n| bool IsDebug | 打开UI调试 |\n| string Title | 标题，弹框时 |\n| int PageSize | 分页，值 -1 时不分开 |\n| bool IsQueryString | 查询条件与 URL QueryString 同步 |\n| bool IsRemove | 开启删除 |\n| bool IsRowRemove | 开启删除（表格每行） |\n| bool IsAdd | 开启添加 |\n| bool IsEdit | 开启编辑 |\n| bool IsRefersh | 开启刷新 |\n| bool IsSearchText | 开启文本搜索 |\n| bool IsSingleSelect | 开启单选 |\n| bool IsMultiSelect | 开启多选 |\n| bool IsConfirmEdit | 开启编辑保存时，弹框确认 |\n| bool IsConfirmRemove | 开启删除时，弹框确认 |\n| int Colspan | 表格一行显示几条记录 |\n| int BodyHeight | 表格高度 |\n| string DialogClassName | 弹框样式 |\n| Func\\\u003cAdminQueryInfo, Task\\\u003e InitQuery | 初始化查询 |\n| EventCallback\\\u003cAdminQueryEventArgs\\\u003cTItem\\\u003e\\\u003e OnQuery | 正在查询，设置条件 |\n| EventCallback\\\u003cTItem\\\u003e OnEdit | 正在编辑，设置编辑对象 |\n| EventCallback\\\u003cList\\\u003cTItem\\\u003e\\\u003e OnRemove | 正在删除 |\n| EventCallback\\\u003cList\\\u003cAdminItem\\\u003cTItem\\\u003e\\\u003e\\\u003e OnSelectChanged | 选择内容发生变化 |\n| EventCallback\\\u003cAdminItem\\\u003cTItem\\\u003e\\\u003e OnRowClick | 单击表格行时 |\n| RenderFragment TableHeader | 表格 TR 模板 |\n| RenderFragment\\\u003cTItem\\\u003e TableRow | 表格 TD 模板 |\n| RenderFragment\\\u003cTItem\\\u003e EditTemplate | 添加/编辑 模板 |\n| RenderFragment CardHeader | 卡片 Header 模板 |\n| RenderFragment CardFooter | 卡片 Fotter 模板 |\n\n### 2. 弹框分配 AllocTable2\\\u003cTItem, TChild\\\u003e\n\n\u003e 弹框分配实体类型 TItem 【多对多】导航属性\n\n| 名称 | 说明 |\n| --- | --- |\n| TItem Item | 被分配的对象 |\n| string ChildProperty | 被分配的对象的 List\u0026lt;TChild\u0026gt; 属性 |\n| string Title | 标题 |\n| EventCallback\\\u003cTItem\\\u003e ItemChanged | 分配变化时 |\n| int PageSize | TChild 分页，值 -1 时不分页 |\n| bool IsSearchText | TChild 开启文本搜索 |\n| EventCallback\\\u003cAdminQueryEventArgs\\\u003cTChild\\\u003e\\\u003e OnQuery | TChild 正在查询，设置条件 |\n| RenderFragment TableHeader | TChild 表格 TR 模板 |\n| RenderFragment\\\u003cTItem\\\u003e TableRow | TChild 表格 TD 模板 |\n\n### 3. 文本框 InputTable2\\\u003cTItem, TKey\\\u003e\n\n\u003e 文本框 + 按钮弹框绑定 【多对一】、【多对多】导航属性\n\n| 名称 | 说明 |\n| --- | --- |\n| TKey Value | 值 |\n| EventCallback\\\u003cTKey\\\u003e OnValueChanged | 值变化时 |\n| TItem Item | 【多对一】导航属性 |\n| EventCallback\\\u003cTItem\\\u003e OnItemChanged | 【多对一】导航属性变化时 |\n| TItem Items | 【多对多】导航属性 |\n| EventCallback\\\u003cTItem\\\u003e OnItemsChanged | 【多对多】导航属性变化时 |\n| Func\\\u003cTItem, string\\\u003e DisplayText | 文本框显示内容 |\n| string ModalTitle | 弹框标题 |\n| int PageSize | 弹框 分页，值 -1 时不分页 |\n| bool IsSearchText | 弹框 开启文本搜索 |\n| RenderFragment TableHeader | 弹框 表格 TR 模板 |\n| RenderFragment\\\u003cTItem\\\u003e TableRow | 弹框 表格 TD 模板 |\n\n### 4. 单选/多选 SelectTable2\\\u003cTItem, TKey\\\u003e\n\n| 名称 | 说明 |\n| --- | --- |\n| TKey Value | 值 |\n| EventCallback\\\u003cTKey\\\u003e OnValueChanged | 值变化时 |\n| TItem Items | 【多对多】导航属性 |\n| EventCallback\\\u003cTItem\\\u003e OnItemsChanged | 【多对多】导航属性变化时 |\n| int PageSize | 分页，值 -1 时不分页 |\n| bool IsSearchText | 开启文本搜索 |\n| RenderFragment\\\u003cTItem\\\u003e ChildContent | 内容模板 |\n\n### 5. 弹框 AdminModal\n\n| 名称 | 说明 |\n| --- | --- |\n| string Title | 标题 |\n| bool Visible | 是否显示 |\n| bool IsBackdropStatic | 是否静态模式 |\n| bool IsKeyboard | 是否接受 ESC 关闭 |\n| string DialogClassName | 弹框样式，如：modal-sm、modal-lg、modal-xl、modal-xxl、modal-fullscreen |\n| string YesButton | 确认按钮 |\n| string CloseButton | 关闭按钮 |\n| EventCallback\\\u003cTItem\\\u003e OnYes | 确认时 |\n| EventCallback\\\u003cTItem\\\u003e OnClose | 关闭时 |\n| RenderFragment ChildContent | 内容模板 |","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F2881099%2Fadminblazor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F2881099%2Fadminblazor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F2881099%2Fadminblazor/lists"}