移动系统liao
2 小时以前 9f3ead22a8198d33891a0f8f23faec15dcfc731a
no message
11个文件已修改
10个文件已添加
23686 ■■■■■ 已修改文件
Admin.NET/Admin.NET.Web.Entry/Admin.NET.Web.Entry.csproj 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/Admin.NET.Web.Entry/InItFile/industry_code4.json 7065 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/Admin.NET.Web.Entry/wwwroot/industry_code4.json 7065 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCTB.NET.API.Application/User/CustomerService.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCTB.NET.API.Application/User/DTO/DTOS.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.NET.MD/ConfigMd/FBS_EnterpriseType.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.Net.CustomerSYSTem/FZCZTB.Net.CustomerSYSTem.csproj 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.Net.CustomerSYSTem/InItFile/industry_code4.json 7065 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendDto.cs 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendInput.cs 809 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendOutput.cs 205 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/FBS_CusExtendService.cs 284 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_EnterpriseType/Dto/FBS_EnterpriseTypeInput.cs 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_EnterpriseType/Dto/FBS_EnterpriseTypeOutput.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_EnterpriseType/FBS_EnterpriseTypeService.cs 88 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Web/src/api/Customer/fBS_CusExtend.ts 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Web/src/api/Customer/fBS_EnterpriseType.ts 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Web/src/views/Customer/fBS_CusExtend/component/editDialog.vue 224 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Web/src/views/Customer/fBS_CusExtend/index.vue 318 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Web/src/views/Customer/fBS_EnterpriseType/component/editDialog.vue 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Web/src/views/Customer/fBS_EnterpriseType/index.vue 149 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/Admin.NET.Web.Entry/Admin.NET.Web.Entry.csproj
@@ -55,6 +55,11 @@
  </ItemGroup>
    
  <ItemGroup>
    <Content Update="wwwroot\industry_code4.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </Content>
    <Content Update="wwwroot\upload\logo.png">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
Admin.NET/Admin.NET.Web.Entry/InItFile/industry_code4.json
New file
Diff too large
Admin.NET/Admin.NET.Web.Entry/wwwroot/industry_code4.json
New file
Diff too large
Admin.NET/FZCTB.NET.API.Application/User/CustomerService.cs
@@ -146,7 +146,7 @@
    [AllowAnonymous]
    public async Task<List<EnterpriseTypeVM>> EnterpriseTypes()
    {
        return await _fBS_EnterpriseTypeRep.AsQueryable().Select<EnterpriseTypeVM>().ToTreeAsync(x=>x.Child,x=>x.ParentId,null,x=>x.Id);
        return await _fBS_EnterpriseTypeRep.AsQueryable().Select<EnterpriseTypeVM>().ToTreeAsync(x=>x.Child,x=>x.ParentId,0,x=>x.Id);
    }
    /// <summary>
@@ -293,13 +293,13 @@
            tab.RegisteredCapital = tab.RegisteredCapital;
            tab.Residence = tab.Residence;
            tab.MainBusiness = InParam.MainBusiness;
            tab.EnterpriseType = InParam.EnterpriseType;
            tab.EnterpriseName = InParam.EnterpriseName;
            tab.BusinessLicense = InParam.BusinessLicense;
            //重新审核?
            tab.steps = CusExtendStep.Change;
        }
        tab.EnterpriseType = InParam.EnterpriseType;
        //联系电话
        tab.EnterprisePhone = InParam.EnterprisePhone;
@@ -317,6 +317,7 @@
            tab.OperatorName = InParam.OperatorName;
            tab.OperatorPhone = InParam.OperatorPhone;
        }
        return await _fBS_CusExtendRep.UpdateAsync(tab);
Admin.NET/FZCTB.NET.API.Application/User/DTO/DTOS.cs
@@ -22,7 +22,7 @@
    /// <summary>
    /// id
    /// </summary>
    [SugarColumn(IsTreeKey = true)]  //设置关联字段
    public long Id { get; set; }
    /// <summary>
@@ -44,7 +44,7 @@
    /// 子类
    /// </summary>
    public List<FBS_EnterpriseType> Child { get; set; }
    public List<EnterpriseTypeVM> Child { get; set; }
}
/// <summary>
Admin.NET/FZCZTB.NET.MD/ConfigMd/FBS_EnterpriseType.cs
@@ -37,6 +37,12 @@
    /// </summary>
    [SugarColumn(ColumnDescription = "父")]
    public long  ParentId { get; set; }//父级字段
    /// <summary>
    /// 说明
    /// </summary>
    [SugarColumn(ColumnDescription = "说明",Length =512)]
    public string? Description { get; set; }
    /// <summary>
    /// 子类
    /// </summary>
Admin.NET/FZCZTB.Net.CustomerSYSTem/FZCZTB.Net.CustomerSYSTem.csproj
@@ -10,7 +10,14 @@
  <ItemGroup>
    <ProjectReference Include="..\Admin.NET.Application\Admin.NET.Application.csproj" />
    <ProjectReference Include="..\Admin.NET.Core\Admin.NET.Core.csproj" />
    <ProjectReference Include="..\cylsg.utility\cylsg.utility.csproj" />
    <ProjectReference Include="..\FZCZTB.NET.MD\FZCZTB.NET.MD.csproj" />
  </ItemGroup>
  <ItemGroup>
    <None Update="InItFile\industry_code4.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>
Admin.NET/FZCZTB.Net.CustomerSYSTem/InItFile/industry_code4.json
New file
Diff too large
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendDto.cs
New file
@@ -0,0 +1,169 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace FZCZTB.Net.CustomerSYSTem;
using FZCZTB.NET.MD.CutomerMd.Extend;
/// <summary>
/// 企业资料输出参数
/// </summary>
public class FBS_CusExtendDto
{
    /// <summary>
    /// 主键Id
    /// </summary>
    public long Id { get; set; }
    /// <summary>
    /// 用户ID
    /// </summary>
    public long CustomerId { get; set; }
    /// <summary>
    /// 企业类型
    /// </summary>
    public string EnterpriseType { get; set; }
    /// <summary>
    /// 交易主体code
    /// </summary>
    public string TransactionCode { get; set; }
    /// <summary>
    /// 营业执照文件路径
    /// </summary>
    public string BusinessLicense { get; set; }
    /// <summary>
    /// 企业名称
    /// </summary>
    public string EnterpriseName { get; set; }
    /// <summary>
    /// 统一社会信用代码
    /// </summary>
    public string UnifiedSocialCreditCode { get; set; }
    /// <summary>
    /// 注册资金
    /// </summary>
    public string RegisteredCapital { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    public string LegalRepresentativeName { get; set; }
    /// <summary>
    /// 法定代表人身份证文件路径
    /// </summary>
    public string LegalRepresentativeIdCard { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    public string LegalRepresentativeIdNumber { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    public string LegalRepresentativePhone { get; set; }
    /// <summary>
    /// 企业住所
    /// </summary>
    public string Residence { get; set; }
    /// <summary>
    /// 企业联系电话
    /// </summary>
    public string EnterprisePhone { get; set; }
    /// <summary>
    /// 企业成立时间
    /// </summary>
    public DateTime EstablishmentTime { get; set; }
    /// <summary>
    /// 企业主营业务
    /// </summary>
    public string? MainBusiness { get; set; }
    /// <summary>
    /// 企业邮箱
    /// </summary>
    public string EnterpriseEmail { get; set; }
    /// <summary>
    /// 业务经办人姓名
    /// </summary>
    public string? OperatorName { get; set; }
    /// <summary>
    /// 业务经办人身份证文件路径或标识
    /// </summary>
    public string? OperatorIdCard { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    public string? OperatorIdNumber { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    public string? OperatorPhone { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    public string BankName { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    public string BankAccount { get; set; }
    /// <summary>
    /// 审核步骤
    /// </summary>
    public CusExtendStep steps { 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>
    /// 创建者Id
    /// </summary>
    public long? CreateUserId { get; set; }
    /// <summary>
    /// 创建者姓名
    /// </summary>
    public string? CreateUserName { get; set; }
    /// <summary>
    /// 修改者Id
    /// </summary>
    public long? UpdateUserId { get; set; }
    /// <summary>
    /// 修改者姓名
    /// </summary>
    public string? UpdateUserName { get; set; }
}
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendInput.cs
New file
@@ -0,0 +1,809 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using Admin.NET.Core;
using System.ComponentModel.DataAnnotations;
using Magicodes.ExporterAndImporter.Core;
using Magicodes.ExporterAndImporter.Excel;
using FZCZTB.NET.MD.CutomerMd.Extend;
namespace FZCZTB.Net.CustomerSYSTem;
/// <summary>
/// 企业资料基础输入参数
/// </summary>
public class FBS_CusExtendBaseInput
{
    /// <summary>
    /// 主键Id
    /// </summary>
    public virtual long? Id { get; set; }
    /// <summary>
    /// 用户ID
    /// </summary>
    [Required(ErrorMessage = "用户ID不能为空")]
    public virtual long? CustomerId { get; set; }
    /// <summary>
    /// 企业类型
    /// </summary>
    [Required(ErrorMessage = "企业类型 不能为空")]
    public virtual string EnterpriseType { get; set; }
    /// <summary>
    /// 交易主体code
    /// </summary>
    [Required(ErrorMessage = "交易主体code不能为空")]
    public virtual string TransactionCode { get; set; }
    /// <summary>
    /// 营业执照文件路径
    /// </summary>
    [Required(ErrorMessage = "营业执照文件路径不能为空")]
    public virtual string BusinessLicense { get; set; }
    /// <summary>
    /// 企业名称
    /// </summary>
    [Required(ErrorMessage = "企业名称不能为空")]
    public virtual string EnterpriseName { get; set; }
    /// <summary>
    /// 统一社会信用代码
    /// </summary>
    [Required(ErrorMessage = "统一社会信用代码不能为空")]
    public virtual string UnifiedSocialCreditCode { get; set; }
    /// <summary>
    /// 注册资金
    /// </summary>
    [Required(ErrorMessage = "注册资金不能为空")]
    public virtual string RegisteredCapital { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [Required(ErrorMessage = "法定代表人姓名不能为空")]
    public virtual string LegalRepresentativeName { get; set; }
    /// <summary>
    /// 法定代表人身份证文件路径
    /// </summary>
    [Required(ErrorMessage = "法定代表人身份证文件路径不能为空")]
    public virtual string LegalRepresentativeIdCard { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [Required(ErrorMessage = "法定代表人姓名不能为空")]
    public virtual string LegalRepresentativeIdNumber { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [Required(ErrorMessage = "法定代表人姓名不能为空")]
    public virtual string LegalRepresentativePhone { get; set; }
    /// <summary>
    /// 企业住所
    /// </summary>
    [Required(ErrorMessage = "企业住所不能为空")]
    public virtual string Residence { get; set; }
    /// <summary>
    /// 企业联系电话
    /// </summary>
    [Required(ErrorMessage = "企业联系电话不能为空")]
    public virtual string EnterprisePhone { get; set; }
    /// <summary>
    /// 企业成立时间
    /// </summary>
    [Required(ErrorMessage = "企业成立时间不能为空")]
    public virtual DateTime EstablishmentTime { get; set; }
    /// <summary>
    /// 企业主营业务
    /// </summary>
    public virtual string? MainBusiness { get; set; }
    /// <summary>
    /// 企业邮箱
    /// </summary>
    [Required(ErrorMessage = "企业邮箱不能为空")]
    public virtual string EnterpriseEmail { get; set; }
    /// <summary>
    /// 业务经办人姓名
    /// </summary>
    public virtual string? OperatorName { get; set; }
    /// <summary>
    /// 业务经办人身份证文件路径或标识
    /// </summary>
    public virtual string? OperatorIdCard { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    public virtual string? OperatorIdNumber { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    public virtual string? OperatorPhone { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [Required(ErrorMessage = "法定代表人姓名不能为空")]
    public virtual string BankName { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [Required(ErrorMessage = "法定代表人姓名不能为空")]
    public virtual string BankAccount { get; set; }
    /// <summary>
    /// 审核步骤
    /// </summary>
    [Dict("CusExtendStep", AllowNullValue=true)]
    [Required(ErrorMessage = "审核步骤不能为空")]
    public virtual int? steps { get; set; }
}
/// <summary>
/// 企业资料分页查询输入参数
/// </summary>
public class PageFBS_CusExtendInput : BasePageInput
{
    /// <summary>
    /// 用户ID
    /// </summary>
    public long? CustomerId { get; set; }
    /// <summary>
    /// 企业类型
    /// </summary>
    public string EnterpriseType { get; set; }
    /// <summary>
    /// 交易主体code
    /// </summary>
    public string TransactionCode { get; set; }
    /// <summary>
    /// 营业执照文件路径
    /// </summary>
    public string BusinessLicense { get; set; }
    /// <summary>
    /// 企业名称
    /// </summary>
    public string EnterpriseName { get; set; }
    /// <summary>
    /// 统一社会信用代码
    /// </summary>
    public string UnifiedSocialCreditCode { get; set; }
    /// <summary>
    /// 注册资金
    /// </summary>
    public string RegisteredCapital { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    public string LegalRepresentativeName { get; set; }
    /// <summary>
    /// 法定代表人身份证文件路径
    /// </summary>
    public string LegalRepresentativeIdCard { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    public string LegalRepresentativeIdNumber { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    public string LegalRepresentativePhone { get; set; }
    /// <summary>
    /// 企业住所
    /// </summary>
    public string Residence { get; set; }
    /// <summary>
    /// 企业联系电话
    /// </summary>
    public string EnterprisePhone { get; set; }
    /// <summary>
    /// 企业成立时间范围
    /// </summary>
     public DateTime?[] EstablishmentTimeRange { get; set; }
    /// <summary>
    /// 企业主营业务
    /// </summary>
    public string? MainBusiness { get; set; }
    /// <summary>
    /// 企业邮箱
    /// </summary>
    public string EnterpriseEmail { get; set; }
    /// <summary>
    /// 业务经办人姓名
    /// </summary>
    public string? OperatorName { get; set; }
    /// <summary>
    /// 业务经办人身份证文件路径或标识
    /// </summary>
    public string? OperatorIdCard { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    public string? OperatorIdNumber { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    public string? OperatorPhone { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    public string BankName { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    public string BankAccount { get; set; }
    /// <summary>
    /// 审核步骤
    /// </summary>
    public CusExtendStep? steps { get; set; }
    /// <summary>
    /// 选中主键列表
    /// </summary>
     public List<long> SelectKeyList { get; set; }
}
/// <summary>
/// 企业资料增加输入参数
/// </summary>
public class AddFBS_CusExtendInput
{
    /// <summary>
    /// 用户ID
    /// </summary>
    [Required(ErrorMessage = "用户ID不能为空")]
    public long? CustomerId { get; set; }
    /// <summary>
    /// 企业类型
    /// </summary>
    [Required(ErrorMessage = "企业类型 不能为空")]
    [MaxLength(255, ErrorMessage = "企业类型 字符长度不能超过255")]
    public string EnterpriseType { get; set; }
    /// <summary>
    /// 交易主体code
    /// </summary>
    [Required(ErrorMessage = "交易主体code不能为空")]
    [MaxLength(255, ErrorMessage = "交易主体code字符长度不能超过255")]
    public string TransactionCode { get; set; }
    /// <summary>
    /// 营业执照文件路径
    /// </summary>
    [Required(ErrorMessage = "营业执照文件路径不能为空")]
    [MaxLength(255, ErrorMessage = "营业执照文件路径字符长度不能超过255")]
    public string BusinessLicense { get; set; }
    /// <summary>
    /// 企业名称
    /// </summary>
    [Required(ErrorMessage = "企业名称不能为空")]
    [MaxLength(255, ErrorMessage = "企业名称字符长度不能超过255")]
    public string EnterpriseName { get; set; }
    /// <summary>
    /// 统一社会信用代码
    /// </summary>
    [Required(ErrorMessage = "统一社会信用代码不能为空")]
    [MaxLength(255, ErrorMessage = "统一社会信用代码字符长度不能超过255")]
    public string UnifiedSocialCreditCode { get; set; }
    /// <summary>
    /// 注册资金
    /// </summary>
    [Required(ErrorMessage = "注册资金不能为空")]
    [MaxLength(255, ErrorMessage = "注册资金字符长度不能超过255")]
    public string RegisteredCapital { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [Required(ErrorMessage = "法定代表人姓名不能为空")]
    [MaxLength(255, ErrorMessage = "法定代表人姓名字符长度不能超过255")]
    public string LegalRepresentativeName { get; set; }
    /// <summary>
    /// 法定代表人身份证文件路径
    /// </summary>
    [Required(ErrorMessage = "法定代表人身份证文件路径不能为空")]
    [MaxLength(255, ErrorMessage = "法定代表人身份证文件路径字符长度不能超过255")]
    public string LegalRepresentativeIdCard { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [Required(ErrorMessage = "法定代表人姓名不能为空")]
    [MaxLength(255, ErrorMessage = "法定代表人姓名字符长度不能超过255")]
    public string LegalRepresentativeIdNumber { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [Required(ErrorMessage = "法定代表人姓名不能为空")]
    [MaxLength(255, ErrorMessage = "法定代表人姓名字符长度不能超过255")]
    public string LegalRepresentativePhone { get; set; }
    /// <summary>
    /// 企业住所
    /// </summary>
    [Required(ErrorMessage = "企业住所不能为空")]
    [MaxLength(255, ErrorMessage = "企业住所字符长度不能超过255")]
    public string Residence { get; set; }
    /// <summary>
    /// 企业联系电话
    /// </summary>
    [Required(ErrorMessage = "企业联系电话不能为空")]
    [MaxLength(255, ErrorMessage = "企业联系电话字符长度不能超过255")]
    public string EnterprisePhone { get; set; }
    /// <summary>
    /// 企业成立时间
    /// </summary>
    [Required(ErrorMessage = "企业成立时间不能为空")]
    public DateTime EstablishmentTime { get; set; }
    /// <summary>
    /// 企业主营业务
    /// </summary>
    public string? MainBusiness { get; set; }
    /// <summary>
    /// 企业邮箱
    /// </summary>
    [Required(ErrorMessage = "企业邮箱不能为空")]
    [MaxLength(255, ErrorMessage = "企业邮箱字符长度不能超过255")]
    public string EnterpriseEmail { get; set; }
    /// <summary>
    /// 业务经办人姓名
    /// </summary>
    [MaxLength(255, ErrorMessage = "业务经办人姓名字符长度不能超过255")]
    public string? OperatorName { get; set; }
    /// <summary>
    /// 业务经办人身份证文件路径或标识
    /// </summary>
    [MaxLength(255, ErrorMessage = "业务经办人身份证文件路径或标识字符长度不能超过255")]
    public string? OperatorIdCard { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [MaxLength(255, ErrorMessage = "法定代表人姓名字符长度不能超过255")]
    public string? OperatorIdNumber { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [MaxLength(255, ErrorMessage = "法定代表人姓名字符长度不能超过255")]
    public string? OperatorPhone { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [Required(ErrorMessage = "法定代表人姓名不能为空")]
    [MaxLength(255, ErrorMessage = "法定代表人姓名字符长度不能超过255")]
    public string BankName { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [Required(ErrorMessage = "法定代表人姓名不能为空")]
    [MaxLength(255, ErrorMessage = "法定代表人姓名字符长度不能超过255")]
    public string BankAccount { get; set; }
    /// <summary>
    /// 审核步骤
    /// </summary>
    [Dict("CusExtendStep", AllowNullValue=true)]
    [Required(ErrorMessage = "审核步骤不能为空")]
    public int? steps { get; set; }
}
/// <summary>
/// 企业资料删除输入参数
/// </summary>
public class DeleteFBS_CusExtendInput
{
    /// <summary>
    /// 主键Id
    /// </summary>
    [Required(ErrorMessage = "主键Id不能为空")]
    public long? Id { get; set; }
}
/// <summary>
/// 企业资料更新输入参数
/// </summary>
public class UpdateFBS_CusExtendInput
{
    /// <summary>
    /// 主键Id
    /// </summary>
    [Required(ErrorMessage = "主键Id不能为空")]
    public long? Id { get; set; }
    /// <summary>
    /// 用户ID
    /// </summary>
    [Required(ErrorMessage = "用户ID不能为空")]
    public long? CustomerId { get; set; }
    /// <summary>
    /// 企业类型
    /// </summary>
    [Required(ErrorMessage = "企业类型 不能为空")]
    [MaxLength(255, ErrorMessage = "企业类型 字符长度不能超过255")]
    public string EnterpriseType { get; set; }
    /// <summary>
    /// 交易主体code
    /// </summary>
    [Required(ErrorMessage = "交易主体code不能为空")]
    [MaxLength(255, ErrorMessage = "交易主体code字符长度不能超过255")]
    public string TransactionCode { get; set; }
    /// <summary>
    /// 营业执照文件路径
    /// </summary>
    [Required(ErrorMessage = "营业执照文件路径不能为空")]
    [MaxLength(255, ErrorMessage = "营业执照文件路径字符长度不能超过255")]
    public string BusinessLicense { get; set; }
    /// <summary>
    /// 企业名称
    /// </summary>
    [Required(ErrorMessage = "企业名称不能为空")]
    [MaxLength(255, ErrorMessage = "企业名称字符长度不能超过255")]
    public string EnterpriseName { get; set; }
    /// <summary>
    /// 统一社会信用代码
    /// </summary>
    [Required(ErrorMessage = "统一社会信用代码不能为空")]
    [MaxLength(255, ErrorMessage = "统一社会信用代码字符长度不能超过255")]
    public string UnifiedSocialCreditCode { get; set; }
    /// <summary>
    /// 注册资金
    /// </summary>
    [Required(ErrorMessage = "注册资金不能为空")]
    [MaxLength(255, ErrorMessage = "注册资金字符长度不能超过255")]
    public string RegisteredCapital { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [Required(ErrorMessage = "法定代表人姓名不能为空")]
    [MaxLength(255, ErrorMessage = "法定代表人姓名字符长度不能超过255")]
    public string LegalRepresentativeName { get; set; }
    /// <summary>
    /// 法定代表人身份证文件路径
    /// </summary>
    [Required(ErrorMessage = "法定代表人身份证文件路径不能为空")]
    [MaxLength(255, ErrorMessage = "法定代表人身份证文件路径字符长度不能超过255")]
    public string LegalRepresentativeIdCard { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [Required(ErrorMessage = "法定代表人姓名不能为空")]
    [MaxLength(255, ErrorMessage = "法定代表人姓名字符长度不能超过255")]
    public string LegalRepresentativeIdNumber { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [Required(ErrorMessage = "法定代表人姓名不能为空")]
    [MaxLength(255, ErrorMessage = "法定代表人姓名字符长度不能超过255")]
    public string LegalRepresentativePhone { get; set; }
    /// <summary>
    /// 企业住所
    /// </summary>
    [Required(ErrorMessage = "企业住所不能为空")]
    [MaxLength(255, ErrorMessage = "企业住所字符长度不能超过255")]
    public string Residence { get; set; }
    /// <summary>
    /// 企业联系电话
    /// </summary>
    [Required(ErrorMessage = "企业联系电话不能为空")]
    [MaxLength(255, ErrorMessage = "企业联系电话字符长度不能超过255")]
    public string EnterprisePhone { get; set; }
    /// <summary>
    /// 企业成立时间
    /// </summary>
    [Required(ErrorMessage = "企业成立时间不能为空")]
    public DateTime EstablishmentTime { get; set; }
    /// <summary>
    /// 企业主营业务
    /// </summary>
    public string? MainBusiness { get; set; }
    /// <summary>
    /// 企业邮箱
    /// </summary>
    [Required(ErrorMessage = "企业邮箱不能为空")]
    [MaxLength(255, ErrorMessage = "企业邮箱字符长度不能超过255")]
    public string EnterpriseEmail { get; set; }
    /// <summary>
    /// 业务经办人姓名
    /// </summary>
    [MaxLength(255, ErrorMessage = "业务经办人姓名字符长度不能超过255")]
    public string? OperatorName { get; set; }
    /// <summary>
    /// 业务经办人身份证文件路径或标识
    /// </summary>
    [MaxLength(255, ErrorMessage = "业务经办人身份证文件路径或标识字符长度不能超过255")]
    public string? OperatorIdCard { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [MaxLength(255, ErrorMessage = "法定代表人姓名字符长度不能超过255")]
    public string? OperatorIdNumber { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [MaxLength(255, ErrorMessage = "法定代表人姓名字符长度不能超过255")]
    public string? OperatorPhone { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [Required(ErrorMessage = "法定代表人姓名不能为空")]
    [MaxLength(255, ErrorMessage = "法定代表人姓名字符长度不能超过255")]
    public string BankName { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [Required(ErrorMessage = "法定代表人姓名不能为空")]
    [MaxLength(255, ErrorMessage = "法定代表人姓名字符长度不能超过255")]
    public string BankAccount { get; set; }
    /// <summary>
    /// 审核步骤
    /// </summary>
    [Dict("CusExtendStep", AllowNullValue=true)]
    [Required(ErrorMessage = "审核步骤不能为空")]
    public CusExtendStep? steps { get; set; }
}
/// <summary>
/// 企业资料主键查询输入参数
/// </summary>
public class QueryByIdFBS_CusExtendInput : DeleteFBS_CusExtendInput
{
}
/// <summary>
/// 企业资料数据导入实体
/// </summary>
[ExcelImporter(SheetIndex = 1, IsOnlyErrorRows = true)]
public class ImportFBS_CusExtendInput : BaseImportInput
{
    /// <summary>
    /// 用户ID
    /// </summary>
    [ImporterHeader(Name = "*用户ID")]
    [ExporterHeader("*用户ID", Format = "", Width = 25, IsBold = true)]
    public long? CustomerId { get; set; }
    /// <summary>
    /// 企业类型
    /// </summary>
    [ImporterHeader(Name = "*企业类型 ")]
    [ExporterHeader("*企业类型 ", Format = "", Width = 25, IsBold = true)]
    public string EnterpriseType { get; set; }
    /// <summary>
    /// 交易主体code
    /// </summary>
    [ImporterHeader(Name = "*交易主体code")]
    [ExporterHeader("*交易主体code", Format = "", Width = 25, IsBold = true)]
    public string TransactionCode { get; set; }
    /// <summary>
    /// 营业执照文件路径
    /// </summary>
    [ImporterHeader(Name = "*营业执照文件路径")]
    [ExporterHeader("*营业执照文件路径", Format = "", Width = 25, IsBold = true)]
    public string BusinessLicense { get; set; }
    /// <summary>
    /// 企业名称
    /// </summary>
    [ImporterHeader(Name = "*企业名称")]
    [ExporterHeader("*企业名称", Format = "", Width = 25, IsBold = true)]
    public string EnterpriseName { get; set; }
    /// <summary>
    /// 统一社会信用代码
    /// </summary>
    [ImporterHeader(Name = "*统一社会信用代码")]
    [ExporterHeader("*统一社会信用代码", Format = "", Width = 25, IsBold = true)]
    public string UnifiedSocialCreditCode { get; set; }
    /// <summary>
    /// 注册资金
    /// </summary>
    [ImporterHeader(Name = "*注册资金")]
    [ExporterHeader("*注册资金", Format = "", Width = 25, IsBold = true)]
    public string RegisteredCapital { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [ImporterHeader(Name = "*法定代表人姓名")]
    [ExporterHeader("*法定代表人姓名", Format = "", Width = 25, IsBold = true)]
    public string LegalRepresentativeName { get; set; }
    /// <summary>
    /// 法定代表人身份证文件路径
    /// </summary>
    [ImporterHeader(Name = "*法定代表人身份证文件路径")]
    [ExporterHeader("*法定代表人身份证文件路径", Format = "", Width = 25, IsBold = true)]
    public string LegalRepresentativeIdCard { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [ImporterHeader(Name = "*法定代表人姓名")]
    [ExporterHeader("*法定代表人姓名", Format = "", Width = 25, IsBold = true)]
    public string LegalRepresentativeIdNumber { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [ImporterHeader(Name = "*法定代表人姓名")]
    [ExporterHeader("*法定代表人姓名", Format = "", Width = 25, IsBold = true)]
    public string LegalRepresentativePhone { get; set; }
    /// <summary>
    /// 企业住所
    /// </summary>
    [ImporterHeader(Name = "*企业住所")]
    [ExporterHeader("*企业住所", Format = "", Width = 25, IsBold = true)]
    public string Residence { get; set; }
    /// <summary>
    /// 企业联系电话
    /// </summary>
    [ImporterHeader(Name = "*企业联系电话")]
    [ExporterHeader("*企业联系电话", Format = "", Width = 25, IsBold = true)]
    public string EnterprisePhone { get; set; }
    /// <summary>
    /// 企业成立时间
    /// </summary>
    [ImporterHeader(Name = "*企业成立时间")]
    [ExporterHeader("*企业成立时间", Format = "", Width = 25, IsBold = true)]
    public DateTime EstablishmentTime { get; set; }
    /// <summary>
    /// 企业主营业务
    /// </summary>
    [ImporterHeader(Name = "企业主营业务")]
    [ExporterHeader("企业主营业务", Format = "", Width = 25, IsBold = true)]
    public string? MainBusiness { get; set; }
    /// <summary>
    /// 企业邮箱
    /// </summary>
    [ImporterHeader(Name = "*企业邮箱")]
    [ExporterHeader("*企业邮箱", Format = "", Width = 25, IsBold = true)]
    public string EnterpriseEmail { get; set; }
    /// <summary>
    /// 业务经办人姓名
    /// </summary>
    [ImporterHeader(Name = "业务经办人姓名")]
    [ExporterHeader("业务经办人姓名", Format = "", Width = 25, IsBold = true)]
    public string? OperatorName { get; set; }
    /// <summary>
    /// 业务经办人身份证文件路径或标识
    /// </summary>
    [ImporterHeader(Name = "业务经办人身份证文件路径或标识")]
    [ExporterHeader("业务经办人身份证文件路径或标识", Format = "", Width = 25, IsBold = true)]
    public string? OperatorIdCard { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [ImporterHeader(Name = "法定代表人姓名")]
    [ExporterHeader("法定代表人姓名", Format = "", Width = 25, IsBold = true)]
    public string? OperatorIdNumber { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [ImporterHeader(Name = "法定代表人姓名")]
    [ExporterHeader("法定代表人姓名", Format = "", Width = 25, IsBold = true)]
    public string? OperatorPhone { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [ImporterHeader(Name = "*法定代表人姓名")]
    [ExporterHeader("*法定代表人姓名", Format = "", Width = 25, IsBold = true)]
    public string BankName { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    [ImporterHeader(Name = "*法定代表人姓名")]
    [ExporterHeader("*法定代表人姓名", Format = "", Width = 25, IsBold = true)]
    public string BankAccount { get; set; }
    /// <summary>
    /// 审核步骤 关联值
    /// </summary>
    [ImporterHeader(IsIgnore = true)]
    [ExporterHeader(IsIgnore = true)]
    public CusExtendStep? steps { get; set; }
    ///// <summary>
    ///// 审核步骤 文本
    ///// </summary>
    //[Dict("CusExtendStep")]
    //[ImporterHeader(Name = "*审核步骤")]
    //[ExporterHeader("*审核步骤", Format = "", Width = 25, IsBold = true)]
    //public string stepsDictLabel { get; set; }
}
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/Dto/FBS_CusExtendOutput.cs
New file
@@ -0,0 +1,205 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using Magicodes.ExporterAndImporter.Core;
namespace FZCZTB.Net.CustomerSYSTem;
using cylsg.utility;
using FZCZTB.NET.MD.CutomerMd.Extend;
/// <summary>
/// 企业资料输出参数
/// </summary>
public class FBS_CusExtendOutput
{
    /// <summary>
    /// 主键Id
    /// </summary>
    public long Id { get; set; }
    /// <summary>
    /// 用户ID
    /// </summary>
    public long CustomerId { get; set; }
    /// <summary>
    /// 用户名
    /// </summary>
    public long CustomerName { get; set; }
    /// <summary>
    /// 企业类型
    /// </summary>
    public string EnterpriseType { get; set; }
    /// <summary>
    /// 交易主体code
    /// </summary>
    public string TransactionCode { get; set; }
    /// <summary>
    /// 营业执照文件路径
    /// </summary>
    public string BusinessLicense { get; set; }
    /// <summary>
    /// 企业名称
    /// </summary>
    public string EnterpriseName { get; set; }
    /// <summary>
    /// 统一社会信用代码
    /// </summary>
    public string UnifiedSocialCreditCode { get; set; }
    /// <summary>
    /// 注册资金
    /// </summary>
    public string RegisteredCapital { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    public string LegalRepresentativeName { get; set; }
    /// <summary>
    /// 法定代表人身份证文件路径
    /// </summary>
    public string LegalRepresentativeIdCard { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    public string LegalRepresentativeIdNumber { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    public string LegalRepresentativePhone { get; set; }
    /// <summary>
    /// 企业住所
    /// </summary>
    public string Residence { get; set; }
    /// <summary>
    /// 企业联系电话
    /// </summary>
    public string EnterprisePhone { get; set; }
    /// <summary>
    /// 企业成立时间
    /// </summary>
    public DateTime EstablishmentTime { get; set; }
    /// <summary>
    /// 企业主营业务
    /// </summary>
    public string? MainBusiness { get; set; }
    /// <summary>
    /// 企业邮箱
    /// </summary>
    public string EnterpriseEmail { get; set; }
    /// <summary>
    /// 业务经办人姓名
    /// </summary>
    public string? OperatorName { get; set; }
    /// <summary>
    /// 业务经办人身份证文件路径或标识
    /// </summary>
    public string? OperatorIdCard { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    public string? OperatorIdNumber { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    public string? OperatorPhone { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    public string BankName { get; set; }
    /// <summary>
    /// 法定代表人姓名
    /// </summary>
    public string BankAccount { get; set; }
    /// <summary>
    /// 审核步骤
    /// </summary>
    public CusExtendStep steps { 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>
    /// 创建者Id
    /// </summary>
    public long? CreateUserId { get; set; }
    /// <summary>
    /// 创建者姓名
    /// </summary>
    public string? CreateUserName { get; set; }
    /// <summary>
    /// 修改者Id
    /// </summary>
    public long? UpdateUserId { get; set; }
    /// <summary>
    /// 修改者姓名
    /// </summary>
    public string? UpdateUserName { get; set; }
}
/// <summary>
/// 企业资料数据导入模板实体
/// </summary>
public class ExportFBS_CusExtendOutput : ImportFBS_CusExtendInput
{
    [ImporterHeader(IsIgnore = true)]
    [ExporterHeader(IsIgnore = true)]
    public override string Error { get; set; }
}
/// <summary>
///  配置参数
/// </summary>
public class FBS_CusExtendParam
{
    /// <summary>
    /// Steps 枚举
    /// </summary>
    public List<MenmItem> StepsTypeItems {  get; set; }
    /// <summary>
    /// 行业分类
    /// </summary>
    public  List<FBS_EnterpriseTypeOutput>  EnterpriseTypes{ get; set; }
}
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_CusExtend/FBS_CusExtendService.cs
New file
@@ -0,0 +1,284 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
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.Extend;
using cylsg.utility;
namespace FZCZTB.Net.CustomerSYSTem;
/// <summary>
/// 企业资料服务 🧩
/// </summary>
[ApiDescriptionSettings(CustomerSYSTemConst.GroupName, Order = 100)]
public class FBS_CusExtendService : IDynamicApiController, ITransient
{
    private readonly SqlSugarRepository<FBS_CusExtend> _fBS_CusExtendRep;
    private readonly ISqlSugarClient _sqlSugarClient;
    private readonly SysDictTypeService _sysDictTypeService;
    private readonly FBS_EnterpriseTypeService _EnterpriseTypeService;
    public FBS_CusExtendService(SqlSugarRepository<FBS_CusExtend> fBS_CusExtendRep,
        ISqlSugarClient sqlSugarClient,
        SysDictTypeService sysDictTypeService,
        FBS_EnterpriseTypeService fBS_EnterpriseTypeService )
    {
        _fBS_CusExtendRep = fBS_CusExtendRep;
        _sqlSugarClient = sqlSugarClient;
        _sysDictTypeService = sysDictTypeService;
        _EnterpriseTypeService = fBS_EnterpriseTypeService;
    }
    /// <summary>
    ///
    /// </summary>
    /// <returns></returns>
    [DisplayName("页面其他初始化资料")]
    [ApiDescriptionSettings(Name = "GetParam"), HttpGet]
    public async Task<FBS_CusExtendParam> GetParam()
    {
        return new FBS_CusExtendParam()
        {
            EnterpriseTypes = await _EnterpriseTypeService.GetTreeData(),
            StepsTypeItems = CommonHelper.GetEnumItemsWithAttributes<CusExtendStep>()
        };
    }
    /// <summary>
    /// 分页查询企业资料 🔖
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("分页查询企业资料")]
    [ApiDescriptionSettings(Name = "Page"), HttpPost]
    public async Task<SqlSugarPagedList<FBS_CusExtendOutput>> Page(PageFBS_CusExtendInput input)
    {
        input.Keyword = input.Keyword?.Trim();
        var query = _fBS_CusExtendRep.AsQueryable()
            .WhereIF(!string.IsNullOrWhiteSpace(input.Keyword), u => u.EnterpriseType.Contains(input.Keyword) || u.TransactionCode.Contains(input.Keyword) || u.BusinessLicense.Contains(input.Keyword) || u.EnterpriseName.Contains(input.Keyword) || u.UnifiedSocialCreditCode.Contains(input.Keyword) || u.RegisteredCapital.Contains(input.Keyword) || u.LegalRepresentativeName.Contains(input.Keyword) || u.LegalRepresentativeIdCard.Contains(input.Keyword) || u.LegalRepresentativeIdNumber.Contains(input.Keyword) || u.LegalRepresentativePhone.Contains(input.Keyword) || u.Residence.Contains(input.Keyword) || u.EnterprisePhone.Contains(input.Keyword) || u.MainBusiness.Contains(input.Keyword) || u.EnterpriseEmail.Contains(input.Keyword) || u.OperatorName.Contains(input.Keyword) || u.OperatorIdCard.Contains(input.Keyword) || u.OperatorIdNumber.Contains(input.Keyword) || u.OperatorPhone.Contains(input.Keyword) || u.BankName.Contains(input.Keyword) || u.BankAccount.Contains(input.Keyword))
            .WhereIF(!string.IsNullOrWhiteSpace(input.EnterpriseType), u => u.EnterpriseType.Contains(input.EnterpriseType.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.TransactionCode), u => u.TransactionCode.Contains(input.TransactionCode.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.BusinessLicense), u => u.BusinessLicense.Contains(input.BusinessLicense.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.EnterpriseName), u => u.EnterpriseName.Contains(input.EnterpriseName.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.UnifiedSocialCreditCode), u => u.UnifiedSocialCreditCode.Contains(input.UnifiedSocialCreditCode.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.RegisteredCapital), u => u.RegisteredCapital.Contains(input.RegisteredCapital.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.LegalRepresentativeName), u => u.LegalRepresentativeName.Contains(input.LegalRepresentativeName.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.LegalRepresentativeIdCard), u => u.LegalRepresentativeIdCard.Contains(input.LegalRepresentativeIdCard.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.LegalRepresentativeIdNumber), u => u.LegalRepresentativeIdNumber.Contains(input.LegalRepresentativeIdNumber.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.LegalRepresentativePhone), u => u.LegalRepresentativePhone.Contains(input.LegalRepresentativePhone.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.Residence), u => u.Residence.Contains(input.Residence.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.EnterprisePhone), u => u.EnterprisePhone.Contains(input.EnterprisePhone.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.MainBusiness), u => u.MainBusiness.Contains(input.MainBusiness.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.EnterpriseEmail), u => u.EnterpriseEmail.Contains(input.EnterpriseEmail.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.OperatorName), u => u.OperatorName.Contains(input.OperatorName.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.OperatorIdCard), u => u.OperatorIdCard.Contains(input.OperatorIdCard.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.OperatorIdNumber), u => u.OperatorIdNumber.Contains(input.OperatorIdNumber.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.OperatorPhone), u => u.OperatorPhone.Contains(input.OperatorPhone.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.BankName), u => u.BankName.Contains(input.BankName.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.BankAccount), u => u.BankAccount.Contains(input.BankAccount.Trim()))
            .WhereIF(input.CustomerId != null, u => u.CustomerId == input.CustomerId)
            .WhereIF(input.EstablishmentTimeRange?.Length == 2, u => u.EstablishmentTime >= input.EstablishmentTimeRange[0] && u.EstablishmentTime <= input.EstablishmentTimeRange[1])
            .WhereIF(input.steps != null, u => u.steps == input.steps)
            .Select<FBS_CusExtendOutput>();
        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_CusExtend> Detail([FromQuery] QueryByIdFBS_CusExtendInput input)
    {
        return await _fBS_CusExtendRep.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_CusExtendInput input)
    {
        var entity = input.Adapt<FBS_CusExtend>();
        return await _fBS_CusExtendRep.InsertAsync(entity) ? entity.Id : 0;
    }
    /// <summary>
    /// 更新企业资料 ✏️
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("更新企业资料")]
    [ApiDescriptionSettings(Name = "Update"), HttpPost]
    public async Task Update(UpdateFBS_CusExtendInput input)
    {
        var entity = input.Adapt<FBS_CusExtend>();
        await _fBS_CusExtendRep.AsUpdateable(entity)
        .ExecuteCommandAsync();
    }
    /// <summary>
    /// 删除企业资料 ❌
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("删除企业资料")]
    [ApiDescriptionSettings(Name = "Delete"), HttpPost]
    public async Task Delete(DeleteFBS_CusExtendInput input)
    {
        var entity = await _fBS_CusExtendRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
        //await _fBS_CusExtendRep.FakeDeleteAsync(entity);   //假删除
        await _fBS_CusExtendRep.DeleteAsync(entity);   //真删除
    }
    /// <summary>
    /// 批量删除企业资料 ❌
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("批量删除企业资料")]
    [ApiDescriptionSettings(Name = "BatchDelete"), HttpPost]
    public async Task<bool> BatchDelete([Required(ErrorMessage = "主键列表不能为空")]List<DeleteFBS_CusExtendInput> input)
    {
        var exp = Expressionable.Create<FBS_CusExtend>();
        foreach (var row in input) exp = exp.Or(it => it.Id == row.Id);
        var list = await _fBS_CusExtendRep.AsQueryable().Where(exp.ToExpression()).ToListAsync();
       // return await _fBS_CusExtendRep.FakeDeleteAsync(list);   //假删除
        return await _fBS_CusExtendRep.DeleteAsync(list);   //真删除
    }
    /// <summary>
    /// 导出企业资料记录 🔖
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("导出企业资料记录")]
    [ApiDescriptionSettings(Name = "Export"), HttpPost, NonUnify]
    public async Task<IActionResult> Export(PageFBS_CusExtendInput input)
    {
        var list = (await Page(input)).Items?.Adapt<List<ExportFBS_CusExtendOutput>>() ?? new();
        if (input.SelectKeyList?.Count > 0) list = list.Where(x => input.SelectKeyList.Contains(x.Id)).ToList();
        //var stepsDictMap = _sysDictTypeService.GetDataList(new GetDataDictTypeInput { Code = "CusExtendStep" }).Result.ToDictionary(x => x.Value, x => x.Label);
        //list.ForEach(e => {
        //    e.stepsDictLabel = stepsDictMap.GetValueOrDefault(e.steps ?? CusExtendStep.UNExamine, e.steps);
        //});
        return ExcelHelper.ExportTemplate(list, "企业资料导出记录");
    }
    /// <summary>
    /// 下载企业资料数据导入模板 ⬇️
    /// </summary>
    /// <returns></returns>
    [DisplayName("下载企业资料数据导入模板")]
    [ApiDescriptionSettings(Name = "Import"), HttpGet, NonUnify]
    public IActionResult DownloadTemplate()
    {
        return ExcelHelper.ExportTemplate(new List<ExportFBS_CusExtendOutput>(), "企业资料导入模板");
    }
    private static readonly object _fBS_CusExtendImportLock = new object();
    /// <summary>
    /// 导入企业资料记录 💾
    /// </summary>
    /// <returns></returns>
    [DisplayName("导入企业资料记录")]
    [ApiDescriptionSettings(Name = "Import"), HttpPost, NonUnify, UnitOfWork]
    public IActionResult ImportData([Required] IFormFile file)
    {
        lock (_fBS_CusExtendImportLock)
        {
            var stepsDictMap = _sysDictTypeService.GetDataList(new GetDataDictTypeInput { Code = "CusExtendStep" }).Result.ToDictionary(x => x.Label!, x => x.Value);
            var stream = ExcelHelper.ImportData<ImportFBS_CusExtendInput, FBS_CusExtend>(file, (list, markerErrorAction) =>
            {
                _sqlSugarClient.Utilities.PageEach(list, 2048, pageItems =>
                {
                    //// 映射字典值
                    //foreach(var item in pageItems) {
                    //    if (string.IsNullOrWhiteSpace(item.stepsDictLabel)) continue;
                    //    item.steps = stepsDictMap.GetValueOrDefault(item.stepsDictLabel);
                    //    if (item.steps == null) item.Error = "审核步骤字典映射失败";
                    //}
                    // 校验并过滤必填基本类型为null的字段
                    var rows = pageItems.Where(x => {
                        if (!string.IsNullOrWhiteSpace(x.Error)) return false;
                        if (x.CustomerId == null){
                            x.Error = "用户ID不能为空";
                            return false;
                        }
                        if (!string.IsNullOrWhiteSpace(x.Error)) return false;
                        if (x.steps == null){
                            x.Error = "审核步骤不能为空";
                            return false;
                        }
                        return true;
                    }).Adapt<List<FBS_CusExtend>>();
                    var storageable = _fBS_CusExtendRep.Context.Storageable(rows)
                        .SplitError(it => string.IsNullOrWhiteSpace(it.Item.EnterpriseType), "企业类型 不能为空")
                        .SplitError(it => it.Item.EnterpriseType?.Length > 255, "企业类型 长度不能超过255个字符")
                        .SplitError(it => string.IsNullOrWhiteSpace(it.Item.TransactionCode), "交易主体code不能为空")
                        .SplitError(it => it.Item.TransactionCode?.Length > 255, "交易主体code长度不能超过255个字符")
                        .SplitError(it => string.IsNullOrWhiteSpace(it.Item.BusinessLicense), "营业执照文件路径不能为空")
                        .SplitError(it => it.Item.BusinessLicense?.Length > 255, "营业执照文件路径长度不能超过255个字符")
                        .SplitError(it => string.IsNullOrWhiteSpace(it.Item.EnterpriseName), "企业名称不能为空")
                        .SplitError(it => it.Item.EnterpriseName?.Length > 255, "企业名称长度不能超过255个字符")
                        .SplitError(it => string.IsNullOrWhiteSpace(it.Item.UnifiedSocialCreditCode), "统一社会信用代码不能为空")
                        .SplitError(it => it.Item.UnifiedSocialCreditCode?.Length > 255, "统一社会信用代码长度不能超过255个字符")
                        .SplitError(it => string.IsNullOrWhiteSpace(it.Item.RegisteredCapital), "注册资金不能为空")
                        .SplitError(it => it.Item.RegisteredCapital?.Length > 255, "注册资金长度不能超过255个字符")
                        .SplitError(it => string.IsNullOrWhiteSpace(it.Item.LegalRepresentativeName), "法定代表人姓名不能为空")
                        .SplitError(it => it.Item.LegalRepresentativeName?.Length > 255, "法定代表人姓名长度不能超过255个字符")
                        .SplitError(it => string.IsNullOrWhiteSpace(it.Item.LegalRepresentativeIdCard), "法定代表人身份证文件路径不能为空")
                        .SplitError(it => it.Item.LegalRepresentativeIdCard?.Length > 255, "法定代表人身份证文件路径长度不能超过255个字符")
                        .SplitError(it => string.IsNullOrWhiteSpace(it.Item.LegalRepresentativeIdNumber), "法定代表人姓名不能为空")
                        .SplitError(it => it.Item.LegalRepresentativeIdNumber?.Length > 255, "法定代表人姓名长度不能超过255个字符")
                        .SplitError(it => string.IsNullOrWhiteSpace(it.Item.LegalRepresentativePhone), "法定代表人姓名不能为空")
                        .SplitError(it => it.Item.LegalRepresentativePhone?.Length > 255, "法定代表人姓名长度不能超过255个字符")
                        .SplitError(it => string.IsNullOrWhiteSpace(it.Item.Residence), "企业住所不能为空")
                        .SplitError(it => it.Item.Residence?.Length > 255, "企业住所长度不能超过255个字符")
                        .SplitError(it => string.IsNullOrWhiteSpace(it.Item.EnterprisePhone), "企业联系电话不能为空")
                        .SplitError(it => it.Item.EnterprisePhone?.Length > 255, "企业联系电话长度不能超过255个字符")
                        .SplitError(it => string.IsNullOrWhiteSpace(it.Item.EnterpriseEmail), "企业邮箱不能为空")
                        .SplitError(it => it.Item.EnterpriseEmail?.Length > 255, "企业邮箱长度不能超过255个字符")
                        .SplitError(it => it.Item.OperatorName?.Length > 255, "业务经办人姓名长度不能超过255个字符")
                        .SplitError(it => it.Item.OperatorIdCard?.Length > 255, "业务经办人身份证文件路径或标识长度不能超过255个字符")
                        .SplitError(it => it.Item.OperatorIdNumber?.Length > 255, "法定代表人姓名长度不能超过255个字符")
                        .SplitError(it => it.Item.OperatorPhone?.Length > 255, "法定代表人姓名长度不能超过255个字符")
                        .SplitError(it => string.IsNullOrWhiteSpace(it.Item.BankName), "法定代表人姓名不能为空")
                        .SplitError(it => it.Item.BankName?.Length > 255, "法定代表人姓名长度不能超过255个字符")
                        .SplitError(it => string.IsNullOrWhiteSpace(it.Item.BankAccount), "法定代表人姓名不能为空")
                        .SplitError(it => it.Item.BankAccount?.Length > 255, "法定代表人姓名长度不能超过255个字符")
                        .SplitInsert(_ => true)
                        .ToStorage();
                    storageable.AsInsertable.ExecuteCommand();// 不存在插入
                    storageable.AsUpdateable.ExecuteCommand();// 存在更新
                    // 标记错误信息
                    markerErrorAction.Invoke(storageable, pageItems, rows);
                });
            });
            return stream;
        }
    }
}
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_EnterpriseType/Dto/FBS_EnterpriseTypeInput.cs
@@ -32,7 +32,11 @@
    /// </summary>
    [Required(ErrorMessage = "代码不能为空")]
    public virtual string Code { get; set; }
    /// <summary>
    /// 说明
    /// </summary>
    public string? Description { get; set; }
    /// <summary>
    /// 父
    /// </summary>
@@ -55,7 +59,11 @@
    /// 代码
    /// </summary>
    public string Code { get; set; }
    /// <summary>
    /// 说明
    /// </summary>
    public string? Description { get; set; }
    /// <summary>
    /// 父
    /// </summary>
@@ -85,12 +93,15 @@
    [Required(ErrorMessage = "代码不能为空")]
    [MaxLength(36, ErrorMessage = "代码字符长度不能超过36")]
    public string Code { get; set; }
    /// <summary>
    /// 说明
    /// </summary>
    public string? Description { get; set; }
    /// <summary>
    /// 父
    /// </summary>
    [Required(ErrorMessage = "父不能为空")]
    public int? ParentId { get; set; }
    public long? ParentId { get; set; }
    
}
@@ -131,12 +142,16 @@
    [Required(ErrorMessage = "代码不能为空")]
    [MaxLength(36, ErrorMessage = "代码字符长度不能超过36")]
    public string Code { get; set; }
    /// <summary>
    /// 说明
    /// </summary>
    public string? Description { get; set; }
    /// <summary>
    /// 父
    /// </summary>    
    [Required(ErrorMessage = "父不能为空")]
    public int? ParentId { get; set; }
    public long? ParentId { get; set; }
    
}
@@ -166,12 +181,17 @@
    [ImporterHeader(Name = "*代码")]
    [ExporterHeader("*代码", Format = "", Width = 25, IsBold = true)]
    public string Code { get; set; }
    /// <summary>
    /// 说明
    /// </summary>
    [ImporterHeader(Name = "*说明")]
    [ExporterHeader("*说明", Format = "", Width = 25, IsBold = true)]
    public string? Description { get; set; }
    /// <summary>
    /// 父
    /// </summary>
    [ImporterHeader(Name = "*父")]
    [ExporterHeader("*父", Format = "", Width = 25, IsBold = true)]
    public int? ParentId { get; set; }
    public long? ParentId { get; set; }
    
}
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_EnterpriseType/Dto/FBS_EnterpriseTypeOutput.cs
@@ -30,8 +30,12 @@
    /// <summary>
    /// 父
    /// </summary>
    public int ParentId { get; set; }
    public long  ParentId { get; set; }
    /// <summary>
    /// 说明
    /// </summary>
    public string? Description { get; set; }
    /// <summary>
    /// 租户Id
    /// </summary>
@@ -69,7 +73,7 @@
    /// <summary>
    /// 子类
    /// </summary>
    public List<FBS_EnterpriseType>? Child { get; set; }
    public List<FBS_EnterpriseTypeOutput>? Child { get; set; }
}
Admin.NET/FZCZTB.Net.CustomerSYSTem/Service/FBS_EnterpriseType/FBS_EnterpriseTypeService.cs
@@ -17,6 +17,11 @@
using Furion.DependencyInjection;
using FZCZTB.NET.MD.ConfigMd;
using Admin.NET.Core;
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
using Microsoft.AspNetCore.Hosting;
using DocumentFormat.OpenXml.Office2010.ExcelAc;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical;
namespace FZCZTB.Net.CustomerSYSTem;
/// <summary>
@@ -27,11 +32,15 @@
{
    private readonly SqlSugarRepository<FBS_EnterpriseType> _fBS_EnterpriseTypeRep;
    private readonly ISqlSugarClient _sqlSugarClient;
    private readonly IWebHostEnvironment _webHostEnv;
    public FBS_EnterpriseTypeService(SqlSugarRepository<FBS_EnterpriseType> fBS_EnterpriseTypeRep, ISqlSugarClient sqlSugarClient)
    // 通过构造函数注入 IWebHostEnvironment
    public FBS_EnterpriseTypeService(SqlSugarRepository<FBS_EnterpriseType> fBS_EnterpriseTypeRep, ISqlSugarClient sqlSugarClient, IWebHostEnvironment webHostEnv)
    {
        _fBS_EnterpriseTypeRep = fBS_EnterpriseTypeRep;
        _sqlSugarClient = sqlSugarClient;
        _webHostEnv = webHostEnv;
    }
    /// <summary>
@@ -59,17 +68,14 @@
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("获取树形数据")]
    [ApiDescriptionSettings(Name = "TreeData"), HttpPost]
    public async Task<List<FBS_EnterpriseTypeOutput>> GetTreeData(PageFBS_EnterpriseTypeInput input)
    [ApiDescriptionSettings(Name = "TreeData"), HttpGet]
    public async Task<List<FBS_EnterpriseTypeOutput>> GetTreeData()
    {
        input.Keyword = input.Keyword?.Trim();
        var query = _fBS_EnterpriseTypeRep.AsQueryable()
            .WhereIF(!string.IsNullOrWhiteSpace(input.Keyword), u => u.Name.Contains(input.Keyword) || u.Code.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(input.ParentId != null, u => u.ParentId == input.ParentId)
            .Select<FBS_EnterpriseTypeOutput>();
        return await query.OrderBuilder(input).ToTreeAsync( x=>x.Child, x=>x.ParentId,0,x => x.Id);
        return await query.ToTreeAsync( x=>x.Child, x=>x.ParentId,0,x => x.Id);
    }
    /// <summary>
    /// 获取企业类配置表详情 ℹ️
@@ -94,7 +100,67 @@
    {
        var entity = input.Adapt<FBS_EnterpriseType>();
        return await _fBS_EnterpriseTypeRep.InsertAsync(entity) ? entity.Id : 0;
    }
    /// <summary>
    /// 初始化企业类型
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [DisplayName("初始化企业类型")]
    [ApiDescriptionSettings(Name = "InitEnterpriseType"), HttpGet]
     public async Task<long> InitEnterpriseType()
    {
        string absolutePath = Path.Combine(_webHostEnv.ContentRootPath, "InItFile\\industry_code4.json");
        // 检查文件是否存在
        if (!File.Exists(absolutePath))
        {
            throw new FileNotFoundException("industry_code4 文件不存在", "InItFile\\industry_code4.json");
        }
        // 读取文件内容
        string jsonstr = File.ReadAllText(absolutePath);
        // var jsonstr = "[{\"Name\": \"农、林、牧、渔业\",\"Code\": \"A\",\"Child\": [{\"Name\": \"农业\",\"Code\": \"01\",\"Child\": [{\"Name\": \"谷物种植\",\"Code\": \"011\",\"Child\": [{\"Name\": \"稻谷种植\",\"Code\": \"0111\",\"Child\": null},{\"Name\": \"小麦种植\",\"Code\": \"0112\",\"Child\": null},{\"Name\": \"玉米种植\",\"Code\": \"0113\",\"Child\": null},{\"Name\": \"其他谷物种植\",\"Code\": \"0119\",\"Child\": null}]},{\"Name\": \"豆类、油料和薯类种植\",\"Code\": \"012\",\"Child\": [{\"Name\": \"豆类种植\",\"Code\": \"0121\",\"Child\": null},{\"Name\": \"油料种植\",\"Code\": \"0122\",\"Child\": null},{\"Name\": \"薯类种植\",\"Code\": \"0123\",\"Child\": null}]},{\"Name\": \"棉、麻、糖、烟草种植\",\"Code\": \"013\",\"Child\": [{\"Name\": \"棉花种植\",\"Code\": \"0131\",\"Child\": null},{\"Name\": \"麻类种植\",\"Code\": \"0132\",\"Child\": null},{\"Name\": \"糖料种植\",\"Code\": \"0133\",\"Child\": null},{\"Name\": \"烟草种植\",\"Code\": \"0134\",\"Child\": null}]},{\"Name\": \"蔬菜、食用菌及园艺作物种植\",\"Code\": \"014\",\"Child\": [{\"Name\": \"蔬菜种植\",\"Code\": \"0141\",\"Child\": null},{\"Name\": \"食用菌种植\",\"Code\": \"0142\",\"Child\": null},{\"Name\": \"花卉种植\",\"Code\": \"0143\",\"Child\": null},{\"Name\": \"其他园艺作物种植\",\"Code\": \"0149\",\"Child\": null}]},{\"Name\": \"水果种植\",\"Code\": \"015\",\"Child\": [{\"Name\": \"仁果类和核果类水果种植\",\"Code\": \"0151\",\"Child\": null},{\"Name\": \"葡萄种植\",\"Code\": \"0152\",\"Child\": null},{\"Name\": \"柑橘类种植\",\"Code\": \"0153\",\"Child\": null},{\"Name\": \"香蕉等亚热带水果种植\",\"Code\": \"0154\",\"Child\": null},{\"Name\": \"其他水果种植\",\"Code\": \"0159\",\"Child\": null}]},{\"Name\": \"坚果、含油果、香料和饮料作物种植\",\"Code\": \"016\",\"Child\": [{\"Name\": \"坚果种植\",\"Code\": \"0161\",\"Child\": null},{\"Name\": \"含油果种植\",\"Code\": \"0162\",\"Child\": null},{\"Name\": \"香料作物种植\",\"Code\": \"0163\",\"Child\": null},{\"Name\": \"茶叶种植\",\"Code\": \"0164\",\"Child\": null},{\"Name\": \"其他饮料作物种植\",\"Code\": \"0169\",\"Child\": null}]},{\"Name\": \"中药材种植\",\"Code\": \"017\",\"Child\": [{\"Name\": \"中草药种植\",\"Code\": \"0171\",\"Child\": null},{\"Name\": \"其他中药材种植\",\"Code\": \"0179\",\"Child\": null}]},{\"Name\": \"草种植及割草\",\"Code\": \"018\",\"Child\": [{\"Name\": \"草种植\",\"Code\": \"0181\",\"Child\": null},{\"Name\": \"天然草原割草\",\"Code\": \"0182\",\"Child\": null}]},{\"Name\": \"其他农业\",\"Code\": \"019\",\"Child\": null}]},{\"Name\": \"林业\",\"Code\": \"02\",\"Child\": [{\"Name\": \"林木育种和育苗\",\"Code\": \"021\",\"Child\": [{\"Name\": \"林木育种\",\"Code\": \"0211\",\"Child\": null},{\"Name\": \"林木育苗\",\"Code\": \"0212\",\"Child\": null}]},{\"Name\": \"造林和更新\",\"Code\": \"022\",\"Child\": null},{\"Name\": \"森林经营、管护和改培\",\"Code\": \"023\",\"Child\": [{\"Name\": \"森林经营和管护\",\"Code\": \"0231\",\"Child\": null},{\"Name\": \"森林改培\",\"Code\": \"0232\",\"Child\": null}]},{\"Name\": \"木材和竹材采运\",\"Code\": \"024\",\"Child\": [{\"Name\": \"木材采运\",\"Code\": \"0241\",\"Child\": null},{\"Name\": \"竹材采运\",\"Code\": \"0242\",\"Child\": null}]},{\"Name\": \"林产品采集\",\"Code\": \"025\",\"Child\": [{\"Name\": \"木竹材林产品采集\",\"Code\": \"0251\",\"Child\": null},{\"Name\": \"非木竹材林产品采集\",\"Code\": \"0252\",\"Child\": null}]}]},{\"Name\": \"畜牧业\",\"Code\": \"03\",\"Child\": [{\"Name\": \"牲畜饲养\",\"Code\": \"031\",\"Child\": [{\"Name\": \"牛的饲养\",\"Code\": \"0311\",\"Child\": null},{\"Name\": \"马的饲养\",\"Code\": \"0312\",\"Child\": null},{\"Name\": \"猪的饲养\",\"Code\": \"0313\",\"Child\": null},{\"Name\": \"羊的饲养\",\"Code\": \"0314\",\"Child\": null},{\"Name\": \"骆驼饲养\",\"Code\": \"0315\",\"Child\": null},{\"Name\": \"其他牲畜饲养\",\"Code\": \"0319\",\"Child\": null}]},{\"Name\": \"家禽饲养\",\"Code\": \"032\",\"Child\": [{\"Name\": \"鸡的饲养\",\"Code\": \"0321\",\"Child\": null},{\"Name\": \"鸭的饲养\",\"Code\": \"0322\",\"Child\": null},{\"Name\": \"鹅的饲养\",\"Code\": \"0323\",\"Child\": null},{\"Name\": \"其他家禽饲养\",\"Code\": \"0329\",\"Child\": null}]},{\"Name\": \"狩猎和捕捉动物\",\"Code\": \"033\",\"Child\": null},{\"Name\": \"其他畜牧业\",\"Code\": \"039\",\"Child\": [{\"Name\": \"兔的饲养\",\"Code\": \"0391\",\"Child\": null},{\"Name\": \"蜜蜂饲养\",\"Code\": \"0392\",\"Child\": null},{\"Name\": \"其他未列明畜牧业\",\"Code\": \"0399\",\"Child\": null}]}]},{\"Name\": \"渔业\",\"Code\": \"04\",\"Child\": [{\"Name\": \"水产养殖\",\"Code\": \"041\",\"Child\": [{\"Name\": \"海水养殖\",\"Code\": \"0411\",\"Child\": null},{\"Name\": \"内陆养殖\",\"Code\": \"0412\",\"Child\": null}]},{\"Name\": \"水产捕捞\",\"Code\": \"042\",\"Child\": [{\"Name\": \"海水捕捞\",\"Code\": \"0421\",\"Child\": null},{\"Name\": \"内陆捕捞\",\"Code\": \"0422\",\"Child\": null}]}]},{\"Name\": \"农、林、牧、渔专业及辅助性活动\",\"Code\": \"05\",\"Child\": [{\"Name\": \"农业专业及辅助性活动\",\"Code\": \"051\",\"Child\": [{\"Name\": \"种子种苗培育活动\",\"Code\": \"0511\",\"Child\": null},{\"Name\": \"农业机械活动\",\"Code\": \"0512\",\"Child\": null},{\"Name\": \"灌溉活动\",\"Code\": \"0513\",\"Child\": null},{\"Name\": \"农产品初加工活动\",\"Code\": \"0514\",\"Child\": null},{\"Name\": \"农作物病虫害防治活动\",\"Code\": \"0515\",\"Child\": null},{\"Name\": \"其他农业专业及辅助性活动\",\"Code\": \"0519\",\"Child\": null}]},{\"Name\": \"林业专业及辅助性活动\",\"Code\": \"052\",\"Child\": [{\"Name\": \"林业有害生物防治活动\",\"Code\": \"0521\",\"Child\": null},{\"Name\": \"森林防火活动\",\"Code\": \"0522\",\"Child\": null},{\"Name\": \"林产品初级加工活动\",\"Code\": \"0523\",\"Child\": null},{\"Name\": \"其他林业专业及辅助性活动\",\"Code\": \"0529\",\"Child\": null}]},{\"Name\": \"畜牧专业及辅助性活动\",\"Code\": \"053\",\"Child\": [{\"Name\": \"畜牧良种繁殖活动\",\"Code\": \"0531\",\"Child\": null},{\"Name\": \"畜禽粪污处理活动\",\"Code\": \"0532\",\"Child\": null},{\"Name\": \"其他畜牧专业及辅助性活动\",\"Code\": \"0539\",\"Child\": null}]},{\"Name\": \"渔业专业及辅助性活动\",\"Code\": \"054\",\"Child\": [{\"Name\": \"鱼苗及鱼种场活动\",\"Code\": \"0541\",\"Child\": null},{\"Name\": \"其他渔业专业及辅助性活动\",\"Code\": \"0549\",\"Child\": null}]}]}]},{\"Name\": \"采矿业\",\"Code\": \"B\",\"Child\": [{\"Name\": \"煤炭开采和洗选业\",\"Code\": \"06\",\"Child\": [{\"Name\": \"烟煤和无烟煤开采洗选\",\"Code\": \"061\",\"Child\": null},{\"Name\": \"褐煤开采洗选\",\"Code\": \"062\",\"Child\": null},{\"Name\": \"其他煤炭采选\",\"Code\": \"069\",\"Child\": null}]},{\"Name\": \"石油和天然气开采业\",\"Code\": \"07\",\"Child\": [{\"Name\": \"石油开采\",\"Code\": \"071\",\"Child\": [{\"Name\": \"陆地石油开采\",\"Code\": \"0711\",\"Child\": null},{\"Name\": \"海洋石油开采\",\"Code\": \"0712\",\"Child\": null}]},{\"Name\": \"天然气开采\",\"Code\": \"072\",\"Child\": [{\"Name\": \"陆地天然气开采\",\"Code\": \"0721\",\"Child\": null},{\"Name\": \"海洋天然气及可燃冰开采\",\"Code\": \"0722\",\"Child\": null}]}]},{\"Name\": \"黑色金属矿采选业\",\"Code\": \"08\",\"Child\": [{\"Name\": \"铁矿采选\",\"Code\": \"081\",\"Child\": null},{\"Name\": \"锰矿、铬矿采选\",\"Code\": \"082\",\"Child\": null},{\"Name\": \"其他黑色金属矿采选\",\"Code\": \"089\",\"Child\": null}]},{\"Name\": \"有色金属矿采选业\",\"Code\": \"09\",\"Child\": [{\"Name\": \"常用有色金属矿采选\",\"Code\": \"091\",\"Child\": [{\"Name\": \"铜矿采选\",\"Code\": \"0911\",\"Child\": null},{\"Name\": \"铅锌矿采选\",\"Code\": \"0912\",\"Child\": null},{\"Name\": \"镍钴矿采选\",\"Code\": \"0913\",\"Child\": null},{\"Name\": \"锡矿采选\",\"Code\": \"0914\",\"Child\": null},{\"Name\": \"锑矿采选\",\"Code\": \"0915\",\"Child\": null},{\"Name\": \"铝矿采选\",\"Code\": \"0916\",\"Child\": null},{\"Name\": \"镁矿采选\",\"Code\": \"0917\",\"Child\": null},{\"Name\": \"其他常用有色金属矿采选\",\"Code\": \"0919\",\"Child\": null}]},{\"Name\": \"贵金属矿采选\",\"Code\": \"092\",\"Child\": [{\"Name\": \"金矿采选\",\"Code\": \"0921\",\"Child\": null},{\"Name\": \"银矿采选\",\"Code\": \"0922\",\"Child\": null},{\"Name\": \"其他贵金属矿采选\",\"Code\": \"0929\",\"Child\": null}]},{\"Name\": \"稀有稀土金属矿采选\",\"Code\": \"093\",\"Child\": [{\"Name\": \"钨钼矿采选\",\"Code\": \"0931\",\"Child\": null},{\"Name\": \"稀土金属矿采选\",\"Code\": \"0932\",\"Child\": null},{\"Name\": \"放射性金属矿采选\",\"Code\": \"0933\",\"Child\": null},{\"Name\": \"其他稀有金属矿采选\",\"Code\": \"0939\",\"Child\": null}]}]},{\"Name\": \"非金属矿采选业\",\"Code\": \"10\",\"Child\": [{\"Name\": \"土砂石开采\",\"Code\": \"101\",\"Child\": [{\"Name\": \"石灰石、石膏开采\",\"Code\": \"1011\",\"Child\": null},{\"Name\": \"建筑装饰用石开采\",\"Code\": \"1012\",\"Child\": null},{\"Name\": \"耐火土石开采\",\"Code\": \"1013\",\"Child\": null},{\"Name\": \"粘土及其他土砂石开采\",\"Code\": \"1019\",\"Child\": null}]},{\"Name\": \"化学矿开采\",\"Code\": \"102\",\"Child\": null},{\"Name\": \"采盐\",\"Code\": \"103\",\"Child\": null},{\"Name\": \"石棉及其他非金属矿采选\",\"Code\": \"109\",\"Child\": [{\"Name\": \"石棉、云母矿采选\",\"Code\": \"1091\",\"Child\": null},{\"Name\": \"石墨、滑石采选\",\"Code\": \"1092\",\"Child\": null},{\"Name\": \"宝石、玉石采选\",\"Code\": \"1093\",\"Child\": null},{\"Name\": \"其他未列明非金属矿采选\",\"Code\": \"1099\",\"Child\": null}]}]},{\"Name\": \"开采专业及辅助性活动\",\"Code\": \"11\",\"Child\": [{\"Name\": \"煤炭开采和洗选专业及辅助性活动\",\"Code\": \"111\",\"Child\": null},{\"Name\": \"石油和天然气开采专业及辅助性活动\",\"Code\": \"112\",\"Child\": null},{\"Name\": \"其他开采专业及辅助性活动\",\"Code\": \"119\",\"Child\": null}]},{\"Name\": \"其他采矿业\",\"Code\": \"12\",\"Child\": [{\"Name\": \"其他采矿业\",\"Code\": \"120\",\"Child\": null}]}]},{\"Name\": \"制造业\",\"Code\": \"C\",\"Child\": [{\"Name\": \"农副食品加工业\",\"Code\": \"13\",\"Child\": [{\"Name\": \"谷物磨制\",\"Code\": \"131\",\"Child\": [{\"Name\": \"稻谷加工\",\"Code\": \"1311\",\"Child\": null},{\"Name\": \"小麦加工\",\"Code\": \"1312\",\"Child\": null},{\"Name\": \"玉米加工\",\"Code\": \"1313\",\"Child\": null},{\"Name\": \"杂粮加工\",\"Code\": \"1314\",\"Child\": null},{\"Name\": \"其他谷物磨制\",\"Code\": \"1319\",\"Child\": null}]},{\"Name\": \"饲料加工\",\"Code\": \"132\",\"Child\": [{\"Name\": \"宠物饲料加工\",\"Code\": \"1321\",\"Child\": null},{\"Name\": \"其他饲料加工\",\"Code\": \"1329\",\"Child\": null}]},{\"Name\": \"植物油加工\",\"Code\": \"133\",\"Child\": [{\"Name\": \"食用植物油加工\",\"Code\": \"1331\",\"Child\": null},{\"Name\": \"非食用植物油加工\",\"Code\": \"1332\",\"Child\": null}]},{\"Name\": \"制糖业\",\"Code\": \"134\",\"Child\": null},{\"Name\": \"屠宰及肉类加工\",\"Code\": \"135\",\"Child\": [{\"Name\": \"牲畜屠宰\",\"Code\": \"1351\",\"Child\": null},{\"Name\": \"禽类屠宰\",\"Code\": \"1352\",\"Child\": null},{\"Name\": \"肉制品及副产品加工\",\"Code\": \"1353\",\"Child\": null}]},{\"Name\": \"水产品加工\",\"Code\": \"136\",\"Child\": [{\"Name\": \"水产品冷冻加工\",\"Code\": \"1361\",\"Child\": null},{\"Name\": \"鱼糜制品及水产品干腌制加工\",\"Code\": \"1362\",\"Child\": null},{\"Name\": \"鱼油提取及制品制造\",\"Code\": \"1363\",\"Child\": null},{\"Name\": \"其他水产品加工\",\"Code\": \"1369\",\"Child\": null}]},{\"Name\": \"蔬菜、菌类、水果和坚果加工\",\"Code\": \"137\",\"Child\": [{\"Name\": \"蔬菜加工\",\"Code\": \"1371\",\"Child\": null},{\"Name\": \"食用菌加工\",\"Code\": \"1372\",\"Child\": null},{\"Name\": \"水果和坚果加工\",\"Code\": \"1373\",\"Child\": null}]},{\"Name\": \"其他农副食品加工\",\"Code\": \"139\",\"Child\": [{\"Name\": \"淀粉及淀粉制品制造\",\"Code\": \"1391\",\"Child\": null},{\"Name\": \"豆制品制造\",\"Code\": \"1392\",\"Child\": null},{\"Name\": \"蛋品加工\",\"Code\": \"1393\",\"Child\": null},{\"Name\": \"其他未列明农副食品加工\",\"Code\": \"1399\",\"Child\": null}]}]},{\"Name\": \"食品制造业\",\"Code\": \"14\",\"Child\": [{\"Name\": \"焙烤食品制造\",\"Code\": \"141\",\"Child\": [{\"Name\": \"糕点、面包制造\",\"Code\": \"1411\",\"Child\": null},{\"Name\": \"饼干及其他焙烤食品制造\",\"Code\": \"1419\",\"Child\": null}]},{\"Name\": \"糖果、巧克力及蜜饯制造\",\"Code\": \"142\",\"Child\": [{\"Name\": \"糖果、巧克力制造\",\"Code\": \"1421\",\"Child\": null},{\"Name\": \"蜜饯制作\",\"Code\": \"1422\",\"Child\": null}]},{\"Name\": \"方便食品制造\",\"Code\": \"143\",\"Child\": [{\"Name\": \"米、面制品制造\",\"Code\": \"1431\",\"Child\": null},{\"Name\": \"速冻食品制造\",\"Code\": \"1432\",\"Child\": null},{\"Name\": \"方便面制造\",\"Code\": \"1433\",\"Child\": null},{\"Name\": \"其他方便食品制造\",\"Code\": \"1439\",\"Child\": null}]},{\"Name\": \"乳制品制造\",\"Code\": \"144\",\"Child\": [{\"Name\": \"液体乳制造\",\"Code\": \"1441\",\"Child\": null},{\"Name\": \"乳粉制造\",\"Code\": \"1442\",\"Child\": null},{\"Name\": \"其他乳制品制造\",\"Code\": \"1449\",\"Child\": null}]},{\"Name\": \"罐头食品制造\",\"Code\": \"145\",\"Child\": [{\"Name\": \"肉、禽类罐头制造\",\"Code\": \"1451\",\"Child\": null},{\"Name\": \"水产品罐头制造\",\"Code\": \"1452\",\"Child\": null},{\"Name\": \"蔬菜、水果罐头制造\",\"Code\": \"1453\",\"Child\": null},{\"Name\": \"其他罐头食品制造\",\"Code\": \"1459\",\"Child\": null}]},{\"Name\": \"调味品、发酵制品制造\",\"Code\": \"146\",\"Child\": [{\"Name\": \"味精制造\",\"Code\": \"1461\",\"Child\": null},{\"Name\": \"酱油、食醋及类似制品制造\",\"Code\": \"1462\",\"Child\": null},{\"Name\": \"其他调味品、发酵制品制造\",\"Code\": \"1469\",\"Child\": null}]},{\"Name\": \"其他食品制造\",\"Code\": \"149\",\"Child\": [{\"Name\": \"营养食品制造\",\"Code\": \"1491\",\"Child\": null},{\"Name\": \"保健食品制造\",\"Code\": \"1492\",\"Child\": null},{\"Name\": \"冷冻饮品及食用冰制造\",\"Code\": \"1493\",\"Child\": null},{\"Name\": \"盐加工\",\"Code\": \"1494\",\"Child\": null},{\"Name\": \"食品及饲料添加剂制造\",\"Code\": \"1495\",\"Child\": null},{\"Name\": \"其他未列明食品制造\",\"Code\": \"1499\",\"Child\": null}]}]},{\"Name\": \"酒、饮料和精制茶制造业\",\"Code\": \"15\",\"Child\": [{\"Name\": \"酒的制造\",\"Code\": \"151\",\"Child\": [{\"Name\": \"酒精制造\",\"Code\": \"1511\",\"Child\": null},{\"Name\": \"白酒制造\",\"Code\": \"1512\",\"Child\": null},{\"Name\": \"啤酒制造\",\"Code\": \"1513\",\"Child\": null},{\"Name\": \"黄酒制造\",\"Code\": \"1514\",\"Child\": null},{\"Name\": \"葡萄酒制造\",\"Code\": \"1515\",\"Child\": null},{\"Name\": \"其他酒制造\",\"Code\": \"1519\",\"Child\": null}]},{\"Name\": \"饮料制造\",\"Code\": \"152\",\"Child\": [{\"Name\": \"碳酸饮料制造\",\"Code\": \"1521\",\"Child\": null},{\"Name\": \"瓶(罐)装饮用水制造\",\"Code\": \"1522\",\"Child\": null},{\"Name\": \"果菜汁及果菜汁饮料制造\",\"Code\": \"1523\",\"Child\": null},{\"Name\": \"含乳饮料和植物蛋白饮料制造\",\"Code\": \"1524\",\"Child\": null},{\"Name\": \"固体饮料制造\",\"Code\": \"1525\",\"Child\": null},{\"Name\": \"茶饮料及其他饮料制造\",\"Code\": \"1529\",\"Child\": null}]},{\"Name\": \"精制茶加工\",\"Code\": \"153\",\"Child\": null}]},{\"Name\": \"烟草制品业\",\"Code\": \"16\",\"Child\": [{\"Name\": \"烟叶复烤\",\"Code\": \"161\",\"Child\": null},{\"Name\": \"卷烟制造\",\"Code\": \"162\",\"Child\": null},{\"Name\": \"其他烟草制品制造\",\"Code\": \"169\",\"Child\": null}]},{\"Name\": \"纺织业\",\"Code\": \"17\",\"Child\": [{\"Name\": \"棉纺织及印染精加工\",\"Code\": \"171\",\"Child\": [{\"Name\": \"棉纺纱加工\",\"Code\": \"1711\",\"Child\": null},{\"Name\": \"棉织造加工\",\"Code\": \"1712\",\"Child\": null},{\"Name\": \"棉印染精加工\",\"Code\": \"1713\",\"Child\": null}]},{\"Name\": \"毛纺织及染整精加工\",\"Code\": \"172\",\"Child\": [{\"Name\": \"毛条和毛纱线加工\",\"Code\": \"1721\",\"Child\": null},{\"Name\": \"毛织造加工\",\"Code\": \"1722\",\"Child\": null},{\"Name\": \"毛染整精加工\",\"Code\": \"1723\",\"Child\": null}]},{\"Name\": \"麻纺织及染整精加工\",\"Code\": \"173\",\"Child\": [{\"Name\": \"麻纤维纺前加工和纺纱\",\"Code\": \"1731\",\"Child\": null},{\"Name\": \"麻织造加工\",\"Code\": \"1732\",\"Child\": null},{\"Name\": \"麻染整精加工\",\"Code\": \"1733\",\"Child\": null}]},{\"Name\": \"丝绢纺织及印染精加工\",\"Code\": \"174\",\"Child\": [{\"Name\": \"缫丝加工\",\"Code\": \"1741\",\"Child\": null},{\"Name\": \"绢纺和丝织加工\",\"Code\": \"1742\",\"Child\": null},{\"Name\": \"丝印染精加工\",\"Code\": \"1743\",\"Child\": null}]},{\"Name\": \"化纤织造及印染精加工\",\"Code\": \"175\",\"Child\": [{\"Name\": \"化纤织造加工\",\"Code\": \"1751\",\"Child\": null},{\"Name\": \"化纤织物染整精加工\",\"Code\": \"1752\",\"Child\": null}]},{\"Name\": \"针织或钩针编织物及其制品制造\",\"Code\": \"176\",\"Child\": [{\"Name\": \"针织或钩针编织物织造\",\"Code\": \"1761\",\"Child\": null},{\"Name\": \"针织或钩针编织物印染精加工\",\"Code\": \"1762\",\"Child\": null},{\"Name\": \"针织或钩针编织品制造\",\"Code\": \"1763\",\"Child\": null}]},{\"Name\": \"家用纺织制成品制造\",\"Code\": \"177\",\"Child\": [{\"Name\": \"床上用品制造\",\"Code\": \"1771\",\"Child\": null},{\"Name\": \"毛巾类制品制造\",\"Code\": \"1772\",\"Child\": null},{\"Name\": \"窗帘、布艺类产品制造\",\"Code\": \"1773\",\"Child\": null},{\"Name\": \"其他家用纺织制成品制造\",\"Code\": \"1779\",\"Child\": null}]},{\"Name\": \"产业用纺织制成品制造\",\"Code\": \"178\",\"Child\": [{\"Name\": \"非织造布制造\",\"Code\": \"1781\",\"Child\": null},{\"Name\": \"绳、索、缆制造\",\"Code\": \"1782\",\"Child\": null},{\"Name\": \"纺织带和帘子布制造\",\"Code\": \"1783\",\"Child\": null},{\"Name\": \"篷、帆布制造\",\"Code\": \"1784\",\"Child\": null},{\"Name\": \"其他产业用纺织制成品制造\",\"Code\": \"1789\",\"Child\": null}]}]},{\"Name\": \"纺织服装、服饰业\",\"Code\": \"18\",\"Child\": [{\"Name\": \"机织服装制造\",\"Code\": \"181\",\"Child\": [{\"Name\": \"运动机织服装制造\",\"Code\": \"1811\",\"Child\": null},{\"Name\": \"其他机织服装制造\",\"Code\": \"1819\",\"Child\": null}]},{\"Name\": \"针织或钩针编织服装制造\",\"Code\": \"182\",\"Child\": [{\"Name\": \"运动休闲针织服装制造\",\"Code\": \"1821\",\"Child\": null},{\"Name\": \"其他针织或钩针编织服装制造\",\"Code\": \"1829\",\"Child\": null}]},{\"Name\": \"服饰制造\",\"Code\": \"183\",\"Child\": null}]},{\"Name\": \"皮革、毛皮、羽毛及其制品和制鞋业\",\"Code\": \"19\",\"Child\": [{\"Name\": \"皮革鞣制加工\",\"Code\": \"191\",\"Child\": null},{\"Name\": \"皮革制品制造\",\"Code\": \"192\",\"Child\": [{\"Name\": \"皮革服装制造\",\"Code\": \"1921\",\"Child\": null},{\"Name\": \"皮箱、包(袋)制造\",\"Code\": \"1922\",\"Child\": null},{\"Name\": \"皮手套及皮装饰制品制造\",\"Code\": \"1923\",\"Child\": null},{\"Name\": \"其他皮革制品制造\",\"Code\": \"1929\",\"Child\": null}]},{\"Name\": \"毛皮鞣制及制品加工\",\"Code\": \"193\",\"Child\": [{\"Name\": \"毛皮鞣制加工\",\"Code\": \"1931\",\"Child\": null},{\"Name\": \"毛皮服装加工\",\"Code\": \"1932\",\"Child\": null},{\"Name\": \"其他毛皮制品加工\",\"Code\": \"1939\",\"Child\": null}]},{\"Name\": \"羽毛(绒)加工及制品制造\",\"Code\": \"194\",\"Child\": [{\"Name\": \"羽毛(绒)加工\",\"Code\": \"1941\",\"Child\": null},{\"Name\": \"羽毛(绒)制品加工\",\"Code\": \"1942\",\"Child\": null}]},{\"Name\": \"制鞋业\",\"Code\": \"195\",\"Child\": [{\"Name\": \"纺织面料鞋制造\",\"Code\": \"1951\",\"Child\": null},{\"Name\": \"皮鞋制造\",\"Code\": \"1952\",\"Child\": null},{\"Name\": \"塑料鞋制造\",\"Code\": \"1953\",\"Child\": null},{\"Name\": \"橡胶鞋制造\",\"Code\": \"1954\",\"Child\": null},{\"Name\": \"其他制鞋业\",\"Code\": \"1959\",\"Child\": null}]}]},{\"Name\": \"木材加工和木、竹、藤、棕、草制品业\",\"Code\": \"20\",\"Child\": [{\"Name\": \"木材加工\",\"Code\": \"201\",\"Child\": [{\"Name\": \"锯材加工\",\"Code\": \"2011\",\"Child\": null},{\"Name\": \"木片加工\",\"Code\": \"2012\",\"Child\": null},{\"Name\": \"单板加工\",\"Code\": \"2013\",\"Child\": null},{\"Name\": \"其他木材加工\",\"Code\": \"2019\",\"Child\": null}]},{\"Name\": \"人造板制造\",\"Code\": \"202\",\"Child\": [{\"Name\": \"胶合板制造\",\"Code\": \"2021\",\"Child\": null},{\"Name\": \"纤维板制造\",\"Code\": \"2022\",\"Child\": null},{\"Name\": \"刨花板制造\",\"Code\": \"2023\",\"Child\": null},{\"Name\": \"其他人造板制造\",\"Code\": \"2029\",\"Child\": null}]},{\"Name\": \"木质制品制造\",\"Code\": \"203\",\"Child\": [{\"Name\": \"建筑用木料及木材组件加工\",\"Code\": \"2031\",\"Child\": null},{\"Name\": \"木门窗制造\",\"Code\": \"2032\",\"Child\": null},{\"Name\": \"木楼梯制造\",\"Code\": \"2033\",\"Child\": null},{\"Name\": \"木地板制造\",\"Code\": \"2034\",\"Child\": null},{\"Name\": \"木制容器制造\",\"Code\": \"2035\",\"Child\": null},{\"Name\": \"软木制品及其他木制品制造\",\"Code\": \"2039\",\"Child\": null}]},{\"Name\": \"竹、藤、棕、草等制品制造\",\"Code\": \"204\",\"Child\": [{\"Name\": \"竹制品制造\",\"Code\": \"2041\",\"Child\": null},{\"Name\": \"藤制品制造\",\"Code\": \"2042\",\"Child\": null},{\"Name\": \"棕制品制造\",\"Code\": \"2043\",\"Child\": null},{\"Name\": \"草及其他制品制造\",\"Code\": \"2049\",\"Child\": null}]}]},{\"Name\": \"家具制造业\",\"Code\": \"21\",\"Child\": [{\"Name\": \"木质家具制造\",\"Code\": \"211\",\"Child\": null},{\"Name\": \"竹、藤家具制造\",\"Code\": \"212\",\"Child\": null},{\"Name\": \"金属家具制造\",\"Code\": \"213\",\"Child\": null},{\"Name\": \"塑料家具制造\",\"Code\": \"214\",\"Child\": null},{\"Name\": \"其他家具制造\",\"Code\": \"219\",\"Child\": null}]},{\"Name\": \"造纸和纸制品业\",\"Code\": \"22\",\"Child\": [{\"Name\": \"纸浆制造\",\"Code\": \"221\",\"Child\": [{\"Name\": \"木竹浆制造\",\"Code\": \"2211\",\"Child\": null},{\"Name\": \"非木竹浆制造\",\"Code\": \"2212\",\"Child\": null}]},{\"Name\": \"造纸\",\"Code\": \"222\",\"Child\": [{\"Name\": \"机制纸及纸板制造\",\"Code\": \"2221\",\"Child\": null},{\"Name\": \"手工纸制造\",\"Code\": \"2222\",\"Child\": null},{\"Name\": \"加工纸制造\",\"Code\": \"2223\",\"Child\": null}]},{\"Name\": \"纸制品制造\",\"Code\": \"223\",\"Child\": [{\"Name\": \"纸和纸板容器制造\",\"Code\": \"2231\",\"Child\": null},{\"Name\": \"其他纸制品制造\",\"Code\": \"2239\",\"Child\": null}]}]},{\"Name\": \"印刷和记录媒介复制业\",\"Code\": \"23\",\"Child\": [{\"Name\": \"印刷\",\"Code\": \"231\",\"Child\": [{\"Name\": \"书、报刊印刷\",\"Code\": \"2311\",\"Child\": null},{\"Name\": \"本册印制\",\"Code\": \"2312\",\"Child\": null},{\"Name\": \"包装装潢及其他印刷\",\"Code\": \"2319\",\"Child\": null}]},{\"Name\": \"装订及印刷相关服务\",\"Code\": \"232\",\"Child\": null},{\"Name\": \"记录媒介复制\",\"Code\": \"233\",\"Child\": null}]},{\"Name\": \"文教、工美、体育和娱乐用品制造业\",\"Code\": \"24\",\"Child\": [{\"Name\": \"文教办公用品制造\",\"Code\": \"241\",\"Child\": [{\"Name\": \"文具制造\",\"Code\": \"2411\",\"Child\": null},{\"Name\": \"笔的制造\",\"Code\": \"2412\",\"Child\": null},{\"Name\": \"教学用模型及教具制造\",\"Code\": \"2413\",\"Child\": null},{\"Name\": \"墨水、墨汁制造\",\"Code\": \"2414\",\"Child\": null},{\"Name\": \"其他文教办公用品制造\",\"Code\": \"2419\",\"Child\": null}]},{\"Name\": \"乐器制造\",\"Code\": \"242\",\"Child\": [{\"Name\": \"中乐器制造\",\"Code\": \"2421\",\"Child\": null},{\"Name\": \"西乐器制造\",\"Code\": \"2422\",\"Child\": null},{\"Name\": \"电子乐器制造\",\"Code\": \"2423\",\"Child\": null},{\"Name\": \"其他乐器及零件制造\",\"Code\": \"2429\",\"Child\": null}]},{\"Name\": \"工艺美术及礼仪用品制造\",\"Code\": \"243\",\"Child\": [{\"Name\": \"雕塑工艺品制造\",\"Code\": \"2431\",\"Child\": null},{\"Name\": \"金属工艺品制造\",\"Code\": \"2432\",\"Child\": null},{\"Name\": \"漆器工艺品制造\",\"Code\": \"2433\",\"Child\": null},{\"Name\": \"花画工艺品制造\",\"Code\": \"2434\",\"Child\": null},{\"Name\": \"天然植物纤维编织工艺品制造\",\"Code\": \"2435\",\"Child\": null},{\"Name\": \"抽纱刺绣工艺品制造\",\"Code\": \"2436\",\"Child\": null},{\"Name\": \"地毯、挂毯制造\",\"Code\": \"2437\",\"Child\": null},{\"Name\": \"珠宝首饰及有关物品制造\",\"Code\": \"2438\",\"Child\": null},{\"Name\": \"其他工艺美术及礼仪用品制造\",\"Code\": \"2439\",\"Child\": null}]},{\"Name\": \"体育用品制造\",\"Code\": \"244\",\"Child\": [{\"Name\": \"球类制造\",\"Code\": \"2441\",\"Child\": null},{\"Name\": \"专项运动器材及配件制造\",\"Code\": \"2442\",\"Child\": null},{\"Name\": \"健身器材制造\",\"Code\": \"2443\",\"Child\": null},{\"Name\": \"运动防护用具制造\",\"Code\": \"2444\",\"Child\": null},{\"Name\": \"其他体育用品制造\",\"Code\": \"2449\",\"Child\": null}]},{\"Name\": \"玩具制造\",\"Code\": \"245\",\"Child\": [{\"Name\": \"电玩具制造\",\"Code\": \"2451\",\"Child\": null},{\"Name\": \"塑胶玩具制造\",\"Code\": \"2452\",\"Child\": null},{\"Name\": \"金属玩具制造\",\"Code\": \"2453\",\"Child\": null},{\"Name\": \"弹射玩具制造\",\"Code\": \"2454\",\"Child\": null},{\"Name\": \"娃娃玩具制造\",\"Code\": \"2455\",\"Child\": null},{\"Name\": \"儿童乘骑玩耍的童车类产品制造\",\"Code\": \"2456\",\"Child\": null},{\"Name\": \"其他玩具制造\",\"Code\": \"2459\",\"Child\": null}]},{\"Name\": \"游艺器材及娱乐用品制造\",\"Code\": \"246\",\"Child\": [{\"Name\": \"露天游乐场所游乐设备制造\",\"Code\": \"2461\",\"Child\": null},{\"Name\": \"游艺用品及室内游艺器材制造\",\"Code\": \"2462\",\"Child\": null},{\"Name\": \"其他娱乐用品制造\",\"Code\": \"2469\",\"Child\": null}]}]},{\"Name\": \"石油、煤炭及其他燃料加工业\",\"Code\": \"25\",\"Child\": [{\"Name\": \"精炼石油产品制造\",\"Code\": \"251\",\"Child\": [{\"Name\": \"原油加工及石油制品制造\",\"Code\": \"2511\",\"Child\": null},{\"Name\": \"其他原油制造\",\"Code\": \"2519\",\"Child\": null}]},{\"Name\": \"煤炭加工\",\"Code\": \"252\",\"Child\": [{\"Name\": \"炼焦\",\"Code\": \"2521\",\"Child\": null},{\"Name\": \"煤制合成气生产\",\"Code\": \"2522\",\"Child\": null},{\"Name\": \"煤制液体燃料生产\",\"Code\": \"2523\",\"Child\": null},{\"Name\": \"煤制品制造\",\"Code\": \"2524\",\"Child\": null},{\"Name\": \"其他煤炭加工\",\"Code\": \"2529\",\"Child\": null}]},{\"Name\": \"核燃料加工\",\"Code\": \"253\",\"Child\": null},{\"Name\": \"生物质燃料加工\",\"Code\": \"254\",\"Child\": [{\"Name\": \"生物质液体燃料生产\",\"Code\": \"2541\",\"Child\": null},{\"Name\": \"生物质致密成型燃料加工\",\"Code\": \"2542\",\"Child\": null}]}]},{\"Name\": \"化学原料和化学制品制造业\",\"Code\": \"26\",\"Child\": [{\"Name\": \"基础化学原料制造\",\"Code\": \"261\",\"Child\": [{\"Name\": \"无机酸制造\",\"Code\": \"2611\",\"Child\": null},{\"Name\": \"无机碱制造\",\"Code\": \"2612\",\"Child\": null},{\"Name\": \"无机盐制造\",\"Code\": \"2613\",\"Child\": null},{\"Name\": \"有机化学原料制造\",\"Code\": \"2614\",\"Child\": null},{\"Name\": \"其他基础化学原料制造\",\"Code\": \"2619\",\"Child\": null}]},{\"Name\": \"肥料制造\",\"Code\": \"262\",\"Child\": [{\"Name\": \"氮肥制造\",\"Code\": \"2621\",\"Child\": null},{\"Name\": \"磷肥制造\",\"Code\": \"2622\",\"Child\": null},{\"Name\": \"钾肥制造\",\"Code\": \"2623\",\"Child\": null},{\"Name\": \"复混肥料制造\",\"Code\": \"2624\",\"Child\": null},{\"Name\": \"有机肥料及微生物肥料制造\",\"Code\": \"2625\",\"Child\": null},{\"Name\": \"其他肥料制造\",\"Code\": \"2629\",\"Child\": null}]},{\"Name\": \"农药制造\",\"Code\": \"263\",\"Child\": [{\"Name\": \"化学农药制造\",\"Code\": \"2631\",\"Child\": null},{\"Name\": \"生物化学农药及微生物农药制造\",\"Code\": \"2632\",\"Child\": null}]},{\"Name\": \"涂料、油墨、颜料及类似产品制造\",\"Code\": \"264\",\"Child\": [{\"Name\": \"涂料制造\",\"Code\": \"2641\",\"Child\": null},{\"Name\": \"油墨及类似产品制造\",\"Code\": \"2642\",\"Child\": null},{\"Name\": \"工业颜料制造\",\"Code\": \"2643\",\"Child\": null},{\"Name\": \"工艺美术颜料制造\",\"Code\": \"2644\",\"Child\": null},{\"Name\": \"染料制造\",\"Code\": \"2645\",\"Child\": null},{\"Name\": \"密封用填料及类似品制造\",\"Code\": \"2646\",\"Child\": null}]},{\"Name\": \"合成材料制造\",\"Code\": \"265\",\"Child\": [{\"Name\": \"初级形态塑料及合成树脂制造\",\"Code\": \"2651\",\"Child\": null},{\"Name\": \"合成橡胶制造\",\"Code\": \"2652\",\"Child\": null},{\"Name\": \"合成纤维单(聚合)体制造\",\"Code\": \"2653\",\"Child\": null},{\"Name\": \"其他合成材料制造\",\"Code\": \"2659\",\"Child\": null}]},{\"Name\": \"专用化学产品制造\",\"Code\": \"266\",\"Child\": [{\"Name\": \"化学试剂和助剂制造\",\"Code\": \"2661\",\"Child\": null},{\"Name\": \"专项化学用品制造\",\"Code\": \"2662\",\"Child\": null},{\"Name\": \"林产化学产品制造\",\"Code\": \"2663\",\"Child\": null},{\"Name\": \"文化用信息化学品制造\",\"Code\": \"2664\",\"Child\": null},{\"Name\": \"医学生产用信息化学品制造\",\"Code\": \"2665\",\"Child\": null},{\"Name\": \"环境污染处理专用药剂材料制造\",\"Code\": \"2666\",\"Child\": null},{\"Name\": \"动物胶制造\",\"Code\": \"2667\",\"Child\": null},{\"Name\": \"其他专用化学产品制造\",\"Code\": \"2669\",\"Child\": null}]}]";
        var Listdata= JsonConvert.DeserializeObject<List<FBS_EnterpriseType>>(jsonstr);
   var ids=    await   _fBS_EnterpriseTypeRep.InsertRangeAsync(Listdata);
        foreach (var item in Listdata)
        {
         await   InsertChild(item);
        }
        return 0;
    }
    /// <summary>
    /// 插入FBS_EnterpriseType 的子项
    /// </summary>
    /// <param name="pt"></param>
    /// <returns></returns>
    [NonAction]
    public async Task<bool> InsertChild(FBS_EnterpriseType pt)
    {
        if(!(pt.Id>0))
        {
            return true;
        }
        if(pt.Child!=null&&pt.Child.Count>0)
        {
            foreach (var item in pt.Child)
            {
                item.ParentId = pt.Id;
            }
            await _fBS_EnterpriseTypeRep.InsertRangeAsync(pt.Child);
            foreach (var item in pt.Child)
            {
              await   InsertChild(item);
            }
        }
        return true;
    }
    /// <summary>
    /// 更新企业类配置表 ✏️
@@ -213,4 +279,8 @@
            return stream;
        }
    }
}
Web/src/api/Customer/fBS_CusExtend.ts
New file
@@ -0,0 +1,92 @@
import {useBaseApi} from '/@/api/base';
// 企业资料接口服务
export const useFBS_CusExtendApi = () => {
    const baseApi = useBaseApi("fBS_CusExtend");
    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 FBS_CusExtend {
    // 主键Id
    id: number;
    // 用户ID
    customerId?: number;
    // 企业类型
    enterpriseType?: string;
    // 交易主体code
    transactionCode?: string;
    // 营业执照文件路径
    businessLicense?: string;
    // 企业名称
    enterpriseName?: string;
    // 统一社会信用代码
    unifiedSocialCreditCode?: string;
    // 注册资金
    registeredCapital?: string;
    // 法定代表人姓名
    legalRepresentativeName?: string;
    // 法定代表人身份证文件路径
    legalRepresentativeIdCard?: string;
    // 法定代表人姓名
    legalRepresentativeIdNumber?: string;
    // 法定代表人姓名
    legalRepresentativePhone?: string;
    // 企业住所
    residence?: string;
    // 企业联系电话
    enterprisePhone?: string;
    // 企业成立时间
    establishmentTime?: string;
    // 企业主营业务
    mainBusiness: string;
    // 企业邮箱
    enterpriseEmail?: string;
    // 业务经办人姓名
    operatorName: string;
    // 业务经办人身份证文件路径或标识
    operatorIdCard: string;
    // 法定代表人姓名
    operatorIdNumber: string;
    // 法定代表人姓名
    operatorPhone: string;
    // 法定代表人姓名
    bankName?: string;
    // 法定代表人姓名
    bankAccount?: string;
    // 审核步骤
    steps?: number;
    // 租户Id
    tenantId: number;
    // 创建时间
    createTime: string;
    // 更新时间
    updateTime: string;
    // 创建者Id
    createUserId: number;
    // 创建者姓名
    createUserName: string;
    // 修改者Id
    updateUserId: number;
    // 修改者姓名
    updateUserName: string;
}
Web/src/api/Customer/fBS_EnterpriseType.ts
@@ -1,4 +1,5 @@
import {useBaseApi} from '/@/api/base';
import request from '/@/utils/request';
// 企业类配置表接口服务
export const useFBS_EnterpriseTypeApi = () => {
@@ -6,6 +7,12 @@
    return {
        // 分页查询企业类配置表
        page: baseApi.page,
        // 树形查询企业类配置表
        tree:()=> {return request({
            url: "/api/fBS_EnterpriseType/treeData",
            method: 'Get'
        })},
        // 查看企业类配置表详细
        detail: baseApi.detail,
        // 新增企业类配置表
@@ -50,5 +57,7 @@
    // 修改者姓名
    updateUserName: string;
    // 子项
    Child:FBS_EnterpriseType[];
    child:FBS_EnterpriseType[];
    // 描述
    description:string;
}
Web/src/views/Customer/fBS_CusExtend/component/editDialog.vue
New file
@@ -0,0 +1,224 @@
<script lang="ts" name="fBS_CusExtend" 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_CusExtendApi } from '/@/api/Customer/fBS_CusExtend';
//父级传递来的函数,用于回调
const emit = defineEmits(["reloadTable"]);
const fBS_CusExtendApi = useFBS_CusExtendApi();
const ruleFormRef = ref();
const state = reactive({
    title: '',
    loading: false,
    showDialog: false,
    ruleForm: {} as any,
    stores: {},
    dropdownData: {} as any,
});
// 自行添加其他规则
const rules = ref<FormRules>({
  customerId: [{required: true, message: '请选择用户ID!', trigger: 'blur',},],
  enterpriseType: [{required: true, message: '请选择企业类型 !', trigger: 'blur',},],
  transactionCode: [{required: true, message: '请选择交易主体code!', trigger: 'blur',},],
  businessLicense: [{required: true, message: '请选择营业执照文件路径!', trigger: 'blur',},],
  enterpriseName: [{required: true, message: '请选择企业名称!', trigger: 'blur',},],
  unifiedSocialCreditCode: [{required: true, message: '请选择统一社会信用代码!', trigger: 'blur',},],
  registeredCapital: [{required: true, message: '请选择注册资金!', trigger: 'blur',},],
  legalRepresentativeName: [{required: true, message: '请选择法定代表人姓名!', trigger: 'blur',},],
  legalRepresentativeIdCard: [{required: true, message: '请选择法定代表人身份证文件路径!', trigger: 'blur',},],
  legalRepresentativeIdNumber: [{required: true, message: '请选择法定代表人姓名!', trigger: 'blur',},],
  legalRepresentativePhone: [{required: true, message: '请选择法定代表人姓名!', trigger: 'blur',},],
  residence: [{required: true, message: '请选择企业住所!', trigger: 'blur',},],
  enterprisePhone: [{required: true, message: '请选择企业联系电话!', trigger: 'blur',},],
  establishmentTime: [{required: true, message: '请选择企业成立时间!', trigger: 'change',},],
  enterpriseEmail: [{required: true, message: '请选择企业邮箱!', trigger: 'blur',},],
  bankName: [{required: true, message: '请选择法定代表人姓名!', trigger: 'blur',},],
  bankAccount: [{required: true, message: '请选择法定代表人姓名!', trigger: 'blur',},],
  steps: [{required: true, message: '请选择审核步骤!', trigger: 'change',},],
});
// 页面加载时
onMounted(async () => {
});
// 打开弹窗
const openDialog = async (row: any, title: string) => {
    state.title = title;
    row = row ?? {  };
    state.ruleForm = row.id ? await fBS_CusExtendApi.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_CusExtendApi[state.ruleForm.id ? 'update' : 'add'](values);
            closeDialog();
        } else {
            ElMessage({
                message: `表单有${Object.keys(fields).length}处验证失败,请修改后再提交`,
                type: "error",
            });
        }
    });
};
//将属性或者函数暴露给父组件
defineExpose({ openDialog });
</script>
<template>
    <div class="fBS_CusExtend-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="用户ID" prop="customerId">
                            <el-input v-model="state.ruleForm.customerId" 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="enterpriseType">
                            <el-input v-model="state.ruleForm.enterpriseType" placeholder="请输入企业类型 " maxlength="255" 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="交易主体code" prop="transactionCode">
                            <el-input v-model="state.ruleForm.transactionCode" placeholder="请输入交易主体code" maxlength="255" 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="businessLicense">
                            <el-input v-model="state.ruleForm.businessLicense" placeholder="请输入营业执照文件路径" maxlength="255" 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="enterpriseName">
                            <el-input v-model="state.ruleForm.enterpriseName" placeholder="请输入企业名称" maxlength="255" 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="unifiedSocialCreditCode">
                            <el-input v-model="state.ruleForm.unifiedSocialCreditCode" placeholder="请输入统一社会信用代码" maxlength="255" 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="registeredCapital">
                            <el-input v-model="state.ruleForm.registeredCapital" placeholder="请输入注册资金" maxlength="255" 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="legalRepresentativeName">
                            <el-input v-model="state.ruleForm.legalRepresentativeName" placeholder="请输入法定代表人姓名" maxlength="255" 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="legalRepresentativeIdCard">
                            <el-input v-model="state.ruleForm.legalRepresentativeIdCard" placeholder="请输入法定代表人身份证文件路径" maxlength="255" 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="legalRepresentativeIdNumber">
                            <el-input v-model="state.ruleForm.legalRepresentativeIdNumber" placeholder="请输入法定代表人姓名" maxlength="255" 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="legalRepresentativePhone">
                            <el-input v-model="state.ruleForm.legalRepresentativePhone" placeholder="请输入法定代表人姓名" maxlength="255" 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="residence">
                            <el-input v-model="state.ruleForm.residence" placeholder="请输入企业住所" maxlength="255" 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="enterprisePhone">
                            <el-input v-model="state.ruleForm.enterprisePhone" placeholder="请输入企业联系电话" maxlength="255" 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="establishmentTime">
                            <el-date-picker v-model="state.ruleForm.establishmentTime" 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="mainBusiness">
                            <el-input v-model="state.ruleForm.mainBusiness" placeholder="请输入企业主营业务" 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="enterpriseEmail">
                            <el-input v-model="state.ruleForm.enterpriseEmail" placeholder="请输入企业邮箱" maxlength="255" 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="operatorName">
                            <el-input v-model="state.ruleForm.operatorName" placeholder="请输入业务经办人姓名" maxlength="255" 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="operatorIdCard">
                            <el-input v-model="state.ruleForm.operatorIdCard" placeholder="请输入业务经办人身份证文件路径或标识" maxlength="255" 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="operatorIdNumber">
                            <el-input v-model="state.ruleForm.operatorIdNumber" placeholder="请输入业务经办人身份证号" maxlength="255" 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="operatorPhone">
                            <el-input v-model="state.ruleForm.operatorPhone" placeholder="请输入业务经办人电话" maxlength="255" 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="bankName">
                            <el-input v-model="state.ruleForm.bankName" placeholder="请输入开户行" maxlength="255" 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="bankAccount">
                            <el-input v-model="state.ruleForm.bankAccount" placeholder="请输入银行账号" maxlength="255" 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="steps">
                            <g-sys-dict v-model="state.ruleForm.steps" code="CusExtendStep" 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>
Web/src/views/Customer/fBS_CusExtend/index.vue
New file
@@ -0,0 +1,318 @@
<script lang="ts" setup name="fBS_CusExtend">
import { ref, reactive, onMounted } from "vue";
import { auth } from '/@/utils/authFunction';
import { ElMessageBox, ElMessage } from "element-plus";
import { downloadStreamFile } from "/@/utils/download";
import { useFBS_CusExtendApi } from '/@/api/Customer/fBS_CusExtend';
import editDialog from '/@/views/Customer/fBS_CusExtend/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_CusExtendApi = useFBS_CusExtendApi();
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_CusExtendApi.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_CusExtend = (row: any) => {
  ElMessageBox.confirm(`确定要删除吗?`, "提示", {
    confirmButtonText: "确定",
    cancelButtonText: "取消",
    type: "warning",
  }).then(async () => {
    await fBS_CusExtendApi.delete({ id: row.id });
    handleQuery();
    ElMessage.success("删除成功");
  }).catch(() => {});
};
// 批量删除
const batchDelFBS_CusExtend = () => {
  ElMessageBox.confirm(`确定要删除${state.selectData.length}条记录吗?`, "提示", {
    confirmButtonText: "确定",
    cancelButtonText: "取消",
    type: "warning",
  }).then(async () => {
    await fBS_CusExtendApi.batchDelete(state.selectData.map(u => ({ id: u.id }) )).then(res => {
      ElMessage.success(`成功批量删除${res.data.result}条记录`);
      handleQuery();
    });
  }).catch(() => {});
};
// 导出数据
const exportFBS_CusExtendCommand = 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_CusExtendApi.exportData(params).then(res => downloadStreamFile(res));
    } else if (command === 'current') {
      const params = Object.assign({}, state.tableQueryParams, state.tableParams);
      await fBS_CusExtendApi.exportData(params).then(res => downloadStreamFile(res));
    } else if (command === 'all') {
      const params = Object.assign({}, state.tableQueryParams, state.tableParams, { page: 1, pageSize: 99999999 });
      await fBS_CusExtendApi.exportData(params).then(res => downloadStreamFile(res));
    }
  } finally {
    state.exportLoading = false;
  }
}
handleQuery();
</script>
<template>
  <div class="fBS_CusExtend-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="用户ID">
              <el-input v-model="state.tableQueryParams.customerId" 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="企业类型 ">
              <el-input v-model="state.tableQueryParams.enterpriseType" 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="交易主体code">
              <el-input v-model="state.tableQueryParams.transactionCode" clearable placeholder="请输入交易主体code"/>
            </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.businessLicense" 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.enterpriseName" 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.unifiedSocialCreditCode" 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.registeredCapital" 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.legalRepresentativeName" 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.legalRepresentativeIdCard" 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.legalRepresentativeIdNumber" 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.legalRepresentativePhone" 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.residence" 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.enterprisePhone" 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-date-picker type="daterange" v-model="state.tableQueryParams.establishmentTimeRange"  value-format="YYYY-MM-DD HH:mm:ss" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" />
            </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.mainBusiness" 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.enterpriseEmail" 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.operatorName" 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.operatorIdCard" 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.operatorIdNumber" 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.operatorPhone" 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.bankName" 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.bankAccount" 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.steps" code="CusExtendStep" 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_CusExtend: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_CusExtend" :disabled="state.selectData.length == 0" v-auth="'fBS_CusExtend:batchDelete'"> 删除 </el-button>
                <el-button type="primary" style="margin-left:5px;" icon="ele-Plus" @click="editDialogRef.openDialog(null, '新增企业资料')" v-auth="'fBS_CusExtend:add'"> 新增 </el-button>
                <el-dropdown :show-timeout="70" :hide-timeout="50" @command="exportFBS_CusExtendCommand">
                  <el-button type="primary" style="margin-left:5px;" icon="ele-FolderOpened" v-reclick="20000" v-auth="'fBS_CusExtend: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_CusExtend: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_CusExtend:batchDelete') || auth('fBS_CusExtend:export')" />
        <el-table-column type="index" label="序号" width="55" align="center"/>
        <el-table-column prop='customerId' label='用户ID' show-overflow-tooltip />
        <el-table-column prop='enterpriseType' label='企业类型 ' show-overflow-tooltip />
        <el-table-column prop='transactionCode' label='交易主体code' show-overflow-tooltip />
        <el-table-column prop='businessLicense' label='营业执照文件路径' show-overflow-tooltip />
        <el-table-column prop='enterpriseName' label='企业名称' show-overflow-tooltip />
        <el-table-column prop='unifiedSocialCreditCode' label='统一社会信用代码' show-overflow-tooltip />
        <el-table-column prop='registeredCapital' label='注册资金' show-overflow-tooltip />
        <el-table-column prop='legalRepresentativeName' label='法定代表人姓名' show-overflow-tooltip />
        <el-table-column prop='legalRepresentativeIdCard' label='法定代表人身份证文件路径' show-overflow-tooltip />
        <el-table-column prop='legalRepresentativeIdNumber' label='法定代表人姓名' show-overflow-tooltip />
        <el-table-column prop='legalRepresentativePhone' label='法定代表人姓名' show-overflow-tooltip />
        <el-table-column prop='residence' label='企业住所' show-overflow-tooltip />
        <el-table-column prop='enterprisePhone' label='企业联系电话' show-overflow-tooltip />
        <el-table-column prop='establishmentTime' label='企业成立时间' show-overflow-tooltip />
        <el-table-column prop='mainBusiness' label='企业主营业务' show-overflow-tooltip />
        <el-table-column prop='enterpriseEmail' label='企业邮箱' show-overflow-tooltip />
        <el-table-column prop='operatorName' label='业务经办人姓名' show-overflow-tooltip />
        <el-table-column prop='operatorIdCard' label='业务经办人身份证文件路径或标识' show-overflow-tooltip />
        <el-table-column prop='operatorIdNumber' label='业务经办人姓名' show-overflow-tooltip />
        <el-table-column prop='operatorPhone' label='业务经办人电话' show-overflow-tooltip />
        <el-table-column prop='bankName' label='开户行名称' show-overflow-tooltip />
        <el-table-column prop='bankAccount' label='开户行账号' show-overflow-tooltip />
        <el-table-column prop='steps' label='审核步骤' show-overflow-tooltip>
          <template #default="scope">
            <g-sys-dict v-model="scope.row.steps" code="CusExtendStep" />
          </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_CusExtend:update') || auth('fBS_CusExtend:delete')">
          <template #default="scope">
            <el-button icon="ele-Edit" size="small" text type="primary" @click="editDialogRef.openDialog(scope.row, '编辑企业资料')" v-auth="'fBS_CusExtend:update'"> 编辑 </el-button>
            <el-button icon="ele-Delete" size="small" text type="primary" @click="delFBS_CusExtend(scope.row)" v-auth="'fBS_CusExtend: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_CusExtendApi.importData" :download="fBS_CusExtendApi.downloadTemplate" v-auth="'fBS_CusExtend: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>
Web/src/views/Customer/fBS_EnterpriseType/component/editDialog.vue
@@ -1,4 +1,13 @@
<script lang="ts" name="fBS_EnterpriseType" setup>
<!--
 * @FilePath: editDialog.vue
 * @Author: 小飞侠
 * @Date: 2025-06-25 11:22:03
 * @LastEditors: Please set LastEditors
 * @LastEditTime: 2025-07-22 17:28:33
 * Copyright: 2025  MinTinge CO.,LTD. All Rights Reserved.
 * @Descripttion: 写入你的描述
-->
<script lang="ts" name="fBS_EnterpriseType" setup>
import { ref, reactive, onMounted } from "vue";
import { ElMessage } from "element-plus";
import type { FormRules } from "element-plus";
@@ -17,13 +26,14 @@
    ruleForm: {} as any,
    stores: {},
    dropdownData: {} as any,
    tableData: [] as any[],
});
// 自行添加其他规则
const rules = ref<FormRules>({
  name: [{required: true, message: '请选择名称!', trigger: 'blur',},],
  code: [{required: true, message: '请选择代码!', trigger: 'blur',},],
  parentId: [{required: true, message: '请选择父!', trigger: 'blur',},],
    name: [{ required: true, message: '请输入名称!', trigger: 'blur', },],
    code: [{ required: true, message: '请输入代码!', trigger: 'blur', },]
    // parentId: [{ required: true, message: '请选择父!', trigger: 'blur', },],
});
// 页面加载时
@@ -31,16 +41,21 @@
});
// 打开弹窗
const openDialog = async (row: any, title: string) => {
const openDialog = async (row: any, data:any,title: string) => {
    state.title = title;
    row = row ?? {  };
    row = row ?? {};
    state.ruleForm = row.id ? await fBS_EnterpriseTypeApi.detail(row.id).then(res => res.data.result) : JSON.parse(JSON.stringify(row));
    state.showDialog = true;
    state.tableData = data;
};
// 关闭弹窗
const closeDialog = () => {
    emit("reloadTable");
    console.log("listdata",state.tableData);
    state.showDialog = false;
};
@@ -49,6 +64,8 @@
    ruleFormRef.value.validate(async (isValid: boolean, fields?: any) => {
        if (isValid) {
            let values = state.ruleForm;
            if(values.parentId==null)
            values.parentId=0;
            await fBS_EnterpriseTypeApi[state.ruleForm.id ? 'update' : 'add'](values);
            closeDialog();
        } else {
@@ -59,6 +76,16 @@
        }
    });
};
const treeProps = reactive({
    children: 'child',
  label: 'name',
  value: 'id',
  disabled:(node:any)=>{
    return state.ruleForm?.id== node.id;
  }
})
//将属性或者函数暴露给父组件
defineExpose({ openDialog });
@@ -76,19 +103,28 @@
                    <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-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="256" show-word-limit clearable />
                            <el-input v-model="state.ruleForm.name" 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-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="36" show-word-limit clearable />
                            <el-input v-model="state.ruleForm.code" placeholder="请输入代码" maxlength="36" 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="parentId">
                            <el-input-number v-model="state.ruleForm.parentId" placeholder="请输入父" clearable />
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="代码" prop="description">
                            <el-input v-model="state.ruleForm.description" placeholder="请输入说明" maxlength="36" 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="parentId">
                            <el-tree-select :props="treeProps"  clearable   v-model="state.ruleForm.parentId" :data="state.tableData" check-strictly :render-after-expand="false"
                                style="width: 240px" />
                        </el-form-item>
                    </el-col>
                </el-row>
@@ -103,7 +139,8 @@
    </div>
</template>
<style lang="scss" scoped>
:deep(.el-select), :deep(.el-input-number) {
  width: 100%;
:deep(.el-select),
:deep(.el-input-number) {
    width: 100%;
}
</style>
Web/src/views/Customer/fBS_EnterpriseType/index.vue
@@ -8,6 +8,7 @@
import printDialog from '/@/views/system/print/component/hiprint/preview.vue'
import ModifyRecord from '/@/components/table/modifyRecord.vue';
import ImportData from "/@/components/table/importData.vue";
import { chdir } from "node:process";
const fBS_EnterpriseTypeApi = useFBS_EnterpriseTypeApi();
const printDialogRef = ref();
@@ -30,6 +31,7 @@
    descStr: 'descending', // 降序排序的关键字符
  },
  tableData: [],
  tableDataCopy:[] //拷贝
});
// 页面加载时
@@ -38,23 +40,23 @@
// 查询操作
const handleQuery = async (params: any = {}) => {
  state.tableLoading = true;
  state.tableParams = Object.assign(state.tableParams, params);
  const result = await fBS_EnterpriseTypeApi.page(Object.assign(state.tableQueryParams, state.tableParams)).then(res => res.data.result);
  const result = await fBS_EnterpriseTypeApi.tree().then(res => res.data.result);
  state.tableParams.total = result?.total;
  state.tableData = result?.items ?? [];
  state.tableData = result ?? [];
  state.tableLoading = false;
};
// 列排序
const sortChange = async (column: any) => {
  state.tableParams.field = column.prop;
  state.tableParams.order = column.order;
  await handleQuery();
};
handleQuery();
const treeProps = reactive({
  checkStrictly: false,
  children: 'child',
})
// 删除
const delFBS_EnterpriseType = (row: any) => {
const delFBS_ExRole = (row: any) => {
  ElMessageBox.confirm(`确定要删除吗?`, "提示", {
    confirmButtonText: "确定",
    cancelButtonText: "取消",
@@ -66,132 +68,49 @@
  }).catch(() => {});
};
// 批量删除
const batchDelFBS_EnterpriseType = () => {
  ElMessageBox.confirm(`确定要删除${state.selectData.length}条记录吗?`, "提示", {
    confirmButtonText: "确定",
    cancelButtonText: "取消",
    type: "warning",
  }).then(async () => {
    await fBS_EnterpriseTypeApi.batchDelete(state.selectData.map(u => ({ id: u.id }) )).then(res => {
      ElMessage.success(`成功批量删除${res.data.result}条记录`);
      handleQuery();
    });
  }).catch(() => {});
};
// 导出数据
const exportFBS_EnterpriseTypeCommand = 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_EnterpriseTypeApi.exportData(params).then(res => downloadStreamFile(res));
    } else if (command === 'current') {
      const params = Object.assign({}, state.tableQueryParams, state.tableParams);
      await fBS_EnterpriseTypeApi.exportData(params).then(res => downloadStreamFile(res));
    } else if (command === 'all') {
      const params = Object.assign({}, state.tableQueryParams, state.tableParams, { page: 1, pageSize: 99999999 });
      await fBS_EnterpriseTypeApi.exportData(params).then(res => downloadStreamFile(res));
    }
  } finally {
    state.exportLoading = false;
  }
}
handleQuery();
</script>
<template>
  <div class="fBS_EnterpriseType-container" v-loading="state.exportLoading">
    <el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
    <el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
      <el-form :model="state.tableQueryParams" ref="queryForm" labelWidth="90">
        <el-row>
        <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.parentId"  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-form-item>
              <el-button-group style="display: flex; align-items: center;">
                <el-button type="primary"  icon="ele-Search" @click="handleQuery" v-auth="'fBS_EnterpriseType: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_EnterpriseType" :disabled="state.selectData.length == 0" v-auth="'fBS_EnterpriseType:batchDelete'"> 删除 </el-button>
                <el-button type="primary" style="margin-left:5px;" icon="ele-Plus" @click="editDialogRef.openDialog(null, '新增企业类配置表')" v-auth="'fBS_EnterpriseType:add'"> 新增 </el-button>
                <el-dropdown :show-timeout="70" :hide-timeout="50" @command="exportFBS_EnterpriseTypeCommand">
                  <el-button type="primary" style="margin-left:5px;" icon="ele-FolderOpened" v-reclick="20000" v-auth="'fBS_EnterpriseType: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_EnterpriseType:import'"> 导入 </el-button>
                <el-button type="primary" style="margin-left:5px;" icon="ele-Plus" @click="editDialogRef.openDialog(null,state.tableData, '新增企业分类')" v-auth="'fBS_EnterpriseType:add'"> 新增 </el-button>
                <el-button type="warning" style="margin-left:5px;" icon="ele-MostlyCloudy"
                  @click="importDataRef.openDialog()" v-auth="'fBS_EnterpriseType: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_EnterpriseType:batchDelete') || auth('fBS_EnterpriseType: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='parentId' 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-card>
      <el-table :data="state.tableData" :tree-props="treeProps" lazy row-key="id"
       >
        <el-table-column type="selection" width="55" />
        <el-table-column prop="name" label="名称" />
        <el-table-column prop="code" label="编码" />
        <el-table-column prop="description" label="描述" />
        <el-table-column label="操作" width="140" align="center" fixed="right" show-overflow-tooltip v-if="auth('fBS_EnterpriseType:update') || auth('fBS_EnterpriseType:delete')">
          <template #default="scope">
            <el-button icon="ele-Edit" size="small" text type="primary" @click="editDialogRef.openDialog(scope.row, '编辑企业类配置表')" v-auth="'fBS_EnterpriseType:update'"> 编辑 </el-button>
            <el-button icon="ele-Delete" size="small" text type="primary" @click="delFBS_EnterpriseType(scope.row)" v-auth="'fBS_EnterpriseType:delete'"> 删除 </el-button>
            <el-button icon="ele-Edit" size="small" text type="primary" @click="editDialogRef.openDialog(scope.row, state.tableData,'编辑')" v-auth="'fBS_EnterpriseType:update'"> 编辑 </el-button>
            <el-button icon="ele-Delete" size="small" text type="primary" @click="delFBS_ExRole(scope.row)" v-auth="'fBS_EnterpriseType: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_EnterpriseTypeApi.importData" :download="fBS_EnterpriseTypeApi.downloadTemplate" v-auth="'fBS_EnterpriseType:import'" @refresh="handleQuery"/>
      <printDialog ref="printDialogRef" :title="'打印企业类配置表'" @reloadTable="handleQuery" />
      <editDialog ref="editDialogRef" @reloadTable="handleQuery" />
    </el-card>
  </div>
  <div>
  </div>
</template>
<style scoped>
:deep(.el-input), :deep(.el-select), :deep(.el-input-number) {
:deep(.el-input),
:deep(.el-select),
:deep(.el-input-number) {
  width: 100%;
}
</style>