完成RCL MASABlazor Pro模板,测试HttpApi单独调用和Server集成调用方案通过
|
@ -45,10 +45,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "client", "client", "{15E62D
|
|||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sinet.Universal.Admin.Server.Host", "src\server\Sinet.Universal.Admin.Server.Host\Sinet.Universal.Admin.Server.Host.csproj", "{CEBD131C-0B70-4BBF-99C5-47E2EB415554}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sinet.Universal.Admin.RCL", "src\common\Sinet.Universal.Admin.RCL\Sinet.Universal.Admin.RCL.csproj", "{9EC53C30-FD0C-4DA2-958F-A7F5E277CE7C}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sinet.Universal.Admin.Web", "src\client\Sinet.Universal.Admin.Web\Sinet.Universal.Admin.Web.csproj", "{6C032DF5-C957-468F-A4C9-CA8167508DEF}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sinet.Universal.Admin.RCL", "src\common\Sinet.Universal.Admin.RCL\Sinet.Universal.Admin.RCL.csproj", "{1292B265-A3F8-480A-B63E-BE7DA3F9C981}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
|
@ -119,14 +119,14 @@ Global
|
|||
{CEBD131C-0B70-4BBF-99C5-47E2EB415554}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{CEBD131C-0B70-4BBF-99C5-47E2EB415554}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CEBD131C-0B70-4BBF-99C5-47E2EB415554}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9EC53C30-FD0C-4DA2-958F-A7F5E277CE7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9EC53C30-FD0C-4DA2-958F-A7F5E277CE7C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9EC53C30-FD0C-4DA2-958F-A7F5E277CE7C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9EC53C30-FD0C-4DA2-958F-A7F5E277CE7C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6C032DF5-C957-468F-A4C9-CA8167508DEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6C032DF5-C957-468F-A4C9-CA8167508DEF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6C032DF5-C957-468F-A4C9-CA8167508DEF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6C032DF5-C957-468F-A4C9-CA8167508DEF}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1292B265-A3F8-480A-B63E-BE7DA3F9C981}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1292B265-A3F8-480A-B63E-BE7DA3F9C981}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1292B265-A3F8-480A-B63E-BE7DA3F9C981}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1292B265-A3F8-480A-B63E-BE7DA3F9C981}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
@ -151,8 +151,8 @@ Global
|
|||
{CA3CC1A0-79B8-4B7B-8180-9A355B3856F7} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
|
||||
{15E62D85-34D1-44EE-9C43-AD3CC8D8558D} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
|
||||
{CEBD131C-0B70-4BBF-99C5-47E2EB415554} = {CA3CC1A0-79B8-4B7B-8180-9A355B3856F7}
|
||||
{9EC53C30-FD0C-4DA2-958F-A7F5E277CE7C} = {3BF71760-5526-4089-8A43-ED8430847906}
|
||||
{6C032DF5-C957-468F-A4C9-CA8167508DEF} = {15E62D85-34D1-44EE-9C43-AD3CC8D8558D}
|
||||
{1292B265-A3F8-480A-B63E-BE7DA3F9C981} = {3BF71760-5526-4089-8A43-ED8430847906}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {28315BFD-90E7-4E14-A2EA-F3D23AF4126F}
|
||||
|
|
|
@ -17,6 +17,10 @@ using Volo.Abp.UI.Navigation;
|
|||
using Volo.Abp.Identity.Blazor.WebAssembly;
|
||||
using Volo.Abp.SettingManagement.Blazor.WebAssembly;
|
||||
using Volo.Abp.TenantManagement.Blazor.WebAssembly;
|
||||
using System.Threading.Tasks;
|
||||
using System.Net.Http.Json;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Sinet.Universal.Admin.Blazor;
|
||||
|
||||
|
@ -30,11 +34,46 @@ namespace Sinet.Universal.Admin.Blazor;
|
|||
)]
|
||||
public class AdminBlazorModule : AbpModule
|
||||
{
|
||||
public override void ConfigureServices(ServiceConfigurationContext context)
|
||||
//public override void ConfigureServices(ServiceConfigurationContext context)
|
||||
//{
|
||||
// var environment = context.Services.GetSingletonInstance<IWebAssemblyHostEnvironment>();
|
||||
// var builder = context.Services.GetSingletonInstance<WebAssemblyHostBuilder>();
|
||||
|
||||
|
||||
|
||||
// ConfigureAuthentication(builder);
|
||||
// ConfigureHttpClient(context, environment);
|
||||
// ConfigureBlazorise(context);
|
||||
// ConfigureRouter(context);
|
||||
// ConfigureUI(builder);
|
||||
// ConfigureMenu(context);
|
||||
// ConfigureAutoMapper(context);
|
||||
//}
|
||||
|
||||
public override async Task ConfigureServicesAsync(ServiceConfigurationContext context)
|
||||
{
|
||||
var environment = context.Services.GetSingletonInstance<IWebAssemblyHostEnvironment>();
|
||||
var builder = context.Services.GetSingletonInstance<WebAssemblyHostBuilder>();
|
||||
|
||||
//builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
|
||||
|
||||
//using var httpclient = new HttpClient();
|
||||
//var navList = await httpclient.GetFromJsonAsync<List<NavModel>>(Path.Combine(builder.HostEnvironment.BaseAddress, $"nav/nav.json")) ?? throw new Exception("please configure the Navigation!");
|
||||
//builder.Services.AddNav(navList);
|
||||
|
||||
//await builder.Services
|
||||
// .AddMasaBlazor(builder =>
|
||||
// {
|
||||
// builder.ConfigureTheme(theme =>
|
||||
// {
|
||||
// theme.Themes.Light.Primary = "#4318FF";
|
||||
// theme.Themes.Light.Accent = "#4318FF";
|
||||
// });
|
||||
// })
|
||||
// .AddI18nForWasmAsync(Path.Combine(builder.HostEnvironment.BaseAddress, "i18n"));
|
||||
|
||||
|
||||
|
||||
ConfigureAuthentication(builder);
|
||||
ConfigureHttpClient(context, environment);
|
||||
ConfigureBlazorise(context);
|
||||
|
@ -42,6 +81,8 @@ public class AdminBlazorModule : AbpModule
|
|||
ConfigureUI(builder);
|
||||
ConfigureMenu(context);
|
||||
ConfigureAutoMapper(context);
|
||||
|
||||
await base.ConfigureServicesAsync(context);
|
||||
}
|
||||
|
||||
private void ConfigureRouter(ServiceConfigurationContext context)
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||
<title>Sinet.Universal.Admin</title>
|
||||
<base href="/" />
|
||||
<link rel="icon" type="image/png" href="https://cdn.masastack.com/stack/images/logo/MASAStack/logo16_16.png" />
|
||||
<link href="_content/Masa.Blazor/css/masa-blazor.min.css" rel="stylesheet">
|
||||
<link href="css/masa-blazor-pro.css" rel="stylesheet" />
|
||||
<link href="css/app.css" rel="stylesheet" />
|
||||
<link href="Sinet.Universal.Admin.Blazor.styles.css" rel="stylesheet" />
|
||||
<link href="css/spinkit.min.css" rel="stylesheet" />
|
||||
<link href="css/materialdesign/v7.1.96/css/materialdesignicons.min.css" rel="stylesheet">
|
||||
<link href="css/material/icons.css" rel="stylesheet">
|
||||
<link href="css/fontawesome/v6.4.0/css/all.min.css" rel="stylesheet">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app">
|
||||
<!--https://github.com/tobiasahlin/SpinKit-->
|
||||
<div class="modal-overlay">
|
||||
<div class="sk-flow">
|
||||
<div class="sk-flow-dot"></div>
|
||||
<div class="sk-flow-dot"></div>
|
||||
<div class="sk-flow-dot"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="blazor-error-ui">
|
||||
An unhandled error has occurred.
|
||||
<a href="" class="reload">Reload</a>
|
||||
<a class="dismiss">🗙</a>
|
||||
</div>
|
||||
<script src="_framework/blazor.webassembly.js"></script>
|
||||
<script src="_content/BlazorComponent/js/blazor-component.js"></script>
|
||||
<script src="js/echarts/5.1.1/echarts.min.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -0,0 +1,11 @@
|
|||
using AutoMapper;
|
||||
|
||||
namespace Sinet.Universal.Admin.Web;
|
||||
|
||||
public class AdminBlazorAutoMapperProfile : Profile
|
||||
{
|
||||
public AdminBlazorAutoMapperProfile()
|
||||
{
|
||||
//Define your AutoMapper configuration here for the Blazor project.
|
||||
}
|
||||
}
|
|
@ -0,0 +1,118 @@
|
|||
using Volo.Abp.AspNetCore.Components.Web.Theming.Routing;
|
||||
using Volo.Abp.AutoMapper;
|
||||
using Volo.Abp.Modularity;
|
||||
using Sinet.Universal.Admin.RCL;
|
||||
using Volo.Abp.AspNetCore.Serilog;
|
||||
using Volo.Abp.Autofac;
|
||||
using Volo.Abp.AspNetCore.Components.Server.BasicTheme;
|
||||
using Volo.Abp.AspNetCore.Mvc.Localization;
|
||||
using Sinet.Universal.Admin.Localization;
|
||||
using Volo.Abp.UI.Navigation.Urls;
|
||||
using Volo.Abp;
|
||||
|
||||
namespace Sinet.Universal.Admin.Web;
|
||||
|
||||
[DependsOn(
|
||||
typeof(AdminHttpApiClientModule),
|
||||
typeof(AdminBlazorServerModule),
|
||||
typeof(AbpAspNetCoreSerilogModule),
|
||||
typeof(AbpAutofacModule),
|
||||
typeof(AbpAspNetCoreComponentsServerBasicThemeModule)
|
||||
)]
|
||||
public class AdminBlazorModule : AbpModule
|
||||
{
|
||||
public override void PreConfigureServices(ServiceConfigurationContext context)
|
||||
{
|
||||
context.Services.PreConfigure<AbpMvcDataAnnotationsLocalizationOptions>(options =>
|
||||
{
|
||||
options.AddAssemblyResource(
|
||||
typeof(AdminResource),
|
||||
typeof(AdminDomainSharedModule).Assembly,
|
||||
typeof(AdminBlazorServerModule).Assembly,
|
||||
typeof(AdminApplicationContractsModule).Assembly,
|
||||
typeof(AdminBlazorModule).Assembly
|
||||
);
|
||||
});
|
||||
|
||||
//PreConfigure<OpenIddictBuilder>(builder =>
|
||||
//{
|
||||
// builder.AddValidation(options =>
|
||||
// {
|
||||
// options.AddAudiences("Admin");
|
||||
// options.UseLocalServer();
|
||||
// options.UseAspNetCore();
|
||||
// });
|
||||
//});
|
||||
}
|
||||
|
||||
public override void ConfigureServices(ServiceConfigurationContext context)
|
||||
{
|
||||
var hostingEnvironment = context.Services.GetHostingEnvironment();
|
||||
var configuration = context.Services.GetConfiguration();
|
||||
|
||||
context.Services.AddMasaBlazor(builder =>
|
||||
{
|
||||
builder.ConfigureTheme(theme =>
|
||||
{
|
||||
theme.Themes.Light.Primary = "#4318FF";
|
||||
theme.Themes.Light.Accent = "#4318FF";
|
||||
});
|
||||
}).AddI18nForServer("wwwroot/i18n");
|
||||
|
||||
var basePath = Path.GetDirectoryName(Assembly.GetAssembly(typeof(AdminBlazorServerModule)).Location) ?? throw new Exception("Get the assembly root directory exception!");
|
||||
context.Services.AddNav(Path.Combine(basePath, $"wwwroot/nav/nav.json"));
|
||||
|
||||
//ConfigureAuthentication(context);
|
||||
ConfigureAutoMapper();
|
||||
ConfigureRouter(context);
|
||||
}
|
||||
|
||||
//private void ConfigureAuthentication(ServiceConfigurationContext context)
|
||||
//{
|
||||
// context.Services.ForwardIdentityAuthenticationForBearer(OpenIddictValidationAspNetCoreDefaults.AuthenticationScheme);
|
||||
//}
|
||||
|
||||
private void ConfigureRouter(ServiceConfigurationContext context)
|
||||
{
|
||||
Configure<AbpRouterOptions>(options =>
|
||||
{
|
||||
options.AppAssembly = typeof(AdminBlazorModule).Assembly;
|
||||
});
|
||||
}
|
||||
|
||||
private void ConfigureAutoMapper()
|
||||
{
|
||||
Configure<AbpAutoMapperOptions>(options =>
|
||||
{
|
||||
options.AddMaps<AdminBlazorModule>();
|
||||
});
|
||||
}
|
||||
|
||||
public override void OnApplicationInitialization(ApplicationInitializationContext context)
|
||||
{
|
||||
var env = context.GetEnvironment();
|
||||
var app = context.GetApplicationBuilder();
|
||||
|
||||
app.UseAbpRequestLocalization();
|
||||
|
||||
if (env.IsDevelopment())
|
||||
{
|
||||
app.UseDeveloperExceptionPage();
|
||||
}
|
||||
else
|
||||
{
|
||||
app.UseExceptionHandler("/Error");
|
||||
app.UseHsts();
|
||||
}
|
||||
|
||||
app.UseHttpsRedirection();
|
||||
app.UseCorrelationId();
|
||||
app.UseStaticFiles();
|
||||
app.UseRouting();
|
||||
app.UseAuthentication();
|
||||
|
||||
app.UseUnitOfWork();
|
||||
app.UseAuthorization();
|
||||
app.UseConfiguredEndpoints();
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
namespace Sinet.Universal.Admin.Web.Data.Base;
|
||||
|
||||
public static class GlobalVariables
|
||||
{
|
||||
public const string DefaultRoute = "dashboard/ecommerce";
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
2023-11-08 14:15:08.330 +08:00 [INF] Starting web host.
|
||||
2023-11-08 14:16:08.154 +08:00 [INF] Starting web host.
|
||||
2023-11-08 14:18:00.968 +08:00 [INF] Starting web host.
|
|
@ -1,3 +0,0 @@
|
|||
@page "/app/invoice/list"
|
||||
|
||||
<Sinet.Universal.Admin.Web.Pages.App.Invoice.Components.InvoiceList />
|
|
@ -1,13 +0,0 @@
|
|||
@page "/"
|
||||
@inherits LayoutComponentBase
|
||||
@inject NavigationManager Nav
|
||||
|
||||
@code {
|
||||
protected override void OnAfterRender(bool firstRender)
|
||||
{
|
||||
if(firstRender)
|
||||
{
|
||||
Nav.NavigateTo(GlobalVariables.DefaultRoute,true);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -21,7 +21,7 @@
|
|||
<component type="typeof(HeadOutlet)" render-mode="ServerPrerendered" />
|
||||
</head>
|
||||
<body>
|
||||
<component type="typeof(Sinet.Universal.Admin.Web.App)" render-mode="ServerPrerendered" />
|
||||
<component type="typeof(Sinet.Universal.Admin.RCL.App)" render-mode="ServerPrerendered" />
|
||||
|
||||
<div id="blazor-error-ui">
|
||||
<environment include="Staging,Production">
|
||||
|
|
|
@ -1,42 +1,57 @@
|
|||
using Sinet.Universal.Admin.Web.Data;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Serilog;
|
||||
using Serilog.Events;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
namespace Sinet.Universal.Admin.Web;
|
||||
|
||||
// Add services to the container.
|
||||
builder.Services.AddRazorPages();
|
||||
builder.Services.AddServerSideBlazor();
|
||||
builder.Services.AddMasaBlazor(builder =>
|
||||
|
||||
public class Program
|
||||
{
|
||||
builder.ConfigureTheme(theme =>
|
||||
public async static Task<int> Main(string[] args)
|
||||
{
|
||||
theme.Themes.Light.Primary = "#4318FF";
|
||||
theme.Themes.Light.Accent = "#4318FF";
|
||||
});
|
||||
}).AddI18nForServer("wwwroot/i18n");
|
||||
Log.Logger = new LoggerConfiguration()
|
||||
#if DEBUG
|
||||
.MinimumLevel.Debug()
|
||||
#else
|
||||
.MinimumLevel.Information()
|
||||
#endif
|
||||
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
|
||||
.MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning)
|
||||
.Enrich.FromLogContext()
|
||||
.WriteTo.Async(c => c.File("Logs/logs.txt"))
|
||||
.WriteTo.Async(c => c.Console())
|
||||
.CreateLogger();
|
||||
|
||||
try
|
||||
{
|
||||
Log.Information("Starting web host.");
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
builder.Host.AddAppSettingsSecretsJson()
|
||||
.UseAutofac();
|
||||
//.UseSerilog();
|
||||
await builder.AddApplicationAsync<AdminBlazorModule>();
|
||||
var app = builder.Build();
|
||||
await app.InitializeApplicationAsync();
|
||||
await app.RunAsync();
|
||||
return 0;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (ex is HostAbortedException)
|
||||
{
|
||||
throw;
|
||||
}
|
||||
|
||||
var basePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? throw new Exception("Get the assembly root directory exception!");
|
||||
builder.Services.AddNav(Path.Combine(basePath, $"wwwroot/nav/nav.json"));
|
||||
builder.Services.AddScoped<CookieStorage>();
|
||||
builder.Services.AddScoped<GlobalConfig>();
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
// Configure the HTTP request pipeline.
|
||||
if (!app.Environment.IsDevelopment())
|
||||
{
|
||||
app.UseExceptionHandler("/Error");
|
||||
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
|
||||
app.UseHsts();
|
||||
Log.Fatal(ex, "Host terminated unexpectedly!");
|
||||
return 1;
|
||||
}
|
||||
finally
|
||||
{
|
||||
Log.CloseAndFlush();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
app.UseHttpsRedirection();
|
||||
|
||||
app.UseStaticFiles();
|
||||
|
||||
app.UseRouting();
|
||||
|
||||
app.MapBlazorHub();
|
||||
app.MapFallbackToPage("/_Host");
|
||||
|
||||
app.Run();
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
namespace Sinet.Universal.Admin.Web;
|
||||
|
||||
public abstract class ProComponentBase : ComponentBase
|
||||
{
|
||||
[Inject]
|
||||
protected I18n I18n { get; set; } = null!;
|
||||
|
||||
[CascadingParameter(Name = "CultureName")]
|
||||
protected string? Culture { get; set; }
|
||||
|
||||
protected string T(string? key, params object[] args)
|
||||
{
|
||||
return I18n.T(key, args: args);
|
||||
}
|
||||
}
|
|
@ -7,21 +7,27 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Masa.Blazor" Version="1.0.2" />
|
||||
<PackageReference Include="Serilog.AspNetCore" Version="7.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.Async" Version="1.5.0" />
|
||||
<PackageReference Include="Volo.Abp.AspNetCore.Components.Server.BasicTheme" Version="7.4.1" />
|
||||
<PackageReference Include="Volo.Abp.AspNetCore.Serilog" Version="7.4.1" />
|
||||
<PackageReference Include="Volo.Abp.Autofac" Version="7.4.1" />
|
||||
<PackageReference Include="Volo.Abp.AutoMapper" Version="7.4.1" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Update="wwwroot\i18n\config\languageConfig.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
<ProjectReference Include="..\..\common\Sinet.Universal.Admin.HttpApi.Client\Sinet.Universal.Admin.HttpApi.Client.csproj" />
|
||||
<ProjectReference Include="..\..\common\Sinet.Universal.Admin.RCL\Sinet.Universal.Admin.RCL.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Update="appsettings.Development.json">
|
||||
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
|
||||
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
|
||||
</Content>
|
||||
<Content Update="wwwroot\i18n\en-US.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Update="wwwroot\i18n\zh-CN.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Update="wwwroot\nav\nav.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
<Content Update="appsettings.json">
|
||||
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
|
||||
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
|
||||
|
|
|
@ -1,32 +1,2 @@
|
|||
global using BlazorComponent;
|
||||
global using BlazorComponent.I18n;
|
||||
global using Masa.Blazor;
|
||||
global using Sinet.Universal.Admin.Web;
|
||||
global using Sinet.Universal.Admin.Web.Data.App.ECommerce;
|
||||
global using Sinet.Universal.Admin.Web.Data.App.ECommerce.Dto;
|
||||
global using Sinet.Universal.Admin.Web.Data.App.Invoice;
|
||||
global using Sinet.Universal.Admin.Web.Data.App.Invoice.Dto;
|
||||
global using Sinet.Universal.Admin.Web.Data.App.Todo;
|
||||
global using Sinet.Universal.Admin.Web.Data.App.Todo.Dto;
|
||||
global using Sinet.Universal.Admin.Web.Data.App.User;
|
||||
global using Sinet.Universal.Admin.Web.Data.App.User.Dto;
|
||||
global using Sinet.Universal.Admin.Web.Data.Base;
|
||||
global using Sinet.Universal.Admin.Web.Data.Dashboard.Analytics;
|
||||
global using Sinet.Universal.Admin.Web.Data.Dashboard.ECommerce;
|
||||
global using Sinet.Universal.Admin.Web.Data.Dashboard.ECommerce.Dto;
|
||||
global using Sinet.Universal.Admin.Web.Data.Others.AccountSettings;
|
||||
global using Sinet.Universal.Admin.Web.Data.Others.AccountSettings.Dto;
|
||||
global using Sinet.Universal.Admin.Web.Data.Shared.Favorite;
|
||||
global using Sinet.Universal.Admin.Web.Global;
|
||||
global using Sinet.Universal.Admin.Web.Global.Config;
|
||||
global using Sinet.Universal.Admin.Web.Global.Nav.Model;
|
||||
global using Microsoft.AspNetCore.Components;
|
||||
global using Microsoft.AspNetCore.Components.Forms;
|
||||
global using Microsoft.AspNetCore.Components.Web;
|
||||
global using Microsoft.AspNetCore.Http;
|
||||
global using System.ComponentModel;
|
||||
global using System.ComponentModel.DataAnnotations;
|
||||
global using System.Net.Http.Json;
|
||||
global using Microsoft.AspNetCore.Http;
|
||||
global using System.Reflection;
|
||||
global using System.Text.Json;
|
||||
global using System.Globalization;
|
|
@ -10,5 +10,3 @@
|
|||
@using Masa.Blazor
|
||||
@using Masa.Blazor.Presets
|
||||
@using Sinet.Universal.Admin.Web
|
||||
@using Sinet.Universal.Admin.Web.Data
|
||||
@using Sinet.Universal.Admin.Web.Shared
|
||||
|
|
|
@ -1,9 +1,3 @@
|
|||
{
|
||||
"DetailedErrors": true,
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,9 +1,24 @@
|
|||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
"App": {
|
||||
"SelfUrl": "https://localhost:44372"
|
||||
},
|
||||
"AuthServer": {
|
||||
"Authority": "https://localhost:44333",
|
||||
"ClientId": "Admin_Blazor",
|
||||
"ResponseType": "code"
|
||||
},
|
||||
"RemoteServices": {
|
||||
"Default": {
|
||||
"BaseUrl": "https://localhost:44333"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*"
|
||||
"AbpCli": {
|
||||
"Bundle": {
|
||||
"Mode": "BundleAndMinify", /* Options: None, Bundle, BundleAndMinify */
|
||||
"Name": "global",
|
||||
"Parameters": {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,165 +0,0 @@
|
|||
Fonticons, Inc. (https://fontawesome.com)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Font Awesome Free License
|
||||
|
||||
Font Awesome Free is free, open source, and GPL friendly. You can use it for
|
||||
commercial projects, open source projects, or really almost whatever you want.
|
||||
Full Font Awesome Free license: https://fontawesome.com/license/free.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
|
||||
|
||||
The Font Awesome Free download is licensed under a Creative Commons
|
||||
Attribution 4.0 International License and applies to all icons packaged
|
||||
as SVG and JS file types.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
# Fonts: SIL OFL 1.1 License
|
||||
|
||||
In the Font Awesome Free download, the SIL OFL license applies to all icons
|
||||
packaged as web and desktop font files.
|
||||
|
||||
Copyright (c) 2023 Fonticons, Inc. (https://fontawesome.com)
|
||||
with Reserved Font Name: "Font Awesome".
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
SIL OPEN FONT LICENSE
|
||||
Version 1.1 - 26 February 2007
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting — in part or in whole — any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
# Code: MIT License (https://opensource.org/licenses/MIT)
|
||||
|
||||
In the Font Awesome Free download, the MIT license applies to all non-font and
|
||||
non-icon files.
|
||||
|
||||
Copyright 2023 Fonticons, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in the
|
||||
Software without restriction, including without limitation the rights to use, copy,
|
||||
modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
||||
and to permit persons to whom the Software is furnished to do so, subject to the
|
||||
following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
# Attribution
|
||||
|
||||
Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font
|
||||
Awesome Free files already contain embedded comments with sufficient
|
||||
attribution, so you shouldn't need to do anything additional when using these
|
||||
files normally.
|
||||
|
||||
We've kept attribution comments terse, so we ask that you do not actively work
|
||||
to remove them from files, especially code. They're a great way for folks to
|
||||
learn about Font Awesome.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
# Brand Icons
|
||||
|
||||
All brand icons are trademarks of their respective owners. The use of these
|
||||
trademarks does not indicate endorsement of the trademark holder by Font
|
||||
Awesome, nor vice versa. **Please do not use brand logos for any purpose except
|
||||
to represent the company, product, or service to which they refer.**
|
|
@ -1,22 +0,0 @@
|
|||
/* fallback */
|
||||
@font-face {
|
||||
font-family: 'Material Icons';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: url(./flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2) format('woff2');
|
||||
}
|
||||
|
||||
.material-icons {
|
||||
font-family: 'Material Icons';
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-size: 24px;
|
||||
line-height: 1;
|
||||
letter-spacing: normal;
|
||||
text-transform: none;
|
||||
display: inline-block;
|
||||
white-space: nowrap;
|
||||
word-wrap: normal;
|
||||
direction: ltr;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
|
@ -1,39 +0,0 @@
|
|||
{
|
||||
"$Text": "English",
|
||||
"Dashboard": "Dashboard",
|
||||
"eCommerce": "eCommerce",
|
||||
"Analytics": "Analytics",
|
||||
"Apps": "Apps",
|
||||
"Shop": "Shop",
|
||||
"Details": "Details",
|
||||
"Order": "Order",
|
||||
"Todo": "Todo",
|
||||
"Invoice": "Invoice",
|
||||
"List": "List",
|
||||
"Preview": "Preview",
|
||||
"Edit": "Edit",
|
||||
"Add": "Add",
|
||||
"User": "User",
|
||||
"View": "View",
|
||||
"Pages": "Pages",
|
||||
"Auth": "Auth",
|
||||
"Login v1": "Login v1",
|
||||
"Login v2": "Login v2",
|
||||
"Not Authorized": "Not Authorized",
|
||||
"Register v1": "Register v1",
|
||||
"Register v2": "Register v2",
|
||||
"Forgot Password v1": "Forgot Password v1",
|
||||
"Forgot Password v2": "Forgot Password v2",
|
||||
"Reset Password v1": "Reset Password v1",
|
||||
"Reset Password v2": "Reset Password v2",
|
||||
"Others": "Others",
|
||||
"Account Settings": "Account Settings",
|
||||
"Favorite": "Favorite",
|
||||
"Settings": "Settings",
|
||||
"NavigationStyle": "NavigationStyle",
|
||||
"Flat": "Flat",
|
||||
"Rounded": "Rounded",
|
||||
"Breadcrumb": "Breadcrumb",
|
||||
"PageTab": "PageTab",
|
||||
"Mode": "Mode"
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
[
|
||||
"zh-CN",
|
||||
"en-US"
|
||||
]
|
||||
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
{
|
||||
"$DefaultLanguage": "true",
|
||||
"$Text": "中文简体",
|
||||
"Dashboard": "仪表盘",
|
||||
"eCommerce": "电子商务",
|
||||
"Analytics": "分析",
|
||||
"Apps": "应用",
|
||||
"Shop": "购物",
|
||||
"Details": "商品详情",
|
||||
"Order": "订单",
|
||||
"Todo": "工作事项",
|
||||
"Invoice": "发票 ",
|
||||
"List": "列表",
|
||||
"Preview": "预览 ",
|
||||
"Edit": "编辑",
|
||||
"Add": "添加",
|
||||
"User": "用户",
|
||||
"View": "展示",
|
||||
"Pages": "页面",
|
||||
"Auth": "认证 ",
|
||||
"Login v1": "登录版本1",
|
||||
"Login v2": "登录版本2",
|
||||
"Not Authorized": "没有授权",
|
||||
"Register v1": "注册版本1",
|
||||
"Register v2": "注册版本2",
|
||||
"Forgot Password v1": "忘记密码版本1",
|
||||
"Forgot Password v2": "忘记密码版本2",
|
||||
"Reset Password v1": "重置密码版本1",
|
||||
"Reset Password v2": "重置密码版本2",
|
||||
"Others": "其他",
|
||||
"Account Settings": "账户设置",
|
||||
"Favorite": "收藏",
|
||||
"Settings": "设置",
|
||||
"NavigationStyle": "导航样式",
|
||||
"Flat": "扁平",
|
||||
"Rounded": "圆角",
|
||||
"Breadcrumb": "面包屑",
|
||||
"PageTab": "多页签",
|
||||
"Mode": "模式",
|
||||
"View of {0}": "{0} 的视图",
|
||||
"Edit of {0}": "编辑 {0}",
|
||||
"Details of {0}": "{0} 的详情"
|
||||
}
|
Before Width: | Height: | Size: 976 B |
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 131 KiB |
Before Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 152 KiB |
Before Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 137 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 89 KiB |
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 55 KiB |
Before Width: | Height: | Size: 84 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 67 KiB |
Before Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 61 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 81 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 839 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 101 KiB |
Before Width: | Height: | Size: 64 KiB |