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

View File

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

View File

@ -51,7 +51,7 @@ $end
$end $end
var response = Queryable() var response = Queryable()
$if(null != genTable.SubTableName && "" != genTable.SubTableName) $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 $end
$if(genTable.Options.SortField != "" && genTable.Options.SortField != null) $if(genTable.Options.SortField != "" && genTable.Options.SortField != null)
//.OrderBy("${genTable.Options.SortField} ${genTable.Options.SortType}") //.OrderBy("${genTable.Options.SortField} ${genTable.Options.SortType}")

View File

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

View File

@ -114,19 +114,37 @@ $end
@sort-change="sortChange" @sort-change="sortChange"
@selection-change="handleSelectionChange"> @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center"/> <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) $foreach(column in genTable.Columns)
$set(labelName = "") $set(labelName = column.ColumnComment)
$set(checkboxHtml = "")
$set(showToolTipHtml = "") $set(showToolTipHtml = "")
$set(columnName = column.CsharpFieldFl) $set(columnName = column.CsharpFieldFl)
$if(column.CsharpType == "string" || column.HtmlType == "datetime") $if(column.CsharpType == "string" || column.HtmlType == "datetime")
$set(showToolTipHtml = " :show-overflow-tooltip=\"true\"") $set(showToolTipHtml = " :show-overflow-tooltip=\"true\"")
$end $end
$if(column.ColumnComment != "")
$set(labelName = column.ColumnComment)
$else
$set(labelName = column.CsharpFieldFl)
$end
$if(column.IsList == true) $if(column.IsList == true)
$if(column.HtmlType == "customInput" && column.IsPk == false) $if(column.HtmlType == "customInput" && column.IsPk == false)
<el-table-column prop="${columnName}" label="${labelName}" width="90" sortable align="center" v-if="columns.showColumn('${columnName}')"> <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-form ref="formRef" :model="form" :rules="rules" label-width="100px">
<el-row :gutter="20"> <el-row :gutter="20">
$foreach(column in genTable.Columns) $foreach(column in genTable.Columns)
$set(labelName = "")
$set(columnName = column.CsharpFieldFl) $set(columnName = column.CsharpFieldFl)
$set(value = "item.dictValue") $set(value = "item.dictValue")
$if(column.ColumnComment != "")
$set(labelName = column.ColumnComment) $set(labelName = column.ColumnComment)
$else
$set(labelName = column.CsharpFieldFl)
$end
$if(column.CsharpType == "int" || column.CsharpType == "long") $if(column.CsharpType == "int" || column.CsharpType == "long")
$set(value = "parseInt(item.dictValue)") $set(value = "parseInt(item.dictValue)")
$end $end

View File

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

View File

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

View File

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