diff --git a/package.json b/package.json index 65530f03..38b42dd4 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { "version": "1.4.0", "devDependencies": { - "cz-git": "^1.9.2", + "cz-git": "^1.9.3", "commitizen": "^4.3.0", - "prettier": "^3.3.0", + "prettier": "^3.3.2", "standard-version": "^9.5.0" }, "config": { @@ -11,4 +11,4 @@ "path": "node_modules/cz-git" } } -} +} \ No newline at end of file diff --git a/src/backend/NetAdmin.Application/Services/RepositoryService.cs b/src/backend/NetAdmin.Application/Services/RepositoryService.cs index 414a9cc2..a5f35eb5 100644 --- a/src/backend/NetAdmin.Application/Services/RepositoryService.cs +++ b/src/backend/NetAdmin.Application/Services/RepositoryService.cs @@ -1,4 +1,8 @@ +using CsvHelper; +using Microsoft.Net.Http.Headers; using NetAdmin.Application.Repositories; +using NetAdmin.Domain; +using NetAdmin.Domain.Dto.Dependency; namespace NetAdmin.Application.Services; @@ -73,6 +77,43 @@ public abstract class RepositoryService(BasicReposit } #endif + /// + /// 导出实体 + /// + protected async Task ExportAsync( // + Func, ISelect> selector, QueryReq query, string fileName) + where TQuery : DataAbstraction, new() + { + var data = await selector(query) + #if DBTYPE_SQLSERVER + .WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait) + #endif + .Take(Numbers.MAX_LIMIT_EXPORT) + .ToListAsync() + .ConfigureAwait(false); + + var list = data.Adapt>(); + var stream = new MemoryStream(); + var writer = new StreamWriter(stream); + var csv = new CsvWriter(writer, CultureInfo.InvariantCulture); + csv.WriteHeader(); + await csv.NextRecordAsync().ConfigureAwait(false); + + foreach (var item in list) { + csv.WriteRecord(item); + await csv.NextRecordAsync().ConfigureAwait(false); + } + + await csv.FlushAsync().ConfigureAwait(false); + _ = stream.Seek(0, SeekOrigin.Begin); + + App.HttpContext.Response.Headers.ContentDisposition + = new ContentDispositionHeaderValue(Chars.FLG_HTTP_HEADER_VALUE_ATTACHMENT) { + FileNameStar = $"{fileName}_{DateTime.Now:yyyy.MM.dd-HH.mm.ss}.csv" + }.ToString(); + return new FileStreamResult(stream, Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM); + } + private IUpdate BuildUpdate( // TEntity entity // , IEnumerable includeFields // diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ApiService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ApiService.cs index c0174a64..39ab4d4b 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ApiService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ApiService.cs @@ -1,5 +1,3 @@ -using CsvHelper; -using Microsoft.Net.Http.Headers; using NetAdmin.Application.Repositories; using NetAdmin.Application.Services; using NetAdmin.Domain.Dto.Dependency; @@ -59,36 +57,10 @@ public sealed class ApiService( } /// - public async Task ExportAsync(QueryReq req) + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); - var data = await QueryInternal(req) - #if DBTYPE_SQLSERVER - .WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait) - #endif - .Take(Numbers.MAX_LIMIT_EXPORT) - .ToListAsync() - .ConfigureAwait(false); - var list = data.Adapt>(); - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - var csv = new CsvWriter(writer, CultureInfo.InvariantCulture); - csv.WriteHeader(); - await csv.NextRecordAsync().ConfigureAwait(false); - - foreach (var item in list) { - csv.WriteRecord(item); - await csv.NextRecordAsync().ConfigureAwait(false); - } - - await csv.FlushAsync().ConfigureAwait(false); - _ = stream.Seek(0, SeekOrigin.Begin); - - App.HttpContext.Response.Headers.ContentDisposition - = new ContentDispositionHeaderValue(Chars.FLG_HTTP_HEADER_VALUE_ATTACHMENT) { - FileNameStar = $"{Ln.接口导出}_{DateTime.Now:yyyy.MM.dd-HH.mm.ss}.csv" - }.ToString(); - return new FileStreamResult(stream, Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM); + return ExportAsync(QueryInternal, req, Ln.接口导出); } /// diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ConfigService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ConfigService.cs index e8cafc9b..cae388f0 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ConfigService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ConfigService.cs @@ -1,5 +1,3 @@ -using CsvHelper; -using Microsoft.Net.Http.Headers; using NetAdmin.Application.Repositories; using NetAdmin.Application.Services; using NetAdmin.Domain.Dto.Dependency; @@ -76,36 +74,10 @@ public sealed class ConfigService(BasicRepository rpo) // } /// - public async Task ExportAsync(QueryReq req) + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); - var data = await QueryInternal(req) - #if DBTYPE_SQLSERVER - .WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait) - #endif - .Take(Numbers.MAX_LIMIT_EXPORT) - .ToListAsync() - .ConfigureAwait(false); - var list = data.Adapt>(); - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - var csv = new CsvWriter(writer, CultureInfo.InvariantCulture); - csv.WriteHeader(); - await csv.NextRecordAsync().ConfigureAwait(false); - - foreach (var item in list) { - csv.WriteRecord(item); - await csv.NextRecordAsync().ConfigureAwait(false); - } - - await csv.FlushAsync().ConfigureAwait(false); - _ = stream.Seek(0, SeekOrigin.Begin); - - App.HttpContext.Response.Headers.ContentDisposition - = new ContentDispositionHeaderValue(Chars.FLG_HTTP_HEADER_VALUE_ATTACHMENT) { - FileNameStar = $"{Ln.配置导出}_{DateTime.Now:yyyy.MM.dd-HH.mm.ss}.csv" - }.ToString(); - return new FileStreamResult(stream, Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM); + return ExportAsync(QueryInternal, req, Ln.配置导出); } /// diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DeptService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DeptService.cs index d8e184ad..e555761b 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DeptService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DeptService.cs @@ -1,5 +1,3 @@ -using CsvHelper; -using Microsoft.Net.Http.Headers; using NetAdmin.Application.Repositories; using NetAdmin.Application.Services; using NetAdmin.Domain.Dto.Dependency; @@ -94,36 +92,10 @@ public sealed class DeptService(BasicRepository rpo) // } /// - public async Task ExportAsync(QueryReq req) + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); - var data = await QueryInternal(req) - #if DBTYPE_SQLSERVER - .WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait) - #endif - .Take(Numbers.MAX_LIMIT_EXPORT) - .ToListAsync() - .ConfigureAwait(false); - var list = data.Adapt>(); - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - var csv = new CsvWriter(writer, CultureInfo.InvariantCulture); - csv.WriteHeader(); - await csv.NextRecordAsync().ConfigureAwait(false); - - foreach (var item in list) { - csv.WriteRecord(item); - await csv.NextRecordAsync().ConfigureAwait(false); - } - - await csv.FlushAsync().ConfigureAwait(false); - _ = stream.Seek(0, SeekOrigin.Begin); - - App.HttpContext.Response.Headers.ContentDisposition - = new ContentDispositionHeaderValue(Chars.FLG_HTTP_HEADER_VALUE_ATTACHMENT) { - FileNameStar = $"{Ln.部门导出}_{DateTime.Now:yyyy.MM.dd-HH.mm.ss}.csv" - }.ToString(); - return new FileStreamResult(stream, Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM); + return ExportAsync(QueryInternal, req, Ln.部门导出); } /// @@ -160,7 +132,12 @@ public sealed class DeptService(BasicRepository rpo) // return UpdateAsync(req, [nameof(req.Enabled)]); } - private ISelect QueryInternal(QueryReq req, bool asTreeCte = false) + private ISelect QueryInternal(QueryReq req) + { + return QueryInternal(req, false); + } + + private ISelect QueryInternal(QueryReq req, bool asTreeCte) { var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter) .WhereDynamic(req.Filter) diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DicContentService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DicContentService.cs index 68a5eeee..805f4c33 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DicContentService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DicContentService.cs @@ -1,5 +1,3 @@ -using CsvHelper; -using Microsoft.Net.Http.Headers; using NetAdmin.Application.Repositories; using NetAdmin.Application.Services; using NetAdmin.Domain.Dto.Dependency; @@ -96,36 +94,10 @@ public sealed class DicContentService(BasicRepository rpo) } /// - public async Task ExportAsync(QueryReq req) + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); - var data = await QueryInternal(req) - #if DBTYPE_SQLSERVER - .WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait) - #endif - .Take(Numbers.MAX_LIMIT_EXPORT) - .ToListAsync() - .ConfigureAwait(false); - var list = data.Adapt>(); - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - var csv = new CsvWriter(writer, CultureInfo.InvariantCulture); - csv.WriteHeader(); - await csv.NextRecordAsync().ConfigureAwait(false); - - foreach (var item in list) { - csv.WriteRecord(item); - await csv.NextRecordAsync().ConfigureAwait(false); - } - - await csv.FlushAsync().ConfigureAwait(false); - _ = stream.Seek(0, SeekOrigin.Begin); - - App.HttpContext.Response.Headers.ContentDisposition - = new ContentDispositionHeaderValue(Chars.FLG_HTTP_HEADER_VALUE_ATTACHMENT) { - FileNameStar = $"{Ln.字典内容导出}_{DateTime.Now:yyyy.MM.dd-HH.mm.ss}.csv" - }.ToString(); - return new FileStreamResult(stream, Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM); + return ExportAsync(QueryInternal, req, Ln.字典内容导出); } /// diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/JobRecordService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/JobRecordService.cs index 62128cfb..fc1ddcb0 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/JobRecordService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/JobRecordService.cs @@ -1,5 +1,3 @@ -using CsvHelper; -using Microsoft.Net.Http.Headers; using NetAdmin.Application.Repositories; using NetAdmin.Application.Services; using NetAdmin.Domain.Dto.Dependency; @@ -65,36 +63,10 @@ public sealed class JobRecordService(BasicRepository rpo) / } /// - public async Task ExportAsync(QueryReq req) + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); - var data = await QueryInternal(req) - #if DBTYPE_SQLSERVER - .WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait) - #endif - .Take(Numbers.MAX_LIMIT_EXPORT) - .ToListAsync() - .ConfigureAwait(false); - var list = data.Adapt>(); - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - var csv = new CsvWriter(writer, CultureInfo.InvariantCulture); - csv.WriteHeader(); - await csv.NextRecordAsync().ConfigureAwait(false); - - foreach (var item in list) { - csv.WriteRecord(item); - await csv.NextRecordAsync().ConfigureAwait(false); - } - - await csv.FlushAsync().ConfigureAwait(false); - _ = stream.Seek(0, SeekOrigin.Begin); - - App.HttpContext.Response.Headers.ContentDisposition - = new ContentDispositionHeaderValue(Chars.FLG_HTTP_HEADER_VALUE_ATTACHMENT) { - FileNameStar = $"{Ln.计划作业执行记录导出}_{DateTime.Now:yyyy.MM.dd-HH.mm.ss}.csv" - }.ToString(); - return new FileStreamResult(stream, Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM); + return ExportAsync(QueryInternal, req, Ln.计划作业执行记录导出); } /// diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/JobService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/JobService.cs index eb9c8b81..f292dba3 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/JobService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/JobService.cs @@ -1,7 +1,5 @@ using Cronos; -using CsvHelper; using FreeSql.Internal; -using Microsoft.Net.Http.Headers; using NetAdmin.Application.Repositories; using NetAdmin.Application.Services; using NetAdmin.Domain.Dto.Dependency; @@ -140,36 +138,10 @@ public sealed class JobService(BasicRepository rpo, IJobRecordSer } /// - public async Task ExportAsync(QueryReq req) + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); - var data = await QueryInternal(req) - #if DBTYPE_SQLSERVER - .WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait) - #endif - .Take(Numbers.MAX_LIMIT_EXPORT) - .ToListAsync() - .ConfigureAwait(false); - var list = data.Adapt>(); - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - var csv = new CsvWriter(writer, CultureInfo.InvariantCulture); - csv.WriteHeader(); - await csv.NextRecordAsync().ConfigureAwait(false); - - foreach (var item in list) { - csv.WriteRecord(item); - await csv.NextRecordAsync().ConfigureAwait(false); - } - - await csv.FlushAsync().ConfigureAwait(false); - _ = stream.Seek(0, SeekOrigin.Begin); - - App.HttpContext.Response.Headers.ContentDisposition - = new ContentDispositionHeaderValue(Chars.FLG_HTTP_HEADER_VALUE_ATTACHMENT) { - FileNameStar = $"{Ln.计划作业导出}_{DateTime.Now:yyyy.MM.dd-HH.mm.ss}.csv" - }.ToString(); - return new FileStreamResult(stream, Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM); + return ExportAsync(QueryInternal, req, Ln.计划作业导出); } /// diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RequestLogService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RequestLogService.cs index a66150f5..52298824 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RequestLogService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RequestLogService.cs @@ -1,5 +1,3 @@ -using CsvHelper; -using Microsoft.Net.Http.Headers; using NetAdmin.Application.Repositories; using NetAdmin.Application.Services; using NetAdmin.Domain.Dto.Dependency; @@ -67,36 +65,10 @@ public sealed class RequestLogService(BasicRepository rpo) } /// - public async Task ExportAsync(QueryReq req) + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); - var data = await QueryInternal(req) - #if DBTYPE_SQLSERVER - .WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait) - #endif - .Take(Numbers.MAX_LIMIT_EXPORT) - .ToListAsync() - .ConfigureAwait(false); - var list = data.Adapt>(); - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - var csv = new CsvWriter(writer, CultureInfo.InvariantCulture); - csv.WriteHeader(); - await csv.NextRecordAsync().ConfigureAwait(false); - - foreach (var item in list) { - csv.WriteRecord(item); - await csv.NextRecordAsync().ConfigureAwait(false); - } - - await csv.FlushAsync().ConfigureAwait(false); - _ = stream.Seek(0, SeekOrigin.Begin); - - App.HttpContext.Response.Headers.ContentDisposition - = new ContentDispositionHeaderValue(Chars.FLG_HTTP_HEADER_VALUE_ATTACHMENT) { - FileNameStar = $"{Ln.请求日志导出}_{DateTime.Now:yyyy.MM.dd-HH.mm.ss}.csv" - }.ToString(); - return new FileStreamResult(stream, Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM); + return ExportAsync(QueryInternal, req, Ln.请求日志导出); } /// diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RoleService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RoleService.cs index 9d6641e7..6393414f 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RoleService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RoleService.cs @@ -1,5 +1,3 @@ -using CsvHelper; -using Microsoft.Net.Http.Headers; using NetAdmin.Application.Repositories; using NetAdmin.Application.Services; using NetAdmin.Domain.Dto.Dependency; @@ -88,36 +86,10 @@ public sealed class RoleService(BasicRepository rpo) // } /// - public async Task ExportAsync(QueryReq req) + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); - var data = await QueryInternal(req) - #if DBTYPE_SQLSERVER - .WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait) - #endif - .Take(Numbers.MAX_LIMIT_EXPORT) - .ToListAsync() - .ConfigureAwait(false); - var list = data.Adapt>(); - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - var csv = new CsvWriter(writer, CultureInfo.InvariantCulture); - csv.WriteHeader(); - await csv.NextRecordAsync().ConfigureAwait(false); - - foreach (var item in list) { - csv.WriteRecord(item); - await csv.NextRecordAsync().ConfigureAwait(false); - } - - await csv.FlushAsync().ConfigureAwait(false); - _ = stream.Seek(0, SeekOrigin.Begin); - - App.HttpContext.Response.Headers.ContentDisposition - = new ContentDispositionHeaderValue(Chars.FLG_HTTP_HEADER_VALUE_ATTACHMENT) { - FileNameStar = $"{Ln.角色导出}_{DateTime.Now:yyyy.MM.dd-HH.mm.ss}.csv" - }.ToString(); - return new FileStreamResult(stream, Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM); + return ExportAsync(QueryInternal, req, Ln.角色导出); } /// diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgService.cs index 4ac138c8..02de7190 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgService.cs @@ -1,5 +1,3 @@ -using CsvHelper; -using Microsoft.Net.Http.Headers; using NetAdmin.Application.Repositories; using NetAdmin.Application.Services; using NetAdmin.Domain.Contexts; @@ -112,36 +110,10 @@ public sealed class SiteMsgService( } /// - public async Task ExportAsync(QueryReq req) + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); - var data = await QueryInternal(req) - #if DBTYPE_SQLSERVER - .WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait) - #endif - .Take(Numbers.MAX_LIMIT_EXPORT) - .ToListAsync() - .ConfigureAwait(false); - var list = data.Adapt>(); - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - var csv = new CsvWriter(writer, CultureInfo.InvariantCulture); - csv.WriteHeader(); - await csv.NextRecordAsync().ConfigureAwait(false); - - foreach (var item in list) { - csv.WriteRecord(item); - await csv.NextRecordAsync().ConfigureAwait(false); - } - - await csv.FlushAsync().ConfigureAwait(false); - _ = stream.Seek(0, SeekOrigin.Begin); - - App.HttpContext.Response.Headers.ContentDisposition - = new ContentDispositionHeaderValue(Chars.FLG_HTTP_HEADER_VALUE_ATTACHMENT) { - FileNameStar = $"{Ln.站内信导出}_{DateTime.Now:yyyy.MM.dd-HH.mm.ss}.csv" - }.ToString(); - return new FileStreamResult(stream, Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM); + return ExportAsync(QueryInternal, req, Ln.站内信导出); } /// diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserService.cs index 4c3675e6..75bf6258 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserService.cs @@ -1,5 +1,3 @@ -using CsvHelper; -using Microsoft.Net.Http.Headers; using NetAdmin.Application.Repositories; using NetAdmin.Application.Services; using NetAdmin.Domain.Contexts; @@ -160,40 +158,10 @@ public sealed class UserService( } /// - public async Task ExportAsync(QueryReq req) + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); - #pragma warning disable VSTHRD103, S6966 - - // ReSharper disable once MethodHasAsyncOverload - var data = await QueryInternal(req) - #pragma warning restore S6966, VSTHRD103 - #if DBTYPE_SQLSERVER - .WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait) - #endif - .Take(Numbers.MAX_LIMIT_EXPORT) - .ToListAsync() - .ConfigureAwait(false); - var list = data.Adapt>(); - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - var csv = new CsvWriter(writer, CultureInfo.InvariantCulture); - csv.WriteHeader(); - await csv.NextRecordAsync().ConfigureAwait(false); - - foreach (var item in list) { - csv.WriteRecord(item); - await csv.NextRecordAsync().ConfigureAwait(false); - } - - await csv.FlushAsync().ConfigureAwait(false); - _ = stream.Seek(0, SeekOrigin.Begin); - - App.HttpContext.Response.Headers.ContentDisposition - = new ContentDispositionHeaderValue(Chars.FLG_HTTP_HEADER_VALUE_ATTACHMENT) { - FileNameStar = $"{Ln.用户导出}_{DateTime.Now:yyyy.MM.dd-HH.mm.ss}.csv" - }.ToString(); - return new FileStreamResult(stream, Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM); + return ExportAsync(QueryInternal, req, Ln.用户导出); } /// diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Tpl/ExampleService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Tpl/ExampleService.cs index 4a56a722..487f4750 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Tpl/ExampleService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Tpl/ExampleService.cs @@ -1,5 +1,3 @@ -using CsvHelper; -using Microsoft.Net.Http.Headers; using NetAdmin.Application.Repositories; using NetAdmin.Application.Services; using NetAdmin.Domain.DbMaps.Tpl; @@ -65,36 +63,10 @@ public sealed class ExampleService(BasicRepository rpo) // } /// - public async Task ExportAsync(QueryReq req) + public Task ExportAsync(QueryReq req) { req.ThrowIfInvalid(); - var data = await QueryInternal(req) - #if DBTYPE_SQLSERVER - .WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait) - #endif - .Take(Numbers.MAX_LIMIT_EXPORT) - .ToListAsync() - .ConfigureAwait(false); - var list = data.Adapt>(); - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - var csv = new CsvWriter(writer, CultureInfo.InvariantCulture); - csv.WriteHeader(); - await csv.NextRecordAsync().ConfigureAwait(false); - - foreach (var item in list) { - csv.WriteRecord(item); - await csv.NextRecordAsync().ConfigureAwait(false); - } - - await csv.FlushAsync().ConfigureAwait(false); - _ = stream.Seek(0, SeekOrigin.Begin); - - App.HttpContext.Response.Headers.ContentDisposition - = new ContentDispositionHeaderValue(Chars.FLG_HTTP_HEADER_VALUE_ATTACHMENT) { - FileNameStar = $"{Ln.示例导出}_{DateTime.Now:yyyy.MM.dd-HH.mm.ss}.csv" - }.ToString(); - return new FileStreamResult(stream, Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM); + return ExportAsync(QueryInternal, req, Ln.示例导出); } /// diff --git a/src/frontend/admin/package.json b/src/frontend/admin/package.json index c01e2c97..f5545acd 100644 --- a/src/frontend/admin/package.json +++ b/src/frontend/admin/package.json @@ -10,14 +10,14 @@ }, "dependencies": { "@element-plus/icons-vue": "^2.3.1", - "ace-builds": "^1.35.0", - "aieditor": "^1.0.10", + "ace-builds": "^1.35.2", + "aieditor": "^1.0.12", "axios": "^1.7.2", "clipboard": "^2.0.11", "core-js": "^3.37.1", "cropperjs": "^1.6.2", "crypto-js": "^4.2.0", - "echarts": "^5.5.0", + "echarts": "^5.5.1", "element-plus": "^2.7.6", "json-bigint": "^1.0.0", "json5-to-table": "^0.1.8", @@ -28,7 +28,7 @@ "qrcodejs2": "^0.0.2", "sortablejs": "^1.15.2", "vkbeautify": "^0.99.3", - "vue": "^3.4.30", + "vue": "^3.4.31", "vue-i18n": "^9.13.1", "vue-router": "^4.4.0", "vue3-ace-editor": "^2.2.4", @@ -42,7 +42,7 @@ "prettier-plugin-organize-attributes": "^1.0.0", "sass": "^1.77.6", "terser": "^5.31.1", - "vite": "^5.3.1" + "vite": "^5.3.3" }, "browserslist": [ "> 1%",