完成RCL MASABlazor Pro模板,测试HttpApi单独调用和Server集成调用方案通过
|
@ -45,10 +45,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "client", "client", "{15E62D
|
||||||
EndProject
|
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}"
|
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
|
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}"
|
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
|
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
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
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}.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.ActiveCfg = Release|Any CPU
|
||||||
{CEBD131C-0B70-4BBF-99C5-47E2EB415554}.Release|Any CPU.Build.0 = 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.ActiveCfg = Debug|Any CPU
|
||||||
{6C032DF5-C957-468F-A4C9-CA8167508DEF}.Debug|Any CPU.Build.0 = 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.ActiveCfg = Release|Any CPU
|
||||||
{6C032DF5-C957-468F-A4C9-CA8167508DEF}.Release|Any CPU.Build.0 = 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
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
@ -151,8 +151,8 @@ Global
|
||||||
{CA3CC1A0-79B8-4B7B-8180-9A355B3856F7} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
|
{CA3CC1A0-79B8-4B7B-8180-9A355B3856F7} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
|
||||||
{15E62D85-34D1-44EE-9C43-AD3CC8D8558D} = {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}
|
{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}
|
{6C032DF5-C957-468F-A4C9-CA8167508DEF} = {15E62D85-34D1-44EE-9C43-AD3CC8D8558D}
|
||||||
|
{1292B265-A3F8-480A-B63E-BE7DA3F9C981} = {3BF71760-5526-4089-8A43-ED8430847906}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {28315BFD-90E7-4E14-A2EA-F3D23AF4126F}
|
SolutionGuid = {28315BFD-90E7-4E14-A2EA-F3D23AF4126F}
|
||||||
|
|
|
@ -17,6 +17,10 @@ using Volo.Abp.UI.Navigation;
|
||||||
using Volo.Abp.Identity.Blazor.WebAssembly;
|
using Volo.Abp.Identity.Blazor.WebAssembly;
|
||||||
using Volo.Abp.SettingManagement.Blazor.WebAssembly;
|
using Volo.Abp.SettingManagement.Blazor.WebAssembly;
|
||||||
using Volo.Abp.TenantManagement.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;
|
namespace Sinet.Universal.Admin.Blazor;
|
||||||
|
|
||||||
|
@ -30,11 +34,46 @@ namespace Sinet.Universal.Admin.Blazor;
|
||||||
)]
|
)]
|
||||||
public class AdminBlazorModule : AbpModule
|
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 environment = context.Services.GetSingletonInstance<IWebAssemblyHostEnvironment>();
|
||||||
var builder = context.Services.GetSingletonInstance<WebAssemblyHostBuilder>();
|
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);
|
ConfigureAuthentication(builder);
|
||||||
ConfigureHttpClient(context, environment);
|
ConfigureHttpClient(context, environment);
|
||||||
ConfigureBlazorise(context);
|
ConfigureBlazorise(context);
|
||||||
|
@ -42,6 +81,8 @@ public class AdminBlazorModule : AbpModule
|
||||||
ConfigureUI(builder);
|
ConfigureUI(builder);
|
||||||
ConfigureMenu(context);
|
ConfigureMenu(context);
|
||||||
ConfigureAutoMapper(context);
|
ConfigureAutoMapper(context);
|
||||||
|
|
||||||
|
await base.ConfigureServicesAsync(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ConfigureRouter(ServiceConfigurationContext 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" />
|
<component type="typeof(HeadOutlet)" render-mode="ServerPrerendered" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<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">
|
<div id="blazor-error-ui">
|
||||||
<environment include="Staging,Production">
|
<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;
|
||||||
|
|
||||||
|
namespace Sinet.Universal.Admin.Web;
|
||||||
|
|
||||||
|
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
public async static Task<int> Main(string[] args)
|
||||||
|
{
|
||||||
|
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);
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
builder.Host.AddAppSettingsSecretsJson()
|
||||||
// Add services to the container.
|
.UseAutofac();
|
||||||
builder.Services.AddRazorPages();
|
//.UseSerilog();
|
||||||
builder.Services.AddServerSideBlazor();
|
await builder.AddApplicationAsync<AdminBlazorModule>();
|
||||||
builder.Services.AddMasaBlazor(builder =>
|
|
||||||
{
|
|
||||||
builder.ConfigureTheme(theme =>
|
|
||||||
{
|
|
||||||
theme.Themes.Light.Primary = "#4318FF";
|
|
||||||
theme.Themes.Light.Accent = "#4318FF";
|
|
||||||
});
|
|
||||||
}).AddI18nForServer("wwwroot/i18n");
|
|
||||||
|
|
||||||
|
|
||||||
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();
|
var app = builder.Build();
|
||||||
|
await app.InitializeApplicationAsync();
|
||||||
// Configure the HTTP request pipeline.
|
await app.RunAsync();
|
||||||
if (!app.Environment.IsDevelopment())
|
return 0;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
app.UseExceptionHandler("/Error");
|
if (ex is HostAbortedException)
|
||||||
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
|
{
|
||||||
app.UseHsts();
|
throw;
|
||||||
}
|
}
|
||||||
|
|
||||||
app.UseHttpsRedirection();
|
Log.Fatal(ex, "Host terminated unexpectedly!");
|
||||||
|
return 1;
|
||||||
app.UseStaticFiles();
|
}
|
||||||
|
finally
|
||||||
app.UseRouting();
|
{
|
||||||
|
Log.CloseAndFlush();
|
||||||
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>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<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>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Update="wwwroot\i18n\config\languageConfig.json">
|
<ProjectReference Include="..\..\common\Sinet.Universal.Admin.HttpApi.Client\Sinet.Universal.Admin.HttpApi.Client.csproj" />
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<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>
|
||||||
<Content Update="wwwroot\i18n\en-US.json">
|
<Content Update="appsettings.json">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
|
||||||
</Content>
|
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
|
||||||
<Content Update="wwwroot\i18n\zh-CN.json">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
<Content Update="wwwroot\nav\nav.json">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
</Content>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
|
@ -1,32 +1,2 @@
|
||||||
global using BlazorComponent;
|
global using Microsoft.AspNetCore.Http;
|
||||||
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 System.Reflection;
|
global using System.Reflection;
|
||||||
global using System.Text.Json;
|
|
||||||
global using System.Globalization;
|
|
|
@ -10,5 +10,3 @@
|
||||||
@using Masa.Blazor
|
@using Masa.Blazor
|
||||||
@using Masa.Blazor.Presets
|
@using Masa.Blazor.Presets
|
||||||
@using Sinet.Universal.Admin.Web
|
@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": {
|
"App": {
|
||||||
"LogLevel": {
|
"SelfUrl": "https://localhost:44372"
|
||||||
"Default": "Information",
|
},
|
||||||
"Microsoft.AspNetCore": "Warning"
|
"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 |