新增主子表新增、编辑操作

This commit is contained in:
不做码农 2023-07-11 18:32:46 +08:00
parent e6af6180fa
commit a45c171639
8 changed files with 232 additions and 65 deletions

View File

@ -230,11 +230,11 @@ namespace ZR.Admin.WebApi.Controllers
}
var genTableInfo = GenTableService.GetGenTableInfo(dto.TableId);
var dbConfig = AppSettings.Get<DbConfigs>(nameof(GlobalConstant.CodeGenDbConfig));
dto.DbType = dbConfig.DbType;
dto.GenTable = genTableInfo;
dto.IsPreview = true;
CodeGeneratorTool.Generate(dto);
return SUCCESS(dto.GenCodes);
@ -278,12 +278,20 @@ namespace ZR.Admin.WebApi.Controllers
//生成代码到指定文件夹
CodeGeneratorTool.Generate(dto);
//下载文件
FileUtil.ZipGenCode(dto.ZipPath, dto.GenCodePath, zipReturnFileName);
if (genTableInfo.Options.GenerateMenu)
{
SysMenuService.AddSysMenu(genTableInfo, dto.ReplaceDto.PermissionPrefix, dto.ReplaceDto.ShowBtnEdit, dto.ReplaceDto.ShowBtnExport);
}
foreach (var item in dto.GenCodes)
{
item.Path = Path.Combine(dto.GenCodePath, item.Path);
FileUtil.WriteAndSave(item.Path, item.Content);
}
//下载文件
FileUtil.ZipGenCode(dto.ZipPath, dto.GenCodePath, zipReturnFileName);
return SUCCESS(new { path = "/Generatecode/" + zipReturnFileName, fileName = dto.ZipFileName });
}

View File

@ -68,7 +68,7 @@ $end
[ActionPermissionFilter(Permission = "${replaceDto.PermissionPrefix}:query")]
public IActionResult Get${replaceDto.ModelTypeName}(${replaceDto.PKType} ${replaceDto.PKName})
{
var response = _${replaceDto.ModelTypeName}Service.GetFirst(x => x.${replaceDto.PKName} == ${replaceDto.PKName});
var response = _${replaceDto.ModelTypeName}Service.GetInfo(${replaceDto.PKName});
var info = response.Adapt<${replaceDto.ModelTypeName}>();
return SUCCESS(info);

View File

@ -1,7 +1,4 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
//using ${options.ModelsNamespace}.${options.SubNamespace};
$if(replaceDto.ShowBtnExport)
using MiniExcelLibs.Attributes;
$end
@ -57,14 +54,14 @@ $if(genTable.TplCategory == "subNav" && genTable.SubTable != null)
$if(replaceDto.ShowBtnExport)
[ExcelIgnore]
$end
public ${genTable.SubTable.ClassName} ${genTable.SubTable.ClassName}Nav { get; set; }
public ${genTable.SubTable.ClassName}Dto ${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}Nav { get; set; }
public List<${genTable.SubTable.ClassName}Dto> ${genTable.SubTable.ClassName}Nav { get; set; }
$end
}
}

View File

@ -13,6 +13,8 @@ namespace ${options.IServicsNamespace}.${options.SubNamespace}.I${options.SubNam
{
PagedInfo<${replaceDto.ModelTypeName}Dto> GetList(${replaceDto.ModelTypeName}QueryDto parm);
${replaceDto.ModelTypeName} GetInfo(${replaceDto.PKType} ${replaceDto.PKName});
$if(genTable.TplCategory == "tree")
List<${replaceDto.ModelTypeName}> GetTreeList(${replaceDto.ModelTypeName}QueryDto parm);
$end

View File

@ -1,7 +1,4 @@
using System;
using SqlSugar;
using System.Collections.Generic;
$if(genTable.TplCategory.Contains("subNav") && genTable.SubTable != null)
$if(genTable.TplCategory.Contains("subNav") && genTable.SubTable != null)
using ${subTableOptions.ModelsNamespace}.${subTableOptions.SubNamespace};
$end
@ -37,7 +34,7 @@ $if(genTable.TplCategory == "tree")
[SugarColumn(IsIgnore = true)]
public List<${replaceDto.ModelTypeName}> Children { get; set; }
$end
$if(genTable.TplCategory == "subNav" && genTable.SubTable != null)
$if((genTable.TplCategory == "subNav" || genTable.TplCategory == "sub") && genTable.SubTable != null)
[Navigate(NavigateType.OneToOne, nameof(${replaceDto.PKName}))] //自定义关系映射
public ${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(x => x.${genTable.SubTable.ClassName}Nav) //填充子对象
//.Includes(x => x.${genTable.SubTable.ClassName}Nav) //填充子对象
$end
$if(genTable.Options.SortField != "" && genTable.Options.SortField != null)
//.OrderBy("${genTable.Options.SortField} ${genTable.Options.SortType}")
@ -90,6 +90,23 @@ $end
}
$end
/// <summary>
/// 获取详情
/// </summary>
/// <param name="${replaceDto.PKName}"></param>
/// <returns></returns>
public ${replaceDto.ModelTypeName} GetInfo(${replaceDto.PKType} ${replaceDto.PKName})
{
var response = Queryable()
$if(null != genTable.SubTableName && "" != genTable.SubTableName)
.Includes(x => x.${genTable.SubTable.ClassName}Nav) //填充子对象
$end
.Where(x => x.${replaceDto.PKName} == ${replaceDto.PKName})
.First();
return response;
}
/// <summary>
/// 添加${genTable.FunctionName}
/// </summary>
@ -97,7 +114,11 @@ $end
/// <returns></returns>
public int Add${replaceDto.ModelTypeName}(${replaceDto.ModelTypeName} model)
{
$if(null != genTable.SubTableName && "" != genTable.SubTableName)
return Context.InsertNav(model).Include(s1 => s1.${genTable.SubTable.ClassName}Nav).ExecuteCommand() ? 1 : 0;
$else
return Add(model, true);
$end
}
/// <summary>
@ -116,7 +137,11 @@ $end
${end}
//});
//return response;
$if(null != genTable.SubTableName && "" != genTable.SubTableName)
return Context.UpdateNav(model).Include(z1 => z1.${genTable.SubTable.ClassName}Nav).ExecuteCommand() ? 1 : 0;
$else
return Update(model, true);
$end
}
$if(replaceDto.ShowBtnTruncate)
/// <summary>

View File

@ -118,14 +118,17 @@ $end
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
</el-row>
<!-- 数据区域 -->
<el-table
:data="dataList"
v-loading="loading"
ref="table"
border
highlight-current-row
<el-table
:data="dataList"
v-loading="loading"
ref="table"
border
header-cell-class-name="el-table-header-cell"
highlight-current-row
@sort-change="sortChange"
$if(sub)
@row-click="rowClick"
$end
$if(replaceDto.ShowBtnMultiDel)
@selection-change="handleSelectionChange"
$end
@ -133,30 +136,7 @@ $end
$if(replaceDto.ShowBtnMultiDel)
<el-table-column type="selection" width="50" align="center"/>
$end
$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" header-row-class-name="text-navy">
$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 = column.ColumnComment)
$set(showToolTipHtml = "")
@ -199,7 +179,7 @@ $else
$end
$end
$end
<el-table-column label="操作" align="center" width="160">
<el-table-column label="操作" width="160">
<template #default="scope">
$if(replaceDto.OperBtnStyle == 2)
<el-button-group>
@ -227,10 +207,35 @@ $end
</template>
</el-table-column>
</el-table>
<pagination class="mt10" background :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
<pagination :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
$* 一对一/一对多列表显示详情 *$
$if(sub)
<el-table :data="$tool.FirstLowerCase(genTable.SubTable.ClassName)List" header-row-class-name="text-navy">
<el-table-column label="序号" type="index" width="80" />
$foreach(column in genSubTable.Columns)
$set(columnName = column.CsharpFieldFl)
$if(column.IsList == true)
$if(column.HtmlType == "checkbox" || column.HtmlType.Contains("select") || column.HtmlType == "radio")
<el-table-column prop="${columnName}" label="${column.ColumnComment}">
<template #default="scope">
$if(column.HtmlType == "checkbox")
<dict-tag :options="$if(column.DictType != "") options.${column.DictType} $else options.${column.CsharpFieldFl}Options$end" :value="scope.row.${columnName} ? scope.row.${columnName}.split(',') : []" />
$else
<dict-tag :options="$if(column.DictType != "") options.${column.DictType} $else options.${column.CsharpFieldFl}Options$end" :value="scope.row.${columnName}" />
$end
</template>
</el-table-column>
$else
<el-table-column prop="${column.CsharpFieldFl}" label="${column.ColumnComment}"/>
$end
$end
$end
</el-table>
$end
<!-- 添加或修改${genTable.functionName}对话框 -->
<el-dialog :title="title" :lock-scroll="false" v-model="open" >
<el-dialog :title="title" :lock-scroll="false" v-model="open" ${if(sub)}:fullscreen="fullScreen"$end>
<el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
<el-row :gutter="20">
$foreach(column in genTable.Columns)
@ -286,7 +291,7 @@ $elseif(column.HtmlType == "radio" || column.HtmlType == "selectRadio")
<el-col :lg="${options.ColNum}">
<el-form-item label="${labelName}" prop="${columnName}">
<el-radio-group v-model="form.${columnName}"${column.DisabledStr}>
<el-radio v-for="item in ${if(column.DictType != "")}options.${column.DictType}${else}options.${column.CsharpFieldFl}Options$end" :key="item.dictValue" :label="${value}">{{item.dictLabel}}</el-radio>
<el-radio v-for="item in ${if(column.DictType != "")}options.${column.DictType}${else}options.${column.CsharpFieldFl}Options$end" :key="item.dictValue" :label="item.dictValue">{{item.dictLabel}}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
@ -310,7 +315,7 @@ $elseif(column.HtmlType == "select" || column.HtmlType == "selectMulti")
v-for="item in $if(column.DictType != "")options.${column.DictType}${else}options.${column.CsharpFieldFl}Options$end"
:key="item.dictValue"
:label="item.dictLabel"
:value="${value}"></el-option>
:value="item.dictValue"></el-option>
</el-select>
</el-form-item>
</el-col>
@ -340,6 +345,67 @@ $end
$end
$end
</el-row>
$* 子表信息 *$
$if(sub)
<el-divider content-position="center">${genTable.SubTable.FunctionName}信息</el-divider>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" icon="Plus" @click="handleAdd${genTable.SubTable.ClassName}">添加</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" icon="Delete" @click="handleDelete${genTable.SubTable.ClassName}">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" icon="FullScreen" @click="fullScreen = !fullScreen">全屏</el-button>
</el-col>
</el-row>
<el-table :data="${tool.FirstLowerCase(genTable.SubTable.ClassName)}List" :row-class-name="row${genTable.SubTable.ClassName}Index" @selection-change="handle${genTable.SubTable.ClassName}SelectionChange" ref="${genTable.SubTable.ClassName}Ref">
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="序号" align="center" prop="index" width="50"/>
$foreach(column in genTable.SubTable.Columns)
$set(labelName = column.ColumnComment)
$set(columnName = column.CsharpFieldFl)
$if(column.CsharpType == "int" || column.CsharpType == "long")
$set(value = "parseInt(item.dictValue)")
$set(number = ".number")
$end
$if(column.IsList == true)
$if(column.IsPk || column.CsharpField == genTable.SubTableFkName)
$elseif(column.HtmlType == "inputNumber" || column.HtmlType == "customInput")
<el-table-column label="${labelName}" align="center" prop="${columnName}" width="140">
<template #default="scope">
<el-input-number v-model="scope.row.${columnName}" controls-position="right" placeholder="请输入${labelName}" />
</template>
</el-table-column>
$elseif(column.HtmlType == "datetime" || column.HtmlType == "month")
<el-table-column label="${labelName}" align="center" prop="${columnName}">
<template #default="scope">
<el-date-picker clearable v-model="scope.row.${columnName}" type="date" placeholder="选择日期时间"></el-date-picker>
</template>
</el-table-column>
$elseif(column.HtmlType == "radio" || column.HtmlType == "selectRadio" || column.HtmlType == "select" || column.HtmlType == "selectMulti")
<el-table-column label="${labelName}" prop="${columnName}">
<template #default="scope">
<el-select v-model="scope.row.${columnName}" placeholder="请选择${labelName}"${column.DisabledStr}>
<el-option
v-for="item in $if(column.DictType != "")options.${column.DictType}${else}options.${column.CsharpFieldFl}Options$end"
:key="item.dictValue"
:label="item.dictLabel"
:value="${value}"></el-option>
</el-select>
</template>
</el-table-column>
$else
<el-table-column label="${labelName}" align="center" prop="${columnName}">
<template #default="scope">
<el-input v-model="scope.row.${columnName}" placeholder="请输入${labelName}" />
</template>
</el-table-column>
$end
$end
$end
</el-table>
$end
</el-form>
<template #footer v-if="opertype != 3">
<el-button text @click="cancel">{{ ${t}t('btn.cancel') }}</el-button>
@ -433,8 +499,8 @@ $end
$set(index = 0)
var dictParams = [
$foreach(item in genTable.Columns)
$if((item.HtmlType == "radio" || item.HtmlType.Contains("select") || item.HtmlType == "checkbox") && item.DictType != "")
$foreach(item in dicts)
$if(item.DictType != "")
{ dictType: "${item.DictType}" },
$set(index = index + 1)
$end
@ -532,7 +598,7 @@ $end
$end
},
options: {
$foreach(column in genTable.Columns)
$foreach(column in dicts)
$if(column.HtmlType == "radio" || column.HtmlType.Contains("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: [],
@ -556,10 +622,13 @@ $foreach(item in genTable.Columns)
$if((item.HtmlType == "checkbox"))
${item.CsharpFieldFl}Checked: [],
$else
$item.CsharpFieldFl: undefined,
$item.CsharpFieldFl: null,
$end
$end
};
$if(sub)
${tool.FirstLowerCase(genTable.SubTable.ClassName)}List.value = []
$end
proxy.resetForm("formRef")
}
@ -567,7 +636,7 @@ $end
function handleAdd() {
reset();
open.value = true
title.value = '添加'
title.value = '添加${genTable.functionName}'
opertype.value = 1
}
@ -579,7 +648,7 @@ function handleUpdate(row) {
const { code, data } = res
if (code == 200) {
open.value = true
title.value = "修改数据"
title.value = '修改${genTable.functionName}'
opertype.value = 2
form.value = {
@ -590,6 +659,9 @@ $if(item.HtmlType == "checkbox")
$end
$end
}
$if(sub)
${tool.FirstLowerCase(genTable.SubTable.ClassName)}List.value = res.data.${tool.FirstLowerCase(genTable.SubTable.ClassName)}Nav
$end
}
})
}
@ -602,6 +674,10 @@ $foreach(item in genTable.Columns)
$if(item.HtmlType == "checkbox")
form.value.${item.CsharpFieldFl} = form.value.${item.CsharpFieldFl}Checked.toString();
$end
$end
$if(sub)
form.value.${tool.FirstLowerCase(genTable.SubTable.ClassName)}Nav = ${tool.FirstLowerCase(genTable.SubTable.ClassName)}List.value
$end
if (form.value.${replaceDto.FistLowerPk} != undefined && opertype.value === 2) {
update${genTable.BusinessName}(form.value).then((res) => {
@ -686,5 +762,59 @@ function handleExport() {
}
$end
$if(sub)
/*********************${genTable.SubTable.FunctionName}子表信息*************************/
const ${tool.FirstLowerCase(genTable.SubTable.ClassName)}List = ref([])
const checked${genTable.SubTable.ClassName} = ref([])
const fullScreen = ref(false)
/** ${genTable.SubTable.FunctionName}序号 */
function row${genTable.SubTable.ClassName}Index({ row, rowIndex }) {
row.index = rowIndex + 1;
}
/** ${genTable.SubTable.FunctionName}添加按钮操作 */
function handleAdd${genTable.SubTable.ClassName}() {
let obj = {};
$foreach(column in genTable.SubTable.Columns)
$if(column.IsPK || column.CsharpField == genTable.SubTableFkName)
$elseif(column.IsList == true && "" != column.CsharpField)
//obj.${column.CsharpFieldFl} = null;
$end
$end
${tool.FirstLowerCase(genTable.SubTable.ClassName)}List.value.push(obj);
}
/** 复选框选中数据 */
function handle${genTable.SubTable.ClassName}SelectionChange(selection) {
checked${genTable.SubTable.ClassName}.value = selection.map(item => item.index)
}
/** ${genTable.SubTable.FunctionName}删除按钮操作 */
function handleDelete${genTable.SubTable.ClassName}() {
if(checked${genTable.SubTable.ClassName}.value.length == 0){
proxy.${modal}modal.msgError('请先选择要删除的${genTable.SubTable.FunctionName}数据')
} else {
const ${genTable.SubTable.ClassName}s = ${tool.FirstLowerCase(genTable.SubTable.ClassName)}List.value;
const checked${genTable.SubTable.ClassName}s = checked${genTable.SubTable.ClassName}.value;
${tool.FirstLowerCase(genTable.SubTable.ClassName)}List.value = ${genTable.SubTable.ClassName}s.filter(function(item) {
return checked${genTable.SubTable.ClassName}s.indexOf(item.index) == -1
});
}
}
/** ${genTable.SubTable.FunctionName}详情 */
function rowClick(row) {
const id = row.${replaceDto.FistLowerPk} || ids.value
get${genTable.BusinessName}(id).then((res) => {
const { code, data } = res
if (code == 200) {
${tool.FirstLowerCase(genTable.SubTable.ClassName)}List.value = data.${tool.FirstLowerCase(genTable.SubTable.ClassName)}Nav
}
})
}
$end
handleQuery()
</script>

View File

@ -85,13 +85,6 @@ namespace ZR.CodeGenerator
GenerateAppVueFormViews(replaceDto, dto);
GenerateAppJs(dto);
dto.ReplaceDto = replaceDto;
if (dto.IsPreview) return;
foreach (var item in dto.GenCodes)
{
item.Path = Path.Combine(dto.GenCodePath, item.Path);
FileUtil.WriteAndSave(item.Path, item.Content);
}
}
private static CodeGenerateOption GenerateOption(GenTable genTable)
@ -566,9 +559,22 @@ namespace ZR.CodeGenerator
/// <param name="replaceDto"></param>
private static void InitJntTemplate(GenerateDto dto, ReplaceDto replaceDto)
{
#if DEBUG
Engine.Current.Clean();
#endif
dto.GenTable.Columns = dto.GenTable.Columns.OrderBy(x => x.Sort).ToList();
bool showCustomInput = dto.GenTable.Columns.Any(f => f.HtmlType.Equals(GenConstants.HTML_CUSTOM_INPUT, StringComparison.OrdinalIgnoreCase));
#region
var dictHtml = new string[] { GenConstants.HTML_CHECKBOX, GenConstants.HTML_RADIO, GenConstants.HTML_SELECT, GenConstants.HTML_SELECT_MULTI };
var dicts = new List<GenTableColumn>();
dicts.AddRange(dto.GenTable.Columns.FindAll(f => dictHtml.Contains(f.HtmlType)));
if (dto.GenTable.SubTable != null && dto.GenTable.SubTableName.IsNotEmpty())
{
dicts.AddRange(dto.GenTable?.SubTable?.Columns?.FindAll(f => dictHtml.Contains(f.HtmlType)));
}
#endregion
//jnt模板引擎全局变量
Engine.Configure((options) =>
{
@ -592,6 +598,8 @@ namespace ZR.CodeGenerator
options.Data.Set("showCustomInput", showCustomInput);
options.Data.Set("tool", new CodeGeneratorTool());
options.Data.Set("codeTool", new CodeGenerateTemplate());
options.Data.Set("dicts", dicts);
options.Data.Set("sub", dto.GenTable.SubTable != null && dto.GenTable.SubTableName.IsNotEmpty());
options.EnableCache = true;
//...其它数据
});