feat: 快捷启用/禁用用户 (#91)

fix: 前端界面一些缺陷
This commit is contained in:
nsnail 2024-02-22 23:01:19 +08:00 committed by GitHub
parent ad3eab929d
commit 6c2d1676e4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
54 changed files with 469 additions and 308 deletions

12
.gitmodules vendored
View File

@ -1,9 +1,9 @@
[submodule "refs/Furion"]
path = refs/Furion
url = https://github.com/nsnail/Furion.git
path = refs/Furion
url = https://github.com/nsnail/Furion.git
[submodule "refs/ns-ext"]
path = refs/ns-ext
url = https://github.com/nsnail/ns-ext.git
path = refs/ns-ext
url = https://github.com/nsnail/ns-ext.git
[submodule "refs/FreeSql"]
path = refs/FreeSql
url = https://github.com/nsnail/FreeSql.git
path = refs/FreeSql
url = https://github.com/nsnail/FreeSql.git

View File

@ -8,63 +8,63 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "backend", "backend", "{4DAF9366-855F-46BB-AE4C-660C92FA0697}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "meta", "meta", "{5198A03D-0CAC-4828-A807-34A693F73859}"
ProjectSection(SolutionItems) = preProject
.commitlintrc.js = .commitlintrc.js
.editorconfig = .editorconfig
.gitattributes = .gitattributes
.gitignore = .gitignore
.gitmodules = .gitmodules
CHANGELOG.md = CHANGELOG.md
Directory.Build.props = Directory.Build.props
Dockerfile = Dockerfile
dotnet-tools.json = dotnet-tools.json
global.json = global.json
LICENSE = LICENSE
NetAdmin.sln.DotSettings = NetAdmin.sln.DotSettings
nuget.config = nuget.config
package.json = package.json
README.md = README.md
EndProjectSection
ProjectSection(SolutionItems) = preProject
.commitlintrc.js = .commitlintrc.js
.editorconfig = .editorconfig
.gitattributes = .gitattributes
.gitignore = .gitignore
.gitmodules = .gitmodules
CHANGELOG.md = CHANGELOG.md
Directory.Build.props = Directory.Build.props
Dockerfile = Dockerfile
dotnet-tools.json = dotnet-tools.json
global.json = global.json
LICENSE = LICENSE
NetAdmin.sln.DotSettings = NetAdmin.sln.DotSettings
nuget.config = nuget.config
package.json = package.json
README.md = README.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{BB0B25C9-0901-4923-913F-00F9A6B352A5}"
ProjectSection(SolutionItems) = preProject
1.git.pull.request.ps1 = scripts/1.git.pull.request.ps1
2.git.release.ps1 = scripts/2.git.release.ps1
3.git.recreate.branch.ps1 = scripts/3.git.recreate.branch.ps1
clean.ln.csx = scripts/clean.ln.csx
code.clean.csx = scripts/code.clean.csx
code.clean.ps1 = scripts/code.clean.ps1
find.unused.ln.csx = scripts/find.unused.ln.csx
gen.cs.tt = scripts/gen.cs.tt
gen.id.linq = scripts/gen.id.linq
gen.ln.cmd = scripts/gen.ln.cmd
gen.resx.tt = scripts/gen.resx.tt
image.optimize.csx = scripts/image.optimize.csx
install.as.tpl.ps1 = scripts/install.as.tpl.ps1
rename.csx = scripts/rename.csx
resharper.full.ps1 = scripts/resharper.full.ps1
switcher.freesql.json = scripts/switcher.freesql.json
switcher.furion.json = scripts/switcher.furion.json
switcher.nsext.json = scripts/switcher.nsext.json
switcher.ps1 = scripts/switcher.ps1
sync.sln.files.csx = scripts/sync.sln.files.csx
EndProjectSection
ProjectSection(SolutionItems) = preProject
1.git.pull.request.ps1 = scripts/1.git.pull.request.ps1
2.git.release.ps1 = scripts/2.git.release.ps1
3.git.recreate.branch.ps1 = scripts/3.git.recreate.branch.ps1
clean.ln.csx = scripts/clean.ln.csx
code.clean.csx = scripts/code.clean.csx
code.clean.ps1 = scripts/code.clean.ps1
find.unused.ln.csx = scripts/find.unused.ln.csx
gen.cs.tt = scripts/gen.cs.tt
gen.id.linq = scripts/gen.id.linq
gen.ln.cmd = scripts/gen.ln.cmd
gen.resx.tt = scripts/gen.resx.tt
image.optimize.csx = scripts/image.optimize.csx
install.as.tpl.ps1 = scripts/install.as.tpl.ps1
rename.csx = scripts/rename.csx
resharper.full.ps1 = scripts/resharper.full.ps1
switcher.freesql.json = scripts/switcher.freesql.json
switcher.furion.json = scripts/switcher.furion.json
switcher.nsext.json = scripts/switcher.nsext.json
switcher.ps1 = scripts/switcher.ps1
sync.sln.files.csx = scripts/sync.sln.files.csx
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{1129FE25-466B-4F4F-85FC-3752664245E1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{3C6F049E-3EE8-4D66-9AFF-E8A369032487}"
ProjectSection(SolutionItems) = preProject
ci.yml = .github/workflows/ci.yml
EndProjectSection
ProjectSection(SolutionItems) = preProject
ci.yml = .github/workflows/ci.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{8E4C93BA-9493-4892-80C4-5E174C504829}"
ProjectSection(SolutionItems) = preProject
code.quality.props = build/code.quality.props
copy.pkg.xml.comment.files.targets = build/copy.pkg.xml.comment.files.targets
minver.targets = build/minver.targets
prebuild.targets = build/prebuild.targets
stylecop.analyzers.ruleset = build/stylecop.analyzers.ruleset
EndProjectSection
ProjectSection(SolutionItems) = preProject
code.quality.props = build/code.quality.props
copy.pkg.xml.comment.files.targets = build/copy.pkg.xml.comment.files.targets
minver.targets = build/minver.targets
prebuild.targets = build/prebuild.targets
stylecop.analyzers.ruleset = build/stylecop.analyzers.ruleset
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Infrastructure", "src\backend\NetAdmin.Infrastructure\NetAdmin.Infrastructure.csproj", "{1E62C322-EE42-4699-A6F1-791C53EFA62D}"
EndProject
@ -105,92 +105,92 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Tests", "src\backend\NetAdmin.Tests\NetAdmin.Tests.csproj", "{00604162-C444-478B-B773-3AB23C856CA7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1E62C322-EE42-4699-A6F1-791C53EFA62D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1E62C322-EE42-4699-A6F1-791C53EFA62D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1E62C322-EE42-4699-A6F1-791C53EFA62D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1E62C322-EE42-4699-A6F1-791C53EFA62D}.Release|Any CPU.Build.0 = Release|Any CPU
{E38B2EB4-D7A5-4777-9236-3B348919DF23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E38B2EB4-D7A5-4777-9236-3B348919DF23}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E38B2EB4-D7A5-4777-9236-3B348919DF23}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E38B2EB4-D7A5-4777-9236-3B348919DF23}.Release|Any CPU.Build.0 = Release|Any CPU
{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3}.Release|Any CPU.Build.0 = Release|Any CPU
{58509C57-09FA-4E3C-BC07-78E786A2A326}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{58509C57-09FA-4E3C-BC07-78E786A2A326}.Debug|Any CPU.Build.0 = Debug|Any CPU
{58509C57-09FA-4E3C-BC07-78E786A2A326}.Release|Any CPU.ActiveCfg = Release|Any CPU
{58509C57-09FA-4E3C-BC07-78E786A2A326}.Release|Any CPU.Build.0 = Release|Any CPU
{70C54E1B-2083-4196-AB68-34CAF0075D82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{70C54E1B-2083-4196-AB68-34CAF0075D82}.Debug|Any CPU.Build.0 = Debug|Any CPU
{70C54E1B-2083-4196-AB68-34CAF0075D82}.Release|Any CPU.ActiveCfg = Release|Any CPU
{70C54E1B-2083-4196-AB68-34CAF0075D82}.Release|Any CPU.Build.0 = Release|Any CPU
{91839A15-D08F-4848-A301-F793412BC688}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{91839A15-D08F-4848-A301-F793412BC688}.Debug|Any CPU.Build.0 = Debug|Any CPU
{91839A15-D08F-4848-A301-F793412BC688}.Release|Any CPU.ActiveCfg = Release|Any CPU
{91839A15-D08F-4848-A301-F793412BC688}.Release|Any CPU.Build.0 = Release|Any CPU
{91452C22-4B57-4F16-9AF6-42C7BF830504}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{91452C22-4B57-4F16-9AF6-42C7BF830504}.Debug|Any CPU.Build.0 = Debug|Any CPU
{91452C22-4B57-4F16-9AF6-42C7BF830504}.Release|Any CPU.ActiveCfg = Release|Any CPU
{91452C22-4B57-4F16-9AF6-42C7BF830504}.Release|Any CPU.Build.0 = Release|Any CPU
{7CB632D3-3635-4F8D-AFE7-F496D37D422B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7CB632D3-3635-4F8D-AFE7-F496D37D422B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7CB632D3-3635-4F8D-AFE7-F496D37D422B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7CB632D3-3635-4F8D-AFE7-F496D37D422B}.Release|Any CPU.Build.0 = Release|Any CPU
{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C}.Release|Any CPU.Build.0 = Release|Any CPU
{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C}.Release|Any CPU.Build.0 = Release|Any CPU
{34650E82-D257-46DA-BD6B-DE307113347B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{34650E82-D257-46DA-BD6B-DE307113347B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{34650E82-D257-46DA-BD6B-DE307113347B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{34650E82-D257-46DA-BD6B-DE307113347B}.Release|Any CPU.Build.0 = Release|Any CPU
{96668960-310F-4682-B3F9-1E8F1EED8C90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{96668960-310F-4682-B3F9-1E8F1EED8C90}.Debug|Any CPU.Build.0 = Debug|Any CPU
{96668960-310F-4682-B3F9-1E8F1EED8C90}.Release|Any CPU.ActiveCfg = Release|Any CPU
{96668960-310F-4682-B3F9-1E8F1EED8C90}.Release|Any CPU.Build.0 = Release|Any CPU
{C7F27698-DA05-4ACD-B0D7-4791B3972002}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C7F27698-DA05-4ACD-B0D7-4791B3972002}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C7F27698-DA05-4ACD-B0D7-4791B3972002}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C7F27698-DA05-4ACD-B0D7-4791B3972002}.Release|Any CPU.Build.0 = Release|Any CPU
{00604162-C444-478B-B773-3AB23C856CA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{00604162-C444-478B-B773-3AB23C856CA7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{00604162-C444-478B-B773-3AB23C856CA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{00604162-C444-478B-B773-3AB23C856CA7}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{4DAF9366-855F-46BB-AE4C-660C92FA0697} = {C84EB5A0-37AD-4B17-A51E-E36888C4441E}
{12AE5B4B-CB1A-498E-83B8-04E201E31D86} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
{3F23258D-8299-4992-9F51-2EE9B52CF9D2} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
{CBFBF29B-27E8-4DB1-ADD6-4B750897ACD3} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
{D9C3EF66-2757-473D-A26B-54FD08DA203F} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
{70C54E1B-2083-4196-AB68-34CAF0075D82} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
{91452C22-4B57-4F16-9AF6-42C7BF830504} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
{58509C57-09FA-4E3C-BC07-78E786A2A326} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
{91839A15-D08F-4848-A301-F793412BC688} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
{1E62C322-EE42-4699-A6F1-791C53EFA62D} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
{96668960-310F-4682-B3F9-1E8F1EED8C90} = {CBFBF29B-27E8-4DB1-ADD6-4B750897ACD3}
{E38B2EB4-D7A5-4777-9236-3B348919DF23} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
{7CB632D3-3635-4F8D-AFE7-F496D37D422B} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
{89260294-80FC-49F1-8D73-AECD39AFF2B7} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
{C7F27698-DA05-4ACD-B0D7-4791B3972002} = {89260294-80FC-49F1-8D73-AECD39AFF2B7}
{3C6F049E-3EE8-4D66-9AFF-E8A369032487} = {1129FE25-466B-4F4F-85FC-3752664245E1}
{00604162-C444-478B-B773-3AB23C856CA7} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
{34650E82-D257-46DA-BD6B-DE307113347B} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1E62C322-EE42-4699-A6F1-791C53EFA62D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1E62C322-EE42-4699-A6F1-791C53EFA62D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1E62C322-EE42-4699-A6F1-791C53EFA62D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1E62C322-EE42-4699-A6F1-791C53EFA62D}.Release|Any CPU.Build.0 = Release|Any CPU
{E38B2EB4-D7A5-4777-9236-3B348919DF23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E38B2EB4-D7A5-4777-9236-3B348919DF23}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E38B2EB4-D7A5-4777-9236-3B348919DF23}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E38B2EB4-D7A5-4777-9236-3B348919DF23}.Release|Any CPU.Build.0 = Release|Any CPU
{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3}.Release|Any CPU.Build.0 = Release|Any CPU
{58509C57-09FA-4E3C-BC07-78E786A2A326}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{58509C57-09FA-4E3C-BC07-78E786A2A326}.Debug|Any CPU.Build.0 = Debug|Any CPU
{58509C57-09FA-4E3C-BC07-78E786A2A326}.Release|Any CPU.ActiveCfg = Release|Any CPU
{58509C57-09FA-4E3C-BC07-78E786A2A326}.Release|Any CPU.Build.0 = Release|Any CPU
{70C54E1B-2083-4196-AB68-34CAF0075D82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{70C54E1B-2083-4196-AB68-34CAF0075D82}.Debug|Any CPU.Build.0 = Debug|Any CPU
{70C54E1B-2083-4196-AB68-34CAF0075D82}.Release|Any CPU.ActiveCfg = Release|Any CPU
{70C54E1B-2083-4196-AB68-34CAF0075D82}.Release|Any CPU.Build.0 = Release|Any CPU
{91839A15-D08F-4848-A301-F793412BC688}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{91839A15-D08F-4848-A301-F793412BC688}.Debug|Any CPU.Build.0 = Debug|Any CPU
{91839A15-D08F-4848-A301-F793412BC688}.Release|Any CPU.ActiveCfg = Release|Any CPU
{91839A15-D08F-4848-A301-F793412BC688}.Release|Any CPU.Build.0 = Release|Any CPU
{91452C22-4B57-4F16-9AF6-42C7BF830504}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{91452C22-4B57-4F16-9AF6-42C7BF830504}.Debug|Any CPU.Build.0 = Debug|Any CPU
{91452C22-4B57-4F16-9AF6-42C7BF830504}.Release|Any CPU.ActiveCfg = Release|Any CPU
{91452C22-4B57-4F16-9AF6-42C7BF830504}.Release|Any CPU.Build.0 = Release|Any CPU
{7CB632D3-3635-4F8D-AFE7-F496D37D422B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7CB632D3-3635-4F8D-AFE7-F496D37D422B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7CB632D3-3635-4F8D-AFE7-F496D37D422B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7CB632D3-3635-4F8D-AFE7-F496D37D422B}.Release|Any CPU.Build.0 = Release|Any CPU
{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C}.Release|Any CPU.Build.0 = Release|Any CPU
{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C}.Release|Any CPU.Build.0 = Release|Any CPU
{34650E82-D257-46DA-BD6B-DE307113347B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{34650E82-D257-46DA-BD6B-DE307113347B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{34650E82-D257-46DA-BD6B-DE307113347B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{34650E82-D257-46DA-BD6B-DE307113347B}.Release|Any CPU.Build.0 = Release|Any CPU
{96668960-310F-4682-B3F9-1E8F1EED8C90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{96668960-310F-4682-B3F9-1E8F1EED8C90}.Debug|Any CPU.Build.0 = Debug|Any CPU
{96668960-310F-4682-B3F9-1E8F1EED8C90}.Release|Any CPU.ActiveCfg = Release|Any CPU
{96668960-310F-4682-B3F9-1E8F1EED8C90}.Release|Any CPU.Build.0 = Release|Any CPU
{C7F27698-DA05-4ACD-B0D7-4791B3972002}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C7F27698-DA05-4ACD-B0D7-4791B3972002}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C7F27698-DA05-4ACD-B0D7-4791B3972002}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C7F27698-DA05-4ACD-B0D7-4791B3972002}.Release|Any CPU.Build.0 = Release|Any CPU
{00604162-C444-478B-B773-3AB23C856CA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{00604162-C444-478B-B773-3AB23C856CA7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{00604162-C444-478B-B773-3AB23C856CA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{00604162-C444-478B-B773-3AB23C856CA7}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{4DAF9366-855F-46BB-AE4C-660C92FA0697} = {C84EB5A0-37AD-4B17-A51E-E36888C4441E}
{12AE5B4B-CB1A-498E-83B8-04E201E31D86} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
{3F23258D-8299-4992-9F51-2EE9B52CF9D2} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
{CBFBF29B-27E8-4DB1-ADD6-4B750897ACD3} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
{D9C3EF66-2757-473D-A26B-54FD08DA203F} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
{70C54E1B-2083-4196-AB68-34CAF0075D82} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
{91452C22-4B57-4F16-9AF6-42C7BF830504} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
{58509C57-09FA-4E3C-BC07-78E786A2A326} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
{91839A15-D08F-4848-A301-F793412BC688} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
{1E62C322-EE42-4699-A6F1-791C53EFA62D} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
{96668960-310F-4682-B3F9-1E8F1EED8C90} = {CBFBF29B-27E8-4DB1-ADD6-4B750897ACD3}
{E38B2EB4-D7A5-4777-9236-3B348919DF23} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
{7CB632D3-3635-4F8D-AFE7-F496D37D422B} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
{89260294-80FC-49F1-8D73-AECD39AFF2B7} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
{C7F27698-DA05-4ACD-B0D7-4791B3972002} = {89260294-80FC-49F1-8D73-AECD39AFF2B7}
{3C6F049E-3EE8-4D66-9AFF-E8A369032487} = {1129FE25-466B-4F4F-85FC-3752664245E1}
{00604162-C444-478B-B773-3AB23C856CA7} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
{34650E82-D257-46DA-BD6B-DE307113347B} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
EndGlobalSection
EndGlobal

View File

@ -1,5 +1,5 @@
<wpf:ResourceDictionary xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xml:space="preserve">
<s:String x:Key="/Default/CodeEditing/GenerateMemberBody/DocumentationGenerationKind/@EntryValue">Inherit</s:String>
<s:String x:Key="/Default/CodeEditing/GenerateMemberBody/DocumentationGenerationKind/@EntryValue">Inherit</s:String>
<s:Boolean x:Key="/Default/CodeEditing/TypingAssist/SkipClosingBracesOnTabInStringLiterals/@EntryValue">True</s:Boolean>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=AssignmentInConditionalExpression/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UnusedAutoPropertyAccessor_002EGlobal/@EntryIndexedValue">DO_NOT_SHOW</s:String>

View File

@ -63,6 +63,7 @@ XML注释文件不存在
用户头像不能为空
用户档案不能为空
用户编号不存在
用户编号不能为空
目标设备不能为空
短信验证请求不能为空
站内信不存在

View File

@ -23,7 +23,7 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="SonarAnalyzer.CSharp" Version="9.19.0.84025">
<PackageReference Include="SonarAnalyzer.CSharp" Version="9.20.0.85982">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

View File

@ -3,7 +3,7 @@
"devDependencies": {
"cz-git": "^1.8.0",
"commitizen": "^4.3.0",
"prettier": "^3.2.4",
"prettier": "^3.2.5",
"standard-version": "^9.5.0"
},
"config": {

View File

@ -8,12 +8,12 @@ content = Regex.Replace(
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"meta\", \"meta\", \"{5198A03D-0CAC-4828-A807-34A693F73859}\"(?:.|\n)*?EndProject",
$$"""
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "meta", "meta", "{5198A03D-0CAC-4828-A807-34A693F73859}"
{{'\t'}}ProjectSection(SolutionItems) = preProject
ProjectSection(SolutionItems) = preProject
{{string.Join('\n',
Directory.GetFiles(@"../", "*").Where(x => !x.EndsWith(".sln") && !x.EndsWith(".user"))
.Select(x=>$"\t\t{Path.GetFileName(x)} = {Path.GetFileName(x)}")
.Select(x=>$" {Path.GetFileName(x)} = {Path.GetFileName(x)}")
)}}
{{'\t'}}EndProject
EndProject
"""
);
@ -22,12 +22,12 @@ content = Regex.Replace(
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"workflows\", \"workflows\", \"{3C6F049E-3EE8-4D66-9AFF-E8A369032487}\"(?:.|\n)*?EndProject",
$$"""
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{3C6F049E-3EE8-4D66-9AFF-E8A369032487}"
{{'\t'}}ProjectSection(SolutionItems) = preProject
ProjectSection(SolutionItems) = preProject
{{string.Join('\n',
Directory.GetFiles(@"../.github/workflows", "*")
.Select(x=>$"\t\t{Path.GetFileName(x)} = .github/workflows/{Path.GetFileName(x)}")
.Select(x=>$" {Path.GetFileName(x)} = .github/workflows/{Path.GetFileName(x)}")
)}}
{{'\t'}}EndProject
EndProject
"""
);
@ -36,12 +36,12 @@ content = Regex.Replace(
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"scripts\", \"scripts\", \"{BB0B25C9-0901-4923-913F-00F9A6B352A5}\"(?:.|\n)*?EndProject",
$$"""
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{BB0B25C9-0901-4923-913F-00F9A6B352A5}"
{{'\t'}}ProjectSection(SolutionItems) = preProject
ProjectSection(SolutionItems) = preProject
{{string.Join('\n',
Directory.GetFiles(@"../scripts", "*")
.Select(x=>$"\t\t{Path.GetFileName(x)} = scripts/{Path.GetFileName(x)}")
.Select(x=>$" {Path.GetFileName(x)} = scripts/{Path.GetFileName(x)}")
)}}
{{'\t'}}EndProject
EndProject
"""
);
@ -50,12 +50,12 @@ content = Regex.Replace(
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"build\", \"build\", \"{8E4C93BA-9493-4892-80C4-5E174C504829}\"(?:.|\n)*?EndProject",
$$"""
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{8E4C93BA-9493-4892-80C4-5E174C504829}"
{{'\t'}}ProjectSection(SolutionItems) = preProject
ProjectSection(SolutionItems) = preProject
{{string.Join('\n',
Directory.GetFiles(@"../build", "*")
.Select(x=>$"\t\t{Path.GetFileName(x)} = build/{Path.GetFileName(x)}")
.Select(x=>$" {Path.GetFileName(x)} = build/{Path.GetFileName(x)}")
)}}
{{'\t'}}EndProject
EndProject
"""
);

View File

@ -13,7 +13,6 @@ public sealed record CreateUserReq : CreateUpdateUserReq, IRegister
public override string PasswordText { get; init; }
/// <inheritdoc cref="Sys_User.Profile" />
[Required(ErrorMessageResourceType = typeof(Ln), ErrorMessageResourceName = nameof(Ln.用户档案不能为空))]
public new CreateUserProfileReq Profile { get; init; }
/// <inheritdoc />

View File

@ -0,0 +1,19 @@
using NetAdmin.Domain.DbMaps.Dependency.Fields;
using NetAdmin.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.Dto.Sys.User;
/// <summary>
/// 请求:启用/禁用用户
/// </summary>
public sealed record SetUserEnabledReq : Sys_User
{
/// <inheritdoc cref="IFieldEnabled.Enabled" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override bool Enabled { get; init; }
/// <inheritdoc cref="IFieldPrimary{T}.Id" />
[Required(ErrorMessageResourceType = typeof(Ln), ErrorMessageResourceName = nameof(Ln.用户编号不能为空))]
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
}

View File

@ -14,7 +14,6 @@ public sealed record UpdateUserReq : CreateUpdateUserReq
public override long Id { get; init; }
/// <inheritdoc cref="Sys_User.Profile" />
[Required(ErrorMessageResourceType = typeof(Ln), ErrorMessageResourceName = nameof(Ln.用户档案不能为空))]
public new UpdateUserProfileReq Profile { get; init; }
/// <inheritdoc cref="IFieldVersion.Version" />

View File

@ -5,7 +5,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="IGeekFan.AspNetCore.Knife4jUI.NS" Condition="'$(Configuration)' == 'Debug'" Version="0.0.15-ns2"/>
<PackageReference Include="Spectre.Console.Cli.NS" Version="0.45.1-preview.0.124"/>
<PackageReference Include="Spectre.Console.Cli.NS" Version="0.45.1-preview.0.149"/>
<PackageReference Include="prometheus-net.AspNetCore" Condition="'$(Configuration)' != 'Debug'" Version="8.1.0"/>
</ItemGroup>
</Project>

View File

@ -42,9 +42,9 @@ public sealed class RequestLogger(
, ResponseBody = responseBody
, ServerIp = context.GetLocalIpAddressToIPv4()?.IpV4ToInt32()
, ApiId = context.Request.Path.Value?.TrimStart('/')
, RequestHeaders = context.Request.Headers.ToJson()
, RequestHeaders = context.Request.Headers.Json()
, ResponseContentType = context.Response.ContentType
, ResponseHeaders = context.Response.Headers.ToJson()
, ResponseHeaders = context.Response.Headers.Json()
, HttpStatusCode = context.Response.StatusCode
, ErrorCode = errorCode
, Exception = exception?.Error.ToString()

View File

@ -14,14 +14,13 @@ public static class Numbers
public const int CONSOLE_LINE_LEN_LIMIT = 8192; // 控制台输出的最大长度
public const long DEF_SORT_VAL = 100; // 排序默认值
public const long DIC_CATALOG_ID_GEO_AREA = 379794295185413; // 字典目录编号-行政区划字典
public const int HEART_TIMEOUT_SECS = 600; // 心跳超时时间
public const int HTTP_STATUS_BIZ_FAIL = 900; // Http状态码-业务异常
public const int JOB_TIMEOUT_SECS = 600; // 作业超时时间
public const int QUERY_DEF_PAGE_SIZE = 20; // 分页查询默认的页容量
public const int QUERY_LIMIT = 100; // 非分页查询允许返回的最大条数
public const int QUERY_MAX_PAGE_NO = 1000; // 分页查询允许最大的页码
public const int QUERY_MAX_PAGE_SIZE = 100; // 分页查询允许最大的页容量
public const int RED_LOCK_EXPIRY_TIME_SECS = 30; // red lock 锁锁定过期时间,锁区域内的逻辑执行如果超过过期时间,锁将被释放
public const int RED_LOCK_RETRY_TIME_SECS = 1; // red lock 锁等待时间内,多久尝试获取一次
public const int RED_LOCK_WAIT_TIME_SECS = 10; // red lock 锁等待时间,相同的 resource 如果当前的锁被其他线程占用,最多等待时间
public const int RED_LOCK_EXPIRY_TIME_SECS = 30; // red lock 锁锁定过期时间,锁区域内的逻辑执行如果超过过期时间,锁将被释放
public const int RED_LOCK_RETRY_TIME_SECS = 1; // red lock 锁等待时间内,多久尝试获取一次
public const int RED_LOCK_WAIT_TIME_SECS = 10; // red lock 锁等待时间,相同的 resource 如果当前的锁被其他线程占用,最多等待时间
public const int TIMEOUT_SECS_JOB = 600; // 超时时间:作业
}

View File

@ -7,8 +7,8 @@
<Import Project="$(SolutionDir)/build/prebuild.targets"/>
<ItemGroup>
<PackageReference Include="Cronos" Version="0.8.3"/>
<PackageReference Include="FreeSql.DbContext.NS" Version="3.2.810-preview20231229-ns1"/>
<PackageReference Include="FreeSql.Provider.Sqlite.NS" Version="3.2.810-preview20231229-ns1"/>
<PackageReference Include="FreeSql.DbContext.NS" Version="3.2.813-preview20240208-ns1"/>
<PackageReference Include="FreeSql.Provider.Sqlite.NS" Version="3.2.813-preview20240208-ns1"/>
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.1.31"/>
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster.NS" Version="4.9.1.31-ns2"/>
<PackageReference Include="Furion.Pure.NS" Version="4.9.1.31-ns2"/>

View File

@ -59,6 +59,11 @@ public interface IUserModule : ICrudModule<CreateUserReq, QueryUserRsp // 创建
/// </summary>
Task<UserInfoRsp> SetEmailAsync(SetEmailReq req);
/// <summary>
/// 启用/禁用用户
/// </summary>
Task SetEnabledAsync(SetUserEnabledReq req);
/// <summary>
/// 设置手机号
/// </summary>

View File

@ -153,7 +153,7 @@ public sealed class JobService(DefaultRepository<Sys_Job> rpo, IJobRecordService
{
return Rpo.UpdateDiy.Set(a => a.Status == JobStatues.Idle)
.Where(a => a.Status == JobStatues.Running &&
a.LastExecTime < DateTime.Now.AddSeconds(-Numbers.JOB_TIMEOUT_SECS))
a.LastExecTime < DateTime.Now.AddSeconds(-Numbers.TIMEOUT_SECS_JOB))
.ExecuteAffrowsAsync();
}

View File

@ -76,7 +76,8 @@ public sealed class UserService(
await Rpo.SaveManyAsync(entity, nameof(entity.Roles)).ConfigureAwait(false);
// 档案表
_ = await userProfileService.CreateAsync(req.Profile with { Id = dbUser.Id }).ConfigureAwait(false);
_ = await userProfileService.CreateAsync((req.Profile ?? new CreateUserProfileReq()) with { Id = dbUser.Id })
.ConfigureAwait(false);
var ret = await QueryAsync(new QueryReq<QueryUserReq> { Filter = new QueryUserReq { Id = dbUser.Id } })
.ConfigureAwait(false);
return ret.First();
@ -299,6 +300,13 @@ public sealed class UserService(
return ret;
}
/// <inheritdoc />
public Task SetEnabledAsync(SetUserEnabledReq req)
{
req.ThrowIfInvalid();
return Rpo.UpdateDiy.Set(a => a.Enabled == req.Enabled).Where(a => a.Id == req.Id).ExecuteAffrowsAsync();
}
/// <inheritdoc />
public async Task<UserInfoRsp> SetMobileAsync(SetMobileReq req)
{
@ -386,7 +394,9 @@ public sealed class UserService(
.ConfigureAwait(false);
// 档案表
_ = await userProfileService.UpdateAsync(req.Profile).ConfigureAwait(false);
if (req.Profile != null) {
_ = await userProfileService.UpdateAsync(req.Profile).ConfigureAwait(false);
}
// 分表
await Rpo.SaveManyAsync(entity, nameof(entity.Roles)).ConfigureAwait(false);

View File

@ -158,6 +158,12 @@ public sealed class UserCache(IDistributedCache cache, IUserService service, IVe
: await Service.SetEmailAsync(req).ConfigureAwait(false);
}
/// <inheritdoc />
public Task SetEnabledAsync(SetUserEnabledReq req)
{
return Service.SetEnabledAsync(req);
}
/// <inheritdoc />
public Task<UserInfoRsp> SetMobileAsync(SetMobileReq req)
{

View File

@ -174,6 +174,15 @@ public sealed class UserController(IUserCache cache, IConfigCache configCache)
return Cache.SetEmailAsync(req);
}
/// <summary>
/// 启用/禁用用户
/// </summary>
[Transaction]
public Task SetEnabledAsync(SetUserEnabledReq req)
{
return Cache.SetEnabledAsync(req);
}
/// <summary>
/// 设置手机号
/// </summary>

View File

@ -9,7 +9,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="6.0.0">
<PackageReference Include="coverlet.collector" Version="6.0.1">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>

View File

@ -159,6 +159,17 @@ export default {
},
},
/**
* 启用/禁用用户
*/
setEnabled: {
url: `${config.API_URL}/api/sys/user/set.enabled`,
name: `启用/禁用用户`,
post: async function (data = {}, config = {}) {
return await http.post(this.url, data, config)
},
},
/**
* 设置手机号
*/

View File

@ -0,0 +1,15 @@
<template>
<svg
class="icon"
height="128"
p-id="13352"
t="1708507036952"
version="1.1"
viewBox="0 0 1024 1024"
width="128"
xmlns="http://www.w3.org/2000/svg">
<path
d="M512 89.6a230.4 230.4 0 1 1 0 460.8c-179.84 0-313.6 129.152-313.6 313.6a38.4 38.4 0 0 1-76.8 0c0-174.4 99.2-310.848 245.376-365.056A230.4 230.4 0 0 1 512 89.6zM864 832a32 32 0 1 1 0 64h-256a32 32 0 1 1 0-64h256z m0-128a32 32 0 1 1 0 64h-256a32 32 0 1 1 0-64h256z m0-128a32 32 0 1 1 0 64h-256a32 32 0 0 1 0-64h256zM512 166.4a153.6 153.6 0 1 0 0 307.2 153.6 153.6 0 0 0 0-307.2z"
p-id="13353"></path>
</svg>
</template>

View File

@ -0,0 +1,18 @@
<template>
<svg
class="icon"
height="128"
p-id="14077"
t="1708508137183"
version="1.1"
viewBox="0 0 1024 1024"
width="128"
xmlns="http://www.w3.org/2000/svg">
<path
d="M682.666667 42.666667h0.853333c0.981333 0 1.962667 0.085333 2.986667 0.170666L682.666667 42.666667a43.008 43.008 0 0 1 26.325333 9.088l0.341333 0.298666 3.498667 3.114667 213.333333 213.333333c1.237333 1.194667 2.346667 2.517333 3.413334 3.84l-3.413334-3.84a43.008 43.008 0 0 1 12.202667 25.173334l0.128 1.28 0.128 2.346666L938.666667 298.666667v597.333333a85.333333 85.333333 0 0 1-85.333334 85.333333H170.666667a85.333333 85.333333 0 0 1-85.333334-85.333333V128a85.333333 85.333333 0 0 1 85.333334-85.333333h512z m-42.666667 85.333333H170.666667v768h682.666666V341.333333h-170.666666a42.666667 42.666667 0 0 1-42.368-37.674666L640 298.666667V128z m152.96 128L725.333333 188.373333V256h67.626667z"
p-id="14078"></path>
<path
d="M340.48 512h35.285333l92.245334 298.666667H398.933333l-16.469333-58.026667H298.581333L282.325333 810.666667H213.333333l92.032-298.666667h35.114667z m0.554667 94.592h-1.152l-26.154667 92.672h53.674667l-26.368-92.672z m254.890666-94.549333c33.450667 0 60.032 9.002667 79.616 27.093333 19.626667 18.005333 29.44 41.728 29.44 71.125333 0 29.44-9.813333 53.12-29.44 71.082667-19.626667 18.005333-46.165333 26.965333-79.616 26.965333h-42.24V810.666667h-65.493333v-298.581334h107.733333z m0 53.333333h-42.24v89.6h42.24c14.208 0 25.045333-4.138667 32.512-12.416 7.509333-8.277333 11.264-18.901333 11.264-31.914667 0-13.226667-3.712-24.106667-11.136-32.597333-7.466667-8.490667-18.346667-12.714667-32.64-12.714667zM810.666667 810.666667h-65.322667v-298.666667h65.28v298.666667H810.666667zM452.736 203.861333a42.666667 42.666667 0 1 1 0 85.333334H291.541333a42.666667 42.666667 0 1 1 0-85.333334h161.194667zM452.736 341.333333a42.666667 42.666667 0 1 1 0 85.333334H291.541333a42.666667 42.666667 0 1 1 0-85.333334h161.194667z"
p-id="14079"></path>
</svg>
</template>

View File

@ -1,25 +1,8 @@
<template>
<svg
class="icon"
height="128"
p-id="11193"
t="1706508305545"
version="1.1"
viewBox="0 0 1149 1024"
width="128"
xmlns="http://www.w3.org/2000/svg">
<svg class="icon" height="128" p-id="4287" t="1708506824816" version="1.1" viewBox="0 0 1024 1024" width="128" xmlns="http://www.w3.org/2000/svg">
<path
d="M1061.585878 1024H88.369851A88.369851 88.369851 0 0 1 0 935.630149V88.369851A88.369851 88.369851 0 0 1 88.369851 0H1061.585878a88.369851 88.369851 0 0 1 88.369852 88.369851v847.260298A88.369851 88.369851 0 0 1 1061.585878 1024zM88.369851 57.38302A30.986831 30.986831 0 0 0 57.38302 88.369851v847.260298a30.986831 30.986831 0 0 0 30.986831 30.986831H1061.585878a30.986831 30.986831 0 0 0 30.986831-30.986831V88.369851A30.986831 30.986831 0 0 0 1061.585878 57.38302z"
p-id="11194"></path>
<path d="M28.69151 333.682264h1091.711964v57.38302H28.69151zM28.69151 655.027178h1091.711964v57.383021H28.69151z" p-id="11195"></path>
<path
d="M104.437097 168.70608m28.69151 0l82.63155 0q28.69151 0 28.69151 28.69151l0 0q0 28.69151-28.69151 28.691511l-82.63155 0q-28.69151 0-28.69151-28.691511l0 0q0-28.69151 28.69151-28.69151Z"
p-id="11196"></path>
<path
d="M104.437097 494.354721m28.69151 0l82.63155 0q28.69151 0 28.69151 28.69151l0 0q0 28.69151-28.69151 28.691511l-82.63155 0q-28.69151 0-28.69151-28.691511l0 0q0-28.69151 28.69151-28.69151Z"
p-id="11197"></path>
<path
d="M104.437097 815.986551m28.69151 0l82.63155 0q28.69151 0 28.69151 28.69151l0 0q0 28.69151-28.69151 28.69151l-82.63155 0q-28.69151 0-28.69151-28.69151l0 0q0-28.69151 28.69151-28.69151Z"
p-id="11198"></path>
d="M815.43 40H200.06C91.48 40 3.16 128.33 3.16 236.9v396.37c0 108.57 88.32 196.9 196.9 196.9h268.49v76.27H269.77v78.41h475.96v-78.41H546.96v-76.27h268.47c108.58 0 196.9-88.33 196.9-196.9V236.9c0-108.57-88.32-196.9-196.9-196.9z m118.49 593.27c0 65.33-53.14 118.49-118.49 118.49H200.06c-65.34 0-118.49-53.15-118.49-118.49V236.9c0-65.33 53.14-118.49 118.49-118.49h615.37c65.34 0 118.49 53.15 118.49 118.49v396.37z"
p-id="4288"></path>
<path d="M247.69 286.38h520.12v78.41H247.69zM247.69 505.38h355.86v78.41H247.69z" p-id="4289"></path>
</svg>
</template>

View File

@ -0,0 +1,7 @@
<template>
<svg class="icon" height="128" p-id="4242" t="1708507460265" version="1.1" viewBox="0 0 1024 1024" width="128" xmlns="http://www.w3.org/2000/svg">
<path
d="M960.389792 733.430521c-0.255828 42.518619-22.308204 51.984256-22.308204 51.984256s-380.92794 220.114439-405.692094 233.877987c-24.559491 10.540115-40.932485 0-40.932485 0s-398.580074-231.16621-413.111107-241.297c-14.531032-10.181956-14.889191-25.992128-14.889191-25.992128s0.409325-457.727516 0-478.910077c-0.409325-21.182561 26.043294-37.14623 26.043293-37.14623L487.72192 5.753265c24.508326-12.944898 48.402664 0 48.402663 0s351.81471 204.508929 390.802903 226.458975c38.220708 18.16379 33.513472 55.66818 33.513472 55.66818s0.153497 406.050253-0.051166 445.550101z m-159.022705-459.364815c-81.557977-46.918861-273.633663-158.204055-273.633663-158.204055s-18.726612-10.13079-37.96488 0L177.095523 296.015751s-20.773236 12.484408-20.466243 29.062064c0.306994 16.577656 0 374.788067 0 374.788068s0.255828 12.382077 11.665758 20.363911c11.40993 7.930669 324.338779 188.852254 324.33878 188.852254s12.893733 8.237663 32.132001 0c19.44293-10.795943 318.5059-183.07054 318.5059-183.07054s17.345141-7.419013 17.549803-40.676657c0.051166-9.567968 0.102331-46.81653 0.102331-93.581895l-352.121703 213.360579V723.504393c0-33.513472 25.940962-55.66818 25.940962-55.66818l311.445047-187.675444c11.768089-12.279746 14.172873-31.927338 14.684529-39.346352 0-34.076294-0.051166-63.854677-0.051166-82.734785l-352.019372 213.309413V486.044813c0-33.513472 22.257039-48.249167 22.257038-48.249166l270.307899-163.729941z"
p-id="4243"></path>
</svg>
</template>

View File

@ -0,0 +1,11 @@
<template>
<svg class="icon" height="128" p-id="5975" t="1708566275667" version="1.1" viewBox="0 0 1024 1024" width="128" xmlns="http://www.w3.org/2000/svg">
<path d="M512 675.84c-25.6 0-46.08 20.48-46.08 46.08S486.4 768 512 768s46.08-20.48 46.08-46.08-20.48-46.08-46.08-46.08z" p-id="5976"></path>
<path
d="M942.08 839.68c30.72-51.2 30.72-107.52 0-158.72L655.36 179.2c-30.72-51.2-81.92-81.92-138.24-81.92S409.6 128 378.88 179.2L87.04 680.96c-30.72 51.2-30.72 112.64 0 158.72 30.72 51.2 81.92 76.8 138.24 76.8h578.56c56.32 5.12 107.52-25.6 138.24-76.8z m-66.56-35.84c-15.36 25.6-46.08 46.08-76.8 46.08H220.16c-30.72 0-61.44-15.36-76.8-40.96s-15.36-61.44 0-87.04L435.2 220.16c15.36-25.6 46.08-46.08 76.8-46.08s61.44 15.36 76.8 46.08l286.72 501.76c20.48 20.48 20.48 56.32 0 81.92z"
p-id="5977"></path>
<path
d="M501.76 353.28c-20.48 5.12-35.84 25.6-35.84 51.2 0 15.36 0 30.72 5.12 46.08 5.12 56.32 5.12 107.52 10.24 163.84 0 20.48 15.36 30.72 35.84 30.72 20.48 0 35.84-15.36 35.84-35.84v-35.84c0-35.84 5.12-71.68 5.12-107.52 0-25.6 5.12-46.08 5.12-71.68 0-10.24 0-15.36-5.12-25.6-10.24-10.24-35.84-20.48-56.32-15.36z"
p-id="5978"></path>
</svg>
</template>

View File

@ -0,0 +1,15 @@
<template>
<svg
class="icon"
height="128"
p-id="11698"
t="1708508000736"
version="1.1"
viewBox="0 0 1024 1024"
width="128"
xmlns="http://www.w3.org/2000/svg">
<path
d="M878.08 731.274667a32 32 0 0 1-54.88-32.938667A360.789333 360.789333 0 0 0 874.666667 512c0-200.298667-162.368-362.666667-362.666667-362.666667S149.333333 311.701333 149.333333 512s162.368 362.666667 362.666667 362.666667a360.789333 360.789333 0 0 0 186.314667-51.445334 32 32 0 0 1 32.928 54.88A424.778667 424.778667 0 0 1 512 938.666667C276.362667 938.666667 85.333333 747.637333 85.333333 512S276.362667 85.333333 512 85.333333s426.666667 191.029333 426.666667 426.666667c0 78.293333-21.152 153.568-60.586667 219.274667zM650.666667 437.333333c0 65.898667-46.72 120.853333-109.194667 135.082667V608a32 32 0 0 1-64 0v-64a32 32 0 0 1 32-32C552.266667 512 586.666667 478.4 586.666667 437.333333s-34.4-74.666667-77.194667-74.666666c-26.773333 0-51.082667 13.248-65.173333 34.624a73.088 73.088 0 0 0-8.522667 17.717333 32 32 0 0 1-60.885333-19.690667c3.797333-11.754667 9.173333-22.933333 15.978666-33.237333 25.856-39.253333 70.186667-63.413333 118.613334-63.413333C587.274667 298.666667 650.666667 360.576 650.666667 437.333333zM512 736a32 32 0 1 1 0-64 32 32 0 0 1 0 64z"
p-id="11699"></path>
</svg>
</template>

View File

@ -0,0 +1,19 @@
<template>
<svg
class="icon"
height="128"
p-id="10077"
t="1708508973207"
version="1.1"
viewBox="0 0 1024 1024"
width="128"
xmlns="http://www.w3.org/2000/svg">
<path
d="M965.12 435.84L538.88 94.72a42.24 42.24 0 0 0-53.76 0L58.88 435.84a42.88 42.88 0 1 0 53.12 64l37.12-29.44V896a42.88 42.88 0 0 0 42.88 42.88h640a42.88 42.88 0 0 0 42.88-42.88V472.96l37.12 29.44a42.88 42.88 0 1 0 53.12-64z m-176 417.28H234.88v-448L512 182.4l277.12 222.08z"
p-id="10078"></path>
<path
d="M618.88 576H405.12a42.88 42.88 0 0 0-42.24 42.88V896a42.88 42.88 0 0 0 42.24 42.88h213.76a42.88 42.88 0 0 0 42.24-42.88V618.88A42.88 42.88 0 0 0 618.88 576zM576 853.12H448v-192h128zM192 853.12a42.88 42.88 0 0 0 0 85.76v-85.76zM832 938.88a42.88 42.88 0 0 0 0-85.76v85.76z"
p-id="10079"></path>
<path d="M192 938.88h640v-85.76H192v85.76z" p-id="10080"></path>
</svg>
</template>

View File

@ -1,7 +1,7 @@
<template>
<svg class="icon" height="300" p-id="4536" t="1678697051985" version="1.1" viewBox="0 0 1024 1024" width="300" xmlns="http://www.w3.org/2000/svg">
<svg class="icon" height="128" p-id="4260" t="1708507374272" version="1.1" viewBox="0 0 1024 1024" width="128" xmlns="http://www.w3.org/2000/svg">
<path
d="M897.706667 1023.573333H178.346667l421.546666-506.026666c180.48 117.76 297.813333 300.373333 297.813334 506.026666z m0-1021.866666H131.413333v919.466666z"
p-id="4537"></path>
d="M834.012 70c2.988 0 5.672 0.812 7.92 2.192a15.312 15.312 0 0 1 5.612 6.112 15.4 15.4 0 0 1 1.652 8.152 15 15 0 0 1-2.32 6.912l-0.552 0.816-252.82 349.792c29.064 21.48 56.268 45.196 81.2 71 111.72 115.648 175 268.228 179.296 431.284a15.392 15.392 0 0 1-4.32 11.12 15.092 15.092 0 0 1-9.984 4.592l-0.912 0.028H185.2c-4.2 0-8-1.704-10.748-4.46a15.192 15.192 0 0 1-4.424-9.808l-0.028-0.96 0.172-861.54a15.2 15.2 0 0 1 4.452-10.772 15.14 15.14 0 0 1 9.788-4.432l0.96-0.028h648.64z m-278.368 426.336L266.008 897.12H785.68l-0.44-3.82c-14.86-125.96-69.36-242.288-157.116-333.16a600.68 600.68 0 0 0-72.48-63.804zM234.892 371.972l-0.084 457.608 266.848-369.24-3.8-2.232c-77.348-45.12-166.008-74.268-262.96-86.136zM736.864 134.92H234.936v171.696l4.832 0.568c109.424 13.16 211.544 47.704 299.78 100.72l197.32-272.984z"
p-id="4261"></path>
</svg>
</template>

View File

@ -1,24 +1,21 @@
<template>
<svg
class="icon"
height="300"
p-id="11473"
t="1678846651425"
height="128"
p-id="12210"
t="1708506988681"
version="1.1"
viewBox="0 0 1024 1024"
width="300"
width="128"
xmlns="http://www.w3.org/2000/svg">
<path
d="M981.333333 618.666667h-106.666666v-21.333334a298.666667 298.666667 0 0 0-118.186667-244.053333l103.893333-162.986667a64 64 0 1 0-36.053333-23.04l-103.04 162.133334A416.213333 416.213333 0 0 0 512 277.333333a416.213333 416.213333 0 0 0-209.28 52.053334l-103.04-162.133334a64 64 0 1 0-36.053333 23.04l103.893333 162.986667A298.666667 298.666667 0 0 0 149.333333 597.333333v21.333334H42.666667v256h106.666666v85.333333h725.333334v-85.333333h106.666666zM85.333333 832v-170.666667h64v170.666667z m746.666667 85.333333H192V597.333333c0-192 160.64-277.333333 320-277.333333s320 85.333333 320 277.333333v320z m106.666667-85.333333h-64v-170.666667h64z"
p-id="11474"></path>
d="M836.266667 989.866667H187.733333c-51.2 0-93.866667-42.666667-93.866666-93.866667v-768C93.866667 76.8 136.533333 34.133333 187.733333 34.133333h648.533334c51.2 0 93.866667 42.666667 93.866666 93.866667v768c0 51.2-42.666667 93.866667-93.866666 93.866667zM187.733333 85.333333C163.84 85.333333 145.066667 104.106667 145.066667 128v768c0 23.893333 18.773333 42.666667 42.666666 42.666667h648.533334c23.893333 0 42.666667-18.773333 42.666666-42.666667v-768C878.933333 104.106667 860.16 85.333333 836.266667 85.333333H187.733333z"
p-id="12211"></path>
<path
d="M405.333333 661.333333m-42.666666 0a42.666667 42.666667 0 1 0 85.333333 0 42.666667 42.666667 0 1 0-85.333333 0Z"
p-id="11475"></path>
d="M486.4 474.453333c-61.44 0-110.933333-49.493333-110.933333-110.933333s49.493333-110.933333 110.933333-110.933333 110.933333 49.493333 110.933333 110.933333-49.493333 110.933333-110.933333 110.933333z m0-170.666666c-32.426667 0-59.733333 27.306667-59.733333 59.733333s27.306667 59.733333 59.733333 59.733333 59.733333-27.306667 59.733333-59.733333-25.6-59.733333-59.733333-59.733333zM534.186667 771.413333H283.306667c-13.653333 0-25.6-11.946667-25.6-25.6 0-126.293333 102.4-228.693333 228.693333-228.693333 42.666667 0 85.333333 11.946667 122.88 35.84 11.946667 6.826667 15.36 23.893333 8.533333 35.84-6.826667 11.946667-23.893333 15.36-35.84 8.533333-29.013333-18.773333-61.44-27.306667-95.573333-27.306666-88.746667 0-163.84 66.56-175.786667 151.893333h221.866667c13.653333 0 25.6 11.946667 25.6 25.6s-10.24 23.893333-23.893333 23.893333z"
p-id="12212"></path>
<path
d="M618.666667 661.333333m-42.666667 0a42.666667 42.666667 0 1 0 85.333333 0 42.666667 42.666667 0 1 0-85.333333 0Z"
p-id="11476"></path>
<path
d="M661.333333 533.333333H362.666667a128 128 0 0 0 0 256h298.666666a128 128 0 0 0 0-256z m0 213.333334H362.666667a85.333333 85.333333 0 0 1 0-170.666667h298.666666a85.333333 85.333333 0 0 1 0 170.666667z"
p-id="11477"></path>
d="M740.693333 669.013333h-136.533333c-13.653333 0-25.6-11.946667-25.6-25.6s11.946667-25.6 25.6-25.6h136.533333c13.653333 0 25.6 11.946667 25.6 25.6s-11.946667 25.6-25.6 25.6zM740.693333 757.76h-136.533333c-13.653333 0-25.6-11.946667-25.6-25.6s11.946667-25.6 25.6-25.6h136.533333c13.653333 0 25.6 11.946667 25.6 25.6s-11.946667 25.6-25.6 25.6z"
p-id="12213"></path>
</svg>
</template>

View File

@ -1,7 +1,15 @@
<template>
<svg class="icon" height="200" p-id="4426" t="1674979157150" version="1.1" viewBox="0 0 1024 1024" width="200" xmlns="http://www.w3.org/2000/svg">
<svg
class="icon"
height="128"
p-id="17757"
t="1708507211716"
version="1.1"
viewBox="0 0 1024 1024"
width="128"
xmlns="http://www.w3.org/2000/svg">
<path
d="M225.5104 252.72832v-110.5408a30.30016 30.30016 0 0 1 30.21312-30.21312h561.98656a30.30528 30.30528 0 0 1 30.21824 30.21312v110.55104h56.3712V115.65568c0-33.23392-27.20256-60.43136-60.44672-60.43136H229.5808c-33.24416 0-60.43136 27.19744-60.43136 60.43136v137.07776h56.36096v-0.00512z m622.41792 484.21376v120.38144a30.3104 30.3104 0 0 1-30.21824 30.208H255.72352a30.30528 30.30528 0 0 1-30.21312-30.208v-120.38144H169.14944v146.91328c0 33.23392 27.19744 60.43648 60.43136 60.43648h614.272c33.23904 0 60.44672-27.19744 60.44672-60.43648v-146.91328h-56.3712zM300.47232 647.34208H243.1744V431.3344c-20.9408 19.55328-45.60896 34.02752-74.02496 43.43808V422.7584c14.9504-4.88448 31.19104-14.1824 48.73728-27.83744 17.54112-13.66528 29.568-29.60384 36.09088-47.81568h46.4896v300.2368z m319.86688-53.24288v53.25312H419.456c2.19136-20.14208 8.71424-39.20896 19.58912-57.20576 10.86464-18.0736 32.34304-41.92768 64.4352-71.7312 25.84576-24.05888 41.6512-40.38144 47.52896-48.9472 7.87456-11.81696 11.82208-23.51616 11.82208-35.08224 0-12.75904-3.44064-22.59456-10.30144-29.46048-6.8864-6.85056-16.31744-10.2912-28.43648-10.2912-11.95008 0-21.48864 3.59936-28.55936 10.78784-7.07072 7.21408-11.15648 19.17952-12.2368 35.90656L426.1888 435.6352c3.40992-31.53408 14.08-54.18496 32.01024-67.90144 17.9456-13.7472 40.38144-20.60288 67.31264-20.60288 29.50144 0 52.66944 7.936 69.5552 23.8592 16.85504 15.90272 25.28256 35.6864 25.28256 59.3408a103.40352 103.40352 0 0 1-7.25504 38.43072c-4.84352 12.17024-12.4672 24.92928-22.94784 38.25664-6.92736 8.83712-19.43552 21.53984-37.51424 38.16448-18.05824 16.55296-29.51168 27.61728-34.34496 33.01888a98.74432 98.74432 0 0 0-11.72992 15.91808h113.78176v-0.02048z m85.33504-26.09664l55.46496-6.72768c1.77664 14.14144 6.528 24.95488 14.24896 32.4096 7.77728 7.46496 17.152 11.20768 28.16 11.20768 11.83232 0 21.7856-4.50048 29.85984-13.42976 8.10496-8.99072 12.15488-21.0944 12.15488-36.31104 0-14.42304-3.88608-25.83552-11.6224-34.25792-7.75168-8.45824-17.2032-12.68224-28.34432-12.68224-7.35232 0-16.10752 1.41824-26.32192 4.28544l6.3232-46.69952c15.50336 0.40448 27.30496-2.96448 35.47648-10.09664 8.14592-7.13728 12.2368-16.60416 12.2368-28.45184 0-10.04544-2.99008-18.08896-8.93952-24.064-6.02112-5.98016-13.9776-8.96512-23.8848-8.96512-9.78432 0-18.16576 3.38432-25.09824 10.19392-6.90688 6.77888-11.11552 16.7168-12.63104 29.76256l-52.8128-8.96c3.67104-18.06336 9.22624-32.54272 16.62464-43.3664 7.424-10.78272 17.73568-19.28704 31.0016-25.46688 13.2608-6.18496 28.10368-9.27744 44.55424-9.27744 28.14464 0 50.688 8.97536 67.712 26.9312 13.9776 14.6688 20.99712 31.26272 20.99712 49.7408 0 26.24512-14.34624 47.1808-43.02848 62.81216 17.12128 3.67616 30.83264 11.91424 41.09824 24.69888 10.2656 12.77952 15.40096 28.20608 15.40096 46.27456 0 26.26048-9.59488 48.62464-28.75392 67.0976-19.16928 18.49856-43.02336 27.74528-71.58272 27.74528-27.0592 0-49.46944-7.79776-67.3024-23.33184-17.80736-15.57504-28.14464-35.94752-30.99136-61.07136z"
p-id="4427"></path>
d="M179.2 742.4v102.4c0 26.368 21.6576 48.128 49.408 50.8928l6.0416 0.3072h554.7008c28.5696 0 52.1216-19.968 55.1424-45.6192l0.3072-5.5808v-102.4h51.2v102.4c0 54.1184-44.9536 98.4064-101.888 102.144l-7.8336 0.256H237.7216c-57.9584 0-105.472-41.984-109.4656-95.0784L128 844.8v-102.4h51.2z m682.5984-399.36v45.6192l-65.8944 78.336c49.7664 2.7648 78.336 40.0896 78.336 97.2288 0 61.2864-35.0208 106.9056-102.2976 106.9056-67.7376 0-102.7584-45.1584-102.7584-106.4448v-0.9216l56.6784-3.6864v3.6864c0 40.0896 18.8928 58.5216 46.08 58.5216 26.7264 0 45.6192-18.432 45.6192-58.5216s-17.9712-58.5216-47.0016-58.5216a50.3296 50.3296 0 0 0-22.1184 5.0688l-27.648-30.4128 74.1888-88.0128h-115.6608V343.04h182.4768z m-570.2144 0v273.2544h61.7472V665.6H172.2368v-49.3056h62.6688V403.4048l-62.6688 25.8048V375.7568L243.6608 343.04h47.9232z m220.8256-5.5296c60.8256 0 99.9936 42.3936 99.9936 97.6896 0 32.7168-11.52 52.5312-31.7952 76.032l-92.6208 105.5232h124.416V665.6H412.416v-41.0112l123.9552-142.848c14.7456-17.0496 19.3536-29.952 19.3536-46.08 0-32.256-17.9712-49.3056-43.3152-49.3056-25.8048 0-43.3152 17.0496-43.3152 49.3056v11.0592l-56.6784-3.6864V435.2c0-55.296 37.3248-97.6896 99.9936-97.6896z m273.92-260.7104c57.9072 0 105.3696 41.984 109.4144 95.0784l0.256 7.3216v102.4h-51.2v-102.4c0-26.368-21.6576-48.128-49.408-50.8928l-6.0416-0.3072H234.6496c-28.5696 0-52.1216 19.968-55.1424 45.6192L179.2 179.2v102.4h-51.2v-102.4c0-54.1184 44.9536-98.4064 101.888-102.144l7.8336-0.256h548.5568z"
p-id="17758"></path>
</svg>
</template>

View File

@ -1,18 +1,10 @@
<template>
<svg
class="icon"
height="128"
p-id="13280"
t="1706508686630"
version="1.1"
viewBox="0 0 1024 1024"
width="128"
xmlns="http://www.w3.org/2000/svg">
<svg class="icon" height="128" p-id="8256" t="1708508456665" version="1.1" viewBox="0 0 1024 1024" width="128" xmlns="http://www.w3.org/2000/svg">
<path
d="M831.825474 63.940169H191.939717C121.2479 63.940169 63.940169 121.2479 63.940169 191.939717v639.885757C63.940169 902.517291 121.2479 959.825022 191.939717 959.825022h639.885757c70.691817 0 127.999548-57.307731 127.999548-127.999548V191.939717C959.825022 121.2479 902.517291 63.940169 831.825474 63.940169zM895.884854 831.998871A63.835408 63.835408 0 0 1 831.912173 895.884854H192.087827c-17.112123 0-33.270563-6.574639-45.372232-18.67631S127.880338 849.110994 127.880338 831.998871V192.001129A64.236389 64.236389 0 0 1 192.087827 127.880338h639.824346A64.037705 64.037705 0 0 1 895.884854 192.001129v639.997742z"
p-id="13281"></path>
d="M782.766813 449.527818v179.418328s0 36.253451-9.873023 82.307418c-9.873023 42.791156-31.274644 102.053464-79.008354 151.430664-59.21397 60.905797-146.500195 92.180441-258.438767 92.180441-110.282997 0-195.877395-31.274644-256.783192-92.180441-49.3772-49.3772-70.778821-111.926487-80.651844-154.68139-11.528597-47.73371-9.873023-83.950908-9.873023-85.594398V447.884328c146.48811 1.64349 694.628203 1.64349 694.628203 1.64349m0-67.491841H88.13861C50.277923 382.035977 20.646769 411.667131 20.646769 449.527818v172.808116c0 4.942554 0 47.73371 11.516513 102.053464 11.528597 51.032774 39.504177 126.754149 98.766485 187.659946 72.42231 74.0658 174.487859 111.926487 304.528987 111.926487s233.725998-37.836518 306.112054-111.902318c59.21397-60.905797 85.594397-133.340192 97.110911-182.717393 13.172087-52.676264 11.528597-92.180441 11.528597-98.766484V451.195477c0-37.860687-29.631154-69.135331-67.491841-69.135331z"
p-id="8257"></path>
<path
d="M791.998335 351.851551h-255.999097a31.970084 31.970084 0 0 0 0 63.940169h255.999097a31.970084 31.970084 0 0 0 0-63.940169zM791.998335 607.973471h-255.999097a31.970084 31.970084 0 0 0 0 63.940169h255.999097a31.970084 31.970084 0 0 0 0-63.940169zM344.001722 527.997686c-61.855792 0-111.985607 50.144265-111.985607 111.985606s50.144265 111.985607 111.985607 111.985607 111.985607-50.144265 111.985606-111.985607-50.129815-111.985607-111.985606-111.985606z m33.982213 145.982269a48.045438 48.045438 0 1 1 14.088511-33.982213 47.745605 47.745605 0 0 1-14.088511 33.985826zM417.395643 297.394035L311.999125 402.78694 270.6078 361.392003a31.970084 31.970084 0 1 0-45.213286 45.213285l63.997968 64.001581a31.970084 31.970084 0 0 0 45.213286 0l127.999548-127.999549a31.970084 31.970084 0 0 0-45.209673-45.213285z"
p-id="13282"></path>
d="M842.029121 497.261528h-37.860687v67.528095h37.860687c51.02069 0 93.823931-4.942554 93.823931 46.09022v90.464444c0 51.032774-42.803241 93.823931-93.823931 93.823931h-55.975328c-6.573959 21.40162-14.803492 44.446731-26.33209 67.491841h82.307418c88.881377 0 161.303687-72.42231 161.303687-161.315772v-90.500697c0-88.893461-27.97558-113.582062-161.303687-113.582062zM251.097872 342.5318c-13.172087 0-24.700685-6.586044-29.631154-18.126726a32.99064 32.99064 0 0 1 14.815577-44.44673c4.930469-3.28698 23.04511-14.815577 24.6886-27.97558s-9.873023-31.286728-31.274644-49.389284q-59.21397-51.842435-54.319753-108.639508c4.930469-54.380176 54.319754-85.594397 59.213969-88.881377 16.471151-9.885108 36.253451-4.942554 46.090221 11.516513s4.942554 36.253451-11.516513 46.09022c0 0-26.344174 16.459067-27.987664 37.860687-1.64349 19.758131 16.459067 39.504177 31.274643 52.676265q61.739627 54.307669 54.319754 108.639507c-6.586044 51.02069-55.963244 77.340695-60.905797 79.008354-4.894216 0.024169-9.83677 1.667659-14.767239 1.667659zM455.168547 352.404823c-13.172087 0-24.6886-6.573959-29.631154-18.126725a33.002725 33.002725 0 0 1 14.815577-44.446731c4.942554-3.28698 23.04511-14.803492 24.6886-27.97558s-9.873023-31.274644-31.274644-49.389284q-59.21397-51.842435-54.319754-108.627423c4.942554-54.380176 54.319754-85.606482 59.21397-88.893462 16.459067-9.873023 36.253451-4.942554 46.090221 11.528597s4.930469 36.253451-11.528598 46.078136c0 0-26.33209 16.471151-27.975579 37.860688-1.655574 19.758131 16.459067 39.504177 31.274643 52.676264q61.715458 54.380176 54.380177 108.639507c-6.586044 51.032774-55.975328 77.340695-60.905798 79.008354-4.918385 0.024169-9.860939 1.667659-14.827661 1.667659zM632.979639 352.404823c-13.172087 0-24.6886-6.573959-29.631154-18.126725a33.002725 33.002725 0 0 1 14.815577-44.446731c4.942554-3.28698 23.04511-14.803492 24.6886-27.97558s-9.873023-31.274644-31.274644-49.389284q-59.21397-51.842435-54.319754-108.627423c4.942554-54.380176 54.319754-85.606482 59.21397-88.893462 16.459067-9.873023 36.253451-4.942554 46.090221 11.528597s4.930469 36.253451-11.528598 46.078136c0 0-26.33209 16.471151-27.987664 37.860688-1.64349 19.758131 16.471151 39.504177 31.274644 52.676264q61.739627 54.380176 54.319754 108.639507c-6.573959 51.032774-55.963244 77.340695-60.893713 79.008354-4.894216 0.024169-9.83677 1.667659-14.767239 1.667659z"
p-id="8258"></path>
</svg>
</template>

View File

@ -0,0 +1,7 @@
<template>
<svg class="icon" height="128" p-id="7202" t="1708508883048" version="1.1" viewBox="0 0 1024 1024" width="128" xmlns="http://www.w3.org/2000/svg">
<path
d="M672 334.56L512 704 333.28 291.2a32 32 0 0 0-50.88-10.88 32.96 32.96 0 0 0-7.2 37.76l178.08 410.88a64 64 0 0 0 117.44 0L740.8 336a88 88 0 0 1 144 30.72A400 400 0 1 1 455.36 115.84a406.88 406.88 0 0 1 180.16 16 32.8 32.8 0 0 0 37.28-10.24 32 32 0 0 0-16-49.92A464 464 0 1 0 974.88 544a461.12 461.12 0 0 0-39.68-222.24 139.04 139.04 0 0 0-205.76-56.96A165.28 165.28 0 0 0 672 334.56z"
p-id="7203"></path>
</svg>
</template>

View File

@ -55,4 +55,11 @@ export { default as Vue } from './Vue.vue'
export { default as Warning } from './Warning.vue'
export { default as Wechat } from './Wechat.vue'
export { default as Report } from './Report.vue'
export { default as Daily } from './Daily.vue'
export { default as Daily } from './Daily.vue'
export { default as AccountReport } from './AccountReport.vue'
export { default as Element } from './Element.vue'
export { default as ApiDoc } from './ApiDoc.vue'
export { default as Help } from './Help.vue'
export { default as Version } from './Version.vue'
export { default as Home } from './Home.vue'
export { default as Exception } from './Exception.vue'

View File

@ -149,7 +149,7 @@ export default {
this.total = parseData.total
this.loading = false
//
this.$nextTick(() => {
await this.$nextTick(() => {
if (this.multiple) {
this.defaultValue.forEach((row) => {
const setrow = this.tableData.filter((item) => item[this.defaultProps.value] === row[this.defaultProps.value])
@ -178,7 +178,7 @@ export default {
autoCurrentLabel() {
this.$nextTick(() => {
if (this.multiple) {
this.$refs.select.selected.forEach((item) => {
this.$refs.select.states.selected.forEach((item) => {
item.currentLabel = item.value[this.defaultProps.label]
})
} else {

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,4 @@
import { permissionAll } from '@/utils/permission'
import tool from '@/utils/tool'
/**
* 用户权限指令
@ -9,10 +8,11 @@ import tool from '@/utils/tool'
*/
export default {
mounted(el, binding) {
if (permissionAll()) {
if (permissionAll(binding.instance.$GLOBAL.permissions)) {
return
}
let permissions = tool.data.get('PERMISSIONS')
if (!permissions.some((v) => v === binding.value)) el.parentNode.removeChild(el)
if (!binding.instance.$GLOBAL.permissions.some((v) => v === binding.value)) {
el.parentNode.removeChild(el)
}
},
}

View File

@ -1,5 +1,4 @@
import { permissionAll } from '@/utils/permission'
import tool from '@/utils/tool'
/**
* 用户权限指令
@ -9,12 +8,11 @@ import tool from '@/utils/tool'
*/
export default {
mounted(el, binding) {
if (permissionAll()) {
if (permissionAll(binding.instance.$GLOBAL.permissions)) {
return
}
let permissions = tool.data.get('PERMISSIONS')
let flag = false
permissions.map((val) => {
binding.instance.$GLOBAL.permissions.map((val) => {
binding.value.map((v) => {
if (val === v) flag = true
})

View File

@ -1,5 +1,4 @@
import { judementSameArr, permissionAll } from '@/utils/permission'
import tool from '@/utils/tool'
/**
* 用户权限指令
@ -9,11 +8,10 @@ import tool from '@/utils/tool'
*/
export default {
mounted(el, binding) {
if (permissionAll()) {
if (permissionAll(binding.instance.$GLOBAL.permissions)) {
return
}
let permissions = tool.data.get('PERMISSIONS')
const flag = judementSameArr(binding.value, permissions)
const flag = judementSameArr(binding.value, binding.instance.$GLOBAL.permissions)
if (!flag) el.parentNode.removeChild(el)
},
}

View File

@ -6,7 +6,7 @@ export default {
if (Array.isArray(value)) {
let ishas = false
value.forEach((item) => {
if (rolePermission(item)) {
if (rolePermission(item, binding.instance.$GLOBAL.user)) {
ishas = true
}
})
@ -14,7 +14,7 @@ export default {
el.parentNode.removeChild(el)
}
} else {
if (!rolePermission(value)) {
if (!rolePermission(value, binding.instance.$GLOBAL.user)) {
el.parentNode.removeChild(el)
}
}

View File

@ -38,7 +38,6 @@ import scUploadMultiple from '@/components/scUpload/multiple'
import scWaterMark from '@/components/scWaterMark'
import time from '@/directives/time'
import tool from '@/utils/tool'
import { permission, rolePermission } from '@/utils/permission'
import JsonViewer from 'vue3-json-viewer'
import 'vue3-json-viewer/dist/index.css'
import naColTime from '@/components/naColTime/index.vue'
@ -54,8 +53,6 @@ export default {
app.config.globalProperties.$HTTP = http
app.config.globalProperties.$API = api
app.config.globalProperties.$AUTH = permission
app.config.globalProperties.$ROLE = rolePermission
app.config.globalProperties.$GLOBAL = {
enums: null,
menu: null,

View File

@ -3,13 +3,13 @@
<el-main>
<el-empty v-if="jobs.length === 0" :image-size="120">
<template #description>
<h2>没有正在执行的任务</h2>
<h2>没有正在执行的作业</h2>
</template>
<p style="color: #999; line-height: 1.5; margin: 0 3rem">
在处理耗时过久的任务时为了不阻碍正在处理的工作可在任务中心进行异步执行
在处理耗时过久的作业时为了不阻碍正在处理的工作可在作业中心进行异步执行
</p>
</el-empty>
<el-card v-for="job in jobs" :key="job.id" class="user-bar-jobs-item" shadow="hover">
<el-card v-for="job in jobs" :class="`user-bar-jobs-item ${job.lastStatusCode === 'ok' ? '' : 'alert'}`" :key="job.id" shadow="hover">
<div class="user-bar-jobs-item-body">
<div class="jobIcon">
{{ job.lastStatusCode }}
@ -24,11 +24,15 @@
</div>
<div class="bottom">
<div class="status">
<el-tag v-if="job.status === 'running'" type="info">执行中</el-tag>
<el-tag v-if="job.status === 'idle'">空闲</el-tag>
<el-tag v-if="job.status === 'running'" type="warning">执行中</el-tag>
<el-tag v-if="job.status === 'idle'" :type="job.lastStatusCode === 'ok' ? 'primary' : 'danger'">空闲</el-tag>
</div>
<div class="handler">
<el-button v-if="job.status === 'idle'" @click="view(job)" circle icon="el-icon-view" type="primary"></el-button>
<el-button
:type="job.lastStatusCode === 'ok' ? 'primary' : 'danger'"
@click="view(job)"
circle
icon="el-icon-view"></el-button>
</div>
</div>
</div>
@ -63,7 +67,7 @@ export default {
methods: {
async getData() {
this.loading = true
const res = await this.$API.sys_job.query.post({ prop: 'lastExecTime', order: 'descending' })
const res = await this.$API.sys_job.query.post({ prop: 'lastStatusCode', order: 'descending' })
this.jobs = res.data
this.loading = false
},
@ -83,11 +87,14 @@ export default {
.user-bar-jobs-item {
margin-bottom: 0.5rem;
}
.user-bar-jobs-item:hover {
border-color: var(--el-color-primary);
}
.user-bar-jobs-item.alert:hover {
border-color: var(--el-color-danger);
}
.user-bar-jobs-item-body {
display: flex;
}
@ -103,7 +110,6 @@ export default {
color: var(--el-color-primary);
border-radius: 1.5rem;
}
.user-bar-jobs-item-body .jobMain {
flex: 1;
}
@ -123,4 +129,9 @@ export default {
justify-content: space-between;
align-items: center;
}
.user-bar-jobs-item.alert .jobIcon {
background: var(--el-color-danger-light-9);
color: var(--el-color-danger);
}
</style>

View File

@ -59,7 +59,7 @@
<search @success="searchVisible = false"></search>
</el-dialog>
<el-drawer v-model="tasksVisible" :size="450" :title="$t('任务中心')" destroy-on-close>
<el-drawer v-model="tasksVisible" :size="450" :title="$t('作业中心')" destroy-on-close>
<tasks></tasks>
</el-drawer>
</template>

View File

@ -1,12 +1,8 @@
import tool from '@/utils/tool'
/**
* 是否含有不限分类有则表示全部允许通过
*/
export function permissionAll() {
const allPermissions = '*/*/*'
let permissions = tool.data.get('PERMISSIONS')
return permissions.includes(allPermissions)
export function permissionAll(permissions) {
return permissions.includes('*/*/*')
}
/**
@ -32,22 +28,9 @@ export function judementSameArr(news, old) {
return count === len
}
export function permission(data) {
let permissions = tool.data.get('PERMISSIONS')
if (!permissions) {
export function rolePermission(data, user) {
if (!user || !user.roles) {
return false
}
return permissions.includes(data)
}
export function rolePermission(data) {
let userInfo = tool.data.get('USER_INFO')
if (!userInfo) {
return false
}
let role = userInfo.role
if (!role) {
return false
}
return role.includes(data)
return user.roles.some((x) => x.name === data)
}

View File

@ -1,4 +1,5 @@
import Api from '@/api'
import tool from '@/utils/tool'
export default {
async install(app, global) {
@ -46,5 +47,6 @@ export default {
global.enums = preloads[2]?.data
global.numbers = preloads[3]?.data
global.chars = preloads[4]?.data
global.permissions = tool.recursiveFindProperty(preloads[0]?.data, 'type', 'button').map((x) => x.tag)
},
}

View File

@ -225,6 +225,34 @@ tool.sortProperties = function (obj) {
return sortedObject
}
tool.recursiveFindProperty = function (obj, propName, propValue, result = [], visited = new Set()) {
if (visited.has(obj)) {
return result
}
visited.add(obj)
if (Array.isArray(obj)) {
// 遍历数组
for (const item of obj) {
this.recursiveFindProperty(item, propName, propValue, result, visited)
}
} else if (typeof obj === 'object') {
// 遍历对象的属性
for (const key in obj) {
if (key === propName && obj[key] === propValue) {
// 找到匹配的对象,将其添加到结果数组中
result.push(obj)
} else {
// 继续递归遍历子对象或数组
this.recursiveFindProperty(obj[key], propName, propValue, result, visited)
}
}
}
return result
}
//TAB 刷新
tool.refreshTab = function (_this) {
_this.$parent.keepAliveList = []

View File

@ -43,7 +43,7 @@
form-name="stepForm_1"></na-form-phone>
</el-form>
<div v-if="stepActive >= 2">
<el-result :title="$t('注册成功')" icon="success" sub-title="$t('可以使用登录账号以及手机号登录系统')">
<el-result :sub-title="$t('可以使用登录账号以及手机号登录系统')" :title="$t('注册成功')" icon="success">
<template #extra>
<el-button @click="goLogin" size="large" type="primary">前去登录</el-button>
</template>

View File

@ -8,11 +8,11 @@
<na-form-phone
v-model="form.verifySmsCodeReq"
:code-field="['verifySmsCodeReq.code', 'code']"
:code-label="$t('短信验证码')"
:phone-field="['verifySmsCodeReq.destDevice', 'destDevice']"
:phone-label="$t('手机号码')"
:vue="this"
code-label="$t('短信验证码')"
form-name="form"
phone-label="$t('手机号码')"></na-form-phone>
form-name="form"></na-form-phone>
<el-form-item :label="$t('新密码')" prop="passwordText">
<el-input v-model="form.passwordText" :placeholder="$t('请输入新密码')" show-password></el-input>
<sc-password-strength v-model="form.passwordText"></sc-password-strength>

View File

@ -6,17 +6,18 @@
<el-form :disabled="mode === 'view'" :model="form" :rules="rules" label-width="100px" ref="dialogForm">
<el-collapse>
<el-collapse-item :title="$t('用户注册设置')" name="1">
<div style="margin: 10px">
<div style="margin: 1rem">
<el-form-item :label="$t('默认角色')" prop="userRegisterRoleId">
<sc-select
v-model="form.userRegisterRoleId"
:apiObj="$API.sys_role.query"
:config="{ props: { label: 'name', value: 'id' } }"
clearable
filterable />
filterable
style="width: 15rem" />
</el-form-item>
<el-form-item :label="$t('默认部门')" prop="userRegisterDeptId">
<na-dept v-model="form.userRegisterDeptId"></na-dept>
<na-dept v-model="form.userRegisterDeptId" style="width: 15rem"></na-dept>
</el-form-item>
<el-form-item :label="$t('开启人工审核')" prop="userRegisterConfirm">
<el-switch v-model="form.userRegisterConfirm"></el-switch>

View File

@ -14,7 +14,7 @@
:filter-node-method="treeFilterNode"
:props="{
label: (data) => {
return data.meta.title
return data.meta.title + ' - ' + data.sort
},
}"
@node-click="treeClick"

View File

@ -22,7 +22,7 @@
<el-input v-model="form.title" clearable />
</el-form-item>
<el-form-item :label="$t('消息内容')" prop="content">
<sc-editor v-model="form.content" :placeholder="$t('请输入')" height="800"></sc-editor>
<sc-editor v-model="form.content" :placeholder="$t('请输入')" class="w100p" height="800"></sc-editor>
</el-form-item>
<el-form-item :label="$t('送至角色')" prop="roleIds">

View File

@ -98,7 +98,6 @@
prop="displayDashboard"></na-col-indicator>
<el-table-column :label="$t('创建时间')" prop="createdTime" sortable="custom"></el-table-column>
<el-table-column :label="$t('备注')" prop="summary"></el-table-column>
<na-col-operation
:buttons="
naColOperation.buttons.concat({

View File

@ -33,8 +33,8 @@
{ label: '启用', value: true },
{ label: '禁用', value: false },
],
placeholder: '状态',
style: 'width:15rem',
placeholder: '是否启用',
style: 'width:10rem',
},
]"
:vue="this"
@ -67,15 +67,12 @@
<el-table-column :label="$t('邮箱')" prop="email" sortable="custom"></el-table-column>
<na-col-tags :label="$t('所属角色')" @click="(item) => openDialog('sys_role', item.id, 'roleSave')" field="name" prop="roles" />
<na-col-tags :label="$t('所属部门')" @click="(item) => openDialog('sys_dept', item.id, 'deptSave')" field="name" prop="dept" />
<na-col-indicator
:label="$t('状态')"
:options="[
{ text: '启用', type: 'success', value: true },
{ text: '禁用', type: 'danger', value: false, pulse: true },
]"
prop="enabled"></na-col-indicator>
<el-table-column :label="$t('启用')" prop="enabled" sortable="custom" width="100">
<template #default="scope">
<el-switch v-model="scope.row.enabled" @change="changeSwitch($event, scope.row)"></el-switch>
</template>
</el-table-column>
<el-table-column :label="$t('创建时间')" prop="createdTime" sortable="custom"></el-table-column>
<el-table-column :label="$t('备注')" prop="summary" width="50"></el-table-column>
<na-col-operation :vue="this"></na-col-operation>
</sc-table>
</el-main>
@ -128,6 +125,16 @@ export default {
mounted() {},
created() {},
methods: {
//
async changeSwitch(event, row) {
try {
await this.$API.sys_user.setEnabled.post(row)
this.$message.success(`操作成功`)
} catch {
//
}
this.$refs.table.refresh()
},
async openDialog(api, id, dialog) {
this.loading = true
const res = await this.$API[api].query.post({

View File

@ -154,7 +154,7 @@
<el-form-item :label="$t('住宅地址')" prop="profile.homeAddress">
<el-input v-model="form.profile.homeAddress" clearable>
<template v-slot:prepend>
<na-area v-model="form.profile.homeArea"></na-area>
<na-area v-model="form.profile.homeArea" style="width: 15rem"></na-area>
</template>
</el-input>
</el-form-item>
@ -175,7 +175,7 @@
<el-form-item :label="$t('工作地址')" prop="profile.companyAddress">
<el-input v-model="form.profile.companyAddress" clearable>
<template v-slot:prepend>
<na-area v-model="form.profile.companyArea"></na-area>
<na-area v-model="form.profile.companyArea" style="width: 15rem"></na-area>
</template>
</el-input>
</el-form-item>
@ -206,7 +206,7 @@
<el-form-item :label="$t('联系人地址')" prop="profile.emergencyContactAddress">
<el-input v-model="form.profile.emergencyContactAddress" clearable>
<template v-slot:prepend>
<na-area v-model="form.profile.emergencyContactArea"></na-area>
<na-area v-model="form.profile.emergencyContactArea" style="width: 15rem"></na-area>
</template>
</el-input>
</el-form-item>
@ -248,10 +248,10 @@ export default {
//
form: {
profile: {
nationArea: {},
homeArea: {},
companyArea: {},
emergencyContactArea: {},
nationArea: '',
homeArea: '',
companyArea: '',
emergencyContactArea: '',
},
},
//
@ -342,7 +342,7 @@ export default {
this.visible = false
this.$message.success('操作成功')
} catch {
//
this.loading = false
}
},
},