schangxiang@126.com
2025-05-08 04db66bdb3d1fb89fb3ff2c3c2893c93a3802230
10、列表中,所有列需要配置width,建议等于160,如果是时间列,建议是200
已添加23个文件
已修改12个文件
2694 ■■■■■ 文件已修改
Weben_CMS专用代码生成器/Code/Utility/StructStrHelper.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/GetWmsMaterialInput.cs 72 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialCreateOrUpdateDtoBase.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialDto.cs 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialExportModel.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsMaterialAutoMapperProfile.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialRepository.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialController.cs 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterial导出模板.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/components.d.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/config/menu.ts 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Controllers/File.ts 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Controllers/WmsMaterial.ts 275 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Controllers/WmsMaterialDrawer.tsx 427 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Controllers/WmsMaterialQueryDrawer.tsx 427 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Models/Service/WmsMaterial.ts 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Models/Service/WmsMaterialDrawer.ts 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Models/Service/WmsMaterialQueryDrawer.ts 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Models/WmsMaterial.ts 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Models/WmsMaterialDrawer.ts 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Models/WmsMaterialQueryDrawer.ts 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Views/Pages/Dialog/WmsMaterialDrawer/WmsMaterialDrawer.module.scss 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Views/Pages/Dialog/WmsMaterialDrawer/WmsMaterialDrawer.tsx 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Views/Pages/Dialog/WmsMaterialQueryDrawer/WmsMaterialQueryDrawer.module.scss 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Views/Pages/Dialog/WmsMaterialQueryDrawer/WmsMaterialQueryDrawer.tsx 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Views/Pages/WmsMaterial/Config.ts 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Views/Pages/WmsMaterial/WmsMaterial.module.scss 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Views/Pages/WmsMaterial/WmsMaterial.tsx 373 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Views/WmsMaterial.module.scss 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Views/WmsMaterial.tsx 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Views/config/WmsMaterial.json 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/enum.ts 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/index.ts 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/type/type.d.ts 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Code/Utility/StructStrHelper.cs
@@ -2292,6 +2292,22 @@
                        sb.Append("  field: '" + lowerCaseColumnName + "', \n");
                    }
                    sb.Append("  title: '" + columnModel.Description + "', \n");
                    //获取数据类型
                    //设置宽度
                    DataTypeEnum enumDT = (DataTypeEnum)Enum.Parse(typeof(DataTypeEnum), "dt_" + columnModel.DataType.ToString());
                    switch (enumDT)
                    {
                        case DataTypeEnum.dt_datetime:
                            sb.Append("  width:180, \n");
                            break;
                        case DataTypeEnum.dt_bit:
                        case DataTypeEnum.dt_tinyint:
                            sb.Append("  width:80, \n");
                            break;
                        default:
                            sb.Append("  width:160, \n");
                            break;
                    }
                    sb.Append("}, \n");
                }
                //去掉最后一个,
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/GetWmsMaterialInput.cs
@@ -234,7 +234,7 @@
        public SearchFilterModeEnum IsDisabled_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        ///
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
@@ -242,17 +242,17 @@
        /// <summary>
        ///
        /// åˆ›å»ºäººID
        /// </summary>
        public string CreatorId { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// åˆ›å»ºäººID-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum CreatorId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        ///
        /// ä¿®æ”¹æ—¶é—´
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
@@ -260,42 +260,92 @@
        /// <summary>
        ///
        /// ä¿®æ”¹äººID
        /// </summary>
        public string LastModifierId { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// ä¿®æ”¹äººID-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum LastModifierId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        ///
        /// æ˜¯å¦åˆ é™¤
        /// </summary>
        public bool?  IsDeleted { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// æ˜¯å¦åˆ é™¤-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum IsDeleted_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        ///
        /// åˆ é™¤äººID
        /// </summary>
        public string DeleterId { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// åˆ é™¤äººID-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum DeleterId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        ///
        /// åˆ é™¤æ—¶é—´
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> DeletionTime { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        public string CreatorName { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum CreatorName_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// ä¿®æ”¹äºº
        /// </summary>
        public string LastModifierName { get; set; }
        /// <summary>
        /// ä¿®æ”¹äºº-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum LastModifierName_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æ‰©å±•字段1
        /// </summary>
        public string ExtraField1 { get; set; }
        /// <summary>
        /// æ‰©å±•字段1-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ExtraField1_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æ‰©å±•字段2
        /// </summary>
        public string ExtraField2 { get; set; }
        /// <summary>
        /// æ‰©å±•字段2-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ExtraField2_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æ‰©å±•字段3
        /// </summary>
        public string ExtraField3 { get; set; }
        /// <summary>
        /// æ‰©å±•字段3-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ExtraField3_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
 
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialCreateOrUpdateDtoBase.cs
@@ -1,4 +1,5 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums; 
using System;
using Volo.Abp.Application.Dtos; 
 
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial; 
@@ -104,15 +105,40 @@
        public bool? IsDisabled { get; set; }
        /// <summary>
        ///
        /// åˆ›å»ºäººID
        /// </summary>
        public string? CreatorId { get; set; }
        /// <summary>
        ///
        /// ä¿®æ”¹äººID
        /// </summary>
        public string? LastModifierId { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        public string? CreatorName { get; set; }
        /// <summary>
        /// ä¿®æ”¹äºº
        /// </summary>
        public string? LastModifierName { get; set; }
        /// <summary>
        /// æ‰©å±•字段1
        /// </summary>
        public string? ExtraField1 { get; set; }
        /// <summary>
        /// æ‰©å±•字段2
        /// </summary>
        public string? ExtraField2 { get; set; }
        /// <summary>
        /// æ‰©å±•字段3
        /// </summary>
        public string? ExtraField3 { get; set; }
 
 
    /// <summary> 
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialDto.cs
@@ -1,4 +1,5 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums; 
using CmsQueryExtensions;
using Volo.Abp.Application.Dtos; 
using Volo.Abp.Data; 
using Volo.Abp.Domain.Entities; 
@@ -127,9 +128,19 @@
        public int Sort { get; set; }
        /// <summary>
        /// æ‰©å±•属性
        /// </summary>
        public ExtraPropertyDictionary? ExtraProperties { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string? Remark { get; set; }
        /// <summary>
        /// å¹¶å‘戳
        /// </summary>
        public string? ConcurrencyStamp { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
@@ -137,50 +148,65 @@
        public bool? IsDisabled { get; set; }
        /// <summary>
        ///
        /// </summary>
        public ExtraPropertyDictionary? ExtraProperties { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? ConcurrencyStamp { get; set; }
        /// <summary>
        ///
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        public DateTime CreationTime { get; set; }
        /// <summary>
        ///
        /// åˆ›å»ºäººID
        /// </summary>
        public string? CreatorId { get; set; }
        /// <summary>
        ///
        /// ä¿®æ”¹æ—¶é—´
        /// </summary>
        public DateTime? LastModificationTime { get; set; }
        /// <summary>
        ///
        /// ä¿®æ”¹äººID
        /// </summary>
        public string? LastModifierId { get; set; }
        /// <summary>
        ///
        /// æ˜¯å¦åˆ é™¤
        /// </summary>
        public bool IsDeleted { get; set; }
        /// <summary>
        ///
        /// åˆ é™¤äººID
        /// </summary>
        public string? DeleterId { get; set; }
        /// <summary>
        ///
        /// åˆ é™¤æ—¶é—´
        /// </summary>
        public DateTime? DeletionTime { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        public string? CreatorName { get; set; }
        /// <summary>
        /// ä¿®æ”¹äºº
        /// </summary>
        public string? LastModifierName { get; set; }
        /// <summary>
        /// æ‰©å±•字段1
        /// </summary>
        public string? ExtraField1 { get; set; }
        /// <summary>
        /// æ‰©å±•字段2
        /// </summary>
        public string? ExtraField2 { get; set; }
        /// <summary>
        /// æ‰©å±•字段3
        /// </summary>
        public string? ExtraField3 { get; set; }
 
 
    /// <summary> 
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialExportModel.cs
@@ -1,5 +1,6 @@
using MiniExcelLibs.Attributes; 
using System.ComponentModel.DataAnnotations; 
using System;
using System.ComponentModel; 
using CMS.Plugin.HIAWms.Domain.Shared.Enums; 
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial; 
@@ -123,6 +124,36 @@
        [ExcelColumn(Name = "是否禁用", Width = 25)]
        public bool? IsDisabled { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        [ExcelColumn(Name = "创建人", Width = 25)]
        public string CreatorName { get; set; }
        /// <summary>
        /// ä¿®æ”¹äºº
        /// </summary>
        [ExcelColumn(Name = "修改人", Width = 25)]
        public string LastModifierName { get; set; }
        /// <summary>
        /// æ‰©å±•字段1
        /// </summary>
        [ExcelColumn(Name = "扩展字段1", Width = 25)]
        public string ExtraField1 { get; set; }
        /// <summary>
        /// æ‰©å±•字段2
        /// </summary>
        [ExcelColumn(Name = "扩展字段2", Width = 25)]
        public string ExtraField2 { get; set; }
        /// <summary>
        /// æ‰©å±•字段3
        /// </summary>
        [ExcelColumn(Name = "扩展字段3", Width = 25)]
        public string ExtraField3 { get; set; }
 
 
    public Dictionary<string, object> GetExportData() 
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs
@@ -1,8 +1,7 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial; 
using CMS.Plugin.HIAWms.Application.Contracts.Services; 
using CMS.Plugin.HIAWms.Domain.Shared; 
using CMS.Plugin.HIAWms.Domain.Shared.Util;
using CMS.Plugin.HIAWms.Domain.Shared.WmsMaterial;
using CmsQueryExtensions;
using CMS.Plugin.HIAWms.Domain.WmsMaterial; 
using CmsQueryExtensions.Extension; 
using System.Linq.Expressions; 
@@ -19,15 +18,15 @@
/// </summary> 
public class WmsMaterialAppService : CMSPluginAppService, IWmsMaterialAppService 
    private readonly IWmsMaterialRepository wmsmaterialsRepository;
    private readonly IWmsMaterialRepository wmsMaterialRepository;
 
    /// <summary> 
    /// Initializes a new instance of the <see cref="WmsMaterialAppService"/> class. 
    /// </summary> 
    /// <param name="WmsMaterialRepository">The task job repository.</param> 
    public WmsMaterialAppService(IWmsMaterialRepository WmsMaterialRepository)
    public WmsMaterialAppService(IWmsMaterialRepository _WmsMaterialRepository)
    { 
        wmsmaterialsRepository = WmsMaterialRepository;
        wmsMaterialRepository = _WmsMaterialRepository;
    } 
 
    /// <summary> 
@@ -37,7 +36,7 @@
    /// <returns></returns> 
    public virtual async Task<WmsMaterialDto> GetAsync(Guid id) 
    { 
        return ObjectMapper.Map<WmsMaterial, WmsMaterialDto>(await wmsmaterialsRepository.GetAsync(id));
        return ObjectMapper.Map<WmsMaterial, WmsMaterialDto>(await wmsMaterialRepository.GetAsync(id));
    } 
 
    /// <summary> 
@@ -61,8 +60,8 @@
 
        #endregion 
 
        var count = await wmsmaterialsRepository.GetCountAsync(whereConditions);
        var list = await wmsmaterialsRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        var count = await wmsMaterialRepository.GetCountAsync(whereConditions);
        var list = await wmsMaterialRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
 
        return new PagedResultDto<WmsMaterialDto>(count, ObjectMapper.Map<List<WmsMaterial>, List<WmsMaterialDto>>(list)); 
    } 
@@ -100,27 +99,25 @@
    { 
        await CheckCreateOrUpdateDtoAsync(input); 
 
        var exist = await wmsmaterialsRepository.NameExistAsync(input.MaterialCode);
        var exist = await wmsMaterialRepository.NameExistAsync(input.MaterialCode);
        if (exist) 
        { 
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialCode]); 
        } 
 
        var maxSort = await wmsmaterialsRepository.GetMaxSortAsync();
        var maxSort = await wmsMaterialRepository.GetMaxSortAsync();
        var sort = input.Sort ?? maxSort; 
 
        var insertObj = ObjectMapper.Map<WmsMaterialCreateDto, WmsMaterial>(input); 
        insertObj.Sort = sort; 
        input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None); 
        await wmsMaterialRepository.InsertAsync(insertObj);
    
        await wmsmaterialsRepository.InsertAsync(insertObj);
        if (input.Sort.HasValue && insertObj.Sort != maxSort)
        {
            await AdjustSortAsync(insertObj.Id, insertObj.Sort);
        }
        //if (input.Sort.HasValue && insertObj.Sort != maxSort)
        //{
        //    await AdjustSortAsync(insertObj.Id, insertObj.Sort);
        //}
 
        return ObjectMapper.Map<WmsMaterial, WmsMaterialDto>(insertObj); 
    } 
@@ -136,8 +133,8 @@
    { 
        await CheckCreateOrUpdateDtoAsync(input); 
 
        var updateObj = await wmsmaterialsRepository.GetAsync(id);
        var exist = await wmsmaterialsRepository.NameExistAsync(input.MaterialCode, updateObj.Id);
        var updateObj = await wmsMaterialRepository.GetAsync(id);
        var exist = await wmsMaterialRepository.NameExistAsync(input.MaterialCode, updateObj.Id);
        if (exist) 
        { 
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialCode]); 
@@ -164,9 +161,14 @@
        updateObj.RedundantField3 = input.RedundantField3;
        updateObj.Remark = input.Remark;
        updateObj.IsDisabled = input.IsDisabled;
        updateObj.CreatorName = input.CreatorName;
        updateObj.LastModifierName = input.LastModifierName;
        updateObj.ExtraField1 = input.ExtraField1;
        updateObj.ExtraField2 = input.ExtraField2;
        updateObj.ExtraField3 = input.ExtraField3;
 
 
        await wmsmaterialsRepository.UpdateAsync(updateObj);
        await wmsMaterialRepository.UpdateAsync(updateObj);
 
        return ObjectMapper.Map<WmsMaterial, WmsMaterialDto>(updateObj); 
    } 
@@ -178,21 +180,21 @@
    /// <returns></returns> 
    public async Task<List<WmsMaterialDto>> CloneAsync(IEnumerable<Guid> ids) 
    { 
        //var wmsmaterialss = new List<WmsMaterial>();
        //var wmsMaterials = new List<WmsMaterial>();
        //if (ids != null) 
        //{ 
        //    var sort = await wmsmaterialsRepository.GetMaxSortAsync();
        //    var sort = await wmsMaterialRepository.GetMaxSortAsync();
        //    foreach (var id in ids) 
        //    { 
        //        var WmsMaterial = await wmsmaterialsRepository.FindAsync(id);
        //        var WmsMaterial = await wmsMaterialRepository.FindAsync(id);
        //        if (WmsMaterial != null) 
        //        { 
        //            var name = WmsMaterial.Name + WmsMaterialConsts.CloneTag; 
        //            var notExist = false; 
        //            while (!notExist) 
        //            { 
        //                var exist = await wmsmaterialsRepository.NameExistAsync(name);
        //                if (exist || wmsmaterialss.Any(x => x.Name == name))
        //                var exist = await wmsMaterialRepository.NameExistAsync(name);
        //                if (exist || wmsMaterials.Any(x => x.Name == name))
        //                { 
        //                    name += WmsMaterialConsts.CloneTag; 
        //                    continue; 
@@ -201,13 +203,13 @@
        //                notExist = true; 
        //            } 
 
        //            //WmsMaterial = await wmsmaterialsRepository.InsertAsync(WmsMaterial.Clone(GuidGenerator.Create(), name, sort++));
        //            wmsmaterialss.Add(WmsMaterial);
        //            //WmsMaterial = await wmsMaterialRepository.InsertAsync(WmsMaterial.Clone(GuidGenerator.Create(), name, sort++));
        //            wmsMaterials.Add(WmsMaterial);
        //        } 
        //    } 
        //} 
 
        //return ObjectMapper.Map<List<WmsMaterial>, List<WmsMaterialDto>>(wmsmaterialss);
        //return ObjectMapper.Map<List<WmsMaterial>, List<WmsMaterialDto>>(wmsMaterials);
        return new List<WmsMaterialDto>(); 
    } 
 
@@ -218,7 +220,7 @@
    /// <returns></returns> 
    public virtual Task DeleteAsync(Guid id) 
    { 
        return wmsmaterialsRepository.DeleteAsync(id);
        return wmsMaterialRepository.DeleteAsync(id);
    } 
 
    /// <summary> 
@@ -242,7 +244,7 @@
    /// <returns></returns> 
    public virtual async Task AdjustSortAsync(Guid id, int sort) 
    { 
        var list = await wmsmaterialsRepository.GetListAsync(null, nameof(WmsMaterial.Sort));
        var list = await wmsMaterialRepository.GetListAsync(null, nameof(WmsMaterial.Sort));
        if (list != null && list.Any()) 
        { 
            var initSort = 1; 
@@ -269,7 +271,7 @@
            } 
        } 
 
        await wmsmaterialsRepository.UpdateManyAsync(list);
        await wmsMaterialRepository.UpdateManyAsync(list);
    } 
 
    /// <summary> 
@@ -282,8 +284,8 @@
    { 
        Check.NotNull(input, nameof(input)); 
 
        var wmsmaterialsCreateDtos = new List<(int RowIndex, WmsMaterialCreateDto Item)>();
        var wmsmaterialsUpdateDtos = new List<(int RowIndex, Guid Id, WmsMaterialUpdateDto Item)>();
        var wmsMaterialCreateDtos = new List<(int RowIndex, WmsMaterialCreateDto Item)>();
        var wmsMaterialUpdateDtos = new List<(int RowIndex, Guid Id, WmsMaterialUpdateDto Item)>();
        var importItems = input.WmsMaterials; 
 
        if (importItems != null && importItems.Any()) 
@@ -303,7 +305,7 @@
 
            foreach (var impItem in importItems) 
            { 
                if (impItem.MaterialCode.IsNullOrWhiteSpace() && impItem.MaterialName.IsNullOrWhiteSpace())
                if (impItem.MaterialCode.IsNullOrWhiteSpace())
                { 
                    continue; 
                } 
@@ -314,10 +316,10 @@
                    throw new UserFriendlyException(errorMsg); 
                } 
 
                var oldWmsMaterial = await wmsmaterialsRepository.FindByNameAsync(impItem.MaterialCode);
                var oldWmsMaterial = await wmsMaterialRepository.FindByNameAsync(impItem.MaterialCode);
                if (oldWmsMaterial != null) 
                { 
                    var wmsmaterialsUpdateDto = new WmsMaterialUpdateDto
                    var wmsMaterialUpdateDto = new WmsMaterialUpdateDto
                    { 
                        MaterialCode = impItem.MaterialCode, 
                        MaterialName = impItem.MaterialName, 
@@ -332,14 +334,24 @@
                        IsMainBranch = impItem.IsMainBranch, 
                        Factory = impItem.Factory, 
                        Certification = impItem.Certification, 
RedundantField1 = impItem.RedundantField1,
RedundantField2 = impItem.RedundantField2,
RedundantField3 = impItem.RedundantField3,
                        Remark = impItem.Remark, 
IsDisabled = impItem.IsDisabled,
CreatorName = impItem.CreatorName,
LastModifierName = impItem.LastModifierName,
ExtraField1 = impItem.ExtraField1,
ExtraField2 = impItem.ExtraField2,
ExtraField3 = impItem.ExtraField3,
                    }; 
 
                    wmsmaterialsUpdateDtos.Add((impItem.RowIndex, oldWmsMaterial.Id, wmsmaterialsUpdateDto));
                    wmsMaterialUpdateDtos.Add((impItem.RowIndex, oldWmsMaterial.Id, wmsMaterialUpdateDto));
                } 
                else 
                { 
                    var wmsmaterialsCreateDto = new WmsMaterialCreateDto
                    var wmsMaterialCreateDto = new WmsMaterialCreateDto
                    { 
                        MaterialCode = impItem.MaterialCode, 
                        MaterialName = impItem.MaterialName, 
@@ -354,38 +366,48 @@
                        IsMainBranch = impItem.IsMainBranch, 
                        Factory = impItem.Factory, 
                        Certification = impItem.Certification, 
RedundantField1 = impItem.RedundantField1,
RedundantField2 = impItem.RedundantField2,
RedundantField3 = impItem.RedundantField3,
                        Remark = impItem.Remark, 
IsDisabled = impItem.IsDisabled,
CreatorName = impItem.CreatorName,
LastModifierName = impItem.LastModifierName,
ExtraField1 = impItem.ExtraField1,
ExtraField2 = impItem.ExtraField2,
ExtraField3 = impItem.ExtraField3,
                    }; 
 
                    wmsmaterialsCreateDtos.Add((impItem.RowIndex, wmsmaterialsCreateDto));
                    wmsMaterialCreateDtos.Add((impItem.RowIndex, wmsMaterialCreateDto));
                } 
            } 
        } 
 
        // æ–°å¢ž 
        foreach (var wmsmaterialsDto in wmsmaterialsCreateDtos)
        foreach (var wmsMaterialDto in wmsMaterialCreateDtos)
        { 
            try 
            { 
                await CreateAsync(wmsmaterialsDto.Item);
                await CreateAsync(wmsMaterialDto.Item);
            } 
            catch (Exception e) 
            { 
                var errorMsg = $"导入失败!配置,第{wmsmaterialsDto.RowIndex}行:{e.Message},终止导入";
                var errorMsg = $"导入失败!配置,第{wmsMaterialDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg); 
            } 
        } 
 
        // æ›´æ–° 
        foreach (var wmsmaterialsDto in wmsmaterialsUpdateDtos)
        foreach (var wmsMaterialDto in wmsMaterialUpdateDtos)
        { 
            try 
            { 
                await UpdateAsync(wmsmaterialsDto.Id, wmsmaterialsDto.Item);
                await UpdateAsync(wmsMaterialDto.Id, wmsMaterialDto.Item);
            } 
            catch (Exception e) 
            { 
                var errorMsg = $"导入失败!配置,第{wmsmaterialsDto.RowIndex}行:{e.Message},终止导入";
                var errorMsg = $"导入失败!配置,第{wmsMaterialDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg); 
            } 
        } 
@@ -413,7 +435,7 @@
        #endregion 
 
 
        var list = await wmsmaterialsRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var list = await wmsMaterialRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<WmsMaterial>, List<WmsMaterialDto>>(list); 
 
        var sheets = new Dictionary<string, object> 
@@ -421,7 +443,7 @@
            ["配置"] = ExportHelper.ConvertListToExportData(result), 
        }; 
 
        var fileName = result.Count > 1 ? "WmsMaterial列表" : result.Count == 1 ? result[0]?.MaterialCode : "WmsMaterial模版";
        var fileName = result.Count > 1 ? "物料基础信息表列表" : result.Count == 1 ? result[0]?.MaterialCode : "WmsMaterial模版";
        return (sheets, fileName); 
    } 
 
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsMaterialAutoMapperProfile.cs
@@ -6,7 +6,7 @@
namespace CMS.Plugin.HIAWms.Application.MapperProfiles;
/// <summary>
/// AutoMapper配置
/// ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨AutoMapper配置
/// </summary>
/// <seealso cref="AutoMapper.Profile" />
public class WmsMaterialAutoMapperProfile : Profile
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialRepository.cs
@@ -35,19 +35,19 @@
        return await (await GetDbSetAsync()) 
            .IncludeDetails() 
            .Where(x => !x.IsDeleted) 
            .OrderBy(t => t.Sort)
            .OrderByDescending(x=>x.CreationTime)
            .FirstOrDefaultAsync(t => t.MaterialCode == name, GetCancellationToken(cancellationToken)); 
    } 
 
    /// <summary> 
    /// éªŒè¯åç§°æ˜¯å¦å­˜åœ¨ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨ 
    /// </summary> 
    /// <param name="materialCode"></param>
    /// <param name="name">校验值</param>
    /// <param name="id"></param> 
    /// <returns></returns> 
    public async Task<bool> NameExistAsync(string materialCode, Guid? id = null)
    public async Task<bool> NameExistAsync(string name, Guid? id = null)
    { 
        return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).Where(x => !x.IsDeleted).AnyAsync(x => x.MaterialCode == materialCode);
        return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).Where(x => !x.IsDeleted).AnyAsync(x => x.MaterialCode == name);
    } 
 
    /// <summary> 
@@ -84,7 +84,7 @@
            .IncludeDetails(includeDetails) 
            .WhereIf(whereConditions != null, whereConditions.data) 
            .Where(x => !x.IsDeleted) 
            //.OrderBy(sorting.IsNullOrEmpty() ? nameof(WmsMaterial.Sort) : sorting)
            .OrderByDescending(x=>x.CreationTime)
            .PageBy(skipCount, maxResultCount) 
            .ToListAsync(GetCancellationToken(cancellationToken)); 
    } 
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialController.cs
@@ -23,15 +23,15 @@
    [Route("api/v{version:apiVersion}/HIAWms/[controller]")] 
    public class WmsMaterialController : ControllerBase 
    { 
        private readonly IWmsMaterialAppService _wmsmaterialsAppService;
        private readonly IWmsMaterialAppService _wmsMaterialAppService;
 
        /// <summary> 
        /// Initializes a new instance of the <see cref="WmsMaterialController"/> class. 
        /// </summary> 
        /// <param name="wmsmaterialsAppService">The wmsmaterials application service.</param>
        public WmsMaterialController(IWmsMaterialAppService wmsmaterialsAppService)
        /// <param name="wmsMaterialAppService">The wmsMaterial application service.</param>
        public WmsMaterialController(IWmsMaterialAppService wmsMaterialAppService)
        { 
            _wmsmaterialsAppService = wmsmaterialsAppService;
            _wmsMaterialAppService = wmsMaterialAppService;
        } 
 
        /// <summary> 
@@ -43,7 +43,7 @@
        [Route("{id}")] 
        public virtual Task<WmsMaterialDto> GetAsync(Guid id) 
        { 
            return _wmsmaterialsAppService.GetAsync(id);
            return _wmsMaterialAppService.GetAsync(id);
        } 
 
        /// <summary> 
@@ -55,7 +55,7 @@
        [Route("Page")] 
        public virtual Task<PagedResultDto<WmsMaterialDto>> GetListAsync([FromQuery] GetWmsMaterialInput input) 
        { 
            return _wmsmaterialsAppService.GetListAsync(input);
            return _wmsMaterialAppService.GetListAsync(input);
        } 
 
        /// <summary> 
@@ -67,7 +67,7 @@
        [HttpPost] 
        public virtual Task<WmsMaterialDto> CreateAsync(WmsMaterialCreateDto input) 
        { 
            return _wmsmaterialsAppService.CreateAsync(input);
            return _wmsMaterialAppService.CreateAsync(input);
        } 
 
        /// <summary> 
@@ -81,7 +81,7 @@
        [Route("{id}")] 
        public virtual Task<WmsMaterialDto> UpdateAsync(Guid id, WmsMaterialUpdateDto input) 
        { 
            return _wmsmaterialsAppService.UpdateAsync(id, input);
            return _wmsMaterialAppService.UpdateAsync(id, input);
        } 
 
        /// <summary> 
@@ -94,7 +94,7 @@
        [Route("Clone")] 
        public virtual Task<List<WmsMaterialDto>> CloneAsync([FromBody] IEnumerable<Guid> ids) 
        { 
            return _wmsmaterialsAppService.CloneAsync(ids);
            return _wmsMaterialAppService.CloneAsync(ids);
        } 
 
        /// <summary> 
@@ -107,7 +107,7 @@
        [Route("{id}")] 
        public virtual Task DeleteAsync(Guid id) 
        { 
            return _wmsmaterialsAppService.DeleteAsync(id);
            return _wmsMaterialAppService.DeleteAsync(id);
        } 
 
        /// <summary> 
@@ -119,7 +119,7 @@
        [HttpDelete] 
        public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids) 
        { 
            return _wmsmaterialsAppService.DeleteManyAsync(ids);
            return _wmsMaterialAppService.DeleteManyAsync(ids);
        } 
 
        /// <summary> 
@@ -131,7 +131,7 @@
        [Route("{id}/AdjustSort/{sort}")] 
        public virtual Task AdjustSortAsync(Guid id, int sort) 
        { 
            return _wmsmaterialsAppService.AdjustSortAsync(id, sort);
            return _wmsMaterialAppService.AdjustSortAsync(id, sort);
        } 
 
        /// <summary> 
@@ -148,16 +148,16 @@
            stream.Seek(0L, SeekOrigin.Begin); 
 
            var sheetNames = stream.GetSheetNames(); 
            var wmsmaterialsRows = sheetNames.Contains("配置") ? MiniExcel.Query<WmsMaterialsImportModel.WmsMaterialImportModel>(stream, sheetName: "配置").ToList() : new();
            var wmsMaterialRows = sheetNames.Contains("配置") ? MiniExcel.Query<WmsMaterialsImportModel.WmsMaterialImportModel>(stream, sheetName: "配置").ToList() : new();
 
            if (!wmsmaterialsRows.Any())
            if (!wmsMaterialRows.Any())
            { 
                throw new UserFriendlyException("请检查导入的表格"); 
            } 
 
            await _wmsmaterialsAppService.ImportAsync(new WmsMaterialsImportModel
            await _wmsMaterialAppService.ImportAsync(new WmsMaterialsImportModel
            { 
                WmsMaterials = wmsmaterialsRows,
                WmsMaterials = wmsMaterialRows,
            }); 
 
            return Ok(); 
@@ -172,7 +172,7 @@
        public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWmsMaterialInput input) 
        { 
            input.MaxResultCount = int.MaxValue; 
            var exportData = await _wmsmaterialsAppService.ExportAsync(input);
            var exportData = await _wmsMaterialAppService.ExportAsync(input);
            var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/WmsMaterial导出模板.xlsx"); 
            if (!System.IO.File.Exists(templatePath)) 
            { 
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterialµ¼³öÄ£°å.xlsx
Binary files differ
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/components.d.ts
@@ -24,6 +24,7 @@
    ElCollapse: typeof import('element-plus/es')['ElCollapse']
    ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem']
    ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
    ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
    ElDialog: typeof import('element-plus/es')['ElDialog']
    ElDivider: typeof import('element-plus/es')['ElDivider']
    ElDrawer: typeof import('element-plus/es')['ElDrawer']
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/config/menu.ts
@@ -7,6 +7,13 @@
    "notPage": false
  },
  {
    "name": "物料信息",
    "path": "/information-base/WmsMaterial",
    "patchName": "WmsMaterial",
    "icon": "p",
    "notPage": false
  },
  {
    "name": "出入库记录",
    "path": "/information-base/WmsInOutStockRecord",
    "patchName": "WmsInOutStockRecord",
@@ -43,6 +50,13 @@
    "icon": "p",
    "notPage": false
  },
  "WmsMaterial": {
    "name": "物料信息",
    "path": "/information-base/WmsMaterial",
    "patchName": "WmsMaterial",
    "icon": "p",
    "notPage": false
  },
  "WmsInOutStockRecord": {
    "name": "出入库记录",
    "path": "/information-base/WmsInOutStockRecord",
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Controllers/File.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
import { importFileToService, exportFileToClient } from '@/api/file'
import { ElMessage } from 'element-plus'
import { downloadFile } from '@/utils'
import dayjs from 'dayjs'
export const useFile = () => {
  /**
   * å¯¼å…¥æ–‡ä»¶
   * @param url
   */
  const importFile = async (url: string, file: File) => {
    const formData = new FormData()
    formData.append('file', file)
    await importFileToService(url, formData)
    ElMessage('导入成功')
  }
  /**
   * å¯¼å‡ºæ–‡ä»¶
   * @param url
   */
  const exportFile = async (url: string, params: any, name: string) => {
    const res = await exportFileToClient(url, params)
    downloadFile(res, `${name}_${dayjs().format('YYYYMMDDHHMMss')}.xlsx`)
    ElMessage.success('导出成功')
  }
  return {
    importFile,
    exportFile,
  }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Controllers/WmsMaterial.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,275 @@
import { ref, onMounted, reactive, Ref, nextTick, computed } from 'vue'
import { injectModel } from '@/libs/Provider/Provider'
import { WmsMaterial } from '../Models/WmsMaterial'
import { ElMessage } from 'element-plus'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { useFile } from './File'
interface CurrentType {
  row: any
  index: number
}
export const useWmsMaterial = (props: any, ctx?: any) => {
  const wmsMaterial = injectModel<WmsMaterial>('wmsMaterial')
  const { exportFile } = useFile()
  /**
   * å¤´éƒ¨é…ç½®
   */
  const headers = ref({})
  /**
   * åŠ¨æ€åˆ—é…ç½®
   */
  const wmsMaterialColumns = ref<Record<string, any>>([])
  /**
   * æœç´¢å€¼
   */
  const search = ref('')
  /**
   * æŽ’序
   */
  const sort = ref(0)
  /**
   * é€‰æ‹©é¡¹
   */
  const selection = ref([])
  /**
   * å½“前选中的行
   */
  const current = ref<any>(null)
  /**
   * æ•°æ®æº
   */
  const dataSource: Ref<any[]> = ref([])
  /**
   * è¡¨æ ¼
   */
  const tableRef = ref()
  const dialogConfig = reactive({
    visible: false,
    title: '',
    isAdd: false,
  })
  const dialogConfigForQuery = reactive({
    visible: false,
    title: '',
    isAdd: false,
  })
  const dialogSettingConfig = reactive({
    visible: false,
    title: '',
  })
  /**
   * åˆ†é¡µæ•°æ®
   */
  const paginationParams = ref({})
  /**
   * æ‰“开详情
   * @param row
   */
  const openDetail = (row: any) => {
    current.value = row
    dialogConfig.visible = true
    dialogConfig.title = row.name
    dialogConfig.isAdd = false
    sort.value = row.sort
  }
  const contextMenu = [
    {
      label: '展开详情',
      fn: (c: CurrentType) => {
        current.value = null
        sort.value = c.row.sort
        nextTick(() => openDetail(c.row))
      },
      divided: true,
      icon: 'o',
    },
    // {
    //   label: '向上添加',
    //   fn: (c: CurrentType, pageNum: number) => {
    //     current.value = null
    //     sort.value = c.index + 1 + (pageNum - 1) * 50
    //     dialogConfig.visible = true
    //     dialogConfig.title = '添加'
    //     dialogConfig.isAdd = false
    //   },
    //   divided: true,
    //   icon: 'up',
    // },
    // {
    //   label: '向下添加',
    //   fn: (c: CurrentType, pageNum: number) => {
    //     current.value = null
    //     sort.value = c.index + 2 + (pageNum - 1) * 50
    //     dialogConfig.visible = true
    //     dialogConfig.title = '添加'
    //     dialogConfig.isAdd = false
    //   },
    //   divided: true,
    //   icon: 'down',
    // },
    // {
    //   label: '创建副本',
    //   fn: async ({ row }: CurrentType) => {
    //     await wmsMaterial.cloneData([row.id])
    //     ElMessage.success('创建副本成功')
    //     tableRef.value?.getList()
    //   },
    //   divided: true,
    //   icon: 'copy',
    // },
    {
      label: '删除',
      fn: async (c: CurrentType) => {
        const names = selection.value.map((item: { materialCode: string }) => item.materialCode)
        ConfirmBox(
          `是否删除${names.length ? names.join(',') : c.row.materialCode}`
        ).then(async () => {
          const ids = selection.value.map((item: { id: string }) => item.id)
          await wmsMaterial.deleteWmsMaterials(ids.length ? ids : [c.row.id])
          ElMessage.success('删除成功')
          tableRef.value.getList()
        })
      },
      icon: 'close',
    },
  ]
  const onCheck = (records: any) => {
    selection.value = records
  }
  const onAddWmsMaterial = () => {
    const params = tableRef.value?.getPaginationParams()
    current.value = null
    dialogConfig.visible = true
    dialogConfig.isAdd = true
    dialogConfig.title = '添加'
    sort.value = params.totalCount + 1
  }
  //点击按钮【高级查询】
  const onAdvancedQuery = () => {
    const params = tableRef.value?.getPaginationParams()
    current.value = null
    dialogConfigForQuery.visible = true
    dialogConfigForQuery.isAdd = true
    dialogConfigForQuery.title = '高级查询'
  }
  const onConfirmWmsMaterial = async () => {
    dialogConfig.visible = false
    if (dialogConfig.isAdd) {
      tableRef.value?.scrollToRow({
        skip: true,
      })
    } else {
      await tableRef.value?.getList()
    }
  }
  /**
   * è¡Œç‚¹å‡»æ—¶æ›´æ–°current
   */
  const onRowClick = ({ row }: any) => {
    if (dialogConfig.visible && current.value) {
      current.value = row
    }
  }
  /**
   * å¯¼å‡º
   */
  const onExport = (data={}) => {
    //const params = tableRef.value?.getParams()
    exportFile('/api/v1/HIAWms/wmsMaterial/export', data, 'wmsMaterial')
  }
  /**
   * å…³é”®å­—搜索
   */
  const onSearch = () => {
    tableRef.value?.getList({
      Filter: search.value,
    })
  }
  /**
   * é‡ç½®è¡¨æ ¼æ•°æ®
   */
  const reloadList = () => {
    tableRef.value?.getList()
  }
  /**
   * ä¸Šä¼ æˆåŠŸ
   */
  const onSuccess = () => {
    tableRef.value?.getList()
    ElMessage.success('导入成功')
  }
  /**
   * å¤±è´¥
   * @param err
   */
  const onError = (err: any) => {
    try {
      const message = JSON.parse(err.message)
      ElMessage.error(message.msg)
    } catch (error) {
      ElMessage.error('导入失败')
    }
  }
  /**
   * ä¸Šä¼ é’©å­
   */
  const onBeforeUpload = (file: File) => {
    const format = ['xlsx', 'xls', 'csv']
    if (!format.includes(file.name.split('.')[1])) {
      ElMessage.error('导入文件格式不正确,请导入.xlsx/.xls与.csv格式的文件')
      return false
    }
    return true
  }
  onMounted(() => {
    headers.value = {
      Authorization: `Bearer ${sessionStorage.getItem('Token')}`,
      'X-Project': sessionStorage.getItem('X-Project'),
    }
  })
  ctx.expose({
    reloadList,
  })
  return {
    dataSource,
    contextMenu,
    dialogConfig,
    dialogConfigForQuery,
    dialogSettingConfig,
    tableRef,
    current,
    search,
    sort,
    wmsMaterialColumns,
    paginationParams,
    headers,
    onBeforeUpload,
    onError,
    onSuccess,
    openDetail,
    onSearch,
    onExport,
    onRowClick,
    onConfirmWmsMaterial,
    onCheck,
    onAddWmsMaterial,
    onAdvancedQuery
  }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Controllers/WmsMaterialDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,427 @@
import {
  ref,
  onMounted,
  reactive,
  computed,
  Ref,
  watch,
  SetupContext,
  h,
} from 'vue'
import { injectModel } from '@/libs/Provider/Provider'
import { WmsMaterialDrawer } from '../Models/WmsMaterialDrawer'
import { ElMessage } from 'element-plus'
import isEqual from 'lodash/isEqual'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { cloneDeep } from 'lodash'
export const useWmsMaterialDrawer = (props: any, ctx?: any) => {
  const wmsMaterialDrawer = injectModel<WmsMaterialDrawer>('wmsMaterialDrawer')
  /**
   * ç”¨æ¥å¯¹æ¯”的初始化数据
   */
  const initiateData: Ref<Record<string, any>> = ref({})
  const formData = ref<Record<string, any>>({})
  // ref
  const formRef = ref()
  const disabled = ref(false)
  const current = computed(() => {
    return props.row || null
  })
  const datePicker = (attrs) => {
    return (
      <el-date-picker
        type="date"
        format="YYYY-MM-DD HH:mm:ss"
        formatValue="YYYY-MM-DD HH:mm:ss"
        {...attrs}
      ></el-date-picker>
    )
  }
  const inputNumber = (attrs) => {
    return (
      <el-input-number
        min="1"
        step="1"
        precision="0"
        {...attrs}
      ></el-input-number>
    )
  }
  const dateTimePicker = (attrs) => {
    return (
      <el-date-picker
        type="datetime"
        format="YYYY-MM-DD HH:mm:ss"
        formatValue="YYYY-MM-DD HH:mm:ss"
        {...attrs}
      ></el-date-picker>
    )
  }
  const visible = computed({
    get() {
      return props.modelValue
    },
    set(val) {
      ctx.emit('update:modelValue', val)
    },
  })
  /**
   * æ·»åŠ çš„form字段
   */
  const formItems = reactive([
                    {
                   label: '物料编码(唯一标识)',
                   prop: 'materialCode',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入物料编码(唯一标识)',
              rules: [{required: true, message: '物料编码(唯一标识)不能为空', trigger: 'blur' }],
                },
                {
                   label: '物料名称',
                   prop: 'materialName',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入物料名称',
              rules: [{required: true, message: '物料名称不能为空', trigger: 'blur' }],
                },
                {
                   label: '采购类型(枚举值)',
                   prop: 'purchaseType',
                   el: 'select',
                   options: [],
                   //disabled: disabled,
                   placeholder: '请输入采购类型(枚举值)',
              rules: [{required: true, message: '采购类型(枚举值)不能为空', trigger: 'blur' }],
                },
                {
                   label: '物料类型(枚举值)',
                   prop: 'materialType',
                   el: 'select',
                   options: [],
                   //disabled: disabled,
                   placeholder: '请输入物料类型(枚举值)',
              rules: [{required: true, message: '物料类型(枚举值)不能为空', trigger: 'blur' }],
                },
                {
                   label: '主单位(如:kg、m、个)',
                   prop: 'primaryUnit',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入主单位(如:kg、m、个)',
                },
                {
                   label: '规格/标准(如:GB/T 8163-2018)',
                   prop: 'standard',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入规格/标准(如:GB/T 8163-2018)',
                },
                {
                   label: '外径(单位:mm)',
                   prop: 'outerDiameter',
                   el: (props: any, { attrs }: SetupContext) => {
                     return h(inputNumber, {
                       ...props,
                       clearable: true,
                       ...attrs,
                     })
                   },
                   width: '100%',
                   step: 0.01,
                   precision: 2,
                   //disabled: disabled,
                   placeholder: '请输入外径(单位:mm)',
              rules: [{required: true, message: '外径(单位:mm)不能为空', trigger: 'blur' }],
                },
                {
                   label: '壁厚(单位:mm)',
                   prop: 'wallThickness',
                   el: (props: any, { attrs }: SetupContext) => {
                     return h(inputNumber, {
                       ...props,
                       clearable: true,
                       ...attrs,
                     })
                   },
                   width: '100%',
                   step: 0.01,
                   precision: 2,
                   //disabled: disabled,
                   placeholder: '请输入壁厚(单位:mm)',
              rules: [{required: true, message: '壁厚(单位:mm)不能为空', trigger: 'blur' }],
                },
                {
                   label: '材质(如:304不锈钢)',
                   prop: 'materialQuality',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入材质(如:304不锈钢)',
                },
                {
                   label: '长度(单位:m)',
                   prop: 'length',
                   el: (props: any, { attrs }: SetupContext) => {
                     return h(inputNumber, {
                       ...props,
                       clearable: true,
                       ...attrs,
                     })
                   },
                   width: '100%',
                   step: 0.01,
                   precision: 2,
                   //disabled: disabled,
                   placeholder: '请输入长度(单位:m)',
              rules: [{required: true, message: '长度(单位:m)不能为空', trigger: 'blur' }],
                },
                {
                   label: '是否为主支管',
                   prop: 'isMainBranch',
                   el: 'select',
                   options: [],
                   //disabled: disabled,
                   placeholder: '请输入是否为主支管',
              rules: [{required: true, message: '是否为主支管不能为空', trigger: 'blur' }],
                },
                {
                   label: '生产工厂',
                   prop: 'factory',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入生产工厂',
                },
                {
                   label: '证书编号',
                   prop: 'certification',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入证书编号',
                },
                {
                   label: '冗余字段1 - é¢„留扩展用途',
                   prop: 'redundantField1',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入冗余字段1 - é¢„留扩展用途',
                },
                {
                   label: '冗余字段2 - é¢„留扩展用途',
                   prop: 'redundantField2',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入冗余字段2 - é¢„留扩展用途',
                },
                {
                   label: '冗余字段3 - é¢„留扩展用途',
                   prop: 'redundantField3',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入冗余字段3 - é¢„留扩展用途',
                },
                {
                   label: '创建人',
                   prop: 'creatorName',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入创建人',
                },
                {
                   label: '修改人',
                   prop: 'lastModifierName',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入修改人',
                },
                {
                   label: '备注',
                   prop: 'remark',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入备注',
                },
                {
                   label: '扩展字段1',
                   prop: 'extraField1',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入扩展字段1',
                },
                {
                   label: '扩展字段2',
                   prop: 'extraField2',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入扩展字段2',
                },
                {
                   label: '扩展字段3',
                   prop: 'extraField3',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入扩展字段3',
                },
  ])
  /**
   * æ ¡éªŒæ˜¯å¦æœ‰æ•°æ®å˜åŒ–
   */
  const checkIsEqualObject = () => {
    const data = {
      formData: formData.value,
    }
    const check = isEqual(initiateData.value, data)
    return check
  }
  const onClose = (done: () => void) => {
    if (visible.value) {
      if (checkIsEqualObject()) {
        visible.value = false
        done && done()
      } else {
        ConfirmBox('是否保存设置?')
          .then(() => {
            onConfirm()
          })
          .catch(() => {
            visible.value = false
            done && done()
          })
      }
    }
  }
  /**
   * ä¿å­˜
   */
  const onConfirm = async () => {
    await formRef.value?.validate()
    const data = {
      materialCode: formData.value.materialCode,
materialName: formData.value.materialName,
purchaseType: formData.value.purchaseType,
materialType: formData.value.materialType,
primaryUnit: formData.value.primaryUnit,
standard: formData.value.standard,
outerDiameter: formData.value.outerDiameter,
wallThickness: formData.value.wallThickness,
materialQuality: formData.value.materialQuality,
length: formData.value.length,
isMainBranch: formData.value.isMainBranch,
factory: formData.value.factory,
certification: formData.value.certification,
redundantField1: formData.value.redundantField1,
redundantField2: formData.value.redundantField2,
redundantField3: formData.value.redundantField3,
creatorName: formData.value.creatorName,
lastModifierName: formData.value.lastModifierName,
remark: formData.value.remark,
extraField1: formData.value.extraField1,
extraField2: formData.value.extraField2,
extraField3: formData.value.extraField3,
    }
    if (!current.value) {
      await wmsMaterialDrawer.addWmsMaterial(data)
    } else {
      const id = current.value.id
      await wmsMaterialDrawer.updateWmsMaterial(id, data)
    }
    ElMessage.success('保存成功')
    ctx.emit('confirm')
  }
  const updateCheckData = () => {
    initiateData.value = {
      formData: {
        ...formData.value,
      },
    }
  }
  const updateFormItemOptions = (propName: string, enumData: any[]) => {
    const item = formItems.find((item) => item.prop === propName)
    if (item && enumData) {
      item.options = enumData.map((item) => ({
        label: item.description,
        value: item.value,
      }))
    }
  }
  /**
   * é€šç”¨æŸ¥è¯¢æžšä¸¾
   */
  const commonQueryEnumForFrom = async () => {
    const purchaseTypeEnumEnum = await wmsMaterialDrawer.getWmsEnumData({
 EnumName: 'PurchaseTypeEnum',
})
updateFormItemOptions('purchaseType', purchaseTypeEnumEnum)
const materialTypeEnumEnum = await wmsMaterialDrawer.getWmsEnumData({
 EnumName: 'MaterialTypeEnum',
})
updateFormItemOptions('materialType', materialTypeEnumEnum)
const yesNoEnumEnum = await wmsMaterialDrawer.getWmsEnumData({
 EnumName: 'YesNoEnum',
})
updateFormItemOptions('isMainBranch', yesNoEnumEnum)
  }
  commonQueryEnumForFrom()
  /**
   * å¼¹çª—打开获取详情
   */
  const onOpen = async () => {
    if (current.value) {
      const res = await wmsMaterialDrawer.getWmsMaterialDetail(current.value)
      formData.value = {
        materialCode: res.materialCode,
materialName: res.materialName,
purchaseType: res.purchaseType,
materialType: res.materialType,
primaryUnit: res.primaryUnit,
standard: res.standard,
outerDiameter: res.outerDiameter,
wallThickness: res.wallThickness,
materialQuality: res.materialQuality,
length: res.length,
isMainBranch: res.isMainBranch,
factory: res.factory,
certification: res.certification,
redundantField1: res.redundantField1,
redundantField2: res.redundantField2,
redundantField3: res.redundantField3,
creatorName: res.creatorName,
lastModifierName: res.lastModifierName,
remark: res.remark,
extraField1: res.extraField1,
extraField2: res.extraField2,
extraField3: res.extraField3,
        id: res.id,
      }
      disabled.value = true
      updateCheckData()
    } else {
      formData.value = {}
      disabled.value = false
      updateCheckData()
    }
  }
  watch(() => current.value, onOpen)
  return {
    formItems,
    formData,
    visible,
    formRef,
    onOpen,
    onClose,
    onConfirm,
  }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Controllers/WmsMaterialQueryDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,427 @@
import {
  ref,
  onMounted,
  reactive,
  computed,
  Ref,
  watch,
  SetupContext,
  h,
} from 'vue'
import { injectModel } from '@/libs/Provider/Provider'
import { WmsMaterialDrawer } from '../Models/WmsMaterialDrawer'
import { ElMessage } from 'element-plus'
import isEqual from 'lodash/isEqual'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { cloneDeep } from 'lodash'
export const useWmsMaterialQueryDrawer = (props: any, ctx?: any) => {
  const wmsMaterialDrawer = injectModel<WmsMaterialDrawer>('WmsMaterialDrawer')
  /**
   * ç”¨æ¥å¯¹æ¯”的初始化数据
   */
  const initiateData: Ref<Record<string, any>> = ref({})
  const formData = ref<Record<string, any>>({})
  // ref
  const formRef = ref()
  const disabled = ref(false)
  const current = computed(() => {
    return props.row || null
  })
  const inputNumber = (attrs) => {
    return (
      <el-input-number
        min="1"
        step="1"
        precision="0"
        {...attrs}
      ></el-input-number>
    )
  }
    const datePickerRange = (attrs) => {
    return (
      <el-date-picker
        type="daterange"
        value-format="YYYY-MM-DD HH:mm:ss"
        start-placeholder="开始日期"
        end-placeholder="结束日期"
        {...attrs}
      ></el-date-picker>
    )
  }
  const dateTimePickerRange = (attrs) => {
    return (
      <el-date-picker
        type="datetimerange"
        value-format="YYYY-MM-DD HH:mm:ss"
        start-placeholder="开始日期"
        end-placeholder="结束日期"
        {...attrs}
      ></el-date-picker>
    )
  }
  const visible = computed({
    get() {
      return props.modelValue
    },
    set(val) {
      ctx.emit('update:modelValue', val)
    },
  })
  /**
   * æ·»åŠ çš„form字段
   */
  const formItems = reactive([
                    {
                   label: '物料编码(唯一标识)',
                   prop: 'materialCode',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入物料编码(唯一标识)',
                },
                {
                   label: '物料名称',
                   prop: 'materialName',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入物料名称',
                },
                {
                   label: '采购类型(枚举值)',
                   prop: 'purchaseType',
                   el: 'select',
                   option: [],
                   //disabled: disabled,
                   placeholder: '请输入采购类型(枚举值)',
                },
                {
                   label: '物料类型(枚举值)',
                   prop: 'materialType',
                   el: 'select',
                   option: [],
                   //disabled: disabled,
                   placeholder: '请输入物料类型(枚举值)',
                },
                {
                   label: '主单位(如:kg、m、个)',
                   prop: 'primaryUnit',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入主单位(如:kg、m、个)',
                },
                {
                   label: '规格/标准(如:GB/T 8163-2018)',
                   prop: 'standard',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入规格/标准(如:GB/T 8163-2018)',
                },
                {
                   label: '外径(单位:mm)',
                   prop: 'outerDiameter',
                   el: (props: any, { attrs }: SetupContext) => {
                     return h(inputNumber, {
                       ...props,
                       clearable: true,
                       ...attrs,
                     })
                   },
                   width: '100%',
                   step: 0.01,
                   precision: 2,
                   //disabled: disabled,
                   placeholder: '请输入外径(单位:mm)',
                },
                {
                   label: '壁厚(单位:mm)',
                   prop: 'wallThickness',
                   el: (props: any, { attrs }: SetupContext) => {
                     return h(inputNumber, {
                       ...props,
                       clearable: true,
                       ...attrs,
                     })
                   },
                   width: '100%',
                   step: 0.01,
                   precision: 2,
                   //disabled: disabled,
                   placeholder: '请输入壁厚(单位:mm)',
                },
                {
                   label: '材质(如:304不锈钢)',
                   prop: 'materialQuality',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入材质(如:304不锈钢)',
                },
                {
                   label: '长度(单位:m)',
                   prop: 'length',
                   el: (props: any, { attrs }: SetupContext) => {
                     return h(inputNumber, {
                       ...props,
                       clearable: true,
                       ...attrs,
                     })
                   },
                   width: '100%',
                   step: 0.01,
                   precision: 2,
                   //disabled: disabled,
                   placeholder: '请输入长度(单位:m)',
                },
                {
                   label: '是否为主支管',
                   prop: 'isMainBranch',
                   el: 'select',
                   option: [],
                   //disabled: disabled,
                   placeholder: '请输入是否为主支管',
                },
                {
                   label: '生产工厂',
                   prop: 'factory',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入生产工厂',
                },
                {
                   label: '证书编号',
                   prop: 'certification',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入证书编号',
                },
                {
                   label: '冗余字段1 - é¢„留扩展用途',
                   prop: 'redundantField1',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入冗余字段1 - é¢„留扩展用途',
                },
                {
                   label: '冗余字段2 - é¢„留扩展用途',
                   prop: 'redundantField2',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入冗余字段2 - é¢„留扩展用途',
                },
                {
                   label: '冗余字段3 - é¢„留扩展用途',
                   prop: 'redundantField3',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入冗余字段3 - é¢„留扩展用途',
                },
                {
                   label: '创建时间',
                   prop: 'creationTime',
                   el: (props: any, { attrs }: SetupContext) => {
                     return h(dateTimePickerRange, {
                       ...props,
                       clearable: true,
                       ...attrs,
                     })
                   },
                   width: '100%',
                   //disabled: disabled,
                   placeholder: '请输入创建时间',
                },
                {
                   label: '创建人',
                   prop: 'creatorName',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入创建人',
                },
                {
                   label: '修改人',
                   prop: 'lastModifierName',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入修改人',
                },
                {
                   label: '备注',
                   prop: 'remark',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入备注',
                },
                {
                   label: '是否禁用',
                   prop: 'isDisabled',
                   el: 'select',
                   //disabled: disabled,
                   placeholder: '请输入是否禁用',
                 options: [{label: '是',value: true}, {label: '否',value: false}]
                },
                {
                   label: '扩展字段1',
                   prop: 'extraField1',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入扩展字段1',
                },
                {
                   label: '扩展字段2',
                   prop: 'extraField2',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入扩展字段2',
                },
                {
                   label: '扩展字段3',
                   prop: 'extraField3',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入扩展字段3',
                },
  ])
  /**
   * æ ¡éªŒæ˜¯å¦æœ‰æ•°æ®å˜åŒ–
   */
  const checkIsEqualObject = () => {
    const data = {
      formData: formData.value,
    }
    const check = isEqual(initiateData.value, data)
    return check
  }
  const commonGetFormData=()=>{
    const data = {
      materialCode: formData.value.materialCode || '',
materialName: formData.value.materialName || '',
purchaseType: formData.value.purchaseType || '',
materialType: formData.value.materialType || '',
primaryUnit: formData.value.primaryUnit || '',
standard: formData.value.standard || '',
outerDiameter: formData.value.outerDiameter || '',
wallThickness: formData.value.wallThickness || '',
materialQuality: formData.value.materialQuality || '',
length: formData.value.length || '',
isMainBranch: formData.value.isMainBranch || '',
factory: formData.value.factory || '',
certification: formData.value.certification || '',
redundantField1: formData.value.redundantField1 || '',
redundantField2: formData.value.redundantField2 || '',
redundantField3: formData.value.redundantField3 || '',
creationTime: formData.value.creationTime || '',
creatorName: formData.value.creatorName || '',
lastModifierName: formData.value.lastModifierName || '',
remark: formData.value.remark || '',
isDisabled: formData.value.isDisabled || '',
extraField1: formData.value.extraField1 || '',
extraField2: formData.value.extraField2 || '',
extraField3: formData.value.extraField3 || '',
    }
    return data;
  }
  const onClose = (done: () => void) => {
    if (visible.value) {
      visible.value = false
      const data =commonGetFormData();
      ctx.emit('close', data)
    }
  }
  /**
   * ç¡®è®¤æŸ¥è¯¢
   */
  const onConfirmQuery = async () => {
    const data =commonGetFormData();
    ctx.emit('confirmQuery', data)
  }
  /**
   * é‡ç½®æŸ¥è¯¢
   */
  const onReset = async () => {
    formData.value = {}
    formData.value.MaterialCode = ''
formData.value.MaterialName = ''
formData.value.PurchaseType = ''
formData.value.MaterialType = ''
formData.value.PrimaryUnit = ''
formData.value.Standard = ''
formData.value.OuterDiameter = ''
formData.value.WallThickness = ''
formData.value.MaterialQuality = ''
formData.value.Length = ''
formData.value.IsMainBranch = ''
formData.value.Factory = ''
formData.value.Certification = ''
formData.value.RedundantField1 = ''
formData.value.RedundantField2 = ''
formData.value.RedundantField3 = ''
formData.value.CreatorName = ''
formData.value.LastModifierName = ''
formData.value.Remark = ''
formData.value.ExtraField1 = ''
formData.value.ExtraField2 = ''
formData.value.ExtraField3 = ''
    //向父组件发送自定义事件
    ctx.emit('restQuery');
  }
  const updateCheckData = () => {
    initiateData.value = {
      formData: {
        ...formData.value,
      },
    }
  }
  const updateFormItemOptions = (propName: string, enumData: any[]) => {
    const item = formItems.find((item) => item.prop === propName)
    if (item && enumData) {
      item.options = enumData.map((item) => ({
        label: item.description,
        value: item.value,
      }))
    }
  }
  /**
   * é€šç”¨æŸ¥è¯¢æžšä¸¾
   */
  const commonQueryEnumForFrom = async () => {
    const purchaseTypeEnumEnum = await wmsMaterialDrawer.getWmsEnumData({
 EnumName: 'PurchaseTypeEnum',
})
updateFormItemOptions('purchaseType', purchaseTypeEnumEnum)
const materialTypeEnumEnum = await wmsMaterialDrawer.getWmsEnumData({
 EnumName: 'MaterialTypeEnum',
})
updateFormItemOptions('materialType', materialTypeEnumEnum)
const yesNoEnumEnum = await wmsMaterialDrawer.getWmsEnumData({
 EnumName: 'YesNoEnum',
})
updateFormItemOptions('isMainBranch', yesNoEnumEnum)
  }
  commonQueryEnumForFrom()
  /**
   * å¼¹çª—打开获取详情
   */
  const onOpen = async () => {
    disabled.value = false
    updateCheckData()
  }
  watch(() => current.value, onOpen)
  return {
    formItems,
    formData,
    visible,
    formRef,
    onOpen,
    onClose,
    onConfirmQuery,
    onReset,
  }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Models/Service/WmsMaterial.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
import { Base } from '@/libs/Base/Base'
const request = Base.request
/**
 * æ·»åŠ 
 * @returns
 */
export const addWmsMaterial = (data: any) => {
  return request.post('/api/v1/HIAWms/wmsMaterial', data)
}
/**
 * æ‰¹é‡åˆ é™¤
 * @returns
 */
export const deleteWmsMaterials = (ids: string[]) => {
  return request({
    data: ids,
    url: '/api/v1/HIAWms/wmsMaterial',
    method: 'delete',
  })
}
/**
 * å…‹éš†
 * @returns
 */
export const cloneData = (data: any) => {
  return request.post('/api/v1/HIAWms/wmsMaterial/clone', data)
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Models/Service/WmsMaterialDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
import { Base } from '@/libs/Base/Base'
const request = Base.request
/**
 * æ·»åŠ 
 * @returns
 */
export const addWmsMaterial = (data: any) => {
  return request.post('/api/v1/HIAWms/wmsMaterial', data)
}
/**
 * èŽ·å–è¯¦æƒ…
 * @returns
 */
export const getWmsMaterial = (id: string) => {
  return request.get(`/api/v1/HIAWms/wmsMaterial/${id}`)
}
/**
 * æ›´æ–°
 * @returns
 */
export const updateWmsMaterial = (id: string, data: Record<string, any>) => {
  return request.put(`/api/v1/HIAWms/wmsMaterial/${id}`, data)
}
/**
 * èŽ·å–æžšä¸¾
 * @returns
 */
export const getWmsEnumData = (data: any) => {
  return request.post('/api/v1/WareCmsUtilityApi/WmsEnum', data)
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Models/Service/WmsMaterialQueryDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
import { Base } from '@/libs/Base/Base'
const request = Base.request
/**
 * æ·»åŠ 
 * @returns
 */
export const addWmsMaterial = (data: any) => {
  return request.post('/api/v1/HIAWms/wmsMaterial', data)
}
/**
 * èŽ·å–è¯¦æƒ…
 * @returns
 */
export const getWmsMaterial = (id: string) => {
  return request.get(`/api/v1/HIAWms/wmsMaterial/${id}`)
}
/**
 * æ›´æ–°
 * @returns
 */
export const updateWmsMaterial = (id: string, data: Record<string, any>) => {
  return request.put(`/api/v1/HIAWms/wmsMaterial/${id}`, data)
}
/**
 * èŽ·å–æžšä¸¾
 * @returns
 */
export const getWmsEnumData = (data: any) => {
  return request.post('/api/v1/WareCmsUtilityApi/WmsEnum', data)
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Models/WmsMaterial.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
import { Base } from '@/libs/Base/Base'
import {
  deleteWmsMaterials,
  addWmsMaterial,
  cloneData,
} from './Service/WmsMaterial'
export class WmsMaterial extends Base<{ [key: string]: any }> {
  constructor() {
    super({
      data: [],
    })
  }
  onMounted() {}
  /**
   * åˆ é™¤
   * @param id
   * @returns
   */
  async deleteWmsMaterials(ids: string[]) {
    return deleteWmsMaterials(ids)
  }
  /**
   * æ·»åŠ æ•°æ®
   * @param data
   * @returns
   */
  addWmsMaterial(data: Record<string, any>) {
    return addWmsMaterial(data)
  }
  /**
   * å…‹éš†
   * @param ids
   * @returns
   */
  cloneData(ids: string[]) {
    return cloneData(ids)
  }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Models/WmsMaterialDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
import { Base } from '@/libs/Base/Base'
import {
  addWmsMaterial,
  getWmsMaterial,
  updateWmsMaterial,
  getWmsEnumData,
} from './Service/WmsMaterialDrawer'
import { useGlobalState } from '@/libs/Store/Store'
export class WmsMaterialDrawer extends Base<{ [key: string]: any }> {
  constructor() {
    super({
      data: [],
      wmsMaterial: {},
    })
  }
  /**
   * æ·»åŠ 
   * @param data
   */
  async addWmsMaterial(data: Record<string, any>) {
    return addWmsMaterial(data)
  }
  /**
   * æ›´æ–°
   * @param data
   */
  async updateWmsMaterial(id: string, data: Record<string, any>) {
    return updateWmsMaterial(id, data)
  }
  /**
   * èŽ·å–è¯¦æƒ…
   */
  async getWmsMaterialDetail(current: any, id?: string) {
    return getWmsMaterial(id || current?.id)
  }
  //  èŽ·å–æžšä¸¾å€¼
  async getWmsEnumData(data: Record<string, any>) {
    return getWmsEnumData(data)
  }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Models/WmsMaterialQueryDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
import { Base } from '@/libs/Base/Base'
import {
  addWmsMaterial,
  getWmsMaterial,
  updateWmsMaterial,
  getWmsEnumData,
} from './Service/WmsMaterialQueryDrawer'
import { useGlobalState } from '@/libs/Store/Store'
export class WmsMaterialQueryDrawer extends Base<{ [key: string]: any }> {
  constructor() {
    super({
      data: [],
      wmsMaterial: {},
    })
  }
  /**
   * æ·»åŠ 
   * @param data
   */
  async addWmsMaterial(data: Record<string, any>) {
    return addWmsMaterial(data)
  }
  /**
   * æ›´æ–°
   * @param data
   */
  async updateWmsMaterial(id: string, data: Record<string, any>) {
    return updateWmsMaterial(id, data)
  }
  /**
   * èŽ·å–è¯¦æƒ…
   */
  async getWmsMaterialDetail(current: any, id?: string) {
    return getWmsMaterial(id || current?.id)
  }
  //  èŽ·å–æžšä¸¾å€¼
  async getWmsEnumData(data: Record<string, any>) {
    return getWmsEnumData(data)
  }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Views/Pages/Dialog/WmsMaterialDrawer/WmsMaterialDrawer.module.scss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
.drawer {
  width: 800px;
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Views/Pages/Dialog/WmsMaterialDrawer/WmsMaterialDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
import { SetupContext, defineComponent } from 'vue'
import BaseDrawer from '@/components/BaseDrawer/BaseDrawer'
import styles from './WmsMaterialDrawer.module.scss'
import { useWmsMaterialDrawer } from '../../../../Controllers/WmsMaterialDrawer.tsx'
import DyForm from '@/components/DyForm/DyForm'
// @ts-ignore
export default defineComponent<{
  [key: string]: any
}>({
  name: '弹窗',
  props: {
    modelValue: {
      type: Boolean,
      default: false,
    },
    title: {
      type: String,
      default: '',
    },
    row: {
      type: Object,
    },
    sort: {
      type: Number,
      default: 0,
    },
  },
  emits: ['update:modelValue', 'close', 'submit', 'confirm'],
  setup(props: Record<string, any>, ctx: SetupContext) {
    const {
      onClose,
      onConfirm,
      onOpen,
      formRef,
      visible,
      formItems,
      formData,
    } = useWmsMaterialDrawer(props, ctx)
    return () => (
      <BaseDrawer
        class={styles.drawer}
        size="800px"
        title={props.title || '添加'}
        v-model={visible.value}
        close-on-click-modal={true}
        onConfirm={onConfirm}
        onOpen={onOpen}
        before-close={onClose}
        onClose={onClose}
      >
        <DyForm
          ref={formRef}
          formData={formData.value}
          labelWidth="106px"
          formItemProps={formItems}
        ></DyForm>
      </BaseDrawer>
    )
  },
})
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Views/Pages/Dialog/WmsMaterialQueryDrawer/WmsMaterialQueryDrawer.module.scss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
.drawer {
  width: 800px;
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Views/Pages/Dialog/WmsMaterialQueryDrawer/WmsMaterialQueryDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
/*
 * ç‰©æ–™åŸºç¡€ä¿¡æ¯æŸ¥è¯¢å¼¹å‡ºæ¡†
*/
import { SetupContext, defineComponent } from 'vue'
import BaseQueryDrawer from '@/components/BaseQueryDrawer/BaseQueryDrawer'
import styles from './WmsMaterialQueryDrawer.module.scss'
import { useWmsMaterialQueryDrawer } from '../../../../Controllers/WmsMaterialQueryDrawer.tsx'
import DyForm from '@/components/DyForm/DyForm'
// @ts-ignore
export default defineComponent<{
  [key: string]: any
}>({
  name: '弹窗',
  props: {
    //枚举类型字典
    enumListDict:{
      type: Array as () => Array<{ key: string; value: object }>, // å®šä¹‰æ•°ç»„元素类型
      default: () => [] // é»˜è®¤å€¼
    },
    modelValue: {
      type: Boolean,
      default: false,
    },
    title: {
      type: String,
      default: '',
    },
    row: {
      type: Object,
    },
    sort: {
      type: Number,
      default: 0,
    },
  },
  emits: ['update:modelValue', 'close', 'submit', 'confirmquery1'],
  setup(props: Record<string, any>, ctx: SetupContext) {
    const {
      onClose,
      onConfirmQuery,
      onOpen,
      onReset,
      formRef,
      visible,
      formItems,
      formData,
    } = useWmsMaterialQueryDrawer(props, ctx)
    return () => (
      <BaseQueryDrawer
        class={styles.drawer}
        size="800px"
        title={props.title || '高级查询'}
        v-model={visible.value}
        close-on-click-modal={true}
        onReset={onReset}
        onConfirmQueryForBase={onConfirmQuery}
        onOpen={onOpen}
        before-close={onClose}
        onClose={onClose}
      >
        <DyForm
          ref={formRef}
          formData={formData.value}
          labelWidth="106px"
          formItemProps={formItems}
        ></DyForm>
      </BaseQueryDrawer>
    )
  },
})
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Views/Pages/WmsMaterial/Config.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,132 @@
export const columns = [
  {
    type: 'seq',
    width: 60,
    title: '序号',
  },
  {
  field: 'materialCode',
  title: '物料编码(唯一标识)',
  width:160,
},
{
  field: 'materialName',
  title: '物料名称',
  width:160,
},
{
  field: 'purchaseTypeDesc',
  title: '采购类型(枚举值)',
  width:160,
},
{
  field: 'materialTypeDesc',
  title: '物料类型(枚举值)',
  width:160,
},
{
  field: 'primaryUnit',
  title: '主单位(如:kg、m、个)',
  width:160,
},
{
  field: 'standard',
  title: '规格/标准(如:GB/T 8163-2018)',
  width:160,
},
{
  field: 'outerDiameter',
  title: '外径(单位:mm)',
  width:160,
},
{
  field: 'wallThickness',
  title: '壁厚(单位:mm)',
  width:160,
},
{
  field: 'materialQuality',
  title: '材质(如:304不锈钢)',
  width:160,
},
{
  field: 'length',
  title: '长度(单位:m)',
  width:160,
},
{
  field: 'isMainBranchDesc',
  title: '是否为主支管',
  width:160,
},
{
  field: 'factory',
  title: '生产工厂',
  width:160,
},
{
  field: 'certification',
  title: '证书编号',
  width:160,
},
{
  field: 'redundantField1',
  title: '冗余字段1 - é¢„留扩展用途',
  width:160,
},
{
  field: 'redundantField2',
  title: '冗余字段2 - é¢„留扩展用途',
  width:160,
},
{
  field: 'redundantField3',
  title: '冗余字段3 - é¢„留扩展用途',
  width:160,
},
{
  field: 'creationTime',
  title: '创建时间',
  width:180,
},
{
  field: 'deletionTime',
  title: '删除时间',
  width:180,
},
{
  field: 'creatorName',
  title: '创建人',
  width:160,
},
{
  field: 'lastModifierName',
  title: '修改人',
  width:160,
},
{
  field: 'sort',
  title: '排序',
  width:160,
},
{
  field: 'remark',
  title: '备注',
  width:160,
},
{
  field: 'extraField1',
  title: '扩展字段1',
  width:160,
},
{
  field: 'extraField2',
  title: '扩展字段2',
  width:160,
},
{
  field: 'extraField3',
  title: '扩展字段3',
  width:160,
},
]
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Views/Pages/WmsMaterial/WmsMaterial.module.scss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,113 @@
.wmsMaterialContent {
  width: 100%;
  height: 100%;
  .wmsMaterialList {
    width: 100%;
    height: calc(100% - 70px);
  }
  .headerContent {
    display: flex;
    justify-content: space-between;
    align-items: center;
    height: 43px;
  }
  .header {
    margin-bottom: 12px;
    display: flex;
    justify-content: flex-end;
    align-items: center;
  }
}
.tagBox {
  width: auto;
  min-width: 80px;
  height: 24px;
  background: #ffffff;
  border-radius: 19px 19px 19px 19px;
  opacity: 1;
  border: 1px dashed #bcc4cc;
  width: 50px;
  height: 20px;
  font-size: 14px;
  font-family: PingFang SC, PingFang SC;
  font-weight: 400;
  color: #5a84ff;
  display: flex;
  justify-content: center;
  align-items: center;
  // cursor: pointer;
}
.group {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.groupTable {
  width: 100%;
}
.overBox {
  width: 100%;
  height: calc(100% - 20px);
  overflow: auto;
  :global(.cs-collapse-item__header) {
    background-color: #f1f1f1;
    padding: 0 20px;
    height: 35px;
    font-size: 16px;
    font-family: PingFang SC, PingFang SC;
    font-weight: 500;
  }
  :global(.cs-collapse-item__content) {
    padding-bottom: 0px;
  }
}
.groupHeader {
  width: 100%;
  height: 30px;
  background: #ccc;
}
.hideBlock {
  display: none;
}
.queryForm {
  padding: 10px;
  background: #f5f7fa;
  margin-bottom: 0px;
  border-radius: 4px;
  .el-form-item {
    margin-right: 20px;
    margin-bottom: 0;
    // ç»Ÿä¸€è¾“入框和选择框的宽度
    .el-input, .el-select {
      width: 200px; // è®¾ç½®ç»Ÿä¸€çš„宽度
    }
    // é€‰æ‹©æ¡†å†…部输入框样式
    .el-select .el-input__wrapper {
      height: 32px; // ä¸Žè¾“入框高度一致
      padding: 1px 11px; // ä¸Žè¾“入框内边距一致
    }
    // æ—¥æœŸé€‰æ‹©å™¨å®½åº¦
    .el-date-editor {
      width: 220px;
    }
  }
}
// å¦‚果需要更精确的控制,可以单独设置
.formItem {
  width: 200px;
  &.el-input, &.el-select {
    width: 100%;
  }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Views/Pages/WmsMaterial/WmsMaterial.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,373 @@
import { computed, defineComponent, onMounted, reactive, ref } from 'vue'
import type { Ref } from 'vue'
import BaseTable from '@/components/Table/Table'
import styles from './WmsMaterial.module.scss'
import { useWmsMaterial } from '../../../Controllers/WmsMaterial'
import IconButton from '@/components/IconButton/IconButton'
import WmsMaterialDrawer from '../Dialog/WmsMaterialDrawer/WmsMaterialDrawer'
import WmsMaterialQueryDrawer from '../Dialog/WmsMaterialQueryDrawer/WmsMaterialQueryDrawer'
import Search from '@/components/Search/Search'
import { columns } from './Config'
import TdButton from '@/components/TdButton/TdButton'
import { vPermission } from '@/libs/Permission/Permission'
import dayjs from 'dayjs'
import {
  getWmsEnumData
} from '@/widgets/WmsMaterial/Models/Service/WmsMaterialDrawer'
import {
  ElInput,
  ElSelect,
  ElOption,
  ElDatePicker,
  ElForm,
  ElFormItem,
} from 'element-plus'
import { injectModel } from '@/libs/Provider/Provider'
interface RenderTableType {
  url?: string
  dataSource: Ref<any[]>
  isDrag?: boolean
  isChecked?: boolean
  isHidePagination?: boolean
  params?: Record<string, any>
  autoHeight?: boolean
}
export default defineComponent({
  name: 'WmsMaterial',
  directives: {
    permission: vPermission,
  },
  setup(props, ctx) {
    const {
      dataSource,
      contextMenu,
      dialogConfig,
      dialogConfigForQuery,
      tableRef,
      current,
      search,
      sort,
      headers,
      onError,
      onSearch,
      onRowClick,
      onConfirmWmsMaterial,
      onCheck,
      onAddWmsMaterial,
      onAdvancedQuery,
      onExport,
      openDetail,
      onSuccess,
      onBeforeUpload,
    } = useWmsMaterial(props, ctx)
    //定义高级查询引用
   const wmsMaterialQueryDrawerRef=ref(null);
    // æ–°å¢žçš„æŸ¥è¯¢æ¡ä»¶
    const queryForm = ref({
      searchVal: '',
      str_searchFormInputAttrs:[]
    })
    //定义整体模糊查询的列数组(注意:必须大小写跟后端的实体类属性名一致,否则会导致匹配不对的问题)
    const _searchFormInputAttrs = ref([
     'MaterialCode', 'MaterialName', 'Remark'
    ]);
    const searchFormInputAttrs_Placeholder = ref('请输入物料编码/物料名称/备注');
    // åŠ¨æ€æžšä¸¾é€‰é¡¹
    const enumOptions = reactive({
      purchaseType: [] as Array<{label: string; value: any }>,
materialType: [] as Array<{label: string; value: any }>,
isMainBranch: [] as Array<{label: string; value: any }>,
    })
    // èŽ·å–æžšä¸¾æ•°æ®
    const fetchEnumData = async () => {
      try {
        const purchaseTypeEnumData = await getWmsEnumData({
 EnumName: 'PurchaseTypeEnum',
})
enumOptions.purchaseType = purchaseTypeEnumData.map((item) => ({
  label: item.description,
  value: item.value,
}))
const materialTypeEnumData = await getWmsEnumData({
 EnumName: 'MaterialTypeEnum',
})
enumOptions.materialType = materialTypeEnumData.map((item) => ({
  label: item.description,
  value: item.value,
}))
const yesNoEnumData = await getWmsEnumData({
 EnumName: 'YesNoEnum',
})
enumOptions.isMainBranch = yesNoEnumData.map((item) => ({
  label: item.description,
  value: item.value,
}))
      } catch (error) {
        console.error('获取枚举数据失败:', error)
      }
    }
    // ç»„件挂载时获取枚举数据
    onMounted(() => {
      fetchEnumData()
    })
    // å®šä¹‰å“åº”式查询数据
    const _curHighQueryData = ref({ searchVal: '',str_searchFormInputAttrs:[] });
    // æ–°ç‰ˆçš„æŸ¥è¯¢æ–¹æ³•(主页面中的按钮【查询】)
    const handleQueryForMain = async () => {
      _curHighQueryData.value.searchVal = queryForm.value.searchVal;
      _curHighQueryData.value.str_searchFormInputAttrs = _searchFormInputAttrs.value;
      tableRef.value.getList(_curHighQueryData.value)
    }
    // æ–°ç‰ˆçš„æŸ¥è¯¢æ–¹æ³•(高级查询中的按钮【查询】)
    const handleQuery = async (extraParams = {}) => {
      let filteredData = commonGetHighQueryForm(extraParams);
      commonSaveCurHighQueryData(filteredData);
      tableRef.value.getList(filteredData)
    }
    // æ–°ç‰ˆçš„æŸ¥è¯¢é‡ç½®
    const resetQuery = () => {
      queryForm.value.searchVal = ''
      queryForm.value.str_searchFormInputAttrs=_searchFormInputAttrs.value;
    }
     //新版的导出方法
     const handleExport=()=>{
      onExport(_curHighQueryData.value);
    }
    // æ–°ç‰ˆçš„æŸ¥è¯¢å¼¹å‡ºæ¡†å…³é—­æ–¹æ³•
    const closeQuery = (extraParams={}) => {
      let filteredData = commonGetHighQueryForm(extraParams);
      console.log("closeQuery方法");
      console.log(filteredData);
      commonSaveCurHighQueryData(filteredData);
    }
    //保存查询值
    const commonSaveCurHighQueryData=(filteredData={})=>{
      _curHighQueryData.value = { ..._curHighQueryData.value, ...filteredData };
      _curHighQueryData.value.searchVal = queryForm.value.searchVal
      _curHighQueryData.value.str_searchFormInputAttrs =_searchFormInputAttrs.value;
    }
     //获取高级查询弹出框的查询值
     const commonGetHighQueryForm=(extraParams={})=>{
      // è¿‡æ»¤æŽ‰ undefined çš„值
      let filteredData = Object.assign(
        {},
        ...Object.entries(extraParams).map(([key, value]) =>
          value !== undefined ? { [key]: value } : {}
        )
      )
      //组合模糊查询
      filteredData.searchVal = queryForm.value.searchVal
      filteredData.str_searchFormInputAttrs =_searchFormInputAttrs.value;
      return filteredData;
    }
    /**
     * @returns è¡¨æ ¼
     */
    const RenderBaseTable = (props: RenderTableType) => {
      const {
        url,
        dataSource,
        isDrag,
        isChecked,
        isHidePagination,
        params,
        autoHeight,
      } = props
      return (
        <div
          class={{
            [styles.wmsMaterialList]: true,
          }}
        >
          <BaseTable
            ref={tableRef}
            url={url}
            sortUrlTpl="/api/v1/HIAWms/wmsMaterial/{id}/adjustsort/{sort}"
            v-model:dataSource={dataSource.value}
            columns={columns}
            contextMenu={contextMenu}
            params={params}
            isDrag={isDrag}
            isChecked={isChecked}
            autoHeight={autoHeight}
            onCheck={onCheck}
            onRowClick={onRowClick}
            isHidePagination={isHidePagination}
            pageSize={20}
            v-slots={{
              creationTime: ({ row }: any) => {
 return (
   <div>
     {row.creationTime != null
     ? dayjs(row.creationTime).format('YYYY-MM-DD HH:mm:ss')
      : '-'}
   </div>
  )
},
lastModificationTime: ({ row }: any) => {
 return (
   <div>
     {row.lastModificationTime != null
     ? dayjs(row.lastModificationTime).format('YYYY-MM-DD HH:mm:ss')
      : '-'}
   </div>
  )
},
isDeleted: ({ row }: any) => {
 return (
   <div>
     {row.isDeleted != null ? (row.isDeleted ? '是' : '否') : '-'}
   </div>
  )
},
deletionTime: ({ row }: any) => {
 return (
   <div>
     {row.deletionTime != null
     ? dayjs(row.deletionTime).format('YYYY-MM-DD HH:mm:ss')
      : '-'}
   </div>
  )
},
isDisabled: ({ row }: any) => {
 return (
   <div>
     {row.isDisabled != null ? (row.isDisabled ? '是' : '否') : '-'}
   </div>
  )
},
              name: ({ row }: any) => {
                return row?.name ? (
                  <TdButton
                    onClick={() => openDetail(row)}
                    text={<span style="color:#5a84ff">详情</span>}
                    icon="scale"
                    tip={row?.name}
                    hover
                  >
                    {row?.name}
                  </TdButton>
                ) : (
                  '-'
                )
              },
            }}
          ></BaseTable>
        </div>
      )
    }
    return () => {
      return (
        <div class={styles.wmsMaterialContent}>
          {/* æ·»åŠ /编辑 */}
          <WmsMaterialDrawer
            v-model={dialogConfig.visible}
            title={dialogConfig.title}
            row={current.value}
            sort={sort.value}
            onConfirm={onConfirmWmsMaterial}
          />
          {/* é«˜çº§æŸ¥è¯¢ */}
          <WmsMaterialQueryDrawer
            ref="wmsMaterialQueryDrawerRef"
            v-model={dialogConfigForQuery.visible}
            title={dialogConfigForQuery.title}
            row={current.value}
            sort={sort.value}
            onConfirmQuery={handleQuery}
            onRestQuery={resetQuery}
            onClose={closeQuery}
          />
          <div class={styles.headerContent}>
            <div class={styles.header}>
              <IconButton
                v-permission="wmsMaterial-add"
                icon="add-p"
                onClick={onAddWmsMaterial}
                type="primary"
              >
                æ·»åŠ 
              </IconButton>
              <el-divider direction="vertical" />
              <el-divider direction="vertical" />
              <el-upload
                v-permission="wmsMaterial-import"
                name="file"
                accept=".xlsx,.xls,.csv"
                show-file-list={false}
                onError={onError}
                onSuccess={onSuccess}
                before-upload={onBeforeUpload}
                headers={headers.value}
                action="/api/v1/HIAWms/wmsMaterial/import"
              >
                <IconButton icon="in">导入</IconButton>
              </el-upload>
              <IconButton
                v-permission="wmsMaterial-output"
                icon="out"
                onClick={handleExport}
              >
                å¯¼å‡º
              </IconButton>
            </div>
            <ElFormItem style={{ marginTop: '15px' }}>
              <ElFormItem label="关键字">
                 <el-tooltip
                  class="box-item"
                  effect="dark"
                  content={searchFormInputAttrs_Placeholder.value}
                  placement="top-start"
                >
                <ElInput
                  v-model={queryForm.value.searchVal}
                  placeholder={searchFormInputAttrs_Placeholder.value}
                  clearable
                  class={styles.formItem}
                />
                </el-tooltip>
              </ElFormItem>
              <IconButton type="primary" icon="search" onClick={handleQueryForMain}>
                æŸ¥è¯¢
              </IconButton>
              {/* <IconButton style="" icon="refresh" onClick={resetQuery}>
                é‡ç½®
              </IconButton> */}
              <IconButton
                v-permission="wmsMaterial-add"
                icon="search"
                onClick={onAdvancedQuery}
                type="primary"
              >
                é«˜çº§æŸ¥è¯¢
              </IconButton>
            </ElFormItem>
          </div>
          <RenderBaseTable
            url="/api/v1/HIAWms/wmsMaterial/page"
            dataSource={dataSource}
            isChecked={true}
            isDrag={true}
          />
        </div>
      )
    }
  },
})
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Views/WmsMaterial.module.scss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
.WmsMaterial {
  background-color: #fff;
  border-radius: 5px 5px 0 0;
  width: 100%;
  height: 100%;
  border: 1px solid #dbdbdb;
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Views/WmsMaterial.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,80 @@
import {
  Component,
  DefineComponent,
  defineComponent,
  markRaw,
  ref,
  SetupContext,
  onMounted,
} from 'vue'
import styles from './WmsMaterial.module.scss'
import Tab from '@/components/Tab/Tab'
import { useProvideModels } from '@/libs/Provider/app'
import { usePermission } from '@/libs/Permission/Permission'
import { permissionCodes } from '../enum'
import { ModuleType, TabItem } from '../type/Type'
import { getEntityNames } from '@/hooks/hook'
import TabPane from '@/components/Tab/TabPane'
const Models: ModuleType = import.meta.glob('./config/*.json', {
  eager: true,
})
const entityNames = getEntityNames(Models)
const nameToLabelMap = [{ name: 'WmsMaterial', label: '物料信息' }]
export default defineComponent({
  name: 'WmsMaterial',
  setup(props, ctx: SetupContext) {
    useProvideModels()
    usePermission(props, permissionCodes)
    const rf = ref<{
      [key: string]: any
    }>({})
    const tabData = ref<TabItem[]>([])
    const onTabChange = (v: string) => {
      rf.value?.[v]?.reloadList()
    }
    const initTableData = async () => {
      for (const i in entityNames) {
        const name = entityNames[i]
        const module = await import(`./Pages/${name}/${name}.tsx`)
        const WmsMaterial = markRaw(module.default)
        const foundLabel =
          nameToLabelMap.find((item) => item.name === name)?.label || name
        tabData.value.push({
          label: foundLabel,
          name,
          component: WmsMaterial,
        })
      }
    }
    initTableData()
    return () => {
      return (
        <div class={styles.WmsMaterial}>
          <Tab data={tabData.value} type="list" onTab={onTabChange}>
            {tabData.value.map((widgetInfo) => {
              const Widget: any = widgetInfo.component
              return (
                <TabPane label={widgetInfo.label} name={widgetInfo.name}>
                  <Widget
                    ref={(r: any) => (rf.value['WmsMaterial'] = r)}
                  ></Widget>
                </TabPane>
              )
            })}
          </Tab>
        </div>
      )
    }
  },
})
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/Views/config/WmsMaterial.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
{
  "name": "WmsMaterial"
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/enum.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
export interface TabType {
  label: string
  name: string
  columns?: any[]
  data?: any[]
  isFooter: boolean
  [key: string]: any
}
export const permissionCodes = {
  'wmsMaterial-list': '列表-列表',
  'wmsMaterial-add': '列表-添加',
  'wmsMaterial-import': '列表-导入',
  'wmsMaterial-output': '列表-输出',
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/index.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
import WmsMaterial from './Views/WmsMaterial'
import Setting from '@/components/Setting/Setting'
import { provider } from '@/provider/index'
import p from '../../assets/svg/p.svg'
export default {
  is: 'WmsMaterial',
  name: '物料信息',
  category: 'run',
  icon: p,
  authorizationRequired: false,
  canvasView: provider(WmsMaterial),
  settingsView: Setting,
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/templatedemo_web/src/widgets/WmsMaterial/type/type.d.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
import { Component } from 'vue'
export interface DataItemType {
  id?: string
  name?: string
  code?: string
  description?: string
  label?: string
  value?: string | number
}
export interface WmsMaterialBaseType {
  id?: string
  name?: string
  code?: string
  value?: number
  description?: string
  options?: Array<DataItemType>
  abilityValue?: number | string
  data?: DataItemType
  defaultValue?: string | number
  flow: string
}
export interface FlowDefinitionType {
  id?: string
  name?: string
  code?: string
  description?: string
}
export type ModuleType = Record<
  string,
  {
    default: Record<string, string>
    name: string
  }
>
export interface TabItem {
  name: string
  label: string
  component: Component
  hidden?: boolean
}