Pārlūkot izejas kodu

fix: 😀修复下载模板存在下拉列表数据太长报错的bug

喵你个旺呀 1 gadu atpakaļ
vecāks
revīzija
b11a7a8dff

+ 24 - 12
Admin.NET/Admin.NET.Core/Utils/ExcelHelper.cs

@@ -88,6 +88,10 @@ public class ExcelHelper
         using var package = new ExcelPackage((ExportData(list, filename) as XlsxFileResult)!.Stream);
         var worksheet = package.Workbook.Worksheets[0];
 
+        // 创建一个隐藏的sheet,用于添加下拉列表
+        var dropdownSheet = package.Workbook.Worksheets.Add("下拉数据");
+        dropdownSheet.Hidden = eWorkSheetHidden.Hidden;
+
         var sysDictTypeService = App.GetService<SysDictTypeService>();
         foreach (var prop in typeof(T).GetProperties())
         {
@@ -108,34 +112,42 @@ public class ExcelHelper
             var dataList = addListValidationFun?.Invoke(worksheet, prop)?.ToList();
             if (dataList == null)
             {
+                // 填充枚举项为下列列表
                 if (propType.IsEnum())
-                {// 填充枚举项为下列列表
+                {
                     dataList = propType.EnumToList()?.Select(it => it.Describe).ToList();
                 }
                 else
-                {// 获取字段上的字典特性
+                {
+                    // 获取字段上的字典特性
                     var dict = prop.GetCustomAttribute<DictAttribute>();
                     if (dict != null)
-                    {// 填充字典值value为下列列表
-                        dataList = sysDictTypeService.GetDataList(new GetDataDictTypeInput
-                        { Code = dict.DictTypeCode }).Result?.Select(x => x.Label).ToList();
+                    {
+                        // 填充字典值value为下列列表
+                        dataList = sysDictTypeService.GetDataList(new GetDataDictTypeInput { Code = dict.DictTypeCode })
+                            .Result?.Select(x => x.Label).ToList();
                     }
                 }
             }
-            if (dataList != null) AddListValidation(columnIndex, dataList);
+
+            if (dataList != null)
+            {
+                AddListValidation(columnIndex, dataList);
+                dropdownSheet.Cells[1, columnIndex, dataList.Count, columnIndex].LoadFromCollection(dataList);
+            }
         }
 
+        package.Save();
+        package.Stream.Position = 0;
+        return new XlsxFileResult(stream: package.Stream, fileDownloadName: $"{filename}-{DateTime.Now:yyyy-MM-dd_HHmmss}");
+
         void AddListValidation(int columnIndex, List<string> dataList)
         {
-            var validation = worksheet.DataValidations.AddListValidation(worksheet.Cells[2, columnIndex, 99999, columnIndex].Address);
-            dataList.ForEach(e => validation!.Formula.Values.Add(e));
+            var validation = worksheet.DataValidations.AddListValidation(worksheet.Cells[2, columnIndex, 999999, columnIndex].Address);
+            validation!.Formula.ExcelFormula = "=下拉数据!" + worksheet.Cells[1, columnIndex, dataList.Count, columnIndex].Address;
             validation.ShowErrorMessage = true;
             validation.ErrorTitle = "无效输入";
             validation.Error = "请从列表中选择一个有效的选项";
         }
-
-        package.Save();
-        package.Stream.Position = 0;
-        return new XlsxFileResult(stream: package.Stream, fileDownloadName: $"{filename}-{DateTime.Now:yyyy-MM-dd_HHmmss}");
     }
 }

+ 3 - 0
Admin.NET/Admin.NET.Web.Entry/wwwroot/template/Input.cs.vm

@@ -178,6 +178,9 @@ public class QueryById@(Model.ClassName)Input : Delete@(Model.ClassName)Input
     @:/// <summary>
     @:/// @column.ColumnComment 文本
     @:/// </summary>
+    if (column.EffectType == "DictSelector") {
+    @:[Dict(@($"\"{column.DictTypeCode}\""))]
+    }
     @:[ImporterHeader(Name = "@(headerName)")]
     @:[ExporterHeader("@(headerName)", Format = "@", Width = 25, IsBold = true)]
     @:public string @column.ExtendedPropertyName { get; set; }