优化代码生成,DataAnnotations生成时间范围验证

This commit is contained in:
轻风2016 2024-08-29 10:52:20 +08:00
parent 9c7e79356d
commit 7ed3f1706e
5 changed files with 126 additions and 59 deletions

View File

@ -94,9 +94,15 @@ if (@column.WhetherAddUpdate == "Y"){
@if(rule.Type=="pattern"){
@:[RegularExpression(@@"@(@FormatPattern(rule.Pattern))", ErrorMessage = "@(@rule.Message)")]
}
@if(rule.Type=="length"){
@if(rule.Type=="length"&&column.NetType.StartsWith("string")){
@:[StringLength(@(@rule.Max),MinimumLength = @(@rule.Min), ErrorMessage = "@(@column.ColumnComment)只能是@(@rule.Min)至@(@rule.Max)字符")]
}
@if(rule.Type=="length"&&column.NetType.StartsWith("DateTime")){
@:[Range(typeof(DateTime), "@(@rule.Min)", "@(@rule.Max)", ErrorMessage = "@(@column.ColumnComment)只能是@(@rule.Min)到@(@rule.Max)")]
}
@if(rule.Type=="length"&&(column.NetType.StartsWith("int")||column.NetType.StartsWith("long")||column.NetType.StartsWith("decimal")||column.NetType.StartsWith("float")||column.NetType.StartsWith("double"))){
@:[Range(@(@rule.Min), @(@rule.Max), ErrorMessage = "@(@column.ColumnComment)只能是@(@rule.Min)至@(@rule.Max)")]
}
}
}
@:public override @column.NetType @column.PropertyName { get; set; }
@ -151,9 +157,15 @@ if (@column.WhetherAddUpdate == "Y"){
@if(rule.Type=="pattern"){
@:[RegularExpression(@@"@(@FormatPattern(rule.Pattern))", ErrorMessage = "@(@rule.Message)")]
}
@if(rule.Type=="length"){
@if(rule.Type=="length"&&column.NetType.StartsWith("string")){
@:[StringLength(@(@rule.Max),MinimumLength = @(@rule.Min), ErrorMessage = "@(@column.ColumnComment)只能是@(@rule.Min)至@(@rule.Max)字符")]
}
@if(rule.Type=="length"&&column.NetType.StartsWith("DateTime")){
@:[Range(typeof(DateTime), "@(@rule.Min)", "@(@rule.Max)", ErrorMessage = "@(@column.ColumnComment)只能是@(@rule.Min)到@(@rule.Max)")]
}
@if(rule.Type=="length"&&(column.NetType.StartsWith("int")||column.NetType.StartsWith("long")||column.NetType.StartsWith("decimal")||column.NetType.StartsWith("float")||column.NetType.StartsWith("double"))){
@:[Range(@(@rule.Min), @(@rule.Max), ErrorMessage = "@(@column.ColumnComment)只能是@(@rule.Min)至@(@rule.Max)")]
}
}
}
@:public override @column.NetType @column.PropertyName { get; set; }

View File

@ -26,7 +26,7 @@
<el-row :gutter="35">
@foreach (var column in Model.TableField){
if(@column.ColumnKey == "True"){
@:<el-form-item style="display: none !important;">
@:<el-form-item style="display: none !important;">
<el-input v-model="state.ruleForm.@(@column.LowerPropertyName)" />
</el-form-item>
}else{
@ -253,7 +253,7 @@ const rules = ref<FormRules>({
@:{required: true, message: '@(@triggerTip)@(@column.ColumnComment)!', trigger: '@(@trigger)',},
}else if(rule.Type=="array"){
@:{ type: 'array', required: true, message: '请选择至少一种@(@column.ColumnComment)', trigger: 'change', },
}else if(rule.Type=="length"){
}else if(rule.Type=="length"&&(column.EffectType=="Input"||column.EffectType == "InputTextArea")){
@:{ min: @(@rule.Min), max: @(@rule.Max), message: '长度应该是@(@rule.Min)到@(@rule.Max)', trigger: '@(@trigger)' },
}else if(rule.Type=="pattern"){
@:{ pattern: @(@rule.Pattern), message: '@(@column.ColumnComment)', trigger: '@(@trigger)' },

View File

@ -289,7 +289,7 @@ const cancel = () => {
const submit = async () => {
state.loading = true;
var lst = state.tableData;
console.log(lst);
// console.log(lst);
let ignoreFields = ['remoteVerify', 'anyRule', 'columnKey'];
lst.forEach((item: any) => {
//

View File

@ -3,54 +3,84 @@
<el-dialog v-model="state.isShowDialog" draggable :close-on-click-modal="false" width="800px">
<template #header>
<div style="color: #fff">
<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit /> </el-icon>
<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit />
</el-icon>
<span> 编辑规则 </span>
</div>
</template>
<el-form :model="state.ruleForm" ref="ruleFormRef" label-width="auto" :rules="rules">
<el-form :model="state.ruleForm" ref="ruleFormRef" label-width="auto">
<el-row :gutter="35">
<el-form-item v-show="false">
<el-form-item style="display: none !important;">
<el-input v-model="state.ruleForm.id" />
</el-form-item>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item label="验证类型" prop="type">
<el-form-item label="">
本字段的数据库类型是{{ state.column.dataType }}.Net类型是{{ state.column.netType }}
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item label="验证类型" prop="type" :rules="rules.type">
<el-select v-model="state.ruleForm.type" placeholder="请选择类型" @change="handleTypeChange">
<el-option v-for="(item, index) in validTypeData" :key="index" :label="item.name" :value="item.code" />
<el-option v-for="(item, index) in validTypeData" :key="index" :label="item.name"
:value="item.code" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="state.ruleForm.type == 'pattern'">
<el-form-item label="提示信息" prop="message">
<el-input v-model="state.ruleForm.message" placeholder="请输入提示信息" maxlength="128" show-word-limit clearable />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="state.ruleForm.type == 'length'">
<el-form-item label="最小值" prop="min">
<el-input-number v-model="state.ruleForm.min" :min="0" :max="100000" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="state.ruleForm.type == 'length'">
<el-form-item label="最大值" prop="max">
<el-input-number v-model="state.ruleForm.max" :min="0" :max="100000" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="state.ruleForm.type == 'pattern'">
<el-form-item label="正则式" prop="pattern">
<el-input v-model="state.ruleForm.pattern" placeholder="请输入正则表达式">
<template #append>
<el-button @click="openPatternDialog">选择正则</el-button>
</template>
</el-input>
</el-form-item>
</el-col>
<!-- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"
v-if="state.ruleForm.type == 'pattern'">
<el-form-item label="数据类型" prop="dataType">
<el-radio-group v-model="state.ruleForm.dataType">
<el-radio v-for="(item, index) in dataTypeData" :key="index" :value="item.code" :label="item.name"></el-radio>
</el-radio-group>
</el-form-item>
</el-col> -->
<template v-if="state.ruleForm.type == 'length'&&(state.column.netType.includes('int')||state.column.netType.includes('long')||state.column.netType.includes('string'))">
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item label="最小值" prop="min" :rules="rules.min">
<el-input-number v-model="state.ruleForm.min" :min="0" :max="100000" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item label="最大值" prop="max" :rules="rules.max">
<el-input-number v-model="state.ruleForm.max" :min="0" :max="100000" />
</el-form-item>
</el-col>
</template>
<template v-if="state.ruleForm.type == 'length'&&(state.column.netType.includes('decimal')||state.column.netType.includes('float')||state.column.netType.includes('double'))">
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item label="最小值" prop="min" :rules="rules.minDecimal">
<el-input-number v-model="state.ruleForm.min" :min="0" :max="100000" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item label="最大值" prop="max" :rules="rules.maxDecimal">
<el-input-number v-model="state.ruleForm.max" :min="0" :max="100000" />
</el-form-item>
</el-col>
</template>
<template v-if="state.ruleForm.type == 'length'&&state.column.netType.includes('DateTime')">
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item label="起始日期" prop="min" :rules="rules.minDate">
<el-date-picker v-model="state.ruleForm.min" type="date" format="YYYY-MM-DD"
value-format="YYYY-MM-DD" placeholder="请选择起始日期" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item label="结束日期" prop="max" :rules="rules.maxDate">
<el-date-picker v-model="state.ruleForm.max" type="date" format="YYYY-MM-DD"
value-format="YYYY-MM-DD" placeholder="请选择结束日期" />
</el-form-item>
</el-col>
</template>
<template v-if="state.ruleForm.type == 'pattern'">
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item label="提示信息" prop="message" :rules="rules.message">
<el-input v-model="state.ruleForm.message" placeholder="请输入提示信息" maxlength="128"
show-word-limit clearable />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item label="正则式" prop="pattern" :rules="rules.pattern">
<el-input v-model="state.ruleForm.pattern" placeholder="请输入正则表达式">
<template #append>
<el-button @click="openPatternDialog">选择正则</el-button>
</template>
</el-input>
</el-form-item>
</el-col>
</template>
</el-row>
</el-form>
<template #footer>
@ -93,22 +123,52 @@ const rules = ref<FormRules>({
],
min: [
{
type: 'integer',
type:'integer',
required: true,
pattern: /[^\d]/g,
message: '请输入正确的数字',
trigger: 'blur',
},
],
minDecimal: [
{
required: true,
message: '请输入正确的数字',
trigger: 'blur',
},
],
minDate: [
{
required: true,
pattern: /^\d{4}-\d{2}-\d{2}$/,
message: '请选择起始日期',
trigger: ['change', 'blur'],
},
],
max: [
{
type: 'integer',
type:'integer',
required: true,
pattern: /[^\d]/g,
message: '请输入正确的数字',
trigger: 'blur',
},
],
maxDecimal: [
{
required: true,
message: '请输入正确的数字',
trigger: 'blur',
},
],
maxDate: [
{
required: true,
pattern: /^\d{4}-\d{2}-\d{2}$/,
message: '请选择结束日期',
trigger: ['change', 'blur'],
},
],
message: [
{
required: true,
@ -117,13 +177,6 @@ const rules = ref<FormRules>({
},
],
pattern: [{ required: true, message: '请输入正则表达式', trigger: 'blur' }],
// dataType: [
// {
// required: true,
// message: '',
// trigger: 'change',
// },
// ]
});
const ruleFormRef = ref();
const patternDialogRef = ref();
@ -134,24 +187,22 @@ const validTypeData = ref([
{ code: 'pattern', name: '正则模式' },
{ code: 'length', name: '长度限制' },
]);
// const dataTypeData = ref([
// { code: 'string', name: '' },
// { code: 'integer', name: '' },
// ]);
const state = reactive({
isShowDialog: false,
loading: false,
ruleForm: {} as any,
id: 0,
column: {} as any,
});
//
const openDialog = (id: number) => {
const openDialog = (row: any) => {
// const data = JSON.parse(JSON.stringify(row));
// state.ruleForm = data;
state.id = id;
state.id = row.id;
state.isShowDialog = true;
state.column = row;
};
//

View File

@ -13,8 +13,8 @@
<el-table :data="state.tableData" style="width: 100%" v-loading="state.loading" border>
<el-table-column prop="type" label="类型" width="120" show-overflow-tooltip />
<el-table-column prop="message" label="提示信息" minWidth="180" show-overflow-tooltip />
<el-table-column prop="max" label="最大值" minWidth="100" show-overflow-tooltip />
<el-table-column prop="min" label="最小值" minWidth="100" show-overflow-tooltip />
<el-table-column prop="max" label="最大值" minWidth="100" show-overflow-tooltip />
<el-table-column prop="pattern" label="正则式" minWidth="120" show-overflow-tooltip />
<el-table-column prop="action" label="操作" width="100" align="center" show-overflow-tooltip>
<template #default="scope">
@ -45,7 +45,9 @@ const state = reactive({
loading: false,
tableData: [] as any,
title: '',
column: {} as any,
});
const column=ref();
//
const openDialog = (row: any) => {
@ -58,11 +60,13 @@ const openDialog = (row: any) => {
// state.tableData = row.rules;
state.id = row.id;
state.isShowDialog = true;
state.column = row;
// console.log('column',row);
};
//
const openRuleDialog = () => {
ruleDialogRef.value.openDialog(state.id);
ruleDialogRef.value.openDialog(state.column);
};
//