优化代码生成模板

This commit is contained in:
不做码农 2021-12-02 17:44:46 +08:00
parent d08ecdd563
commit 84aeb9b27b
14 changed files with 329 additions and 235 deletions

View File

@ -17,6 +17,10 @@
<Compile Remove="Middleware\RequestIPMiddleware.cs" />
</ItemGroup>
<ItemGroup>
<Content Remove="wwwroot\CodeGenTemplate\VueTemplate.txt" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="EPPlus" Version="5.8.3" />
<PackageReference Include="Hei.Captcha" Version="0.3.0" />

View File

@ -1,6 +1,6 @@
-- 菜单
INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_by, create_time, remark)
VALUES ('${genTable.functionName}', ${parentId}, 1, '${genTable.ModuleName}/${replaceDto.ModelTypeName}', '${genTable.ModuleName}/${replaceDto.ViewsFileName}/index', 0, 0, 'C', '0', '0', '${replaceDto.PermissionPrefix}:list', 'icon1', '', sysdate(), '${genTable.functionName}菜单');
VALUES ('${genTable.functionName}', ${parentId}, 1, '${genTable.ModuleName}/${replaceDto.ModelTypeName}', '${genTable.ModuleName}/${genTable.BusinessName}/index', 0, 0, 'C', '0', '0', '${replaceDto.PermissionPrefix}:list', 'icon1', '', sysdate(), '${genTable.functionName}菜单');
-- 按钮父菜单id
SELECT @menuId := LAST_INSERT_ID();

View File

@ -1,6 +1,6 @@
-- ${genTable.functionName}菜单
INSERT INTO sys_menu(menuName, parentId, orderNum, path, component, isFrame, isCache, menuType, visible, status, perms, icon, create_time, remark)
VALUES ('${genTable.functionName}', ${parentId}, 1, '${genTable.ModuleName}/${replaceDto.ModelTypeName}', '${genTable.ModuleName}/${replaceDto.ViewsFileName}/index', 0, 0, 'C', '0', '0', '${replaceDto.PermissionPrefix}:list', 'icon1', GETDATE(), '${genTable.functionName}');
VALUES ('${genTable.functionName}', ${parentId}, 1, '${genTable.ModuleName}/${genTable.BusinessName}', '${genTable.ModuleName}/${genTable.BusinessName}', 0, 0, 'C', '0', '0', '${replaceDto.PermissionPrefix}:list', 'icon1', GETDATE(), '${genTable.functionName}');
-- 按钮父菜单id
declare @menuId int = @@identity

View File

@ -93,7 +93,11 @@ $end
return SUCCESS(_${replaceDto.ModelTypeName}Service.Insert(model, it => new
{
${InsertColumn}
$foreach(item in genTable.Columns)
$if((item.IsInsert))
it.$item.CsharpField,
$end
${end}
}));
}
@ -116,7 +120,11 @@ ${InsertColumn}
var response = _${replaceDto.ModelTypeName}Service.Update(w => w.${replaceDto.PKName} == model.${replaceDto.PKName}, it => new ${replaceDto.ModelTypeName}()
{
//Update 字段映射
${UpdateColumn}
$foreach(item in genTable.Columns)
$if((item.IsEdit))
$item.CsharpField = model.$item.CsharpField,
$end
${end}
});
return SUCCESS(response);

View File

@ -10,7 +10,7 @@ namespace ${options.ModelsNamespace}.Models
/// @author ${replaceDto.Author}
/// @date ${replaceDto.AddTime}
/// </summary>
[SugarTable("${replaceDto.TableName}")]
[SugarTable("${genTable.TableName}")]
public class ${replaceDto.ModelTypeName}
{
$foreach(item in genTable.Columns)

View File

@ -0,0 +1,265 @@
<template>
<div class="app-container">
<!-- :model属性用于表单验证使用 比如下面的el-form-item 的 prop属性用于对表单值进行验证操作 -->
<el-form :model="queryParams" label-position="left" inline ref="queryForm" :label-width="labelWidth" v-show="showSearch" @submit.native.prevent>
${vueQueryFormHtml}
<el-row class="mb8" style="text-align:center">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-row>
</el-form>
<!-- 工具区域 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" v-hasPermi="['${replaceDto.PermissionPrefix}:add']" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" :disabled="single" v-hasPermi="['${replaceDto.PermissionPrefix}:update']" plain icon="el-icon-edit" size="mini" @click="handleUpdate">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" :disabled="multiple" v-hasPermi="['${replaceDto.PermissionPrefix}:delete']" plain icon="el-icon-delete" size="mini" @click="handleDelete">删除</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 数据区域 -->
<el-table :data="dataList" ref="table" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" />
${VueViewListContent}
<el-table-column label="操作" align="center" width="200">
<template slot-scope="scope">
<el-button v-hasPermi="['${replaceDto.PermissionPrefix}:update']" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">编辑</el-button>
<el-popconfirm title="确定删除吗?" @confirm="handleDelete(scope.row)" style="margin-left:10px">
<el-button slot="reference" v-hasPermi="['${replaceDto.PermissionPrefix}:delete']" type="text" icon="el-icon-delete">删除</el-button>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<pagination class="mt10" background :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
<!-- 添加或修改菜单对话框 -->
<el-dialog :title="title" :lock-scroll="false" :visible.sync="open" >
<el-form ref="form" :model="form" :rules="rules" :label-width="formLabelWidth">
<el-row>
${VueViewFormContent}
</el-row>
</el-form>
<div slot="footer" class="dialog-footer" v-if="btnSubmitVisible">
<el-button @click="cancel">取 消</el-button>
<el-button type="primary" @click="submitForm">确 定</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
list${genTable.BusinessName},
add${genTable.BusinessName},
del${genTable.BusinessName},
update${genTable.BusinessName},
get${genTable.BusinessName}
} from '@/api/${genTable.ModuleName}/${lowerBusinessName}.js';
export default {
name: "${genTable.BusinessName}",
data() {
return {
labelWidth: "100px",
formLabelWidth:"100px",
// 选中${replaceDto.PKName}数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 遮罩层
loading: true,
// 显示搜索条件
showSearch: true,
// 查询参数
queryParams: {},
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 表单参数
form: {},
// 时间范围数组
timeRange: [],
$foreach(item in genTable.Columns)
$if((item.HtmlType == "radio" || item.HtmlType == "select"))
// ${item.ColumnComment}选项列表
${item.CsharpField2}Options: [],
$end
$end
$if(replaceDto.UploadFile == 1)
//文件上传地址
uploadUrl: process.env.VUE_APP_BASE_API + "upload/SaveFile",
$end
// 数据列表
dataList: [],
// 总记录数
total: 0,
// 提交按钮是否显示
btnSubmitVisible: true,
// 表单校验
rules: {
${VueViewEditFormRuleContent}
},
};
},
mounted() {
// 列表数据查询
this.getList();
$foreach(item in genTable.Columns)
$if((item.HtmlType == "radio" || item.HtmlType == "select") && item.DictType != "")
this.getDicts("${item.DictType}").then((response) => {
this.${item.CsharpField2}Options = response.data;
})
$end
$end
},
methods: {
// 查询数据
getList() {
console.log(JSON.stringify(this.queryParams));
list${genTable.BusinessName}(this.addDateRange(this.queryParams, this.timeRange)).then(res => {
if (res.code == 200) {
this.dataList = res.data.result;
this.total = res.data.totalNum;
}
})
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 重置数据表单
reset() {
this.form = {
$foreach(item in genTable.Columns)
$if((item.IsEdit || item.IsInsert))
$item.ColumnName: undefined,
$end
$end
};
this.resetForm("form");
},
/** 重置查询操作 */
resetQuery() {
this.timeRange = [];
this.resetForm("queryForm");
this.queryParams = {
pageNum: 1,
pageSize: 20,
//TODO 重置字段
};
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.${replaceDto.PKName});
this.single = selection.length != 1
this.multiple = !selection.length;
},
/** 搜索按钮操作 */
handleQuery() {
this.getList();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加";
},
/** 删除按钮操作 */
handleDelete(row) {
const Ids = row.${replaceDto.PKName} || this.ids;
del${genTable.BusinessName}(Ids).then((res) => {
this.msgSuccess("删除成功");
this.handleQuery();
});
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const ${replaceDto.PKName} = row.${replaceDto.PKName} || this.ids;
get${genTable.BusinessName}(${replaceDto.PKName}).then((res) => {
if (res.code == 200) {
this.form = res.data;
this.open = true;
this.title = "修改数据";
}
});
},
$if(replaceDto.UploadFile == 1)
//文件上传前判断方法
beforeFileUpload(file) {
const isJPG = file.type === "image/jpeg";
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isJPG) {
this.msgError("上传图片只能是 JPG 格式!");
}
if (!isLt2M) {
this.msgError("上传图片大小不能超过 2MB!");
}
return isJPG && isLt2M;
},
$end
$foreach(item in genTable.Columns)
$if((item.HtmlType == "imageUpload" || item.HtmlType == "fileUpload"))
//${item.ColumnComment}上传成功方法
handleUpload${item.CsharpField}Success(res, file) {
this.form.$item.ColumnName = res.data;
// this.form.$item.ColumnName = URL.createObjectURL(file.raw);
// this.${refs}refs.upload.clearFiles();
},
$elseif((item.HtmlType == "radio" || item.HtmlType == "select") && item.DictType != "")
// ${item.ColumnComment}字典翻译
${item.ColumnName}Format(row, column) {
return this.selectDictLabel(this.${item.ColumnName}Options, row.${item.ColumnName});
},
$end
$end
/** 提交按钮 */
submitForm: function () {
this.${refs}refs["form"].validate((valid) => {
if (valid) {
console.log(JSON.stringify(this.form));
if (this.form.${replaceDto.PKName} != undefined || this.title === "修改数据") {
update${genTable.BusinessName}(this.form).then((res) => {
if (!res.data) {
this.msgError("修改失败");
return;
}
this.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
add${genTable.BusinessName}(this.form).then((res) => {
if (!res.data) {
this.msgError("新增失败");
return;
}
this.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
},
};
</script>
<style scoped>
.table-td-thumb {
width: 80px;
}
</style>

View File

@ -4,7 +4,7 @@
* ${genTable.functionName}分页查询
* @param {查询条件} data
*/
export function list${replaceDto.ModelTypeName}(query) {
export function list${genTable.BusinessName}(query) {
return request({
url: '${genTable.ModuleName}/${replaceDto.ModelTypeName}/list',
method: 'get',
@ -16,7 +16,7 @@ export function list${replaceDto.ModelTypeName}(query) {
* 新增${genTable.functionName}
* @param data
*/
export function add${replaceDto.ModelTypeName}(data) {
export function add${genTable.BusinessName}(data) {
return request({
url: '${genTable.ModuleName}/${replaceDto.ModelTypeName}',
method: 'post',
@ -28,7 +28,7 @@ export function add${replaceDto.ModelTypeName}(data) {
* 修改${genTable.functionName}
* @param data
*/
export function update${replaceDto.ModelTypeName}(data) {
export function update${genTable.BusinessName}(data) {
return request({
url: '${genTable.ModuleName}/${replaceDto.ModelTypeName}',
method: 'PUT',
@ -40,7 +40,7 @@ export function update${replaceDto.ModelTypeName}(data) {
* 获取${genTable.functionName}详情
* @param {Id}
*/
export function get${replaceDto.ModelTypeName}(id) {
export function get${genTable.BusinessName}(id) {
return request({
url: '${genTable.ModuleName}/${replaceDto.ModelTypeName}/' + id,
method: 'get'
@ -51,7 +51,7 @@ export function get${replaceDto.ModelTypeName}(id) {
* 删除${genTable.functionName}
* @param {主键} pid
*/
export function del${replaceDto.ModelTypeName}(pid) {
export function del${genTable.BusinessName}(pid) {
return request({
url: '${genTable.ModuleName}/${replaceDto.ModelTypeName}/' + pid,
method: 'delete'

View File

@ -42,39 +42,6 @@ namespace ZR.CodeGenerator
#region vue
/// <summary>
/// 生成vuejs模板目前只有上传文件方法
/// </summary>
/// <param name="dbFieldInfo"></param>
/// <param name="replaceDto"></param>
/// <returns></returns>
public static void TplVueJsMethod(GenTableColumn dbFieldInfo, ReplaceDto replaceDto)
{
string columnName = dbFieldInfo.ColumnName;
var sb = new StringBuilder();
if (dbFieldInfo.HtmlType.Equals(GenConstants.HTML_IMAGE_UPLOAD))
{
sb.AppendLine($" //文件上传成功方法");
sb.AppendLine($" handleUpload{dbFieldInfo.CsharpField}Success(res, file) {{");
sb.AppendLine($" this.form.{columnName} = res.data;");
sb.AppendLine($" // this.form.{columnName} = URL.createObjectURL(file.raw);");
sb.AppendLine($" // this.$refs.upload.clearFiles();");
sb.AppendLine($" }},");
replaceDto.VueBeforeUpload = TplJsBeforeUpload();
replaceDto.VueUploadUrl = TplJsUploadUrl();
}
//有下拉框选项初列表查询数据
if ((dbFieldInfo.HtmlType == GenConstants.HTML_SELECT || dbFieldInfo.HtmlType == GenConstants.HTML_RADIO) && !string.IsNullOrEmpty(dbFieldInfo.DictType))
{
sb.AppendLine(@$" // {dbFieldInfo.ColumnComment}字典翻译");
sb.AppendLine($" {columnName}Format(row, column) {{");
sb.AppendLine(@$" return this.selectDictLabel(this.{columnName}Options, row.{columnName});");
sb.AppendLine(@" },");
}
replaceDto.VueJsMethod += sb.ToString();
}
/// <summary>
/// Vue rules
/// </summary>
@ -264,15 +231,6 @@ namespace ZR.CodeGenerator
sb.AppendLine(" </template>");
sb.AppendLine(" </el-table-column>");
}
//else if (dbFieldInfo.HtmlType.Equals(GenConstants.HTML_RADIO))
//{
// vueViewListContent += $" <el-table-column prop=\"{columnName}\" label=\"{label}\" width=\"120\" >\r\n";
// vueViewListContent += " <template slot-scope=\"scope\">\r\n";
// vueViewListContent += $" <el-tag :type=\"scope.row.{columnName} === true ? 'success' : 'info'\" disable-transitions >";
// vueViewListContent += $" {{scope.row.{columnName}===true?'启用':'禁用'}} </el-tag>\r\n";
// vueViewListContent += " </template>\r\n";
// vueViewListContent += " </el-table-column>\r\n";
//}
else if (dbFieldInfo.IsList)
{
sb.AppendLine($" <el-table-column prop=\"{columnName}\" label=\"{label}\" align=\"center\" {showToolTip}{formatter}/>");
@ -280,36 +238,6 @@ namespace ZR.CodeGenerator
return sb.ToString();
}
/// <summary>
/// 文件上传前方法判断
/// </summary>
/// <returns></returns>
public static string TplJsBeforeUpload()
{
StringBuilder sb = new StringBuilder();
sb.AppendLine(@" //文件上传前判断方法");
sb.AppendLine(@" beforeFileUpload(file) {");
sb.AppendLine(@" const isJPG = file.type === ""image/jpeg"";");
sb.AppendLine(@" const isLt2M = file.size / 1024 / 1024 < 2;");
sb.AppendLine(@" if (!isJPG) {");
sb.AppendLine(@" this.msgError(""上传图片只能是 JPG 格式!"");");
sb.AppendLine(@" }");
sb.AppendLine(@" if (!isLt2M) {");
sb.AppendLine(@" this.msgError(""上传图片大小不能超过 2MB!"");");
sb.AppendLine(@" }");
sb.AppendLine(@" return isJPG && isLt2M;");
sb.AppendLine(@" },");
return sb.ToString();
}
public static string TplJsUploadUrl()
{
StringBuilder sb = new StringBuilder();
sb.AppendLine(@" //文件上传前判断方法");
sb.AppendLine(@" uploadUrl: process.env.VUE_APP_BASE_API + ""upload/SaveFile"",");
return sb.ToString();
}
#endregion
public static string QueryExp(string propertyName, string queryType)

View File

@ -5,7 +5,6 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using ZR.CodeGenerator.Model;
using ZR.Model.System.Generate;
@ -51,59 +50,33 @@ namespace ZR.CodeGenerator
string PKType = "int";
ReplaceDto replaceDto = new();
replaceDto.ModelTypeName = dto.GenTable.ClassName;//表名对应C# 实体类名
replaceDto.TableName = dto.GenTable.TableName;//表名
replaceDto.PermissionPrefix = $"{dto.GenTable.ModuleName}:{dto.GenTable.ClassName.ToLower()}";//权限
replaceDto.Author = dto.GenTable.FunctionAuthor;
replaceDto.ViewsFileName = FirstLowerCase(replaceDto.ModelTypeName);
StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
//StringBuilder sb1 = new StringBuilder();
//StringBuilder sb2 = new StringBuilder();
//循环表字段信息
foreach (GenTableColumn dbFieldInfo in dto.GenTable.Columns)
{
string columnName = dbFieldInfo.ColumnName;
if (dbFieldInfo.IsInsert || dbFieldInfo.IsEdit)
{
replaceDto.VueViewFormResetHtml += $" {columnName}: undefined,\r\n";
}
if (dbFieldInfo.IsPk || dbFieldInfo.IsIncrement)
{
PKName = dbFieldInfo.CsharpField;
PKType = dbFieldInfo.CsharpType;
}
//编辑字段
if (dbFieldInfo.IsEdit)
if (dbFieldInfo.HtmlType.Equals(GenConstants.HTML_IMAGE_UPLOAD))
{
replaceDto.UpdateColumn += $" {dbFieldInfo.CsharpField} = model.{dbFieldInfo.CsharpField}, \n";
replaceDto.UploadFile = 1;
}
//新增字段
if (dbFieldInfo.IsInsert)
{
replaceDto.InsertColumn += $" it.{dbFieldInfo.CsharpField}, \n";
}
if ((dbFieldInfo.HtmlType == GenConstants.HTML_SELECT || dbFieldInfo.HtmlType == GenConstants.HTML_RADIO) && !string.IsNullOrEmpty(dbFieldInfo.DictType))
{
sb1.AppendLine($" // {dbFieldInfo.ColumnComment}选项列表");
sb1.AppendLine($" {FirstLowerCase(dbFieldInfo.CsharpField)}Options: [],");
sb2.AppendLine($" this.getDicts(\"{dbFieldInfo.DictType}\").then((response) => {{");
sb2.AppendLine($" this.{FirstLowerCase(dbFieldInfo.CsharpField)}Options = response.data;");
sb2.AppendLine(" })");
}
CodeGenerateTemplate.GetQueryDtoProperty(dbFieldInfo, replaceDto);
CodeGenerateTemplate.TplVueJsMethod(dbFieldInfo, replaceDto);
replaceDto.VueViewFormHtml += CodeGenerateTemplate.TplVueFormContent(dbFieldInfo);
replaceDto.VueViewListHtml += CodeGenerateTemplate.TplTableColumn(dbFieldInfo);
replaceDto.VueViewEditFormRuleContent += CodeGenerateTemplate.TplFormRules(dbFieldInfo);
replaceDto.VueQueryFormHtml += CodeGenerateTemplate.TplQueryFormHtml(dbFieldInfo);
}
replaceDto.VueDataContent = sb1.ToString();
replaceDto.MountedMethod = sb2.ToString();
replaceDto.VueJsMethod += replaceDto.VueBeforeUpload;
replaceDto.VueDataContent += replaceDto.VueUploadUrl;
replaceDto.PKName = PKName;
replaceDto.PKType = PKType;
@ -112,7 +85,6 @@ namespace ZR.CodeGenerator
GenerateModels(replaceDto, dto);
GenerateInputDto(replaceDto, dto);
GenerateRepository(replaceDto, dto);
GenerateIService(replaceDto, dto);
GenerateService(replaceDto, dto);
GenerateControllers(replaceDto, dto);
GenerateVueViews(replaceDto, dto);
@ -171,7 +143,6 @@ namespace ZR.CodeGenerator
private static void GenerateRepository(ReplaceDto replaceDto, GenerateDto generateDto)
{
var fullPath = Path.Combine(generateDto.GenCodePath, _option.RepositoriesNamespace, "Repositories", $"{replaceDto.ModelTypeName}Repository.cs");
var tpl = FileHelper.ReadJtTemplate("TplRepository.txt");
var result = tpl.Render();
@ -181,20 +152,6 @@ namespace ZR.CodeGenerator
#endregion
#region Service
/// <summary>
/// 生成IService文件
/// </summary>
/// <param name="generateDto"></param>
/// <param name="replaceDto">替换实体</param>
private static void GenerateIService(ReplaceDto replaceDto, GenerateDto generateDto)
{
var fullPath = Path.Combine(generateDto.GenCodePath, _option.IServicsNamespace, "Business", "IBusService", $"I{replaceDto.ModelTypeName}Service.cs");
var tpl = FileHelper.ReadJtTemplate("IServiceTemplate.txt");
var result = tpl.Render();
generateDto.GenCodes.Add(new GenCode(4, "IService", fullPath, result));
}
/// <summary>
/// 生成Service文件
@ -202,11 +159,16 @@ namespace ZR.CodeGenerator
private static void GenerateService(ReplaceDto replaceDto, GenerateDto generateDto)
{
var fullPath = Path.Combine(generateDto.GenCodePath, _option.ServicesNamespace, "Business", $"{replaceDto.ModelTypeName}Service.cs");
var tpl = FileHelper.ReadJtTemplate("ServiceTemplate.txt");
var tpl = FileHelper.ReadJtTemplate("TplService.txt");
var result = tpl.Render();
generateDto.GenCodes.Add(new GenCode(4, "Service", fullPath, result));
var fullPath2 = Path.Combine(generateDto.GenCodePath, _option.IServicsNamespace, "Business", "IBusService", $"I{replaceDto.ModelTypeName}Service.cs");
var tpl2 = FileHelper.ReadJtTemplate("TplIService.txt");
var result2 = tpl2.Render();
generateDto.GenCodes.Add(new GenCode(4, "IService", fullPath2, result2));
}
#endregion
@ -215,45 +177,12 @@ namespace ZR.CodeGenerator
/// <summary>
/// 生成控制器ApiControllers文件
/// </summary>
//private static void GenerateControllers(ReplaceDto replaceDto, GenerateDto generateDto)
//{
// var fullPath = Path.Combine(generateDto.GenCodePath, _option.ApiControllerNamespace, "Controllers", generateDto.GenTable.ModuleName, $"{replaceDto.ModelTypeName}Controller.cs");
// var content = FileHelper.ReadTemplate("ControllersTemplate.txt")
// .Replace("{ApiControllerNamespace}", _option.ApiControllerNamespace)
// .Replace("{ServicesNamespace}", _option.ServicesNamespace)
// .Replace("{ModelsNamespace}", _option.ModelsNamespace)
// .Replace("{FunctionName}", generateDto.GenTable.FunctionName)
// .Replace("{ModelName}", replaceDto.ModelTypeName)
// .Replace("{Permission}", replaceDto.Permission)
// .Replace("{PrimaryKey}", replaceDto.PKName)
// .Replace("{ModuleName}", generateDto.GenTable.ModuleName)
// .Replace("{PKCsharpType}", replaceDto.PKType)
// .Replace("{Author}", replaceDto.Author)
// .Replace("{DateTime}", replaceDto.AddTime);
// if (replaceDto.UpdateColumn != null)
// {
// content = content.Replace("{UpdateColumn}", replaceDto.UpdateColumn.TrimEnd('\n'));
// }
// if (replaceDto.InsertColumn != null)
// {
// content = content.Replace("{InsertColumn}", replaceDto.InsertColumn.TrimEnd('\n'));
// }
// if (replaceDto.QueryCondition != null)
// {
// content = content.Replace("{QueryCondition}", replaceDto.QueryCondition);
// }
// generateDto.GenCodes.Add(new GenCode(5, "控制器", fullPath, content));
//}
private static void GenerateControllers(ReplaceDto replaceDto, GenerateDto generateDto)
{
var fullPath = Path.Combine(generateDto.GenCodePath, _option.ApiControllerNamespace, "Controllers", generateDto.GenTable.ModuleName, $"{replaceDto.ModelTypeName}Controller.cs");
var tpl = FileHelper.ReadJtTemplate("TplControllers.txt");
tpl.Set("QueryCondition", replaceDto.QueryCondition);
tpl.Set("InsertColumn", replaceDto.InsertColumn.TrimEnd('\n'));
tpl.Set("UpdateColumn", replaceDto.UpdateColumn.TrimEnd('\n'));
var result = tpl.Render();
generateDto.GenCodes.Add(new GenCode(5, "Controller", fullPath, result));
}
@ -264,24 +193,17 @@ namespace ZR.CodeGenerator
/// 6、生成Vue页面
private static void GenerateVueViews(ReplaceDto replaceDto, GenerateDto generateDto)
{
var fullPath = Path.Combine(generateDto.GenCodePath, "ZR.Vue", "src", "views", generateDto.GenTable.ModuleName, replaceDto.ViewsFileName, "index.vue");
var fullPath = Path.Combine(generateDto.GenCodePath, "ZR.Vue", "src", "views", generateDto.GenTable.ModuleName, $"{generateDto.GenTable.BusinessName}.vue");
var content = FileHelper.ReadTemplate("VueTemplate.txt")
.Replace("{fileClassName}", replaceDto.ViewsFileName)
.Replace("{VueViewListContent}", replaceDto.VueViewListHtml)//查询 table列
.Replace("{VueViewFormContent}", replaceDto.VueViewFormHtml)//添加、修改表单
.Replace("{ModelTypeName}", replaceDto.ModelTypeName)
.Replace("{Permission}", replaceDto.PermissionPrefix)
.Replace("{VueViewFormResetHtml}", replaceDto.VueViewFormResetHtml)
.Replace("{vueJsMethod}", replaceDto.VueJsMethod)
.Replace("{vueQueryFormHtml}", replaceDto.VueQueryFormHtml)
.Replace("{VueDataContent}", replaceDto.VueDataContent)
.Replace("{PrimaryKey}", FirstLowerCase(replaceDto.PKName))
.Replace("{MountedMethod}", replaceDto.MountedMethod)
.Replace("{ModuleName}", generateDto.GenTable.ModuleName)
.Replace("{VueViewEditFormRuleContent}", replaceDto.VueViewEditFormRuleContent);//添加、修改表单验证规则
var tpl = FileHelper.ReadJtTemplate("TplVue.txt");
tpl.Set("vueQueryFormHtml", replaceDto.VueQueryFormHtml);
tpl.Set("VueViewEditFormRuleContent", replaceDto.VueViewEditFormRuleContent);//添加、修改表单验证规则
tpl.Set("VueViewFormContent", replaceDto.VueViewFormHtml);//添加、修改表单
tpl.Set("VueViewListContent", replaceDto.VueViewListHtml);//查询 table列
tpl.Set("lowerBusinessName", FirstLowerCase(generateDto.GenTable.BusinessName));
generateDto.GenCodes.Add(new GenCode(6, "index.vue", fullPath, content));
var result = tpl.Render();
generateDto.GenCodes.Add(new GenCode(6, "index.vue", fullPath, result));
}
/// <summary>
/// 7、生成vue页面api
@ -291,9 +213,8 @@ namespace ZR.CodeGenerator
/// <returns></returns>
public static void GenerateVueJs(ReplaceDto replaceDto, GenerateDto generateDto)
{
string fullPath = Path.Combine(generateDto.GenCodePath, "ZR.Vue", "src", "api", generateDto.GenTable.ModuleName, replaceDto.ViewsFileName + ".js");
var tpl = FileHelper.ReadJtTemplate("VueJsTemplate.txt");
string fullPath = Path.Combine(generateDto.GenCodePath, "ZR.Vue", "src", "api", generateDto.GenTable.ModuleName, FirstLowerCase(generateDto.GenTable.BusinessName) + ".js");
var tpl = FileHelper.ReadJtTemplate("TplVueApi.txt");
var result = tpl.Render();
generateDto.GenCodes.Add(new GenCode(7, "api.js", fullPath, result));
@ -301,11 +222,11 @@ namespace ZR.CodeGenerator
#endregion
#region 8SQL
#region SQL
public static void GenerateSql(ReplaceDto replaceDto, GenerateDto generateDto)
{
string fullPath = Path.Combine(generateDto.GenCodePath, replaceDto.ViewsFileName + ".sql");
string fullPath = Path.Combine(generateDto.GenCodePath, generateDto.GenTable.BusinessName + ".sql");
var tempName = "";
switch (generateDto.DbType)
@ -363,7 +284,7 @@ namespace ZR.CodeGenerator
{
int lastIndex = tableName.LastIndexOf("_");
int nameLength = tableName.Length;
string businessName = tableName.Substring(nameLength - lastIndex + 1);
string businessName = tableName[(nameLength - lastIndex + 1)..];
return businessName.ToLower();
}
@ -512,7 +433,7 @@ namespace ZR.CodeGenerator
options.TagFlag = '$';
options.OutMode = OutMode.Auto;
//options.DisableeLogogram = true;//禁用简写
options.Data.Set("${flag}", "$");//特殊标签替换
options.Data.Set("refs", "$");//特殊标签替换
options.Data.Set("replaceDto", replaceDto);
options.Data.Set("options", dto.GenOptions);
options.Data.Set("genTable", dto.GenTable);

View File

@ -1,9 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ZR.Model.System.Generate;
namespace ZR.CodeGenerator.Model
{
@ -25,19 +20,6 @@ namespace ZR.CodeGenerator.Model
/// C#类名
/// </summary>
public string ModelTypeName { get; set; }
/// <summary>
/// 数据库表名
/// </summary>
public string TableName { get; set; }
/// <summary>
/// 修改列
/// </summary>
public string UpdateColumn { get; set; }
/// <summary>
/// 插入列
/// </summary>
public string InsertColumn { get; set; }
//vue、api
public string VueViewFormResetHtml { get; set; }
/// <summary>
@ -52,10 +34,7 @@ namespace ZR.CodeGenerator.Model
/// 前端搜索表单html
/// </summary>
public string VueQueryFormHtml { get; set; }
/// <summary>
/// vue js方法
/// </summary>
public string VueJsMethod { get; set; }
/// <summary>
/// vue 添加、编辑表单规则
/// </summary>
@ -64,32 +43,12 @@ namespace ZR.CodeGenerator.Model
/// 查询条件
/// </summary>
public string QueryCondition { get; set; } = "";
///// <summary>
///// 查询属性
///// </summary>
//public string QueryProperty { get; set; }
/// <summary>
/// vue data内容
/// </summary>
public string VueDataContent { get; set; }
/// <summary>
/// vue mounted 方法
/// </summary>
public string MountedMethod { get; set; }
/// <summary>
/// views、js文件名
/// </summary>
public string ViewsFileName { get; set; }
/// <summary>
/// 上传前js
/// </summary>
public string VueBeforeUpload { get; set; }
/// <summary>
/// 上传URL data
/// </summary>
public string VueUploadUrl { get; set; }
//public bool UploadImage{ get; set; }
//public string VueUploadUrl { get; set; }
public int UploadFile { get; set; } = 0;
public string Author { get; set; }
public string AddTime { get; set; } = DateTime.Now.ToString("yyyy-MM-dd");
}

View File

@ -14,6 +14,7 @@ namespace ZR.Common
public static long[] SpitLongArrary(string str)
{
if (string.IsNullOrEmpty(str)) { return Array.Empty<long>(); }
str = str.TrimStart(',').TrimEnd(',');
string[] strIds = str.Split(',', (char)StringSplitOptions.RemoveEmptyEntries);
long[] infoIdss = Array.ConvertAll(strIds, s => long.Parse(s));
return infoIdss;

View File

@ -25,6 +25,14 @@ namespace ZR.Model.System.Generate
public string ColumnType { get; set; }
public string CsharpType { get; set; }
public string CsharpField { get; set; }
[SugarColumn(IsIgnore = true)]
public string CsharpField2
{
get
{
return CsharpField.Substring(0, 1).ToLower() + CsharpField[1..];
}
}
/// <summary>
/// 是否主键1是
/// </summary>
@ -61,7 +69,7 @@ namespace ZR.Model.System.Generate
/// <summary>
/// 字典类型
/// </summary>
public string DictType { get; set; }
public string DictType { get; set; } = "";
#region
[SugarColumn(IsIgnore = true)]
@ -70,7 +78,7 @@ namespace ZR.Model.System.Generate
get
{
string[] arr = new string[] { "int", "long" };
return (!IsRequired &&(arr.Any(f => f.Contains(CsharpType))) || typeof(DateTime).Name == CsharpType) ? "?" : "";
return (!IsRequired && (arr.Any(f => f.Contains(CsharpType))) || typeof(DateTime).Name == CsharpType) ? "?" : "";
}
}
/// <summary>