diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt index 1dc2dfe..f6a6738 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt @@ -149,9 +149,12 @@ $if(replaceDto.ShowBtnExport) [ActionPermissionFilter(Permission = "${replaceDto.PermissionPrefix}:export")] public IActionResult Export([FromQuery] ${replaceDto.ModelTypeName}QueryDto parm) { - parm.PageSize = 10000; + parm.PageSize = 100000; var list = _${replaceDto.ModelTypeName}Service.GetList(parm).Result; - + if (list == null || list.Count <= 0) + { + return ToResponse(ResultCode.FAIL, "没有要导出的数据"); + } string sFileName = ExportExcel(list, "${replaceDto.ModelTypeName}", "${genTable.FunctionName}"); return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName }); } diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplDto.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplDto.txt index f697b72..156e78b 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplDto.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplDto.txt @@ -1,38 +1,65 @@ -using System; +using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using ${options.ModelsNamespace}.Dto; using ${options.ModelsNamespace}.Models; +$if(replaceDto.ShowBtnExport) +using OfficeOpenXml.Attributes; +$end namespace ${options.DtosNamespace}.Dto { - /// - /// ${genTable.FunctionName}输入对象 - /// - public class ${replaceDto.ModelTypeName}Dto - { -$foreach(item in genTable.Columns) -$if((item.IsInsert || item.IsEdit || item.IsPk || item.IsIncrement)) -$if(item.IsRequired) - [Required(ErrorMessage = "${item.ColumnComment}不能为空")] -$end - public $item.CsharpType$item.RequiredStr $item.CsharpField { get; set; } -$end -$end - } - /// /// ${genTable.FunctionName}查询对象 /// public class ${replaceDto.ModelTypeName}QueryDto : PagerInfo { $foreach(item in genTable.Columns) -$if(item.IsQuery && item.htmlType == "datetime") +$if(item.IsQuery) +$if(item.htmlType == "datetime") public DateTime? Begin$item.CsharpField { get; set; } public DateTime? End$item.CsharpField { get; set; } -$elseif(item.IsQuery) +$elseif(item.htmlType == "selectMulti") + public ${item.CsharpType}[] $item.CsharpField { get; set; } +$else public $item.CsharpType$if(item.CsharpType != "string")?$end $item.CsharpField { get; set; } $end +$end $end } -} + + /// + /// ${genTable.FunctionName}输入输出对象 + /// + public class ${replaceDto.ModelTypeName}Dto + { +$foreach(item in genTable.Columns) +$if(item.IsRequired) + [Required(ErrorMessage = "${item.ColumnComment}不能为空")] +$end +$if(replaceDto.ShowBtnExport) +$if(item.IsExport) + [EpplusTableColumn(Header = "$if(item.ColumnComment == "")${item.CsharpField}${else}${item.ColumnComment}${end}"$if(item.CsharpType == "DateTime"), NumberFormat = "yyyy-MM-dd HH:mm:ss"$end)] +$else + [EpplusIgnore] +$end +$end + public $item.CsharpType$item.RequiredStr $item.CsharpField { get; set; } + +$end + +$if(genTable.TplCategory == "subNav" && genTable.SubTable != null) +$if(replaceDto.ShowBtnExport) + [EpplusIgnore] +$end + public ${genTable.SubTable.ClassName} ${genTable.SubTable.ClassName} { get; set; } +$end + +$if(genTable.TplCategory == "subNavMore" && genTable.SubTable != null) +$if(replaceDto.ShowBtnExport) + [EpplusIgnore] +$end + public List<${genTable.SubTable.ClassName}> ${genTable.SubTable.ClassName} { get; set; } +$end + } +} \ No newline at end of file diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplIService.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplIService.txt index aebe033..bc22796 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplIService.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplIService.txt @@ -14,7 +14,7 @@ namespace ${options.IServicsNamespace}.${options.SubNamespace}.I${options.SubNam /// public interface I${replaceDto.ModelTypeName}Service : IBaseService<${replaceDto.ModelTypeName}> { - PagedInfo<${replaceDto.ModelTypeName}> GetList(${replaceDto.ModelTypeName}QueryDto parm); + PagedInfo<${replaceDto.ModelTypeName}Dto> GetList(${replaceDto.ModelTypeName}QueryDto parm); $if(genTable.TplCategory == "tree") List<${replaceDto.ModelTypeName}> GetTreeList(${replaceDto.ModelTypeName}QueryDto parm); diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplModel.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplModel.txt index 82e6efb..bd81ff1 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplModel.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplModel.txt @@ -1,8 +1,6 @@ using System; using SqlSugar; -$if(replaceDto.ShowBtnExport) -using OfficeOpenXml.Attributes; -$end +using System.Collections.Generic; namespace ${options.ModelsNamespace}.Models { @@ -20,13 +18,6 @@ $foreach(item in genTable.Columns) /// 描述 :${item.ColumnComment} ${item.Remark} /// 空值 :$if(item.IsRequired == "True")false${else}true${end} /// -$if(replaceDto.ShowBtnExport) -$if(item.IsExport) - [EpplusTableColumn(Header = "$if(item.ColumnComment == "")${item.CsharpField}${else}${item.ColumnComment}${end}"$if(item.CsharpType == "DateTime"), NumberFormat = "yyyy-MM-dd HH:mm:ss"$end)] -$else - [EpplusIgnore] -$end -$end $if(item.IsPk || item.IsIncrement) [SugarColumn(IsPrimaryKey = ${item.IsPk.ToString().ToLower()}, IsIdentity = ${item.IsIncrement.ToString().ToLower()}$if(item.CsharpField.ToLower() != item.ColumnName.ToLower()), ColumnName = "$item.ColumnName"$end)] $elseif(item.CsharpField.ToLower() != item.ColumnName.ToLower()) @@ -35,8 +26,8 @@ $end public $item.CsharpType$item.RequiredStr $item.CsharpField { get; set; } ${end} -$if(genTable.TplCategory == "tree") +$if(genTable.TplCategory == "tree") [SugarColumn(IsIgnore = true)] public List<${replaceDto.ModelTypeName}> Children { get; set; } $end diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt index cb16edf..c744b4b 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt @@ -6,6 +6,10 @@ using ${options.ModelsNamespace}.Dto; using ${options.ModelsNamespace}.Models; using ${options.IRepositoriesNamespace}; using ${options.IServicsNamespace}.${options.SubNamespace}.I${options.SubNamespace}Service; +using System.Linq; +$if(genTable.TplCategory == "tree") +using System.Collections.Generic; +$end namespace ${options.ServicesNamespace}.${options.SubNamespace} { @@ -25,7 +29,7 @@ namespace ${options.ServicesNamespace}.${options.SubNamespace} /// /// /// - public PagedInfo<${replaceDto.ModelTypeName}> GetList(${replaceDto.ModelTypeName}QueryDto parm) + public PagedInfo<${replaceDto.ModelTypeName}Dto> GetList(${replaceDto.ModelTypeName}QueryDto parm) { //开始拼装查询条件 var predicate = Expressionable.Create<${replaceDto.ModelTypeName}>(); @@ -33,7 +37,9 @@ namespace ${options.ServicesNamespace}.${options.SubNamespace} //搜索条件查询语法参考Sqlsugar $foreach(column in genTable.Columns) $if(column.IsQuery) -$if(column.CsharpType == "string") +$if(column.HtmlType == "selectMulti") + predicate = predicate.AndIF(parm.${column.CsharpField} != null, it => parm.${column.CsharpField}.Contains(it.${column.CsharpField})); +$elseif(column.CsharpType == "string") predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.${column.CsharpField}), ${codeTool.QueryExp(column.CsharpField, column.QueryType)}; $elseif(column.CsharpType == "DateTime") predicate = predicate.AndIF(parm.Begin${column.CsharpField} == null, it => it.${column.CsharpField} >= DateTime.Now.AddDays(-1)); @@ -48,10 +54,10 @@ $if(null != genTable.SubTableName && "" != genTable.SubTableName) .Includes(it => it.${genTable.SubTable.ClassName}.MappingField(z => z.${genTable.SubTableFkName}, () => it.${replaceDto.PKName})) $end $if(genTable.Options.SortField != "" && genTable.Options.SortField != null) - .OrderBy("${genTable.Options.SortField} ${genTable.Options.SortType}") + //.OrderBy("${genTable.Options.SortField} ${genTable.Options.SortType}") $end .Where(predicate.ToExpression()) - .ToPage(parm); + .ToPage<${replaceDto.ModelTypeName}, ${replaceDto.ModelTypeName}Dto>(parm); return response; } @@ -78,12 +84,14 @@ $end $end $end - var response = Queryable().Where(predicate.ToExpression()) + var response = Queryable() + .Where(predicate.ToExpression()) .ToTree(it => it.Children, it => it.${genTable.Options.TreeParentCode}, 0); return response; } $end + /// /// 添加${genTable.FunctionName} /// diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt index 6e91504..d63099d 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt @@ -317,8 +317,8 @@ const showSearch = ref(true) const queryParams = reactive({ pageNum: 1, pageSize: 10, - sort: undefined, - sortType: undefined, + sort: '${genTable.Options.SortField}', + sortType: '${genTable.Options.SortType}', $foreach(item in genTable.Columns) $if(item.IsQuery == true) ${item.CsharpFieldFl}: undefined, diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt index ea98857..64f7011 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt @@ -27,13 +27,13 @@ $if(column.HtmlType == "datetime") @@ -289,17 +289,15 @@ from '@/api/${tool.FirstLowerCase(genTable.ModuleName)}/${genTable.BusinessName. const { proxy } = getCurrentInstance() // 选中${replaceDto.FistLowerPk}数组数组 const ids = ref([]) -// 非单选禁用 const single = ref(true) -// 非多个禁用 const multiple = ref(true) const loading = ref(false) const showSearch = ref(true) const queryParams = reactive({ pageNum: 1, pageSize: 10, - sort: undefined, - sortType: undefined, + sort: '${genTable.Options.SortField}', + sortType: '${genTable.Options.SortType}', $foreach(item in genTable.Columns) $if(item.IsQuery == true) ${item.CsharpFieldFl}: undefined, @@ -315,35 +313,11 @@ $if(column.IsList) $end $end ]) -const title = ref("") -// 操作类型 1、add 2、edit 3、view -const opertype = ref(0) -const open = ref(false) -const state = reactive({ - form: {}, - rules: { -$foreach(column in genTable.Columns) -$if(column.IsRequired && column.IsIncrement == false) - ${column.CsharpFieldFl}: [{ required: true, message: "${column.ColumnComment}不能为空", trigger: $if(column.htmlType == "select")"change"$else"blur"$end -$if(column.CsharpType == "int" || column.CsharpType == "long"), type: "number"$end }], -$end -$end - }, - options: { -$foreach(column in genTable.Columns) -$if((column.HtmlType == "radio" || column.HtmlType == "select" || column.HtmlType == "checkbox")) - // $if(column.ColumnComment != "") ${column.ColumnComment} $else ${column.CsharpFieldFl}$end选项列表 格式 eg:{ dictLabel: '标签', dictValue: '0'} - $if(column.DictType != "")${column.DictType}$else${column.CsharpFieldFl}Options$end: [], -$end -$end - } -}) - -const { form, rules, options } = toRefs(state) const total = ref(0) const dataList = ref([]) const queryRef = ref() -const formRef = ref() +const defaultTime = ref([new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)]) + $foreach(item in genTable.Columns) $if(item.HtmlType == "datetime" && item.IsQuery == true) // ${item.ColumnComment}时间范围 @@ -410,14 +384,82 @@ $end $end loading.value = true list${genTable.BusinessName}(queryParams).then(res => { - if (res.code == 200) { - dataList.value = res.data.result - total.value = res.data.totalNum + const { code, data } = res + if (code == 200) { + dataList.value = data.result + total.value = data.totalNum loading.value = false } }) } +// 查询 +function handleQuery() { + queryParams.pageNum = 1 + getList() +} + +// 重置查询操作 +function resetQuery(){ +$foreach(item in genTable.Columns) +$if(item.HtmlType == "datetime" && item.IsQuery == true) + // ${item.ColumnComment}时间范围 + dateRange${item.CsharpField}.value = [] +$end +$end + proxy.resetForm("queryRef") + handleQuery() +} + +// 多选框选中数据 +function handleSelectionChange(selection) { + ids.value = selection.map((item) => item.${replaceDto.FistLowerPk}); + single.value = selection.length != 1 + multiple.value = !selection.length; +} + +// 自定义排序 +function sortChange(column) { + if (column.prop == null || column.order == null) { + queryParams.sort = undefined + queryParams.sortType = undefined + } else { + queryParams.sort = column.prop + queryParams.sortType = column.order + } + + handleQuery() +} + + +/*************** form操作 ***************/ +const formRef = ref() +const title = ref("") +// 操作类型 1、add 2、edit 3、view +const opertype = ref(0) +const open = ref(false) +const state = reactive({ + form: {}, + rules: { +$foreach(column in genTable.Columns) +$if(column.IsRequired && column.IsIncrement == false) + ${column.CsharpFieldFl}: [{ required: true, message: "${column.ColumnComment}不能为空", trigger: $if(column.htmlType == "select")"change"$else"blur"$end +$if(column.CsharpType == "int" || column.CsharpType == "long"), type: "number"$end }], +$end +$end + }, + options: { +$foreach(column in genTable.Columns) +$if(column.HtmlType == "radio" || column.HtmlType == "select" || column.HtmlType == "checkbox" || column.HtmlType == "selectMulti") + //$if(column.ColumnComment != "") ${column.ColumnComment} $else ${column.CsharpFieldFl}$end选项列表 格式 eg:{ dictLabel: '标签', dictValue: '0'} + $if(column.DictType != "")${column.DictType}$else${column.CsharpFieldFl}Options$end: [], +$end +$end + } +}) + +const { form, rules, options } = toRefs(state) + // 关闭dialog function cancel(){ open.value = false @@ -439,20 +481,6 @@ $end proxy.resetForm("formRef") } -// 查询 -function handleQuery() { - queryParams.pageNum = 1 - getList() -} - -// 添加 -function handleAdd() { - reset(); - open.value = true - title.value = '添加' - opertype.value = 1 -} - // 删除按钮操作 function handleDelete(row) { const Ids = row.${replaceDto.FistLowerPk} || ids.value @@ -468,6 +496,14 @@ function handleDelete(row) { .catch(() => {}) } +// 添加按钮操作 +function handleAdd() { + reset(); + open.value = true + title.value = '添加' + opertype.value = 1 +} + // 修改按钮操作 function handleUpdate(row) { reset() @@ -491,7 +527,7 @@ $end }) } -// 表单提交 +// 添加&修改 表单提交 function submitForm() { proxy.${refs}refs["formRef"].validate((valid) => { if (valid) { @@ -521,17 +557,6 @@ $end }) } -// 重置查询操作 -function resetQuery(){ -$foreach(item in genTable.Columns) -$if(item.HtmlType == "datetime" && item.IsQuery == true) - // ${item.ColumnComment}时间范围 - dateRange${item.CsharpField}.value = [] -$end -$end - proxy.resetForm("queryRef") - handleQuery() -} $if(replaceDto.ShowBtnExport) // 导出按钮操作 function handleExport() { @@ -549,6 +574,7 @@ function handleExport() { }) } $end + $if(replaceDto.ShowBtnView) /** * 预览 @@ -562,6 +588,7 @@ function handlePreview(row) { form.value = row } $end + $if(replaceDto.ShowBtnTruncate) /** * 清空 @@ -582,25 +609,6 @@ function handleClear() { }) } $end -// 多选框选中数据 -function handleSelectionChange(selection) { - ids.value = selection.map((item) => item.${replaceDto.FistLowerPk}); - single.value = selection.length != 1 - multiple.value = !selection.length; -} - -// 自定义排序 -function sortChange(column) { - if (column.prop == null || column.order == null) { - queryParams.sort = undefined - queryParams.sortType = undefined - } else { - queryParams.sort = column.prop - queryParams.sortType = column.order - } - - handleQuery() -} handleQuery() \ No newline at end of file diff --git a/ZR.CodeGenerator/CodeGeneratorTool.cs b/ZR.CodeGenerator/CodeGeneratorTool.cs index c2ec709..484408f 100644 --- a/ZR.CodeGenerator/CodeGeneratorTool.cs +++ b/ZR.CodeGenerator/CodeGeneratorTool.cs @@ -252,7 +252,7 @@ namespace ZR.CodeGenerator string fileName; if (generateDto.VueVersion == 3) { - fileName = generateDto.GenTable.BusinessName.ToLower() + ".js"; + fileName = generateDto.GenTable.BusinessName.ToLower() + ".js";//vue3 api引用目前只能小写 } else { @@ -306,7 +306,7 @@ namespace ZR.CodeGenerator /// public static string GenerateVueTableList() { - return JnHelper.ReadTemplate(CodeTemplateDir, "TableList.txt").Render(); + return JnHelper.ReadTemplate(CodeTemplateDir, "TableList.txt").Render(); } /// @@ -366,7 +366,7 @@ namespace ZR.CodeGenerator { try { - return string.IsNullOrEmpty(str) ? str : str.Substring(0, 1).ToLower() + str[1..]; + return string.IsNullOrEmpty(str) ? str : str[..1].ToLower() + str[1..]; } catch (Exception ex) { diff --git a/ZR.Repository/BaseRepository.cs b/ZR.Repository/BaseRepository.cs index 13decfa..2bf476b 100644 --- a/ZR.Repository/BaseRepository.cs +++ b/ZR.Repository/BaseRepository.cs @@ -1,4 +1,6 @@ -using SqlSugar; +using Infrastructure.Extensions; +using Mapster; +using SqlSugar; using SqlSugar.IOC; using System; using System.Collections.Generic; @@ -365,11 +367,33 @@ namespace ZR.Repository page.PageSize = parm.PageSize; page.PageIndex = parm.PageNum; - page.Result = source.OrderByIF(!string.IsNullOrEmpty(parm.Sort), $"{parm.Sort} {(parm.SortType.Contains("desc") ? "desc" : "asc")}") + page.Result = source.OrderByIF(parm.Sort.IsNotEmpty(), $"{parm.Sort} {(parm.SortType.Contains("desc") ? "desc" : "asc")}") .ToPageList(parm.PageNum, parm.PageSize, ref total); page.TotalNum = total; return page; } + /// + /// 转指定实体类Dto + /// + /// + /// + /// + /// + /// + public static PagedInfo ToPage(this ISugarQueryable source, PagerInfo parm) + { + var page = new PagedInfo(); + var total = 0; + page.PageSize = parm.PageSize; + page.PageIndex = parm.PageNum; + + var result = source.OrderByIF(parm.Sort.IsNotEmpty(), $"{parm.Sort} {(parm.SortType.Contains("desc") ? "desc" : "asc")}") + .ToPageList(parm.PageNum, parm.PageSize, ref total); + page.TotalNum = total; + + page.Result = result.Adapt>(); + return page; + } } } diff --git a/ZR.Repository/ZR.Repository.csproj b/ZR.Repository/ZR.Repository.csproj index 533ba73..2d93f25 100644 --- a/ZR.Repository/ZR.Repository.csproj +++ b/ZR.Repository/ZR.Repository.csproj @@ -10,6 +10,7 @@ +