chore: 重构工程
|
@ -2,8 +2,8 @@
|
|||
"solution": {
|
||||
"path": "BootstrapAdmin.sln",
|
||||
"projects": [
|
||||
"src\\blazor\\admin\\Bootstrap.Admin.Blazor.DataAccess\\Bootstrap.Admin.Blazor.DataAccess.csproj",
|
||||
"src\\blazor\\admin\\Bootstrap.Admin.Blazor\\Bootstrap.Admin.Blazor.csproj",
|
||||
"src\\blazor\\admin\\BootstrapAdmin.DataAccess\\BootstrapAdmin.DataAccess.csproj",
|
||||
"src\\blazor\\admin\\BootstrapAdmin.Web\\BootstrapAdmin.Web.csproj",
|
||||
"src\\mvc\\admin\\Bootstrap.Admin\\Bootstrap.Admin.csproj",
|
||||
"src\\mvc\\admin\\Bootstrap.DataAccess\\Bootstrap.DataAccess.csproj"
|
||||
]
|
||||
|
|
|
@ -137,15 +137,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "github", "github", "{C07631
|
|||
.github\workflows\docker.yml = .github\workflows\docker.yml
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bootstrap.Admin.Blazor", "src\blazor\admin\Bootstrap.Admin.Blazor\Bootstrap.Admin.Blazor.csproj", "{485C1B75-7E3C-4AFC-8A91-2347FFEC1E96}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "mvc", "mvc", "{C996F427-DA93-49D6-9804-4E665D195FC2}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "admin", "admin", "{45ADEF9B-C8BD-4224-9E12-F6716E85A22C}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "client", "client", "{55A2459A-6BDE-4493-B2C0-5BE1673E99EE}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bootstrap.Admin.Blazor.DataAccess", "src\blazor\admin\Bootstrap.Admin.Blazor.DataAccess\Bootstrap.Admin.Blazor.DataAccess.csproj", "{75730767-A53A-4CFB-BACB-B90401288FA6}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BootstrapAdmin.Web", "src\blazor\admin\BootstrapAdmin.Web\BootstrapAdmin.Web.csproj", "{EF5EF5A4-616A-4BA7-9E1E-1407E8EC0395}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BootstrapAdmin.DataAccess", "src\blazor\admin\BootstrapAdmin.DataAccess\BootstrapAdmin.DataAccess.csproj", "{1C04A3C2-DF68-4716-BA69-259CEC6E2311}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
|
@ -189,14 +189,14 @@ Global
|
|||
{B306BD58-1C73-40F2-86F7-E1763344007B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B306BD58-1C73-40F2-86F7-E1763344007B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B306BD58-1C73-40F2-86F7-E1763344007B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{485C1B75-7E3C-4AFC-8A91-2347FFEC1E96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{485C1B75-7E3C-4AFC-8A91-2347FFEC1E96}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{485C1B75-7E3C-4AFC-8A91-2347FFEC1E96}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{485C1B75-7E3C-4AFC-8A91-2347FFEC1E96}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{75730767-A53A-4CFB-BACB-B90401288FA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{75730767-A53A-4CFB-BACB-B90401288FA6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{75730767-A53A-4CFB-BACB-B90401288FA6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{75730767-A53A-4CFB-BACB-B90401288FA6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{EF5EF5A4-616A-4BA7-9E1E-1407E8EC0395}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{EF5EF5A4-616A-4BA7-9E1E-1407E8EC0395}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{EF5EF5A4-616A-4BA7-9E1E-1407E8EC0395}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{EF5EF5A4-616A-4BA7-9E1E-1407E8EC0395}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1C04A3C2-DF68-4716-BA69-259CEC6E2311}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1C04A3C2-DF68-4716-BA69-259CEC6E2311}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1C04A3C2-DF68-4716-BA69-259CEC6E2311}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1C04A3C2-DF68-4716-BA69-259CEC6E2311}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
@ -225,11 +225,11 @@ Global
|
|||
{DAE3826B-AAAB-468A-9A06-2F56EF5C0767} = {41B6D37A-5E5E-42B3-85E4-D81A81E3D757}
|
||||
{90BC5C25-0F93-4CDE-833C-3D8243E19D3B} = {55A2459A-6BDE-4493-B2C0-5BE1673E99EE}
|
||||
{B306BD58-1C73-40F2-86F7-E1763344007B} = {55A2459A-6BDE-4493-B2C0-5BE1673E99EE}
|
||||
{485C1B75-7E3C-4AFC-8A91-2347FFEC1E96} = {45ADEF9B-C8BD-4224-9E12-F6716E85A22C}
|
||||
{C996F427-DA93-49D6-9804-4E665D195FC2} = {41B6D37A-5E5E-42B3-85E4-D81A81E3D757}
|
||||
{45ADEF9B-C8BD-4224-9E12-F6716E85A22C} = {DAE3826B-AAAB-468A-9A06-2F56EF5C0767}
|
||||
{55A2459A-6BDE-4493-B2C0-5BE1673E99EE} = {DAE3826B-AAAB-468A-9A06-2F56EF5C0767}
|
||||
{75730767-A53A-4CFB-BACB-B90401288FA6} = {45ADEF9B-C8BD-4224-9E12-F6716E85A22C}
|
||||
{EF5EF5A4-616A-4BA7-9E1E-1407E8EC0395} = {45ADEF9B-C8BD-4224-9E12-F6716E85A22C}
|
||||
{1C04A3C2-DF68-4716-BA69-259CEC6E2311} = {45ADEF9B-C8BD-4224-9E12-F6716E85A22C}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {221EAE38-5F75-4391-9A48-E462A9F3B8FC}
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
@attribute [Authorize]
|
|
@ -1,9 +0,0 @@
|
|||
namespace Bootstrap.Admin.Blazor.Services
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class BootstrapMenuService : IBootstrapMenuService
|
||||
{
|
||||
}
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
namespace Bootstrap.Admin.Blazor.Services
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public interface IBootstrapMenuService
|
||||
{
|
||||
}
|
||||
}
|
|
@ -0,0 +1,154 @@
|
|||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>Admin.DataAccess</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:Microsoft.Extensions.DependencyInjection.ServicesExtensions">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Microsoft.Extensions.DependencyInjection.ServicesExtensions.AddDataAccessServices(Microsoft.Extensions.DependencyInjection.IServiceCollection)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="services"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Admin.DataAccess.Models.Dict">
|
||||
<summary>
|
||||
字典配置项
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Admin.DataAccess.Models.Dict.Id">
|
||||
<summary>
|
||||
获得/设置 字典主键 数据库自增列
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Admin.DataAccess.Models.Dict.Category">
|
||||
<summary>
|
||||
获得/设置 字典分类
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Admin.DataAccess.Models.Dict.Name">
|
||||
<summary>
|
||||
获得/设置 字典名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Admin.DataAccess.Models.Dict.Code">
|
||||
<summary>
|
||||
获得/设置 字典字典值
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Admin.DataAccess.Models.Dict.Define">
|
||||
<summary>
|
||||
获得/设置 字典定义值 0 表示系统使用,1 表示用户自定义 默认为 1
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Admin.DataAccess.Models.Menu">
|
||||
<summary>
|
||||
Bootstrap Admin 后台管理菜单相关操作实体类
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Admin.DataAccess.Models.Menu.Id">
|
||||
<summary>
|
||||
获得/设置 菜单主键ID
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Admin.DataAccess.Models.Menu.ParentId">
|
||||
<summary>
|
||||
获得/设置 父级菜单ID 默认为 0
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Admin.DataAccess.Models.Menu.ParentName">
|
||||
<summary>
|
||||
获得/设置 父级菜单名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Admin.DataAccess.Models.Menu.Name">
|
||||
<summary>
|
||||
获得/设置 菜单名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Admin.DataAccess.Models.Menu.Order">
|
||||
<summary>
|
||||
获得/设置 菜单序号
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Admin.DataAccess.Models.Menu.Icon">
|
||||
<summary>
|
||||
获得/设置 菜单图标
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Admin.DataAccess.Models.Menu.Url">
|
||||
<summary>
|
||||
获得/设置 菜单URL地址
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Admin.DataAccess.Models.Menu.Category">
|
||||
<summary>
|
||||
获得/设置 菜单分类, 0 表示系统菜单 1 表示用户自定义菜单
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Admin.DataAccess.Models.Menu.CategoryName">
|
||||
<summary>
|
||||
获得 菜单分类名称,取字典表中的Name category="菜单"
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Admin.DataAccess.Models.Menu.Active">
|
||||
<summary>
|
||||
获得/设置 是否当前被选中 active为选中
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Admin.DataAccess.Models.Menu.Target">
|
||||
<summary>
|
||||
获得/设置 链接目标
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Admin.DataAccess.Models.Menu.IsResource">
|
||||
<summary>
|
||||
获得/设置 是否为资源文件, 0 表示菜单 1 表示资源 2 表示按钮
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Admin.DataAccess.Models.Menu.Application">
|
||||
<summary>
|
||||
获得/设置 所属应用程序,此属性由BA后台字典表分配
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Admin.DataAccess.Models.Menu.Menus">
|
||||
<summary>
|
||||
获得/设置 当前菜单项的所有子菜单集合
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Admin.DataAccess.Services.IMenu">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Admin.DataAccess.Services.IMenu.GetMenus">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Admin.DataAccess.Services.MenuService">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Admin.DataAccess.Services.MenuService.#ctor(PetaPoco.IDatabase)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="db"></param>
|
||||
</member>
|
||||
<member name="M:Admin.DataAccess.Services.MenuService.GetMenus">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<returns></returns>
|
||||
<exception cref="T:System.NotImplementedException"></exception>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
|
@ -7,6 +7,8 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="6.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.0" />
|
||||
<PackageReference Include="PetaPoco.Extensions" Version="5.2.0" />
|
||||
</ItemGroup>
|
||||
|
|
@ -0,0 +1,154 @@
|
|||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>BootstrapAdmin.DataAccess</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:Microsoft.Extensions.DependencyInjection.ServicesExtensions">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Microsoft.Extensions.DependencyInjection.ServicesExtensions.AddDataAccessServices(Microsoft.Extensions.DependencyInjection.IServiceCollection)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="services"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:BootstrapAdmin.DataAccess.Models.Dict">
|
||||
<summary>
|
||||
字典配置项
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.DataAccess.Models.Dict.Id">
|
||||
<summary>
|
||||
获得/设置 字典主键 数据库自增列
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.DataAccess.Models.Dict.Category">
|
||||
<summary>
|
||||
获得/设置 字典分类
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.DataAccess.Models.Dict.Name">
|
||||
<summary>
|
||||
获得/设置 字典名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.DataAccess.Models.Dict.Code">
|
||||
<summary>
|
||||
获得/设置 字典字典值
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.DataAccess.Models.Dict.Define">
|
||||
<summary>
|
||||
获得/设置 字典定义值 0 表示系统使用,1 表示用户自定义 默认为 1
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:BootstrapAdmin.DataAccess.Models.Menu">
|
||||
<summary>
|
||||
Bootstrap Admin 后台管理菜单相关操作实体类
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.DataAccess.Models.Menu.Id">
|
||||
<summary>
|
||||
获得/设置 菜单主键ID
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.DataAccess.Models.Menu.ParentId">
|
||||
<summary>
|
||||
获得/设置 父级菜单ID 默认为 0
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.DataAccess.Models.Menu.ParentName">
|
||||
<summary>
|
||||
获得/设置 父级菜单名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.DataAccess.Models.Menu.Name">
|
||||
<summary>
|
||||
获得/设置 菜单名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.DataAccess.Models.Menu.Order">
|
||||
<summary>
|
||||
获得/设置 菜单序号
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.DataAccess.Models.Menu.Icon">
|
||||
<summary>
|
||||
获得/设置 菜单图标
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.DataAccess.Models.Menu.Url">
|
||||
<summary>
|
||||
获得/设置 菜单URL地址
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.DataAccess.Models.Menu.Category">
|
||||
<summary>
|
||||
获得/设置 菜单分类, 0 表示系统菜单 1 表示用户自定义菜单
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.DataAccess.Models.Menu.CategoryName">
|
||||
<summary>
|
||||
获得 菜单分类名称,取字典表中的Name category="菜单"
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.DataAccess.Models.Menu.Active">
|
||||
<summary>
|
||||
获得/设置 是否当前被选中 active为选中
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.DataAccess.Models.Menu.Target">
|
||||
<summary>
|
||||
获得/设置 链接目标
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.DataAccess.Models.Menu.IsResource">
|
||||
<summary>
|
||||
获得/设置 是否为资源文件, 0 表示菜单 1 表示资源 2 表示按钮
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.DataAccess.Models.Menu.Application">
|
||||
<summary>
|
||||
获得/设置 所属应用程序,此属性由BA后台字典表分配
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.DataAccess.Models.Menu.Menus">
|
||||
<summary>
|
||||
获得/设置 当前菜单项的所有子菜单集合
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:BootstrapAdmin.DataAccess.Services.IMenu">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:BootstrapAdmin.DataAccess.Services.IMenu.GetMenus">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:BootstrapAdmin.DataAccess.Services.MenuService">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:BootstrapAdmin.DataAccess.Services.MenuService.#ctor(PetaPoco.IDatabase)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="db"></param>
|
||||
</member>
|
||||
<member name="M:BootstrapAdmin.DataAccess.Services.MenuService.GetMenus">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<returns></returns>
|
||||
<exception cref="T:System.NotImplementedException"></exception>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
|
@ -0,0 +1,22 @@
|
|||
using BootstrapAdmin.DataAccess.Services;
|
||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||
|
||||
namespace Microsoft.Extensions.DependencyInjection
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public static class ServicesExtensions
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="services"></param>
|
||||
/// <returns></returns>
|
||||
public static IServiceCollection AddDataAccessServices(this IServiceCollection services)
|
||||
{
|
||||
services.TryAddSingleton<IMenu, MenuService>();
|
||||
return services;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
using PetaPoco;
|
||||
|
||||
namespace Bootstrap.Admin.Blazor.DataAccess
|
||||
namespace BootstrapAdmin.DataAccess.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// 字典配置项
|
|
@ -0,0 +1,83 @@
|
|||
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
|
||||
|
||||
using PetaPoco;
|
||||
|
||||
namespace BootstrapAdmin.DataAccess.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// Bootstrap Admin 后台管理菜单相关操作实体类
|
||||
/// </summary>
|
||||
[TableName("Navigations")]
|
||||
public class Menu
|
||||
{
|
||||
/// <summary>
|
||||
/// 获得/设置 菜单主键ID
|
||||
/// </summary>
|
||||
public string? Id { set; get; }
|
||||
|
||||
/// <summary>
|
||||
/// 获得/设置 父级菜单ID 默认为 0
|
||||
/// </summary>
|
||||
public string ParentId { set; get; } = "0";
|
||||
|
||||
/// <summary>
|
||||
/// 获得/设置 父级菜单名称
|
||||
/// </summary>
|
||||
public string ParentName { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// 获得/设置 菜单名称
|
||||
/// </summary>
|
||||
public string Name { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// 获得/设置 菜单序号
|
||||
/// </summary>
|
||||
public int Order { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获得/设置 菜单图标
|
||||
/// </summary>
|
||||
public string Icon { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// 获得/设置 菜单URL地址
|
||||
/// </summary>
|
||||
public string Url { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// 获得/设置 菜单分类, 0 表示系统菜单 1 表示用户自定义菜单
|
||||
/// </summary>
|
||||
public string Category { get; set; } = "0";
|
||||
|
||||
/// <summary>
|
||||
/// 获得 菜单分类名称,取字典表中的Name category="菜单"
|
||||
/// </summary>
|
||||
public string CategoryName { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// 获得/设置 是否当前被选中 active为选中
|
||||
/// </summary>
|
||||
public string Active { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// 获得/设置 链接目标
|
||||
/// </summary>
|
||||
public string Target { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// 获得/设置 是否为资源文件, 0 表示菜单 1 表示资源 2 表示按钮
|
||||
/// </summary>
|
||||
public int IsResource { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 获得/设置 所属应用程序,此属性由BA后台字典表分配
|
||||
/// </summary>
|
||||
public string Application { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// 获得/设置 当前菜单项的所有子菜单集合
|
||||
/// </summary>
|
||||
public IEnumerable<Menu> Menus { get; set; } = new List<Menu>();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
using BootstrapAdmin.DataAccess.Models;
|
||||
|
||||
namespace BootstrapAdmin.DataAccess.Services
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public interface IMenu
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
IEnumerable<Menu> GetMenus();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
using BootstrapAdmin.DataAccess.Models;
|
||||
using PetaPoco;
|
||||
|
||||
namespace BootstrapAdmin.DataAccess.Services
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class MenuService : IMenu
|
||||
{
|
||||
private IDatabase _db;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="db"></param>
|
||||
public MenuService(IDatabase db) => _db = db;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="NotImplementedException"></exception>
|
||||
public IEnumerable<Menu> GetMenus()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,4 +1,6 @@
|
|||
namespace Bootstrap.Admin.Blazor
|
||||
using BootstrapAdmin.Web.Services;
|
||||
|
||||
namespace BootstrapAdmin.Web
|
||||
{
|
||||
/// <summary>
|
||||
///
|
|
@ -10,12 +10,10 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Bootstrap.Admin.Blazor.DataAccess\Bootstrap.Admin.Blazor.DataAccess.csproj" />
|
||||
<ProjectReference Include="..\BootstrapAdmin.DataAccess\BootstrapAdmin.DataAccess.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Using Include="Bootstrap.Admin.Blazor.Models" />
|
||||
<Using Include="Bootstrap.Admin.Blazor.Services" />
|
||||
<Using Include="BootstrapBlazor.Components" />
|
||||
<Using Include="Microsoft.AspNetCore.Components" />
|
||||
<Using Include="System.Diagnostics.CodeAnalysis" />
|
|
@ -0,0 +1,228 @@
|
|||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>BootstrapAdmin.Web</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:BootstrapAdmin.Web.App">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.Web.App.Title">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:BootstrapAdmin.Web.App.OnInitialized">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:BootstrapAdmin.Web.Components.BlazorTable`1">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.Web.Components.BlazorTable`1.PageItemsSource">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.Web.Components.BlazorTable`1.ColumnsTemplete">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.Web.Components.BlazorTable`1.CustomerSearchTemplate">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.Web.Components.BlazorTable`1.TableToolbarTemplate">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.Web.Components.BlazorTable`1.IsPagination">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.Web.Components.BlazorTable`1.TableSearchModel">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.Web.Components.BlazorTable`1.DataService">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.Web.Components.BlazorTable`1.OnQueryAsync">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:BootstrapAdmin.Web.Extensions.DatabaseExtensions">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:BootstrapAdmin.Web.Extensions.DatabaseExtensions.FetchAsync``1(PetaPoco.IDatabase,System.Collections.Generic.IEnumerable{BootstrapBlazor.Components.IFilterAction},System.String,BootstrapBlazor.Components.SortOrder)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<typeparam name="TModel"></typeparam>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:BootstrapAdmin.Web.Extensions.DatabaseExtensions.PageAsync``1(PetaPoco.IDatabase,System.Int64,System.Int64,System.Collections.Generic.IEnumerable{BootstrapBlazor.Components.IFilterAction},System.String,BootstrapBlazor.Components.SortOrder)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<typeparam name="TModel"></typeparam>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:BootstrapAdmin.Web.Models.DictsSearchModel">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.Web.Models.DictsSearchModel.Category">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.Web.Models.DictsSearchModel.Define">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.Web.Models.DictsSearchModel.Name">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:BootstrapAdmin.Web.Models.DictsSearchModel.GetSearchs">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:BootstrapAdmin.Web.Models.DictsSearchModel.Reset">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<exception cref="T:System.NotImplementedException"></exception>
|
||||
</member>
|
||||
<member name="T:BootstrapAdmin.Web.Models.LoginModel">
|
||||
<summary>
|
||||
登陆页面 Model
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.Web.Models.LoginModel.ImageLibUrl">
|
||||
<summary>
|
||||
验证码图床地址
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.Web.Models.LoginModel.AuthFailed">
|
||||
<summary>
|
||||
是否登录认证失败 为真时客户端弹出滑块验证码
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:BootstrapAdmin.Web.Pages.Admin.Dicts">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:BootstrapAdmin.Web.Pages.Admin.Dicts.OnInitialized">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:BootstrapAdmin.Web.Pages.Admin.Users">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:BootstrapAdmin.Web.Services.BootstrapAppContext">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:BootstrapAdmin.Web.Services.BootstrapAppContext.AppId">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:BootstrapAdmin.Web.Services.BootstrapAppContext.#ctor(Microsoft.Extensions.Configuration.IConfiguration)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="configuration"></param>
|
||||
</member>
|
||||
<member name="T:BootstrapAdmin.Web.Services.IBootstrapMenu">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:BootstrapAdmin.Web.Shared.MainLayout">
|
||||
<summary>
|
||||
MainLayout 布局类
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:BootstrapAdmin.Web.Shared.MainLayout.OnInitialized">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:BootstrapAdmin.Web.Shared.NotFoundLayout">
|
||||
<summary>
|
||||
NotFoundLayout 模板类
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Microsoft.Extensions.DependencyInjection.ServicesExtensions">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Microsoft.Extensions.DependencyInjection.ServicesExtensions.AddBootstrapBlazorAdminServices(Microsoft.Extensions.DependencyInjection.IServiceCollection)">
|
||||
<summary>
|
||||
添加示例后台任务
|
||||
</summary>
|
||||
<param name="services"></param>
|
||||
</member>
|
||||
<member name="T:BootstrapBlazor.DataAcces.PetaPoco.DefaultDataService`1">
|
||||
<summary>
|
||||
PetaPoco ORM 的 IDataService 接口实现
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:BootstrapBlazor.DataAcces.PetaPoco.DefaultDataService`1.#ctor(Microsoft.Extensions.Configuration.IConfiguration)">
|
||||
<summary>
|
||||
构造函数
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:BootstrapBlazor.DataAcces.PetaPoco.DefaultDataService`1.DeleteAsync(System.Collections.Generic.IEnumerable{`0})">
|
||||
<summary>
|
||||
删除方法
|
||||
</summary>
|
||||
<param name="models"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:BootstrapBlazor.DataAcces.PetaPoco.DefaultDataService`1.SaveAsync(`0,BootstrapBlazor.Components.ItemChangedType)">
|
||||
<summary>
|
||||
保存方法
|
||||
</summary>
|
||||
<param name="model"></param>
|
||||
<param name="changedType"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:BootstrapBlazor.DataAcces.PetaPoco.DefaultDataService`1.QueryAsync(BootstrapBlazor.Components.QueryPageOptions)">
|
||||
<summary>
|
||||
查询方法
|
||||
</summary>
|
||||
<param name="option"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
|
@ -1,4 +1,4 @@
|
|||
namespace Bootstrap.Admin.Blazor.Components
|
||||
namespace BootstrapAdmin.Web.Components
|
||||
{
|
||||
/// <summary>
|
||||
///
|
|
@ -6,7 +6,7 @@ using PetaPoco;
|
|||
using System.Linq.Expressions;
|
||||
using System.Reflection;
|
||||
|
||||
namespace BootstrapBlazor.DataAcces.PetaPoco
|
||||
namespace BootstrapAdmin.Web.Extensions
|
||||
{
|
||||
/// <summary>
|
||||
///
|
|
@ -1,4 +1,5 @@
|
|||
using BootstrapBlazor.DataAcces.PetaPoco;
|
||||
using BootstrapAdmin.Web.Services;
|
||||
using BootstrapBlazor.DataAcces.PetaPoco;
|
||||
using System.Text;
|
||||
|
||||
namespace Microsoft.Extensions.DependencyInjection
|
||||
|
@ -68,7 +69,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
|||
services.AddSingleton<BootstrapAppContext>();
|
||||
|
||||
// 增加数据服务
|
||||
services.AddSingleton<IBootstrapMenuService, IBootstrapMenuService>();
|
||||
services.AddDataAccessServices();
|
||||
|
||||
return services;
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
using Bootstrap.Admin.Blazor.DataAccess;
|
||||
using BootstrapAdmin.DataAccess.Models;
|
||||
|
||||
namespace Bootstrap.Admin.Blazor.Models
|
||||
namespace BootstrapAdmin.Web.Models
|
||||
{
|
||||
/// <summary>
|
||||
///
|
|
@ -1,4 +1,4 @@
|
|||
namespace Bootstrap.Admin.Blazor.Models
|
||||
namespace BootstrapAdmin.Web.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// 登陆页面 Model
|
|
@ -1,6 +1,6 @@
|
|||
@page "/admin/dicts"
|
||||
|
||||
<BlazorTable TItem="Dict" IsPagination="false" TableSearchModel="@DictsSearchModel">
|
||||
<BlazorTable TItem="Dict" IsPagination="false" TableSearchModel="DictsSearchModel">
|
||||
<ColumnsTemplete>
|
||||
<TableColumn @bind-Field="context.Category" Text="字典标签" Filterable="true" Searchable="true" Sortable="true"></TableColumn>
|
||||
<TableColumn @bind-Field="context.Name" Text="字典名称" Filterable="true" Searchable="true" Sortable="true"></TableColumn>
|
|
@ -1,4 +1,6 @@
|
|||
namespace Bootstrap.Admin.Blazor.Pages.Admin
|
||||
using BootstrapAdmin.Web.Models;
|
||||
|
||||
namespace BootstrapAdmin.Web.Pages.Admin
|
||||
{
|
||||
/// <summary>
|
||||
///
|
|
@ -1,6 +1,6 @@
|
|||
using Task = System.Threading.Tasks.Task;
|
||||
|
||||
namespace Bootstrap.Admin.Blazor.Pages.Admin
|
||||
namespace BootstrapAdmin.Web.Pages.Admin
|
||||
{
|
||||
/// <summary>
|
||||
///
|
|
@ -0,0 +1,3 @@
|
|||
@attribute [Authorize]
|
||||
|
||||
@using BootstrapAdmin.DataAccess.Models
|
|
@ -1,5 +1,5 @@
|
|||
@page "/"
|
||||
@namespace Bootstrap.Admin.Blazor.Pages
|
||||
@namespace BootstrapAdmin.Web.Pages
|
||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||
@{
|
||||
Layout = "_Layout";
|
|
@ -1,5 +1,5 @@
|
|||
@using Microsoft.AspNetCore.Components.Web
|
||||
@namespace Bootstrap.Admin.Blazor.Pages
|
||||
@namespace BootstrapAdmin.Web.Pages
|
||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||
|
||||
<!DOCTYPE html>
|
|
@ -1,4 +1,4 @@
|
|||
namespace Bootstrap.Admin.Blazor.Services
|
||||
namespace BootstrapAdmin.Web.Services
|
||||
{
|
||||
/// <summary>
|
||||
///
|
|
@ -5,6 +5,7 @@
|
|||
using PetaPoco;
|
||||
using PetaPoco.Extensions;
|
||||
using PetaPoco.Providers;
|
||||
using BootstrapAdmin.Web.Extensions;
|
||||
|
||||
namespace BootstrapBlazor.DataAcces.PetaPoco
|
||||
{
|
|
@ -0,0 +1,9 @@
|
|||
namespace BootstrapAdmin.Web.Services
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public interface IBootstrapMenu
|
||||
{
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
namespace Bootstrap.Admin.Blazor.Shared
|
||||
namespace BootstrapAdmin.Web.Shared
|
||||
{
|
||||
/// <summary>
|
||||
/// MainLayout 布局类
|
|
@ -1,4 +1,4 @@
|
|||
namespace Bootstrap.Admin.Blazor.Shared
|
||||
namespace BootstrapAdmin.Web.Shared
|
||||
{
|
||||
/// <summary>
|
||||
/// NotFoundLayout 模板类
|
|
@ -9,9 +9,8 @@
|
|||
|
||||
@using BootstrapBlazor.Components
|
||||
|
||||
@using Bootstrap.Admin.Blazor
|
||||
@using Bootstrap.Admin.Blazor.Components
|
||||
@using Bootstrap.Admin.Blazor.Models
|
||||
@using Bootstrap.Admin.Blazor.Shared
|
||||
@using BootstrapAdmin.DataAccess.Models
|
||||
|
||||
@using Bootstrap.Admin.Blazor.DataAccess
|
||||
@using BootstrapAdmin.Web.Components
|
||||
@using BootstrapAdmin.Web.Models
|
||||
@using BootstrapAdmin.Web.Shared
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 112 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 523 KiB After Width: | Height: | Size: 523 KiB |
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 116 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 217 KiB After Width: | Height: | Size: 217 KiB |
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 106 KiB |
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 152 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 385 KiB After Width: | Height: | Size: 385 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 124 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 937 B After Width: | Height: | Size: 937 B |
Before Width: | Height: | Size: 314 KiB After Width: | Height: | Size: 314 KiB |
Before Width: | Height: | Size: 288 B After Width: | Height: | Size: 288 B |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 973 B After Width: | Height: | Size: 973 B |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
Before Width: | Height: | Size: 193 KiB After Width: | Height: | Size: 193 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 203 KiB After Width: | Height: | Size: 203 KiB |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 973 B After Width: | Height: | Size: 973 B |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 288 B After Width: | Height: | Size: 288 B |
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |