提交代码
21
LICENSE
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2021 HZY
|
||||
|
||||
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.
|
||||
36
README.en.md
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
# HzyAdminSpaNet6
|
||||
|
||||
#### Description
|
||||
HzyAdminSpa .Net6
|
||||
|
||||
#### Software Architecture
|
||||
Software architecture description
|
||||
|
||||
#### Installation
|
||||
|
||||
1. xxxx
|
||||
2. xxxx
|
||||
3. xxxx
|
||||
|
||||
#### Instructions
|
||||
|
||||
1. xxxx
|
||||
2. xxxx
|
||||
3. xxxx
|
||||
|
||||
#### Contribution
|
||||
|
||||
1. Fork the repository
|
||||
2. Create Feat_xxx branch
|
||||
3. Commit your code
|
||||
4. Create Pull Request
|
||||
|
||||
|
||||
#### Gitee Feature
|
||||
|
||||
1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
|
||||
2. Gitee blog [blog.gitee.com](https://blog.gitee.com)
|
||||
3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
|
||||
4. The most valuable open source project [GVP](https://gitee.com/gvp)
|
||||
5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
|
||||
6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
|
||||
71
README.md
|
|
@ -1,3 +1,70 @@
|
|||
# CloudGamingAdmin
|
||||

|
||||
|
||||
蒸汽云游后台管理
|
||||
# HzyAdmin通用管理平台
|
||||
|
||||
数据库脚本位置根目录 doc 文件夹 目前仅提供了 MySql、SqlServer、PgSql 脚本。
|
||||
其他请使用efcore迁移(迁移教程请看文档)
|
||||
QQ : 534584927 174311837
|
||||
|
||||
后端技术: .Net8、EFCore8
|
||||
|
||||
前端: Vue3.x 、Antd Of Vue 4.x 、Vite 、Pinia 2.0.x 、TypeScript
|
||||
|
||||
开发需要环境: vs2022 、 .Net8.0 、VsCode 、Redis
|
||||
|
||||
MVC版本: https://gitee.com/hzy6/hzy-admin-mvc
|
||||
|
||||
WebApi 任务调度平台: https://gitee.com/hzy6/hzy-quartz
|
||||
|
||||
文档/演示地址: http://47.98.179.56/docs
|
||||
|
||||
bilibili视频介绍: https://www.bilibili.com/video/BV1tt4y157qH?vd_source=8803f9b05bd0271050a91c6e659a69d0#reply121926607792
|
||||
|
||||
### 模块化工程结构
|
||||

|
||||
|
||||
### 功能列表
|
||||
|
||||

|
||||
|
||||
### 微服务案例模块化工程结构
|
||||
|
||||

|
||||
|
||||
### 属性注入
|
||||

|
||||
|
||||
### ✨ 部分截图
|
||||
|
||||

|
||||
|
||||
|  |  |
|
||||
|---|---|
|
||||
|
||||
|
||||
|  |  |
|
||||
|-------------------------------------------|---|
|
||||
|
||||
|  |  |
|
||||
|--------------------------------------|---|
|
||||
|
||||
|  |  |
|
||||
|-----------------------------------|---|
|
||||
|
||||
|  |  |
|
||||
|-----------------------------------|---|
|
||||
|
||||
|  |  |
|
||||
|---------------------------------------|---|
|
||||
|
||||
|  |  |
|
||||
|--------------------------------------|---|
|
||||
|
||||
|
||||
|  |  |
|
||||
|-----------------------------------|---|
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,25 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.9.34407.89
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HZY.Admin.Blazor.Client", "HZY.Admin.Blazor.Client\HZY.Admin.Blazor.Client.csproj", "{3AAA4515-690C-4A6B-959F-1DAD8EBD4533}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{3AAA4515-690C-4A6B-959F-1DAD8EBD4533}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3AAA4515-690C-4A6B-959F-1DAD8EBD4533}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3AAA4515-690C-4A6B-959F-1DAD8EBD4533}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3AAA4515-690C-4A6B-959F-1DAD8EBD4533}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {A41AE26B-CF96-48EA-9EEB-202ABA63D2AA}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<Router AppAssembly="@typeof(App).Assembly">
|
||||
<Found Context="routeData">
|
||||
<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
|
||||
<FocusOnNavigate RouteData="@routeData" Selector="h1" />
|
||||
</Found>
|
||||
<NotFound>
|
||||
<LayoutView Layout="@typeof(MainLayout)">
|
||||
<Result Status="404" />
|
||||
</LayoutView>
|
||||
</NotFound>
|
||||
</Router>
|
||||
|
||||
@* antd *@
|
||||
<AntContainer />
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Remove="compilerconfig.json" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Include="compilerconfig.json" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AntDesign" Version="0.19.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.2" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.2" PrivateAssets="all" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.0" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="Flurl.Http" Version="4.0.2" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
@inherits LayoutComponentBase
|
||||
|
||||
@Body
|
||||
|
||||
@code {
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
@inherits LayoutComponentBase
|
||||
|
||||
<Layout>
|
||||
<Header Class="header">
|
||||
<div class="logo" />
|
||||
<Menu Theme="MenuTheme.Dark" Mode="MenuMode.Horizontal" DefaultSelectedKeys=@(new []{"2"})>
|
||||
<MenuItem Key="1">nav 1</MenuItem>
|
||||
<MenuItem Key="2">nav 2</MenuItem>
|
||||
<MenuItem Key="3">nav 3</MenuItem>
|
||||
</Menu>
|
||||
</Header>
|
||||
<Layout>
|
||||
<Sider Width="200" Class="site-layout-background">
|
||||
<Menu Mode="MenuMode.Inline"
|
||||
DefaultSelectedKeys=@(new[] {"1"})
|
||||
DefaultOpenKeys=@(new[] {"sub1"})
|
||||
Style="height: 100%; border-right: 0;">
|
||||
@{
|
||||
RenderFragment sub1Title =
|
||||
@<span>
|
||||
<Icon Type="user" Theme="outline" />
|
||||
subnav 1
|
||||
</span>;
|
||||
}
|
||||
<SubMenu Key="sub1" Title=sub1Title>
|
||||
<MenuItem Key="1">option1</MenuItem>
|
||||
<MenuItem Key="2">option2</MenuItem>
|
||||
<MenuItem Key="3">option3</MenuItem>
|
||||
<MenuItem Key="4">option4</MenuItem>
|
||||
</SubMenu>
|
||||
@{
|
||||
RenderFragment sub2Title =
|
||||
@<span>
|
||||
<Icon Type="laptop" Theme="outline" />
|
||||
subnav 2
|
||||
</span>;
|
||||
}
|
||||
<SubMenu Key="sub2" Title=sub2Title>
|
||||
<MenuItem Key="5">option5</MenuItem>
|
||||
<MenuItem Key="6">option6</MenuItem>
|
||||
<MenuItem Key="7">option7</MenuItem>
|
||||
<MenuItem Key="8">option8</MenuItem>
|
||||
</SubMenu>
|
||||
@{
|
||||
RenderFragment sub3Title =
|
||||
@<span>
|
||||
<Icon Type="notification" Theme="outline" />
|
||||
subnav 3
|
||||
</span>;
|
||||
}
|
||||
<SubMenu Key="sub3" Title=sub3Title>
|
||||
<MenuItem Key="9">option9</MenuItem>
|
||||
<MenuItem Key="10">option10</MenuItem>
|
||||
<MenuItem Key="11">option11</MenuItem>
|
||||
<MenuItem Key="12">option12</MenuItem>
|
||||
</SubMenu>
|
||||
</Menu>
|
||||
</Sider>
|
||||
<Layout Style=" padding: 0 24px 24px;">
|
||||
<Breadcrumb Style="margin: 16px 0;">
|
||||
<BreadcrumbItem>Home</BreadcrumbItem>
|
||||
<BreadcrumbItem>List</BreadcrumbItem>
|
||||
<BreadcrumbItem>App</BreadcrumbItem>
|
||||
</Breadcrumb>
|
||||
<Content Class="site-layout-background" Style=" padding: 24px; margin: 0; min-height: 280px;">
|
||||
@Body
|
||||
</Content>
|
||||
</Layout>
|
||||
</Layout>
|
||||
</Layout>
|
||||
|
||||
<style>
|
||||
#components-layout-demo-top-side-2 .logo {
|
||||
width: 120px;
|
||||
height: 31px;
|
||||
background: rgba(255, 255, 255, 0.2);
|
||||
margin: 16px 28px 16px 0;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.site-layout-background {
|
||||
background: #fff;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
using AntDesign;
|
||||
using Flurl.Http;
|
||||
|
||||
namespace HZY.Admin.Blazor.Client.Layout;
|
||||
|
||||
public partial class MainLayout
|
||||
{
|
||||
[Inject] public HttpClient? HttpClient { get; set; }
|
||||
|
||||
[Inject] public NavigationManager _navigationManager { get; set; }
|
||||
[Inject] public IJSRuntime _jSRuntime { get; set; }
|
||||
|
||||
[Inject] public IMessageService Message { get; set; } = null!;
|
||||
|
||||
// 加载用户信息
|
||||
string urlPrefix = "http://localhost:5500/api/v1/admin/SysUser";
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
await base.OnInitializedAsync();
|
||||
}
|
||||
|
||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||
{
|
||||
if (firstRender)
|
||||
{
|
||||
// http://localhost:5500/api/v1/admin/SysUser/info
|
||||
|
||||
var token = await _jSRuntime.GetLocalStorageItemAsync<string>("token");
|
||||
|
||||
if (string.IsNullOrWhiteSpace(token))
|
||||
{
|
||||
_navigationManager.NavigateTo("/login");
|
||||
return;
|
||||
}
|
||||
|
||||
var result = await $"{urlPrefix}/info"
|
||||
.WithHeader("Authorization", "Bearer " + token)
|
||||
.GetStringAsync();
|
||||
//var data = result.Data;
|
||||
//if (result.Code != 200)
|
||||
//{
|
||||
// await Message.Error(result.Message);
|
||||
// return;
|
||||
//}
|
||||
|
||||
//await Message.Info("拿到了用户信息 : " + JsonConvert.SerializeObject(data));
|
||||
}
|
||||
|
||||
await base.OnAfterRenderAsync(firstRender);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
.page {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
main {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);
|
||||
}
|
||||
|
||||
.top-row {
|
||||
background-color: #f7f7f7;
|
||||
border-bottom: 1px solid #d6d5d5;
|
||||
justify-content: flex-end;
|
||||
height: 3.5rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.top-row ::deep a, .top-row ::deep .btn-link {
|
||||
white-space: nowrap;
|
||||
margin-left: 1.5rem;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.top-row ::deep a:hover, .top-row ::deep .btn-link:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.top-row ::deep a:first-child {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
@media (max-width: 640.98px) {
|
||||
.top-row {
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.top-row ::deep a, .top-row ::deep .btn-link {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 641px) {
|
||||
.page {
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
width: 250px;
|
||||
height: 100vh;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.top-row {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.top-row.auth ::deep a:first-child {
|
||||
flex: 1;
|
||||
text-align: right;
|
||||
width: 0;
|
||||
}
|
||||
|
||||
.top-row, article {
|
||||
padding-left: 2rem !important;
|
||||
padding-right: 1.5rem !important;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
@page "/counter"
|
||||
|
||||
<PageTitle>Counter</PageTitle>
|
||||
|
||||
<h1>Counter</h1>
|
||||
|
||||
<p role="status">Current count: @currentCount</p>
|
||||
|
||||
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
|
||||
|
||||
<Button Type="primary" @onclick="IncrementCount">Hello World!</Button>
|
||||
|
||||
@code {
|
||||
private int currentCount = 0;
|
||||
|
||||
private void IncrementCount()
|
||||
{
|
||||
currentCount++;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
@page "/"
|
||||
|
||||
<PageTitle>Home</PageTitle>
|
||||
|
||||
<h1>Hello, world!</h1>
|
||||
|
||||
Welcome to your new app.
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
@layout AppLayout
|
||||
@page "/login"
|
||||
|
||||
<div class="login">
|
||||
<div class="login-card">
|
||||
<div class="flex-left">
|
||||
<img src="/images/info_service.png" alt="" />
|
||||
</div>
|
||||
<div class="flex-right p-30">
|
||||
<div class="title">欢迎登录 HzyAdmin</div>
|
||||
|
||||
<div class="mt-16">
|
||||
<Input Placeholder="large size" Size="@InputSize.Large" @bind-Value="@UserName">
|
||||
<Prefix>
|
||||
<Icon Type="user" Theme="outline" style="color: #1890ff; font-size: 14px" />
|
||||
</Prefix>
|
||||
</Input>
|
||||
|
||||
@* <a-input v-model:value="state.userName" placeholder="请输入" size="large" allow-clear>
|
||||
<template #prefix>
|
||||
<Icon Type="user" Theme="outline" style="color: #1890ff; font-size: 14px" />
|
||||
</template>
|
||||
</a-input> *@
|
||||
</div>
|
||||
|
||||
<div class="mt-16">
|
||||
<InputPassword Placeholder="large size" Size="@InputSize.Large" @bind-Value="@Password">
|
||||
<Prefix>
|
||||
<Icon Type="lock" Theme="outline" style="color: #1890ff; font-size: 14px" />
|
||||
</Prefix>
|
||||
</InputPassword>
|
||||
|
||||
@* <AInputPassword type="password" v-model:value="state.userPassword" size="large" ref="inputPassword" @keyup.enter="check()">
|
||||
<template #prefix>
|
||||
<Icon Type="lock" Theme="outline" style="color: #1890ff; font-size: 14px" />
|
||||
</template>
|
||||
</AInputPassword> *@
|
||||
</div>
|
||||
|
||||
<div class="mt-40">
|
||||
<Button Type="@ButtonType.Primary" @onclick="CheckAsync" Loading="Loading" Size="large" Block>
|
||||
登录 @Loading
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
using AntDesign;
|
||||
using Flurl;
|
||||
using Flurl.Http;
|
||||
|
||||
namespace HZY.Admin.Blazor.Client.Pages.Login;
|
||||
|
||||
public partial class Login
|
||||
{
|
||||
public string UserName { get; set; }
|
||||
|
||||
public string Password { get; set; }
|
||||
|
||||
public bool Loading { get; set; } = false;
|
||||
|
||||
[Inject]
|
||||
public NavigationManager NavigationManager { get; set; } = null!;
|
||||
|
||||
[Inject]
|
||||
public IJSRuntime JSRuntime { get; set; } = null!;
|
||||
|
||||
[Inject] public HttpClient? HttpClient { get; set; }
|
||||
|
||||
[Inject] public IMessageService Message { get; set; } = null!;
|
||||
|
||||
public async Task CheckAsync()
|
||||
{
|
||||
Loading = true;
|
||||
StateHasChanged();
|
||||
|
||||
try
|
||||
{
|
||||
var result = await (await $"http://localhost:5500/api/v1/identity/Account/Login".PostJsonAsync(new
|
||||
{
|
||||
UserName,
|
||||
UserPassword = Password
|
||||
})).GetJsonAsync<R<LoginResultDto>>();
|
||||
|
||||
var data = result.Data;
|
||||
if (result.Code != 200)
|
||||
{
|
||||
await Message.Error(result.Message);
|
||||
return;
|
||||
}
|
||||
|
||||
string? token = result.Data?.Token;
|
||||
if (string.IsNullOrWhiteSpace(token))
|
||||
{
|
||||
await Message.Error("错误 token");
|
||||
return;
|
||||
}
|
||||
|
||||
await JSRuntime.SetLocalStorageItemAsync("token", token);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw;
|
||||
}
|
||||
finally
|
||||
{
|
||||
Loading = false;
|
||||
StateHasChanged();
|
||||
|
||||
}
|
||||
|
||||
//var result = HttpClient!.PostAsJsonAsync($"/api/v1/identity/Account/Login", new
|
||||
//{
|
||||
// UserName,
|
||||
// Password
|
||||
//}).Result;
|
||||
|
||||
NavigationManager.NavigateTo("/");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class LoginResultDto
|
||||
{
|
||||
|
||||
|
||||
public string? Token { get; set; }
|
||||
|
||||
public string? TokenType { get; set; }
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
.login {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100vh;
|
||||
background: url("/images/login-1.jpg") no-repeat;
|
||||
background-size: cover;
|
||||
}
|
||||
.login .login-card {
|
||||
height: 600px;
|
||||
width: 1000px;
|
||||
box-shadow: 0px 16px 48px 16px rgba(0, 0, 0, 0.72), 0px 12px 32px #000000, 0px 8px 16px -8px #000000;
|
||||
display: flex;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.login .login-card .flex-left {
|
||||
flex: 1;
|
||||
width: 450px;
|
||||
}
|
||||
.login .login-card .flex-left img {
|
||||
height: 100%;
|
||||
}
|
||||
.login .login-card .flex-right {
|
||||
flex: 1;
|
||||
background-color: #ffffff;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
border-top-right-radius: 5px;
|
||||
border-bottom-right-radius: 5px;
|
||||
}
|
||||
.login .login-card .title {
|
||||
text-align: center;
|
||||
font-size: 30px;
|
||||
padding: 20px;
|
||||
font-weight: bold;
|
||||
}
|
||||
.login .login-card .el-input-group__append {
|
||||
padding: 0 !important;
|
||||
}
|
||||
.login .login-card .el-input-group__append .login-code {
|
||||
height: 38px;
|
||||
}
|
||||
@media (max-width: 1024px) {
|
||||
.flex-left {
|
||||
display: none;
|
||||
flex: 0 !important;
|
||||
}
|
||||
.flex-left img {
|
||||
height: auto !important;
|
||||
width: 80% !important;
|
||||
}
|
||||
.flex-right {
|
||||
border-radius: 5px;
|
||||
}
|
||||
}
|
||||
@media (min-width: 600px) and (max-width: 1024px) {
|
||||
.login-card {
|
||||
width: 70% !important;
|
||||
}
|
||||
}
|
||||
@media (max-width: 600px) {
|
||||
.login-card {
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
.lang-content {
|
||||
position: absolute;
|
||||
right: 24px;
|
||||
top: 20px;
|
||||
}
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.login {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100vh;
|
||||
//可以解开一下注解 放置一个背景图片
|
||||
background: url("/images/login-1.jpg") no-repeat;
|
||||
background-size: cover;
|
||||
|
||||
.login-card {
|
||||
height: 600px;
|
||||
width: 1000px;
|
||||
box-shadow: 0px 16px 48px 16px rgba(0, 0, 0, 0.72), 0px 12px 32px #000000, 0px 8px 16px -8px #000000;
|
||||
display: flex;
|
||||
border-radius: 5px;
|
||||
|
||||
.flex-left {
|
||||
flex: 1;
|
||||
width: 450px;
|
||||
|
||||
img {
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.flex-right {
|
||||
flex: 1;
|
||||
background-color: #ffffff;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
border-top-right-radius: 5px;
|
||||
border-bottom-right-radius: 5px;
|
||||
}
|
||||
|
||||
.title {
|
||||
text-align: center;
|
||||
font-size: 30px;
|
||||
padding: 20px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.el-input-group__append {
|
||||
padding: 0 !important;
|
||||
|
||||
.login-code {
|
||||
height: 38px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//小于 1024 像素 选择采用此样式
|
||||
@media (max-width: 1024px) {
|
||||
.flex-left {
|
||||
display: none;
|
||||
flex: 0 !important;
|
||||
|
||||
img {
|
||||
height: auto !important;
|
||||
width: 80% !important;
|
||||
}
|
||||
}
|
||||
|
||||
.flex-right {
|
||||
border-radius: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 600px) and (max-width: 1024px) {
|
||||
.login-card {
|
||||
width: 70% !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
.login-card {
|
||||
// flex-direction: column;
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
|
||||
.lang-content {
|
||||
position: absolute;
|
||||
right: 24px;
|
||||
top: 20px;
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
body{margin:0;padding:0;overflow:hidden;}.login{display:flex;justify-content:center;align-items:center;height:100vh;background:url("/images/login-1.jpg") no-repeat;background-size:cover;}.login .login-card{height:600px;width:1000px;box-shadow:0 16px 48px 16px rgba(0,0,0,.72),0 12px 32px #000,0 8px 16px -8px #000;display:flex;border-radius:5px;}.login .login-card .flex-left{flex:1;width:450px;}.login .login-card .flex-left img{height:100%;}.login .login-card .flex-right{flex:1;background-color:#fff;display:flex;justify-content:center;flex-direction:column;border-top-right-radius:5px;border-bottom-right-radius:5px;}.login .login-card .title{text-align:center;font-size:30px;padding:20px;font-weight:bold;}.login .login-card .el-input-group__append{padding:0!important;}.login .login-card .el-input-group__append .login-code{height:38px;}@media(max-width:1024px){.flex-left{display:none;flex:0!important;}.flex-left img{height:auto!important;width:80%!important;}.flex-right{border-radius:5px;}}@media(min-width:600px) and (max-width:1024px){.login-card{width:70%!important;}}@media(max-width:600px){.login-card{width:100%!important;}}.lang-content{position:absolute;right:24px;top:20px;}
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
@page "/weather"
|
||||
@inject HttpClient Http
|
||||
|
||||
<PageTitle>Weather</PageTitle>
|
||||
|
||||
<h1>Weather</h1>
|
||||
|
||||
<p>This component demonstrates fetching data from the server.</p>
|
||||
|
||||
@if (forecasts == null)
|
||||
{
|
||||
<p><em>Loading...</em></p>
|
||||
}
|
||||
else
|
||||
{
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Date</th>
|
||||
<th>Temp. (C)</th>
|
||||
<th>Temp. (F)</th>
|
||||
<th>Summary</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var forecast in forecasts)
|
||||
{
|
||||
<tr>
|
||||
<td>@forecast.Date.ToShortDateString()</td>
|
||||
<td>@forecast.TemperatureC</td>
|
||||
<td>@forecast.TemperatureF</td>
|
||||
<td>@forecast.Summary</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
}
|
||||
|
||||
@code {
|
||||
private WeatherForecast[]? forecasts;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("sample-data/weather.json");
|
||||
}
|
||||
|
||||
public class WeatherForecast
|
||||
{
|
||||
public DateOnly Date { get; set; }
|
||||
|
||||
public int TemperatureC { get; set; }
|
||||
|
||||
public string? Summary { get; set; }
|
||||
|
||||
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
var builder = WebAssemblyHostBuilder.CreateDefault(args);
|
||||
builder.RootComponents.Add<App>("#app");
|
||||
builder.RootComponents.Add<HeadOutlet>("head::after");
|
||||
|
||||
builder.Services.AddTransient<HttpClientDelegatingHandler>();
|
||||
builder.Services.AddScoped(sp =>
|
||||
{
|
||||
var httpClientDelegatingHandler = sp.GetRequiredService<HttpClientDelegatingHandler>();
|
||||
|
||||
return new HttpClient(httpClientDelegatingHandler)
|
||||
{
|
||||
BaseAddress = new Uri("http://localhost:5500")//builder.HostEnvironment.BaseAddress
|
||||
};
|
||||
});
|
||||
|
||||
builder.Services.AddAntDesign();
|
||||
|
||||
await builder.Build().RunAsync();
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"$schema": "http://json.schemastore.org/launchsettings.json",
|
||||
"profiles": {
|
||||
"http": {
|
||||
"commandName": "Project",
|
||||
"dotnetRunMessages": true,
|
||||
"launchBrowser": true,
|
||||
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
|
||||
"applicationUrl": "http://localhost:5176",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
global using HZY.Admin.Blazor.Client;
|
||||
global using HZY.Admin.Blazor.Client.Utils;
|
||||
global using Microsoft.AspNetCore.Components.Web;
|
||||
global using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
|
||||
global using Microsoft.AspNetCore.Components;
|
||||
global using System.Net.Http.Json;
|
||||
global using Microsoft.JSInterop;
|
||||
global using Newtonsoft.Json;
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
using Microsoft.AspNetCore.Components.WebAssembly.Http;
|
||||
|
||||
namespace HZY.Admin.Blazor.Client.Utils;
|
||||
|
||||
/// <summary>
|
||||
/// http 拦截器
|
||||
/// </summary>
|
||||
public class HttpClientDelegatingHandler : DelegatingHandler
|
||||
{
|
||||
private readonly NavigationManager _navigationManager;
|
||||
private readonly IJSRuntime _jSRuntime;
|
||||
|
||||
public HttpClientDelegatingHandler(NavigationManager navigationManager, IJSRuntime jSRuntime)
|
||||
{
|
||||
_navigationManager = navigationManager;
|
||||
_jSRuntime = jSRuntime;
|
||||
}
|
||||
|
||||
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
|
||||
{
|
||||
var token = await _jSRuntime.GetLocalStorageItemAsync<string>("token");
|
||||
|
||||
if (string.IsNullOrWhiteSpace(token))
|
||||
{
|
||||
_navigationManager.NavigateTo("/login");
|
||||
return new HttpResponseMessage();
|
||||
}
|
||||
|
||||
// 跨域配置
|
||||
request.SetBrowserRequestCredentials(BrowserRequestCredentials.Include);
|
||||
|
||||
// 在发送请求之前进行JSON序列化
|
||||
//if (request.Content != null && request.Content.Headers.ContentType?.MediaType == "application/json")
|
||||
//{
|
||||
// var content = await request.Content.ReadAsStringAsync();
|
||||
// var serializedContent = JsonConvert.SerializeObject(JsonConvert.DeserializeObject(content));
|
||||
// request.Content = new StringContent(serializedContent, System.Text.Encoding.UTF8, "application/json");
|
||||
//}
|
||||
|
||||
try
|
||||
{
|
||||
// 发送请求
|
||||
var response = await base.SendAsync(request, cancellationToken);
|
||||
|
||||
// 在收到响应后进行JSON反序列化
|
||||
//if (response.Content != null && response.Content.Headers.ContentType?.MediaType == "application/json")
|
||||
//{
|
||||
// var content = await response.Content.ReadAsStringAsync();
|
||||
// var deserializedContent = JsonConvert.DeserializeObject(content);
|
||||
// response.Content = new StringContent(JsonConvert.SerializeObject(deserializedContent), System.Text.Encoding.UTF8, "application/json");
|
||||
//}
|
||||
|
||||
return response;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
throw;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,168 @@
|
|||
using System.Net;
|
||||
|
||||
namespace HZY.Admin.Blazor.Client.Utils;
|
||||
|
||||
/// <summary>
|
||||
/// Api 消息返回类
|
||||
/// </summary>
|
||||
public class R : R<object>
|
||||
{
|
||||
public R() : base()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public R(int code, string? message, object? data) : base(code, message, data)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#region result
|
||||
|
||||
/// <summary>
|
||||
/// 返回消息
|
||||
/// </summary>
|
||||
/// <param name="code"></param>
|
||||
/// <param name="message"></param>
|
||||
/// <returns></returns>
|
||||
public static R ResultMessage(HttpStatusCode code, string message)
|
||||
=> new R((int)code, message, null);
|
||||
|
||||
/// <summary>
|
||||
/// 返回数据
|
||||
/// </summary>
|
||||
/// <param name="code"></param>
|
||||
/// <param name="data"></param>
|
||||
/// <returns></returns>
|
||||
public static R ResultData(HttpStatusCode code, object data)
|
||||
=> new R((int)code, null, data);
|
||||
|
||||
/// <summary>
|
||||
/// 可返回消息和数据
|
||||
/// </summary>
|
||||
/// <param name="code"></param>
|
||||
/// <param name="message"></param>
|
||||
/// <param name="data"></param>
|
||||
/// <returns></returns>
|
||||
public static R Result(HttpStatusCode code, string message, object data)
|
||||
=> new R((int)code, message, data);
|
||||
|
||||
#endregion
|
||||
|
||||
#region result code 可传入 int
|
||||
|
||||
/// <summary>
|
||||
/// 返回消息
|
||||
/// </summary>
|
||||
/// <param name="code"></param>
|
||||
/// <param name="message"></param>
|
||||
/// <returns></returns>
|
||||
public static R ResultMessage(int code, string message)
|
||||
=> new R(code, message, null);
|
||||
|
||||
/// <summary>
|
||||
/// 返回数据
|
||||
/// </summary>
|
||||
/// <param name="code"></param>
|
||||
/// <param name="data"></param>
|
||||
/// <returns></returns>
|
||||
public static R ResultData(int code, object data)
|
||||
=> new R(code, null, data);
|
||||
|
||||
/// <summary>
|
||||
/// 可返回消息和数据
|
||||
/// </summary>
|
||||
/// <param name="code"></param>
|
||||
/// <param name="message"></param>
|
||||
/// <param name="data"></param>
|
||||
/// <returns></returns>
|
||||
public static R Result(int code, string message, object data)
|
||||
=> new R(code, message, data);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Ok
|
||||
|
||||
/// <summary>
|
||||
/// 成功 可返回消息
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
/// <returns></returns>
|
||||
public static R OkMessage(string message)
|
||||
=> ResultMessage(HttpStatusCode.OK, message);
|
||||
|
||||
/// <summary>
|
||||
/// 成功 可返回数据
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
/// <returns></returns>
|
||||
public static R OkData(object data)
|
||||
=> ResultData(HttpStatusCode.OK, data);
|
||||
|
||||
/// <summary>
|
||||
/// 成功 可返回 消息和数据
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
/// <param name="data"></param>
|
||||
/// <returns></returns>
|
||||
public static R Ok(string message, object data)
|
||||
=> Result(HttpStatusCode.OK, message, data);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Error
|
||||
|
||||
/// <summary>
|
||||
/// Error 可返回消息
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
/// <returns></returns>
|
||||
public static R ErrorMessage(string message)
|
||||
=> ResultMessage(HttpStatusCode.InternalServerError, message);
|
||||
|
||||
/// <summary>
|
||||
/// Error 可返回数据
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
/// <returns></returns>
|
||||
public static R ErrorData(object data)
|
||||
=> ResultData(HttpStatusCode.InternalServerError, data);
|
||||
|
||||
/// <summary>
|
||||
/// Error 可返回 消息和数据
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
/// <param name="data"></param>
|
||||
/// <returns></returns>
|
||||
public static R Error(string message, object data)
|
||||
=> Result(HttpStatusCode.InternalServerError, message, data);
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Api 消息返回类
|
||||
/// </summary>
|
||||
public class R<T>
|
||||
{
|
||||
public R()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public R(int code, string? message, T? data)
|
||||
{
|
||||
this.Code = code;
|
||||
this.Message = message;
|
||||
this.Data = data;
|
||||
}
|
||||
|
||||
public int Code { get; set; }
|
||||
public string? Message { get; set; }
|
||||
public T? Data { get; set; }
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
namespace HZY.Admin.Blazor.Client.Utils;
|
||||
|
||||
/// <summary>
|
||||
/// 工具
|
||||
/// </summary>
|
||||
public static class Tools
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取浏览器内存数据
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="jSRuntime"></param>
|
||||
/// <param name="key"></param>
|
||||
/// <returns></returns>
|
||||
public static async Task<T> GetLocalStorageItemAsync<T>(this IJSRuntime jSRuntime, string key)
|
||||
{
|
||||
var token = await jSRuntime.InvokeAsync<T>("localStorage.getItem", key);
|
||||
|
||||
return token;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 存储数据到浏览器
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="jSRuntime"></param>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="data"></param>
|
||||
/// <returns></returns>
|
||||
public static async Task SetLocalStorageItemAsync<T>(this IJSRuntime jSRuntime, string key, T data)
|
||||
{
|
||||
await jSRuntime.InvokeAsync<T>("localStorage.setItem", key, JsonConvert.SerializeObject(data));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
@using System.Net.Http
|
||||
@using System.Net.Http.Json
|
||||
@using Microsoft.AspNetCore.Components.Forms
|
||||
@using Microsoft.AspNetCore.Components.Routing
|
||||
@using Microsoft.AspNetCore.Components.Web
|
||||
@using Microsoft.AspNetCore.Components.Web.Virtualization
|
||||
@using Microsoft.AspNetCore.Components.WebAssembly.Http
|
||||
@using Microsoft.JSInterop
|
||||
@using HZY.Admin.Blazor.Client
|
||||
@using HZY.Admin.Blazor.Client.Layout
|
||||
@using AntDesign
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
[
|
||||
{
|
||||
"outputFile": "Pages/Login/Login.razor.css",
|
||||
"inputFile": "Pages/Login/Login.razor.less"
|
||||
},
|
||||
{
|
||||
"outputFile": "wwwroot/css/hzy-admin-ui-tools.css",
|
||||
"inputFile": "wwwroot/css/hzy-admin-ui-tools.less"
|
||||
}
|
||||
]
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"compilers": {
|
||||
"less": {
|
||||
"autoPrefix": "",
|
||||
"cssComb": "none",
|
||||
"ieCompat": true,
|
||||
"math": null,
|
||||
"strictMath": false,
|
||||
"strictUnits": false,
|
||||
"relativeUrls": true,
|
||||
"rootPath": "",
|
||||
"sourceMapRoot": "",
|
||||
"sourceMapBasePath": "",
|
||||
"sourceMap": false
|
||||
},
|
||||
"sass": {
|
||||
"autoPrefix": "",
|
||||
"loadPaths": "",
|
||||
"style": "expanded",
|
||||
"relativeUrls": true,
|
||||
"sourceMap": false
|
||||
},
|
||||
"nodesass": {
|
||||
"autoPrefix": "",
|
||||
"includePath": "",
|
||||
"indentType": "space",
|
||||
"indentWidth": 2,
|
||||
"outputStyle": "nested",
|
||||
"precision": 5,
|
||||
"relativeUrls": true,
|
||||
"sourceMapRoot": "",
|
||||
"lineFeed": "",
|
||||
"sourceMap": false
|
||||
},
|
||||
"stylus": {
|
||||
"sourceMap": false
|
||||
},
|
||||
"babel": {
|
||||
"sourceMap": false
|
||||
},
|
||||
"coffeescript": {
|
||||
"bare": false,
|
||||
"runtimeMode": "node",
|
||||
"sourceMap": false
|
||||
},
|
||||
"handlebars": {
|
||||
"root": "",
|
||||
"noBOM": false,
|
||||
"name": "",
|
||||
"namespace": "",
|
||||
"knownHelpersOnly": false,
|
||||
"forcePartial": false,
|
||||
"knownHelpers": [],
|
||||
"commonjs": "",
|
||||
"amd": false,
|
||||
"sourceMap": false
|
||||
}
|
||||
},
|
||||
"minifiers": {
|
||||
"css": {
|
||||
"enabled": true,
|
||||
"termSemicolons": true,
|
||||
"gzip": false
|
||||
},
|
||||
"javascript": {
|
||||
"enabled": true,
|
||||
"termSemicolons": true,
|
||||
"gzip": false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,103 @@
|
|||
html, body {
|
||||
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||
}
|
||||
|
||||
h1:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
a, .btn-link {
|
||||
color: #0071c1;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
color: #fff;
|
||||
background-color: #1b6ec2;
|
||||
border-color: #1861ac;
|
||||
}
|
||||
|
||||
.btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus {
|
||||
box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem #258cfb;
|
||||
}
|
||||
|
||||
.content {
|
||||
padding-top: 1.1rem;
|
||||
}
|
||||
|
||||
.valid.modified:not([type=checkbox]) {
|
||||
outline: 1px solid #26b050;
|
||||
}
|
||||
|
||||
.invalid {
|
||||
outline: 1px solid red;
|
||||
}
|
||||
|
||||
.validation-message {
|
||||
color: red;
|
||||
}
|
||||
|
||||
#blazor-error-ui {
|
||||
background: lightyellow;
|
||||
bottom: 0;
|
||||
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
|
||||
display: none;
|
||||
left: 0;
|
||||
padding: 0.6rem 1.25rem 0.7rem 1.25rem;
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
#blazor-error-ui .dismiss {
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
right: 0.75rem;
|
||||
top: 0.5rem;
|
||||
}
|
||||
|
||||
.blazor-error-boundary {
|
||||
background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;
|
||||
padding: 1rem 1rem 1rem 3.7rem;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.blazor-error-boundary::after {
|
||||
content: "An error has occurred."
|
||||
}
|
||||
|
||||
.loading-progress {
|
||||
position: relative;
|
||||
display: block;
|
||||
width: 8rem;
|
||||
height: 8rem;
|
||||
margin: 20vh auto 1rem auto;
|
||||
}
|
||||
|
||||
.loading-progress circle {
|
||||
fill: none;
|
||||
stroke: #e0e0e0;
|
||||
stroke-width: 0.6rem;
|
||||
transform-origin: 50% 50%;
|
||||
transform: rotate(-90deg);
|
||||
}
|
||||
|
||||
.loading-progress circle:last-child {
|
||||
stroke: #1b6ec2;
|
||||
stroke-dasharray: calc(3.141 * var(--blazor-load-percentage, 0%) * 0.8), 500%;
|
||||
transition: stroke-dasharray 0.05s ease-in-out;
|
||||
}
|
||||
|
||||
.loading-progress-text {
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
inset: calc(20vh + 3.25rem) 0 auto 0.2rem;
|
||||
}
|
||||
|
||||
.loading-progress-text:after {
|
||||
content: var(--blazor-load-percentage-text, "Loading");
|
||||
}
|
||||
|
||||
code {
|
||||
color: #c02d76;
|
||||
}
|
||||
|
|
@ -0,0 +1,114 @@
|
|||
//工具样式库
|
||||
|
||||
/* 全局样式 */
|
||||
|
||||
// ======================================================text
|
||||
.text-danger {
|
||||
color: #F56C6C !important;
|
||||
}
|
||||
|
||||
.text-blue {
|
||||
color: #91d5ff !important;
|
||||
}
|
||||
|
||||
.text-lime {
|
||||
color: #d3f261 !important;
|
||||
}
|
||||
|
||||
.text-cyan {
|
||||
color: #87e8de !important;
|
||||
}
|
||||
|
||||
.text-left {
|
||||
text-align: left !important;
|
||||
}
|
||||
|
||||
.text-right {
|
||||
text-align: right !important;
|
||||
}
|
||||
|
||||
.text-center {
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
// ======================================================height / width
|
||||
.h100 {
|
||||
height: 100% !important;
|
||||
}
|
||||
|
||||
.w100 {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.bg-white {
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
/*
|
||||
循环
|
||||
*/
|
||||
.go_for(@count, @stylename, @name, @base) when (@count >=0) {
|
||||
.@{name}-@{count} {
|
||||
@{stylename}: @base * @count !important;
|
||||
}
|
||||
|
||||
.go_for((@count - 1), (@stylename), (@name), @base);
|
||||
}
|
||||
|
||||
/*
|
||||
end
|
||||
*/
|
||||
|
||||
// ======================================================padding
|
||||
.go_for(100, padding, p, 1px);
|
||||
.go_for(100, padding-left, pl, 1px);
|
||||
.go_for(100, padding-top, pt, 1px);
|
||||
.go_for(100, padding-bottom, pb, 1px);
|
||||
.go_for(100, padding-right, pr, 1px);
|
||||
//负数
|
||||
.go_for(100, padding, p-, -1px);
|
||||
.go_for(100, padding-left, pl-, -1px);
|
||||
.go_for(100, padding-top, pt-, -1px);
|
||||
.go_for(100, padding-bottom, pb-, -1px);
|
||||
.go_for(100, padding-right, pr-, -1px);
|
||||
// ======================================================margin
|
||||
.go_for(100, margin, m, 1px);
|
||||
.go_for(100, margin-left, ml, 1px);
|
||||
.go_for(100, margin-top, mt, 1px);
|
||||
.go_for(100, margin-bottom, mb, 1px);
|
||||
.go_for(100, margin-right, mr, 1px);
|
||||
//负数
|
||||
.go_for(100, margin, m-, -1px);
|
||||
.go_for(100, margin-left, ml-, -1px);
|
||||
.go_for(100, margin-top, mt-, -1px);
|
||||
.go_for(100, margin-bottom, mb-, -1px);
|
||||
.go_for(100, margin-right, mr-, -1px);
|
||||
// ======================================================font size
|
||||
.go_for(100, font-size, fs, 1px);
|
||||
// ======================================================Width
|
||||
.go_for(100, width, w, 1px);
|
||||
.go_for(100, width, w-, -1px);
|
||||
// ======================================================Height
|
||||
.go_for(100, height, h, 1px);
|
||||
.go_for(100, height, h-, -1px);
|
||||
|
||||
// ======================================================Height
|
||||
@media (max-width: 768px) {
|
||||
.xs-hide {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.logo {
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.xs-w100 {
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width:768px) and (max-width: 1200px) {
|
||||
.xs-w100 {
|
||||
width: 85% !important;
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 336 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 244 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 336 KiB |
|
After Width: | Height: | Size: 328 KiB |
|
After Width: | Height: | Size: 332 KiB |
|
After Width: | Height: | Size: 200 KiB |
|
After Width: | Height: | Size: 194 KiB |
|
After Width: | Height: | Size: 192 KiB |
|
After Width: | Height: | Size: 115 KiB |
|
After Width: | Height: | Size: 568 KiB |
|
After Width: | Height: | Size: 569 KiB |
|
After Width: | Height: | Size: 196 KiB |
|
After Width: | Height: | Size: 169 KiB |
|
After Width: | Height: | Size: 440 KiB |
|
|
@ -0,0 +1,37 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh-cn">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>HZY.Admin.Blazor.Client</title>
|
||||
<base href="/" />
|
||||
<link rel="stylesheet" href="css/bootstrap/bootstrap.min.css" />
|
||||
<link rel="stylesheet" href="css/app.css" />
|
||||
<link rel="icon" type="image/png" href="favicon.png" />
|
||||
<link href="HZY.Admin.Blazor.Client.styles.css" rel="stylesheet" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<link href="/wwwroot/css/hzy-admin-ui-tools.min.css" rel="stylesheet">
|
||||
<!-- blazor -->
|
||||
<link href="_content/AntDesign/css/ant-design-blazor.css" rel="stylesheet">
|
||||
|
||||
<div id="app">
|
||||
<svg class="loading-progress">
|
||||
<circle r="40%" cx="50%" cy="50%" />
|
||||
<circle r="40%" cx="50%" cy="50%" />
|
||||
</svg>
|
||||
<div class="loading-progress-text"></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/AntDesign/js/ant-design-blazor.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
[
|
||||
{
|
||||
"date": "2022-01-06",
|
||||
"temperatureC": 1,
|
||||
"summary": "Freezing"
|
||||
},
|
||||
{
|
||||
"date": "2022-01-07",
|
||||
"temperatureC": 14,
|
||||
"summary": "Bracing"
|
||||
},
|
||||
{
|
||||
"date": "2022-01-08",
|
||||
"temperatureC": -13,
|
||||
"summary": "Freezing"
|
||||
},
|
||||
{
|
||||
"date": "2022-01-09",
|
||||
"temperatureC": -16,
|
||||
"summary": "Balmy"
|
||||
},
|
||||
{
|
||||
"date": "2022-01-10",
|
||||
"temperatureC": -2,
|
||||
"summary": "Chilly"
|
||||
}
|
||||
]
|
||||
2
admin-client/.env
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
VUE_APP_BASE=/ #打包路径 VUE_APP_ 开头的变量会被 webpack.DefinePlugin 静态嵌入到客户端侧的包中。你可以在应用的代码中这样访问它们
|
||||
VITE_API_URL=https://steamcloud.shhuanmeng.com
|
||||
3
admin-client/.env.development
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
VUE_APP_BASE=/ #打包路径
|
||||
VITE_API_URL=http://127.0.0.1:802
|
||||
# VITE_API_URL=https://steamcloud.shhuanmeng.com
|
||||
12
admin-client/.idea/admin-client.iml
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/temp" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/tmp" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
8
admin-client/.idea/modules.xml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/admin-client.iml" filepath="$PROJECT_DIR$/.idea/admin-client.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
6
admin-client/.idea/vcs.xml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
3
admin-client/.vscode/extensions.json
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"recommendations": ["Vue.volar"]
|
||||
}
|
||||
21
admin-client/LICENSE
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2022 HZY
|
||||
|
||||
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.
|
||||
16
admin-client/README.md
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
# Vue 3 + TypeScript + Vite
|
||||
|
||||
This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
|
||||
|
||||
## Recommended IDE Setup
|
||||
|
||||
- [VS Code](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar)
|
||||
|
||||
## Type Support For `.vue` Imports in TS
|
||||
|
||||
Since TypeScript cannot handle type information for `.vue` imports, they are shimmed to be a generic Vue component type by default. In most cases this is fine if you don't really care about component prop types outside of templates. However, if you wish to get actual prop types in `.vue` imports (for example to get props validation when using manual `h(...)` calls), you can enable Volar's Take Over mode by following these steps:
|
||||
|
||||
1. Run `Extensions: Show Built-in Extensions` from VS Code's command palette, look for `TypeScript and JavaScript Language Features`, then right click and select `Disable (Workspace)`. By default, Take Over mode will enable itself if the default TypeScript extension is disabled.
|
||||
2. Reload the VS Code window by running `Developer: Reload Window` from the command palette.
|
||||
|
||||
You can learn more about Take Over mode [here](https://github.com/johnsoncodehk/volar/discussions/471).
|
||||
15
admin-client/dist/index.html
vendored
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh-cn">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="./vite.svg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>蒸汽云游</title>
|
||||
<script type="module" crossorigin src="./static/js/index-D2_T1wn8.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="./static/css/index-DlxyC_yF.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
</body>
|
||||
</html>
|
||||
1
admin-client/dist/static/css/AppComponents-C3r-MqQB.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
iframe[data-v-51fc24e0]{width:100%;height:calc(100vh - 120px)}
|
||||
1
admin-client/dist/static/css/AppIconList-BqwF2KTQ.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.hzy-icon-list[data-v-e385b3df]{text-align:center}.hzy-icon-list .hzy-icon-show[data-v-e385b3df]{width:50px;height:50px;line-height:50px;border-radius:50%;background-color:#52c41a;display:inline-flex;align-items:center;justify-content:center}.hzy-icon-list .icon-list[data-v-e385b3df]{width:auto;overflow:hidden;overflow-y:auto}.hzy-icon-list .icon-list .icon-list-item[data-v-e385b3df]{overflow:hidden;width:220px;height:40px;margin:0 5px 15px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;border:1px solid #ccc}.hzy-icon-list .icon-list .icon-list-item[data-v-e385b3df]:hover,.hzy-icon-list .icon-list .active[data-v-e385b3df]{background-color:#52c41a;color:#fff}.hzy-icon-list ul[data-v-e385b3df]{margin:0;padding:0;list-style:none;display:flex}.hzy-icon-list ul li[data-v-e385b3df]{height:40px;line-height:40px;text-align:center;flex:1}.hzy-icon-list ul li.active[data-v-e385b3df]{border-bottom:2px solid #52c41a}.hzy-icon-list ul li[data-v-e385b3df]:hover{cursor:pointer;background-color:#52c41a;color:#fff}
|
||||
1
admin-client/dist/static/css/Button-DnGqTakZ.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.btns .ant-btn{margin:10px}
|
||||
1
admin-client/dist/static/css/CodeGeneration-CwvfHIhD.css
vendored
Normal file
1
admin-client/dist/static/css/ExternalJump-_nYM02Ko.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
a[data-v-4bc9bfa0]{font-size:25px}
|
||||
1
admin-client/dist/static/css/FindBack-BysDPbwk.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.ant-btn-primary[data-v-2d8f8df2]{border-color:red;background:red}
|
||||
1
admin-client/dist/static/css/Index-B7ttUqKl.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.v3c[data-v-604e748c]{width:auto;border:1px solid #f5f7fa}.v3c-tab[data-v-604e748c]{padding:0;list-style:none;margin:0;background-color:#f5f7fa;display:flex}.v3c-tab-item[data-v-604e748c]{flex:1;text-align:center;cursor:pointer;padding:10px}.v3c-tab-item.v3c-active[data-v-604e748c]{background-color:#5b8ff9;color:#fff}.v3c-lang-btn[data-v-604e748c]{background-color:#61ddaa;color:#fff}.v3c-content[data-v-604e748c]{padding:20px;max-height:var(--a40de8bc);overflow:hidden;overflow-y:auto}.p-20[data-v-604e748c]{padding:20px}.v3c-footer[data-v-604e748c]{background-color:#f5f7fa;padding-top:10px;padding-bottom:10px;display:flex;text-align:center}.mt-20[data-v-604e748c]{margin-top:20px}.v3c input[type=text][data-v-604e748c]{width:80px}.v3c input[type=number][data-v-604e748c]{width:80px;height:28px;border:1px solid #d9d9d9}.v3c select[data-v-604e748c]{width:80px;height:32px;border:1px solid #d9d9d9}.v3c select[multiple][data-v-604e748c]{width:80px;height:100px;border:1px solid #d9d9d9}.btn-ok[data-v-604e748c]{line-height:1.5715;position:relative;display:inline-block;font-weight:400;white-space:nowrap;text-align:center;background-image:none;border:1px solid transparent;box-shadow:0 2px #00000004;cursor:pointer;transition:all .3s cubic-bezier(.645,.045,.355,1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;touch-action:manipulation;height:32px;padding:4px 15px;font-size:14px;border-radius:2px;color:#fff;background:#5b8ff9;border-color:#5b8ff9;text-shadow:0 -1px 0 rgb(0 0 0 / 12%);box-shadow:0 2px #0000000b}.btn-close[data-v-604e748c]{line-height:1.5715;position:relative;display:inline-block;font-weight:400;white-space:nowrap;text-align:center;background-image:none;border:1px solid transparent;box-shadow:0 2px #00000004;cursor:pointer;transition:all .3s cubic-bezier(.645,.045,.355,1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;touch-action:manipulation;height:32px;padding:4px 15px;font-size:14px;border-radius:2px;color:#fff;background:#61ddaa;border-color:#61ddaa;text-shadow:0 -1px 0 rgb(0 0 0 / 12%);box-shadow:0 2px #0000000b}.cron[data-v-604e748c]{background-color:#61ddaa;padding:5px 10px;color:#fff}
|
||||
1
admin-client/dist/static/css/Index-BAWzXFGz.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.ant-card-grid[data-v-aedeeb8a]{cursor:pointer;text-align:center}h1[data-v-aedeeb8a]{font-size:24px;font-weight:500}
|
||||
1
admin-client/dist/static/css/Index-Bcu0ZVOB.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.min-height[data-v-ff4c3585]{min-height:calc(100vh - 300px)}
|
||||
1
admin-client/dist/static/css/Index-DeuhCJZx.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.cell[data-v-9dcfe539]{position:absolute;left:0;top:0;bottom:0;right:0;color:#fff;display:flex;justify-content:center;align-items:center}
|
||||
1
admin-client/dist/static/css/Info-Ce4IaBSC.css
vendored
Normal file
1
admin-client/dist/static/css/LayoutHeader-CQdMZDkf.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.hzy-layout .ant-layout-header{position:relative;z-index:6;width:100%;height:auto!important;line-height:normal!important}.hzy-layout .hzy-layout-header{padding:0;position:relative;display:flex;align-items:center;height:48px!important;transition:background-color .1s;-moz-transition:background-color .1s;-webkit-transition:background-color .1s;-o-transition:background-color .1s}.hzy-layout .hzy-layout-header .hzy-header-btn{padding:0 8px;cursor:pointer;height:100%;display:inline-flex;justify-content:center;align-items:center}.hzy-layout .hzy-layout-header .hzy-header-btn:hover{background:var(--68bf285a)}
|
||||
1
admin-client/dist/static/css/LayoutIframe-agv0wchA.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
iframe[data-v-3649fb62]{width:100%;height:calc(100vh - 90px)}
|
||||
1
admin-client/dist/static/css/LayoutLogo-Bk0059zG.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.hzy-logo{font-size:16px;overflow:hidden;display:flex;justify-content:center;align-items:center;min-height:50px}
|
||||
1
admin-client/dist/static/css/LayoutMenu-Rz05dGoT.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.hzy-menu .ant-menu{border-inline-end:0!important}
|
||||
1
admin-client/dist/static/css/LayoutMenuOneLevel-kNc_LMa1.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.hzy-left-nav[data-v-edd062de]{background-color:#000;z-index:7;box-shadow:8px 0 2px #0000001a;width:var(--44807a38)}.hzy-left-nav ul[data-v-edd062de]{margin:0;padding:0;list-style:none}.hzy-left-nav ul li[data-v-edd062de]{text-align:center;cursor:pointer;color:#fff;padding:4px 0;margin:16px 8px;border-radius:4px}.hzy-left-nav ul .active[data-v-edd062de]{color:var(--35bf5c73)!important;transition:background-color .1s;-moz-transition:background-color .1s;-webkit-transition:background-color .1s;-o-transition:background-color .1s}.hzy-left-nav ul li[data-v-edd062de]:hover{color:var(--35bf5c73)!important}.hzy-one-nav[data-v-edd062de]{margin:0;padding:0;list-style:none;display:inline-flex}.hzy-one-nav li[data-v-edd062de]{text-align:center;cursor:pointer;justify-content:center;align-items:center;display:inline-flex;padding:0 8px}.hzy-one-nav li .menu-item[data-v-edd062de]{display:inline-flex;align-items:center;justify-content:center;height:32px;padding:2px 15px;border-radius:4px;transition:background-color .3s;-moz-transition:background-color .3s;-webkit-transition:background-color .3s;-o-transition:background-color .3s}.hzy-one-nav .active .menu-item[data-v-edd062de],.hzy-one-nav .menu-item[data-v-edd062de]:hover{color:var(--35bf5c73)!important}
|
||||
1
admin-client/dist/static/css/LayoutMenuPc-CXbG9lea.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.hzy-logo[data-v-377b21e8]{font-weight:700;font-size:20px;min-height:90px}
|
||||
1
admin-client/dist/static/css/LayoutMode1-CQ9SiwL-.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.hzy-layout .ant-layout .ant-layout-sider{overflow:auto;left:0;z-index:10}.hzy-layout .ant-layout .ant-layout-content{position:relative}.hzy-layout .ant-layout .hzy-header-content{position:fixed;z-index:9;right:0;top:0;padding:0}
|
||||
1
admin-client/dist/static/css/LayoutMode2-DLpKC0KE.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.tabs .ant-tabs-content-holder .ant-tabs-content{height:100%}.hzy-layout .ant-layout .ant-layout-sider{overflow:auto;left:0;z-index:10}.hzy-layout .ant-layout .ant-layout-content{position:relative}.hzy-layout .ant-layout .hzy-header-content{position:fixed;z-index:9;right:0;top:0;padding:0}.hzy-layout .ant-layout .hzy-ground-glass{position:absolute;left:0;right:0;top:0;background-size:4px 4px;backdrop-filter:saturate(50%) blur(1px);-webkit-backdrop-filter:saturate(50%) blur(1px);box-shadow:0 4px 4px #00152914}
|
||||
1
admin-client/dist/static/css/LayoutSettings-BPt53ALC.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.hzy-settings .hzy-skin-list[data-v-8de701bf]{width:100%;display:flex;flex-wrap:wrap;justify-content:center}.hzy-settings .hzy-skin-list .hzy-skin-item[data-v-8de701bf]{width:40px;height:40px;margin:8px;cursor:pointer;border-radius:8px}
|
||||
1
admin-client/dist/static/css/LayoutTabs-CbjFwcTd.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.hzy-tabs .ant-tabs-nav{margin:0!important}.hzy-tabs .ant-tabs-nav .ant-tabs-tab-active .close{visibility:visible!important}.hzy-tabs .ant-tabs-nav:before{border-bottom:0}.hzy-tabs .ant-tabs-tab .close{visibility:hidden}.hzy-tabs .ant-tabs-tab:hover .close{visibility:visible!important}.hzy-tabs .tab-more{position:absolute;margin-top:13px;left:18px;display:none}
|
||||
1
admin-client/dist/static/css/Login-Cn2BfLYw.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
body[data-v-701a73a3]{margin:0;padding:0;overflow:hidden}.login[data-v-701a73a3]{display:flex;justify-content:center;align-items:center;height:100vh;background:url(../jpg/login-1-DvL7JDPn.jpg) no-repeat;background-size:cover}.login .login-card[data-v-701a73a3]{height:600px;width:1000px;box-shadow:0 16px 48px 16px #000000b8,0 12px 32px #000,0 8px 16px -8px #000;display:flex;border-radius:5px}.login .login-card .flex-left[data-v-701a73a3]{flex:1;width:450px}.login .login-card .flex-left img[data-v-701a73a3]{height:100%}.login .login-card .flex-right[data-v-701a73a3]{flex:1;background-color:#fff;display:flex;justify-content:center;flex-direction:column;border-top-right-radius:5px;border-bottom-right-radius:5px}.login .login-card .title[data-v-701a73a3]{text-align:center;font-size:30px;padding:20px;font-weight:700}.login .login-card .el-input-group__append[data-v-701a73a3]{padding:0!important}.login .login-card .el-input-group__append .login-code[data-v-701a73a3]{height:38px}@media (max-width: 1024px){.flex-left[data-v-701a73a3]{display:none;flex:0!important}.flex-left img[data-v-701a73a3]{height:auto!important;width:80%!important}.flex-right[data-v-701a73a3]{border-radius:5px}}@media (min-width: 600px) and (max-width: 1024px){.login-card[data-v-701a73a3]{width:70%!important}}@media (max-width: 600px){.login-card[data-v-701a73a3]{width:100%!important}}.lang-content[data-v-701a73a3]{position:absolute;right:24px;top:20px}
|
||||
1
admin-client/dist/static/css/More-2XQcN7Wj.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
iframe[data-v-e44ffa85]{width:100%;height:calc(100vh - 120px)}
|
||||
1
admin-client/dist/static/css/Swagger-BxsbR6sw.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
iframe[data-v-86fc71bb]{width:100%;height:calc(100vh - 120px)}
|
||||
1
admin-client/dist/static/css/WangEditor-ClYh1QsV.css
vendored
Normal file
1
admin-client/dist/static/css/WorkOrder-BlseoA5A.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.icon{display:flex;justify-content:center}
|
||||
1
admin-client/dist/static/css/WorkOrderStatistics-BhaZxapL.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.work-order .icon-size{font-size:70px}
|
||||
1
admin-client/dist/static/css/base-CcBAwarK.css
vendored
Normal file
1
admin-client/dist/static/css/el-checkbox-group-B3ldtHxN.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.el-checkbox-group{font-size:0;line-height:0}
|
||||
1
admin-client/dist/static/css/el-checkbox-w98zuhB9.css
vendored
Normal file
1
admin-client/dist/static/css/h-auto-complete-S1EAWi9X.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.certain-category-search-dropdown .ant-select-dropdown-menu-item-group-title[data-v-21c7bbc3]{color:#666;font-weight:700}.certain-category-search-dropdown .ant-select-dropdown-menu-item-group[data-v-21c7bbc3]{border-bottom:1px solid #f6f6f6}.certain-category-search-dropdown .ant-select-dropdown-menu-item[data-v-21c7bbc3]{padding-left:16px}.certain-category-search-dropdown .ant-select-dropdown-menu-item.show-all[data-v-21c7bbc3]{text-align:center;cursor:default}.certain-category-search-dropdown .ant-select-dropdown-menu[data-v-21c7bbc3]{max-height:300px}
|
||||
4
admin-client/dist/static/css/h-ck-editor--lgVxKPe.css
vendored
Normal file
1
admin-client/dist/static/css/h-game-operation-select-DtW0W9dX.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.el-checkbox-button{--el-checkbox-button-checked-bg-color:var(--el-color-primary);--el-checkbox-button-checked-text-color:var(--el-color-white);--el-checkbox-button-checked-border-color:var(--el-color-primary);display:inline-block;position:relative}.el-checkbox-button__inner{-webkit-appearance:none;background:var(--el-button-bg-color,var(--el-fill-color-blank));border:var(--el-border);border-left-color:transparent;border-radius:0;box-sizing:border-box;color:var(--el-button-text-color,var(--el-text-color-regular));cursor:pointer;display:inline-block;font-size:var(--el-font-size-base);font-weight:var(--el-checkbox-font-weight);line-height:1;margin:0;outline:none;padding:8px 15px;position:relative;text-align:center;transition:var(--el-transition-all);-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.el-checkbox-button__inner.is-round{padding:8px 15px}.el-checkbox-button__inner:hover{color:var(--el-color-primary)}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{margin:0;opacity:0;outline:none;position:absolute;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{background-color:var(--el-checkbox-button-checked-bg-color);border-color:var(--el-checkbox-button-checked-border-color);box-shadow:-1px 0 0 0 var(--el-color-primary-light-7);color:var(--el-checkbox-button-checked-text-color)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:var(--el-checkbox-button-checked-border-color)}.el-checkbox-button.is-disabled .el-checkbox-button__inner{background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));background-image:none;border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none;color:var(--el-disabled-text-color);cursor:not-allowed}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:var(--el-button-disabled-border-color,var(--el-border-color-light))}.el-checkbox-button:first-child .el-checkbox-button__inner{border-bottom-left-radius:var(--el-border-radius-base);border-left:var(--el-border);border-top-left-radius:var(--el-border-radius-base);box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:var(--el-checkbox-button-checked-border-color)}.el-checkbox-button:last-child .el-checkbox-button__inner{border-bottom-right-radius:var(--el-border-radius-base);border-top-right-radius:var(--el-border-radius-base)}.el-checkbox-button--large .el-checkbox-button__inner{border-radius:0;font-size:var(--el-font-size-base);padding:12px 19px}.el-checkbox-button--large .el-checkbox-button__inner.is-round{padding:12px 19px}.el-checkbox-button--small .el-checkbox-button__inner{border-radius:0;font-size:12px;padding:5px 11px}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:5px 11px}
|
||||
0
admin-client/dist/static/css/h-game-select-B_SY1GJM.css
vendored
Normal file
1
admin-client/dist/static/css/h-image-btn-BDBME6E3.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.el-image__error,.el-image__inner,.el-image__placeholder,.el-image__wrapper{height:100%;width:100%}.el-image{display:inline-block;overflow:hidden;position:relative}.el-image__inner{opacity:1;vertical-align:top}.el-image__inner.is-loading{opacity:0}.el-image__wrapper{left:0;position:absolute;top:0}.el-image__error,.el-image__placeholder{background:var(--el-fill-color-light)}.el-image__error{align-items:center;color:var(--el-text-color-placeholder);display:flex;font-size:14px;justify-content:center;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{bottom:0;left:0;position:fixed;right:0;top:0}.el-image-viewer__btn{align-items:center;border-radius:50%;box-sizing:border-box;cursor:pointer;display:flex;justify-content:center;opacity:.8;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:1}.el-image-viewer__btn .el-icon{cursor:pointer;font-size:inherit}.el-image-viewer__close{font-size:40px;height:40px;right:40px;top:40px;width:40px}.el-image-viewer__canvas{align-items:center;display:flex;height:100%;justify-content:center;position:static;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.el-image-viewer__actions{background-color:var(--el-text-color-regular);border-color:#fff;border-radius:22px;bottom:30px;height:44px;left:50%;padding:0 23px;transform:translate(-50%);width:282px}.el-image-viewer__actions__inner{align-items:center;color:#fff;cursor:default;display:flex;font-size:23px;height:100%;justify-content:space-around;width:100%}.el-image-viewer__prev{left:40px}.el-image-viewer__next,.el-image-viewer__prev{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;top:50%;transform:translateY(-50%);width:44px}.el-image-viewer__next{right:40px;text-indent:2px}.el-image-viewer__close{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;width:44px}.el-image-viewer__mask{background:#000;height:100%;left:0;opacity:.5;position:absolute;top:0;width:100%}.viewer-fade-enter-active{animation:viewer-fade-in var(--el-transition-duration)}.viewer-fade-leave-active{animation:viewer-fade-out var(--el-transition-duration)}@keyframes viewer-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes viewer-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}
|
||||
1
admin-client/dist/static/css/index-DlxyC_yF.css
vendored
Normal file
BIN
admin-client/dist/static/jpg/hzy-CgWKlC8q.jpg
vendored
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
BIN
admin-client/dist/static/jpg/login-1-DvL7JDPn.jpg
vendored
Normal file
|
After Width: | Height: | Size: 568 KiB |