feat:代码生成完善导航查询

This commit is contained in:
不做码农 2023-03-05 17:06:50 +08:00
parent d13d7666ab
commit 2b06669128
8 changed files with 82 additions and 71 deletions

View File

@ -5,6 +5,9 @@ using System.ComponentModel.DataAnnotations;
$if(replaceDto.ShowBtnExport)
using MiniExcelLibs.Attributes;
$end
$if(null != genTable.SubTableName && "" != genTable.SubTableName)
using ${subTableOptions.ModelsNamespace}.${subTableOptions.SubNamespace};
$end
namespace ${options.DtosNamespace}
{
@ -54,14 +57,14 @@ $if(genTable.TplCategory == "subNav" && genTable.SubTable != null)
$if(replaceDto.ShowBtnExport)
[ExcelIgnore]
$end
public ${genTable.SubTable.ClassName} ${genTable.SubTable.ClassName} { get; set; }
public ${genTable.SubTable.ClassName} ${genTable.SubTable.ClassName}Nav { get; set; }
$end
$if(genTable.TplCategory == "subNavMore" && genTable.SubTable != null)
$if(replaceDto.ShowBtnExport)
[ExcelIgnore]
$end
public List<${genTable.SubTable.ClassName}> ${genTable.SubTable.ClassName} { get; set; }
public List<${genTable.SubTable.ClassName}> ${genTable.SubTable.ClassName}Nav { get; set; }
$end
}
}

View File

@ -1,6 +1,9 @@
using System;
using SqlSugar;
using System.Collections.Generic;
$if(genTable.TplCategory.Contains("subNav") && genTable.SubTable != null)
using ${subTableOptions.ModelsNamespace}.${subTableOptions.SubNamespace};
$end
namespace ${options.ModelsNamespace}.${options.SubNamespace}
{
@ -38,12 +41,12 @@ $if(genTable.TplCategory == "tree")
public List<${replaceDto.ModelTypeName}> Children { get; set; }
$end
$if(genTable.TplCategory == "subNav" && genTable.SubTable != null)
[Navigate(NavigateType.Dynamic, null)] //自定义关系映射
public ${genTable.SubTable.ClassName} ${genTable.SubTable.ClassName} { get; set; }
[Navigate(NavigateType.OneToOne, nameof(${replaceDto.PKName}))] //自定义关系映射
public ${genTable.SubTable.ClassName} ${genTable.SubTable.ClassName}Nav { get; set; }
$end
$if(genTable.TplCategory == "subNavMore" && genTable.SubTable != null)
[Navigate(NavigateType.Dynamic, null)] //自定义关系映射
public List<${genTable.SubTable.ClassName}> ${genTable.SubTable.ClassName} { get; set; }
[Navigate(NavigateType.OneToMany, nameof(${genTable.SubTable.ClassName}.${genTable.SubTableFkName}), nameof(${replaceDto.PKName}))] //自定义关系映射
public List<${genTable.SubTable.ClassName}> ${genTable.SubTable.ClassName}Nav { get; set; }
$end
}
}

View File

@ -51,7 +51,7 @@ $end
$end
var response = Queryable()
$if(null != genTable.SubTableName && "" != genTable.SubTableName)
.Includes(it => it.${genTable.SubTable.ClassName}.MappingField(z => z.${genTable.SubTableFkName}, () => it.${replaceDto.PKName}))
.Includes(x => x.${genTable.SubTable.ClassName}Nav) //填充子对象
$end
$if(genTable.Options.SortField != "" && genTable.Options.SortField != null)
//.OrderBy("${genTable.Options.SortField} ${genTable.Options.SortType}")

View File

@ -102,7 +102,6 @@ $end
<el-table-column type="selection" width="50" align="center"/>
$foreach(column in genTable.Columns)
$set(labelName = "")
$set(checkboxHtml = "")
$set(showToolTipHtml = "")
$set(columnName = column.CsharpFieldFl)
$if(column.CsharpType == "string" || column.HtmlType == "datetime")

View File

@ -114,19 +114,37 @@ $end
@sort-change="sortChange"
@selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center"/>
$if(null != genTable.SubTableName && "" != genTable.SubTableName && genTable.TplCategory == "subNav")
<el-table-column type="expand">
<template #default="props">
<el-descriptions border>
$foreach(subColumn in genSubTable.Columns)
<el-descriptions-item label="${subColumn.ColumnComment}">{{ props.row.$tool.FirstLowerCase(genTable.SubTable.ClassName)Nav.${subColumn.CsharpFieldFl} }}</el-descriptions-item>
$end
</el-descriptions>
</template>
</el-table-column>
$end
$if(null != genTable.SubTableName && "" != genTable.SubTableName && genTable.TplCategory == "subNavMore")
<el-table-column type="expand">
<template #default="props">
<el-table :data="props.row.$tool.FirstLowerCase(genTable.SubTable.ClassName)Nav">
$foreach(subColumn in genSubTable.Columns)
$if(subColumn.IsList == true)
<el-table-column prop="${subColumn.CsharpFieldFl}" label="${subColumn.ColumnComment}" align="center"/>
$end
$end
</el-table>
</template>
</el-table-column>
$end
$foreach(column in genTable.Columns)
$set(labelName = "")
$set(checkboxHtml = "")
$set(labelName = column.ColumnComment)
$set(showToolTipHtml = "")
$set(columnName = column.CsharpFieldFl)
$if(column.CsharpType == "string" || column.HtmlType == "datetime")
$set(showToolTipHtml = " :show-overflow-tooltip=\"true\"")
$end
$if(column.ColumnComment != "")
$set(labelName = column.ColumnComment)
$else
$set(labelName = column.CsharpFieldFl)
$end
$if(column.IsList == true)
$if(column.HtmlType == "customInput" && column.IsPk == false)
<el-table-column prop="${columnName}" label="${labelName}" width="90" sortable align="center" v-if="columns.showColumn('${columnName}')">
@ -192,14 +210,9 @@ $end
<el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
<el-row :gutter="20">
$foreach(column in genTable.Columns)
$set(labelName = "")
$set(columnName = column.CsharpFieldFl)
$set(value = "item.dictValue")
$if(column.ColumnComment != "")
$set(labelName = column.ColumnComment)
$else
$set(labelName = column.CsharpFieldFl)
$end
$if(column.CsharpType == "int" || column.CsharpType == "long")
$set(value = "parseInt(item.dictValue)")
$end

View File

@ -32,7 +32,11 @@ namespace ZR.CodeGenerator
{
dto.VueParentPath = vuePath;
}
dto.GenOptions = GenerateOption(dto.GenTable); ;
dto.GenOptions = GenerateOption(dto.GenTable);
if (dto.GenTable.SubTable != null)
{
dto.SubTableOptions = GenerateOption(dto.GenTable.SubTable);
}
ReplaceDto replaceDto = new()
{
@ -45,33 +49,15 @@ namespace ZR.CodeGenerator
ShowBtnExport = dto.GenTable.Options.CheckedBtn.Any(f => f == 4),
ShowBtnView = dto.GenTable.Options.CheckedBtn.Any(f => f == 5),
ShowBtnTruncate = dto.GenTable.Options.CheckedBtn.Any(f => f == 6),
PKName = "Id",
PKType = "int"
};
var columns = dto.GenTable.Columns;
//循环表字段信息
foreach (GenTableColumn dbFieldInfo in dto.GenTable.Columns.OrderBy(x => x.Sort))
{
if (dbFieldInfo.IsPk || dbFieldInfo.IsIncrement)
{
replaceDto.PKName = dbFieldInfo.CsharpField;
replaceDto.PKType = dbFieldInfo.CsharpType;
}
if (dbFieldInfo.HtmlType.Equals(GenConstants.HTML_IMAGE_UPLOAD) || dbFieldInfo.HtmlType.Equals(GenConstants.HTML_FILE_UPLOAD))
{
replaceDto.UploadFile = 1;
}
if (dbFieldInfo.HtmlType.Equals(GenConstants.HTML_SELECT_MULTI))
{
replaceDto.SelectMulti = 1;
}
if (dbFieldInfo.HtmlType.Equals(GenConstants.HTML_EDITOR))
{
replaceDto.ShowEditor = 1;
}
dbFieldInfo.CsharpFieldFl = dbFieldInfo.CsharpField.FirstLowerCase();
}
replaceDto.PKName = columns.Find(f => f.IsPk || f.IsIncrement).CsharpField ?? "Id";
replaceDto.PKType = columns.Find(f => f.IsPk || f.IsIncrement).CsharpType ?? "int";
replaceDto.UploadFile = columns.Any(f => f.HtmlType.Equals(GenConstants.HTML_IMAGE_UPLOAD) || f.HtmlType.Equals(GenConstants.HTML_FILE_UPLOAD)) ? 1 : 0;
replaceDto.SelectMulti = columns.Any(f => f.HtmlType.Equals(GenConstants.HTML_SELECT_MULTI)) ? 1 : 0;
replaceDto.ShowEditor = columns.Any(f => f.HtmlType.Equals(GenConstants.HTML_EDITOR)) ? 1 : 0;
replaceDto.FistLowerPk = replaceDto.PKName.FirstLowerCase();
InitJntTemplate(dto, replaceDto);
@ -188,27 +174,12 @@ namespace ZR.CodeGenerator
/// 生成Vue页面
private static void GenerateVueViews(ReplaceDto replaceDto, GenerateDto generateDto)
{
string fileName = string.Empty;
switch (generateDto.GenTable.TplCategory)
string fileName = generateDto.GenTable.TplCategory switch
{
case "tree":
fileName = "TplTreeVue.txt";
break;
case "crud":
fileName = "TplVue.txt";
break;
case "subNav":
fileName = "TplVue.txt";
break;
case "subNavMore":
fileName = "TplVue.txt";
break;
case "select":
fileName = "TplVueSelect.txt";
break;
default:
break;
}
"tree" => "TplTreeVue.txt",
"select" => "TplVueSelect.txt",
_ => "TplVue.txt",
};
var tpl = JnHelper.ReadTemplate(CodeTemplateDir, fileName);
tpl.Set("vueQueryFormHtml", replaceDto.VueQueryFormHtml);
tpl.Set("VueViewFormContent", replaceDto.VueViewFormHtml);//添加、修改表单
@ -230,10 +201,6 @@ namespace ZR.CodeGenerator
string fileName = generateDto.GenTable.TplCategory switch
{
"tree" => "TreeVue.txt",
"crud" => "Vue.txt",
//case "select":
// fileName = "TplVueSelect.txt";
// break;
_ => "Vue.txt",
};
fileName = Path.Combine("v3", fileName);
@ -557,7 +524,9 @@ namespace ZR.CodeGenerator
options.Data.Set("nextTick", "$");
options.Data.Set("replaceDto", replaceDto);
options.Data.Set("options", dto.GenOptions);
options.Data.Set("subTableOptions", dto.SubTableOptions);
options.Data.Set("genTable", dto.GenTable);
options.Data.Set("genSubTable", dto.GenTable?.SubTable);
options.Data.Set("showCustomInput", showCustomInput);
options.Data.Set("tool", new CodeGeneratorTool());
options.Data.Set("codeTool", new CodeGenerateTemplate());

View File

@ -23,7 +23,14 @@ namespace ZR.CodeGenerator.Model
/// </summary>
public int[] CheckedBtn { get; set; } = System.Array.Empty<int>();
public GenTable GenTable { get; set; }
/// <summary>
/// 主表属性
/// </summary>
public CodeGenerateOption GenOptions { get; set; }
/// <summary>
/// 子表属性
/// </summary>
public CodeGenerateOption SubTableOptions { get; set; }
#region
/// <summary>
/// 代码模板预览存储路径存放

View File

@ -25,7 +25,18 @@ namespace ZR.Model.System.Generate
/// <summary>
/// 列说明
/// </summary>
public string ColumnComment { get; set; } = string.Empty;
private string columnComment;
public string ColumnComment
{
get
{
return string.IsNullOrEmpty(columnComment) ? CsharpField : columnComment;
}
set
{
columnComment = value;
}
}
/// <summary>
/// 数据库列类型
/// </summary>
@ -121,7 +132,13 @@ namespace ZR.Model.System.Generate
/// C# 字段名 首字母小写,用于前端
/// </summary>
[SugarColumn(IsIgnore = true)]
public string CsharpFieldFl { get; set; }
public string CsharpFieldFl
{
get
{
return CsharpField[..1].ToLower() + CsharpField[1..];
}
}
/// <summary>
/// 前端 只读字段
/// </summary>