优化代码生成

更换代码生成上级菜单选择组件
代码生成新增前端路径配置
This commit is contained in:
不做码农 2022-05-26 20:48:49 +08:00
commit 96a0ce6620
8 changed files with 107 additions and 229 deletions

View File

@ -77,16 +77,24 @@ namespace Infrastructure
var driv = DriveInfo.GetDrives();
foreach (var item in driv)
{
var obj = new DiskInfo()
try
{
DiskName = item.Name,
TypeName = item.DriveType.ToString(),
TotalSize = item.TotalSize / 1024 / 1024 / 1024,
AvailableFreeSpace = item.AvailableFreeSpace / 1024 / 1024 / 1024,
};
obj.Used = obj.TotalSize - obj.AvailableFreeSpace;
obj.AvailablePercent = decimal.Ceiling(obj.Used / (decimal)obj.TotalSize * 100);
diskInfos.Add(obj);
var obj = new DiskInfo()
{
DiskName = item.Name,
TypeName = item.DriveType.ToString(),
TotalSize = item.TotalSize / 1024 / 1024 / 1024,
AvailableFreeSpace = item.AvailableFreeSpace / 1024 / 1024 / 1024,
};
obj.Used = obj.TotalSize - obj.AvailableFreeSpace;
obj.AvailablePercent = decimal.Ceiling(obj.Used / (decimal)obj.TotalSize * 100);
diskInfos.Add(obj);
}
catch (Exception ex)
{
Console.WriteLine("获取磁盘信息出错了" + ex.Message);
continue;
}
}
}

View File

@ -34,8 +34,9 @@
"conn": "server=LAPTOP-STKF2M8H\\SQLEXPRESS;user=zr;pwd=abc;database=ZrAdmin;Trusted_Connection=SSPI",
"dbType": 1, //MySql = 0, SqlServer = 1
"autoPre": true, //
"author": "zr",
"tablePrefix": "sys_" //"表前缀(生成类名不会包含表前缀,多个用逗号分隔)",
"author": "admin",
"tablePrefix": "sys_", //"表前缀(生成类名不会包含表前缀,多个用逗号分隔)",
"vuePath": "" //egD:\Work\ZRAdmin-Vue3
},
//
"MailOptions": {

View File

@ -7,7 +7,7 @@
* @LastEditTime: (${replaceDto.AddTime})
-->
<template>
<div class="app-container">
<div>
<!-- :model属性用于表单验证使用 比如下面的el-form-item 的 prop属性用于对表单值进行验证操作 -->
<el-form :model="queryParams" label-position="right" inline ref="queryRef" v-show="showSearch" @submit.prevent>
$foreach(column in genTable.Columns)
@ -17,12 +17,12 @@ $set(numLabel = "")
$if(column.IsQuery == true)
$set(columnName = column.CsharpFieldFl)
$if(column.ColumnComment != "")
$set(labelName = column.ColumnComment)
$set(labelName = column.ColumnComment)
$else
$set(labelName = column.CsharpFieldFl)
$set(labelName = column.CsharpFieldFl)
$end
$if(column.CsharpType == "int" || column.CsharpType == "long")
$set(numLabel = ".number")
$set(numLabel = ".number")
$end
$if(column.HtmlType == "datetime")
<el-form-item label="$labelName">
@ -35,8 +35,7 @@ $if(column.HtmlType == "datetime")
end-placeholder="结束日期"
placeholder="请选择$labelName"
value-format="YYYY-MM-DD HH:mm:ss"
:shortcuts="dateOptions"
>
:shortcuts="dateOptions">
</el-date-picker>
</el-form-item>
$elseif(column.HtmlType == "select" || column.HtmlType == "radio")
@ -45,6 +44,12 @@ $elseif(column.HtmlType == "select" || column.HtmlType == "radio")
<el-option v-for="item in $if(column.DictType != "") ${column.DictType} $else ${column.CsharpFieldFl}Options$end" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue"></el-option>
</el-select>
</el-form-item>
$elseif(column.HtmlType == "radio")
<el-form-item label="${labelName}" prop="${columnName}">
<el-radio-group v-model="queryParams.${columnName}">
<el-radio v-for="item in $if(column.DictType != "") ${column.DictType} $else ${column.CsharpFieldFl}Options$end" :key="item.dictValue" :label="item.dictValue">{{item.dictLabel}}</el-radio>
</el-radio-group>
</el-form-item>
$else
<el-form-item label="${labelName}" prop="${columnName}">
<el-input v-model${numLabel}="queryParams.${columnName}" placeholder="请输入${labelName}" />
@ -112,7 +117,11 @@ $if(column.HtmlType == "customInput" && column.IsPk == false)
<el-table-column prop="${columnName}" label="${labelName}" width="90" sortable align="center">
<template #default="scope">
<span v-show="editIndex != scope.$${index}index" @click="editCurrRow(scope.$${index}index)">{{scope.row.${columnName}}}</span>
<el-input :id="scope.$${index}index" v-show="(editIndex == scope.$${index}index)" v-model="scope.row.${columnName}" @blur="handleChangeSort(scope.row)"></el-input>
<el-input
:ref="setColumnsRef"
v-show="(editIndex == scope.$${index}index)"
v-model="scope.row.${columnName}"
@blur="handleChangeSort(scope.row)"></el-input>
</template>
</el-table-column>
$elseif(column.HtmlType == "imageUpload")
@ -138,15 +147,16 @@ $else
$end
$end
$end
<el-table-column label="操作" align="center" width="140">
<el-table-column label="操作" align="center" width="160">
<template #default="scope">
$if(replaceDto.ShowBtnView)
<el-button type="primary" icon="view" @click="handlePreview(scope.row)"></el-button>
$end
$if(replaceDto.ShowBtnEdit)
<el-button v-hasPermi="['${replaceDto.PermissionPrefix}:edit']" type="success" icon="edit" title="编辑"
@click="handleUpdate(scope.row)"></el-button>
<el-button v-hasPermi="['${replaceDto.PermissionPrefix}:edit']" type="success" icon="edit" title="编辑" @click="handleUpdate(scope.row)"></el-button>
$end
$if(replaceDto.ShowBtnDelete)
<el-button v-hasPermi="['${replaceDto.PermissionPrefix}:delete']" type="danger" icon="delete" title="删除"
@click="handleDelete(scope.row)"></el-button>
<el-button v-hasPermi="['${replaceDto.PermissionPrefix}:delete']" type="danger" icon="delete" title="删除" @click="handleDelete(scope.row)"></el-button>
$end
</template>
</el-table-column>
@ -181,7 +191,7 @@ $end
</el-form-item>
</el-col>
$else
$if(column.HtmlType == "inputNumber")
$if(column.HtmlType == "inputNumber" || column.HtmlType == "customInput")
<el-col :lg="${options.ColNum}">
<el-form-item label="${labelName}" prop="${columnName}">
<el-input-number v-model.number="form.${columnName}" controls-position="right" placeholder="请输入${labelName}" ${column.DisabledStr}/>
@ -252,7 +262,7 @@ $end
$end
</el-row>
</el-form>
<template #footer>
<template #footer v-if="opertype != 3">
<el-button text @click="cancel">{{ ${t}t('btn.cancel') }}</el-button>
<el-button type="primary" @click="submitForm">{{ ${t}t('btn.submit') }}</el-button>
</template>
@ -325,12 +335,19 @@ const dateRange${item.CsharpField} = ref([])
$elseif(item.HtmlType == "customInput")
// ******************自定义编辑 start **********************
const editIndex = ref(-1)
// 动态ref设置值
const columnRefs = ref([])
const setColumnsRef = (el) => {
if (el) {
columnRefs.value.push(el)
}
}
// 显示编辑排序
function editCurrRow(rowId) {
editIndex.value = rowId
function editCurrRow(index) {
editIndex.value = index
setTimeout(() => {
document.getElementById(rowId).focus()
columnRefs.value[index].focus()
}, 100)
}
// 保存排序
@ -393,6 +410,16 @@ function cancel(){
// 重置表单
function reset() {
form.value = {
$foreach(item in genTable.Columns)
$if((item.IsEdit || item.IsInsert))
$item.CsharpFieldFl: undefined,
$end
$if((item.HtmlType == "checkbox"))
${item.CsharpFieldFl}Checked: [],
$end
$end
};
proxy.resetForm("formRef")
}
@ -501,7 +528,18 @@ function handleExport() {
})
}
$end
$if(replaceDto.ShowBtnView)
/**
* 预览
* @param {*} row
*/
function handlePreview(row) {
open.value = true
title.value = '预览'
opertype.value = 3
form.value = row
}
$end
// 多选框选中数据
function handleSelectionChange(selection) {
ids.value = selection.map((item) => item.${replaceDto.FistLowerPk});

View File

@ -10,161 +10,6 @@ namespace ZR.CodeGenerator
/// </summary>
public class CodeGenerateTemplate
{
#region vue
///// <summary>
///// Vue 添加修改表单
///// </summary>
///// <param name="dbFieldInfo"></param>
///// <returns></returns>
//public static string TplVueFormContent(GenTableColumn dbFieldInfo, GenTable genTable)
//{
// string columnName = dbFieldInfo.CsharpFieldFl;
// string labelName = CodeGeneratorTool.GetLabelName(dbFieldInfo.ColumnComment, columnName);
// string labelDisabled = dbFieldInfo.IsPk ? ":disabled=\"true\"" : "";
// StringBuilder sb = new();
// string value = CodeGeneratorTool.IsNumber(dbFieldInfo.CsharpType) ? "parseInt(item.dictValue)" : "item.dictValue";
// if (GenConstants.inputDtoNoField.Any(f => f.Contains(dbFieldInfo.CsharpField, StringComparison.OrdinalIgnoreCase)))
// {
// }
// else if (!dbFieldInfo.IsInsert && !dbFieldInfo.IsEdit)
// {
// sb.AppendLine(" <el-col :lg=\"12\" v-if=\"opertype == 2\">");
// sb.AppendLine($" <el-form-item label=\"{labelName}\">{{{{form.{columnName}}}}}</el-form-item>");
// sb.AppendLine(" </el-col>");
// }
// else if (genTable.TplCategory.Equals("tree", StringComparison.OrdinalIgnoreCase) && genTable.TreeParentCode != null && dbFieldInfo.CsharpField.Equals(genTable.TreeParentCode))
// {
// //树
// sb.AppendLine(@" <el-col :lg=""24"">");
// sb.AppendLine($@" <el-form-item label=""父级id"" prop=""{columnName}"">");
// sb.AppendLine($@" <treeselect v-model=""form.{columnName}"" :options=""dataList"" :normalizer=""normalizer"" :show-count=""true"" placeholder=""选择上级菜单"" />");
// sb.AppendLine(@" </el-form-item>");
// sb.AppendLine(@" </el-col>");
// }
// //主键、非自增要插入,不能编辑
// else if (dbFieldInfo.IsPk || dbFieldInfo.IsIncrement)
// {
// sb.AppendLine(" <el-col :lg=\"12\">");
// sb.AppendLine($" <el-form-item label=\"{labelName}\" prop=\"{columnName}\">");
// //主键非自增 显示input
// if (!dbFieldInfo.IsIncrement)
// {
// sb.AppendLine($" <el-input-number v-model.number=\"form.{columnName}\" controls-position=\"right\" placeholder=\"请输入{labelName}\" :disabled=\"title=='修改数据'\"/>");
// }
// else if (dbFieldInfo.IsIncrement) //只有是 自增 就显示label
// {
// sb.AppendLine($" <span v-html=\"form.{columnName}\"/>");
// }
// sb.AppendLine(" </el-form-item>");
// sb.AppendLine(" </el-col>");
// }
// else
// {
// if (dbFieldInfo.HtmlType == GenConstants.HTML_INPUT_NUMBER)
// {
// //数字框
// sb.AppendLine(" <el-col :lg=\"12\">");
// sb.AppendLine($" <el-form-item label=\"{labelName}\" prop=\"{columnName}\">");
// sb.AppendLine($" <el-input-number v-model.number=\"form.{columnName}\" controls-position=\"right\" placeholder=\"请输入{labelName}\" {labelDisabled}/>");
// sb.AppendLine(" </el-form-item>");
// sb.AppendLine(" </el-col>");
// }
// else if (dbFieldInfo.HtmlType == GenConstants.HTML_DATETIME)
// {
// //时间
// sb.AppendLine(" <el-col :lg=\"12\">");
// sb.AppendLine($" <el-form-item label=\"{labelName}\" prop=\"{columnName}\">");
// sb.AppendLine($" <el-date-picker v-model=\"form.{columnName}\" format=\"yyyy-MM-dd HH:mm:ss\" value-format=\"yyyy-MM-dd HH:mm:ss\" type=\"datetime\" placeholder=\"选择日期时间\"> </el-date-picker>");
// sb.AppendLine(" </el-form-item>");
// sb.AppendLine(" </el-col>");
// }
// else if (dbFieldInfo.HtmlType == GenConstants.HTML_IMAGE_UPLOAD)
// {
// //图片
// sb.AppendLine(" <el-col :lg=\"24\">");
// sb.AppendLine($" <el-form-item label=\"{labelName}\" prop=\"{columnName}\">");
// sb.AppendLine($@" <UploadImage v-model=""form.{columnName}"" column=""{columnName}"" @input=""handleUploadSuccess"" />");
// sb.AppendLine(" </el-form-item>");
// sb.AppendLine(" </el-col>");
// }
// else if (dbFieldInfo.HtmlType == GenConstants.HTML_FILE_UPLOAD)
// {
// //文件
// sb.AppendLine(" <el-col :lg=\"24\">");
// sb.AppendLine($" <el-form-item label=\"{labelName}\" prop=\"{columnName}\">");
// sb.AppendLine($@" <UploadFile v-model=""form.{columnName}"" column=""{columnName}"" @input=""handleUploadSuccess"" />");
// sb.AppendLine(" </el-form-item>");
// sb.AppendLine(" </el-col>");
// }
// else if (dbFieldInfo.HtmlType == GenConstants.HTML_RADIO)
// {
// //单选按钮
// sb.AppendLine(" <el-col :lg=\"12\">");
// sb.AppendLine($" <el-form-item label=\"{labelName}\" prop=\"{columnName}\">");
// sb.AppendLine($" <el-radio-group v-model=\"form.{columnName}\">");
// sb.AppendLine($" <el-radio v-for=\"item in {columnName}Options\" :key=\"item.dictValue\" :label=\"{value}\">{{{{item.dictLabel}}}}</el-radio>");
// sb.AppendLine(" </el-radio-group>");
// sb.AppendLine(" </el-form-item>");
// sb.AppendLine(" </el-col>");
// }
// else if (dbFieldInfo.HtmlType == GenConstants.HTML_TEXTAREA)
// {
// //文本域
// sb.AppendLine(" <el-col :lg=\"24\">");
// sb.AppendLine($" <el-form-item label=\"{ labelName}\" prop=\"{columnName}\">");
// sb.AppendLine($" <el-input type=\"textarea\" v-model=\"form.{columnName}\" placeholder=\"请输入{labelName}\"/>");
// sb.AppendLine(" </el-form-item>");
// sb.AppendLine(" </el-col>");
// }
// else if (dbFieldInfo.HtmlType == GenConstants.HTML_EDITOR)
// {
// //编辑器
// sb.AppendLine(" <el-col :lg=\"24\">");
// sb.AppendLine($" <el-form-item label=\"{labelName}\" prop=\"{columnName}\">");
// sb.AppendLine($" <editor v-model=\"form.{columnName}\" :min-height=\"200\" />");
// sb.AppendLine(" </el-form-item>");
// sb.AppendLine(" </el-col>");
// }
// else if (dbFieldInfo.HtmlType == GenConstants.HTML_SELECT)
// {
// //下拉框
// sb.AppendLine(" <el-col :lg=\"12\">");
// sb.AppendLine($" <el-form-item label=\"{labelName}\" prop=\"{columnName}\">");
// sb.AppendLine($" <el-select v-model=\"form.{columnName}\" placeholder=\"请选择{labelName}\"> ");
// sb.AppendLine($" <el-option v-for=\"item in {columnName}Options\" :key=\"item.dictValue\" :label=\"item.dictLabel\" :value=\"{value}\"></el-option>");
// sb.AppendLine(" </el-select>");
// sb.AppendLine(" </el-form-item>");
// sb.AppendLine(" </el-col>");
// }
// else if (dbFieldInfo.HtmlType == GenConstants.HTML_CHECKBOX)
// {
// //多选框
// sb.AppendLine(" <el-col :lg=\"24\">");
// sb.AppendLine($" <el-form-item label=\"{labelName}\" prop=\"{columnName}\">");
// sb.AppendLine($" <el-checkbox-group v-model=\"form.{columnName}Checked\"> ");
// sb.AppendLine($" <el-checkbox v-for=\"item in {columnName}Options\" :key=\"item.dictValue\" :label=\"item.dictValue\">{{{{item.dictLabel}}}}</el-checkbox>");
// sb.AppendLine(" </el-checkbox-group>");
// sb.AppendLine(" </el-form-item>");
// sb.AppendLine(" </el-col>");
// }
// else
// {
// string inputNumTxt = CodeGeneratorTool.IsNumber(dbFieldInfo.CsharpType) ? ".number" : "";
// sb.AppendLine(" <el-col :lg=\"12\">");
// sb.AppendLine($" <el-form-item label=\"{labelName}\" prop=\"{columnName}\">");
// sb.AppendLine($" <el-input v-model{inputNumTxt}=\"form.{columnName}\" placeholder=\"请输入{labelName}\" {labelDisabled}/>");
// sb.AppendLine(" </el-form-item>");
// sb.AppendLine(" </el-col>");
// }
// }
// return sb.ToString();
//}
#endregion
//模板调用
public static string QueryExp(string propertyName, string queryType)
{

View File

@ -38,8 +38,12 @@ namespace ZR.CodeGenerator
_option.ServicesNamespace = _option.BaseNamespace + "Service";
_option.ApiControllerNamespace = _option.BaseNamespace + "Admin.WebApi";
var vuePath = AppSettings.GetConfig("gen:vuePath");
dto.VueParentPath = dto.VueVersion == 3 ? "ZRAdmin-vue" : "ZR.Vue";
if (!vuePath.IsEmpty())
{
dto.VueParentPath = vuePath;
}
dto.GenOptions = _option;
string PKName = "Id";
@ -52,6 +56,7 @@ namespace ZR.CodeGenerator
replaceDto.ShowBtnEdit = dto.GenTable.Options.CheckedBtn.Any(f => f == 2);
replaceDto.ShowBtnDelete = dto.GenTable.Options.CheckedBtn.Any(f => f == 3);
replaceDto.ShowBtnExport = dto.GenTable.Options.CheckedBtn.Any(f => f == 4);
replaceDto.ShowBtnView = dto.GenTable.Options.CheckedBtn.Any(f => f == 5);
//循环表字段信息

View File

@ -47,6 +47,7 @@ namespace ZR.CodeGenerator.Model
public bool ShowBtnAdd { get; set; }
public bool ShowBtnEdit { get; set; }
public bool ShowBtnDelete { get; set; }
public bool ShowBtnView { get; set; }
/// <summary>
/// 上传URL data
/// </summary>

View File

@ -72,40 +72,6 @@ namespace ZR.Service.System
return GenTableRepository.GetAll();
}
/// <summary>
/// 设置代码生成其他参数
/// </summary>
/// <param name="genTable"></param>
private void SetTableFromOptions(GenTable genTable)
{
//附加参数keyvalue格式
//if (!string.IsNullOrEmpty(genTable?.Options))
//{
// Dictionary<string, object> options = JsonConvert.DeserializeObject<Dictionary<string, object>>(genTable.Options);
// if (options == null) return;
// genTable.ParentMenuId = options.GetValueOrDefault("parentMenuId") ?? null;
// genTable.SortType = options.GetValueOrDefault("sortType") ?? "asc";
// genTable.SortField = options.GetValueOrDefault("sortField") ?? "";
// genTable.TreeParentCode = options.GetValueOrDefault("treeParentCode") ?? "";
// genTable.TreeName = options.GetValueOrDefault("treeName") ?? "";
// genTable.TreeCode = options.GetValueOrDefault("treeCode") ?? "";
// var checkdBtn = options.GetValueOrDefault("checkedBtn") ?? "";
// genTable.CheckedBtn = Tools.SpitIntArrary(checkdBtn.ToString());
// var permPrefix = options.GetValueOrDefault("permissionPrefix", "");
// genTable.PermissionPrefix = permPrefix?.ToString();
//}
//if (genTable?.Options?.PermissionPrefix.IsEmpty())
//{
// genTable?.Options?.PermissionPrefix = $"{genTable.ModuleName.ToLower()}:{genTable.ClassName.ToLower()}";//权限
//}
}
/// <summary>
/// 查询代码生成表信息
/// </summary>

View File

@ -71,14 +71,19 @@
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<treeselect
:append-to-body="true"
<el-cascader
class="w100"
:options="menuOptions"
:props="{ checkStrictly: true, value: 'menuId', label: 'menuName', emitPath: false }"
placeholder="请选择上级菜单"
clearable
v-model="info.parentMenuId"
:options="menus"
:normalizer="normalizer"
:show-count="true"
placeholder="请选择系统菜单"
/>
>
<template #default="{ node, data }">
<span>{{ data.menuName }}</span>
<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
</template>
</el-cascader>
</el-form-item>
</el-col>
<el-col :lg="12">
@ -251,12 +256,10 @@
</template>
<script>
import { queryColumnInfo } from '@/api/tool/gen'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import { listMenu } from '@/api/system/menu'
export default {
name: 'BasicInfoForm',
components: { Treeselect },
props: {
info: {
type: Object,
@ -279,6 +282,7 @@ export default {
},
data() {
return {
menuOptions: [],
checkedBtn: [],
subColumns: [],
rules: {
@ -359,6 +363,16 @@ export default {
}
}
},
/** 查询菜单下拉树结构 */
getMenuTreeselect() {
/** 查询菜单下拉列表 */
listMenu({ menuTypeIds: 'M,C' }).then((response) => {
this.menuOptions = response.data
})
},
},
mounted() {
this.getMenuTreeselect()
},
}
</script>