Merge branch 'net5.0' into net6.0

This commit is contained in:
不做码农 2022-05-03 19:38:21 +08:00
commit b791233eaf
8 changed files with 141 additions and 47 deletions

View File

@ -144,5 +144,89 @@ namespace Infrastructure.Extensions
}
return result;
}
/// <summary>
/// 转换为Pascal风格-每一个单词的首字母大写
/// </summary>
/// <param name="fieldName">字段名</param>
/// <param name="fieldDelimiter">分隔符</param>
/// <returns></returns>
public static string ConvertToPascal(this string fieldName, string fieldDelimiter)
{
string result = string.Empty;
if (fieldName.Contains(fieldDelimiter))
{
//全部小写
string[] array = fieldName.ToLower().Split(fieldDelimiter.ToCharArray());
foreach (var t in array)
{
//首字母大写
result += t.Substring(0, 1).ToUpper() + t[1..];
}
}
else if (string.IsNullOrWhiteSpace(fieldName))
{
result = fieldName;
}
else if (fieldName.Length == 1)
{
result = fieldName.ToUpper();
}
else if (fieldName.Length == CountUpper(fieldName))
{
result = fieldName.Substring(0, 1).ToUpper() + fieldName[1..].ToLower();
}
else
{
result = fieldName.Substring(0, 1).ToUpper() + fieldName[1..];
}
return result;
}
/// <summary>
/// 大写字母个数
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static int CountUpper(this string str)
{
int count1 = 0;
char[] chars = str.ToCharArray();
foreach (char num in chars)
{
if (num >= 'A' && num <= 'Z')
{
count1++;
}
//else if (num >= 'a' && num <= 'z')
//{
// count2++;
//}
}
return count1;
}
/// <summary>
/// 转换为Camel风格-第一个单词小写,其后每个单词首字母大写
/// </summary>
/// <param name="fieldName">字段名</param>
/// <param name="fieldDelimiter">分隔符</param>
/// <returns></returns>
public static string ConvertToCamel(this string fieldName, string fieldDelimiter)
{
//先Pascal
string result = ConvertToPascal(fieldName, fieldDelimiter);
//然后首字母小写
if (result.Length == 1)
{
result = result.ToLower();
}
else
{
result = result.Substring(0, 1).ToLower() + result[1..];
}
return result;
}
}
}

View File

@ -26,7 +26,7 @@
## 🍿在线体验
- 官方文档http://www.izhaorui.cn/doc
- vue3.x版本体验http://www.izhaorui.cn/vue3
- vue3.x版本体验http://www.izhaorui.cn/vue-next-admin
- vue2.x版本体验http://www.izhaorui.cn/admin
- 账号密码admin/123456
@ -44,21 +44,21 @@
Vue版前端技术栈 基于vue2.x/vue3.x、vuex、vue-router 、vue-cli 、axios 和 element-ui/element plus前端采用vscode工具开发
## 🍀后端技术
核心框架:.Net5.0/.Net6.0 + Web API + sqlsugar + swagger + signalR + IpRateLimit
- 核心框架:.Net5.0/.Net6.0 + Web API + sqlsugar + swagger + signalR + IpRateLimit
定时计划任务Quartz.Net组件支持执行程序集或者http网络请求
- 定时计划任务Quartz.Net组件支持执行程序集或者http网络请求
安全支持:过滤器(数据权限过滤)、Sql注入、请求伪造
- 安全支持:过滤器(数据权限过滤)、Sql注入、请求伪造
日志管理NLog、登录日志、操作日志、定时任务日志
- 日志管理NLog、登录日志、操作日志、定时任务日志
工具类:验证码、丰富公共功能
- 工具类:验证码、丰富公共功能
接口限流:支持接口限流,避免恶意请求导致服务层压力过大
- 接口限流:支持接口限流,避免恶意请求导致服务层压力过大
代码生成:高效率开发,代码生成器可以一键生成所有代码
- 代码生成:高效率开发,代码生成器可以一键生成所有代码
数据字典:支持数据字典,可以方便对一些状态进行管理
- 数据字典:支持数据字典,可以方便对一些状态进行管理

View File

@ -34,7 +34,7 @@ $if(column.HtmlType == "datetime")
$elseif(column.HtmlType == "select" || column.HtmlType == "radio")
<el-form-item label="${labelName}" prop="${columnName}">
<el-select v-model="queryParams.${columnName}" placeholder="请选择${labelName}">
<el-option v-for="item in ${column.DictType}" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue"></el-option>
<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>
$else
@ -119,9 +119,9 @@ $elseif(column.HtmlType == "checkbox" || column.HtmlType == "select" || column.H
<el-table-column prop="${columnName}" label="${labelName}" align="center">
<template #default="scope">
$if(column.HtmlType == "checkbox")
<dict-tag :options="${column.DictType}" :value="scope.row.${columnName} ? scope.row.${columnName}.split(',') : []" />
<dict-tag :options="$if(column.DictType != "") ${column.DictType} $else ${column.CsharpFieldFl}Options$end" :value="scope.row.${columnName} ? scope.row.${columnName}.split(',') : []" />
$else
<dict-tag :options="${column.DictType}" :value="scope.row.${columnName}" />
<dict-tag :options="$if(column.DictType != "") ${column.DictType} $else ${column.CsharpFieldFl}Options$end" :value="scope.row.${columnName}" />
$end
</template>
</el-table-column>
@ -227,7 +227,7 @@ $elseif(column.HtmlType == "radio")
<el-col :lg="12">
<el-form-item label="${labelName}" prop="${columnName}">
<el-radio-group v-model="form.${columnName}">
<el-radio v-for="item in ${column.DictType}" :key="item.dictValue" :label="${value}">{{item.dictLabel}}</el-radio>
<el-radio v-for="item in $if(column.DictType != "") ${column.DictType} $else ${column.CsharpFieldFl}Options$end" :key="item.dictValue" :label="${value}">{{item.dictLabel}}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
@ -247,7 +247,7 @@ $elseif(column.HtmlType == "select")
<el-col :lg="12">
<el-form-item label="${labelName}" prop="${columnName}">
<el-select v-model="form.${columnName}" placeholder="请选择${labelName}">
<el-option v-for="item in ${column.DictType}" :key="item.dictValue" :label="item.dictLabel" :value="${value}"></el-option>
<el-option v-for="item in $if(column.DictType != "") ${column.DictType} $else ${column.CsharpFieldFl}Options$end" :key="item.dictValue" :label="item.dictLabel" :value="${value}"></el-option>
</el-select>
</el-form-item>
</el-col>
@ -255,7 +255,7 @@ $elseif(column.HtmlType == "checkbox")
<el-col :lg="24">
<el-form-item label="${labelName}" prop="${columnName}">
<el-checkbox-group v-model="form.${columnName}Checked">
<el-checkbox v-for="item in ${column.DictType}" :key="item.dictValue" :label="item.dictValue">{{item.dictLabel}}</el-checkbox>
<el-checkbox v-for="item in $if(column.DictType != "") ${column.DictType} $else ${column.CsharpFieldFl}Options$end" :key="item.dictValue" :label="item.dictValue">{{item.dictLabel}}</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-col>
@ -349,7 +349,7 @@ const formRef = ref()
$foreach(item in genTable.Columns)
$if((item.HtmlType == "radio" || item.HtmlType == "select" || item.HtmlType == "checkbox"))
// ${item.ColumnComment}选项列表 格式 eg:{ dictLabel: '标签', dictValue: '0'}
const ${item.DictType} = ref([])
const $if(item.DictType != "") ${item.DictType} $else ${item.CsharpFieldFl}Options$end = ref([])
$elseif(item.HtmlType == "datetime" && item.IsQuery == true)
// ${item.ColumnComment}时间范围
const dateRange${item.CsharpField} = ref([])

View File

@ -9,32 +9,40 @@
<template>
<div class="app-container">
<!-- :model属性用于表单验证使用 比如下面的el-form-item 的 prop属性用于对表单值进行验证操作 -->
<el-form :model="queryParams" label-position="right" inline ref="queryRef" v-show="showSearch"
@submit.prevent>
<el-form :model="queryParams" label-position="right" inline ref="queryRef" v-show="showSearch" @submit.prevent>
$foreach(column in genTable.Columns)
$set(labelName = "")
$set(columnName = "")
$set(numLabel = "")
$if(column.IsQuery == true)
$set(columnName = column.CsharpFieldFl)
$if(column.ColumnComment != "")
$set(labelName = column.ColumnComment)
$else
$set(labelName = column.CsharpFieldFl)
$end
$if(column.CsharpType == "int" || column.CsharpType == "long")
$set(numLabel = ".number")
$end
$set(columnName = column.CsharpFieldFl)
$if(column.ColumnComment != "")
$set(labelName = column.ColumnComment)
$else
$set(labelName = column.CsharpFieldFl)
$end
$if(column.CsharpType == "int" || column.CsharpType == "long")
$set(numLabel = ".number")
$end
$if(column.HtmlType == "datetime")
<el-form-item label="$labelName">
<el-date-picker v-model="dateRange${column.CsharpField}" style="width: 240px" type="daterange" range-separator="-"
start-placeholder="开始日期" end-placeholder="结束日期" placeholder="请选择$labelName" :picker-options="{ firstDayOfWeek: 1}"></el-date-picker>
<el-date-picker
v-model="dateRange${column.CsharpField}"
style="width: 240px"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
placeholder="请选择$labelName"
value-format="YYYY-MM-DD HH:mm:ss"
:shortcuts="dateOptions"
>
</el-date-picker>
</el-form-item>
$elseif(column.HtmlType == "select" || column.HtmlType == "radio")
<el-form-item label="${labelName}" prop="${columnName}">
<el-select v-model="queryParams.${columnName}" placeholder="请选择${labelName}">
<el-option v-for="item in ${column.DictType}" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue"></el-option>
<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>
$else
@ -112,9 +120,9 @@ $elseif(column.HtmlType == "checkbox" || column.HtmlType == "select" || column.H
<el-table-column prop="${columnName}" label="${labelName}" align="center">
<template #default="scope">
$if(column.HtmlType == "checkbox")
<dict-tag :options="${column.DictType}" :value="scope.row.${columnName} ? scope.row.${columnName}.split(',') : []" />
<dict-tag :options="$if(column.DictType != "") ${column.DictType} $else ${column.CsharpFieldFl}Options$end" :value="scope.row.${columnName} ? scope.row.${columnName}.split(',') : []" />
$else
<dict-tag :options="${column.DictType}" :value="scope.row.${columnName}" />
<dict-tag :options="$if(column.DictType != "") ${column.DictType} $else ${column.CsharpFieldFl}Options$end" :value="scope.row.${columnName}" />
$end
</template>
</el-table-column>
@ -203,7 +211,7 @@ $elseif(column.HtmlType == "radio")
<el-col :lg="12">
<el-form-item label="${labelName}" prop="${columnName}">
<el-radio-group v-model="form.${columnName}">
<el-radio v-for="item in ${column.DictType}" :key="item.dictValue" :label="${value}">{{item.dictLabel}}</el-radio>
<el-radio v-for="item in $if(column.DictType != "") ${column.DictType} $else ${column.CsharpFieldFl}Options$end" :key="item.dictValue" :label="${value}">{{item.dictLabel}}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
@ -223,7 +231,7 @@ $elseif(column.HtmlType == "select")
<el-col :lg="12">
<el-form-item label="${labelName}" prop="${columnName}">
<el-select v-model="form.${columnName}" placeholder="请选择${labelName}">
<el-option v-for="item in ${column.DictType}" :key="item.dictValue" :label="item.dictLabel" :value="${value}"></el-option>
<el-option v-for="item in $if(column.DictType != "") ${column.DictType} $else ${column.CsharpFieldFl}Options$end" :key="item.dictValue" :label="item.dictLabel" :value="${value}"></el-option>
</el-select>
</el-form-item>
</el-col>
@ -231,7 +239,7 @@ $elseif(column.HtmlType == "checkbox")
<el-col :lg="24">
<el-form-item label="${labelName}" prop="${columnName}">
<el-checkbox-group v-model="form.${columnName}Checked">
<el-checkbox v-for="item in ${column.DictType}" :key="item.dictValue" :label="item.dictValue">{{item.dictLabel}}</el-checkbox>
<el-checkbox v-for="item in $if(column.DictType != "") ${column.DictType} $else ${column.CsharpFieldFl}Options$end" :key="item.dictValue" :label="item.dictValue">{{item.dictLabel}}</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-col>
@ -295,12 +303,10 @@ const open = ref(false)
const state = reactive({
form: {},
rules: {
$foreach(column in genTable.Columns)
$foreach(column in genTable.Columns)
$if(column.IsRequired && column.IsIncrement == false)
${column.CsharpFieldFl}: [
{ required: true, message: "${column.ColumnComment}不能为空", trigger: $if(column.htmlType == "select")"change"$else"blur"$end
$if(column.CsharpType == "int" || column.CsharpType == "long"), type: "number"$end }
],
${column.CsharpFieldFl}: [{ required: true, message: "${column.ColumnComment}不能为空", trigger: $if(column.htmlType == "select")"change"$else"blur"$end
$if(column.CsharpType == "int" || column.CsharpType == "long"), type: "number"$end }],
$end
$end
}
@ -315,7 +321,7 @@ const formRef = ref()
$foreach(item in genTable.Columns)
$if((item.HtmlType == "radio" || item.HtmlType == "select" || item.HtmlType == "checkbox"))
// ${item.ColumnComment}选项列表 格式 eg:{ dictLabel: '标签', dictValue: '0'}
const ${item.DictType} = ref([])
const $if(item.DictType != "")${item.DictType}$else${item.CsharpFieldFl}Options$end = ref([])
$elseif(item.HtmlType == "datetime" && item.IsQuery == true)
// ${item.ColumnComment}时间范围
const dateRange${item.CsharpField} = ref([])

View File

@ -452,7 +452,7 @@ namespace ZR.CodeGenerator
TableId = genTable.TableId,
TableName = genTable.TableName,
CsharpType = GetCSharpDatatype(column.DataType),
CsharpField = column.DbColumnName.UnderScoreToCamelCase().FirstUpperCase(),
CsharpField = column.DbColumnName.ConvertToPascal("_"),
IsRequired = !column.IsNullable,
IsIncrement = column.IsIdentity,
Create_by = genTable.Create_by,

View File

@ -71,12 +71,15 @@ namespace ZR.Service.System
{
SysDept info = DeptRepository.GetFirst(it => it.DeptId == dept.ParentId);
//如果父节点不为正常状态,则不允许新增子节点
if (!UserConstants.DEPT_NORMAL.Equals(info.Status))
if (info != null && !UserConstants.DEPT_NORMAL.Equals(info?.Status))
{
throw new CustomException("部门停用,不允许新增");
}
dept.Ancestors = info.Ancestors + "," + dept.ParentId;
dept.Ancestors = "";
if (info != null)
{
dept.Ancestors = info.Ancestors + "," + dept.ParentId;
}
return DeptRepository.Add(dept);
}

View File

@ -126,6 +126,7 @@
</div>
<h2></h2>
</div>
</div>
</body>
</html>
</html>