diff --git a/README.md b/README.md index 585a6ec202f354ee6b12133e3d3837641ce64235..1afe0799632caa221ab3600269e9f30cfd5d0d36 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ + ## Vue + .Net8前后端分离,不一样的快速开发框架(支持信创) ## 框架核心 @@ -41,32 +42,32 @@ App、H5、微信小程序: [http://app.volcore.xyz/](http://app.volcore.xyz/) < sqlsugar: [https://www.donet5.com/](https://www.donet5.com/) ## 框架移动端(uniapp)已发布,同样全自动生成代码,扫描小程序二维码即可查看 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/home.png) +![Home](/imgs/home.png) ## 1、标准页面 整个页面所有前后端代码,全部由代码生成器界面上配置生成,并支持并后端业务代码扩展 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/page1.png) +![Home](/imgs/page1.png) ## 2、主子表页面 同样由代码生成器自动生成,零代码实现整个页面主子表的新建、编辑、删除、查询、导入、导出功能 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/main-01.png) +![Home](/imgs/main-01.png) 主子表编辑页面 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/main-02.png) +![Home](/imgs/main-02.png) ## 3、审批流程配置 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/flow.png) +![Home](/imgs/flow.png) ## 4、数据审批 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/flow02.png) +![Home](/imgs/flow02.png) ## 5、树形结构 只需少量配置即可完成树形结构配置编辑,按层级加载数据等功能 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/tree.png) +![Home](/imgs/tree.png) ## 6、图表统计 框架提供了丰富的图表统计,能复制就能开发 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/state.png) +![Home](/imgs/state.png) 其他功能。。。。。 diff --git a/vol.api.sqlsugar/VOL.Core/Utilities/EPPlusHelper.cs b/vol.api.sqlsugar/VOL.Core/Utilities/EPPlusHelper.cs index 07173fd1f6237c63a0cc8d8759d73213ae7b0062..b74280e975e615d5e2840d98531627e4ae05d57e 100644 --- a/vol.api.sqlsugar/VOL.Core/Utilities/EPPlusHelper.cs +++ b/vol.api.sqlsugar/VOL.Core/Utilities/EPPlusHelper.cs @@ -249,7 +249,10 @@ namespace VOL.Core.Utilities .TryGetValue(cellValue, out string result); cellValue = result ?? cellValue; } - worksheet.Cells[i + 2, j + 1].Value = cellValue; + if (!TryInsertImage(worksheet, i + 2, j + 1, cellValue)) + { + worksheet.Cells[i + 2, j + 1].Value = cellValue; + } } } package.SaveAs(new FileInfo(savePath + fileName)); @@ -257,6 +260,59 @@ namespace VOL.Core.Utilities return savePath + fileName; } + private static bool TryInsertImage(ExcelWorksheet worksheet, int row, int col, object value) + { + if (value is not string s || string.IsNullOrWhiteSpace(s)) return false; + var parts = s.Replace("\r", "").Replace("\n", "").Split(new[] { ',', ',' }, StringSplitOptions.RemoveEmptyEntries) + .Select(x => x.Trim()).ToArray(); + if (parts.Length == 0) return false; + var exts = new HashSet(StringComparer.OrdinalIgnoreCase) { + ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".webp" + }; + var images = new List(); + var files = new List(); + foreach (var p in parts) + { + var ext = Path.GetExtension(p); + if (string.IsNullOrEmpty(ext) || !exts.Contains(ext)) continue; + var rel = p.Replace("\\", "/").TrimStart('/'); + var full = rel.MapPath(true); + if (!File.Exists(full)) + { + var alt = Path.Combine("wwwroot", rel).ReplacePath(); + if (File.Exists(alt)) full = alt; else continue; + } + files.Add(full); + } + if (files.Count == 0) return false; + foreach (var f in files) images.Add(Image.FromFile(f)); + try + { + int spacing = 2; + int targetHeight = 60; + int totalPixels = 0; + for (int idx = 0; idx < images.Count; idx++) + { + var img = images[idx]; + string name = $"img_{row}_{col}_{idx}_{Guid.NewGuid().ToString("N").Substring(0, 6)}"; + var pic = worksheet.Drawings.AddPicture(name, img); + int offsetY = totalPixels + spacing; + pic.SetPosition(row - 1, offsetY, col - 1, 2); + int h = Math.Min(targetHeight, img.Height); + double scale = h <= 0 ? 1.0 : (double)h / img.Height; + int w = (int)(img.Width * scale); + pic.SetSize(w, h); + totalPixels += h + spacing; + } + double requiredHeight = Math.Max(worksheet.Row(row).Height, totalPixels * 0.75); + worksheet.Row(row).Height = requiredHeight; + return true; + } + finally + { + foreach (var img in images) img.Dispose(); + } + } /// /// 下载导出模板(仅限框架导出模板使用)(202.05.07) @@ -491,7 +547,10 @@ namespace VOL.Core.Utilities } } - worksheet.Cells[i + 2, j + 1].Value = cellValue; + if (!TryInsertImage(worksheet, i + 2, j + 1, cellValue)) + { + worksheet.Cells[i + 2, j + 1].Value = cellValue; + } } }