From 9d2a0d8e8398ca94204bb191c99f6ad97de01a8c Mon Sep 17 00:00:00 2001
From: 移动系统liao <liaoxujun@qq.com>
Date: 星期五, 20 六月 2025 13:28:19 +0800
Subject: [PATCH] 增加客户相关表
---
Admin.NET/FZCZTB.NET.SYSService/CustomerSYS/CustomerManager.cs | 12
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Role/Dto/FBS_RoleDto.cs | 86
Web/src/views/Customer/fBS_ExRole/index.vue | 225 ++
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_ExRole/Dto/FBS_ExRoleInput.cs | 278 ++
Web/src/api/Customer/fB_Customer.ts | 122 +
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Role/FBS_RoleService.cs | 209 +
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Menu/Dto/FBS_MenuDto.cs | 141 +
Web/src/api/Customer/fB_CustomerRole.ts | 36
Web/src/views/Customer/fBS_Menu/component/editDialog.vue | 185 +
Admin.NET/FZCZTB.Net.CustomerSYSTem/FZCZTB.Net.CustomerSYSTem.csproj | 15
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_ExRole/FBS_ExRoleService.cs | 223 ++
Admin.NET/FZCZTB.NET.SYSService/FZCZTB.NET.SYSService.csproj | 13
Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_RoleMenu.cs | 6
Admin.NET/Admin.NET.Application/Admin.NET.Application.csproj | 4
Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_CustomerRole.cs | 4
Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/Dto/ADPenaltyInput.cs | 18
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Role/Dto/FBS_RoleOutput.cs | 95
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Customer/Dto/FBS_CustomerInput.cs | 875 ++++++++
Web/src/views/Customer/fBS_Customer/index.vue | 310 ++
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Customer/FBS_CustomerService.cs | 280 ++
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Menu/Dto/FBS_MenuInput.cs | 602 +++++
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_ExRole/Dto/FBS_ExRoleOutput.cs | 95
Web/src/views/Customer/fBS_Menu/index.vue | 311 ++
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Customer/Dto/FBS_CustomerDto.cs | 241 ++
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Menu/FBS_MenuService.cs | 261 ++
Admin.NET/Admin.NET.Web.Core/Handlers/JwtHandler.cs | 1
Admin.NET/FZCTB.NET.API.Application/FZCTB.NET.API.Application.csproj | 15
Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/ADPenaltyService.cs | 4
Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_ExRole.cs | 6
Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_Role.cs | 4
Web/src/api/Customer/fBS_Role.ts | 60
Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_ExRoleMenu.cs | 4
Admin.NET/Admin.NET.Application/Const/ApplicationConst.cs | 1
Web/src/views/Customer/fBS_Customer/component/editDialog.vue | 240 ++
Admin.NET/Admin.NET.sln | 18
Web/src/api/Customer/fBS_Customer.ts | 122 +
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_ExRole/Dto/FBS_ExRoleDto.cs | 86
Web/src/views/Customer/fBS_Role/index.vue | 225 ++
Admin.NET/FZCZTB.Net.CustomerSYSTem/CustomerSYSTemConst.cs | 17
Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_Customer.cs | 4
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Role/Dto/FBS_RoleInput.cs | 266 ++
Web/src/api/Customer/fBS_ExRole.ts | 60
Admin.NET/Admin.NET.Application/Configuration/Swagger.json | 7
Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_Menu.cs | 4
Web/src/views/Customer/fBS_Role/component/editDialog.vue | 121 +
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Menu/Dto/FBS_MenuOutput.cs | 150 +
Admin.NET/Admin.NET.Application/Configuration/CodeGen.json | 2
Admin.NET/Admin.NET.Web.Core/Admin.NET.Web.Core.csproj | 2
Web/src/views/Customer/fBS_ExRole/component/editDialog.vue | 125 +
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Customer/Dto/FBS_CustomerOutput.cs | 250 ++
Web/src/api/Customer/fBS_Menu.ts | 82
51 files changed, 6,500 insertions(+), 23 deletions(-)
diff --git a/Admin.NET/Admin.NET.Application/Admin.NET.Application.csproj b/Admin.NET/Admin.NET.Application/Admin.NET.Application.csproj
index 9220ef8..3e7fb09 100644
--- a/Admin.NET/Admin.NET.Application/Admin.NET.Application.csproj
+++ b/Admin.NET/Admin.NET.Application/Admin.NET.Application.csproj
@@ -31,4 +31,8 @@
<ProjectReference Include="..\Plugins\Admin.NET.Plugin.GoView\Admin.NET.Plugin.GoView.csproj" />
</ItemGroup>
+ <ItemGroup>
+ <Folder Include="Service\" />
+ </ItemGroup>
+
</Project>
diff --git a/Admin.NET/Admin.NET.Application/Configuration/CodeGen.json b/Admin.NET/Admin.NET.Application/Configuration/CodeGen.json
index fd7c18d..917bb0c 100644
--- a/Admin.NET/Admin.NET.Application/Configuration/CodeGen.json
+++ b/Admin.NET/Admin.NET.Application/Configuration/CodeGen.json
@@ -6,6 +6,6 @@
"EntityAssemblyNames": [ "Admin.NET.Core", "Admin.NET.Application", "FZCZTB.NET.MD" ], // 瀹炰綋鎵�鍦ㄧ▼搴忛泦锛堣嚜琛屾坊鍔犳柊寤虹▼搴忛泦鍚嶇О锛�
"BaseEntityNames": [ "EntityBaseId", "EntityBase", "EntityBaseDel", "EntityBaseOrg", "EntityBaseOrgDel", "EntityBaseTenant", "EntityBaseTenantDel", "EntityBaseTenantId", "EntityBaseTenantOrg", "EntityBaseTenantOrgDel" ], // 瀹炰綋鍩虹被鍚嶇О
"FrontRootPath": "Web", // 鍓嶇椤圭洰鏍圭洰褰�
- "BackendApplicationNamespaces": [ "Admin.NET.Application", "FZCZTB.TSCL.Application" ] // 鍚庣鐢熸垚鍒扮殑椤圭洰锛堣嚜琛屾坊鍔犳柊寤哄懡鍚嶇┖闂达級
+ "BackendApplicationNamespaces": [ "Admin.NET.Application", "FZCZTB.TSCL.Application", "FZCZTB.Net.CustomerSYSTem" ] // 鍚庣鐢熸垚鍒扮殑椤圭洰锛堣嚜琛屾坊鍔犳柊寤哄懡鍚嶇┖闂达級
}
}
\ No newline at end of file
diff --git a/Admin.NET/Admin.NET.Application/Configuration/Swagger.json b/Admin.NET/Admin.NET.Application/Configuration/Swagger.json
index cf54d66..9ff0518 100644
--- a/Admin.NET/Admin.NET.Application/Configuration/Swagger.json
+++ b/Admin.NET/Admin.NET.Application/Configuration/Swagger.json
@@ -24,6 +24,13 @@
"Description": "闈炴斂搴滈噰璐氦鏄撳钩鍙�",
"Version": "1.0.0",
"Order": 10000
+ },
+ {
+ "Group": "FZCCustomerGroupName",
+ "Title": "鍓嶇瀹㈡埛鍜岀郴缁熻缃�",
+ "Description": "闈炴斂搴滈噰璐氦鏄撳钩鍙�",
+ "Version": "1.0.0",
+ "Order": 10000
}
],
"DefaultGroupName": "Default", // 榛樿鍒嗙粍鍚�
diff --git a/Admin.NET/Admin.NET.Application/Const/ApplicationConst.cs b/Admin.NET/Admin.NET.Application/Const/ApplicationConst.cs
index 3121eab..2a0539e 100644
--- a/Admin.NET/Admin.NET.Application/Const/ApplicationConst.cs
+++ b/Admin.NET/Admin.NET.Application/Const/ApplicationConst.cs
@@ -15,4 +15,5 @@
/// API鍒嗙粍鍚嶇О
/// </summary>
public const string GroupName = "FZCCGPT";
+
}
\ No newline at end of file
diff --git a/Admin.NET/Admin.NET.Web.Core/Admin.NET.Web.Core.csproj b/Admin.NET/Admin.NET.Web.Core/Admin.NET.Web.Core.csproj
index 4f58699..ab988d2 100644
--- a/Admin.NET/Admin.NET.Web.Core/Admin.NET.Web.Core.csproj
+++ b/Admin.NET/Admin.NET.Web.Core/Admin.NET.Web.Core.csproj
@@ -16,6 +16,8 @@
<ItemGroup>
<ProjectReference Include="..\Admin.NET.Application\Admin.NET.Application.csproj" />
+ <ProjectReference Include="..\FZCTB.NET.API.Application\FZCTB.NET.API.Application.csproj" />
+ <ProjectReference Include="..\FZCZTB.Net.CustomerSYSTem\FZCZTB.Net.CustomerSYSTem.csproj" />
<ProjectReference Include="..\FZCZTB.TSCL.Application\FZCZTB.TSCL.Application.csproj" />
</ItemGroup>
diff --git a/Admin.NET/Admin.NET.Web.Core/Handlers/JwtHandler.cs b/Admin.NET/Admin.NET.Web.Core/Handlers/JwtHandler.cs
index 7899823..1bc5c1e 100644
--- a/Admin.NET/Admin.NET.Web.Core/Handlers/JwtHandler.cs
+++ b/Admin.NET/Admin.NET.Web.Core/Handlers/JwtHandler.cs
@@ -9,6 +9,7 @@
using Furion;
using Furion.Authorization;
using Furion.DataEncryption;
+
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using System;
diff --git a/Admin.NET/Admin.NET.sln b/Admin.NET/Admin.NET.sln
index f5ee21d..ac33046 100644
--- a/Admin.NET/Admin.NET.sln
+++ b/Admin.NET/Admin.NET.sln
@@ -36,6 +36,12 @@
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FZCZTB.NET.MD", "FZCZTB.NET.MD\FZCZTB.NET.MD.csproj", "{6D667B23-0499-4352-BCA6-C9F2E388710B}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FZCZTB.Net.CustomerSYSTem", "FZCZTB.Net.CustomerSYSTem\FZCZTB.Net.CustomerSYSTem.csproj", "{72CBCF69-83C4-44DF-B066-7618D5672B03}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FZCTB.NET.API.Application", "FZCTB.NET.API.Application\FZCTB.NET.API.Application.csproj", "{D72E858B-FFBE-4055-8473-B4AAF6F18F30}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FZCZTB.NET.SYSService", "FZCZTB.NET.SYSService\FZCZTB.NET.SYSService.csproj", "{9E19230C-7A8F-4440-B5D9-27D0038C13F6}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -93,6 +99,18 @@
{6D667B23-0499-4352-BCA6-C9F2E388710B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6D667B23-0499-4352-BCA6-C9F2E388710B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6D667B23-0499-4352-BCA6-C9F2E388710B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {72CBCF69-83C4-44DF-B066-7618D5672B03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {72CBCF69-83C4-44DF-B066-7618D5672B03}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {72CBCF69-83C4-44DF-B066-7618D5672B03}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {72CBCF69-83C4-44DF-B066-7618D5672B03}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D72E858B-FFBE-4055-8473-B4AAF6F18F30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D72E858B-FFBE-4055-8473-B4AAF6F18F30}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D72E858B-FFBE-4055-8473-B4AAF6F18F30}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D72E858B-FFBE-4055-8473-B4AAF6F18F30}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9E19230C-7A8F-4440-B5D9-27D0038C13F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9E19230C-7A8F-4440-B5D9-27D0038C13F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9E19230C-7A8F-4440-B5D9-27D0038C13F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9E19230C-7A8F-4440-B5D9-27D0038C13F6}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Admin.NET/FZCTB.NET.API.Application/FZCTB.NET.API.Application.csproj b/Admin.NET/FZCTB.NET.API.Application/FZCTB.NET.API.Application.csproj
new file mode 100644
index 0000000..8756464
--- /dev/null
+++ b/Admin.NET/FZCTB.NET.API.Application/FZCTB.NET.API.Application.csproj
@@ -0,0 +1,15 @@
+锘�<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <TargetFramework>net8.0</TargetFramework>
+ <ImplicitUsings>enable</ImplicitUsings>
+ <Nullable>enable</Nullable>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <ProjectReference Include="..\Admin.NET.Application\Admin.NET.Application.csproj" />
+ <ProjectReference Include="..\Admin.NET.Core\Admin.NET.Core.csproj" />
+ <ProjectReference Include="..\FZCZTB.NET.MD\FZCZTB.NET.MD.csproj" />
+ </ItemGroup>
+
+</Project>
diff --git a/Admin.NET/FZCZTB.NET.MD/CutomerMd/FB_Customer.cs b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_Customer.cs
similarity index 98%
rename from Admin.NET/FZCZTB.NET.MD/CutomerMd/FB_Customer.cs
rename to Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_Customer.cs
index b09e9db..fbfd501 100644
--- a/Admin.NET/FZCZTB.NET.MD/CutomerMd/FB_Customer.cs
+++ b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_Customer.cs
@@ -18,11 +18,11 @@
/// <summary>
/// 瀹㈡埛琛�
/// </summary>
-[SugarTable("FB_Customer", "瀹㈡埛琛�")]
+[SugarTable("FBS_Customer", "瀹㈡埛琛�")]
[SugarIndex("index_{table}_A", nameof(Account), OrderByType.Asc)]
[SugarIndex("index_{table}_P", nameof(Phone), OrderByType.Asc)]
-public partial class FB_Customer : EntityBaseTenant
+public partial class FBS_Customer : EntityBaseTenant
{
/// <summary>
/// 璐﹀彿
diff --git a/Admin.NET/FZCZTB.NET.MD/CutomerMd/FB_CustomerRole.cs b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_CustomerRole.cs
similarity index 93%
rename from Admin.NET/FZCZTB.NET.MD/CutomerMd/FB_CustomerRole.cs
rename to Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_CustomerRole.cs
index 8b0b35a..260b5c0 100644
--- a/Admin.NET/FZCZTB.NET.MD/CutomerMd/FB_CustomerRole.cs
+++ b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_CustomerRole.cs
@@ -13,9 +13,9 @@
using System.Threading.Tasks;
namespace FZCZTB.NET.MD.CutomerMd;
-[SugarTable("FB_CustomerRole", "瀹㈡埛鑿滃崟琛�")]
+[SugarTable("FBS_CustomerRole", "瀹㈡埛鑿滃崟琛�")]
-public class FB_CustomerRole : EntityBaseId
+public class FBS_CustomerRole : EntityBaseId
{
/// <summary>
/// 鐢ㄦ埛Id
diff --git a/Admin.NET/FZCZTB.NET.MD/CutomerMd/FB_ExRole.cs b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_ExRole.cs
similarity index 95%
rename from Admin.NET/FZCZTB.NET.MD/CutomerMd/FB_ExRole.cs
rename to Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_ExRole.cs
index cf5c52f..61e1be0 100644
--- a/Admin.NET/FZCZTB.NET.MD/CutomerMd/FB_ExRole.cs
+++ b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_ExRole.cs
@@ -18,11 +18,11 @@
/// 鐧诲綍鍗宠閫夋嫨鐨勬牎鑹�
/// </summary>
-[SugarTable("FB_TenantMenu", "瀹㈡埛涓诲垎绫昏鑹�")]
+[SugarTable("FBS_TenantMenu", "瀹㈡埛涓诲垎绫昏鑹�")]
[SugarIndex("index_{table}_N", nameof(Name), OrderByType.Asc)]
[SugarIndex("index_{table}_C", nameof(Code), OrderByType.Asc)]
-[IncreTable]
-public class FB_ExRole: EntityBaseTenantId
+
+public class FBS_ExRole: EntityBaseTenant
{
/// <summary>
/// 鍚嶇О
diff --git a/Admin.NET/FZCZTB.NET.MD/CutomerMd/FB_ExRoleMenu.cs b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_ExRoleMenu.cs
similarity index 92%
rename from Admin.NET/FZCZTB.NET.MD/CutomerMd/FB_ExRoleMenu.cs
rename to Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_ExRoleMenu.cs
index 739a053..dea3147 100644
--- a/Admin.NET/FZCZTB.NET.MD/CutomerMd/FB_ExRoleMenu.cs
+++ b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_ExRoleMenu.cs
@@ -16,9 +16,9 @@
/// <summary>
/// 绯荤粺绉熸埛鑿滃崟琛�
/// </summary>
-[SugarTable("FB_TenantMenu", "绯荤粺绉熸埛鑿滃崟琛�")]
+[SugarTable("FBS_TenantMenu", "绯荤粺绉熸埛鑿滃崟琛�")]
-class FB_ExRoleMenu: EntityBaseId
+class FBS_ExRoleMenu: EntityBaseId
{
/// <summary>
/// 绉熸埛Id
diff --git a/Admin.NET/FZCZTB.NET.MD/CutomerMd/FB_Menu.cs b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_Menu.cs
similarity index 97%
rename from Admin.NET/FZCZTB.NET.MD/CutomerMd/FB_Menu.cs
rename to Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_Menu.cs
index 5a21579..58a7502 100644
--- a/Admin.NET/FZCZTB.NET.MD/CutomerMd/FB_Menu.cs
+++ b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_Menu.cs
@@ -17,11 +17,11 @@
/// <summary>
///
/// </summary>
-[SugarTable("FB_Menu", "瀹㈡埛绯荤粺鑿滃崟琛�")]
+[SugarTable("FBS_Menu", "瀹㈡埛绯荤粺鑿滃崟琛�")]
[SugarIndex("index_{table}_T", nameof(Title), OrderByType.Asc)]
[SugarIndex("index_{table}_T2", nameof(Type), OrderByType.Asc)]
-public class FB_Menu: EntityBaseTenantId
+public class FBS_Menu: EntityBaseTenant
{
/// <summary>
/// 鐖禝d
diff --git a/Admin.NET/FZCZTB.NET.MD/CutomerMd/FB_Role.cs b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_Role.cs
similarity index 95%
rename from Admin.NET/FZCZTB.NET.MD/CutomerMd/FB_Role.cs
rename to Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_Role.cs
index 39eee6a..57e4cc8 100644
--- a/Admin.NET/FZCZTB.NET.MD/CutomerMd/FB_Role.cs
+++ b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_Role.cs
@@ -16,11 +16,11 @@
namespace FZCZTB.NET.MD.CutomerMd;
-[SugarTable("FB_Role", "瀹㈡埛涓�у寲瑙掕壊")]
+[SugarTable("FBS_Role", "瀹㈡埛涓�у寲瑙掕壊")]
[SugarIndex("index_{table}_N", nameof(Name), OrderByType.Asc)]
[SugarIndex("index_{table}_C", nameof(Code), OrderByType.Asc)]
-public class FB_Role : EntityBaseTenant
+public class FBS_Role : EntityBaseTenant
{
/// <summary>
/// 鍚嶇О
diff --git a/Admin.NET/FZCZTB.NET.MD/CutomerMd/FB_RoleMenu.cs b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_RoleMenu.cs
similarity index 92%
rename from Admin.NET/FZCZTB.NET.MD/CutomerMd/FB_RoleMenu.cs
rename to Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_RoleMenu.cs
index feb0c07..ba07127 100644
--- a/Admin.NET/FZCZTB.NET.MD/CutomerMd/FB_RoleMenu.cs
+++ b/Admin.NET/FZCZTB.NET.MD/CutomerMd/FBS_RoleMenu.cs
@@ -13,9 +13,9 @@
using System.Threading.Tasks;
namespace FZCZTB.NET.MD.CutomerMd;
-[IncreTable]
-[SugarTable("FB_Role", "涓�у寲鏍¤壊鑿滃崟")]
-public class FB_RoleMenu: EntityBaseId
+
+[SugarTable("FBS_Role", "涓�у寲鏍¤壊鑿滃崟")]
+public class FBS_RoleMenu: EntityBaseId
{
/// <summary>
diff --git a/Admin.NET/FZCZTB.NET.SYSService/CustomerSYS/CustomerManager.cs b/Admin.NET/FZCZTB.NET.SYSService/CustomerSYS/CustomerManager.cs
new file mode 100644
index 0000000..3994bc7
--- /dev/null
+++ b/Admin.NET/FZCZTB.NET.SYSService/CustomerSYS/CustomerManager.cs
@@ -0,0 +1,12 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FZCZTB.NET.SYSService.CustomerSYS
+{
+ public class CustomerManager
+ {
+ }
+}
diff --git a/Admin.NET/FZCZTB.NET.SYSService/FZCZTB.NET.SYSService.csproj b/Admin.NET/FZCZTB.NET.SYSService/FZCZTB.NET.SYSService.csproj
new file mode 100644
index 0000000..01c693f
--- /dev/null
+++ b/Admin.NET/FZCZTB.NET.SYSService/FZCZTB.NET.SYSService.csproj
@@ -0,0 +1,13 @@
+锘�<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <TargetFramework>net8.0</TargetFramework>
+ <ImplicitUsings>enable</ImplicitUsings>
+ <Nullable>enable</Nullable>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <ProjectReference Include="..\Admin.NET.Core\Admin.NET.Core.csproj" />
+ </ItemGroup>
+
+</Project>
diff --git a/Admin.NET/FZCZTB.Net.CustomerSYSTem/CustomerSYSTemConst.cs b/Admin.NET/FZCZTB.Net.CustomerSYSTem/CustomerSYSTemConst.cs
new file mode 100644
index 0000000..971a6a7
--- /dev/null
+++ b/Admin.NET/FZCZTB.Net.CustomerSYSTem/CustomerSYSTemConst.cs
@@ -0,0 +1,17 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FZCZTB.Net.CustomerSYSTem;
+public class CustomerSYSTemConst
+{
+ public const string GroupName = "FZCCustomerGroupName";
+}
diff --git a/Admin.NET/FZCZTB.Net.CustomerSYSTem/FZCZTB.Net.CustomerSYSTem.csproj b/Admin.NET/FZCZTB.Net.CustomerSYSTem/FZCZTB.Net.CustomerSYSTem.csproj
new file mode 100644
index 0000000..8756464
--- /dev/null
+++ b/Admin.NET/FZCZTB.Net.CustomerSYSTem/FZCZTB.Net.CustomerSYSTem.csproj
@@ -0,0 +1,15 @@
+锘�<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <TargetFramework>net8.0</TargetFramework>
+ <ImplicitUsings>enable</ImplicitUsings>
+ <Nullable>enable</Nullable>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <ProjectReference Include="..\Admin.NET.Application\Admin.NET.Application.csproj" />
+ <ProjectReference Include="..\Admin.NET.Core\Admin.NET.Core.csproj" />
+ <ProjectReference Include="..\FZCZTB.NET.MD\FZCZTB.NET.MD.csproj" />
+ </ItemGroup>
+
+</Project>
diff --git a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Customer/Dto/FBS_CustomerDto.cs b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Customer/Dto/FBS_CustomerDto.cs
new file mode 100644
index 0000000..1fca754
--- /dev/null
+++ b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Customer/Dto/FBS_CustomerDto.cs
@@ -0,0 +1,241 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+using Admin.NET.Core;
+
+namespace FZCZTB.Net.CustomerSYSTem.Service.FBS_Customer.Dto;
+
+/// <summary>
+/// 瀹㈡埛琛ㄨ緭鍑哄弬鏁�
+/// </summary>
+public class FBS_CustomerDto
+{
+ /// <summary>
+ /// 涓婚敭Id
+ /// </summary>
+ public long Id { get; set; }
+
+ /// <summary>
+ /// 璐﹀彿
+ /// </summary>
+ public string Account { get; set; }
+
+ /// <summary>
+ /// 瀵嗙爜
+ /// </summary>
+ public string Password { get; set; }
+
+ /// <summary>
+ /// 鐪熷疄濮撳悕
+ /// </summary>
+ public string RealName { get; set; }
+
+ /// <summary>
+ /// 鏄电О
+ /// </summary>
+ public string? NickName { get; set; }
+
+ /// <summary>
+ /// 澶村儚
+ /// </summary>
+ public string? Avatar { get; set; }
+
+ /// <summary>
+ /// 鎬у埆
+ /// </summary>
+ public GenderEnum Sex { get; set; }
+
+ /// <summary>
+ /// 骞撮緞
+ /// </summary>
+ public int Age { get; set; }
+
+ /// <summary>
+ /// 鍑虹敓鏃ユ湡
+ /// </summary>
+ public DateTime? Birthday { get; set; }
+
+ /// <summary>
+ /// 姘戞棌
+ /// </summary>
+ public string? Nation { get; set; }
+
+ /// <summary>
+ /// 鎵嬫満鍙风爜
+ /// </summary>
+ public string? Phone { get; set; }
+
+ /// <summary>
+ /// 璇佷欢绫诲瀷
+ /// </summary>
+ public CardTypeEnum CardType { get; set; }
+
+ /// <summary>
+ /// 韬唤璇佸彿
+ /// </summary>
+ public string? IdCardNum { get; set; }
+
+ /// <summary>
+ /// 韬唤璇�
+ /// </summary>
+ public string? IdCardPath { get; set; }
+
+ /// <summary>
+ /// 閭
+ /// </summary>
+ public string? Email { get; set; }
+
+ /// <summary>
+ /// 鍦板潃
+ /// </summary>
+ public string? Address { get; set; }
+
+ /// <summary>
+ /// 鏂囧寲绋嬪害
+ /// </summary>
+ public CultureLevelEnum CultureLevel { get; set; }
+
+ /// <summary>
+ /// 鏀挎不闈㈣矊
+ /// </summary>
+ public string? PoliticalOutlook { get; set; }
+
+ /// <summary>
+ /// 姣曚笟闄㈡牎
+ /// </summary>
+ public string? College { get; set; }
+
+ /// <summary>
+ /// 鍔炲叕鐢佃瘽
+ /// </summary>
+ public string? OfficePhone { get; set; }
+
+ /// <summary>
+ /// 绱ф�ヨ仈绯讳汉
+ /// </summary>
+ public string? EmergencyContact { get; set; }
+
+ /// <summary>
+ /// 绱ф�ヨ仈绯讳汉鐢佃瘽
+ /// </summary>
+ public string? EmergencyPhone { get; set; }
+
+ /// <summary>
+ /// 绱ф�ヨ仈绯讳汉鍦板潃
+ /// </summary>
+ public string? EmergencyAddress { get; set; }
+
+ /// <summary>
+ /// 涓汉绠�浠�
+ /// </summary>
+ public string? Introduction { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ public int OrderNo { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ public StatusEnum Status { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ public string? Remark { get; set; }
+
+ /// <summary>
+ /// 鑱岀骇
+ /// </summary>
+ public string? PosLevel { get; set; }
+
+ /// <summary>
+ /// 鑱岀О
+ /// </summary>
+ public string? PosTitle { get; set; }
+
+ /// <summary>
+ /// 鎿呴暱棰嗗煙
+ /// </summary>
+ public string? Expertise { get; set; }
+
+ /// <summary>
+ /// 鍔炲叕鍖哄煙
+ /// </summary>
+ public string? OfficeZone { get; set; }
+
+ /// <summary>
+ /// 鍔炲叕瀹�
+ /// </summary>
+ public string? Office { get; set; }
+
+ /// <summary>
+ /// 鍏ヨ亴鏃ユ湡
+ /// </summary>
+ public DateTime? JoinDate { get; set; }
+
+ /// <summary>
+ /// 鏈�鏂扮櫥褰旾p
+ /// </summary>
+ public string? LastLoginIp { get; set; }
+
+ /// <summary>
+ /// 鏈�鏂扮櫥褰曞湴鐐�
+ /// </summary>
+ public string? LastLoginAddress { get; set; }
+
+ /// <summary>
+ /// 鏈�鏂扮櫥褰曟椂闂�
+ /// </summary>
+ public DateTime? LastLoginTime { get; set; }
+
+ /// <summary>
+ /// 鏈�鏂扮櫥褰曡澶�
+ /// </summary>
+ public string? LastLoginDevice { get; set; }
+
+ /// <summary>
+ /// 鐢靛瓙绛惧悕
+ /// </summary>
+ public string? Signature { get; set; }
+
+ /// <summary>
+ /// 绉熸埛Id
+ /// </summary>
+ public long? TenantId { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鏃堕棿
+ /// </summary>
+ public DateTime? CreateTime { get; set; }
+
+ /// <summary>
+ /// 鏇存柊鏃堕棿
+ /// </summary>
+ public DateTime? UpdateTime { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鑰匢d
+ /// </summary>
+ public long? CreateUserId { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鑰呭鍚�
+ /// </summary>
+ public string? CreateUserName { get; set; }
+
+ /// <summary>
+ /// 淇敼鑰匢d
+ /// </summary>
+ public long? UpdateUserId { get; set; }
+
+ /// <summary>
+ /// 淇敼鑰呭鍚�
+ /// </summary>
+ public string? UpdateUserName { get; set; }
+
+}
diff --git a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Customer/Dto/FBS_CustomerInput.cs b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Customer/Dto/FBS_CustomerInput.cs
new file mode 100644
index 0000000..dff9f10
--- /dev/null
+++ b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Customer/Dto/FBS_CustomerInput.cs
@@ -0,0 +1,875 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+using Admin.NET.Core;
+using System.ComponentModel.DataAnnotations;
+using Magicodes.ExporterAndImporter.Core;
+using Magicodes.ExporterAndImporter.Excel;
+
+namespace FZCZTB.Net.CustomerSYSTem.Service.FBS_Customer.Dto;
+
+/// <summary>
+/// 瀹㈡埛琛ㄥ熀纭�杈撳叆鍙傛暟
+/// </summary>
+public class FBS_CustomerBaseInput
+{
+ /// <summary>
+ /// 涓婚敭Id
+ /// </summary>
+ public virtual long? Id { get; set; }
+
+ /// <summary>
+ /// 璐﹀彿
+ /// </summary>
+ [Required(ErrorMessage = "璐﹀彿涓嶈兘涓虹┖")]
+ public virtual string Account { get; set; }
+
+ /// <summary>
+ /// 瀵嗙爜
+ /// </summary>
+ [Required(ErrorMessage = "瀵嗙爜涓嶈兘涓虹┖")]
+ public virtual string Password { get; set; }
+
+ /// <summary>
+ /// 鐪熷疄濮撳悕
+ /// </summary>
+ [Required(ErrorMessage = "鐪熷疄濮撳悕涓嶈兘涓虹┖")]
+ public virtual string RealName { get; set; }
+
+ /// <summary>
+ /// 鏄电О
+ /// </summary>
+ public virtual string? NickName { get; set; }
+
+ /// <summary>
+ /// 澶村儚
+ /// </summary>
+ public virtual string? Avatar { get; set; }
+
+ /// <summary>
+ /// 鎬у埆
+ /// </summary>
+ [Dict(nameof(GenderEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "鎬у埆涓嶈兘涓虹┖")]
+ public virtual GenderEnum? Sex { get; set; }
+
+ /// <summary>
+ /// 骞撮緞
+ /// </summary>
+ [Required(ErrorMessage = "骞撮緞涓嶈兘涓虹┖")]
+ public virtual int? Age { get; set; }
+
+ /// <summary>
+ /// 鍑虹敓鏃ユ湡
+ /// </summary>
+ public virtual DateTime? Birthday { get; set; }
+
+ /// <summary>
+ /// 姘戞棌
+ /// </summary>
+ public virtual string? Nation { get; set; }
+
+ /// <summary>
+ /// 鎵嬫満鍙风爜
+ /// </summary>
+ public virtual string? Phone { get; set; }
+
+ /// <summary>
+ /// 璇佷欢绫诲瀷
+ /// </summary>
+ [Dict(nameof(CardTypeEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "璇佷欢绫诲瀷涓嶈兘涓虹┖")]
+ public virtual CardTypeEnum? CardType { get; set; }
+
+ /// <summary>
+ /// 韬唤璇佸彿
+ /// </summary>
+ public virtual string? IdCardNum { get; set; }
+
+ /// <summary>
+ /// 韬唤璇�
+ /// </summary>
+ public virtual string? IdCardPath { get; set; }
+
+ /// <summary>
+ /// 閭
+ /// </summary>
+ public virtual string? Email { get; set; }
+
+ /// <summary>
+ /// 鍦板潃
+ /// </summary>
+ public virtual string? Address { get; set; }
+
+ /// <summary>
+ /// 鏂囧寲绋嬪害
+ /// </summary>
+ [Dict(nameof(CultureLevelEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "鏂囧寲绋嬪害涓嶈兘涓虹┖")]
+ public virtual CultureLevelEnum? CultureLevel { get; set; }
+
+ /// <summary>
+ /// 鏀挎不闈㈣矊
+ /// </summary>
+ public virtual string? PoliticalOutlook { get; set; }
+
+ /// <summary>
+ /// 姣曚笟闄㈡牎
+ /// </summary>
+ public virtual string? College { get; set; }
+
+ /// <summary>
+ /// 鍔炲叕鐢佃瘽
+ /// </summary>
+ public virtual string? OfficePhone { get; set; }
+
+ /// <summary>
+ /// 绱ф�ヨ仈绯讳汉
+ /// </summary>
+ public virtual string? EmergencyContact { get; set; }
+
+ /// <summary>
+ /// 绱ф�ヨ仈绯讳汉鐢佃瘽
+ /// </summary>
+ public virtual string? EmergencyPhone { get; set; }
+
+ /// <summary>
+ /// 绱ф�ヨ仈绯讳汉鍦板潃
+ /// </summary>
+ public virtual string? EmergencyAddress { get; set; }
+
+ /// <summary>
+ /// 涓汉绠�浠�
+ /// </summary>
+ public virtual string? Introduction { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ [Required(ErrorMessage = "鎺掑簭涓嶈兘涓虹┖")]
+ public virtual int? OrderNo { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ [Dict(nameof(StatusEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "鐘舵�佷笉鑳戒负绌�")]
+ public virtual StatusEnum? Status { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ public virtual string? Remark { get; set; }
+
+ /// <summary>
+ /// 鑱岀骇
+ /// </summary>
+ public virtual string? PosLevel { get; set; }
+
+ /// <summary>
+ /// 鑱岀О
+ /// </summary>
+ public virtual string? PosTitle { get; set; }
+
+}
+
+/// <summary>
+/// 瀹㈡埛琛ㄥ垎椤垫煡璇㈣緭鍏ュ弬鏁�
+/// </summary>
+public class PageFBS_CustomerInput : BasePageInput
+{
+ /// <summary>
+ /// 璐﹀彿
+ /// </summary>
+ public string Account { get; set; }
+
+ /// <summary>
+ /// 鐪熷疄濮撳悕
+ /// </summary>
+ public string RealName { get; set; }
+
+ /// <summary>
+ /// 鏄电О
+ /// </summary>
+ public string? NickName { get; set; }
+
+ /// <summary>
+ /// 璇佷欢绫诲瀷
+ /// </summary>
+ [Dict(nameof(CardTypeEnum), AllowNullValue = true)]
+ public CardTypeEnum? CardType { get; set; }
+
+ /// <summary>
+ /// 韬唤璇�
+ /// </summary>
+ public string? IdCardPath { get; set; }
+
+ /// <summary>
+ /// 鏂囧寲绋嬪害
+ /// </summary>
+ [Dict(nameof(CultureLevelEnum), AllowNullValue = true)]
+ public CultureLevelEnum? CultureLevel { get; set; }
+
+ /// <summary>
+ /// 姣曚笟闄㈡牎
+ /// </summary>
+ public string? College { get; set; }
+
+ /// <summary>
+ /// 鍔炲叕鐢佃瘽
+ /// </summary>
+ public string? OfficePhone { get; set; }
+
+ /// <summary>
+ /// 绱ф�ヨ仈绯讳汉
+ /// </summary>
+ public string? EmergencyContact { get; set; }
+
+ /// <summary>
+ /// 绱ф�ヨ仈绯讳汉鐢佃瘽
+ /// </summary>
+ public string? EmergencyPhone { get; set; }
+
+ /// <summary>
+ /// 绱ф�ヨ仈绯讳汉鍦板潃
+ /// </summary>
+ public string? EmergencyAddress { get; set; }
+
+ /// <summary>
+ /// 涓汉绠�浠�
+ /// </summary>
+ public string? Introduction { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ public int? OrderNo { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ [Dict(nameof(StatusEnum), AllowNullValue = true)]
+ public StatusEnum? Status { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ public string? Remark { get; set; }
+
+ /// <summary>
+ /// 鑱岀骇
+ /// </summary>
+ public string? PosLevel { get; set; }
+
+ /// <summary>
+ /// 鑱岀О
+ /// </summary>
+ public string? PosTitle { get; set; }
+
+ /// <summary>
+ /// 閫変腑涓婚敭鍒楄〃
+ /// </summary>
+ public List<long> SelectKeyList { get; set; }
+}
+
+/// <summary>
+/// 瀹㈡埛琛ㄥ鍔犺緭鍏ュ弬鏁�
+/// </summary>
+public class AddFBS_CustomerInput
+{
+ /// <summary>
+ /// 璐﹀彿
+ /// </summary>
+ [Required(ErrorMessage = "璐﹀彿涓嶈兘涓虹┖")]
+ [MaxLength(32, ErrorMessage = "璐﹀彿瀛楃闀垮害涓嶈兘瓒呰繃32")]
+ public string Account { get; set; }
+
+ /// <summary>
+ /// 瀵嗙爜
+ /// </summary>
+ [Required(ErrorMessage = "瀵嗙爜涓嶈兘涓虹┖")]
+ [MaxLength(512, ErrorMessage = "瀵嗙爜瀛楃闀垮害涓嶈兘瓒呰繃512")]
+ public string Password { get; set; }
+
+ /// <summary>
+ /// 鐪熷疄濮撳悕
+ /// </summary>
+ [Required(ErrorMessage = "鐪熷疄濮撳悕涓嶈兘涓虹┖")]
+ [MaxLength(32, ErrorMessage = "鐪熷疄濮撳悕瀛楃闀垮害涓嶈兘瓒呰繃32")]
+ public string RealName { get; set; }
+
+ /// <summary>
+ /// 鏄电О
+ /// </summary>
+ [MaxLength(32, ErrorMessage = "鏄电О瀛楃闀垮害涓嶈兘瓒呰繃32")]
+ public string? NickName { get; set; }
+
+ /// <summary>
+ /// 澶村儚
+ /// </summary>
+ [MaxLength(512, ErrorMessage = "澶村儚瀛楃闀垮害涓嶈兘瓒呰繃512")]
+ public string? Avatar { get; set; }
+
+ /// <summary>
+ /// 鎬у埆
+ /// </summary>
+ [Dict(nameof(GenderEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "鎬у埆涓嶈兘涓虹┖")]
+ public GenderEnum? Sex { get; set; }
+
+ /// <summary>
+ /// 骞撮緞
+ /// </summary>
+ [Required(ErrorMessage = "骞撮緞涓嶈兘涓虹┖")]
+ public int? Age { get; set; }
+
+ /// <summary>
+ /// 鍑虹敓鏃ユ湡
+ /// </summary>
+ public DateTime? Birthday { get; set; }
+
+ /// <summary>
+ /// 姘戞棌
+ /// </summary>
+ [MaxLength(32, ErrorMessage = "姘戞棌瀛楃闀垮害涓嶈兘瓒呰繃32")]
+ public string? Nation { get; set; }
+
+ /// <summary>
+ /// 鎵嬫満鍙风爜
+ /// </summary>
+ [MaxLength(16, ErrorMessage = "鎵嬫満鍙风爜瀛楃闀垮害涓嶈兘瓒呰繃16")]
+ public string? Phone { get; set; }
+
+ /// <summary>
+ /// 璇佷欢绫诲瀷
+ /// </summary>
+ [Dict(nameof(CardTypeEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "璇佷欢绫诲瀷涓嶈兘涓虹┖")]
+ public CardTypeEnum? CardType { get; set; }
+
+ /// <summary>
+ /// 韬唤璇佸彿
+ /// </summary>
+ [MaxLength(32, ErrorMessage = "韬唤璇佸彿瀛楃闀垮害涓嶈兘瓒呰繃32")]
+ public string? IdCardNum { get; set; }
+
+ /// <summary>
+ /// 韬唤璇�
+ /// </summary>
+ [MaxLength(512, ErrorMessage = "韬唤璇佸瓧绗﹂暱搴︿笉鑳借秴杩�512")]
+ public string? IdCardPath { get; set; }
+
+ /// <summary>
+ /// 閭
+ /// </summary>
+ [MaxLength(64, ErrorMessage = "閭瀛楃闀垮害涓嶈兘瓒呰繃64")]
+ public string? Email { get; set; }
+
+ /// <summary>
+ /// 鍦板潃
+ /// </summary>
+ [MaxLength(256, ErrorMessage = "鍦板潃瀛楃闀垮害涓嶈兘瓒呰繃256")]
+ public string? Address { get; set; }
+
+ /// <summary>
+ /// 鏂囧寲绋嬪害
+ /// </summary>
+ [Dict(nameof(CultureLevelEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "鏂囧寲绋嬪害涓嶈兘涓虹┖")]
+ public CultureLevelEnum? CultureLevel { get; set; }
+
+ /// <summary>
+ /// 鏀挎不闈㈣矊
+ /// </summary>
+ [MaxLength(16, ErrorMessage = "鏀挎不闈㈣矊瀛楃闀垮害涓嶈兘瓒呰繃16")]
+ public string? PoliticalOutlook { get; set; }
+
+ /// <summary>
+ /// 姣曚笟闄㈡牎
+ /// </summary>
+ [MaxLength(128, ErrorMessage = "姣曚笟闄㈡牎瀛楃闀垮害涓嶈兘瓒呰繃128")]
+ public string? College { get; set; }
+
+ /// <summary>
+ /// 鍔炲叕鐢佃瘽
+ /// </summary>
+ [MaxLength(16, ErrorMessage = "鍔炲叕鐢佃瘽瀛楃闀垮害涓嶈兘瓒呰繃16")]
+ public string? OfficePhone { get; set; }
+
+ /// <summary>
+ /// 绱ф�ヨ仈绯讳汉
+ /// </summary>
+ [MaxLength(32, ErrorMessage = "绱ф�ヨ仈绯讳汉瀛楃闀垮害涓嶈兘瓒呰繃32")]
+ public string? EmergencyContact { get; set; }
+
+ /// <summary>
+ /// 绱ф�ヨ仈绯讳汉鐢佃瘽
+ /// </summary>
+ [MaxLength(16, ErrorMessage = "绱ф�ヨ仈绯讳汉鐢佃瘽瀛楃闀垮害涓嶈兘瓒呰繃16")]
+ public string? EmergencyPhone { get; set; }
+
+ /// <summary>
+ /// 绱ф�ヨ仈绯讳汉鍦板潃
+ /// </summary>
+ [MaxLength(256, ErrorMessage = "绱ф�ヨ仈绯讳汉鍦板潃瀛楃闀垮害涓嶈兘瓒呰繃256")]
+ public string? EmergencyAddress { get; set; }
+
+ /// <summary>
+ /// 涓汉绠�浠�
+ /// </summary>
+ [MaxLength(512, ErrorMessage = "涓汉绠�浠嬪瓧绗﹂暱搴︿笉鑳借秴杩�512")]
+ public string? Introduction { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ [Required(ErrorMessage = "鎺掑簭涓嶈兘涓虹┖")]
+ public int? OrderNo { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ [Dict(nameof(StatusEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "鐘舵�佷笉鑳戒负绌�")]
+ public StatusEnum? Status { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ [MaxLength(256, ErrorMessage = "澶囨敞瀛楃闀垮害涓嶈兘瓒呰繃256")]
+ public string? Remark { get; set; }
+
+ /// <summary>
+ /// 鑱岀骇
+ /// </summary>
+ [MaxLength(32, ErrorMessage = "鑱岀骇瀛楃闀垮害涓嶈兘瓒呰繃32")]
+ public string? PosLevel { get; set; }
+
+ /// <summary>
+ /// 鑱岀О
+ /// </summary>
+ [MaxLength(32, ErrorMessage = "鑱岀О瀛楃闀垮害涓嶈兘瓒呰繃32")]
+ public string? PosTitle { get; set; }
+
+}
+
+/// <summary>
+/// 瀹㈡埛琛ㄥ垹闄よ緭鍏ュ弬鏁�
+/// </summary>
+public class DeleteFBS_CustomerInput
+{
+ /// <summary>
+ /// 涓婚敭Id
+ /// </summary>
+ [Required(ErrorMessage = "涓婚敭Id涓嶈兘涓虹┖")]
+ public long? Id { get; set; }
+
+}
+
+/// <summary>
+/// 瀹㈡埛琛ㄦ洿鏂拌緭鍏ュ弬鏁�
+/// </summary>
+public class UpdateFBS_CustomerInput
+{
+ /// <summary>
+ /// 涓婚敭Id
+ /// </summary>
+ [Required(ErrorMessage = "涓婚敭Id涓嶈兘涓虹┖")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// 璐﹀彿
+ /// </summary>
+ [Required(ErrorMessage = "璐﹀彿涓嶈兘涓虹┖")]
+ [MaxLength(32, ErrorMessage = "璐﹀彿瀛楃闀垮害涓嶈兘瓒呰繃32")]
+ public string Account { get; set; }
+
+ /// <summary>
+ /// 瀵嗙爜
+ /// </summary>
+ [Required(ErrorMessage = "瀵嗙爜涓嶈兘涓虹┖")]
+ [MaxLength(512, ErrorMessage = "瀵嗙爜瀛楃闀垮害涓嶈兘瓒呰繃512")]
+ public string Password { get; set; }
+
+ /// <summary>
+ /// 鐪熷疄濮撳悕
+ /// </summary>
+ [Required(ErrorMessage = "鐪熷疄濮撳悕涓嶈兘涓虹┖")]
+ [MaxLength(32, ErrorMessage = "鐪熷疄濮撳悕瀛楃闀垮害涓嶈兘瓒呰繃32")]
+ public string RealName { get; set; }
+
+ /// <summary>
+ /// 鏄电О
+ /// </summary>
+ [MaxLength(32, ErrorMessage = "鏄电О瀛楃闀垮害涓嶈兘瓒呰繃32")]
+ public string? NickName { get; set; }
+
+ /// <summary>
+ /// 澶村儚
+ /// </summary>
+ [MaxLength(512, ErrorMessage = "澶村儚瀛楃闀垮害涓嶈兘瓒呰繃512")]
+ public string? Avatar { get; set; }
+
+ /// <summary>
+ /// 鎬у埆
+ /// </summary>
+ [Dict(nameof(GenderEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "鎬у埆涓嶈兘涓虹┖")]
+ public GenderEnum? Sex { get; set; }
+
+ /// <summary>
+ /// 骞撮緞
+ /// </summary>
+ [Required(ErrorMessage = "骞撮緞涓嶈兘涓虹┖")]
+ public int? Age { get; set; }
+
+ /// <summary>
+ /// 鍑虹敓鏃ユ湡
+ /// </summary>
+ public DateTime? Birthday { get; set; }
+
+ /// <summary>
+ /// 姘戞棌
+ /// </summary>
+ [MaxLength(32, ErrorMessage = "姘戞棌瀛楃闀垮害涓嶈兘瓒呰繃32")]
+ public string? Nation { get; set; }
+
+ /// <summary>
+ /// 鎵嬫満鍙风爜
+ /// </summary>
+ [MaxLength(16, ErrorMessage = "鎵嬫満鍙风爜瀛楃闀垮害涓嶈兘瓒呰繃16")]
+ public string? Phone { get; set; }
+
+ /// <summary>
+ /// 璇佷欢绫诲瀷
+ /// </summary>
+ [Dict(nameof(CardTypeEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "璇佷欢绫诲瀷涓嶈兘涓虹┖")]
+ public CardTypeEnum? CardType { get; set; }
+
+ /// <summary>
+ /// 韬唤璇佸彿
+ /// </summary>
+ [MaxLength(32, ErrorMessage = "韬唤璇佸彿瀛楃闀垮害涓嶈兘瓒呰繃32")]
+ public string? IdCardNum { get; set; }
+
+ /// <summary>
+ /// 韬唤璇�
+ /// </summary>
+ [MaxLength(512, ErrorMessage = "韬唤璇佸瓧绗﹂暱搴︿笉鑳借秴杩�512")]
+ public string? IdCardPath { get; set; }
+
+ /// <summary>
+ /// 閭
+ /// </summary>
+ [MaxLength(64, ErrorMessage = "閭瀛楃闀垮害涓嶈兘瓒呰繃64")]
+ public string? Email { get; set; }
+
+ /// <summary>
+ /// 鍦板潃
+ /// </summary>
+ [MaxLength(256, ErrorMessage = "鍦板潃瀛楃闀垮害涓嶈兘瓒呰繃256")]
+ public string? Address { get; set; }
+
+ /// <summary>
+ /// 鏂囧寲绋嬪害
+ /// </summary>
+ [Dict(nameof(CultureLevelEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "鏂囧寲绋嬪害涓嶈兘涓虹┖")]
+ public CultureLevelEnum? CultureLevel { get; set; }
+
+ /// <summary>
+ /// 鏀挎不闈㈣矊
+ /// </summary>
+ [MaxLength(16, ErrorMessage = "鏀挎不闈㈣矊瀛楃闀垮害涓嶈兘瓒呰繃16")]
+ public string? PoliticalOutlook { get; set; }
+
+ /// <summary>
+ /// 姣曚笟闄㈡牎
+ /// </summary>
+ [MaxLength(128, ErrorMessage = "姣曚笟闄㈡牎瀛楃闀垮害涓嶈兘瓒呰繃128")]
+ public string? College { get; set; }
+
+ /// <summary>
+ /// 鍔炲叕鐢佃瘽
+ /// </summary>
+ [MaxLength(16, ErrorMessage = "鍔炲叕鐢佃瘽瀛楃闀垮害涓嶈兘瓒呰繃16")]
+ public string? OfficePhone { get; set; }
+
+ /// <summary>
+ /// 绱ф�ヨ仈绯讳汉
+ /// </summary>
+ [MaxLength(32, ErrorMessage = "绱ф�ヨ仈绯讳汉瀛楃闀垮害涓嶈兘瓒呰繃32")]
+ public string? EmergencyContact { get; set; }
+
+ /// <summary>
+ /// 绱ф�ヨ仈绯讳汉鐢佃瘽
+ /// </summary>
+ [MaxLength(16, ErrorMessage = "绱ф�ヨ仈绯讳汉鐢佃瘽瀛楃闀垮害涓嶈兘瓒呰繃16")]
+ public string? EmergencyPhone { get; set; }
+
+ /// <summary>
+ /// 绱ф�ヨ仈绯讳汉鍦板潃
+ /// </summary>
+ [MaxLength(256, ErrorMessage = "绱ф�ヨ仈绯讳汉鍦板潃瀛楃闀垮害涓嶈兘瓒呰繃256")]
+ public string? EmergencyAddress { get; set; }
+
+ /// <summary>
+ /// 涓汉绠�浠�
+ /// </summary>
+ [MaxLength(512, ErrorMessage = "涓汉绠�浠嬪瓧绗﹂暱搴︿笉鑳借秴杩�512")]
+ public string? Introduction { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ [Required(ErrorMessage = "鎺掑簭涓嶈兘涓虹┖")]
+ public int? OrderNo { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ [Dict(nameof(StatusEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "鐘舵�佷笉鑳戒负绌�")]
+ public StatusEnum? Status { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ [MaxLength(256, ErrorMessage = "澶囨敞瀛楃闀垮害涓嶈兘瓒呰繃256")]
+ public string? Remark { get; set; }
+
+ /// <summary>
+ /// 鑱岀骇
+ /// </summary>
+ [MaxLength(32, ErrorMessage = "鑱岀骇瀛楃闀垮害涓嶈兘瓒呰繃32")]
+ public string? PosLevel { get; set; }
+
+ /// <summary>
+ /// 鑱岀О
+ /// </summary>
+ [MaxLength(32, ErrorMessage = "鑱岀О瀛楃闀垮害涓嶈兘瓒呰繃32")]
+ public string? PosTitle { get; set; }
+
+}
+
+/// <summary>
+/// 瀹㈡埛琛ㄤ富閿煡璇㈣緭鍏ュ弬鏁�
+/// </summary>
+public class QueryByIdFBS_CustomerInput : DeleteFBS_CustomerInput
+{
+}
+
+/// <summary>
+/// 璁剧疆鐘舵�佽緭鍏ュ弬鏁�
+/// </summary>
+public class SetFBS_CustomerStatusInput : BaseStatusInput
+{
+}
+
+/// <summary>
+/// 瀹㈡埛琛ㄦ暟鎹鍏ュ疄浣�
+/// </summary>
+[ExcelImporter(SheetIndex = 1, IsOnlyErrorRows = true)]
+public class ImportFBS_CustomerInput : BaseImportInput
+{
+ /// <summary>
+ /// 璐﹀彿
+ /// </summary>
+ [ImporterHeader(Name = "*璐﹀彿")]
+ [ExporterHeader("*璐﹀彿", Format = "", Width = 25, IsBold = true)]
+ public string Account { get; set; }
+
+ /// <summary>
+ /// 瀵嗙爜
+ /// </summary>
+ [ImporterHeader(Name = "*瀵嗙爜")]
+ [ExporterHeader("*瀵嗙爜", Format = "", Width = 25, IsBold = true)]
+ public string Password { get; set; }
+
+ /// <summary>
+ /// 鐪熷疄濮撳悕
+ /// </summary>
+ [ImporterHeader(Name = "*鐪熷疄濮撳悕")]
+ [ExporterHeader("*鐪熷疄濮撳悕", Format = "", Width = 25, IsBold = true)]
+ public string RealName { get; set; }
+
+ /// <summary>
+ /// 鏄电О
+ /// </summary>
+ [ImporterHeader(Name = "鏄电О")]
+ [ExporterHeader("鏄电О", Format = "", Width = 25, IsBold = true)]
+ public string? NickName { get; set; }
+
+ /// <summary>
+ /// 澶村儚
+ /// </summary>
+ [ImporterHeader(Name = "澶村儚")]
+ [ExporterHeader("澶村儚", Format = "", Width = 25, IsBold = true)]
+ public string? Avatar { get; set; }
+
+ /// <summary>
+ /// 鎬у埆
+ /// </summary>
+ [ImporterHeader(Name = "*鎬у埆")]
+ [ExporterHeader("*鎬у埆", Format = "", Width = 25, IsBold = true)]
+ public GenderEnum? Sex { get; set; }
+
+ /// <summary>
+ /// 骞撮緞
+ /// </summary>
+ [ImporterHeader(Name = "*骞撮緞")]
+ [ExporterHeader("*骞撮緞", Format = "", Width = 25, IsBold = true)]
+ public int? Age { get; set; }
+
+ /// <summary>
+ /// 鍑虹敓鏃ユ湡
+ /// </summary>
+ [ImporterHeader(Name = "鍑虹敓鏃ユ湡")]
+ [ExporterHeader("鍑虹敓鏃ユ湡", Format = "", Width = 25, IsBold = true)]
+ public DateTime? Birthday { get; set; }
+
+ /// <summary>
+ /// 姘戞棌
+ /// </summary>
+ [ImporterHeader(Name = "姘戞棌")]
+ [ExporterHeader("姘戞棌", Format = "", Width = 25, IsBold = true)]
+ public string? Nation { get; set; }
+
+ /// <summary>
+ /// 鎵嬫満鍙风爜
+ /// </summary>
+ [ImporterHeader(Name = "鎵嬫満鍙风爜")]
+ [ExporterHeader("鎵嬫満鍙风爜", Format = "", Width = 25, IsBold = true)]
+ public string? Phone { get; set; }
+
+ /// <summary>
+ /// 璇佷欢绫诲瀷
+ /// </summary>
+ [ImporterHeader(Name = "*璇佷欢绫诲瀷")]
+ [ExporterHeader("*璇佷欢绫诲瀷", Format = "", Width = 25, IsBold = true)]
+ public CardTypeEnum? CardType { get; set; }
+
+ /// <summary>
+ /// 韬唤璇佸彿
+ /// </summary>
+ [ImporterHeader(Name = "韬唤璇佸彿")]
+ [ExporterHeader("韬唤璇佸彿", Format = "", Width = 25, IsBold = true)]
+ public string? IdCardNum { get; set; }
+
+ /// <summary>
+ /// 韬唤璇�
+ /// </summary>
+ [ImporterHeader(Name = "韬唤璇�")]
+ [ExporterHeader("韬唤璇�", Format = "", Width = 25, IsBold = true)]
+ public string? IdCardPath { get; set; }
+
+ /// <summary>
+ /// 閭
+ /// </summary>
+ [ImporterHeader(Name = "閭")]
+ [ExporterHeader("閭", Format = "", Width = 25, IsBold = true)]
+ public string? Email { get; set; }
+
+ /// <summary>
+ /// 鍦板潃
+ /// </summary>
+ [ImporterHeader(Name = "鍦板潃")]
+ [ExporterHeader("鍦板潃", Format = "", Width = 25, IsBold = true)]
+ public string? Address { get; set; }
+
+ /// <summary>
+ /// 鏂囧寲绋嬪害
+ /// </summary>
+ [ImporterHeader(Name = "*鏂囧寲绋嬪害")]
+ [ExporterHeader("*鏂囧寲绋嬪害", Format = "", Width = 25, IsBold = true)]
+ public CultureLevelEnum? CultureLevel { get; set; }
+
+ /// <summary>
+ /// 鏀挎不闈㈣矊
+ /// </summary>
+ [ImporterHeader(Name = "鏀挎不闈㈣矊")]
+ [ExporterHeader("鏀挎不闈㈣矊", Format = "", Width = 25, IsBold = true)]
+ public string? PoliticalOutlook { get; set; }
+
+ /// <summary>
+ /// 姣曚笟闄㈡牎
+ /// </summary>
+ [ImporterHeader(Name = "姣曚笟闄㈡牎")]
+ [ExporterHeader("姣曚笟闄㈡牎", Format = "", Width = 25, IsBold = true)]
+ public string? College { get; set; }
+
+ /// <summary>
+ /// 鍔炲叕鐢佃瘽
+ /// </summary>
+ [ImporterHeader(Name = "鍔炲叕鐢佃瘽")]
+ [ExporterHeader("鍔炲叕鐢佃瘽", Format = "", Width = 25, IsBold = true)]
+ public string? OfficePhone { get; set; }
+
+ /// <summary>
+ /// 绱ф�ヨ仈绯讳汉
+ /// </summary>
+ [ImporterHeader(Name = "绱ф�ヨ仈绯讳汉")]
+ [ExporterHeader("绱ф�ヨ仈绯讳汉", Format = "", Width = 25, IsBold = true)]
+ public string? EmergencyContact { get; set; }
+
+ /// <summary>
+ /// 绱ф�ヨ仈绯讳汉鐢佃瘽
+ /// </summary>
+ [ImporterHeader(Name = "绱ф�ヨ仈绯讳汉鐢佃瘽")]
+ [ExporterHeader("绱ф�ヨ仈绯讳汉鐢佃瘽", Format = "", Width = 25, IsBold = true)]
+ public string? EmergencyPhone { get; set; }
+
+ /// <summary>
+ /// 绱ф�ヨ仈绯讳汉鍦板潃
+ /// </summary>
+ [ImporterHeader(Name = "绱ф�ヨ仈绯讳汉鍦板潃")]
+ [ExporterHeader("绱ф�ヨ仈绯讳汉鍦板潃", Format = "", Width = 25, IsBold = true)]
+ public string? EmergencyAddress { get; set; }
+
+ /// <summary>
+ /// 涓汉绠�浠�
+ /// </summary>
+ [ImporterHeader(Name = "涓汉绠�浠�")]
+ [ExporterHeader("涓汉绠�浠�", Format = "", Width = 25, IsBold = true)]
+ public string? Introduction { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ [ImporterHeader(Name = "*鎺掑簭")]
+ [ExporterHeader("*鎺掑簭", Format = "", Width = 25, IsBold = true)]
+ public int? OrderNo { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ [ImporterHeader(Name = "*鐘舵��")]
+ [ExporterHeader("*鐘舵��", Format = "", Width = 25, IsBold = true)]
+ public StatusEnum? Status { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ [ImporterHeader(Name = "澶囨敞")]
+ [ExporterHeader("澶囨敞", Format = "", Width = 25, IsBold = true)]
+ public string? Remark { get; set; }
+
+ /// <summary>
+ /// 鑱岀骇
+ /// </summary>
+ [ImporterHeader(Name = "鑱岀骇")]
+ [ExporterHeader("鑱岀骇", Format = "", Width = 25, IsBold = true)]
+ public string? PosLevel { get; set; }
+
+ /// <summary>
+ /// 鑱岀О
+ /// </summary>
+ [ImporterHeader(Name = "鑱岀О")]
+ [ExporterHeader("鑱岀О", Format = "", Width = 25, IsBold = true)]
+ public string? PosTitle { get; set; }
+
+}
diff --git a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Customer/Dto/FBS_CustomerOutput.cs b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Customer/Dto/FBS_CustomerOutput.cs
new file mode 100644
index 0000000..c3a5172
--- /dev/null
+++ b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Customer/Dto/FBS_CustomerOutput.cs
@@ -0,0 +1,250 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+using Admin.NET.Core;
+using Magicodes.ExporterAndImporter.Core;
+namespace FZCZTB.Net.CustomerSYSTem.Service.FBS_Customer.Dto;
+
+/// <summary>
+/// 瀹㈡埛琛ㄨ緭鍑哄弬鏁�
+/// </summary>
+public class FBS_CustomerOutput
+{
+ /// <summary>
+ /// 涓婚敭Id
+ /// </summary>
+ public long Id { get; set; }
+
+ /// <summary>
+ /// 璐﹀彿
+ /// </summary>
+ public string Account { get; set; }
+
+ /// <summary>
+ /// 瀵嗙爜
+ /// </summary>
+ public string Password { get; set; }
+
+ /// <summary>
+ /// 鐪熷疄濮撳悕
+ /// </summary>
+ public string RealName { get; set; }
+
+ /// <summary>
+ /// 鏄电О
+ /// </summary>
+ public string? NickName { get; set; }
+
+ /// <summary>
+ /// 澶村儚
+ /// </summary>
+ public string? Avatar { get; set; }
+
+ /// <summary>
+ /// 鎬у埆
+ /// </summary>
+ public GenderEnum Sex { get; set; }
+
+ /// <summary>
+ /// 骞撮緞
+ /// </summary>
+ public int Age { get; set; }
+
+ /// <summary>
+ /// 鍑虹敓鏃ユ湡
+ /// </summary>
+ public DateTime? Birthday { get; set; }
+
+ /// <summary>
+ /// 姘戞棌
+ /// </summary>
+ public string? Nation { get; set; }
+
+ /// <summary>
+ /// 鎵嬫満鍙风爜
+ /// </summary>
+ public string? Phone { get; set; }
+
+ /// <summary>
+ /// 璇佷欢绫诲瀷
+ /// </summary>
+ public CardTypeEnum CardType { get; set; }
+
+ /// <summary>
+ /// 韬唤璇佸彿
+ /// </summary>
+ public string? IdCardNum { get; set; }
+
+ /// <summary>
+ /// 韬唤璇�
+ /// </summary>
+ public string? IdCardPath { get; set; }
+
+ /// <summary>
+ /// 閭
+ /// </summary>
+ public string? Email { get; set; }
+
+ /// <summary>
+ /// 鍦板潃
+ /// </summary>
+ public string? Address { get; set; }
+
+ /// <summary>
+ /// 鏂囧寲绋嬪害
+ /// </summary>
+ public CultureLevelEnum CultureLevel { get; set; }
+
+ /// <summary>
+ /// 鏀挎不闈㈣矊
+ /// </summary>
+ public string? PoliticalOutlook { get; set; }
+
+ /// <summary>
+ /// 姣曚笟闄㈡牎
+ /// </summary>
+ public string? College { get; set; }
+
+ /// <summary>
+ /// 鍔炲叕鐢佃瘽
+ /// </summary>
+ public string? OfficePhone { get; set; }
+
+ /// <summary>
+ /// 绱ф�ヨ仈绯讳汉
+ /// </summary>
+ public string? EmergencyContact { get; set; }
+
+ /// <summary>
+ /// 绱ф�ヨ仈绯讳汉鐢佃瘽
+ /// </summary>
+ public string? EmergencyPhone { get; set; }
+
+ /// <summary>
+ /// 绱ф�ヨ仈绯讳汉鍦板潃
+ /// </summary>
+ public string? EmergencyAddress { get; set; }
+
+ /// <summary>
+ /// 涓汉绠�浠�
+ /// </summary>
+ public string? Introduction { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ public int OrderNo { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ public StatusEnum Status { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ public string? Remark { get; set; }
+
+ /// <summary>
+ /// 鑱岀骇
+ /// </summary>
+ public string? PosLevel { get; set; }
+
+ /// <summary>
+ /// 鑱岀О
+ /// </summary>
+ public string? PosTitle { get; set; }
+
+ /// <summary>
+ /// 鎿呴暱棰嗗煙
+ /// </summary>
+ public string? Expertise { get; set; }
+
+ /// <summary>
+ /// 鍔炲叕鍖哄煙
+ /// </summary>
+ public string? OfficeZone { get; set; }
+
+ /// <summary>
+ /// 鍔炲叕瀹�
+ /// </summary>
+ public string? Office { get; set; }
+
+ /// <summary>
+ /// 鍏ヨ亴鏃ユ湡
+ /// </summary>
+ public DateTime? JoinDate { get; set; }
+
+ /// <summary>
+ /// 鏈�鏂扮櫥褰旾p
+ /// </summary>
+ public string? LastLoginIp { get; set; }
+
+ /// <summary>
+ /// 鏈�鏂扮櫥褰曞湴鐐�
+ /// </summary>
+ public string? LastLoginAddress { get; set; }
+
+ /// <summary>
+ /// 鏈�鏂扮櫥褰曟椂闂�
+ /// </summary>
+ public DateTime? LastLoginTime { get; set; }
+
+ /// <summary>
+ /// 鏈�鏂扮櫥褰曡澶�
+ /// </summary>
+ public string? LastLoginDevice { get; set; }
+
+ /// <summary>
+ /// 鐢靛瓙绛惧悕
+ /// </summary>
+ public string? Signature { get; set; }
+
+ /// <summary>
+ /// 绉熸埛Id
+ /// </summary>
+ public long? TenantId { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鏃堕棿
+ /// </summary>
+ public DateTime? CreateTime { get; set; }
+
+ /// <summary>
+ /// 鏇存柊鏃堕棿
+ /// </summary>
+ public DateTime? UpdateTime { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鑰匢d
+ /// </summary>
+ public long? CreateUserId { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鑰呭鍚�
+ /// </summary>
+ public string? CreateUserName { get; set; }
+
+ /// <summary>
+ /// 淇敼鑰匢d
+ /// </summary>
+ public long? UpdateUserId { get; set; }
+
+ /// <summary>
+ /// 淇敼鑰呭鍚�
+ /// </summary>
+ public string? UpdateUserName { get; set; }
+
+}
+
+/// <summary>
+/// 瀹㈡埛琛ㄦ暟鎹鍏ユā鏉垮疄浣�
+/// </summary>
+public class ExportFBS_CustomerOutput : ImportFBS_CustomerInput
+{
+ [ImporterHeader(IsIgnore = true)]
+ [ExporterHeader(IsIgnore = true)]
+ public override string Error { get; set; }
+}
diff --git a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Customer/FBS_CustomerService.cs b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Customer/FBS_CustomerService.cs
new file mode 100644
index 0000000..5ad0c9b
--- /dev/null
+++ b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Customer/FBS_CustomerService.cs
@@ -0,0 +1,280 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+using Admin.NET.Core.Service;
+using Microsoft.AspNetCore.Http;
+
+using Furion.DatabaseAccessor;
+using Furion.FriendlyException;
+using Mapster;
+using SqlSugar;
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
+using Microsoft.AspNetCore.Mvc;
+using Furion.DynamicApiController;
+using Admin.NET.Core;
+using FZCZTB.NET.MD.CutomerMd;
+using Furion.DependencyInjection;
+using FZCZTB.Net.CustomerSYSTem.Service.FBS_Customer.Dto;
+namespace FZCZTB.Net.CustomerSYSTem;
+
+/// <summary>
+/// 瀹㈡埛琛ㄦ湇鍔� 馃З
+/// </summary>
+[ApiDescriptionSettings(CustomerSYSTemConst.GroupName, Order = 100)]
+public class FBS_CustomerService : IDynamicApiController, ITransient
+{
+ private readonly SqlSugarRepository<FBS_Customer> _fBS_CustomerRep;
+ private readonly ISqlSugarClient _sqlSugarClient;
+
+ public FBS_CustomerService(SqlSugarRepository<FBS_Customer> fBS_CustomerRep, ISqlSugarClient sqlSugarClient)
+ {
+ _fBS_CustomerRep = fBS_CustomerRep;
+ _sqlSugarClient = sqlSugarClient;
+ }
+
+ /// <summary>
+ /// 鍒嗛〉鏌ヨ瀹㈡埛琛� 馃敄
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("鍒嗛〉鏌ヨ瀹㈡埛琛�")]
+ [ApiDescriptionSettings(Name = "Page"), HttpPost]
+ public async Task<SqlSugarPagedList<FBS_CustomerOutput>> Page(PageFBS_CustomerInput input)
+ {
+ input.Keyword = input.Keyword?.Trim();
+ var query = _fBS_CustomerRep.AsQueryable()
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Keyword), u => u.Account.Contains(input.Keyword) || u.RealName.Contains(input.Keyword) || u.NickName.Contains(input.Keyword) || u.IdCardPath.Contains(input.Keyword) || u.College.Contains(input.Keyword) || u.OfficePhone.Contains(input.Keyword) || u.EmergencyContact.Contains(input.Keyword) || u.EmergencyPhone.Contains(input.Keyword) || u.EmergencyAddress.Contains(input.Keyword) || u.Introduction.Contains(input.Keyword) || u.Remark.Contains(input.Keyword) || u.PosLevel.Contains(input.Keyword) || u.PosTitle.Contains(input.Keyword))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Account), u => u.Account.Contains(input.Account.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.RealName), u => u.RealName.Contains(input.RealName.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.NickName), u => u.NickName.Contains(input.NickName.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.IdCardPath), u => u.IdCardPath.Contains(input.IdCardPath.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.College), u => u.College.Contains(input.College.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.OfficePhone), u => u.OfficePhone.Contains(input.OfficePhone.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.EmergencyContact), u => u.EmergencyContact.Contains(input.EmergencyContact.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.EmergencyPhone), u => u.EmergencyPhone.Contains(input.EmergencyPhone.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.EmergencyAddress), u => u.EmergencyAddress.Contains(input.EmergencyAddress.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Introduction), u => u.Introduction.Contains(input.Introduction.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Remark), u => u.Remark.Contains(input.Remark.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.PosLevel), u => u.PosLevel.Contains(input.PosLevel.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.PosTitle), u => u.PosTitle.Contains(input.PosTitle.Trim()))
+ .WhereIF(input.CardType.HasValue, u => u.CardType == input.CardType)
+ .WhereIF(input.CultureLevel.HasValue, u => u.CultureLevel == input.CultureLevel)
+ .WhereIF(input.OrderNo != null, u => u.OrderNo == input.OrderNo)
+ .WhereIF(input.Status.HasValue, u => u.Status == input.Status)
+ .Select<FBS_CustomerOutput>();
+ return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
+ }
+
+ /// <summary>
+ /// 鑾峰彇瀹㈡埛琛ㄨ鎯� 鈩癸笍
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("鑾峰彇瀹㈡埛琛ㄨ鎯�")]
+ [ApiDescriptionSettings(Name = "Detail"), HttpGet]
+ public async Task<FBS_Customer> Detail([FromQuery] QueryByIdFBS_CustomerInput input)
+ {
+ return await _fBS_CustomerRep.GetFirstAsync(u => u.Id == input.Id);
+ }
+
+ /// <summary>
+ /// 澧炲姞瀹㈡埛琛� 鉃�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("澧炲姞瀹㈡埛琛�")]
+ [ApiDescriptionSettings(Name = "Add"), HttpPost]
+ public async Task<long> Add(AddFBS_CustomerInput input)
+ {
+ var entity = input.Adapt<FBS_Customer>();
+ return await _fBS_CustomerRep.InsertAsync(entity) ? entity.Id : 0;
+ }
+
+ /// <summary>
+ /// 鏇存柊瀹㈡埛琛� 鉁忥笍
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("鏇存柊瀹㈡埛琛�")]
+ [ApiDescriptionSettings(Name = "Update"), HttpPost]
+ public async Task Update(UpdateFBS_CustomerInput input)
+ {
+ var entity = input.Adapt<FBS_Customer>();
+ await _fBS_CustomerRep.AsUpdateable(entity)
+ .IgnoreColumns(u => new {
+ u.Expertise,
+ u.OfficeZone,
+ u.Office,
+ u.JoinDate,
+ u.LastLoginIp,
+ u.LastLoginAddress,
+ u.LastLoginTime,
+ u.LastLoginDevice,
+ u.Signature,
+ })
+ .ExecuteCommandAsync();
+ }
+
+ /// <summary>
+ /// 鍒犻櫎瀹㈡埛琛� 鉂�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("鍒犻櫎瀹㈡埛琛�")]
+ [ApiDescriptionSettings(Name = "Delete"), HttpPost]
+ public async Task Delete(DeleteFBS_CustomerInput input)
+ {
+ var entity = await _fBS_CustomerRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
+ // await _fBS_CustomerRep.FakeDeleteAsync(entity); //鍋囧垹闄�
+ await _fBS_CustomerRep.DeleteAsync(entity); //鐪熷垹闄�
+ }
+
+ /// <summary>
+ /// 鎵归噺鍒犻櫎瀹㈡埛琛� 鉂�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("鎵归噺鍒犻櫎瀹㈡埛琛�")]
+ [ApiDescriptionSettings(Name = "BatchDelete"), HttpPost]
+ public async Task<bool> BatchDelete([Required(ErrorMessage = "涓婚敭鍒楄〃涓嶈兘涓虹┖")]List<DeleteFBS_CustomerInput> input)
+ {
+ var exp = Expressionable.Create<FBS_Customer>();
+ foreach (var row in input) exp = exp.Or(it => it.Id == row.Id);
+ var list = await _fBS_CustomerRep.AsQueryable().Where(exp.ToExpression()).ToListAsync();
+
+ // return await _fBS_CustomerRep.FakeDeleteAsync(list); //鍋囧垹闄�
+ return await _fBS_CustomerRep.DeleteAsync(list); //鐪熷垹闄�
+ }
+
+ /// <summary>
+ /// 璁剧疆瀹㈡埛琛ㄧ姸鎬� 馃毇
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("璁剧疆瀹㈡埛琛ㄧ姸鎬�")]
+ [ApiDescriptionSettings(Name = "SetStatus"), HttpPost]
+ public async Task SetFBS_CustomerStatus(SetFBS_CustomerStatusInput input)
+ {
+ await _fBS_CustomerRep.AsUpdateable().SetColumns(u => u.Status, input.Status).Where(u => u.Id == input.Id).ExecuteCommandAsync();
+ }
+
+ /// <summary>
+ /// 瀵煎嚭瀹㈡埛琛ㄨ褰� 馃敄
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("瀵煎嚭瀹㈡埛琛ㄨ褰�")]
+ [ApiDescriptionSettings(Name = "Export"), HttpPost, NonUnify]
+ public async Task<IActionResult> Export(PageFBS_CustomerInput input)
+ {
+ var list = (await Page(input)).Items?.Adapt<List<ExportFBS_CustomerOutput>>() ?? new();
+ if (input.SelectKeyList?.Count > 0) list = list.Where(x => input.SelectKeyList.Contains(x.Id)).ToList();
+ return ExcelHelper.ExportTemplate(list, "瀹㈡埛琛ㄥ鍑鸿褰�");
+ }
+
+ /// <summary>
+ /// 涓嬭浇瀹㈡埛琛ㄦ暟鎹鍏ユā鏉� 猬囷笍
+ /// </summary>
+ /// <returns></returns>
+ [DisplayName("涓嬭浇瀹㈡埛琛ㄦ暟鎹鍏ユā鏉�")]
+ [ApiDescriptionSettings(Name = "Import"), HttpGet, NonUnify]
+ public IActionResult DownloadTemplate()
+ {
+ return ExcelHelper.ExportTemplate(new List<ExportFBS_CustomerOutput>(), "瀹㈡埛琛ㄥ鍏ユā鏉�");
+ }
+
+ private static readonly object _fBS_CustomerImportLock = new object();
+ /// <summary>
+ /// 瀵煎叆瀹㈡埛琛ㄨ褰� 馃捑
+ /// </summary>
+ /// <returns></returns>
+ [DisplayName("瀵煎叆瀹㈡埛琛ㄨ褰�")]
+ [ApiDescriptionSettings(Name = "Import"), HttpPost, NonUnify, UnitOfWork]
+ public IActionResult ImportData([Required] IFormFile file)
+ {
+ lock (_fBS_CustomerImportLock)
+ {
+ var stream = ExcelHelper.ImportData<ImportFBS_CustomerInput, FBS_Customer>(file, (list, markerErrorAction) =>
+ {
+ _sqlSugarClient.Utilities.PageEach(list, 2048, pageItems =>
+ {
+
+ // 鏍¢獙骞惰繃婊ゅ繀濉熀鏈被鍨嬩负null鐨勫瓧娈�
+ var rows = pageItems.Where(x => {
+ if (!string.IsNullOrWhiteSpace(x.Error)) return false;
+ if (x.Sex == null){
+ x.Error = "鎬у埆涓嶈兘涓虹┖";
+ return false;
+ }
+ if (!string.IsNullOrWhiteSpace(x.Error)) return false;
+ if (x.Age == null){
+ x.Error = "骞撮緞涓嶈兘涓虹┖";
+ return false;
+ }
+ if (!string.IsNullOrWhiteSpace(x.Error)) return false;
+ if (x.CardType == null){
+ x.Error = "璇佷欢绫诲瀷涓嶈兘涓虹┖";
+ return false;
+ }
+ if (!string.IsNullOrWhiteSpace(x.Error)) return false;
+ if (x.CultureLevel == null){
+ x.Error = "鏂囧寲绋嬪害涓嶈兘涓虹┖";
+ return false;
+ }
+ if (!string.IsNullOrWhiteSpace(x.Error)) return false;
+ if (x.OrderNo == null){
+ x.Error = "鎺掑簭涓嶈兘涓虹┖";
+ return false;
+ }
+ if (!string.IsNullOrWhiteSpace(x.Error)) return false;
+ if (x.Status == null){
+ x.Error = "鐘舵�佷笉鑳戒负绌�";
+ return false;
+ }
+ return true;
+ }).Adapt<List<FBS_Customer>>();
+
+ var storageable = _fBS_CustomerRep.Context.Storageable(rows)
+ .SplitError(it => string.IsNullOrWhiteSpace(it.Item.Account), "璐﹀彿涓嶈兘涓虹┖")
+ .SplitError(it => it.Item.Account?.Length > 32, "璐﹀彿闀垮害涓嶈兘瓒呰繃32涓瓧绗�")
+ .SplitError(it => string.IsNullOrWhiteSpace(it.Item.Password), "瀵嗙爜涓嶈兘涓虹┖")
+ .SplitError(it => it.Item.Password?.Length > 512, "瀵嗙爜闀垮害涓嶈兘瓒呰繃512涓瓧绗�")
+ .SplitError(it => string.IsNullOrWhiteSpace(it.Item.RealName), "鐪熷疄濮撳悕涓嶈兘涓虹┖")
+ .SplitError(it => it.Item.RealName?.Length > 32, "鐪熷疄濮撳悕闀垮害涓嶈兘瓒呰繃32涓瓧绗�")
+ .SplitError(it => it.Item.NickName?.Length > 32, "鏄电О闀垮害涓嶈兘瓒呰繃32涓瓧绗�")
+ .SplitError(it => it.Item.Avatar?.Length > 512, "澶村儚闀垮害涓嶈兘瓒呰繃512涓瓧绗�")
+ .SplitError(it => it.Item.Nation?.Length > 32, "姘戞棌闀垮害涓嶈兘瓒呰繃32涓瓧绗�")
+ .SplitError(it => it.Item.Phone?.Length > 16, "鎵嬫満鍙风爜闀垮害涓嶈兘瓒呰繃16涓瓧绗�")
+ .SplitError(it => it.Item.IdCardNum?.Length > 32, "韬唤璇佸彿闀垮害涓嶈兘瓒呰繃32涓瓧绗�")
+ .SplitError(it => it.Item.IdCardPath?.Length > 512, "韬唤璇侀暱搴︿笉鑳借秴杩�512涓瓧绗�")
+ .SplitError(it => it.Item.Email?.Length > 64, "閭闀垮害涓嶈兘瓒呰繃64涓瓧绗�")
+ .SplitError(it => it.Item.Address?.Length > 256, "鍦板潃闀垮害涓嶈兘瓒呰繃256涓瓧绗�")
+ .SplitError(it => it.Item.PoliticalOutlook?.Length > 16, "鏀挎不闈㈣矊闀垮害涓嶈兘瓒呰繃16涓瓧绗�")
+ .SplitError(it => it.Item.College?.Length > 128, "姣曚笟闄㈡牎闀垮害涓嶈兘瓒呰繃128涓瓧绗�")
+ .SplitError(it => it.Item.OfficePhone?.Length > 16, "鍔炲叕鐢佃瘽闀垮害涓嶈兘瓒呰繃16涓瓧绗�")
+ .SplitError(it => it.Item.EmergencyContact?.Length > 32, "绱ф�ヨ仈绯讳汉闀垮害涓嶈兘瓒呰繃32涓瓧绗�")
+ .SplitError(it => it.Item.EmergencyPhone?.Length > 16, "绱ф�ヨ仈绯讳汉鐢佃瘽闀垮害涓嶈兘瓒呰繃16涓瓧绗�")
+ .SplitError(it => it.Item.EmergencyAddress?.Length > 256, "绱ф�ヨ仈绯讳汉鍦板潃闀垮害涓嶈兘瓒呰繃256涓瓧绗�")
+ .SplitError(it => it.Item.Introduction?.Length > 512, "涓汉绠�浠嬮暱搴︿笉鑳借秴杩�512涓瓧绗�")
+ .SplitError(it => it.Item.Remark?.Length > 256, "澶囨敞闀垮害涓嶈兘瓒呰繃256涓瓧绗�")
+ .SplitError(it => it.Item.PosLevel?.Length > 32, "鑱岀骇闀垮害涓嶈兘瓒呰繃32涓瓧绗�")
+ .SplitError(it => it.Item.PosTitle?.Length > 32, "鑱岀О闀垮害涓嶈兘瓒呰繃32涓瓧绗�")
+ .SplitInsert(_ => true)
+ .ToStorage();
+
+ storageable.AsInsertable.ExecuteCommand();// 涓嶅瓨鍦ㄦ彃鍏�
+ storageable.AsUpdateable.ExecuteCommand();// 瀛樺湪鏇存柊
+
+ // 鏍囪閿欒淇℃伅
+ markerErrorAction.Invoke(storageable, pageItems, rows);
+ });
+ });
+
+ return stream;
+ }
+ }
+}
diff --git a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_ExRole/Dto/FBS_ExRoleDto.cs b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_ExRole/Dto/FBS_ExRoleDto.cs
new file mode 100644
index 0000000..495dca3
--- /dev/null
+++ b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_ExRole/Dto/FBS_ExRoleDto.cs
@@ -0,0 +1,86 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+using Admin.NET.Core;
+
+namespace FZCZTB.Net.CustomerSYSTem.Service.FBS_ExRole.Dto;
+
+/// <summary>
+/// 瀹㈡埛涓诲垎绫昏鑹茶緭鍑哄弬鏁�
+/// </summary>
+public class FBS_ExRoleDto
+{
+ /// <summary>
+ /// 涓婚敭Id
+ /// </summary>
+ public long Id { get; set; }
+
+ /// <summary>
+ /// 鍚嶇О
+ /// </summary>
+ public string Name { get; set; }
+
+ /// <summary>
+ /// 缂栫爜
+ /// </summary>
+ public string? Code { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ public int OrderNo { get; set; }
+
+ /// <summary>
+ /// 鏁版嵁鑼冨洿
+ /// </summary>
+ public DataScopeEnum DataScope { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ public string? Remark { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ public StatusEnum Status { get; set; }
+
+ /// <summary>
+ /// 绉熸埛Id
+ /// </summary>
+ public long? TenantId { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鏃堕棿
+ /// </summary>
+ public DateTime? CreateTime { get; set; }
+
+ /// <summary>
+ /// 鏇存柊鏃堕棿
+ /// </summary>
+ public DateTime? UpdateTime { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鑰匢d
+ /// </summary>
+ public long? CreateUserId { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鑰呭鍚�
+ /// </summary>
+ public string? CreateUserName { get; set; }
+
+ /// <summary>
+ /// 淇敼鑰匢d
+ /// </summary>
+ public long? UpdateUserId { get; set; }
+
+ /// <summary>
+ /// 淇敼鑰呭鍚�
+ /// </summary>
+ public string? UpdateUserName { get; set; }
+
+}
diff --git a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_ExRole/Dto/FBS_ExRoleInput.cs b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_ExRole/Dto/FBS_ExRoleInput.cs
new file mode 100644
index 0000000..df4d51e
--- /dev/null
+++ b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_ExRole/Dto/FBS_ExRoleInput.cs
@@ -0,0 +1,278 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+using Admin.NET.Core;
+using System.ComponentModel.DataAnnotations;
+using Magicodes.ExporterAndImporter.Core;
+using Magicodes.ExporterAndImporter.Excel;
+
+namespace FZCZTB.Net.CustomerSYSTem.Service.FBS_ExRole.Dto;
+
+/// <summary>
+/// 瀹㈡埛涓诲垎绫昏鑹插熀纭�杈撳叆鍙傛暟
+/// </summary>
+public class FBS_ExRoleBaseInput
+{
+ /// <summary>
+ /// 涓婚敭Id
+ /// </summary>
+ public virtual long? Id { get; set; }
+
+ /// <summary>
+ /// 鍚嶇О
+ /// </summary>
+ [Required(ErrorMessage = "鍚嶇О涓嶈兘涓虹┖")]
+ public virtual string Name { get; set; }
+
+ /// <summary>
+ /// 缂栫爜
+ /// </summary>
+ public virtual string? Code { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ [Required(ErrorMessage = "鎺掑簭涓嶈兘涓虹┖")]
+ public virtual int? OrderNo { get; set; }
+
+ /// <summary>
+ /// 鏁版嵁鑼冨洿
+ /// </summary>
+ [Dict(nameof(DataScopeEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "鏁版嵁鑼冨洿涓嶈兘涓虹┖")]
+ public virtual DataScopeEnum? DataScope { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ public virtual string? Remark { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ [Dict(nameof(StatusEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "鐘舵�佷笉鑳戒负绌�")]
+ public virtual StatusEnum? Status { get; set; }
+
+}
+
+/// <summary>
+/// 瀹㈡埛涓诲垎绫昏鑹插垎椤垫煡璇㈣緭鍏ュ弬鏁�
+/// </summary>
+public class PageFBS_ExRoleInput : BasePageInput
+{
+ /// <summary>
+ /// 鍚嶇О
+ /// </summary>
+ public string Name { get; set; }
+
+ /// <summary>
+ /// 缂栫爜
+ /// </summary>
+ public string? Code { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ public int? OrderNo { get; set; }
+
+ /// <summary>
+ /// 鏁版嵁鑼冨洿
+ /// </summary>
+ [Dict(nameof(DataScopeEnum), AllowNullValue = true)]
+ public DataScopeEnum? DataScope { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ public string? Remark { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ [Dict(nameof(StatusEnum), AllowNullValue = true)]
+ public StatusEnum? Status { get; set; }
+
+ /// <summary>
+ /// 閫変腑涓婚敭鍒楄〃
+ /// </summary>
+ public List<long> SelectKeyList { get; set; }
+}
+
+/// <summary>
+/// 瀹㈡埛涓诲垎绫昏鑹插鍔犺緭鍏ュ弬鏁�
+/// </summary>
+public class AddFBS_ExRoleInput
+{
+ /// <summary>
+ /// 鍚嶇О
+ /// </summary>
+ [Required(ErrorMessage = "鍚嶇О涓嶈兘涓虹┖")]
+ [MaxLength(64, ErrorMessage = "鍚嶇О瀛楃闀垮害涓嶈兘瓒呰繃64")]
+ public string Name { get; set; }
+
+ /// <summary>
+ /// 缂栫爜
+ /// </summary>
+ [MaxLength(64, ErrorMessage = "缂栫爜瀛楃闀垮害涓嶈兘瓒呰繃64")]
+ public string? Code { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ [Required(ErrorMessage = "鎺掑簭涓嶈兘涓虹┖")]
+ public int? OrderNo { get; set; }
+
+ /// <summary>
+ /// 鏁版嵁鑼冨洿
+ /// </summary>
+ [Dict(nameof(DataScopeEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "鏁版嵁鑼冨洿涓嶈兘涓虹┖")]
+ public DataScopeEnum? DataScope { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ [MaxLength(128, ErrorMessage = "澶囨敞瀛楃闀垮害涓嶈兘瓒呰繃128")]
+ public string? Remark { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ [Dict(nameof(StatusEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "鐘舵�佷笉鑳戒负绌�")]
+ public StatusEnum? Status { get; set; }
+
+}
+
+/// <summary>
+/// 瀹㈡埛涓诲垎绫昏鑹插垹闄よ緭鍏ュ弬鏁�
+/// </summary>
+public class DeleteFBS_ExRoleInput
+{
+ /// <summary>
+ /// 涓婚敭Id
+ /// </summary>
+ [Required(ErrorMessage = "涓婚敭Id涓嶈兘涓虹┖")]
+ public long? Id { get; set; }
+
+}
+
+/// <summary>
+/// 瀹㈡埛涓诲垎绫昏鑹叉洿鏂拌緭鍏ュ弬鏁�
+/// </summary>
+public class UpdateFBS_ExRoleInput
+{
+ /// <summary>
+ /// 涓婚敭Id
+ /// </summary>
+ [Required(ErrorMessage = "涓婚敭Id涓嶈兘涓虹┖")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// 鍚嶇О
+ /// </summary>
+ [Required(ErrorMessage = "鍚嶇О涓嶈兘涓虹┖")]
+ [MaxLength(64, ErrorMessage = "鍚嶇О瀛楃闀垮害涓嶈兘瓒呰繃64")]
+ public string Name { get; set; }
+
+ /// <summary>
+ /// 缂栫爜
+ /// </summary>
+ [MaxLength(64, ErrorMessage = "缂栫爜瀛楃闀垮害涓嶈兘瓒呰繃64")]
+ public string? Code { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ [Required(ErrorMessage = "鎺掑簭涓嶈兘涓虹┖")]
+ public int? OrderNo { get; set; }
+
+ /// <summary>
+ /// 鏁版嵁鑼冨洿
+ /// </summary>
+ [Dict(nameof(DataScopeEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "鏁版嵁鑼冨洿涓嶈兘涓虹┖")]
+ public DataScopeEnum? DataScope { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ [MaxLength(128, ErrorMessage = "澶囨敞瀛楃闀垮害涓嶈兘瓒呰繃128")]
+ public string? Remark { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ [Dict(nameof(StatusEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "鐘舵�佷笉鑳戒负绌�")]
+ public StatusEnum? Status { get; set; }
+
+}
+
+/// <summary>
+/// 瀹㈡埛涓诲垎绫昏鑹蹭富閿煡璇㈣緭鍏ュ弬鏁�
+/// </summary>
+public class QueryByIdFBS_ExRoleInput : DeleteFBS_ExRoleInput
+{
+}
+
+/// <summary>
+/// 璁剧疆鐘舵�佽緭鍏ュ弬鏁�
+/// </summary>
+public class SetFBS_ExRoleStatusInput : BaseStatusInput
+{
+}
+
+/// <summary>
+/// 瀹㈡埛涓诲垎绫昏鑹叉暟鎹鍏ュ疄浣�
+/// </summary>
+[ExcelImporter(SheetIndex = 1, IsOnlyErrorRows = true)]
+public class ImportFBS_ExRoleInput : BaseImportInput
+{
+ /// <summary>
+ /// 鍚嶇О
+ /// </summary>
+ [ImporterHeader(Name = "*鍚嶇О")]
+ [ExporterHeader("*鍚嶇О", Format = "", Width = 25, IsBold = true)]
+ public string Name { get; set; }
+
+ /// <summary>
+ /// 缂栫爜
+ /// </summary>
+ [ImporterHeader(Name = "缂栫爜")]
+ [ExporterHeader("缂栫爜", Format = "", Width = 25, IsBold = true)]
+ public string? Code { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ [ImporterHeader(Name = "*鎺掑簭")]
+ [ExporterHeader("*鎺掑簭", Format = "", Width = 25, IsBold = true)]
+ public int? OrderNo { get; set; }
+
+ /// <summary>
+ /// 鏁版嵁鑼冨洿
+ /// </summary>
+ [ImporterHeader(Name = "*鏁版嵁鑼冨洿")]
+ [ExporterHeader("*鏁版嵁鑼冨洿", Format = "", Width = 25, IsBold = true)]
+ public DataScopeEnum? DataScope { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ [ImporterHeader(Name = "澶囨敞")]
+ [ExporterHeader("澶囨敞", Format = "", Width = 25, IsBold = true)]
+ public string? Remark { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ [ImporterHeader(Name = "*鐘舵��")]
+ [ExporterHeader("*鐘舵��", Format = "", Width = 25, IsBold = true)]
+ public StatusEnum? Status { get; set; }
+
+}
diff --git a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_ExRole/Dto/FBS_ExRoleOutput.cs b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_ExRole/Dto/FBS_ExRoleOutput.cs
new file mode 100644
index 0000000..f8d6280
--- /dev/null
+++ b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_ExRole/Dto/FBS_ExRoleOutput.cs
@@ -0,0 +1,95 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+using Admin.NET.Core;
+using Magicodes.ExporterAndImporter.Core;
+namespace FZCZTB.Net.CustomerSYSTem.Service.FBS_ExRole.Dto;
+
+/// <summary>
+/// 瀹㈡埛涓诲垎绫昏鑹茶緭鍑哄弬鏁�
+/// </summary>
+public class FBS_ExRoleOutput
+{
+ /// <summary>
+ /// 涓婚敭Id
+ /// </summary>
+ public long Id { get; set; }
+
+ /// <summary>
+ /// 鍚嶇О
+ /// </summary>
+ public string Name { get; set; }
+
+ /// <summary>
+ /// 缂栫爜
+ /// </summary>
+ public string? Code { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ public int OrderNo { get; set; }
+
+ /// <summary>
+ /// 鏁版嵁鑼冨洿
+ /// </summary>
+ public DataScopeEnum DataScope { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ public string? Remark { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ public StatusEnum Status { get; set; }
+
+ /// <summary>
+ /// 绉熸埛Id
+ /// </summary>
+ public long? TenantId { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鏃堕棿
+ /// </summary>
+ public DateTime? CreateTime { get; set; }
+
+ /// <summary>
+ /// 鏇存柊鏃堕棿
+ /// </summary>
+ public DateTime? UpdateTime { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鑰匢d
+ /// </summary>
+ public long? CreateUserId { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鑰呭鍚�
+ /// </summary>
+ public string? CreateUserName { get; set; }
+
+ /// <summary>
+ /// 淇敼鑰匢d
+ /// </summary>
+ public long? UpdateUserId { get; set; }
+
+ /// <summary>
+ /// 淇敼鑰呭鍚�
+ /// </summary>
+ public string? UpdateUserName { get; set; }
+
+}
+
+/// <summary>
+/// 瀹㈡埛涓诲垎绫昏鑹叉暟鎹鍏ユā鏉垮疄浣�
+/// </summary>
+public class ExportFBS_ExRoleOutput : ImportFBS_ExRoleInput
+{
+ [ImporterHeader(IsIgnore = true)]
+ [ExporterHeader(IsIgnore = true)]
+ public override string Error { get; set; }
+}
diff --git a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_ExRole/FBS_ExRoleService.cs b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_ExRole/FBS_ExRoleService.cs
new file mode 100644
index 0000000..74171d9
--- /dev/null
+++ b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_ExRole/FBS_ExRoleService.cs
@@ -0,0 +1,223 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+using Admin.NET.Core.Service;
+using Microsoft.AspNetCore.Http;
+
+using Furion.DatabaseAccessor;
+using Furion.FriendlyException;
+using Mapster;
+using SqlSugar;
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
+using Microsoft.AspNetCore.Mvc;
+using Furion.DynamicApiController;
+using Furion.DependencyInjection;
+using Admin.NET.Core;
+using FZCZTB.NET.MD.CutomerMd;
+using FZCZTB.Net.CustomerSYSTem.Service.FBS_ExRole.Dto;
+namespace FZCZTB.Net.CustomerSYSTem;
+
+/// <summary>
+/// 瀹㈡埛涓诲垎绫昏鑹叉湇鍔� 馃З
+/// </summary>
+[ApiDescriptionSettings(CustomerSYSTemConst.GroupName, Order = 100)]
+public class FBS_ExRoleService : IDynamicApiController, ITransient
+{
+ private readonly SqlSugarRepository<FBS_ExRole> _fBS_ExRoleRep;
+ private readonly ISqlSugarClient _sqlSugarClient;
+
+ public FBS_ExRoleService(SqlSugarRepository<FBS_ExRole> fBS_ExRoleRep, ISqlSugarClient sqlSugarClient)
+ {
+ _fBS_ExRoleRep = fBS_ExRoleRep;
+ _sqlSugarClient = sqlSugarClient;
+ }
+
+ /// <summary>
+ /// 鍒嗛〉鏌ヨ瀹㈡埛涓诲垎绫昏鑹� 馃敄
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("鍒嗛〉鏌ヨ瀹㈡埛涓诲垎绫昏鑹�")]
+ [ApiDescriptionSettings(Name = "Page"), HttpPost]
+ public async Task<SqlSugarPagedList<FBS_ExRoleOutput>> Page(PageFBS_ExRoleInput input)
+ {
+ input.Keyword = input.Keyword?.Trim();
+ var query = _fBS_ExRoleRep.AsQueryable()
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Keyword), u => u.Name.Contains(input.Keyword) || u.Code.Contains(input.Keyword) || u.Remark.Contains(input.Keyword))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Name), u => u.Name.Contains(input.Name.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Code), u => u.Code.Contains(input.Code.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Remark), u => u.Remark.Contains(input.Remark.Trim()))
+ .WhereIF(input.OrderNo != null, u => u.OrderNo == input.OrderNo)
+ .WhereIF(input.DataScope.HasValue, u => u.DataScope == input.DataScope)
+ .WhereIF(input.Status.HasValue, u => u.Status == input.Status)
+ .Select<FBS_ExRoleOutput>();
+ return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
+ }
+
+ /// <summary>
+ /// 鑾峰彇瀹㈡埛涓诲垎绫昏鑹茶鎯� 鈩癸笍
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("鑾峰彇瀹㈡埛涓诲垎绫昏鑹茶鎯�")]
+ [ApiDescriptionSettings(Name = "Detail"), HttpGet]
+ public async Task<FBS_ExRole> Detail([FromQuery] QueryByIdFBS_ExRoleInput input)
+ {
+ return await _fBS_ExRoleRep.GetFirstAsync(u => u.Id == input.Id);
+ }
+
+ /// <summary>
+ /// 澧炲姞瀹㈡埛涓诲垎绫昏鑹� 鉃�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("澧炲姞瀹㈡埛涓诲垎绫昏鑹�")]
+ [ApiDescriptionSettings(Name = "Add"), HttpPost]
+ public async Task<long> Add(AddFBS_ExRoleInput input)
+ {
+ var entity = input.Adapt<FBS_ExRole>();
+ return await _fBS_ExRoleRep.InsertAsync(entity) ? entity.Id : 0;
+ }
+
+ /// <summary>
+ /// 鏇存柊瀹㈡埛涓诲垎绫昏鑹� 鉁忥笍
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("鏇存柊瀹㈡埛涓诲垎绫昏鑹�")]
+ [ApiDescriptionSettings(Name = "Update"), HttpPost]
+ public async Task Update(UpdateFBS_ExRoleInput input)
+ {
+ var entity = input.Adapt<FBS_ExRole>();
+ await _fBS_ExRoleRep.AsUpdateable(entity)
+ .ExecuteCommandAsync();
+ }
+
+ /// <summary>
+ /// 鍒犻櫎瀹㈡埛涓诲垎绫昏鑹� 鉂�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("鍒犻櫎瀹㈡埛涓诲垎绫昏鑹�")]
+ [ApiDescriptionSettings(Name = "Delete"), HttpPost]
+ public async Task Delete(DeleteFBS_ExRoleInput input)
+ {
+ var entity = await _fBS_ExRoleRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
+ // await _fBS_ExRoleRep.FakeDeleteAsync(entity); //鍋囧垹闄�
+ await _fBS_ExRoleRep.DeleteAsync(entity); //鐪熷垹闄�
+ }
+
+ /// <summary>
+ /// 鎵归噺鍒犻櫎瀹㈡埛涓诲垎绫昏鑹� 鉂�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("鎵归噺鍒犻櫎瀹㈡埛涓诲垎绫昏鑹�")]
+ [ApiDescriptionSettings(Name = "BatchDelete"), HttpPost]
+ public async Task<bool> BatchDelete([Required(ErrorMessage = "涓婚敭鍒楄〃涓嶈兘涓虹┖")]List<DeleteFBS_ExRoleInput> input)
+ {
+ var exp = Expressionable.Create<FBS_ExRole>();
+ foreach (var row in input) exp = exp.Or(it => it.Id == row.Id);
+ var list = await _fBS_ExRoleRep.AsQueryable().Where(exp.ToExpression()).ToListAsync();
+
+ // return await _fBS_ExRoleRep.FakeDeleteAsync(list); //鍋囧垹闄�
+ return await _fBS_ExRoleRep.DeleteAsync(list); //鐪熷垹闄�
+ }
+
+ /// <summary>
+ /// 璁剧疆瀹㈡埛涓诲垎绫昏鑹茬姸鎬� 馃毇
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("璁剧疆瀹㈡埛涓诲垎绫昏鑹茬姸鎬�")]
+ [ApiDescriptionSettings(Name = "SetStatus"), HttpPost]
+ public async Task SetFBS_ExRoleStatus(SetFBS_ExRoleStatusInput input)
+ {
+ await _fBS_ExRoleRep.AsUpdateable().SetColumns(u => u.Status, input.Status).Where(u => u.Id == input.Id).ExecuteCommandAsync();
+ }
+
+ /// <summary>
+ /// 瀵煎嚭瀹㈡埛涓诲垎绫昏鑹茶褰� 馃敄
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("瀵煎嚭瀹㈡埛涓诲垎绫昏鑹茶褰�")]
+ [ApiDescriptionSettings(Name = "Export"), HttpPost, NonUnify]
+ public async Task<IActionResult> Export(PageFBS_ExRoleInput input)
+ {
+ var list = (await Page(input)).Items?.Adapt<List<ExportFBS_ExRoleOutput>>() ?? new();
+ if (input.SelectKeyList?.Count > 0) list = list.Where(x => input.SelectKeyList.Contains(x.Id)).ToList();
+ return ExcelHelper.ExportTemplate(list, "瀹㈡埛涓诲垎绫昏鑹插鍑鸿褰�");
+ }
+
+ /// <summary>
+ /// 涓嬭浇瀹㈡埛涓诲垎绫昏鑹叉暟鎹鍏ユā鏉� 猬囷笍
+ /// </summary>
+ /// <returns></returns>
+ [DisplayName("涓嬭浇瀹㈡埛涓诲垎绫昏鑹叉暟鎹鍏ユā鏉�")]
+ [ApiDescriptionSettings(Name = "Import"), HttpGet, NonUnify]
+ public IActionResult DownloadTemplate()
+ {
+ return ExcelHelper.ExportTemplate(new List<ExportFBS_ExRoleOutput>(), "瀹㈡埛涓诲垎绫昏鑹插鍏ユā鏉�");
+ }
+
+ private static readonly object _fBS_ExRoleImportLock = new object();
+ /// <summary>
+ /// 瀵煎叆瀹㈡埛涓诲垎绫昏鑹茶褰� 馃捑
+ /// </summary>
+ /// <returns></returns>
+ [DisplayName("瀵煎叆瀹㈡埛涓诲垎绫昏鑹茶褰�")]
+ [ApiDescriptionSettings(Name = "Import"), HttpPost, NonUnify, UnitOfWork]
+ public IActionResult ImportData([Required] IFormFile file)
+ {
+ lock (_fBS_ExRoleImportLock)
+ {
+ var stream = ExcelHelper.ImportData<ImportFBS_ExRoleInput, FBS_ExRole>(file, (list, markerErrorAction) =>
+ {
+ _sqlSugarClient.Utilities.PageEach(list, 2048, pageItems =>
+ {
+
+ // 鏍¢獙骞惰繃婊ゅ繀濉熀鏈被鍨嬩负null鐨勫瓧娈�
+ var rows = pageItems.Where(x => {
+ if (!string.IsNullOrWhiteSpace(x.Error)) return false;
+ if (x.OrderNo == null){
+ x.Error = "鎺掑簭涓嶈兘涓虹┖";
+ return false;
+ }
+ if (!string.IsNullOrWhiteSpace(x.Error)) return false;
+ if (x.DataScope == null){
+ x.Error = "鏁版嵁鑼冨洿涓嶈兘涓虹┖";
+ return false;
+ }
+ if (!string.IsNullOrWhiteSpace(x.Error)) return false;
+ if (x.Status == null){
+ x.Error = "鐘舵�佷笉鑳戒负绌�";
+ return false;
+ }
+ return true;
+ }).Adapt<List<FBS_ExRole>>();
+
+ var storageable = _fBS_ExRoleRep.Context.Storageable(rows)
+ .SplitError(it => string.IsNullOrWhiteSpace(it.Item.Name), "鍚嶇О涓嶈兘涓虹┖")
+ .SplitError(it => it.Item.Name?.Length > 64, "鍚嶇О闀垮害涓嶈兘瓒呰繃64涓瓧绗�")
+ .SplitError(it => it.Item.Code?.Length > 64, "缂栫爜闀垮害涓嶈兘瓒呰繃64涓瓧绗�")
+ .SplitError(it => it.Item.Remark?.Length > 128, "澶囨敞闀垮害涓嶈兘瓒呰繃128涓瓧绗�")
+ .SplitInsert(_ => true)
+ .ToStorage();
+
+ storageable.AsInsertable.ExecuteCommand();// 涓嶅瓨鍦ㄦ彃鍏�
+ storageable.AsUpdateable.ExecuteCommand();// 瀛樺湪鏇存柊
+
+ // 鏍囪閿欒淇℃伅
+ markerErrorAction.Invoke(storageable, pageItems, rows);
+ });
+ });
+
+ return stream;
+ }
+ }
+}
diff --git a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Menu/Dto/FBS_MenuDto.cs b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Menu/Dto/FBS_MenuDto.cs
new file mode 100644
index 0000000..4875501
--- /dev/null
+++ b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Menu/Dto/FBS_MenuDto.cs
@@ -0,0 +1,141 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+using Admin.NET.Core;
+
+namespace FZCZTB.Net.CustomerSYSTem.Service.FBS_Menu.Dto;
+
+/// <summary>
+/// 瀹㈡埛绯荤粺鑿滃崟琛ㄨ緭鍑哄弬鏁�
+/// </summary>
+public class FBS_MenuDto
+{
+ /// <summary>
+ /// 涓婚敭Id
+ /// </summary>
+ public long Id { get; set; }
+
+ /// <summary>
+ /// 鐖禝d
+ /// </summary>
+ public long Pid { get; set; }
+
+ /// <summary>
+ /// 鑿滃崟绫诲瀷
+ /// </summary>
+ public MenuTypeEnum Type { get; set; }
+
+ /// <summary>
+ /// 璺敱鍚嶇О
+ /// </summary>
+ public string? Name { get; set; }
+
+ /// <summary>
+ /// 璺敱鍦板潃
+ /// </summary>
+ public string? Path { get; set; }
+
+ /// <summary>
+ /// 缁勪欢璺緞
+ /// </summary>
+ public string? Component { get; set; }
+
+ /// <summary>
+ /// 閲嶅畾鍚�
+ /// </summary>
+ public string? Redirect { get; set; }
+
+ /// <summary>
+ /// 鏉冮檺鏍囪瘑
+ /// </summary>
+ public string? Permission { get; set; }
+
+ /// <summary>
+ /// 鑿滃崟鍚嶇О
+ /// </summary>
+ public string Title { get; set; }
+
+ /// <summary>
+ /// 鍥炬爣
+ /// </summary>
+ public string? Icon { get; set; }
+
+ /// <summary>
+ /// 鏄惁鍐呭祵
+ /// </summary>
+ public bool IsIframe { get; set; }
+
+ /// <summary>
+ /// 澶栭摼閾炬帴
+ /// </summary>
+ public string? OutLink { get; set; }
+
+ /// <summary>
+ /// 鏄惁闅愯棌
+ /// </summary>
+ public bool IsHide { get; set; }
+
+ /// <summary>
+ /// 鏄惁缂撳瓨
+ /// </summary>
+ public bool IsKeepAlive { get; set; }
+
+ /// <summary>
+ /// 鏄惁鍥哄畾
+ /// </summary>
+ public bool IsAffix { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ public int OrderNo { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ public StatusEnum Status { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ public string? Remark { get; set; }
+
+ /// <summary>
+ /// 绉熸埛Id
+ /// </summary>
+ public long? TenantId { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鏃堕棿
+ /// </summary>
+ public DateTime? CreateTime { get; set; }
+
+ /// <summary>
+ /// 鏇存柊鏃堕棿
+ /// </summary>
+ public DateTime? UpdateTime { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鑰匢d
+ /// </summary>
+ public long? CreateUserId { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鑰呭鍚�
+ /// </summary>
+ public string? CreateUserName { get; set; }
+
+ /// <summary>
+ /// 淇敼鑰匢d
+ /// </summary>
+ public long? UpdateUserId { get; set; }
+
+ /// <summary>
+ /// 淇敼鑰呭鍚�
+ /// </summary>
+ public string? UpdateUserName { get; set; }
+
+}
diff --git a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Menu/Dto/FBS_MenuInput.cs b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Menu/Dto/FBS_MenuInput.cs
new file mode 100644
index 0000000..1702a8c
--- /dev/null
+++ b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Menu/Dto/FBS_MenuInput.cs
@@ -0,0 +1,602 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+using Admin.NET.Core;
+using System.ComponentModel.DataAnnotations;
+using Magicodes.ExporterAndImporter.Core;
+using Magicodes.ExporterAndImporter.Excel;
+
+namespace FZCZTB.Net.CustomerSYSTem.Service.FBS_Menu.Dto;
+
+/// <summary>
+/// 瀹㈡埛绯荤粺鑿滃崟琛ㄥ熀纭�杈撳叆鍙傛暟
+/// </summary>
+public class FBS_MenuBaseInput
+{
+ /// <summary>
+ /// 涓婚敭Id
+ /// </summary>
+ public virtual long? Id { get; set; }
+
+ /// <summary>
+ /// 鐖禝d
+ /// </summary>
+ [Required(ErrorMessage = "鐖禝d涓嶈兘涓虹┖")]
+ public virtual long? Pid { get; set; }
+
+ /// <summary>
+ /// 鑿滃崟绫诲瀷
+ /// </summary>
+ [Dict(nameof(MenuTypeEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "鑿滃崟绫诲瀷涓嶈兘涓虹┖")]
+ public virtual MenuTypeEnum? Type { get; set; }
+
+ /// <summary>
+ /// 璺敱鍚嶇О
+ /// </summary>
+ public virtual string? Name { get; set; }
+
+ /// <summary>
+ /// 璺敱鍦板潃
+ /// </summary>
+ public virtual string? Path { get; set; }
+
+ /// <summary>
+ /// 缁勪欢璺緞
+ /// </summary>
+ public virtual string? Component { get; set; }
+
+ /// <summary>
+ /// 閲嶅畾鍚�
+ /// </summary>
+ public virtual string? Redirect { get; set; }
+
+ /// <summary>
+ /// 鏉冮檺鏍囪瘑
+ /// </summary>
+ public virtual string? Permission { get; set; }
+
+ /// <summary>
+ /// 鑿滃崟鍚嶇О
+ /// </summary>
+ [Required(ErrorMessage = "鑿滃崟鍚嶇О涓嶈兘涓虹┖")]
+ public virtual string Title { get; set; }
+
+ /// <summary>
+ /// 鍥炬爣
+ /// </summary>
+ public virtual string? Icon { get; set; }
+
+ /// <summary>
+ /// 鏄惁鍐呭祵
+ /// </summary>
+ [Required(ErrorMessage = "鏄惁鍐呭祵涓嶈兘涓虹┖")]
+ public virtual bool? IsIframe { get; set; }
+
+ /// <summary>
+ /// 澶栭摼閾炬帴
+ /// </summary>
+ public virtual string? OutLink { get; set; }
+
+ /// <summary>
+ /// 鏄惁闅愯棌
+ /// </summary>
+ [Required(ErrorMessage = "鏄惁闅愯棌涓嶈兘涓虹┖")]
+ public virtual bool? IsHide { get; set; }
+
+ /// <summary>
+ /// 鏄惁缂撳瓨
+ /// </summary>
+ [Required(ErrorMessage = "鏄惁缂撳瓨涓嶈兘涓虹┖")]
+ public virtual bool? IsKeepAlive { get; set; }
+
+ /// <summary>
+ /// 鏄惁鍥哄畾
+ /// </summary>
+ [Required(ErrorMessage = "鏄惁鍥哄畾涓嶈兘涓虹┖")]
+ public virtual bool? IsAffix { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ [Required(ErrorMessage = "鎺掑簭涓嶈兘涓虹┖")]
+ public virtual int? OrderNo { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ [Dict(nameof(StatusEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "鐘舵�佷笉鑳戒负绌�")]
+ public virtual StatusEnum? Status { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ public virtual string? Remark { get; set; }
+
+}
+
+/// <summary>
+/// 瀹㈡埛绯荤粺鑿滃崟琛ㄥ垎椤垫煡璇㈣緭鍏ュ弬鏁�
+/// </summary>
+public class PageFBS_MenuInput : BasePageInput
+{
+ /// <summary>
+ /// 鐖禝d
+ /// </summary>
+ public long? Pid { get; set; }
+
+ /// <summary>
+ /// 鑿滃崟绫诲瀷
+ /// </summary>
+ [Dict(nameof(MenuTypeEnum), AllowNullValue = true)]
+ public MenuTypeEnum? Type { get; set; }
+
+ /// <summary>
+ /// 璺敱鍚嶇О
+ /// </summary>
+ public string? Name { get; set; }
+
+ /// <summary>
+ /// 璺敱鍦板潃
+ /// </summary>
+ public string? Path { get; set; }
+
+ /// <summary>
+ /// 缁勪欢璺緞
+ /// </summary>
+ public string? Component { get; set; }
+
+ /// <summary>
+ /// 閲嶅畾鍚�
+ /// </summary>
+ public string? Redirect { get; set; }
+
+ /// <summary>
+ /// 鏉冮檺鏍囪瘑
+ /// </summary>
+ public string? Permission { get; set; }
+
+ /// <summary>
+ /// 鑿滃崟鍚嶇О
+ /// </summary>
+ public string Title { get; set; }
+
+ /// <summary>
+ /// 鍥炬爣
+ /// </summary>
+ public string? Icon { get; set; }
+
+ /// <summary>
+ /// 鏄惁鍐呭祵
+ /// </summary>
+ public bool? IsIframe { get; set; }
+
+ /// <summary>
+ /// 澶栭摼閾炬帴
+ /// </summary>
+ public string? OutLink { get; set; }
+
+ /// <summary>
+ /// 鏄惁闅愯棌
+ /// </summary>
+ public bool? IsHide { get; set; }
+
+ /// <summary>
+ /// 鏄惁缂撳瓨
+ /// </summary>
+ public bool? IsKeepAlive { get; set; }
+
+ /// <summary>
+ /// 鏄惁鍥哄畾
+ /// </summary>
+ public bool? IsAffix { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ public int? OrderNo { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ [Dict(nameof(StatusEnum), AllowNullValue = true)]
+ public StatusEnum? Status { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ public string? Remark { get; set; }
+
+ /// <summary>
+ /// 閫変腑涓婚敭鍒楄〃
+ /// </summary>
+ public List<long> SelectKeyList { get; set; }
+}
+
+/// <summary>
+/// 瀹㈡埛绯荤粺鑿滃崟琛ㄥ鍔犺緭鍏ュ弬鏁�
+/// </summary>
+public class AddFBS_MenuInput
+{
+ /// <summary>
+ /// 鐖禝d
+ /// </summary>
+ [Required(ErrorMessage = "鐖禝d涓嶈兘涓虹┖")]
+ public long? Pid { get; set; }
+
+ /// <summary>
+ /// 鑿滃崟绫诲瀷
+ /// </summary>
+ [Dict(nameof(MenuTypeEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "鑿滃崟绫诲瀷涓嶈兘涓虹┖")]
+ public MenuTypeEnum? Type { get; set; }
+
+ /// <summary>
+ /// 璺敱鍚嶇О
+ /// </summary>
+ [MaxLength(64, ErrorMessage = "璺敱鍚嶇О瀛楃闀垮害涓嶈兘瓒呰繃64")]
+ public string? Name { get; set; }
+
+ /// <summary>
+ /// 璺敱鍦板潃
+ /// </summary>
+ [MaxLength(128, ErrorMessage = "璺敱鍦板潃瀛楃闀垮害涓嶈兘瓒呰繃128")]
+ public string? Path { get; set; }
+
+ /// <summary>
+ /// 缁勪欢璺緞
+ /// </summary>
+ [MaxLength(128, ErrorMessage = "缁勪欢璺緞瀛楃闀垮害涓嶈兘瓒呰繃128")]
+ public string? Component { get; set; }
+
+ /// <summary>
+ /// 閲嶅畾鍚�
+ /// </summary>
+ [MaxLength(128, ErrorMessage = "閲嶅畾鍚戝瓧绗﹂暱搴︿笉鑳借秴杩�128")]
+ public string? Redirect { get; set; }
+
+ /// <summary>
+ /// 鏉冮檺鏍囪瘑
+ /// </summary>
+ [MaxLength(128, ErrorMessage = "鏉冮檺鏍囪瘑瀛楃闀垮害涓嶈兘瓒呰繃128")]
+ public string? Permission { get; set; }
+
+ /// <summary>
+ /// 鑿滃崟鍚嶇О
+ /// </summary>
+ [Required(ErrorMessage = "鑿滃崟鍚嶇О涓嶈兘涓虹┖")]
+ [MaxLength(64, ErrorMessage = "鑿滃崟鍚嶇О瀛楃闀垮害涓嶈兘瓒呰繃64")]
+ public string Title { get; set; }
+
+ /// <summary>
+ /// 鍥炬爣
+ /// </summary>
+ [MaxLength(128, ErrorMessage = "鍥炬爣瀛楃闀垮害涓嶈兘瓒呰繃128")]
+ public string? Icon { get; set; }
+
+ /// <summary>
+ /// 鏄惁鍐呭祵
+ /// </summary>
+ [Required(ErrorMessage = "鏄惁鍐呭祵涓嶈兘涓虹┖")]
+ public bool? IsIframe { get; set; }
+
+ /// <summary>
+ /// 澶栭摼閾炬帴
+ /// </summary>
+ [MaxLength(256, ErrorMessage = "澶栭摼閾炬帴瀛楃闀垮害涓嶈兘瓒呰繃256")]
+ public string? OutLink { get; set; }
+
+ /// <summary>
+ /// 鏄惁闅愯棌
+ /// </summary>
+ [Required(ErrorMessage = "鏄惁闅愯棌涓嶈兘涓虹┖")]
+ public bool? IsHide { get; set; }
+
+ /// <summary>
+ /// 鏄惁缂撳瓨
+ /// </summary>
+ [Required(ErrorMessage = "鏄惁缂撳瓨涓嶈兘涓虹┖")]
+ public bool? IsKeepAlive { get; set; }
+
+ /// <summary>
+ /// 鏄惁鍥哄畾
+ /// </summary>
+ [Required(ErrorMessage = "鏄惁鍥哄畾涓嶈兘涓虹┖")]
+ public bool? IsAffix { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ [Required(ErrorMessage = "鎺掑簭涓嶈兘涓虹┖")]
+ public int? OrderNo { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ [Dict(nameof(StatusEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "鐘舵�佷笉鑳戒负绌�")]
+ public StatusEnum? Status { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ [MaxLength(256, ErrorMessage = "澶囨敞瀛楃闀垮害涓嶈兘瓒呰繃256")]
+ public string? Remark { get; set; }
+
+}
+
+/// <summary>
+/// 瀹㈡埛绯荤粺鑿滃崟琛ㄥ垹闄よ緭鍏ュ弬鏁�
+/// </summary>
+public class DeleteFBS_MenuInput
+{
+ /// <summary>
+ /// 涓婚敭Id
+ /// </summary>
+ [Required(ErrorMessage = "涓婚敭Id涓嶈兘涓虹┖")]
+ public long? Id { get; set; }
+
+}
+
+/// <summary>
+/// 瀹㈡埛绯荤粺鑿滃崟琛ㄦ洿鏂拌緭鍏ュ弬鏁�
+/// </summary>
+public class UpdateFBS_MenuInput
+{
+ /// <summary>
+ /// 涓婚敭Id
+ /// </summary>
+ [Required(ErrorMessage = "涓婚敭Id涓嶈兘涓虹┖")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// 鐖禝d
+ /// </summary>
+ [Required(ErrorMessage = "鐖禝d涓嶈兘涓虹┖")]
+ public long? Pid { get; set; }
+
+ /// <summary>
+ /// 鑿滃崟绫诲瀷
+ /// </summary>
+ [Dict(nameof(MenuTypeEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "鑿滃崟绫诲瀷涓嶈兘涓虹┖")]
+ public MenuTypeEnum? Type { get; set; }
+
+ /// <summary>
+ /// 璺敱鍚嶇О
+ /// </summary>
+ [MaxLength(64, ErrorMessage = "璺敱鍚嶇О瀛楃闀垮害涓嶈兘瓒呰繃64")]
+ public string? Name { get; set; }
+
+ /// <summary>
+ /// 璺敱鍦板潃
+ /// </summary>
+ [MaxLength(128, ErrorMessage = "璺敱鍦板潃瀛楃闀垮害涓嶈兘瓒呰繃128")]
+ public string? Path { get; set; }
+
+ /// <summary>
+ /// 缁勪欢璺緞
+ /// </summary>
+ [MaxLength(128, ErrorMessage = "缁勪欢璺緞瀛楃闀垮害涓嶈兘瓒呰繃128")]
+ public string? Component { get; set; }
+
+ /// <summary>
+ /// 閲嶅畾鍚�
+ /// </summary>
+ [MaxLength(128, ErrorMessage = "閲嶅畾鍚戝瓧绗﹂暱搴︿笉鑳借秴杩�128")]
+ public string? Redirect { get; set; }
+
+ /// <summary>
+ /// 鏉冮檺鏍囪瘑
+ /// </summary>
+ [MaxLength(128, ErrorMessage = "鏉冮檺鏍囪瘑瀛楃闀垮害涓嶈兘瓒呰繃128")]
+ public string? Permission { get; set; }
+
+ /// <summary>
+ /// 鑿滃崟鍚嶇О
+ /// </summary>
+ [Required(ErrorMessage = "鑿滃崟鍚嶇О涓嶈兘涓虹┖")]
+ [MaxLength(64, ErrorMessage = "鑿滃崟鍚嶇О瀛楃闀垮害涓嶈兘瓒呰繃64")]
+ public string Title { get; set; }
+
+ /// <summary>
+ /// 鍥炬爣
+ /// </summary>
+ [MaxLength(128, ErrorMessage = "鍥炬爣瀛楃闀垮害涓嶈兘瓒呰繃128")]
+ public string? Icon { get; set; }
+
+ /// <summary>
+ /// 鏄惁鍐呭祵
+ /// </summary>
+ [Required(ErrorMessage = "鏄惁鍐呭祵涓嶈兘涓虹┖")]
+ public bool? IsIframe { get; set; }
+
+ /// <summary>
+ /// 澶栭摼閾炬帴
+ /// </summary>
+ [MaxLength(256, ErrorMessage = "澶栭摼閾炬帴瀛楃闀垮害涓嶈兘瓒呰繃256")]
+ public string? OutLink { get; set; }
+
+ /// <summary>
+ /// 鏄惁闅愯棌
+ /// </summary>
+ [Required(ErrorMessage = "鏄惁闅愯棌涓嶈兘涓虹┖")]
+ public bool? IsHide { get; set; }
+
+ /// <summary>
+ /// 鏄惁缂撳瓨
+ /// </summary>
+ [Required(ErrorMessage = "鏄惁缂撳瓨涓嶈兘涓虹┖")]
+ public bool? IsKeepAlive { get; set; }
+
+ /// <summary>
+ /// 鏄惁鍥哄畾
+ /// </summary>
+ [Required(ErrorMessage = "鏄惁鍥哄畾涓嶈兘涓虹┖")]
+ public bool? IsAffix { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ [Required(ErrorMessage = "鎺掑簭涓嶈兘涓虹┖")]
+ public int? OrderNo { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ [Dict(nameof(StatusEnum), AllowNullValue = true)]
+ [Required(ErrorMessage = "鐘舵�佷笉鑳戒负绌�")]
+ public StatusEnum? Status { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ [MaxLength(256, ErrorMessage = "澶囨敞瀛楃闀垮害涓嶈兘瓒呰繃256")]
+ public string? Remark { get; set; }
+
+}
+
+/// <summary>
+/// 瀹㈡埛绯荤粺鑿滃崟琛ㄤ富閿煡璇㈣緭鍏ュ弬鏁�
+/// </summary>
+public class QueryByIdFBS_MenuInput : DeleteFBS_MenuInput
+{
+}
+
+/// <summary>
+/// 璁剧疆鐘舵�佽緭鍏ュ弬鏁�
+/// </summary>
+public class SetFBS_MenuStatusInput : BaseStatusInput
+{
+}
+
+/// <summary>
+/// 瀹㈡埛绯荤粺鑿滃崟琛ㄦ暟鎹鍏ュ疄浣�
+/// </summary>
+[ExcelImporter(SheetIndex = 1, IsOnlyErrorRows = true)]
+public class ImportFBS_MenuInput : BaseImportInput
+{
+ /// <summary>
+ /// 鐖禝d
+ /// </summary>
+ [ImporterHeader(Name = "*鐖禝d")]
+ [ExporterHeader("*鐖禝d", Format = "", Width = 25, IsBold = true)]
+ public long? Pid { get; set; }
+
+ /// <summary>
+ /// 鑿滃崟绫诲瀷
+ /// </summary>
+ [ImporterHeader(Name = "*鑿滃崟绫诲瀷")]
+ [ExporterHeader("*鑿滃崟绫诲瀷", Format = "", Width = 25, IsBold = true)]
+ public MenuTypeEnum? Type { get; set; }
+
+ /// <summary>
+ /// 璺敱鍚嶇О
+ /// </summary>
+ [ImporterHeader(Name = "璺敱鍚嶇О")]
+ [ExporterHeader("璺敱鍚嶇О", Format = "", Width = 25, IsBold = true)]
+ public string? Name { get; set; }
+
+ /// <summary>
+ /// 璺敱鍦板潃
+ /// </summary>
+ [ImporterHeader(Name = "璺敱鍦板潃")]
+ [ExporterHeader("璺敱鍦板潃", Format = "", Width = 25, IsBold = true)]
+ public string? Path { get; set; }
+
+ /// <summary>
+ /// 缁勪欢璺緞
+ /// </summary>
+ [ImporterHeader(Name = "缁勪欢璺緞")]
+ [ExporterHeader("缁勪欢璺緞", Format = "", Width = 25, IsBold = true)]
+ public string? Component { get; set; }
+
+ /// <summary>
+ /// 閲嶅畾鍚�
+ /// </summary>
+ [ImporterHeader(Name = "閲嶅畾鍚�")]
+ [ExporterHeader("閲嶅畾鍚�", Format = "", Width = 25, IsBold = true)]
+ public string? Redirect { get; set; }
+
+ /// <summary>
+ /// 鏉冮檺鏍囪瘑
+ /// </summary>
+ [ImporterHeader(Name = "鏉冮檺鏍囪瘑")]
+ [ExporterHeader("鏉冮檺鏍囪瘑", Format = "", Width = 25, IsBold = true)]
+ public string? Permission { get; set; }
+
+ /// <summary>
+ /// 鑿滃崟鍚嶇О
+ /// </summary>
+ [ImporterHeader(Name = "*鑿滃崟鍚嶇О")]
+ [ExporterHeader("*鑿滃崟鍚嶇О", Format = "", Width = 25, IsBold = true)]
+ public string Title { get; set; }
+
+ /// <summary>
+ /// 鍥炬爣
+ /// </summary>
+ [ImporterHeader(Name = "鍥炬爣")]
+ [ExporterHeader("鍥炬爣", Format = "", Width = 25, IsBold = true)]
+ public string? Icon { get; set; }
+
+ /// <summary>
+ /// 鏄惁鍐呭祵
+ /// </summary>
+ [ImporterHeader(Name = "*鏄惁鍐呭祵")]
+ [ExporterHeader("*鏄惁鍐呭祵", Format = "", Width = 25, IsBold = true)]
+ public bool? IsIframe { get; set; }
+
+ /// <summary>
+ /// 澶栭摼閾炬帴
+ /// </summary>
+ [ImporterHeader(Name = "澶栭摼閾炬帴")]
+ [ExporterHeader("澶栭摼閾炬帴", Format = "", Width = 25, IsBold = true)]
+ public string? OutLink { get; set; }
+
+ /// <summary>
+ /// 鏄惁闅愯棌
+ /// </summary>
+ [ImporterHeader(Name = "*鏄惁闅愯棌")]
+ [ExporterHeader("*鏄惁闅愯棌", Format = "", Width = 25, IsBold = true)]
+ public bool? IsHide { get; set; }
+
+ /// <summary>
+ /// 鏄惁缂撳瓨
+ /// </summary>
+ [ImporterHeader(Name = "*鏄惁缂撳瓨")]
+ [ExporterHeader("*鏄惁缂撳瓨", Format = "", Width = 25, IsBold = true)]
+ public bool? IsKeepAlive { get; set; }
+
+ /// <summary>
+ /// 鏄惁鍥哄畾
+ /// </summary>
+ [ImporterHeader(Name = "*鏄惁鍥哄畾")]
+ [ExporterHeader("*鏄惁鍥哄畾", Format = "", Width = 25, IsBold = true)]
+ public bool? IsAffix { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ [ImporterHeader(Name = "*鎺掑簭")]
+ [ExporterHeader("*鎺掑簭", Format = "", Width = 25, IsBold = true)]
+ public int? OrderNo { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ [ImporterHeader(Name = "*鐘舵��")]
+ [ExporterHeader("*鐘舵��", Format = "", Width = 25, IsBold = true)]
+ public StatusEnum? Status { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ [ImporterHeader(Name = "澶囨敞")]
+ [ExporterHeader("澶囨敞", Format = "", Width = 25, IsBold = true)]
+ public string? Remark { get; set; }
+
+}
diff --git a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Menu/Dto/FBS_MenuOutput.cs b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Menu/Dto/FBS_MenuOutput.cs
new file mode 100644
index 0000000..31b6bbb
--- /dev/null
+++ b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Menu/Dto/FBS_MenuOutput.cs
@@ -0,0 +1,150 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+using Admin.NET.Core;
+using Magicodes.ExporterAndImporter.Core;
+namespace FZCZTB.Net.CustomerSYSTem.Service.FBS_Menu.Dto;
+
+/// <summary>
+/// 瀹㈡埛绯荤粺鑿滃崟琛ㄨ緭鍑哄弬鏁�
+/// </summary>
+public class FBS_MenuOutput
+{
+ /// <summary>
+ /// 涓婚敭Id
+ /// </summary>
+ public long Id { get; set; }
+
+ /// <summary>
+ /// 鐖禝d
+ /// </summary>
+ public long Pid { get; set; }
+
+ /// <summary>
+ /// 鑿滃崟绫诲瀷
+ /// </summary>
+ public MenuTypeEnum Type { get; set; }
+
+ /// <summary>
+ /// 璺敱鍚嶇О
+ /// </summary>
+ public string? Name { get; set; }
+
+ /// <summary>
+ /// 璺敱鍦板潃
+ /// </summary>
+ public string? Path { get; set; }
+
+ /// <summary>
+ /// 缁勪欢璺緞
+ /// </summary>
+ public string? Component { get; set; }
+
+ /// <summary>
+ /// 閲嶅畾鍚�
+ /// </summary>
+ public string? Redirect { get; set; }
+
+ /// <summary>
+ /// 鏉冮檺鏍囪瘑
+ /// </summary>
+ public string? Permission { get; set; }
+
+ /// <summary>
+ /// 鑿滃崟鍚嶇О
+ /// </summary>
+ public string Title { get; set; }
+
+ /// <summary>
+ /// 鍥炬爣
+ /// </summary>
+ public string? Icon { get; set; }
+
+ /// <summary>
+ /// 鏄惁鍐呭祵
+ /// </summary>
+ public bool IsIframe { get; set; }
+
+ /// <summary>
+ /// 澶栭摼閾炬帴
+ /// </summary>
+ public string? OutLink { get; set; }
+
+ /// <summary>
+ /// 鏄惁闅愯棌
+ /// </summary>
+ public bool IsHide { get; set; }
+
+ /// <summary>
+ /// 鏄惁缂撳瓨
+ /// </summary>
+ public bool IsKeepAlive { get; set; }
+
+ /// <summary>
+ /// 鏄惁鍥哄畾
+ /// </summary>
+ public bool IsAffix { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ public int OrderNo { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ public StatusEnum Status { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ public string? Remark { get; set; }
+
+ /// <summary>
+ /// 绉熸埛Id
+ /// </summary>
+ public long? TenantId { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鏃堕棿
+ /// </summary>
+ public DateTime? CreateTime { get; set; }
+
+ /// <summary>
+ /// 鏇存柊鏃堕棿
+ /// </summary>
+ public DateTime? UpdateTime { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鑰匢d
+ /// </summary>
+ public long? CreateUserId { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鑰呭鍚�
+ /// </summary>
+ public string? CreateUserName { get; set; }
+
+ /// <summary>
+ /// 淇敼鑰匢d
+ /// </summary>
+ public long? UpdateUserId { get; set; }
+
+ /// <summary>
+ /// 淇敼鑰呭鍚�
+ /// </summary>
+ public string? UpdateUserName { get; set; }
+
+}
+
+/// <summary>
+/// 瀹㈡埛绯荤粺鑿滃崟琛ㄦ暟鎹鍏ユā鏉垮疄浣�
+/// </summary>
+public class ExportFBS_MenuOutput : ImportFBS_MenuInput
+{
+ [ImporterHeader(IsIgnore = true)]
+ [ExporterHeader(IsIgnore = true)]
+ public override string Error { get; set; }
+}
diff --git a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Menu/FBS_MenuService.cs b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Menu/FBS_MenuService.cs
new file mode 100644
index 0000000..aaab197
--- /dev/null
+++ b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Menu/FBS_MenuService.cs
@@ -0,0 +1,261 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+using Admin.NET.Core.Service;
+using Microsoft.AspNetCore.Http;
+
+using Furion.DatabaseAccessor;
+using Furion.FriendlyException;
+using Mapster;
+using SqlSugar;
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
+using Microsoft.AspNetCore.Mvc;
+using Furion.DynamicApiController;
+using Furion.DependencyInjection;
+using Admin.NET.Core;
+using FZCZTB.NET.MD.CutomerMd;
+using FZCZTB.Net.CustomerSYSTem.Service.FBS_Menu.Dto;
+namespace FZCZTB.Net.CustomerSYSTem;
+
+/// <summary>
+/// 瀹㈡埛绯荤粺鑿滃崟琛ㄦ湇鍔� 馃З
+/// </summary>
+[ApiDescriptionSettings(CustomerSYSTemConst.GroupName, Order = 100)]
+public class FBS_MenuService : IDynamicApiController, ITransient
+{
+ private readonly SqlSugarRepository<FBS_Menu> _fBS_MenuRep;
+ private readonly ISqlSugarClient _sqlSugarClient;
+
+ public FBS_MenuService(SqlSugarRepository<FBS_Menu> fBS_MenuRep, ISqlSugarClient sqlSugarClient)
+ {
+ _fBS_MenuRep = fBS_MenuRep;
+ _sqlSugarClient = sqlSugarClient;
+ }
+
+ /// <summary>
+ /// 鍒嗛〉鏌ヨ瀹㈡埛绯荤粺鑿滃崟琛� 馃敄
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("鍒嗛〉鏌ヨ瀹㈡埛绯荤粺鑿滃崟琛�")]
+ [ApiDescriptionSettings(Name = "Page"), HttpPost]
+ public async Task<SqlSugarPagedList<FBS_MenuOutput>> Page(PageFBS_MenuInput input)
+ {
+ input.Keyword = input.Keyword?.Trim();
+ var query = _fBS_MenuRep.AsQueryable()
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Keyword), u => u.Name.Contains(input.Keyword) || u.Path.Contains(input.Keyword) || u.Component.Contains(input.Keyword) || u.Redirect.Contains(input.Keyword) || u.Permission.Contains(input.Keyword) || u.Title.Contains(input.Keyword) || u.Icon.Contains(input.Keyword) || u.OutLink.Contains(input.Keyword) || u.Remark.Contains(input.Keyword))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Name), u => u.Name.Contains(input.Name.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Path), u => u.Path.Contains(input.Path.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Component), u => u.Component.Contains(input.Component.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Redirect), u => u.Redirect.Contains(input.Redirect.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Permission), u => u.Permission.Contains(input.Permission.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Title), u => u.Title.Contains(input.Title.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Icon), u => u.Icon.Contains(input.Icon.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.OutLink), u => u.OutLink.Contains(input.OutLink.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Remark), u => u.Remark.Contains(input.Remark.Trim()))
+ .WhereIF(input.Pid != null, u => u.Pid == input.Pid)
+ .WhereIF(input.Type.HasValue, u => u.Type == input.Type)
+ .WhereIF(input.OrderNo != null, u => u.OrderNo == input.OrderNo)
+ .WhereIF(input.Status.HasValue, u => u.Status == input.Status)
+ .Select<FBS_MenuOutput>();
+ return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
+ }
+
+ /// <summary>
+ /// 鑾峰彇瀹㈡埛绯荤粺鑿滃崟琛ㄨ鎯� 鈩癸笍
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("鑾峰彇瀹㈡埛绯荤粺鑿滃崟琛ㄨ鎯�")]
+ [ApiDescriptionSettings(Name = "Detail"), HttpGet]
+ public async Task<FBS_Menu> Detail([FromQuery] QueryByIdFBS_MenuInput input)
+ {
+ return await _fBS_MenuRep.GetFirstAsync(u => u.Id == input.Id);
+ }
+
+ /// <summary>
+ /// 澧炲姞瀹㈡埛绯荤粺鑿滃崟琛� 鉃�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("澧炲姞瀹㈡埛绯荤粺鑿滃崟琛�")]
+ [ApiDescriptionSettings(Name = "Add"), HttpPost]
+ public async Task<long> Add(AddFBS_MenuInput input)
+ {
+ var entity = input.Adapt<FBS_Menu>();
+ return await _fBS_MenuRep.InsertAsync(entity) ? entity.Id : 0;
+ }
+
+ /// <summary>
+ /// 鏇存柊瀹㈡埛绯荤粺鑿滃崟琛� 鉁忥笍
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("鏇存柊瀹㈡埛绯荤粺鑿滃崟琛�")]
+ [ApiDescriptionSettings(Name = "Update"), HttpPost]
+ public async Task Update(UpdateFBS_MenuInput input)
+ {
+ var entity = input.Adapt<FBS_Menu>();
+ await _fBS_MenuRep.AsUpdateable(entity)
+ .ExecuteCommandAsync();
+ }
+
+ /// <summary>
+ /// 鍒犻櫎瀹㈡埛绯荤粺鑿滃崟琛� 鉂�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("鍒犻櫎瀹㈡埛绯荤粺鑿滃崟琛�")]
+ [ApiDescriptionSettings(Name = "Delete"), HttpPost]
+ public async Task Delete(DeleteFBS_MenuInput input)
+ {
+ var entity = await _fBS_MenuRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
+ // await _fBS_MenuRep.FakeDeleteAsync(entity); //鍋囧垹闄�
+ await _fBS_MenuRep.DeleteAsync(entity); //鐪熷垹闄�
+ }
+
+ /// <summary>
+ /// 鎵归噺鍒犻櫎瀹㈡埛绯荤粺鑿滃崟琛� 鉂�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("鎵归噺鍒犻櫎瀹㈡埛绯荤粺鑿滃崟琛�")]
+ [ApiDescriptionSettings(Name = "BatchDelete"), HttpPost]
+ public async Task<bool> BatchDelete([Required(ErrorMessage = "涓婚敭鍒楄〃涓嶈兘涓虹┖")]List<DeleteFBS_MenuInput> input)
+ {
+ var exp = Expressionable.Create<FBS_Menu>();
+ foreach (var row in input) exp = exp.Or(it => it.Id == row.Id);
+ var list = await _fBS_MenuRep.AsQueryable().Where(exp.ToExpression()).ToListAsync();
+
+ // return await _fBS_MenuRep.FakeDeleteAsync(list); //鍋囧垹闄�
+ return await _fBS_MenuRep.DeleteAsync(list); //鐪熷垹闄�
+ }
+
+ /// <summary>
+ /// 璁剧疆瀹㈡埛绯荤粺鑿滃崟琛ㄧ姸鎬� 馃毇
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("璁剧疆瀹㈡埛绯荤粺鑿滃崟琛ㄧ姸鎬�")]
+ [ApiDescriptionSettings(Name = "SetStatus"), HttpPost]
+ public async Task SetFBS_MenuStatus(SetFBS_MenuStatusInput input)
+ {
+ await _fBS_MenuRep.AsUpdateable().SetColumns(u => u.Status, input.Status).Where(u => u.Id == input.Id).ExecuteCommandAsync();
+ }
+
+ /// <summary>
+ /// 瀵煎嚭瀹㈡埛绯荤粺鑿滃崟琛ㄨ褰� 馃敄
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("瀵煎嚭瀹㈡埛绯荤粺鑿滃崟琛ㄨ褰�")]
+ [ApiDescriptionSettings(Name = "Export"), HttpPost, NonUnify]
+ public async Task<IActionResult> Export(PageFBS_MenuInput input)
+ {
+ var list = (await Page(input)).Items?.Adapt<List<ExportFBS_MenuOutput>>() ?? new();
+ if (input.SelectKeyList?.Count > 0) list = list.Where(x => input.SelectKeyList.Contains(x.Id)).ToList();
+ return ExcelHelper.ExportTemplate(list, "瀹㈡埛绯荤粺鑿滃崟琛ㄥ鍑鸿褰�");
+ }
+
+ /// <summary>
+ /// 涓嬭浇瀹㈡埛绯荤粺鑿滃崟琛ㄦ暟鎹鍏ユā鏉� 猬囷笍
+ /// </summary>
+ /// <returns></returns>
+ [DisplayName("涓嬭浇瀹㈡埛绯荤粺鑿滃崟琛ㄦ暟鎹鍏ユā鏉�")]
+ [ApiDescriptionSettings(Name = "Import"), HttpGet, NonUnify]
+ public IActionResult DownloadTemplate()
+ {
+ return ExcelHelper.ExportTemplate(new List<ExportFBS_MenuOutput>(), "瀹㈡埛绯荤粺鑿滃崟琛ㄥ鍏ユā鏉�");
+ }
+
+ private static readonly object _fBS_MenuImportLock = new object();
+ /// <summary>
+ /// 瀵煎叆瀹㈡埛绯荤粺鑿滃崟琛ㄨ褰� 馃捑
+ /// </summary>
+ /// <returns></returns>
+ [DisplayName("瀵煎叆瀹㈡埛绯荤粺鑿滃崟琛ㄨ褰�")]
+ [ApiDescriptionSettings(Name = "Import"), HttpPost, NonUnify, UnitOfWork]
+ public IActionResult ImportData([Required] IFormFile file)
+ {
+ lock (_fBS_MenuImportLock)
+ {
+ var stream = ExcelHelper.ImportData<ImportFBS_MenuInput, FBS_Menu>(file, (list, markerErrorAction) =>
+ {
+ _sqlSugarClient.Utilities.PageEach(list, 2048, pageItems =>
+ {
+
+ // 鏍¢獙骞惰繃婊ゅ繀濉熀鏈被鍨嬩负null鐨勫瓧娈�
+ var rows = pageItems.Where(x => {
+ if (!string.IsNullOrWhiteSpace(x.Error)) return false;
+ if (x.Pid == null){
+ x.Error = "鐖禝d涓嶈兘涓虹┖";
+ return false;
+ }
+ if (!string.IsNullOrWhiteSpace(x.Error)) return false;
+ if (x.Type == null){
+ x.Error = "鑿滃崟绫诲瀷涓嶈兘涓虹┖";
+ return false;
+ }
+ if (!string.IsNullOrWhiteSpace(x.Error)) return false;
+ if (x.IsIframe == null){
+ x.Error = "鏄惁鍐呭祵涓嶈兘涓虹┖";
+ return false;
+ }
+ if (!string.IsNullOrWhiteSpace(x.Error)) return false;
+ if (x.IsHide == null){
+ x.Error = "鏄惁闅愯棌涓嶈兘涓虹┖";
+ return false;
+ }
+ if (!string.IsNullOrWhiteSpace(x.Error)) return false;
+ if (x.IsKeepAlive == null){
+ x.Error = "鏄惁缂撳瓨涓嶈兘涓虹┖";
+ return false;
+ }
+ if (!string.IsNullOrWhiteSpace(x.Error)) return false;
+ if (x.IsAffix == null){
+ x.Error = "鏄惁鍥哄畾涓嶈兘涓虹┖";
+ return false;
+ }
+ if (!string.IsNullOrWhiteSpace(x.Error)) return false;
+ if (x.OrderNo == null){
+ x.Error = "鎺掑簭涓嶈兘涓虹┖";
+ return false;
+ }
+ if (!string.IsNullOrWhiteSpace(x.Error)) return false;
+ if (x.Status == null){
+ x.Error = "鐘舵�佷笉鑳戒负绌�";
+ return false;
+ }
+ return true;
+ }).Adapt<List<FBS_Menu>>();
+
+ var storageable = _fBS_MenuRep.Context.Storageable(rows)
+ .SplitError(it => it.Item.Name?.Length > 64, "璺敱鍚嶇О闀垮害涓嶈兘瓒呰繃64涓瓧绗�")
+ .SplitError(it => it.Item.Path?.Length > 128, "璺敱鍦板潃闀垮害涓嶈兘瓒呰繃128涓瓧绗�")
+ .SplitError(it => it.Item.Component?.Length > 128, "缁勪欢璺緞闀垮害涓嶈兘瓒呰繃128涓瓧绗�")
+ .SplitError(it => it.Item.Redirect?.Length > 128, "閲嶅畾鍚戦暱搴︿笉鑳借秴杩�128涓瓧绗�")
+ .SplitError(it => it.Item.Permission?.Length > 128, "鏉冮檺鏍囪瘑闀垮害涓嶈兘瓒呰繃128涓瓧绗�")
+ .SplitError(it => string.IsNullOrWhiteSpace(it.Item.Title), "鑿滃崟鍚嶇О涓嶈兘涓虹┖")
+ .SplitError(it => it.Item.Title?.Length > 64, "鑿滃崟鍚嶇О闀垮害涓嶈兘瓒呰繃64涓瓧绗�")
+ .SplitError(it => it.Item.Icon?.Length > 128, "鍥炬爣闀垮害涓嶈兘瓒呰繃128涓瓧绗�")
+ .SplitError(it => it.Item.OutLink?.Length > 256, "澶栭摼閾炬帴闀垮害涓嶈兘瓒呰繃256涓瓧绗�")
+ .SplitError(it => it.Item.Remark?.Length > 256, "澶囨敞闀垮害涓嶈兘瓒呰繃256涓瓧绗�")
+ .SplitInsert(_ => true)
+ .ToStorage();
+
+ storageable.AsInsertable.ExecuteCommand();// 涓嶅瓨鍦ㄦ彃鍏�
+ storageable.AsUpdateable.ExecuteCommand();// 瀛樺湪鏇存柊
+
+ // 鏍囪閿欒淇℃伅
+ markerErrorAction.Invoke(storageable, pageItems, rows);
+ });
+ });
+
+ return stream;
+ }
+ }
+}
diff --git a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Role/Dto/FBS_RoleDto.cs b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Role/Dto/FBS_RoleDto.cs
new file mode 100644
index 0000000..f65eefc
--- /dev/null
+++ b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Role/Dto/FBS_RoleDto.cs
@@ -0,0 +1,86 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+using Admin.NET.Core;
+
+namespace FZCZTB.Net.CustomerSYSTem.Service.FBS_Role.Dto;
+
+/// <summary>
+/// 瀹㈡埛瑙掕壊杈撳嚭鍙傛暟
+/// </summary>
+public class FBS_RoleDto
+{
+ /// <summary>
+ /// 涓婚敭Id
+ /// </summary>
+ public long Id { get; set; }
+
+ /// <summary>
+ /// 鍚嶇О
+ /// </summary>
+ public string? Name { get; set; }
+
+ /// <summary>
+ /// 缂栫爜
+ /// </summary>
+ public string? Code { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ public int? OrderNo { get; set; }
+
+ /// <summary>
+ /// 鏁版嵁鑼冨洿
+ /// </summary>
+ public DataScopeEnum DataScope { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ public string? Remark { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ public StatusEnum Status { get; set; }
+
+ /// <summary>
+ /// 绉熸埛Id
+ /// </summary>
+ public long? TenantId { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鏃堕棿
+ /// </summary>
+ public DateTime? CreateTime { get; set; }
+
+ /// <summary>
+ /// 鏇存柊鏃堕棿
+ /// </summary>
+ public DateTime? UpdateTime { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鑰匢d
+ /// </summary>
+ public long? CreateUserId { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鑰呭鍚�
+ /// </summary>
+ public string? CreateUserName { get; set; }
+
+ /// <summary>
+ /// 淇敼鑰匢d
+ /// </summary>
+ public long? UpdateUserId { get; set; }
+
+ /// <summary>
+ /// 淇敼鑰呭鍚�
+ /// </summary>
+ public string? UpdateUserName { get; set; }
+
+}
diff --git a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Role/Dto/FBS_RoleInput.cs b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Role/Dto/FBS_RoleInput.cs
new file mode 100644
index 0000000..0b8a25f
--- /dev/null
+++ b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Role/Dto/FBS_RoleInput.cs
@@ -0,0 +1,266 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+using Admin.NET.Core;
+using System.ComponentModel.DataAnnotations;
+using Magicodes.ExporterAndImporter.Core;
+using Magicodes.ExporterAndImporter.Excel;
+
+namespace FZCZTB.Net.CustomerSYSTem.Service.FBS_Role.Dto;
+
+/// <summary>
+/// 瀹㈡埛瑙掕壊鍩虹杈撳叆鍙傛暟
+/// </summary>
+public class FBS_RoleBaseInput
+{
+ /// <summary>
+ /// 涓婚敭Id
+ /// </summary>
+ public virtual long? Id { get; set; }
+
+ /// <summary>
+ /// 鍚嶇О
+ /// </summary>
+ public virtual string? Name { get; set; }
+
+ /// <summary>
+ /// 缂栫爜
+ /// </summary>
+ public virtual string? Code { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ public virtual int? OrderNo { get; set; }
+
+ /// <summary>
+ /// 鏁版嵁鑼冨洿
+ /// </summary>
+ [Dict(nameof(DataScopeEnum), AllowNullValue = true)]
+ public virtual DataScopeEnum? DataScope { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ public virtual string? Remark { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ [Dict(nameof(StatusEnum), AllowNullValue = true)]
+ public virtual StatusEnum? Status { get; set; }
+
+}
+
+/// <summary>
+/// 瀹㈡埛瑙掕壊鍒嗛〉鏌ヨ杈撳叆鍙傛暟
+/// </summary>
+public class PageFBS_RoleInput : BasePageInput
+{
+ /// <summary>
+ /// 鍚嶇О
+ /// </summary>
+ public string? Name { get; set; }
+
+ /// <summary>
+ /// 缂栫爜
+ /// </summary>
+ public string? Code { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ public int? OrderNo { get; set; }
+
+ /// <summary>
+ /// 鏁版嵁鑼冨洿
+ /// </summary>
+ [Dict(nameof(DataScopeEnum), AllowNullValue = true)]
+ public DataScopeEnum? DataScope { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ public string? Remark { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ [Dict(nameof(StatusEnum), AllowNullValue = true)]
+ public StatusEnum? Status { get; set; }
+
+ /// <summary>
+ /// 閫変腑涓婚敭鍒楄〃
+ /// </summary>
+ public List<long> SelectKeyList { get; set; }
+}
+
+/// <summary>
+/// 瀹㈡埛瑙掕壊澧炲姞杈撳叆鍙傛暟
+/// </summary>
+public class AddFBS_RoleInput
+{
+ /// <summary>
+ /// 鍚嶇О
+ /// </summary>
+ [MaxLength(64, ErrorMessage = "鍚嶇О瀛楃闀垮害涓嶈兘瓒呰繃64")]
+ public string? Name { get; set; }
+
+ /// <summary>
+ /// 缂栫爜
+ /// </summary>
+ [MaxLength(64, ErrorMessage = "缂栫爜瀛楃闀垮害涓嶈兘瓒呰繃64")]
+ public string? Code { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ public int? OrderNo { get; set; }
+
+ /// <summary>
+ /// 鏁版嵁鑼冨洿
+ /// </summary>
+ [Dict(nameof(DataScopeEnum), AllowNullValue = true)]
+ public DataScopeEnum? DataScope { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ [MaxLength(128, ErrorMessage = "澶囨敞瀛楃闀垮害涓嶈兘瓒呰繃128")]
+ public string? Remark { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ [Dict(nameof(StatusEnum), AllowNullValue = true)]
+ public StatusEnum? Status { get; set; }
+
+}
+
+/// <summary>
+/// 瀹㈡埛瑙掕壊鍒犻櫎杈撳叆鍙傛暟
+/// </summary>
+public class DeleteFBS_RoleInput
+{
+ /// <summary>
+ /// 涓婚敭Id
+ /// </summary>
+ [Required(ErrorMessage = "涓婚敭Id涓嶈兘涓虹┖")]
+ public long? Id { get; set; }
+
+}
+
+/// <summary>
+/// 瀹㈡埛瑙掕壊鏇存柊杈撳叆鍙傛暟
+/// </summary>
+public class UpdateFBS_RoleInput
+{
+ /// <summary>
+ /// 涓婚敭Id
+ /// </summary>
+ [Required(ErrorMessage = "涓婚敭Id涓嶈兘涓虹┖")]
+ public long? Id { get; set; }
+
+ /// <summary>
+ /// 鍚嶇О
+ /// </summary>
+ [MaxLength(64, ErrorMessage = "鍚嶇О瀛楃闀垮害涓嶈兘瓒呰繃64")]
+ public string? Name { get; set; }
+
+ /// <summary>
+ /// 缂栫爜
+ /// </summary>
+ [MaxLength(64, ErrorMessage = "缂栫爜瀛楃闀垮害涓嶈兘瓒呰繃64")]
+ public string? Code { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ public int? OrderNo { get; set; }
+
+ /// <summary>
+ /// 鏁版嵁鑼冨洿
+ /// </summary>
+ [Dict(nameof(DataScopeEnum), AllowNullValue = true)]
+ public DataScopeEnum? DataScope { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ [MaxLength(128, ErrorMessage = "澶囨敞瀛楃闀垮害涓嶈兘瓒呰繃128")]
+ public string? Remark { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ [Dict(nameof(StatusEnum), AllowNullValue = true)]
+ public StatusEnum? Status { get; set; }
+
+}
+
+/// <summary>
+/// 瀹㈡埛瑙掕壊涓婚敭鏌ヨ杈撳叆鍙傛暟
+/// </summary>
+public class QueryByIdFBS_RoleInput : DeleteFBS_RoleInput
+{
+}
+
+/// <summary>
+/// 璁剧疆鐘舵�佽緭鍏ュ弬鏁�
+/// </summary>
+public class SetFBS_RoleStatusInput : BaseStatusInput
+{
+}
+
+/// <summary>
+/// 瀹㈡埛瑙掕壊鏁版嵁瀵煎叆瀹炰綋
+/// </summary>
+[ExcelImporter(SheetIndex = 1, IsOnlyErrorRows = true)]
+public class ImportFBS_RoleInput : BaseImportInput
+{
+ /// <summary>
+ /// 鍚嶇О
+ /// </summary>
+ [ImporterHeader(Name = "鍚嶇О")]
+ [ExporterHeader("鍚嶇О", Format = "", Width = 25, IsBold = true)]
+ public string? Name { get; set; }
+
+ /// <summary>
+ /// 缂栫爜
+ /// </summary>
+ [ImporterHeader(Name = "缂栫爜")]
+ [ExporterHeader("缂栫爜", Format = "", Width = 25, IsBold = true)]
+ public string? Code { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ [ImporterHeader(Name = "鎺掑簭")]
+ [ExporterHeader("鎺掑簭", Format = "", Width = 25, IsBold = true)]
+ public int? OrderNo { get; set; }
+
+ /// <summary>
+ /// 鏁版嵁鑼冨洿
+ /// </summary>
+ [ImporterHeader(Name = "鏁版嵁鑼冨洿")]
+ [ExporterHeader("鏁版嵁鑼冨洿", Format = "", Width = 25, IsBold = true)]
+ public DataScopeEnum? DataScope { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ [ImporterHeader(Name = "澶囨敞")]
+ [ExporterHeader("澶囨敞", Format = "", Width = 25, IsBold = true)]
+ public string? Remark { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ [ImporterHeader(Name = "鐘舵��")]
+ [ExporterHeader("鐘舵��", Format = "", Width = 25, IsBold = true)]
+ public StatusEnum? Status { get; set; }
+
+}
diff --git a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Role/Dto/FBS_RoleOutput.cs b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Role/Dto/FBS_RoleOutput.cs
new file mode 100644
index 0000000..900ad32
--- /dev/null
+++ b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Role/Dto/FBS_RoleOutput.cs
@@ -0,0 +1,95 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+using Admin.NET.Core;
+using Magicodes.ExporterAndImporter.Core;
+namespace FZCZTB.Net.CustomerSYSTem.Service.FBS_Role.Dto;
+
+/// <summary>
+/// 瀹㈡埛瑙掕壊杈撳嚭鍙傛暟
+/// </summary>
+public class FBS_RoleOutput
+{
+ /// <summary>
+ /// 涓婚敭Id
+ /// </summary>
+ public long Id { get; set; }
+
+ /// <summary>
+ /// 鍚嶇О
+ /// </summary>
+ public string? Name { get; set; }
+
+ /// <summary>
+ /// 缂栫爜
+ /// </summary>
+ public string? Code { get; set; }
+
+ /// <summary>
+ /// 鎺掑簭
+ /// </summary>
+ public int? OrderNo { get; set; }
+
+ /// <summary>
+ /// 鏁版嵁鑼冨洿
+ /// </summary>
+ public DataScopeEnum DataScope { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ public string? Remark { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ public StatusEnum Status { get; set; }
+
+ /// <summary>
+ /// 绉熸埛Id
+ /// </summary>
+ public long? TenantId { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鏃堕棿
+ /// </summary>
+ public DateTime? CreateTime { get; set; }
+
+ /// <summary>
+ /// 鏇存柊鏃堕棿
+ /// </summary>
+ public DateTime? UpdateTime { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鑰匢d
+ /// </summary>
+ public long? CreateUserId { get; set; }
+
+ /// <summary>
+ /// 鍒涘缓鑰呭鍚�
+ /// </summary>
+ public string? CreateUserName { get; set; }
+
+ /// <summary>
+ /// 淇敼鑰匢d
+ /// </summary>
+ public long? UpdateUserId { get; set; }
+
+ /// <summary>
+ /// 淇敼鑰呭鍚�
+ /// </summary>
+ public string? UpdateUserName { get; set; }
+
+}
+
+/// <summary>
+/// 瀹㈡埛瑙掕壊鏁版嵁瀵煎叆妯℃澘瀹炰綋
+/// </summary>
+public class ExportFBS_RoleOutput : ImportFBS_RoleInput
+{
+ [ImporterHeader(IsIgnore = true)]
+ [ExporterHeader(IsIgnore = true)]
+ public override string Error { get; set; }
+}
diff --git a/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Role/FBS_RoleService.cs b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Role/FBS_RoleService.cs
new file mode 100644
index 0000000..0eebaa9
--- /dev/null
+++ b/Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_Role/FBS_RoleService.cs
@@ -0,0 +1,209 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+using Admin.NET.Core.Service;
+using Microsoft.AspNetCore.Http;
+
+using Furion.DatabaseAccessor;
+using Furion.FriendlyException;
+using Mapster;
+using SqlSugar;
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
+using Microsoft.AspNetCore.Mvc;
+using Furion.DynamicApiController;
+using Furion.DependencyInjection;
+using Admin.NET.Core;
+using FZCZTB.NET.MD.CutomerMd;
+using FZCZTB.Net.CustomerSYSTem.Service.FBS_Role.Dto;
+using FZCZTB.Net.CustomerSYSTem;
+
+
+/// <summary>
+/// 瀹㈡埛瑙掕壊鏈嶅姟 馃З
+/// </summary>
+[ApiDescriptionSettings(CustomerSYSTemConst.GroupName, Order = 100)]
+public class FBS_RoleService : IDynamicApiController, ITransient
+{
+ private readonly SqlSugarRepository<FBS_Role> _fBS_RoleRep;
+ private readonly ISqlSugarClient _sqlSugarClient;
+
+ public FBS_RoleService(SqlSugarRepository<FBS_Role> fBS_RoleRep, ISqlSugarClient sqlSugarClient)
+ {
+ _fBS_RoleRep = fBS_RoleRep;
+ _sqlSugarClient = sqlSugarClient;
+ }
+
+ /// <summary>
+ /// 鍒嗛〉鏌ヨ瀹㈡埛瑙掕壊 馃敄
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("鍒嗛〉鏌ヨ瀹㈡埛瑙掕壊")]
+ [ApiDescriptionSettings(Name = "Page"), HttpPost]
+ public async Task<SqlSugarPagedList<FBS_RoleOutput>> Page(PageFBS_RoleInput input)
+ {
+ input.Keyword = input.Keyword?.Trim();
+ var query = _fBS_RoleRep.AsQueryable()
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Keyword), u => u.Name.Contains(input.Keyword) || u.Code.Contains(input.Keyword) || u.Remark.Contains(input.Keyword))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Name), u => u.Name.Contains(input.Name.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Code), u => u.Code.Contains(input.Code.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Remark), u => u.Remark.Contains(input.Remark.Trim()))
+ .WhereIF(input.OrderNo != null, u => u.OrderNo == input.OrderNo)
+ .WhereIF(input.DataScope.HasValue, u => u.DataScope == input.DataScope)
+ .WhereIF(input.Status.HasValue, u => u.Status == input.Status)
+ .Select<FBS_RoleOutput>();
+ return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
+ }
+
+ /// <summary>
+ /// 鑾峰彇瀹㈡埛瑙掕壊璇︽儏 鈩癸笍
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("鑾峰彇瀹㈡埛瑙掕壊璇︽儏")]
+ [ApiDescriptionSettings(Name = "Detail"), HttpGet]
+ public async Task<FBS_Role> Detail([FromQuery] QueryByIdFBS_RoleInput input)
+ {
+ return await _fBS_RoleRep.GetFirstAsync(u => u.Id == input.Id);
+ }
+
+ /// <summary>
+ /// 澧炲姞瀹㈡埛瑙掕壊 鉃�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("澧炲姞瀹㈡埛瑙掕壊")]
+ [ApiDescriptionSettings(Name = "Add"), HttpPost]
+ public async Task<long> Add(AddFBS_RoleInput input)
+ {
+ var entity = input.Adapt<FBS_Role>();
+ return await _fBS_RoleRep.InsertAsync(entity) ? entity.Id : 0;
+ }
+
+ /// <summary>
+ /// 鏇存柊瀹㈡埛瑙掕壊 鉁忥笍
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("鏇存柊瀹㈡埛瑙掕壊")]
+ [ApiDescriptionSettings(Name = "Update"), HttpPost]
+ public async Task Update(UpdateFBS_RoleInput input)
+ {
+ var entity = input.Adapt<FBS_Role>();
+ await _fBS_RoleRep.AsUpdateable(entity)
+ .ExecuteCommandAsync();
+ }
+
+ /// <summary>
+ /// 鍒犻櫎瀹㈡埛瑙掕壊 鉂�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("鍒犻櫎瀹㈡埛瑙掕壊")]
+ [ApiDescriptionSettings(Name = "Delete"), HttpPost]
+ public async Task Delete(DeleteFBS_RoleInput input)
+ {
+ var entity = await _fBS_RoleRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
+ // await _fBS_RoleRep.FakeDeleteAsync(entity); //鍋囧垹闄�
+ await _fBS_RoleRep.DeleteAsync(entity); //鐪熷垹闄�
+ }
+
+ /// <summary>
+ /// 鎵归噺鍒犻櫎瀹㈡埛瑙掕壊 鉂�
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("鎵归噺鍒犻櫎瀹㈡埛瑙掕壊")]
+ [ApiDescriptionSettings(Name = "BatchDelete"), HttpPost]
+ public async Task<bool> BatchDelete([Required(ErrorMessage = "涓婚敭鍒楄〃涓嶈兘涓虹┖")] List<DeleteFBS_RoleInput> input)
+ {
+ var exp = Expressionable.Create<FBS_Role>();
+ foreach (var row in input) exp = exp.Or(it => it.Id == row.Id);
+ var list = await _fBS_RoleRep.AsQueryable().Where(exp.ToExpression()).ToListAsync();
+
+ // return await _fBS_RoleRep.FakeDeleteAsync(list); //鍋囧垹闄�
+ return await _fBS_RoleRep.DeleteAsync(list); //鐪熷垹闄�
+ }
+
+ /// <summary>
+ /// 璁剧疆瀹㈡埛瑙掕壊鐘舵�� 馃毇
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("璁剧疆瀹㈡埛瑙掕壊鐘舵��")]
+ [ApiDescriptionSettings(Name = "SetStatus"), HttpPost]
+ public async Task SetFBS_RoleStatus(SetFBS_RoleStatusInput input)
+ {
+ await _fBS_RoleRep.AsUpdateable().SetColumns(u => u.Status, input.Status).Where(u => u.Id == input.Id).ExecuteCommandAsync();
+ }
+
+ /// <summary>
+ /// 瀵煎嚭瀹㈡埛瑙掕壊璁板綍 馃敄
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ [DisplayName("瀵煎嚭瀹㈡埛瑙掕壊璁板綍")]
+ [ApiDescriptionSettings(Name = "Export"), HttpPost, NonUnify]
+ public async Task<IActionResult> Export(PageFBS_RoleInput input)
+ {
+ var list = (await Page(input)).Items?.Adapt<List<ExportFBS_RoleOutput>>() ?? new();
+ if (input.SelectKeyList?.Count > 0) list = list.Where(x => input.SelectKeyList.Contains(x.Id)).ToList();
+ return ExcelHelper.ExportTemplate(list, "瀹㈡埛瑙掕壊瀵煎嚭璁板綍");
+ }
+
+ /// <summary>
+ /// 涓嬭浇瀹㈡埛瑙掕壊鏁版嵁瀵煎叆妯℃澘 猬囷笍
+ /// </summary>
+ /// <returns></returns>
+ [DisplayName("涓嬭浇瀹㈡埛瑙掕壊鏁版嵁瀵煎叆妯℃澘")]
+ [ApiDescriptionSettings(Name = "Import"), HttpGet, NonUnify]
+ public IActionResult DownloadTemplate()
+ {
+ return ExcelHelper.ExportTemplate(new List<ExportFBS_RoleOutput>(), "瀹㈡埛瑙掕壊瀵煎叆妯℃澘");
+ }
+
+ private static readonly object _fBS_RoleImportLock = new object();
+ /// <summary>
+ /// 瀵煎叆瀹㈡埛瑙掕壊璁板綍 馃捑
+ /// </summary>
+ /// <returns></returns>
+ [DisplayName("瀵煎叆瀹㈡埛瑙掕壊璁板綍")]
+ [ApiDescriptionSettings(Name = "Import"), HttpPost, NonUnify, UnitOfWork]
+ public IActionResult ImportData([Required] IFormFile file)
+ {
+ lock (_fBS_RoleImportLock)
+ {
+ var stream = ExcelHelper.ImportData<ImportFBS_RoleInput, FBS_Role>(file, (list, markerErrorAction) =>
+ {
+ _sqlSugarClient.Utilities.PageEach(list, 2048, pageItems =>
+ {
+
+ // 鏍¢獙骞惰繃婊ゅ繀濉熀鏈被鍨嬩负null鐨勫瓧娈�
+ var rows = pageItems.Where(x =>
+ {
+ return true;
+ }).Adapt<List<FBS_Role>>();
+
+ var storageable = _fBS_RoleRep.Context.Storageable(rows)
+ .SplitError(it => it.Item.Name?.Length > 64, "鍚嶇О闀垮害涓嶈兘瓒呰繃64涓瓧绗�")
+ .SplitError(it => it.Item.Code?.Length > 64, "缂栫爜闀垮害涓嶈兘瓒呰繃64涓瓧绗�")
+ .SplitError(it => it.Item.Remark?.Length > 128, "澶囨敞闀垮害涓嶈兘瓒呰繃128涓瓧绗�")
+ .SplitInsert(_ => true)
+ .ToStorage();
+
+ storageable.AsInsertable.ExecuteCommand();// 涓嶅瓨鍦ㄦ彃鍏�
+ storageable.AsUpdateable.ExecuteCommand();// 瀛樺湪鏇存柊
+
+ // 鏍囪閿欒淇℃伅
+ markerErrorAction.Invoke(storageable, pageItems, rows);
+ });
+ });
+
+ return stream;
+ }
+ }
+}
diff --git a/Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/ADPenaltyService.cs b/Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/ADPenaltyService.cs
index b16c340..4300b44 100644
--- a/Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/ADPenaltyService.cs
+++ b/Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/ADPenaltyService.cs
@@ -92,9 +92,7 @@
{
var entity = input.Adapt<ADPenalty>();
await _aDPenaltyRep.AsUpdateable(entity)
- .IgnoreColumns(u => new {
- u.Url,
- })
+
.ExecuteCommandAsync();
}
diff --git a/Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/Dto/ADPenaltyInput.cs b/Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/Dto/ADPenaltyInput.cs
index 0a7ffff..bb23e15 100644
--- a/Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/Dto/ADPenaltyInput.cs
+++ b/Admin.NET/FZCZTB.TSCL.Application/Service/ADPenalty/Dto/ADPenaltyInput.cs
@@ -46,7 +46,12 @@
/// 閲囪喘鐩戠潱閮ㄩ棬鍚嶇О
/// </summary>
public virtual string? SupervisionDepartment { get; set; }
-
+
+ /// <summary>
+ /// 绾夸笂鍦板潃
+ /// </summary>
+ public string? Url { get; set; }
+
}
/// <summary>
@@ -113,7 +118,11 @@
/// </summary>
[MaxLength(255, ErrorMessage = "閲囪喘鐩戠潱閮ㄩ棬鍚嶇О瀛楃闀垮害涓嶈兘瓒呰繃255")]
public string? SupervisionDepartment { get; set; }
-
+ /// <summary>
+ /// 绾夸笂鍦板潃
+ /// </summary>
+ public string? Url { get; set; }
+
}
/// <summary>
@@ -167,7 +176,10 @@
/// </summary>
[MaxLength(255, ErrorMessage = "閲囪喘鐩戠潱閮ㄩ棬鍚嶇О瀛楃闀垮害涓嶈兘瓒呰繃255")]
public string? SupervisionDepartment { get; set; }
-
+ /// <summary>
+ /// 绾夸笂鍦板潃
+ /// </summary>
+ public string? Url { get; set; }
}
/// <summary>
diff --git a/Web/src/api/Customer/fBS_Customer.ts b/Web/src/api/Customer/fBS_Customer.ts
new file mode 100644
index 0000000..dba7ac6
--- /dev/null
+++ b/Web/src/api/Customer/fBS_Customer.ts
@@ -0,0 +1,122 @@
+锘縤mport {useBaseApi} from '/@/api/base';
+
+// 瀹㈡埛琛ㄦ帴鍙f湇鍔�
+export const useFBS_CustomerApi = () => {
+ const baseApi = useBaseApi("fBS_Customer");
+ return {
+ // 鍒嗛〉鏌ヨ瀹㈡埛琛�
+ page: baseApi.page,
+ // 鏌ョ湅瀹㈡埛琛ㄨ缁�
+ detail: baseApi.detail,
+ // 鏂板瀹㈡埛琛�
+ add: baseApi.add,
+ // 鏇存柊瀹㈡埛琛�
+ update: baseApi.update,
+ // 璁剧疆瀹㈡埛琛ㄧ姸鎬�
+ setStatus: baseApi.setStatus,
+ // 鍒犻櫎瀹㈡埛琛�
+ delete: baseApi.delete,
+ // 鎵归噺鍒犻櫎瀹㈡埛琛�
+ batchDelete: baseApi.batchDelete,
+ // 瀵煎嚭瀹㈡埛琛ㄦ暟鎹�
+ exportData: baseApi.exportData,
+ // 瀵煎叆瀹㈡埛琛ㄦ暟鎹�
+ importData: baseApi.importData,
+ // 涓嬭浇瀹㈡埛琛ㄦ暟鎹鍏ユā鏉�
+ downloadTemplate: baseApi.downloadTemplate,
+ }
+}
+
+// 瀹㈡埛琛ㄥ疄浣�
+export interface FBS_Customer {
+ // 涓婚敭Id
+ id: number;
+ // 璐﹀彿
+ account?: string;
+ // 瀵嗙爜
+ password?: string;
+ // 鐪熷疄濮撳悕
+ realName?: string;
+ // 鏄电О
+ nickName: string;
+ // 澶村儚
+ avatar: string;
+ // 鎬у埆
+ sex?: number;
+ // 骞撮緞
+ age?: number;
+ // 鍑虹敓鏃ユ湡
+ birthday: string;
+ // 姘戞棌
+ nation: string;
+ // 鎵嬫満鍙风爜
+ phone: string;
+ // 璇佷欢绫诲瀷
+ cardType?: number;
+ // 韬唤璇佸彿
+ idCardNum: string;
+ // 韬唤璇�
+ idCardPath: string;
+ // 閭
+ email: string;
+ // 鍦板潃
+ address: string;
+ // 鏂囧寲绋嬪害
+ cultureLevel?: number;
+ // 鏀挎不闈㈣矊
+ politicalOutlook: string;
+ // 姣曚笟闄㈡牎
+ college: string;
+ // 鍔炲叕鐢佃瘽
+ officePhone: string;
+ // 绱ф�ヨ仈绯讳汉
+ emergencyContact: string;
+ // 绱ф�ヨ仈绯讳汉鐢佃瘽
+ emergencyPhone: string;
+ // 绱ф�ヨ仈绯讳汉鍦板潃
+ emergencyAddress: string;
+ // 涓汉绠�浠�
+ introduction: string;
+ // 鎺掑簭
+ orderNo?: number;
+ // 鐘舵��
+ status?: number;
+ // 澶囨敞
+ remark: string;
+ // 鑱岀骇
+ posLevel: string;
+ // 鑱岀О
+ posTitle: string;
+ // 鎿呴暱棰嗗煙
+ expertise: string;
+ // 鍔炲叕鍖哄煙
+ officeZone: string;
+ // 鍔炲叕瀹�
+ office: string;
+ // 鍏ヨ亴鏃ユ湡
+ joinDate: string;
+ // 鏈�鏂扮櫥褰旾p
+ lastLoginIp: string;
+ // 鏈�鏂扮櫥褰曞湴鐐�
+ lastLoginAddress: string;
+ // 鏈�鏂扮櫥褰曟椂闂�
+ lastLoginTime: string;
+ // 鏈�鏂扮櫥褰曡澶�
+ lastLoginDevice: string;
+ // 鐢靛瓙绛惧悕
+ signature: string;
+ // 绉熸埛Id
+ tenantId: number;
+ // 鍒涘缓鏃堕棿
+ createTime: string;
+ // 鏇存柊鏃堕棿
+ updateTime: string;
+ // 鍒涘缓鑰匢d
+ createUserId: number;
+ // 鍒涘缓鑰呭鍚�
+ createUserName: string;
+ // 淇敼鑰匢d
+ updateUserId: number;
+ // 淇敼鑰呭鍚�
+ updateUserName: string;
+}
\ No newline at end of file
diff --git a/Web/src/api/Customer/fBS_ExRole.ts b/Web/src/api/Customer/fBS_ExRole.ts
new file mode 100644
index 0000000..676adef
--- /dev/null
+++ b/Web/src/api/Customer/fBS_ExRole.ts
@@ -0,0 +1,60 @@
+锘縤mport {useBaseApi} from '/@/api/base';
+
+// 瀹㈡埛涓诲垎绫昏鑹叉帴鍙f湇鍔�
+export const useFBS_ExRoleApi = () => {
+ const baseApi = useBaseApi("fBS_ExRole");
+ return {
+ // 鍒嗛〉鏌ヨ瀹㈡埛涓诲垎绫昏鑹�
+ page: baseApi.page,
+ // 鏌ョ湅瀹㈡埛涓诲垎绫昏鑹茶缁�
+ detail: baseApi.detail,
+ // 鏂板瀹㈡埛涓诲垎绫昏鑹�
+ add: baseApi.add,
+ // 鏇存柊瀹㈡埛涓诲垎绫昏鑹�
+ update: baseApi.update,
+ // 璁剧疆瀹㈡埛涓诲垎绫昏鑹茬姸鎬�
+ setStatus: baseApi.setStatus,
+ // 鍒犻櫎瀹㈡埛涓诲垎绫昏鑹�
+ delete: baseApi.delete,
+ // 鎵归噺鍒犻櫎瀹㈡埛涓诲垎绫昏鑹�
+ batchDelete: baseApi.batchDelete,
+ // 瀵煎嚭瀹㈡埛涓诲垎绫昏鑹叉暟鎹�
+ exportData: baseApi.exportData,
+ // 瀵煎叆瀹㈡埛涓诲垎绫昏鑹叉暟鎹�
+ importData: baseApi.importData,
+ // 涓嬭浇瀹㈡埛涓诲垎绫昏鑹叉暟鎹鍏ユā鏉�
+ downloadTemplate: baseApi.downloadTemplate,
+ }
+}
+
+// 瀹㈡埛涓诲垎绫昏鑹插疄浣�
+export interface FBS_ExRole {
+ // 涓婚敭Id
+ id: number;
+ // 鍚嶇О
+ name?: string;
+ // 缂栫爜
+ code: string;
+ // 鎺掑簭
+ orderNo?: number;
+ // 鏁版嵁鑼冨洿
+ dataScope?: number;
+ // 澶囨敞
+ remark: string;
+ // 鐘舵��
+ status?: number;
+ // 绉熸埛Id
+ tenantId: number;
+ // 鍒涘缓鏃堕棿
+ createTime: string;
+ // 鏇存柊鏃堕棿
+ updateTime: string;
+ // 鍒涘缓鑰匢d
+ createUserId: number;
+ // 鍒涘缓鑰呭鍚�
+ createUserName: string;
+ // 淇敼鑰匢d
+ updateUserId: number;
+ // 淇敼鑰呭鍚�
+ updateUserName: string;
+}
\ No newline at end of file
diff --git a/Web/src/api/Customer/fBS_Menu.ts b/Web/src/api/Customer/fBS_Menu.ts
new file mode 100644
index 0000000..49db218
--- /dev/null
+++ b/Web/src/api/Customer/fBS_Menu.ts
@@ -0,0 +1,82 @@
+锘縤mport {useBaseApi} from '/@/api/base';
+
+// 瀹㈡埛绯荤粺鑿滃崟琛ㄦ帴鍙f湇鍔�
+export const useFBS_MenuApi = () => {
+ const baseApi = useBaseApi("fBS_Menu");
+ return {
+ // 鍒嗛〉鏌ヨ瀹㈡埛绯荤粺鑿滃崟琛�
+ page: baseApi.page,
+ // 鏌ョ湅瀹㈡埛绯荤粺鑿滃崟琛ㄨ缁�
+ detail: baseApi.detail,
+ // 鏂板瀹㈡埛绯荤粺鑿滃崟琛�
+ add: baseApi.add,
+ // 鏇存柊瀹㈡埛绯荤粺鑿滃崟琛�
+ update: baseApi.update,
+ // 璁剧疆瀹㈡埛绯荤粺鑿滃崟琛ㄧ姸鎬�
+ setStatus: baseApi.setStatus,
+ // 鍒犻櫎瀹㈡埛绯荤粺鑿滃崟琛�
+ delete: baseApi.delete,
+ // 鎵归噺鍒犻櫎瀹㈡埛绯荤粺鑿滃崟琛�
+ batchDelete: baseApi.batchDelete,
+ // 瀵煎嚭瀹㈡埛绯荤粺鑿滃崟琛ㄦ暟鎹�
+ exportData: baseApi.exportData,
+ // 瀵煎叆瀹㈡埛绯荤粺鑿滃崟琛ㄦ暟鎹�
+ importData: baseApi.importData,
+ // 涓嬭浇瀹㈡埛绯荤粺鑿滃崟琛ㄦ暟鎹鍏ユā鏉�
+ downloadTemplate: baseApi.downloadTemplate,
+ }
+}
+
+// 瀹㈡埛绯荤粺鑿滃崟琛ㄥ疄浣�
+export interface FBS_Menu {
+ // 涓婚敭Id
+ id: number;
+ // 鐖禝d
+ pid?: number;
+ // 鑿滃崟绫诲瀷
+ type?: number;
+ // 璺敱鍚嶇О
+ name: string;
+ // 璺敱鍦板潃
+ path: string;
+ // 缁勪欢璺緞
+ component: string;
+ // 閲嶅畾鍚�
+ redirect: string;
+ // 鏉冮檺鏍囪瘑
+ permission: string;
+ // 鑿滃崟鍚嶇О
+ title?: string;
+ // 鍥炬爣
+ icon: string;
+ // 鏄惁鍐呭祵
+ isIframe?: boolean;
+ // 澶栭摼閾炬帴
+ outLink: string;
+ // 鏄惁闅愯棌
+ isHide?: boolean;
+ // 鏄惁缂撳瓨
+ isKeepAlive?: boolean;
+ // 鏄惁鍥哄畾
+ isAffix?: boolean;
+ // 鎺掑簭
+ orderNo?: number;
+ // 鐘舵��
+ status?: number;
+ // 澶囨敞
+ remark: string;
+ // 绉熸埛Id
+ tenantId: number;
+ // 鍒涘缓鏃堕棿
+ createTime: string;
+ // 鏇存柊鏃堕棿
+ updateTime: string;
+ // 鍒涘缓鑰匢d
+ createUserId: number;
+ // 鍒涘缓鑰呭鍚�
+ createUserName: string;
+ // 淇敼鑰匢d
+ updateUserId: number;
+ // 淇敼鑰呭鍚�
+ updateUserName: string;
+}
\ No newline at end of file
diff --git a/Web/src/api/Customer/fBS_Role.ts b/Web/src/api/Customer/fBS_Role.ts
new file mode 100644
index 0000000..cf7d987
--- /dev/null
+++ b/Web/src/api/Customer/fBS_Role.ts
@@ -0,0 +1,60 @@
+锘縤mport {useBaseApi} from '/@/api/base';
+
+// 瀹㈡埛瑙掕壊鎺ュ彛鏈嶅姟
+export const useFBS_RoleApi = () => {
+ const baseApi = useBaseApi("fBS_Role");
+ return {
+ // 鍒嗛〉鏌ヨ瀹㈡埛瑙掕壊
+ page: baseApi.page,
+ // 鏌ョ湅瀹㈡埛瑙掕壊璇︾粏
+ detail: baseApi.detail,
+ // 鏂板瀹㈡埛瑙掕壊
+ add: baseApi.add,
+ // 鏇存柊瀹㈡埛瑙掕壊
+ update: baseApi.update,
+ // 璁剧疆瀹㈡埛瑙掕壊鐘舵��
+ setStatus: baseApi.setStatus,
+ // 鍒犻櫎瀹㈡埛瑙掕壊
+ delete: baseApi.delete,
+ // 鎵归噺鍒犻櫎瀹㈡埛瑙掕壊
+ batchDelete: baseApi.batchDelete,
+ // 瀵煎嚭瀹㈡埛瑙掕壊鏁版嵁
+ exportData: baseApi.exportData,
+ // 瀵煎叆瀹㈡埛瑙掕壊鏁版嵁
+ importData: baseApi.importData,
+ // 涓嬭浇瀹㈡埛瑙掕壊鏁版嵁瀵煎叆妯℃澘
+ downloadTemplate: baseApi.downloadTemplate,
+ }
+}
+
+// 瀹㈡埛瑙掕壊瀹炰綋
+export interface FBS_Role {
+ // 涓婚敭Id
+ id: number;
+ // 鍚嶇О
+ name: string;
+ // 缂栫爜
+ code: string;
+ // 鎺掑簭
+ orderNo: number;
+ // 鏁版嵁鑼冨洿
+ dataScope: number;
+ // 澶囨敞
+ remark: string;
+ // 鐘舵��
+ status: number;
+ // 绉熸埛Id
+ tenantId: number;
+ // 鍒涘缓鏃堕棿
+ createTime: string;
+ // 鏇存柊鏃堕棿
+ updateTime: string;
+ // 鍒涘缓鑰匢d
+ createUserId: number;
+ // 鍒涘缓鑰呭鍚�
+ createUserName: string;
+ // 淇敼鑰匢d
+ updateUserId: number;
+ // 淇敼鑰呭鍚�
+ updateUserName: string;
+}
\ No newline at end of file
diff --git a/Web/src/api/Customer/fB_Customer.ts b/Web/src/api/Customer/fB_Customer.ts
new file mode 100644
index 0000000..38ebc9d
--- /dev/null
+++ b/Web/src/api/Customer/fB_Customer.ts
@@ -0,0 +1,122 @@
+锘縤mport {useBaseApi} from '/@/api/base';
+
+// 瀹㈡埛琛ㄦ帴鍙f湇鍔�
+export const useFB_CustomerApi = () => {
+ const baseApi = useBaseApi("fB_Customer");
+ return {
+ // 鍒嗛〉鏌ヨ瀹㈡埛琛�
+ page: baseApi.page,
+ // 鏌ョ湅瀹㈡埛琛ㄨ缁�
+ detail: baseApi.detail,
+ // 鏂板瀹㈡埛琛�
+ add: baseApi.add,
+ // 鏇存柊瀹㈡埛琛�
+ update: baseApi.update,
+ // 璁剧疆瀹㈡埛琛ㄧ姸鎬�
+ setStatus: baseApi.setStatus,
+ // 鍒犻櫎瀹㈡埛琛�
+ delete: baseApi.delete,
+ // 鎵归噺鍒犻櫎瀹㈡埛琛�
+ batchDelete: baseApi.batchDelete,
+ // 瀵煎嚭瀹㈡埛琛ㄦ暟鎹�
+ exportData: baseApi.exportData,
+ // 瀵煎叆瀹㈡埛琛ㄦ暟鎹�
+ importData: baseApi.importData,
+ // 涓嬭浇瀹㈡埛琛ㄦ暟鎹鍏ユā鏉�
+ downloadTemplate: baseApi.downloadTemplate,
+ }
+}
+
+// 瀹㈡埛琛ㄥ疄浣�
+export interface FB_Customer {
+ // 涓婚敭Id
+ id: number;
+ // 璐﹀彿
+ account?: string;
+ // 瀵嗙爜
+ password?: string;
+ // 鐪熷疄濮撳悕
+ realName?: string;
+ // 鏄电О
+ nickName: string;
+ // 澶村儚
+ avatar: string;
+ // 鎬у埆
+ sex?: number;
+ // 骞撮緞
+ age?: number;
+ // 鍑虹敓鏃ユ湡
+ birthday: string;
+ // 姘戞棌
+ nation: string;
+ // 鎵嬫満鍙风爜
+ phone: string;
+ // 璇佷欢绫诲瀷
+ cardType?: number;
+ // 韬唤璇佸彿
+ idCardNum: string;
+ // 韬唤璇�
+ idCardPath: string;
+ // 閭
+ email: string;
+ // 鍦板潃
+ address: string;
+ // 鏂囧寲绋嬪害
+ cultureLevel?: number;
+ // 鏀挎不闈㈣矊
+ politicalOutlook: string;
+ // 姣曚笟闄㈡牎
+ college: string;
+ // 鍔炲叕鐢佃瘽
+ officePhone: string;
+ // 绱ф�ヨ仈绯讳汉
+ emergencyContact: string;
+ // 绱ф�ヨ仈绯讳汉鐢佃瘽
+ emergencyPhone: string;
+ // 绱ф�ヨ仈绯讳汉鍦板潃
+ emergencyAddress: string;
+ // 涓汉绠�浠�
+ introduction: string;
+ // 鎺掑簭
+ orderNo?: number;
+ // 鐘舵��
+ status?: number;
+ // 澶囨敞
+ remark: string;
+ // 鑱岀骇
+ posLevel: string;
+ // 鑱岀О
+ posTitle: string;
+ // 鎿呴暱棰嗗煙
+ expertise: string;
+ // 鍔炲叕鍖哄煙
+ officeZone: string;
+ // 鍔炲叕瀹�
+ office: string;
+ // 鍏ヨ亴鏃ユ湡
+ joinDate: string;
+ // 鏈�鏂扮櫥褰旾p
+ lastLoginIp: string;
+ // 鏈�鏂扮櫥褰曞湴鐐�
+ lastLoginAddress: string;
+ // 鏈�鏂扮櫥褰曟椂闂�
+ lastLoginTime: string;
+ // 鏈�鏂扮櫥褰曡澶�
+ lastLoginDevice: string;
+ // 鐢靛瓙绛惧悕
+ signature: string;
+ // 绉熸埛Id
+ tenantId: number;
+ // 鍒涘缓鏃堕棿
+ createTime: string;
+ // 鏇存柊鏃堕棿
+ updateTime: string;
+ // 鍒涘缓鑰匢d
+ createUserId: number;
+ // 鍒涘缓鑰呭鍚�
+ createUserName: string;
+ // 淇敼鑰匢d
+ updateUserId: number;
+ // 淇敼鑰呭鍚�
+ updateUserName: string;
+}
\ No newline at end of file
diff --git a/Web/src/api/Customer/fB_CustomerRole.ts b/Web/src/api/Customer/fB_CustomerRole.ts
new file mode 100644
index 0000000..278771e
--- /dev/null
+++ b/Web/src/api/Customer/fB_CustomerRole.ts
@@ -0,0 +1,36 @@
+锘縤mport {useBaseApi} from '/@/api/base';
+
+// 瀹㈡埛鑿滃崟琛ㄦ帴鍙f湇鍔�
+export const useFB_CustomerRoleApi = () => {
+ const baseApi = useBaseApi("fB_CustomerRole");
+ return {
+ // 鍒嗛〉鏌ヨ瀹㈡埛鑿滃崟琛�
+ page: baseApi.page,
+ // 鏌ョ湅瀹㈡埛鑿滃崟琛ㄨ缁�
+ detail: baseApi.detail,
+ // 鏂板瀹㈡埛鑿滃崟琛�
+ add: baseApi.add,
+ // 鏇存柊瀹㈡埛鑿滃崟琛�
+ update: baseApi.update,
+ // 鍒犻櫎瀹㈡埛鑿滃崟琛�
+ delete: baseApi.delete,
+ // 鎵归噺鍒犻櫎瀹㈡埛鑿滃崟琛�
+ batchDelete: baseApi.batchDelete,
+ // 瀵煎嚭瀹㈡埛鑿滃崟琛ㄦ暟鎹�
+ exportData: baseApi.exportData,
+ // 瀵煎叆瀹㈡埛鑿滃崟琛ㄦ暟鎹�
+ importData: baseApi.importData,
+ // 涓嬭浇瀹㈡埛鑿滃崟琛ㄦ暟鎹鍏ユā鏉�
+ downloadTemplate: baseApi.downloadTemplate,
+ }
+}
+
+// 瀹㈡埛鑿滃崟琛ㄥ疄浣�
+export interface FB_CustomerRole {
+ // 涓婚敭Id
+ id: number;
+ // 鐢ㄦ埛Id
+ cutomerId?: number;
+ // 瑙掕壊Id
+ roleId?: number;
+}
\ No newline at end of file
diff --git a/Web/src/views/Customer/fBS_Customer/component/editDialog.vue b/Web/src/views/Customer/fBS_Customer/component/editDialog.vue
new file mode 100644
index 0000000..6fba3ff
--- /dev/null
+++ b/Web/src/views/Customer/fBS_Customer/component/editDialog.vue
@@ -0,0 +1,240 @@
+锘�<script lang="ts" name="fBS_Customer" setup>
+import { ref, reactive, onMounted } from "vue";
+import { ElMessage } from "element-plus";
+import type { FormRules } from "element-plus";
+import { formatDate } from '/@/utils/formatTime';
+import { useFBS_CustomerApi } from '/@/api/Customer/fBS_Customer';
+
+//鐖剁骇浼犻�掓潵鐨勫嚱鏁帮紝鐢ㄤ簬鍥炶皟
+const emit = defineEmits(["reloadTable"]);
+const fBS_CustomerApi = useFBS_CustomerApi();
+const ruleFormRef = ref();
+
+const state = reactive({
+ title: '',
+ loading: false,
+ showDialog: false,
+ ruleForm: {} as any,
+ stores: {},
+ dropdownData: {} as any,
+});
+
+// 鑷娣诲姞鍏朵粬瑙勫垯
+const rules = ref<FormRules>({
+ account: [{required: true, message: '璇烽�夋嫨璐﹀彿锛�', trigger: 'blur',},],
+ password: [{required: true, message: '璇烽�夋嫨瀵嗙爜锛�', trigger: 'blur',},],
+ realName: [{required: true, message: '璇烽�夋嫨鐪熷疄濮撳悕锛�', trigger: 'blur',},],
+ sex: [{required: true, message: '璇烽�夋嫨鎬у埆锛�', trigger: 'change',},],
+ age: [{required: true, message: '璇烽�夋嫨骞撮緞锛�', trigger: 'blur',},],
+ cardType: [{required: true, message: '璇烽�夋嫨璇佷欢绫诲瀷锛�', trigger: 'change',},],
+ cultureLevel: [{required: true, message: '璇烽�夋嫨鏂囧寲绋嬪害锛�', trigger: 'change',},],
+ orderNo: [{required: true, message: '璇烽�夋嫨鎺掑簭锛�', trigger: 'blur',},],
+ status: [{required: true, message: '璇烽�夋嫨鐘舵�侊紒', trigger: 'change',},],
+});
+
+// 椤甸潰鍔犺浇鏃�
+onMounted(async () => {
+});
+
+// 鎵撳紑寮圭獥
+const openDialog = async (row: any, title: string) => {
+ state.title = title;
+ row = row ?? { status: 1,orderNo: 100, };
+ state.ruleForm = row.id ? await fBS_CustomerApi.detail(row.id).then(res => res.data.result) : JSON.parse(JSON.stringify(row));
+ state.showDialog = true;
+};
+
+// 鍏抽棴寮圭獥
+const closeDialog = () => {
+ emit("reloadTable");
+ state.showDialog = false;
+};
+
+// 鎻愪氦
+const submit = async () => {
+ ruleFormRef.value.validate(async (isValid: boolean, fields?: any) => {
+ if (isValid) {
+ let values = state.ruleForm;
+ await fBS_CustomerApi[state.ruleForm.id ? 'update' : 'add'](values);
+ closeDialog();
+ } else {
+ ElMessage({
+ message: `琛ㄥ崟鏈�${Object.keys(fields).length}澶勯獙璇佸け璐ワ紝璇蜂慨鏀瑰悗鍐嶆彁浜,
+ type: "error",
+ });
+ }
+ });
+};
+
+//灏嗗睘鎬ф垨鑰呭嚱鏁版毚闇茬粰鐖剁粍浠�
+defineExpose({ openDialog });
+</script>
+<template>
+ <div class="fBS_Customer-container">
+ <el-dialog v-model="state.showDialog" :width="800" draggable :close-on-click-modal="false">
+ <template #header>
+ <div style="color: #fff">
+ <span>{{ state.title }}</span>
+ </div>
+ </template>
+ <el-form :model="state.ruleForm" ref="ruleFormRef" label-width="auto" :rules="rules">
+ <el-row :gutter="35">
+ <el-form-item v-show="false">
+ <el-input v-model="state.ruleForm.id" />
+ </el-form-item>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="璐﹀彿" prop="account">
+ <el-input v-model="state.ruleForm.account" placeholder="璇疯緭鍏ヨ处鍙�" maxlength="32" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="瀵嗙爜" prop="password">
+ <el-input v-model="state.ruleForm.password" placeholder="璇疯緭鍏ュ瘑鐮�" maxlength="512" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鐪熷疄濮撳悕" prop="realName">
+ <el-input v-model="state.ruleForm.realName" placeholder="璇疯緭鍏ョ湡瀹炲鍚�" maxlength="32" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鏄电О" prop="nickName">
+ <el-input v-model="state.ruleForm.nickName" placeholder="璇疯緭鍏ユ樀绉�" maxlength="32" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="澶村儚" prop="avatar">
+ <el-input v-model="state.ruleForm.avatar" placeholder="璇疯緭鍏ュご鍍�" maxlength="512" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鎬у埆" prop="sex">
+ <g-sys-dict v-model="state.ruleForm.sex" code="GenderEnum" render-as="select" placeholder="璇烽�夋嫨鎬у埆" clearable filterable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="骞撮緞" prop="age">
+ <el-input-number v-model="state.ruleForm.age" placeholder="璇疯緭鍏ュ勾榫�" clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鍑虹敓鏃ユ湡" prop="birthday">
+ <el-date-picker v-model="state.ruleForm.birthday" type="date" placeholder="鍑虹敓鏃ユ湡" />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="姘戞棌" prop="nation">
+ <el-input v-model="state.ruleForm.nation" placeholder="璇疯緭鍏ユ皯鏃�" maxlength="32" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鎵嬫満鍙风爜" prop="phone">
+ <el-input v-model="state.ruleForm.phone" placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" maxlength="16" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="璇佷欢绫诲瀷" prop="cardType">
+ <g-sys-dict v-model="state.ruleForm.cardType" code="CardTypeEnum" render-as="select" placeholder="璇烽�夋嫨璇佷欢绫诲瀷" clearable filterable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="韬唤璇佸彿" prop="idCardNum">
+ <el-input v-model="state.ruleForm.idCardNum" placeholder="璇疯緭鍏ヨ韩浠借瘉鍙�" maxlength="32" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="韬唤璇�" prop="idCardPath">
+ <el-input v-model="state.ruleForm.idCardPath" placeholder="璇疯緭鍏ヨ韩浠借瘉" maxlength="512" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="閭" prop="email">
+ <el-input v-model="state.ruleForm.email" placeholder="璇疯緭鍏ラ偖绠�" maxlength="64" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鍦板潃" prop="address">
+ <el-input v-model="state.ruleForm.address" placeholder="璇疯緭鍏ュ湴鍧�" maxlength="256" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鏂囧寲绋嬪害" prop="cultureLevel">
+ <g-sys-dict v-model="state.ruleForm.cultureLevel" code="CultureLevelEnum" render-as="select" placeholder="璇烽�夋嫨鏂囧寲绋嬪害" clearable filterable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鏀挎不闈㈣矊" prop="politicalOutlook">
+ <el-input v-model="state.ruleForm.politicalOutlook" placeholder="璇疯緭鍏ユ斂娌婚潰璨�" maxlength="16" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="姣曚笟闄㈡牎" prop="college">
+ <el-input v-model="state.ruleForm.college" placeholder="璇疯緭鍏ユ瘯涓氶櫌鏍�" maxlength="128" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鍔炲叕鐢佃瘽" prop="officePhone">
+ <el-input v-model="state.ruleForm.officePhone" placeholder="璇疯緭鍏ュ姙鍏數璇�" maxlength="16" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="绱ф�ヨ仈绯讳汉" prop="emergencyContact">
+ <el-input v-model="state.ruleForm.emergencyContact" placeholder="璇疯緭鍏ョ揣鎬ヨ仈绯讳汉" maxlength="32" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="绱ф�ヨ仈绯讳汉鐢佃瘽" prop="emergencyPhone">
+ <el-input v-model="state.ruleForm.emergencyPhone" placeholder="璇疯緭鍏ョ揣鎬ヨ仈绯讳汉鐢佃瘽" maxlength="16" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="绱ф�ヨ仈绯讳汉鍦板潃" prop="emergencyAddress">
+ <el-input v-model="state.ruleForm.emergencyAddress" placeholder="璇疯緭鍏ョ揣鎬ヨ仈绯讳汉鍦板潃" maxlength="256" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="涓汉绠�浠�" prop="introduction">
+ <el-input v-model="state.ruleForm.introduction" placeholder="璇疯緭鍏ヤ釜浜虹畝浠�" maxlength="512" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鎺掑簭" prop="orderNo">
+ <el-input-number v-model="state.ruleForm.orderNo" placeholder="璇疯緭鍏ユ帓搴�" clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="state.ruleForm.id" >
+ <el-form-item label="鐘舵��" prop="status">
+ <g-sys-dict v-model="state.ruleForm.status" code="StatusEnum" render-as="select" placeholder="璇烽�夋嫨鐘舵��" clearable filterable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="澶囨敞" prop="remark">
+ <el-input v-model="state.ruleForm.remark" placeholder="璇疯緭鍏ュ娉�" maxlength="256" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鑱岀骇" prop="posLevel">
+ <el-input v-model="state.ruleForm.posLevel" placeholder="璇疯緭鍏ヨ亴绾�" maxlength="32" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鑱岀О" prop="posTitle">
+ <el-input v-model="state.ruleForm.posTitle" placeholder="璇疯緭鍏ヨ亴绉�" maxlength="32" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="() => state.showDialog = false">鍙� 娑�</el-button>
+ <el-button @click="submit" type="primary" v-reclick="1000">纭� 瀹�</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+<style lang="scss" scoped>
+:deep(.el-select), :deep(.el-input-number) {
+ width: 100%;
+}
+</style>
\ No newline at end of file
diff --git a/Web/src/views/Customer/fBS_Customer/index.vue b/Web/src/views/Customer/fBS_Customer/index.vue
new file mode 100644
index 0000000..f1eda49
--- /dev/null
+++ b/Web/src/views/Customer/fBS_Customer/index.vue
@@ -0,0 +1,310 @@
+锘�<script lang="ts" setup name="fBS_Customer">
+import { ref, reactive, onMounted } from "vue";
+import { auth } from '/@/utils/authFunction';
+import { ElMessageBox, ElMessage } from "element-plus";
+import { downloadStreamFile } from "/@/utils/download";
+import { useFBS_CustomerApi } from '/@/api/Customer/fBS_Customer';
+import editDialog from '/@/views/Customer/fBS_Customer/component/editDialog.vue'
+import printDialog from '/@/views/system/print/component/hiprint/preview.vue'
+import ModifyRecord from '/@/components/table/modifyRecord.vue';
+import ImportData from "/@/components/table/importData.vue";
+
+const fBS_CustomerApi = useFBS_CustomerApi();
+const printDialogRef = ref();
+const editDialogRef = ref();
+const importDataRef = ref();
+const state = reactive({
+ exportLoading: false,
+ tableLoading: false,
+ stores: {},
+ showAdvanceQueryUI: false,
+ dropdownData: {} as any,
+ selectData: [] as any[],
+ tableQueryParams: {} as any,
+ tableParams: {
+ page: 1,
+ pageSize: 20,
+ total: 0,
+ field: 'createTime', // 榛樿鐨勬帓搴忓瓧娈�
+ order: 'descending', // 鎺掑簭鏂瑰悜
+ descStr: 'descending', // 闄嶅簭鎺掑簭鐨勫叧閿瓧绗�
+ },
+ tableData: [],
+});
+
+// 椤甸潰鍔犺浇鏃�
+onMounted(async () => {
+});
+
+// 鏌ヨ鎿嶄綔
+const handleQuery = async (params: any = {}) => {
+ state.tableLoading = true;
+ state.tableParams = Object.assign(state.tableParams, params);
+ const result = await fBS_CustomerApi.page(Object.assign(state.tableQueryParams, state.tableParams)).then(res => res.data.result);
+ state.tableParams.total = result?.total;
+ state.tableData = result?.items ?? [];
+ state.tableLoading = false;
+};
+
+// 鍒楁帓搴�
+const sortChange = async (column: any) => {
+ state.tableParams.field = column.prop;
+ state.tableParams.order = column.order;
+ await handleQuery();
+};
+
+// 鍒犻櫎
+const delFBS_Customer = (row: any) => {
+ ElMessageBox.confirm(`纭畾瑕佸垹闄ゅ悧?`, "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ }).then(async () => {
+ await fBS_CustomerApi.delete({ id: row.id });
+ handleQuery();
+ ElMessage.success("鍒犻櫎鎴愬姛");
+ }).catch(() => {});
+};
+
+// 鎵归噺鍒犻櫎
+const batchDelFBS_Customer = () => {
+ ElMessageBox.confirm(`纭畾瑕佸垹闄�${state.selectData.length}鏉¤褰曞悧?`, "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ }).then(async () => {
+ await fBS_CustomerApi.batchDelete(state.selectData.map(u => ({ id: u.id }) )).then(res => {
+ ElMessage.success(`鎴愬姛鎵归噺鍒犻櫎${res.data.result}鏉¤褰昤);
+ handleQuery();
+ });
+ }).catch(() => {});
+};
+
+// 璁剧疆鐘舵��
+const changeFBS_CustomerStatus = async (row: any) => {
+ await fBS_CustomerApi.setStatus({ id: row.id, status: row.status }).then(() => ElMessage.success('鐘舵�佽缃垚鍔�'));
+};
+
+// 瀵煎嚭鏁版嵁
+const exportFBS_CustomerCommand = async (command: string) => {
+ try {
+ state.exportLoading = true;
+ if (command === 'select') {
+ const params = Object.assign({}, state.tableQueryParams, state.tableParams, { selectKeyList: state.selectData.map(u => u.id) });
+ await fBS_CustomerApi.exportData(params).then(res => downloadStreamFile(res));
+ } else if (command === 'current') {
+ const params = Object.assign({}, state.tableQueryParams, state.tableParams);
+ await fBS_CustomerApi.exportData(params).then(res => downloadStreamFile(res));
+ } else if (command === 'all') {
+ const params = Object.assign({}, state.tableQueryParams, state.tableParams, { page: 1, pageSize: 99999999 });
+ await fBS_CustomerApi.exportData(params).then(res => downloadStreamFile(res));
+ }
+ } finally {
+ state.exportLoading = false;
+ }
+}
+
+handleQuery();
+</script>
+<template>
+ <div class="fBS_Customer-container" v-loading="state.exportLoading">
+ <el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
+ <el-form :model="state.tableQueryParams" ref="queryForm" labelWidth="90">
+ <el-row>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
+ <el-form-item label="鍏抽敭瀛�">
+ <el-input v-model="state.tableQueryParams.keyword" clearable placeholder="璇疯緭鍏ユā绯婃煡璇㈠叧閿瓧"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="璐﹀彿">
+ <el-input v-model="state.tableQueryParams.account" clearable placeholder="璇疯緭鍏ヨ处鍙�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鐪熷疄濮撳悕">
+ <el-input v-model="state.tableQueryParams.realName" clearable placeholder="璇疯緭鍏ョ湡瀹炲鍚�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鏄电О">
+ <el-input v-model="state.tableQueryParams.nickName" clearable placeholder="璇疯緭鍏ユ樀绉�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="璇佷欢绫诲瀷">
+ <g-sys-dict v-model="state.tableQueryParams.cardType" code="CardTypeEnum" render-as="select" placeholder="璇烽�夋嫨璇佷欢绫诲瀷" clearable filterable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="韬唤璇�">
+ <el-input v-model="state.tableQueryParams.idCardPath" clearable placeholder="璇疯緭鍏ヨ韩浠借瘉"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鏂囧寲绋嬪害">
+ <g-sys-dict v-model="state.tableQueryParams.cultureLevel" code="CultureLevelEnum" render-as="select" placeholder="璇烽�夋嫨鏂囧寲绋嬪害" clearable filterable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="姣曚笟闄㈡牎">
+ <el-input v-model="state.tableQueryParams.college" clearable placeholder="璇疯緭鍏ユ瘯涓氶櫌鏍�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鍔炲叕鐢佃瘽">
+ <el-input v-model="state.tableQueryParams.officePhone" clearable placeholder="璇疯緭鍏ュ姙鍏數璇�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="绱ф�ヨ仈绯讳汉">
+ <el-input v-model="state.tableQueryParams.emergencyContact" clearable placeholder="璇疯緭鍏ョ揣鎬ヨ仈绯讳汉"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="绱ф�ヨ仈绯讳汉鐢佃瘽">
+ <el-input v-model="state.tableQueryParams.emergencyPhone" clearable placeholder="璇疯緭鍏ョ揣鎬ヨ仈绯讳汉鐢佃瘽"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="绱ф�ヨ仈绯讳汉鍦板潃">
+ <el-input v-model="state.tableQueryParams.emergencyAddress" clearable placeholder="璇疯緭鍏ョ揣鎬ヨ仈绯讳汉鍦板潃"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="涓汉绠�浠�">
+ <el-input v-model="state.tableQueryParams.introduction" clearable placeholder="璇疯緭鍏ヤ釜浜虹畝浠�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鎺掑簭">
+ <el-input-number v-model="state.tableQueryParams.orderNo" clearable placeholder="璇疯緭鍏ユ帓搴�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鐘舵��">
+ <g-sys-dict v-model="state.tableQueryParams.status" code="StatusEnum" render-as="select" placeholder="璇烽�夋嫨鐘舵��" clearable filterable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="澶囨敞">
+ <el-input v-model="state.tableQueryParams.remark" clearable placeholder="璇疯緭鍏ュ娉�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鑱岀骇">
+ <el-input v-model="state.tableQueryParams.posLevel" clearable placeholder="璇疯緭鍏ヨ亴绾�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鑱岀О">
+ <el-input v-model="state.tableQueryParams.posTitle" clearable placeholder="璇疯緭鍏ヨ亴绉�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
+ <el-form-item >
+ <el-button-group style="display: flex; align-items: center;">
+ <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'fBS_Customer:page'" v-reclick="1000"> 鏌ヨ </el-button>
+ <el-button icon="ele-Refresh" @click="() => state.tableQueryParams = {}"> 閲嶇疆 </el-button>
+ <el-button icon="ele-ZoomIn" @click="() => state.showAdvanceQueryUI = true" v-if="!state.showAdvanceQueryUI" style="margin-left:5px;"> 楂樼骇鏌ヨ </el-button>
+ <el-button icon="ele-ZoomOut" @click="() => state.showAdvanceQueryUI = false" v-if="state.showAdvanceQueryUI" style="margin-left:5px;"> 闅愯棌 </el-button>
+ <el-button type="danger" style="margin-left:5px;" icon="ele-Delete" @click="batchDelFBS_Customer" :disabled="state.selectData.length == 0" v-auth="'fBS_Customer:batchDelete'"> 鍒犻櫎 </el-button>
+ <el-button type="primary" style="margin-left:5px;" icon="ele-Plus" @click="editDialogRef.openDialog(null, '鏂板瀹㈡埛琛�')" v-auth="'fBS_Customer:add'"> 鏂板 </el-button>
+ <el-dropdown :show-timeout="70" :hide-timeout="50" @command="exportFBS_CustomerCommand">
+ <el-button type="primary" style="margin-left:5px;" icon="ele-FolderOpened" v-reclick="20000" v-auth="'fBS_Customer:export'"> 瀵煎嚭 </el-button>
+ <template #dropdown>
+ <el-dropdown-menu>
+ <el-dropdown-item command="select" :disabled="state.selectData.length == 0">瀵煎嚭閫変腑</el-dropdown-item>
+ <el-dropdown-item command="current">瀵煎嚭鏈〉</el-dropdown-item>
+ <el-dropdown-item command="all">瀵煎嚭鍏ㄩ儴</el-dropdown-item>
+ </el-dropdown-menu>
+ </template>
+ </el-dropdown>
+ <el-button type="warning" style="margin-left:5px;" icon="ele-MostlyCloudy" @click="importDataRef.openDialog()" v-auth="'fBS_Customer:import'"> 瀵煎叆 </el-button>
+ </el-button-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ </el-card>
+ <el-card class="full-table" shadow="hover" style="margin-top: 5px">
+ <el-table :data="state.tableData" @selection-change="(val: any[]) => { state.selectData = val; }" style="width: 100%" v-loading="state.tableLoading" tooltip-effect="light" row-key="id" @sort-change="sortChange" border>
+ <el-table-column type="selection" width="40" align="center" v-if="auth('fBS_Customer:batchDelete') || auth('fBS_Customer:export')" />
+ <el-table-column type="index" label="搴忓彿" width="55" align="center"/>
+ <el-table-column prop='account' label='璐﹀彿' sortable='custom' show-overflow-tooltip />
+ <el-table-column prop='password' label='瀵嗙爜' show-overflow-tooltip />
+ <el-table-column prop='realName' label='鐪熷疄濮撳悕' sortable='custom' show-overflow-tooltip />
+ <el-table-column prop='nickName' label='鏄电О' sortable='custom' show-overflow-tooltip />
+ <el-table-column prop='avatar' label='澶村儚' show-overflow-tooltip />
+ <el-table-column prop='sex' label='鎬у埆' show-overflow-tooltip>
+ <template #default="scope">
+ <g-sys-dict v-model="scope.row.sex" code="GenderEnum" />
+ </template>
+ </el-table-column>
+ <el-table-column prop='age' label='骞撮緞' show-overflow-tooltip />
+ <el-table-column prop='birthday' label='鍑虹敓鏃ユ湡' show-overflow-tooltip />
+ <el-table-column prop='nation' label='姘戞棌' show-overflow-tooltip />
+ <el-table-column prop='phone' label='鎵嬫満鍙风爜' show-overflow-tooltip />
+ <el-table-column prop='cardType' label='璇佷欢绫诲瀷' show-overflow-tooltip>
+ <template #default="scope">
+ <g-sys-dict v-model="scope.row.cardType" code="CardTypeEnum" />
+ </template>
+ </el-table-column>
+ <el-table-column prop='idCardNum' label='韬唤璇佸彿' show-overflow-tooltip />
+ <el-table-column prop='idCardPath' label='韬唤璇�' show-overflow-tooltip />
+ <el-table-column prop='email' label='閭' show-overflow-tooltip />
+ <el-table-column prop='address' label='鍦板潃' show-overflow-tooltip />
+ <el-table-column prop='cultureLevel' label='鏂囧寲绋嬪害' show-overflow-tooltip>
+ <template #default="scope">
+ <g-sys-dict v-model="scope.row.cultureLevel" code="CultureLevelEnum" />
+ </template>
+ </el-table-column>
+ <el-table-column prop='politicalOutlook' label='鏀挎不闈㈣矊' show-overflow-tooltip />
+ <el-table-column prop='college' label='姣曚笟闄㈡牎' show-overflow-tooltip />
+ <el-table-column prop='officePhone' label='鍔炲叕鐢佃瘽' show-overflow-tooltip />
+ <el-table-column prop='emergencyContact' label='绱ф�ヨ仈绯讳汉' show-overflow-tooltip />
+ <el-table-column prop='emergencyPhone' label='绱ф�ヨ仈绯讳汉鐢佃瘽' show-overflow-tooltip />
+ <el-table-column prop='emergencyAddress' label='绱ф�ヨ仈绯讳汉鍦板潃' show-overflow-tooltip />
+ <el-table-column prop='introduction' label='涓汉绠�浠�' show-overflow-tooltip />
+ <el-table-column prop='orderNo' label='鎺掑簭' show-overflow-tooltip />
+ <el-table-column prop='status' label='鐘舵��' v-auth="'fBS_Customer:setStatus'" show-overflow-tooltip>
+ <template #default="scope">
+ <el-switch v-model="scope.row.status" :active-value="1" :inactive-value="2" size="small" @change="changeFBS_CustomerStatus(scope.row)" />
+ </template>
+ </el-table-column>
+ <el-table-column prop='remark' label='澶囨敞' show-overflow-tooltip />
+ <el-table-column prop='posLevel' label='鑱岀骇' show-overflow-tooltip />
+ <el-table-column prop='posTitle' label='鑱岀О' show-overflow-tooltip />
+ <el-table-column label="淇敼璁板綍" width="100" align="center" show-overflow-tooltip>
+ <template #default="scope">
+ <ModifyRecord :data="scope.row" />
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" width="140" align="center" fixed="right" show-overflow-tooltip v-if="auth('fBS_Customer:update') || auth('fBS_Customer:delete')">
+ <template #default="scope">
+ <el-button icon="ele-Edit" size="small" text type="primary" @click="editDialogRef.openDialog(scope.row, '缂栬緫瀹㈡埛琛�')" v-auth="'fBS_Customer:update'"> 缂栬緫 </el-button>
+ <el-button icon="ele-Delete" size="small" text type="primary" @click="delFBS_Customer(scope.row)" v-auth="'fBS_Customer:delete'"> 鍒犻櫎 </el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-pagination
+ v-model:currentPage="state.tableParams.page"
+ v-model:page-size="state.tableParams.pageSize"
+ @size-change="(val: any) => handleQuery({ pageSize: val })"
+ @current-change="(val: any) => handleQuery({ page: val })"
+ layout="total, sizes, prev, pager, next, jumper"
+ :page-sizes="[10, 20, 50, 100, 200, 500]"
+ :total="state.tableParams.total"
+ size="small"
+ background />
+ <ImportData ref="importDataRef" :import="fBS_CustomerApi.importData" :download="fBS_CustomerApi.downloadTemplate" v-auth="'fBS_Customer:import'" @refresh="handleQuery"/>
+ <printDialog ref="printDialogRef" :title="'鎵撳嵃瀹㈡埛琛�'" @reloadTable="handleQuery" />
+ <editDialog ref="editDialogRef" @reloadTable="handleQuery" />
+ </el-card>
+ </div>
+</template>
+<style scoped>
+:deep(.el-input), :deep(.el-select), :deep(.el-input-number) {
+ width: 100%;
+}
+</style>
\ No newline at end of file
diff --git a/Web/src/views/Customer/fBS_ExRole/component/editDialog.vue b/Web/src/views/Customer/fBS_ExRole/component/editDialog.vue
new file mode 100644
index 0000000..86446b3
--- /dev/null
+++ b/Web/src/views/Customer/fBS_ExRole/component/editDialog.vue
@@ -0,0 +1,125 @@
+锘�<script lang="ts" name="fBS_ExRole" setup>
+import { ref, reactive, onMounted } from "vue";
+import { ElMessage } from "element-plus";
+import type { FormRules } from "element-plus";
+import { formatDate } from '/@/utils/formatTime';
+import { useFBS_ExRoleApi } from '/@/api/Customer/fBS_ExRole';
+
+//鐖剁骇浼犻�掓潵鐨勫嚱鏁帮紝鐢ㄤ簬鍥炶皟
+const emit = defineEmits(["reloadTable"]);
+const fBS_ExRoleApi = useFBS_ExRoleApi();
+const ruleFormRef = ref();
+
+const state = reactive({
+ title: '',
+ loading: false,
+ showDialog: false,
+ ruleForm: {} as any,
+ stores: {},
+ dropdownData: {} as any,
+});
+
+// 鑷娣诲姞鍏朵粬瑙勫垯
+const rules = ref<FormRules>({
+ name: [{required: true, message: '璇烽�夋嫨鍚嶇О锛�', trigger: 'blur',},],
+ orderNo: [{required: true, message: '璇烽�夋嫨鎺掑簭锛�', trigger: 'blur',},],
+ dataScope: [{required: true, message: '璇烽�夋嫨鏁版嵁鑼冨洿锛�', trigger: 'change',},],
+ status: [{required: true, message: '璇烽�夋嫨鐘舵�侊紒', trigger: 'change',},],
+});
+
+// 椤甸潰鍔犺浇鏃�
+onMounted(async () => {
+});
+
+// 鎵撳紑寮圭獥
+const openDialog = async (row: any, title: string) => {
+ state.title = title;
+ row = row ?? { status: 1,orderNo: 100, };
+ state.ruleForm = row.id ? await fBS_ExRoleApi.detail(row.id).then(res => res.data.result) : JSON.parse(JSON.stringify(row));
+ state.showDialog = true;
+};
+
+// 鍏抽棴寮圭獥
+const closeDialog = () => {
+ emit("reloadTable");
+ state.showDialog = false;
+};
+
+// 鎻愪氦
+const submit = async () => {
+ ruleFormRef.value.validate(async (isValid: boolean, fields?: any) => {
+ if (isValid) {
+ let values = state.ruleForm;
+ await fBS_ExRoleApi[state.ruleForm.id ? 'update' : 'add'](values);
+ closeDialog();
+ } else {
+ ElMessage({
+ message: `琛ㄥ崟鏈�${Object.keys(fields).length}澶勯獙璇佸け璐ワ紝璇蜂慨鏀瑰悗鍐嶆彁浜,
+ type: "error",
+ });
+ }
+ });
+};
+
+//灏嗗睘鎬ф垨鑰呭嚱鏁版毚闇茬粰鐖剁粍浠�
+defineExpose({ openDialog });
+</script>
+<template>
+ <div class="fBS_ExRole-container">
+ <el-dialog v-model="state.showDialog" :width="800" draggable :close-on-click-modal="false">
+ <template #header>
+ <div style="color: #fff">
+ <span>{{ state.title }}</span>
+ </div>
+ </template>
+ <el-form :model="state.ruleForm" ref="ruleFormRef" label-width="auto" :rules="rules">
+ <el-row :gutter="35">
+ <el-form-item v-show="false">
+ <el-input v-model="state.ruleForm.id" />
+ </el-form-item>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鍚嶇О" prop="name">
+ <el-input v-model="state.ruleForm.name" placeholder="璇疯緭鍏ュ悕绉�" maxlength="64" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="缂栫爜" prop="code">
+ <el-input v-model="state.ruleForm.code" placeholder="璇疯緭鍏ョ紪鐮�" maxlength="64" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鎺掑簭" prop="orderNo">
+ <el-input-number v-model="state.ruleForm.orderNo" placeholder="璇疯緭鍏ユ帓搴�" clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鏁版嵁鑼冨洿" prop="dataScope">
+ <g-sys-dict v-model="state.ruleForm.dataScope" code="DataScopeEnum" render-as="select" placeholder="璇烽�夋嫨鏁版嵁鑼冨洿" clearable filterable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="澶囨敞" prop="remark">
+ <el-input v-model="state.ruleForm.remark" placeholder="璇疯緭鍏ュ娉�" maxlength="128" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="state.ruleForm.id" >
+ <el-form-item label="鐘舵��" prop="status">
+ <g-sys-dict v-model="state.ruleForm.status" code="StatusEnum" render-as="select" placeholder="璇烽�夋嫨鐘舵��" clearable filterable />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="() => state.showDialog = false">鍙� 娑�</el-button>
+ <el-button @click="submit" type="primary" v-reclick="1000">纭� 瀹�</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+<style lang="scss" scoped>
+:deep(.el-select), :deep(.el-input-number) {
+ width: 100%;
+}
+</style>
\ No newline at end of file
diff --git a/Web/src/views/Customer/fBS_ExRole/index.vue b/Web/src/views/Customer/fBS_ExRole/index.vue
new file mode 100644
index 0000000..be291b4
--- /dev/null
+++ b/Web/src/views/Customer/fBS_ExRole/index.vue
@@ -0,0 +1,225 @@
+锘�<script lang="ts" setup name="fBS_ExRole">
+import { ref, reactive, onMounted } from "vue";
+import { auth } from '/@/utils/authFunction';
+import { ElMessageBox, ElMessage } from "element-plus";
+import { downloadStreamFile } from "/@/utils/download";
+import { useFBS_ExRoleApi } from '/@/api/Customer/fBS_ExRole';
+import editDialog from '/@/views/Customer/fBS_ExRole/component/editDialog.vue'
+import printDialog from '/@/views/system/print/component/hiprint/preview.vue'
+import ModifyRecord from '/@/components/table/modifyRecord.vue';
+import ImportData from "/@/components/table/importData.vue";
+
+const fBS_ExRoleApi = useFBS_ExRoleApi();
+const printDialogRef = ref();
+const editDialogRef = ref();
+const importDataRef = ref();
+const state = reactive({
+ exportLoading: false,
+ tableLoading: false,
+ stores: {},
+ showAdvanceQueryUI: false,
+ dropdownData: {} as any,
+ selectData: [] as any[],
+ tableQueryParams: {} as any,
+ tableParams: {
+ page: 1,
+ pageSize: 20,
+ total: 0,
+ field: 'createTime', // 榛樿鐨勬帓搴忓瓧娈�
+ order: 'descending', // 鎺掑簭鏂瑰悜
+ descStr: 'descending', // 闄嶅簭鎺掑簭鐨勫叧閿瓧绗�
+ },
+ tableData: [],
+});
+
+// 椤甸潰鍔犺浇鏃�
+onMounted(async () => {
+});
+
+// 鏌ヨ鎿嶄綔
+const handleQuery = async (params: any = {}) => {
+ state.tableLoading = true;
+ state.tableParams = Object.assign(state.tableParams, params);
+ const result = await fBS_ExRoleApi.page(Object.assign(state.tableQueryParams, state.tableParams)).then(res => res.data.result);
+ state.tableParams.total = result?.total;
+ state.tableData = result?.items ?? [];
+ state.tableLoading = false;
+};
+
+// 鍒楁帓搴�
+const sortChange = async (column: any) => {
+ state.tableParams.field = column.prop;
+ state.tableParams.order = column.order;
+ await handleQuery();
+};
+
+// 鍒犻櫎
+const delFBS_ExRole = (row: any) => {
+ ElMessageBox.confirm(`纭畾瑕佸垹闄ゅ悧?`, "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ }).then(async () => {
+ await fBS_ExRoleApi.delete({ id: row.id });
+ handleQuery();
+ ElMessage.success("鍒犻櫎鎴愬姛");
+ }).catch(() => {});
+};
+
+// 鎵归噺鍒犻櫎
+const batchDelFBS_ExRole = () => {
+ ElMessageBox.confirm(`纭畾瑕佸垹闄�${state.selectData.length}鏉¤褰曞悧?`, "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ }).then(async () => {
+ await fBS_ExRoleApi.batchDelete(state.selectData.map(u => ({ id: u.id }) )).then(res => {
+ ElMessage.success(`鎴愬姛鎵归噺鍒犻櫎${res.data.result}鏉¤褰昤);
+ handleQuery();
+ });
+ }).catch(() => {});
+};
+
+// 璁剧疆鐘舵��
+const changeFBS_ExRoleStatus = async (row: any) => {
+ await fBS_ExRoleApi.setStatus({ id: row.id, status: row.status }).then(() => ElMessage.success('鐘舵�佽缃垚鍔�'));
+};
+
+// 瀵煎嚭鏁版嵁
+const exportFBS_ExRoleCommand = async (command: string) => {
+ try {
+ state.exportLoading = true;
+ if (command === 'select') {
+ const params = Object.assign({}, state.tableQueryParams, state.tableParams, { selectKeyList: state.selectData.map(u => u.id) });
+ await fBS_ExRoleApi.exportData(params).then(res => downloadStreamFile(res));
+ } else if (command === 'current') {
+ const params = Object.assign({}, state.tableQueryParams, state.tableParams);
+ await fBS_ExRoleApi.exportData(params).then(res => downloadStreamFile(res));
+ } else if (command === 'all') {
+ const params = Object.assign({}, state.tableQueryParams, state.tableParams, { page: 1, pageSize: 99999999 });
+ await fBS_ExRoleApi.exportData(params).then(res => downloadStreamFile(res));
+ }
+ } finally {
+ state.exportLoading = false;
+ }
+}
+
+handleQuery();
+</script>
+<template>
+ <div class="fBS_ExRole-container" v-loading="state.exportLoading">
+ <el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
+ <el-form :model="state.tableQueryParams" ref="queryForm" labelWidth="90">
+ <el-row>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
+ <el-form-item label="鍏抽敭瀛�">
+ <el-input v-model="state.tableQueryParams.keyword" clearable placeholder="璇疯緭鍏ユā绯婃煡璇㈠叧閿瓧"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鍚嶇О">
+ <el-input v-model="state.tableQueryParams.name" clearable placeholder="璇疯緭鍏ュ悕绉�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="缂栫爜">
+ <el-input v-model="state.tableQueryParams.code" clearable placeholder="璇疯緭鍏ョ紪鐮�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鎺掑簭">
+ <el-input-number v-model="state.tableQueryParams.orderNo" clearable placeholder="璇疯緭鍏ユ帓搴�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鏁版嵁鑼冨洿">
+ <g-sys-dict v-model="state.tableQueryParams.dataScope" code="DataScopeEnum" render-as="select" placeholder="璇烽�夋嫨鏁版嵁鑼冨洿" clearable filterable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="澶囨敞">
+ <el-input v-model="state.tableQueryParams.remark" clearable placeholder="璇疯緭鍏ュ娉�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鐘舵��">
+ <g-sys-dict v-model="state.tableQueryParams.status" code="StatusEnum" render-as="select" placeholder="璇烽�夋嫨鐘舵��" clearable filterable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
+ <el-form-item >
+ <el-button-group style="display: flex; align-items: center;">
+ <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'fBS_ExRole:page'" v-reclick="1000"> 鏌ヨ </el-button>
+ <el-button icon="ele-Refresh" @click="() => state.tableQueryParams = {}"> 閲嶇疆 </el-button>
+ <el-button icon="ele-ZoomIn" @click="() => state.showAdvanceQueryUI = true" v-if="!state.showAdvanceQueryUI" style="margin-left:5px;"> 楂樼骇鏌ヨ </el-button>
+ <el-button icon="ele-ZoomOut" @click="() => state.showAdvanceQueryUI = false" v-if="state.showAdvanceQueryUI" style="margin-left:5px;"> 闅愯棌 </el-button>
+ <el-button type="danger" style="margin-left:5px;" icon="ele-Delete" @click="batchDelFBS_ExRole" :disabled="state.selectData.length == 0" v-auth="'fBS_ExRole:batchDelete'"> 鍒犻櫎 </el-button>
+ <el-button type="primary" style="margin-left:5px;" icon="ele-Plus" @click="editDialogRef.openDialog(null, '鏂板瀹㈡埛涓诲垎绫昏鑹�')" v-auth="'fBS_ExRole:add'"> 鏂板 </el-button>
+ <el-dropdown :show-timeout="70" :hide-timeout="50" @command="exportFBS_ExRoleCommand">
+ <el-button type="primary" style="margin-left:5px;" icon="ele-FolderOpened" v-reclick="20000" v-auth="'fBS_ExRole:export'"> 瀵煎嚭 </el-button>
+ <template #dropdown>
+ <el-dropdown-menu>
+ <el-dropdown-item command="select" :disabled="state.selectData.length == 0">瀵煎嚭閫変腑</el-dropdown-item>
+ <el-dropdown-item command="current">瀵煎嚭鏈〉</el-dropdown-item>
+ <el-dropdown-item command="all">瀵煎嚭鍏ㄩ儴</el-dropdown-item>
+ </el-dropdown-menu>
+ </template>
+ </el-dropdown>
+ <el-button type="warning" style="margin-left:5px;" icon="ele-MostlyCloudy" @click="importDataRef.openDialog()" v-auth="'fBS_ExRole:import'"> 瀵煎叆 </el-button>
+ </el-button-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ </el-card>
+ <el-card class="full-table" shadow="hover" style="margin-top: 5px">
+ <el-table :data="state.tableData" @selection-change="(val: any[]) => { state.selectData = val; }" style="width: 100%" v-loading="state.tableLoading" tooltip-effect="light" row-key="id" @sort-change="sortChange" border>
+ <el-table-column type="selection" width="40" align="center" v-if="auth('fBS_ExRole:batchDelete') || auth('fBS_ExRole:export')" />
+ <el-table-column type="index" label="搴忓彿" width="55" align="center"/>
+ <el-table-column prop='name' label='鍚嶇О' show-overflow-tooltip />
+ <el-table-column prop='code' label='缂栫爜' show-overflow-tooltip />
+ <el-table-column prop='orderNo' label='鎺掑簭' show-overflow-tooltip />
+ <el-table-column prop='dataScope' label='鏁版嵁鑼冨洿' show-overflow-tooltip>
+ <template #default="scope">
+ <g-sys-dict v-model="scope.row.dataScope" code="DataScopeEnum" />
+ </template>
+ </el-table-column>
+ <el-table-column prop='remark' label='澶囨敞' show-overflow-tooltip />
+ <el-table-column prop='status' label='鐘舵��' v-auth="'fBS_ExRole:setStatus'" show-overflow-tooltip>
+ <template #default="scope">
+ <el-switch v-model="scope.row.status" :active-value="1" :inactive-value="2" size="small" @change="changeFBS_ExRoleStatus(scope.row)" />
+ </template>
+ </el-table-column>
+ <el-table-column label="淇敼璁板綍" width="100" align="center" show-overflow-tooltip>
+ <template #default="scope">
+ <ModifyRecord :data="scope.row" />
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" width="140" align="center" fixed="right" show-overflow-tooltip v-if="auth('fBS_ExRole:update') || auth('fBS_ExRole:delete')">
+ <template #default="scope">
+ <el-button icon="ele-Edit" size="small" text type="primary" @click="editDialogRef.openDialog(scope.row, '缂栬緫瀹㈡埛涓诲垎绫昏鑹�')" v-auth="'fBS_ExRole:update'"> 缂栬緫 </el-button>
+ <el-button icon="ele-Delete" size="small" text type="primary" @click="delFBS_ExRole(scope.row)" v-auth="'fBS_ExRole:delete'"> 鍒犻櫎 </el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-pagination
+ v-model:currentPage="state.tableParams.page"
+ v-model:page-size="state.tableParams.pageSize"
+ @size-change="(val: any) => handleQuery({ pageSize: val })"
+ @current-change="(val: any) => handleQuery({ page: val })"
+ layout="total, sizes, prev, pager, next, jumper"
+ :page-sizes="[10, 20, 50, 100, 200, 500]"
+ :total="state.tableParams.total"
+ size="small"
+ background />
+ <ImportData ref="importDataRef" :import="fBS_ExRoleApi.importData" :download="fBS_ExRoleApi.downloadTemplate" v-auth="'fBS_ExRole:import'" @refresh="handleQuery"/>
+ <printDialog ref="printDialogRef" :title="'鎵撳嵃瀹㈡埛涓诲垎绫昏鑹�'" @reloadTable="handleQuery" />
+ <editDialog ref="editDialogRef" @reloadTable="handleQuery" />
+ </el-card>
+ </div>
+</template>
+<style scoped>
+:deep(.el-input), :deep(.el-select), :deep(.el-input-number) {
+ width: 100%;
+}
+</style>
\ No newline at end of file
diff --git a/Web/src/views/Customer/fBS_Menu/component/editDialog.vue b/Web/src/views/Customer/fBS_Menu/component/editDialog.vue
new file mode 100644
index 0000000..bc19617
--- /dev/null
+++ b/Web/src/views/Customer/fBS_Menu/component/editDialog.vue
@@ -0,0 +1,185 @@
+锘�<script lang="ts" name="fBS_Menu" setup>
+import { ref, reactive, onMounted } from "vue";
+import { ElMessage } from "element-plus";
+import type { FormRules } from "element-plus";
+import { formatDate } from '/@/utils/formatTime';
+import { useFBS_MenuApi } from '/@/api/Customer/fBS_Menu';
+
+//鐖剁骇浼犻�掓潵鐨勫嚱鏁帮紝鐢ㄤ簬鍥炶皟
+const emit = defineEmits(["reloadTable"]);
+const fBS_MenuApi = useFBS_MenuApi();
+const ruleFormRef = ref();
+
+const state = reactive({
+ title: '',
+ loading: false,
+ showDialog: false,
+ ruleForm: {} as any,
+ stores: {},
+ dropdownData: {} as any,
+});
+
+// 鑷娣诲姞鍏朵粬瑙勫垯
+const rules = ref<FormRules>({
+ pid: [{required: true, message: '璇烽�夋嫨鐖禝d锛�', trigger: 'blur',},],
+ type: [{required: true, message: '璇烽�夋嫨鑿滃崟绫诲瀷锛�', trigger: 'change',},],
+ title: [{required: true, message: '璇烽�夋嫨鑿滃崟鍚嶇О锛�', trigger: 'blur',},],
+ isIframe: [{required: true, message: '璇烽�夋嫨鏄惁鍐呭祵锛�', trigger: 'blur',},],
+ isHide: [{required: true, message: '璇烽�夋嫨鏄惁闅愯棌锛�', trigger: 'blur',},],
+ isKeepAlive: [{required: true, message: '璇烽�夋嫨鏄惁缂撳瓨锛�', trigger: 'blur',},],
+ isAffix: [{required: true, message: '璇烽�夋嫨鏄惁鍥哄畾锛�', trigger: 'blur',},],
+ orderNo: [{required: true, message: '璇烽�夋嫨鎺掑簭锛�', trigger: 'blur',},],
+ status: [{required: true, message: '璇烽�夋嫨鐘舵�侊紒', trigger: 'change',},],
+});
+
+// 椤甸潰鍔犺浇鏃�
+onMounted(async () => {
+});
+
+// 鎵撳紑寮圭獥
+const openDialog = async (row: any, title: string) => {
+ state.title = title;
+ row = row ?? { status: 1,orderNo: 100, };
+ state.ruleForm = row.id ? await fBS_MenuApi.detail(row.id).then(res => res.data.result) : JSON.parse(JSON.stringify(row));
+ state.showDialog = true;
+};
+
+// 鍏抽棴寮圭獥
+const closeDialog = () => {
+ emit("reloadTable");
+ state.showDialog = false;
+};
+
+// 鎻愪氦
+const submit = async () => {
+ ruleFormRef.value.validate(async (isValid: boolean, fields?: any) => {
+ if (isValid) {
+ let values = state.ruleForm;
+ await fBS_MenuApi[state.ruleForm.id ? 'update' : 'add'](values);
+ closeDialog();
+ } else {
+ ElMessage({
+ message: `琛ㄥ崟鏈�${Object.keys(fields).length}澶勯獙璇佸け璐ワ紝璇蜂慨鏀瑰悗鍐嶆彁浜,
+ type: "error",
+ });
+ }
+ });
+};
+
+//灏嗗睘鎬ф垨鑰呭嚱鏁版毚闇茬粰鐖剁粍浠�
+defineExpose({ openDialog });
+</script>
+<template>
+ <div class="fBS_Menu-container">
+ <el-dialog v-model="state.showDialog" :width="800" draggable :close-on-click-modal="false">
+ <template #header>
+ <div style="color: #fff">
+ <span>{{ state.title }}</span>
+ </div>
+ </template>
+ <el-form :model="state.ruleForm" ref="ruleFormRef" label-width="auto" :rules="rules">
+ <el-row :gutter="35">
+ <el-form-item v-show="false">
+ <el-input v-model="state.ruleForm.id" />
+ </el-form-item>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鐖禝d" prop="pid">
+ <el-input v-model="state.ruleForm.pid" placeholder="璇疯緭鍏ョ埗Id" maxlength="19" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鑿滃崟绫诲瀷" prop="type">
+ <g-sys-dict v-model="state.ruleForm.type" code="MenuTypeEnum" render-as="select" placeholder="璇烽�夋嫨鑿滃崟绫诲瀷" clearable filterable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="璺敱鍚嶇О" prop="name">
+ <el-input v-model="state.ruleForm.name" placeholder="璇疯緭鍏ヨ矾鐢卞悕绉�" maxlength="64" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="璺敱鍦板潃" prop="path">
+ <el-input v-model="state.ruleForm.path" placeholder="璇疯緭鍏ヨ矾鐢卞湴鍧�" maxlength="128" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="缁勪欢璺緞" prop="component">
+ <el-input v-model="state.ruleForm.component" placeholder="璇疯緭鍏ョ粍浠惰矾寰�" maxlength="128" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="閲嶅畾鍚�" prop="redirect">
+ <el-input v-model="state.ruleForm.redirect" placeholder="璇疯緭鍏ラ噸瀹氬悜" maxlength="128" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鏉冮檺鏍囪瘑" prop="permission">
+ <el-input v-model="state.ruleForm.permission" placeholder="璇疯緭鍏ユ潈闄愭爣璇�" maxlength="128" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鑿滃崟鍚嶇О" prop="title">
+ <el-input v-model="state.ruleForm.title" placeholder="璇疯緭鍏ヨ彍鍗曞悕绉�" maxlength="64" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鍥炬爣" prop="icon">
+ <el-input v-model="state.ruleForm.icon" placeholder="璇疯緭鍏ュ浘鏍�" maxlength="128" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鏄惁鍐呭祵" prop="isIframe">
+ <el-switch v-model="state.ruleForm.isIframe" active-text="鏄�" inactive-text="鍚�" />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="澶栭摼閾炬帴" prop="outLink">
+ <el-input v-model="state.ruleForm.outLink" placeholder="璇疯緭鍏ュ閾鹃摼鎺�" maxlength="256" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鏄惁闅愯棌" prop="isHide">
+ <el-switch v-model="state.ruleForm.isHide" active-text="鏄�" inactive-text="鍚�" />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鏄惁缂撳瓨" prop="isKeepAlive">
+ <el-switch v-model="state.ruleForm.isKeepAlive" active-text="鏄�" inactive-text="鍚�" />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鏄惁鍥哄畾" prop="isAffix">
+ <el-switch v-model="state.ruleForm.isAffix" active-text="鏄�" inactive-text="鍚�" />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鎺掑簭" prop="orderNo">
+ <el-input-number v-model="state.ruleForm.orderNo" placeholder="璇疯緭鍏ユ帓搴�" clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="state.ruleForm.id" >
+ <el-form-item label="鐘舵��" prop="status">
+ <g-sys-dict v-model="state.ruleForm.status" code="StatusEnum" render-as="select" placeholder="璇烽�夋嫨鐘舵��" clearable filterable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="澶囨敞" prop="remark">
+ <el-input v-model="state.ruleForm.remark" placeholder="璇疯緭鍏ュ娉�" maxlength="256" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="() => state.showDialog = false">鍙� 娑�</el-button>
+ <el-button @click="submit" type="primary" v-reclick="1000">纭� 瀹�</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+<style lang="scss" scoped>
+:deep(.el-select), :deep(.el-input-number) {
+ width: 100%;
+}
+</style>
\ No newline at end of file
diff --git a/Web/src/views/Customer/fBS_Menu/index.vue b/Web/src/views/Customer/fBS_Menu/index.vue
new file mode 100644
index 0000000..abb6e1a
--- /dev/null
+++ b/Web/src/views/Customer/fBS_Menu/index.vue
@@ -0,0 +1,311 @@
+锘�<script lang="ts" setup name="fBS_Menu">
+import { ref, reactive, onMounted } from "vue";
+import { auth } from '/@/utils/authFunction';
+import { ElMessageBox, ElMessage } from "element-plus";
+import { downloadStreamFile } from "/@/utils/download";
+import { useFBS_MenuApi } from '/@/api/Customer/fBS_Menu';
+import editDialog from '/@/views/Customer/fBS_Menu/component/editDialog.vue'
+import printDialog from '/@/views/system/print/component/hiprint/preview.vue'
+import ModifyRecord from '/@/components/table/modifyRecord.vue';
+import ImportData from "/@/components/table/importData.vue";
+
+const fBS_MenuApi = useFBS_MenuApi();
+const printDialogRef = ref();
+const editDialogRef = ref();
+const importDataRef = ref();
+const state = reactive({
+ exportLoading: false,
+ tableLoading: false,
+ stores: {},
+ showAdvanceQueryUI: false,
+ dropdownData: {} as any,
+ selectData: [] as any[],
+ tableQueryParams: {} as any,
+ tableParams: {
+ page: 1,
+ pageSize: 20,
+ total: 0,
+ field: 'createTime', // 榛樿鐨勬帓搴忓瓧娈�
+ order: 'descending', // 鎺掑簭鏂瑰悜
+ descStr: 'descending', // 闄嶅簭鎺掑簭鐨勫叧閿瓧绗�
+ },
+ tableData: [],
+});
+
+// 椤甸潰鍔犺浇鏃�
+onMounted(async () => {
+});
+
+// 鏌ヨ鎿嶄綔
+const handleQuery = async (params: any = {}) => {
+ state.tableLoading = true;
+ state.tableParams = Object.assign(state.tableParams, params);
+ const result = await fBS_MenuApi.page(Object.assign(state.tableQueryParams, state.tableParams)).then(res => res.data.result);
+ state.tableParams.total = result?.total;
+ state.tableData = result?.items ?? [];
+ state.tableLoading = false;
+};
+
+// 鍒楁帓搴�
+const sortChange = async (column: any) => {
+ state.tableParams.field = column.prop;
+ state.tableParams.order = column.order;
+ await handleQuery();
+};
+
+// 鍒犻櫎
+const delFBS_Menu = (row: any) => {
+ ElMessageBox.confirm(`纭畾瑕佸垹闄ゅ悧?`, "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ }).then(async () => {
+ await fBS_MenuApi.delete({ id: row.id });
+ handleQuery();
+ ElMessage.success("鍒犻櫎鎴愬姛");
+ }).catch(() => {});
+};
+
+// 鎵归噺鍒犻櫎
+const batchDelFBS_Menu = () => {
+ ElMessageBox.confirm(`纭畾瑕佸垹闄�${state.selectData.length}鏉¤褰曞悧?`, "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ }).then(async () => {
+ await fBS_MenuApi.batchDelete(state.selectData.map(u => ({ id: u.id }) )).then(res => {
+ ElMessage.success(`鎴愬姛鎵归噺鍒犻櫎${res.data.result}鏉¤褰昤);
+ handleQuery();
+ });
+ }).catch(() => {});
+};
+
+// 璁剧疆鐘舵��
+const changeFBS_MenuStatus = async (row: any) => {
+ await fBS_MenuApi.setStatus({ id: row.id, status: row.status }).then(() => ElMessage.success('鐘舵�佽缃垚鍔�'));
+};
+
+// 瀵煎嚭鏁版嵁
+const exportFBS_MenuCommand = async (command: string) => {
+ try {
+ state.exportLoading = true;
+ if (command === 'select') {
+ const params = Object.assign({}, state.tableQueryParams, state.tableParams, { selectKeyList: state.selectData.map(u => u.id) });
+ await fBS_MenuApi.exportData(params).then(res => downloadStreamFile(res));
+ } else if (command === 'current') {
+ const params = Object.assign({}, state.tableQueryParams, state.tableParams);
+ await fBS_MenuApi.exportData(params).then(res => downloadStreamFile(res));
+ } else if (command === 'all') {
+ const params = Object.assign({}, state.tableQueryParams, state.tableParams, { page: 1, pageSize: 99999999 });
+ await fBS_MenuApi.exportData(params).then(res => downloadStreamFile(res));
+ }
+ } finally {
+ state.exportLoading = false;
+ }
+}
+
+handleQuery();
+</script>
+<template>
+ <div class="fBS_Menu-container" v-loading="state.exportLoading">
+ <el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
+ <el-form :model="state.tableQueryParams" ref="queryForm" labelWidth="90">
+ <el-row>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
+ <el-form-item label="鍏抽敭瀛�">
+ <el-input v-model="state.tableQueryParams.keyword" clearable placeholder="璇疯緭鍏ユā绯婃煡璇㈠叧閿瓧"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鐖禝d">
+ <el-input v-model="state.tableQueryParams.pid" clearable placeholder="璇疯緭鍏ョ埗Id"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鑿滃崟绫诲瀷">
+ <g-sys-dict v-model="state.tableQueryParams.type" code="MenuTypeEnum" render-as="select" placeholder="璇烽�夋嫨鑿滃崟绫诲瀷" clearable filterable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="璺敱鍚嶇О">
+ <el-input v-model="state.tableQueryParams.name" clearable placeholder="璇疯緭鍏ヨ矾鐢卞悕绉�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="璺敱鍦板潃">
+ <el-input v-model="state.tableQueryParams.path" clearable placeholder="璇疯緭鍏ヨ矾鐢卞湴鍧�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="缁勪欢璺緞">
+ <el-input v-model="state.tableQueryParams.component" clearable placeholder="璇疯緭鍏ョ粍浠惰矾寰�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="閲嶅畾鍚�">
+ <el-input v-model="state.tableQueryParams.redirect" clearable placeholder="璇疯緭鍏ラ噸瀹氬悜"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鏉冮檺鏍囪瘑">
+ <el-input v-model="state.tableQueryParams.permission" clearable placeholder="璇疯緭鍏ユ潈闄愭爣璇�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鑿滃崟鍚嶇О">
+ <el-input v-model="state.tableQueryParams.title" clearable placeholder="璇疯緭鍏ヨ彍鍗曞悕绉�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鍥炬爣">
+ <el-input v-model="state.tableQueryParams.icon" clearable placeholder="璇疯緭鍏ュ浘鏍�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鏄惁鍐呭祵">
+ <el-input v-model="state.tableQueryParams.isIframe" clearable placeholder="璇疯緭鍏ユ槸鍚﹀唴宓�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="澶栭摼閾炬帴">
+ <el-input v-model="state.tableQueryParams.outLink" clearable placeholder="璇疯緭鍏ュ閾鹃摼鎺�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鏄惁闅愯棌">
+ <el-input v-model="state.tableQueryParams.isHide" clearable placeholder="璇疯緭鍏ユ槸鍚﹂殣钘�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鏄惁缂撳瓨">
+ <el-input v-model="state.tableQueryParams.isKeepAlive" clearable placeholder="璇疯緭鍏ユ槸鍚︾紦瀛�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鏄惁鍥哄畾">
+ <el-input v-model="state.tableQueryParams.isAffix" clearable placeholder="璇疯緭鍏ユ槸鍚﹀浐瀹�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鎺掑簭">
+ <el-input-number v-model="state.tableQueryParams.orderNo" clearable placeholder="璇疯緭鍏ユ帓搴�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鐘舵��">
+ <g-sys-dict v-model="state.tableQueryParams.status" code="StatusEnum" render-as="select" placeholder="璇烽�夋嫨鐘舵��" clearable filterable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="澶囨敞">
+ <el-input v-model="state.tableQueryParams.remark" clearable placeholder="璇疯緭鍏ュ娉�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
+ <el-form-item >
+ <el-button-group style="display: flex; align-items: center;">
+ <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'fBS_Menu:page'" v-reclick="1000"> 鏌ヨ </el-button>
+ <el-button icon="ele-Refresh" @click="() => state.tableQueryParams = {}"> 閲嶇疆 </el-button>
+ <el-button icon="ele-ZoomIn" @click="() => state.showAdvanceQueryUI = true" v-if="!state.showAdvanceQueryUI" style="margin-left:5px;"> 楂樼骇鏌ヨ </el-button>
+ <el-button icon="ele-ZoomOut" @click="() => state.showAdvanceQueryUI = false" v-if="state.showAdvanceQueryUI" style="margin-left:5px;"> 闅愯棌 </el-button>
+ <el-button type="danger" style="margin-left:5px;" icon="ele-Delete" @click="batchDelFBS_Menu" :disabled="state.selectData.length == 0" v-auth="'fBS_Menu:batchDelete'"> 鍒犻櫎 </el-button>
+ <el-button type="primary" style="margin-left:5px;" icon="ele-Plus" @click="editDialogRef.openDialog(null, '鏂板瀹㈡埛绯荤粺鑿滃崟琛�')" v-auth="'fBS_Menu:add'"> 鏂板 </el-button>
+ <el-dropdown :show-timeout="70" :hide-timeout="50" @command="exportFBS_MenuCommand">
+ <el-button type="primary" style="margin-left:5px;" icon="ele-FolderOpened" v-reclick="20000" v-auth="'fBS_Menu:export'"> 瀵煎嚭 </el-button>
+ <template #dropdown>
+ <el-dropdown-menu>
+ <el-dropdown-item command="select" :disabled="state.selectData.length == 0">瀵煎嚭閫変腑</el-dropdown-item>
+ <el-dropdown-item command="current">瀵煎嚭鏈〉</el-dropdown-item>
+ <el-dropdown-item command="all">瀵煎嚭鍏ㄩ儴</el-dropdown-item>
+ </el-dropdown-menu>
+ </template>
+ </el-dropdown>
+ <el-button type="warning" style="margin-left:5px;" icon="ele-MostlyCloudy" @click="importDataRef.openDialog()" v-auth="'fBS_Menu:import'"> 瀵煎叆 </el-button>
+ </el-button-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ </el-card>
+ <el-card class="full-table" shadow="hover" style="margin-top: 5px">
+ <el-table :data="state.tableData" @selection-change="(val: any[]) => { state.selectData = val; }" style="width: 100%" v-loading="state.tableLoading" tooltip-effect="light" row-key="id" @sort-change="sortChange" border>
+ <el-table-column type="selection" width="40" align="center" v-if="auth('fBS_Menu:batchDelete') || auth('fBS_Menu:export')" />
+ <el-table-column type="index" label="搴忓彿" width="55" align="center"/>
+ <el-table-column prop='pid' label='鐖禝d' show-overflow-tooltip />
+ <el-table-column prop='type' label='鑿滃崟绫诲瀷' show-overflow-tooltip>
+ <template #default="scope">
+ <g-sys-dict v-model="scope.row.type" code="MenuTypeEnum" />
+ </template>
+ </el-table-column>
+ <el-table-column prop='name' label='璺敱鍚嶇О' show-overflow-tooltip />
+ <el-table-column prop='path' label='璺敱鍦板潃' show-overflow-tooltip />
+ <el-table-column prop='component' label='缁勪欢璺緞' show-overflow-tooltip />
+ <el-table-column prop='redirect' label='閲嶅畾鍚�' show-overflow-tooltip />
+ <el-table-column prop='permission' label='鏉冮檺鏍囪瘑' show-overflow-tooltip />
+ <el-table-column prop='title' label='鑿滃崟鍚嶇О' show-overflow-tooltip />
+ <el-table-column prop='icon' label='鍥炬爣' show-overflow-tooltip />
+ <el-table-column prop='isIframe' label='鏄惁鍐呭祵' show-overflow-tooltip>
+ <template #default="scope">
+ <el-tag v-if="scope.row.isIframe"> 鏄� </el-tag>
+ <el-tag type="danger" v-else> 鍚� </el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column prop='outLink' label='澶栭摼閾炬帴' show-overflow-tooltip />
+ <el-table-column prop='isHide' label='鏄惁闅愯棌' show-overflow-tooltip>
+ <template #default="scope">
+ <el-tag v-if="scope.row.isHide"> 鏄� </el-tag>
+ <el-tag type="danger" v-else> 鍚� </el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column prop='isKeepAlive' label='鏄惁缂撳瓨' show-overflow-tooltip>
+ <template #default="scope">
+ <el-tag v-if="scope.row.isKeepAlive"> 鏄� </el-tag>
+ <el-tag type="danger" v-else> 鍚� </el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column prop='isAffix' label='鏄惁鍥哄畾' show-overflow-tooltip>
+ <template #default="scope">
+ <el-tag v-if="scope.row.isAffix"> 鏄� </el-tag>
+ <el-tag type="danger" v-else> 鍚� </el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column prop='orderNo' label='鎺掑簭' show-overflow-tooltip />
+ <el-table-column prop='status' label='鐘舵��' v-auth="'fBS_Menu:setStatus'" show-overflow-tooltip>
+ <template #default="scope">
+ <el-switch v-model="scope.row.status" :active-value="1" :inactive-value="2" size="small" @change="changeFBS_MenuStatus(scope.row)" />
+ </template>
+ </el-table-column>
+ <el-table-column prop='remark' label='澶囨敞' show-overflow-tooltip />
+ <el-table-column label="淇敼璁板綍" width="100" align="center" show-overflow-tooltip>
+ <template #default="scope">
+ <ModifyRecord :data="scope.row" />
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" width="140" align="center" fixed="right" show-overflow-tooltip v-if="auth('fBS_Menu:update') || auth('fBS_Menu:delete')">
+ <template #default="scope">
+ <el-button icon="ele-Edit" size="small" text type="primary" @click="editDialogRef.openDialog(scope.row, '缂栬緫瀹㈡埛绯荤粺鑿滃崟琛�')" v-auth="'fBS_Menu:update'"> 缂栬緫 </el-button>
+ <el-button icon="ele-Delete" size="small" text type="primary" @click="delFBS_Menu(scope.row)" v-auth="'fBS_Menu:delete'"> 鍒犻櫎 </el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-pagination
+ v-model:currentPage="state.tableParams.page"
+ v-model:page-size="state.tableParams.pageSize"
+ @size-change="(val: any) => handleQuery({ pageSize: val })"
+ @current-change="(val: any) => handleQuery({ page: val })"
+ layout="total, sizes, prev, pager, next, jumper"
+ :page-sizes="[10, 20, 50, 100, 200, 500]"
+ :total="state.tableParams.total"
+ size="small"
+ background />
+ <ImportData ref="importDataRef" :import="fBS_MenuApi.importData" :download="fBS_MenuApi.downloadTemplate" v-auth="'fBS_Menu:import'" @refresh="handleQuery"/>
+ <printDialog ref="printDialogRef" :title="'鎵撳嵃瀹㈡埛绯荤粺鑿滃崟琛�'" @reloadTable="handleQuery" />
+ <editDialog ref="editDialogRef" @reloadTable="handleQuery" />
+ </el-card>
+ </div>
+</template>
+<style scoped>
+:deep(.el-input), :deep(.el-select), :deep(.el-input-number) {
+ width: 100%;
+}
+</style>
\ No newline at end of file
diff --git a/Web/src/views/Customer/fBS_Role/component/editDialog.vue b/Web/src/views/Customer/fBS_Role/component/editDialog.vue
new file mode 100644
index 0000000..97a308b
--- /dev/null
+++ b/Web/src/views/Customer/fBS_Role/component/editDialog.vue
@@ -0,0 +1,121 @@
+锘�<script lang="ts" name="fBS_Role" setup>
+import { ref, reactive, onMounted } from "vue";
+import { ElMessage } from "element-plus";
+import type { FormRules } from "element-plus";
+import { formatDate } from '/@/utils/formatTime';
+import { useFBS_RoleApi } from '/@/api/Customer/fBS_Role';
+
+//鐖剁骇浼犻�掓潵鐨勫嚱鏁帮紝鐢ㄤ簬鍥炶皟
+const emit = defineEmits(["reloadTable"]);
+const fBS_RoleApi = useFBS_RoleApi();
+const ruleFormRef = ref();
+
+const state = reactive({
+ title: '',
+ loading: false,
+ showDialog: false,
+ ruleForm: {} as any,
+ stores: {},
+ dropdownData: {} as any,
+});
+
+// 鑷娣诲姞鍏朵粬瑙勫垯
+const rules = ref<FormRules>({
+});
+
+// 椤甸潰鍔犺浇鏃�
+onMounted(async () => {
+});
+
+// 鎵撳紑寮圭獥
+const openDialog = async (row: any, title: string) => {
+ state.title = title;
+ row = row ?? { status: 1,orderNo: 100, };
+ state.ruleForm = row.id ? await fBS_RoleApi.detail(row.id).then(res => res.data.result) : JSON.parse(JSON.stringify(row));
+ state.showDialog = true;
+};
+
+// 鍏抽棴寮圭獥
+const closeDialog = () => {
+ emit("reloadTable");
+ state.showDialog = false;
+};
+
+// 鎻愪氦
+const submit = async () => {
+ ruleFormRef.value.validate(async (isValid: boolean, fields?: any) => {
+ if (isValid) {
+ let values = state.ruleForm;
+ await fBS_RoleApi[state.ruleForm.id ? 'update' : 'add'](values);
+ closeDialog();
+ } else {
+ ElMessage({
+ message: `琛ㄥ崟鏈�${Object.keys(fields).length}澶勯獙璇佸け璐ワ紝璇蜂慨鏀瑰悗鍐嶆彁浜,
+ type: "error",
+ });
+ }
+ });
+};
+
+//灏嗗睘鎬ф垨鑰呭嚱鏁版毚闇茬粰鐖剁粍浠�
+defineExpose({ openDialog });
+</script>
+<template>
+ <div class="fBS_Role-container">
+ <el-dialog v-model="state.showDialog" :width="800" draggable :close-on-click-modal="false">
+ <template #header>
+ <div style="color: #fff">
+ <span>{{ state.title }}</span>
+ </div>
+ </template>
+ <el-form :model="state.ruleForm" ref="ruleFormRef" label-width="auto" :rules="rules">
+ <el-row :gutter="35">
+ <el-form-item v-show="false">
+ <el-input v-model="state.ruleForm.id" />
+ </el-form-item>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鍚嶇О" prop="name">
+ <el-input v-model="state.ruleForm.name" placeholder="璇疯緭鍏ュ悕绉�" maxlength="64" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="缂栫爜" prop="code">
+ <el-input v-model="state.ruleForm.code" placeholder="璇疯緭鍏ョ紪鐮�" maxlength="64" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鎺掑簭" prop="orderNo">
+ <el-input-number v-model="state.ruleForm.orderNo" placeholder="璇疯緭鍏ユ帓搴�" clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="鏁版嵁鑼冨洿" prop="dataScope">
+ <g-sys-dict v-model="state.ruleForm.dataScope" code="DataScopeEnum" render-as="select" placeholder="璇烽�夋嫨鏁版嵁鑼冨洿" clearable filterable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" >
+ <el-form-item label="澶囨敞" prop="remark">
+ <el-input v-model="state.ruleForm.remark" placeholder="璇疯緭鍏ュ娉�" maxlength="128" show-word-limit clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="state.ruleForm.id" >
+ <el-form-item label="鐘舵��" prop="status">
+ <g-sys-dict v-model="state.ruleForm.status" code="StatusEnum" render-as="select" placeholder="璇烽�夋嫨鐘舵��" clearable filterable />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="() => state.showDialog = false">鍙� 娑�</el-button>
+ <el-button @click="submit" type="primary" v-reclick="1000">纭� 瀹�</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+<style lang="scss" scoped>
+:deep(.el-select), :deep(.el-input-number) {
+ width: 100%;
+}
+</style>
\ No newline at end of file
diff --git a/Web/src/views/Customer/fBS_Role/index.vue b/Web/src/views/Customer/fBS_Role/index.vue
new file mode 100644
index 0000000..84a36d6
--- /dev/null
+++ b/Web/src/views/Customer/fBS_Role/index.vue
@@ -0,0 +1,225 @@
+锘�<script lang="ts" setup name="fBS_Role">
+import { ref, reactive, onMounted } from "vue";
+import { auth } from '/@/utils/authFunction';
+import { ElMessageBox, ElMessage } from "element-plus";
+import { downloadStreamFile } from "/@/utils/download";
+import { useFBS_RoleApi } from '/@/api/Customer/fBS_Role';
+import editDialog from '/@/views/Customer/fBS_Role/component/editDialog.vue'
+import printDialog from '/@/views/system/print/component/hiprint/preview.vue'
+import ModifyRecord from '/@/components/table/modifyRecord.vue';
+import ImportData from "/@/components/table/importData.vue";
+
+const fBS_RoleApi = useFBS_RoleApi();
+const printDialogRef = ref();
+const editDialogRef = ref();
+const importDataRef = ref();
+const state = reactive({
+ exportLoading: false,
+ tableLoading: false,
+ stores: {},
+ showAdvanceQueryUI: false,
+ dropdownData: {} as any,
+ selectData: [] as any[],
+ tableQueryParams: {} as any,
+ tableParams: {
+ page: 1,
+ pageSize: 20,
+ total: 0,
+ field: 'createTime', // 榛樿鐨勬帓搴忓瓧娈�
+ order: 'descending', // 鎺掑簭鏂瑰悜
+ descStr: 'descending', // 闄嶅簭鎺掑簭鐨勫叧閿瓧绗�
+ },
+ tableData: [],
+});
+
+// 椤甸潰鍔犺浇鏃�
+onMounted(async () => {
+});
+
+// 鏌ヨ鎿嶄綔
+const handleQuery = async (params: any = {}) => {
+ state.tableLoading = true;
+ state.tableParams = Object.assign(state.tableParams, params);
+ const result = await fBS_RoleApi.page(Object.assign(state.tableQueryParams, state.tableParams)).then(res => res.data.result);
+ state.tableParams.total = result?.total;
+ state.tableData = result?.items ?? [];
+ state.tableLoading = false;
+};
+
+// 鍒楁帓搴�
+const sortChange = async (column: any) => {
+ state.tableParams.field = column.prop;
+ state.tableParams.order = column.order;
+ await handleQuery();
+};
+
+// 鍒犻櫎
+const delFBS_Role = (row: any) => {
+ ElMessageBox.confirm(`纭畾瑕佸垹闄ゅ悧?`, "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ }).then(async () => {
+ await fBS_RoleApi.delete({ id: row.id });
+ handleQuery();
+ ElMessage.success("鍒犻櫎鎴愬姛");
+ }).catch(() => {});
+};
+
+// 鎵归噺鍒犻櫎
+const batchDelFBS_Role = () => {
+ ElMessageBox.confirm(`纭畾瑕佸垹闄�${state.selectData.length}鏉¤褰曞悧?`, "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ }).then(async () => {
+ await fBS_RoleApi.batchDelete(state.selectData.map(u => ({ id: u.id }) )).then(res => {
+ ElMessage.success(`鎴愬姛鎵归噺鍒犻櫎${res.data.result}鏉¤褰昤);
+ handleQuery();
+ });
+ }).catch(() => {});
+};
+
+// 璁剧疆鐘舵��
+const changeFBS_RoleStatus = async (row: any) => {
+ await fBS_RoleApi.setStatus({ id: row.id, status: row.status }).then(() => ElMessage.success('鐘舵�佽缃垚鍔�'));
+};
+
+// 瀵煎嚭鏁版嵁
+const exportFBS_RoleCommand = async (command: string) => {
+ try {
+ state.exportLoading = true;
+ if (command === 'select') {
+ const params = Object.assign({}, state.tableQueryParams, state.tableParams, { selectKeyList: state.selectData.map(u => u.id) });
+ await fBS_RoleApi.exportData(params).then(res => downloadStreamFile(res));
+ } else if (command === 'current') {
+ const params = Object.assign({}, state.tableQueryParams, state.tableParams);
+ await fBS_RoleApi.exportData(params).then(res => downloadStreamFile(res));
+ } else if (command === 'all') {
+ const params = Object.assign({}, state.tableQueryParams, state.tableParams, { page: 1, pageSize: 99999999 });
+ await fBS_RoleApi.exportData(params).then(res => downloadStreamFile(res));
+ }
+ } finally {
+ state.exportLoading = false;
+ }
+}
+
+handleQuery();
+</script>
+<template>
+ <div class="fBS_Role-container" v-loading="state.exportLoading">
+ <el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
+ <el-form :model="state.tableQueryParams" ref="queryForm" labelWidth="90">
+ <el-row>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
+ <el-form-item label="鍏抽敭瀛�">
+ <el-input v-model="state.tableQueryParams.keyword" clearable placeholder="璇疯緭鍏ユā绯婃煡璇㈠叧閿瓧"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鍚嶇О">
+ <el-input v-model="state.tableQueryParams.name" clearable placeholder="璇疯緭鍏ュ悕绉�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="缂栫爜">
+ <el-input v-model="state.tableQueryParams.code" clearable placeholder="璇疯緭鍏ョ紪鐮�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鎺掑簭">
+ <el-input-number v-model="state.tableQueryParams.orderNo" clearable placeholder="璇疯緭鍏ユ帓搴�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鏁版嵁鑼冨洿">
+ <g-sys-dict v-model="state.tableQueryParams.dataScope" code="DataScopeEnum" render-as="select" placeholder="璇烽�夋嫨鏁版嵁鑼冨洿" clearable filterable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="澶囨敞">
+ <el-input v-model="state.tableQueryParams.remark" clearable placeholder="璇疯緭鍏ュ娉�"/>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
+ <el-form-item label="鐘舵��">
+ <g-sys-dict v-model="state.tableQueryParams.status" code="StatusEnum" render-as="select" placeholder="璇烽�夋嫨鐘舵��" clearable filterable />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
+ <el-form-item >
+ <el-button-group style="display: flex; align-items: center;">
+ <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'fBS_Role:page'" v-reclick="1000"> 鏌ヨ </el-button>
+ <el-button icon="ele-Refresh" @click="() => state.tableQueryParams = {}"> 閲嶇疆 </el-button>
+ <el-button icon="ele-ZoomIn" @click="() => state.showAdvanceQueryUI = true" v-if="!state.showAdvanceQueryUI" style="margin-left:5px;"> 楂樼骇鏌ヨ </el-button>
+ <el-button icon="ele-ZoomOut" @click="() => state.showAdvanceQueryUI = false" v-if="state.showAdvanceQueryUI" style="margin-left:5px;"> 闅愯棌 </el-button>
+ <el-button type="danger" style="margin-left:5px;" icon="ele-Delete" @click="batchDelFBS_Role" :disabled="state.selectData.length == 0" v-auth="'fBS_Role:batchDelete'"> 鍒犻櫎 </el-button>
+ <el-button type="primary" style="margin-left:5px;" icon="ele-Plus" @click="editDialogRef.openDialog(null, '鏂板瀹㈡埛瑙掕壊')" v-auth="'fBS_Role:add'"> 鏂板 </el-button>
+ <el-dropdown :show-timeout="70" :hide-timeout="50" @command="exportFBS_RoleCommand">
+ <el-button type="primary" style="margin-left:5px;" icon="ele-FolderOpened" v-reclick="20000" v-auth="'fBS_Role:export'"> 瀵煎嚭 </el-button>
+ <template #dropdown>
+ <el-dropdown-menu>
+ <el-dropdown-item command="select" :disabled="state.selectData.length == 0">瀵煎嚭閫変腑</el-dropdown-item>
+ <el-dropdown-item command="current">瀵煎嚭鏈〉</el-dropdown-item>
+ <el-dropdown-item command="all">瀵煎嚭鍏ㄩ儴</el-dropdown-item>
+ </el-dropdown-menu>
+ </template>
+ </el-dropdown>
+ <el-button type="warning" style="margin-left:5px;" icon="ele-MostlyCloudy" @click="importDataRef.openDialog()" v-auth="'fBS_Role:import'"> 瀵煎叆 </el-button>
+ </el-button-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ </el-card>
+ <el-card class="full-table" shadow="hover" style="margin-top: 5px">
+ <el-table :data="state.tableData" @selection-change="(val: any[]) => { state.selectData = val; }" style="width: 100%" v-loading="state.tableLoading" tooltip-effect="light" row-key="id" @sort-change="sortChange" border>
+ <el-table-column type="selection" width="40" align="center" v-if="auth('fBS_Role:batchDelete') || auth('fBS_Role:export')" />
+ <el-table-column type="index" label="搴忓彿" width="55" align="center"/>
+ <el-table-column prop='name' label='鍚嶇О' show-overflow-tooltip />
+ <el-table-column prop='code' label='缂栫爜' show-overflow-tooltip />
+ <el-table-column prop='orderNo' label='鎺掑簭' show-overflow-tooltip />
+ <el-table-column prop='dataScope' label='鏁版嵁鑼冨洿' show-overflow-tooltip>
+ <template #default="scope">
+ <g-sys-dict v-model="scope.row.dataScope" code="DataScopeEnum" />
+ </template>
+ </el-table-column>
+ <el-table-column prop='remark' label='澶囨敞' show-overflow-tooltip />
+ <el-table-column prop='status' label='鐘舵��' v-auth="'fBS_Role:setStatus'" show-overflow-tooltip>
+ <template #default="scope">
+ <el-switch v-model="scope.row.status" :active-value="1" :inactive-value="2" size="small" @change="changeFBS_RoleStatus(scope.row)" />
+ </template>
+ </el-table-column>
+ <el-table-column label="淇敼璁板綍" width="100" align="center" show-overflow-tooltip>
+ <template #default="scope">
+ <ModifyRecord :data="scope.row" />
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" width="140" align="center" fixed="right" show-overflow-tooltip v-if="auth('fBS_Role:update') || auth('fBS_Role:delete')">
+ <template #default="scope">
+ <el-button icon="ele-Edit" size="small" text type="primary" @click="editDialogRef.openDialog(scope.row, '缂栬緫瀹㈡埛瑙掕壊')" v-auth="'fBS_Role:update'"> 缂栬緫 </el-button>
+ <el-button icon="ele-Delete" size="small" text type="primary" @click="delFBS_Role(scope.row)" v-auth="'fBS_Role:delete'"> 鍒犻櫎 </el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-pagination
+ v-model:currentPage="state.tableParams.page"
+ v-model:page-size="state.tableParams.pageSize"
+ @size-change="(val: any) => handleQuery({ pageSize: val })"
+ @current-change="(val: any) => handleQuery({ page: val })"
+ layout="total, sizes, prev, pager, next, jumper"
+ :page-sizes="[10, 20, 50, 100, 200, 500]"
+ :total="state.tableParams.total"
+ size="small"
+ background />
+ <ImportData ref="importDataRef" :import="fBS_RoleApi.importData" :download="fBS_RoleApi.downloadTemplate" v-auth="'fBS_Role:import'" @refresh="handleQuery"/>
+ <printDialog ref="printDialogRef" :title="'鎵撳嵃瀹㈡埛瑙掕壊'" @reloadTable="handleQuery" />
+ <editDialog ref="editDialogRef" @reloadTable="handleQuery" />
+ </el-card>
+ </div>
+</template>
+<style scoped>
+:deep(.el-input), :deep(.el-select), :deep(.el-input-number) {
+ width: 100%;
+}
+</style>
\ No newline at end of file
--
Gitblit v1.9.1