Przeglądaj źródła

!1486 代码优化
Merge pull request !1486 from 喵你个汪/next

zuohuaijun 1 rok temu
rodzic
commit
318a34c22e

+ 4 - 4
Admin.NET/Admin.NET.Core/Job/EnumToDictJob.cs

@@ -15,7 +15,7 @@ public class EnumToDictJob : IJob
 {
     private readonly IServiceScopeFactory _scopeFactory;
     private const int OrderOffset = 10;
-    private const string DefaultTagType = "primary";
+    private const string DefaultTagType = null;
 
     public EnumToDictJob(IServiceScopeFactory scopeFactory)
     {
@@ -114,9 +114,9 @@ public class EnumToDictJob : IJob
             {
                 Id = YitIdHelper.NextId(),
                 DictTypeId = t2.Id,
-                Name = u.Describe,
-                Value = u.Value.ToString(),
-                Code = u.Name,
+                Name = u.Name,
+                Value = u.Describe,
+                Code = u.Value.ToString(),
                 Remark = t2.Remark,
                 OrderNo = u.Value + OrderOffset,
                 TagType = u.Theme != "" ? u.Theme : DefaultTagType,

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenService.cs

@@ -235,7 +235,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
                 columnOutput.PropertyName = propertyInfo.Name;
                 columnOutput.ColumnComment = propertyInfo.GetCustomAttribute<SugarColumn>().ColumnDescription;
                 var propertyType = Nullable.GetUnderlyingType(propertyInfo.PropertyType);
-                if (propertyInfo.PropertyType.IsEnum || propertyType != null)
+                if (propertyInfo.PropertyType.IsEnum || (propertyType?.IsEnum ?? false))
                 {
                     columnOutput.DictTypeCode = (propertyType ?? propertyInfo.PropertyType).Name;
                 }

+ 3 - 3
Admin.NET/Admin.NET.Web.Entry/wwwroot/template/Service.cs.vm

@@ -111,7 +111,7 @@ public class @(Model.ClassName)Service : IDynamicApiController, ITransient
     {
         var entity = input.Adapt<@(Model.ClassName)>();
         @foreach (var config in Model.TableUniqueList.Where(x => x.Columns.All(x1 => Model.TableField.Any(x2 => x2.WhetherAddUpdate == "Y" && x2.PropertyName == x1)))) {
-        @:if (_@(Model.LowerClassName)Rep.AnyAsync(u => @(string.Join(" && ", config.Columns.Select(x => $"u.{x} != null && u.{x} == input.{x}"))))) throw Oops.Oh("@config.Message");
+        @:if (await _@(Model.LowerClassName)Rep.IsAnyAsync(u => @(string.Join(" && ", config.Columns.Select(x => $"u.{x} != null && u.{x} == input.{x}"))))) throw Oops.Oh("@(config.Message)已存在");
         }
         return await _@(Model.LowerClassName)Rep.InsertAsync(entity) ? entity.Id : 0;
     }
@@ -158,7 +158,7 @@ public class @(Model.ClassName)Service : IDynamicApiController, ITransient
     public async Task Update(Update@(Model.ClassName)Input input)
     {
         @foreach (var config in Model.TableUniqueList.Where(x => x.Columns.All(x1 => Model.TableField.Any(x2 => x2.WhetherAddUpdate == "Y" && x2.PropertyName == x1)))) {
-        @:if (_@(Model.LowerClassName)Rep.AnyAsync(u => u.@(primaryKey.PropertyName) != input.@(primaryKey.PropertyName) && @(string.Join(" && ", config.Columns.Select(x => $"u.{x} != null && u.{x} == input.{x}"))))) throw Oops.Oh("@config.Message");
+        @:if (await _@(Model.LowerClassName)Rep.IsAnyAsync(u => u.@(primaryKey.PropertyName) != input.@(primaryKey.PropertyName) && @(string.Join(" && ", config.Columns.Select(x => $"u.{x} != null && u.{x} == input.{x}"))))) throw Oops.Oh("@(config.Message)已存在");
         }
         var entity = input.Adapt<@(Model.ClassName)>();
         await _@(Model.LowerClassName)Rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
@@ -349,7 +349,7 @@ var definedObjects = new Dictionary<string, object>();
                         @:.SplitError(it => it.Item.@(column.PropertyName)?.Length > @(column.ColumnLength), "@(column.ColumnComment)长度不能超过@(column.ColumnLength)个字符")
                         }}
                         @foreach (var config in Model.TableUniqueList.Where(x => x.Columns.All(x1 => importFields.Any(x2 => x2.PropertyName == x1)))) {
-                        @:.WhereColumns(it => new { @(string.Join(", ", config.Columns.Select(x => $"it.{x}"))) }).SplitError(it => it.Any(), "@(config.Message)")
+                        @:.WhereColumns(it => new { @(string.Join(", ", config.Columns.Select(x => $"it.{x}"))) }).SplitError(it => it.Any(), "@(config.Message)已存在")
                         }
                         @:.SplitInsert(_ => true)
                         @:.ToStorage();

+ 12 - 19
Admin.NET/Admin.NET.Web.Entry/wwwroot/template/editDialog.vue.vm

@@ -41,7 +41,8 @@
 								@:options="@LowerFirstLetter(@column.FkEntityName)TreeData"
 								@:props="{ checkStrictly: true, emitPath: false, value: '@LowerFirstLetter(@column.ValueColumn)' }"
 								placeholder="请选择@(column.ColumnComment)"
-								clearable=""
+								clearable
+								filterable
 								class="w100"
 								v-model="ruleForm.@(column.LowerPropertyName)"
 							>
@@ -70,18 +71,22 @@
 							@:<el-input v-model="ruleForm.@(column.LowerPropertyName)" placeholder="请输入@(column.ColumnComment)" type="textarea" maxlength="@(column.ColumnLength)" show-word-limit clearable />
 						</el-form-item>
 					</el-col>
-					}else if(column.EffectType == "Select"){
-					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+					}else if(column.EffectType == "Select" || column.EffectType == "EnumSelector"){
+					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" @(IsStatusEnum(column) ? $"v-if='!ruleForm.{pkFieldName}'" : "")>
 						@:<el-form-item label="@column.ColumnComment" prop="@(column.LowerPropertyName)">
-							@:<el-select clearable v-model="ruleForm.@(column.LowerPropertyName)" placeholder="请选择@(column.ColumnComment)">
-								@:<el-option v-for="(item,index) in dl('@(column.DictTypeCode)')"  :key="index" :value="@(column.NetType.StartsWith("string") ? "item.code" : "Number(item.code)")" :label="`[${item.code}] ${item.value}`"></el-option>
-							</el-select>
+							if (IsStatusEnum(column)) {
+							@:<el-switch v-model="ruleForm.@column.LowerPropertyName" :active-value="1" :inactive-value="2" size="small" />
+							} else {
+							@:<el-select clearable filterable v-model="ruleForm.@(column.LowerPropertyName)" placeholder="请选择@(column.ColumnComment)">
+								@:<el-option v-for="(item, index) in dl('@(column.DictTypeCode)')"  :key="index" :value="@(column.NetType.StartsWith("string") ? "item.code" : "Number(item.code)")" :label="`[${item.code}] ${item.value}`"></el-option>
+							@:</el-select>
+							}
 						</el-form-item>
 					</el-col>
 					}else if(column.EffectType == "ConstSelector"){
 					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						@:<el-form-item label="@column.ColumnComment" prop="@(column.LowerPropertyName)">
-							@:<el-select clearable v-model="ruleForm.@(column.LowerPropertyName)" placeholder="请选择@(column.ColumnComment)">
+							@:<el-select clearable filterable v-model="ruleForm.@(column.LowerPropertyName)" placeholder="请选择@(column.ColumnComment)">
 								@:<el-option v-for="(item,index) in getConstType('@column.DictTypeCode')" :key="index" :label="item.name" :value="@(column.NetType.StartsWith("string") ? "item.code" : "Number(item.code)")">{{ item.name }}</el-option>
 							</el-select>
 						</el-form-item>
@@ -114,18 +119,6 @@
 							</el-upload>
 						</el-form-item>
 					</el-col>
-					}else if(column.EffectType == "EnumSelector"){
-					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" @(IsStatusEnum(column) ? $"v-if='!ruleForm.{pkFieldName}'" : "") >
-						@:<el-form-item label="@column.ColumnComment" prop="@(column.LowerPropertyName)">
-							if (@column.NetType == "StatusEnum" && @column.PropertyName == "Status") {
-							@:<el-switch v-model="ruleForm.@column.LowerPropertyName" :active-value="1" :inactive-value="2" size="small" />
-							} else {
-							@:<el-select clearable v-model="ruleForm.@(column.LowerPropertyName)" placeholder="请选择@(column.ColumnComment)">
-								@:<el-option v-for="(item, index) in dl('@(column.DictTypeCode)')" :key="index" :value="@(column.NetType.TrimEnd('?').StartsWith("string") ? "item.value" : "Number(item.value)")" :label="`${item.name} (${item.code}-${item.value})`"></el-option>
-							@:</el-select>
-							}
-						</el-form-item>
-					</el-col>
 					}else{
 					}
 					}

+ 17 - 28
Admin.NET/Admin.NET.Web.Entry/wwwroot/template/index.vue.vm

@@ -24,7 +24,7 @@
           if(haveLikeCdt){
           @:<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
             @:<el-form-item label="关键字">
-              @:<el-input v-model="queryParams.keyword" clearable="" placeholder="请输入模糊查询关键字"/>
+              @:<el-input v-model="queryParams.keyword" clearable placeholder="请输入模糊查询关键字"/>
             @:</el-form-item>
           @:</el-col>
           }
@@ -32,33 +32,27 @@
           @:<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
             if(column.EffectType == "Input" || column.EffectType == "InputTextArea"){
             @:<el-form-item label="@column.ColumnComment">
-              @:<el-input v-model="queryParams.@(column.LowerPropertyName)" clearable="" placeholder="请输入@(column.ColumnComment)"/>
+              @:<el-input v-model="queryParams.@(column.LowerPropertyName)" clearable placeholder="请输入@(column.ColumnComment)"/>
             @:</el-form-item>
             }else if(column.EffectType == "InputTextArea"){
             @:<el-form-item label="@column.ColumnComment">
-              @:<el-input-number v-model="queryParams.@(column.LowerPropertyName)"  clearable="" placeholder="请输入@(column.ColumnComment)"/>
+              @:<el-input-number v-model="queryParams.@(column.LowerPropertyName)"  clearable placeholder="请输入@(column.ColumnComment)"/>
               @:
             @:</el-form-item>
             }else if(column.EffectType == "InputNumber"){
             @:<el-form-item label="@column.ColumnComment">
-              @:<el-input-number v-model="queryParams.@(column.LowerPropertyName)"  clearable="" placeholder="请输入@(column.ColumnComment)"/>
+              @:<el-input-number v-model="queryParams.@(column.LowerPropertyName)"  clearable placeholder="请输入@(column.ColumnComment)"/>
             @:</el-form-item>
             }else if(column.EffectType == "fk"){
             @:<el-form-item label="@column.ColumnComment">
-              @:<el-select clearable="" filterable="" v-model="queryParams.@(column.LowerPropertyName)" placeholder="请选择@(column.ColumnComment)">
+              @:<el-select clearable filterable v-model="queryParams.@(column.LowerPropertyName)" placeholder="请选择@(column.ColumnComment)">
                 @:<el-option v-for="(item,index) in @LowerFirstLetter(@column.FkEntityName)@(column.PropertyName)DropdownList" :key="index" :value="item.value" :label="item.label" />
               @:</el-select>
             @:</el-form-item>
-            }else if(column.EffectType == "Select"){
+            }else if(column.EffectType == "Select" || column.EffectType == "EnumSelector"){
             @:<el-form-item label="@column.ColumnComment">
-              @:<el-select clearable="" v-model="queryParams.@(column.LowerPropertyName)" placeholder="请选择@(column.ColumnComment)">
-                @:<el-option v-for="(item,index) in dl('@(column.DictTypeCode)')" :key="index" :value="item.code" :label="`[${item.code}] ${item.value}`" />
-              @:</el-select>
-            @:</el-form-item>
-            }else if(column.EffectType == "EnumSelector"){
-            @:<el-form-item label="@column.ColumnComment">
-              @:<el-select clearable="" v-model="queryParams.@(column.LowerPropertyName)" placeholder="请选择@(column.ColumnComment)">
-                @:<el-option v-for="(item,index) in dl('@(column.DictTypeCode)')" :key="index" :value="item.value" :label="`${item.name} (${item.code}-${item.value})`" />
+              @:<el-select clearable filterable v-model="queryParams.@(column.LowerPropertyName)" placeholder="请选择@(column.ColumnComment)">
+                @:<el-option v-for="(item,index) in dl('@(column.DictTypeCode)')" :key="index" :value="item.code" :label="`[${item.code}]${item.value}`" />
               @:</el-select>
             @:</el-form-item>
             }else if(column.EffectType == "ApiTreeSelect"){
@@ -67,7 +61,8 @@
                   @::options="@LowerFirstLetter(@column.FkEntityName)TreeData"
                   @:@:props="{ checkStrictly: true, emitPath: false, value: '@LowerFirstLetter(@column.ValueColumn)' }"
                   @:placeholder="请选择@(column.ColumnComment)"
-                  @:clearable=""
+                  @:clearable
+                  @:filterable
                   @:class="w100"
                   @:v-model="queryParams.@(column.LowerPropertyName)"
                   @:>
@@ -151,21 +146,15 @@
             }
           @:</template>
         @:</el-table-column>
-        } else if (@column.EffectType == "Select"){
-        @:<el-table-column prop="@column.LowerPropertyName" label="@column.ColumnComment" @(column.WhetherSortable == "Y" ? "sortable='custom'" : "") show-overflow-tooltip="" >
-          @:<template #default="scope">
-            @:<dict-label :value="scope.row.@column.LowerPropertyName" code="@column.DictTypeCode" prop-label="value" prop-value="code" />
-          @:</template>
-        @:</el-table-column>
-        } else if (@column.EffectType == "EnumSelector"){
-        {@ isStatus = column.NetType == "StatusEnum" && column.PropertyName == "Status"; }
+        } else if (column.EffectType == "Select" || column.EffectType == "EnumSelector") {
+        isStatus = column.NetType == "StatusEnum" && column.PropertyName == "Status";
         @:<el-table-column prop="@column.LowerPropertyName" label="@column.ColumnComment" @(column.WhetherSortable == "Y" ? "sortable='custom'" : "") show-overflow-tooltip="" @(isStatus ? $"v-auth=\"'{@Model.LowerClassName}:setStatus'\"": "")>
           @:<template #default="scope">
-          if (isStatus) {
-            @:<el-switch v-model="scope.row.@column.LowerPropertyName" :active-value="1" :inactive-value="2" size="small" @@change="change@(Model.ClassName)Status(scope.row)" />
-          } else {
-            @:<dict-label :value="scope.row.@column.LowerPropertyName" code="@column.DictTypeCode" />
-          }
+            if (isStatus) {
+              @:<el-switch v-model="scope.row.@column.LowerPropertyName" :active-value="1" :inactive-value="2" size="small" @@change="change@(Model.ClassName)Status(scope.row)" />
+            } else {
+              @:<DictLabel :value="scope.row.@column.LowerPropertyName" code="@column.DictTypeCode" />
+            }
           @:</template>
         @:</el-table-column>
         } else {

+ 5 - 6
Web/src/components/table/dictLabel.vue

@@ -5,18 +5,17 @@
 <script lang="ts" setup>
 import { useUserInfo } from '/@/stores/userInfo';
 import { reactive, onMounted } from 'vue';
-import { ElTag } from 'element-plus';
 
 const props = defineProps({
 	code: String,
 	value: Object,
 	propLabel: {
 		type: String,
-		default: 'name'
+		default: 'value'
 	},
 	propValue: {
 		type: String,
-		default: 'value'
+		default: 'code'
 	},
 	defaultValue: {
 		type: String,
@@ -26,12 +25,12 @@ const props = defineProps({
 
 const state = reactive({
   label: '' as string,
-	tagType: '' as string
+  tagType: '' as string
 });
 
 onMounted(() => {
-	const dictList = useUserInfo().getDictDatasByCode(props.code);
-	const dict = dictList?.find(x => x[props.propValue] == props.value + "") ?? {};
+	const dictList = useUserInfo().getDictDatasByCode(props.code as string);
+	const dict = dictList?.find((x: any) => x[props.propValue] == props.value + "") ?? {};
 	if (dict) {
 		state.label = dict[props.propLabel] || props.defaultValue;
 		state.tagType = dict.tagType;

+ 8 - 1
Web/src/views/system/codeGen/component/editCodeGenDialog.vue

@@ -152,7 +152,7 @@
 											<el-button icon="ele-Delete" type="danger" circle plain size="small" @click="() => state.ruleForm.tableUniqueList?.splice(k, 1)" />
 											<span class="ml5">字段</span>
 										</template>
-										<el-select v-model="state.ruleForm.tableUniqueList[k].columns" multiple filterable class="w100">
+										<el-select v-model="state.ruleForm.tableUniqueList[k].columns" @change="(val: any) => changeTableUniqueColumn(val, k)" multiple filterable clearable class="w100">
 											<el-option v-for="item in state.columnData" :key="item.columnName" :label="item.columnName + ' [' + item.columnComment + ']'" :value="item.columnName" />
 										</el-select>
 									</el-form-item>
@@ -245,6 +245,13 @@ const tableChanged = (item: any) => {
 	getColumnInfoList();
 };
 
+// 表唯一约束配置项字段改变事件
+const changeTableUniqueColumn = (value: any, index: number) => {
+  if (value?.length === 1 && !state.ruleForm.tableUniqueList[index].message) {
+    state.ruleForm.tableUniqueList[index].message = state.columnData.find((u: any) => u.columnName === value[0])?.columnComment;
+  }
+}
+
 const getColumnInfoList = async () => {
 	if (state.ruleForm.configId == '' || state.ruleForm.tableName == '') return;
 	var res = await getAPI(SysCodeGenApi).apiSysCodeGenColumnListByTableNameTableNameConfigIdGet(state.ruleForm.tableName, state.ruleForm.configId);