Просмотр исходного кода

feat: 增强树选择器显示字段为多选

喵你个旺呀 1 год назад
Родитель
Сommit
d1e529a347

+ 21 - 17
Admin.NET/Admin.NET.Web.Entry/wwwroot/template/Output.cs.vm

@@ -33,7 +33,7 @@ if(column.EffectType == "fk")
     @:/// <summary>
     @:/// @(column.ColumnComment) 描述 
     @:/// </summary>
-    @:public string? @(column.PropertyName)@(column.DisplayColumn) { get; set; } 
+    @:public string? @(column.PropertyName)Display { get; set; } 
 }else{
     @:public @column.NetType @(column.PropertyName) { get; set; }
 }
@@ -43,22 +43,26 @@ if(column.EffectType == "fk")
 @foreach (var column in Model.TableField){
 if (column.EffectType == "ApiTreeSelect"){
 @:
-    @:// 使用实际实体@(column.FkTableName),所以这里就删了
-    @:/*
-    @:[SugarTable("@(column.FkTableName)")]
-    @:public class @(column.FkEntityName)TreeOutput: EntityBaseId
-    @:{
-        @:[SugarColumn(ColumnName = "@(column.DisplayColumn)")]
-        @:public @(Model.GetColumnNetType(@column.FkTableName,@column.DisplayColumn)) Label { get; set; }
-
-        @:[SugarColumn(ColumnName = "@(column.ValueColumn)", IsPrimaryKey = true, IsIdentity = false)]
-        @:public @(Model.GetColumnNetType(@column.FkTableName,@column.ValueColumn))  Value { get; set; }
-
-        @:public @(Model.GetColumnNetType(@column.FkTableName,@column.PidColumn)) @column.PidColumn { get; set; }
-        @:[SugarColumn(IsIgnore = true)]
-        @:public List<@(column.FkEntityName)TreeOutput> Children { get; set; }
-    @:}
-    @:*/
+@:/// <summary>
+@:/// @(Model.BusName)树选择器输出参数
+@:/// </summary>
+@:public class @(column.FkEntityName)TreeOutput: @(column.FkEntityName)
+@:{
+    @:/// <summary>
+    @:/// 显示文本
+    @:/// </summary>
+    @:public @(@column.DisplayColumn.Contains(",") ? "string" : Model.GetColumnNetType(@column.FkTableName,@column.DisplayColumn)) Label { get; set; }
+    @:
+    @:/// <summary>
+    @:/// 选项值
+    @:/// </summary>
+    @:public @(Model.GetColumnNetType(@column.FkTableName, @column.ValueColumn)) Value { get; set; }
+    @:
+    @:/// <summary>
+    @:/// 子集列表
+    @:/// </summary>
+    @:public List<@(column.FkEntityName)TreeOutput> Children { get; set; }
+@:}
 }
 }
 @if (Model.TableField.Any(x => x.WhetherImport == "Y")) {

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

@@ -20,6 +20,7 @@ using Microsoft.AspNetCore.Http;
     var dictTableField = Model.TableField.Where(x => x.WhetherImport == "Y" && x.EffectType == "Select") ?? default;
     var hasdictService = dictTableField.Count() > 0;
     var importField = Model.TableField.Where(x => x.WhetherImport == "Y");
+    var displayColumnList = new List<string>();
 }
 namespace @Model.NameSpace.Service;
 
@@ -100,9 +101,10 @@ if (column.QueryWhether == "Y"){
                 if(column.EffectType == "fk"){
                 @:@(column.PropertyName) = u.@(column.PropertyName), 
                 @:@(column.PropertyName)@(column.FkColumnName) = @(joinTableAlias).@(column.FkColumnName),
-                } else if(column.EffectType == "ApiTreeSelect"){  
+                } else if(column.EffectType == "ApiTreeSelect"){
+                displayColumnList = column.DisplayColumn.Split(",").Select(u => $"{{{joinTableAlias}.{u}}}").ToList();
                 @:@(column.PropertyName) = u.@(column.PropertyName),  
-                @:@(column.PropertyName)@(column.DisplayColumn) = @(joinTableAlias).@(column.DisplayColumn),
+                @:@(column.PropertyName)Display = $"@(string.Join("-", displayColumnList))",
                 } else if(column.NetType?.TrimEnd('?').EndsWith("Enum") == true){
                 @:@(column.PropertyName) = u.@(column.PropertyName),
                 } else {
@@ -269,12 +271,19 @@ if(column.EffectType == "Upload"){
 @foreach (var column in Model.TableField){
 if(column.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("@(column.FkEntityName)Tree")){
 @:
-    @{definedObjects.Add("@(column.FkEntityName)Tree", 1);}
-    @:[HttpGet("@(column.FkEntityName)Tree")]
-    @:[DisplayName("获取@(column.FkEntityName)Tree")]
-    @:public async Task<dynamic> @(column.FkEntityName)Tree()
+    definedObjects.Add("@(column.FkEntityName)Tree", 1);
+    @:/// <summary>
+    @:/// 获取@(column.ColumnComment)选择数据
+    @:/// </summary>
+    @:[ApiDescriptionSettings(Name = "@(column.FkEntityName)Tree")]
+    @:[DisplayName("获取@(column.ColumnComment)选择数据")]
+    @:public async Task<List<@(column.FkEntityName)TreeOutput>> @(column.FkEntityName)Tree()
     @:{
-        @:return await _@(Model.LowerClassName)Rep.Context.Queryable<@(column.FkEntityName)>().ToTreeAsync(u => u.Children, u => u.@(column.PidColumn), 0);
+        displayColumnList = column.DisplayColumn.Split(",").Select(u => $"{{u.{u}}}").ToList();
+        @:return await _@(Model.LowerClassName)Rep.Context.Queryable<@(column.FkEntityName)>().Select(u => new @(column.FkEntityName)TreeOutput {
+            @:Label = $"@(string.Join("-", displayColumnList))",
+            @:Value = u.@column.ValueColumn
+        @:}, true).ToTreeAsync(u => u.Children, u => u.@(column.PidColumn), 0);
     @:}
 }
 }

+ 4 - 2
Admin.NET/Admin.NET.Web.Entry/wwwroot/template/editDialog.vue.vm

@@ -2,6 +2,7 @@
 	var definedObjects = new Dictionary<string, int>();
 	var pkField = Model.TableField.Where(c => c.ColumnKey == "True").FirstOrDefault();
 	var pkFieldName = LowerFirstLetter(pkField.PropertyName);
+	var displayColumnList = new List<string>();
 }
 <template>
 	<div class="@(Model.LowerClassName)-container">
@@ -30,18 +31,19 @@
 						</el-form-item>
 					</el-col>
 					}else if(column.EffectType == "ApiTreeSelect"){
+					displayColumnList = column.DisplayColumn.Split(",").Select(u => $"${{data.{LowerFirstLetter(u)}}}").ToList();
 					@:<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						@:<el-form-item label="@column.ColumnComment" prop="@(column.LowerPropertyName)">
 							<el-cascader
 								@:options="@LowerFirstLetter(@column.FkEntityName)TreeData"
-								@:props="{ checkStrictly: true, emitPath: false, value: '@LowerFirstLetter(@column.ValueColumn)', label: '@LowerFirstLetter(@column.DisplayColumn)' }"
+								@:props="{ checkStrictly: true, emitPath: false, value: '@LowerFirstLetter(@column.ValueColumn)' }"
 								placeholder="请选择@(column.ColumnComment)"
 								clearable=""
 								class="w100"
 								v-model="ruleForm.@(column.LowerPropertyName)"
 							>
 								<template #default="{ node, data }">
-									<span>{{ data.name }}</span>
+									<span>{{ data.label }}</span>
 									<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
 								</template>
 							</el-cascader>

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

@@ -124,7 +124,7 @@
             }else if(column.EffectType == "fk"){
             @:<span>{{scope.row.@LowerFirstLetter(@column.PropertyName)@(column.FkColumnName)}}</span>
             }else if(column.EffectType == "ApiTreeSelect"){
-            @:<span>{{scope.row.@LowerFirstLetter(@column.PropertyName)@(column.DisplayColumn)}}</span>
+            @:<span>{{scope.row.@LowerFirstLetter(@column.PropertyName)Display}}</span>
             }else if(column.EffectType == "Switch"){
             @:<el-tag v-if="scope.row.@(column.LowerPropertyName)"> 是 </el-tag>
             @:<el-tag type="danger" v-else> 否 </el-tag>

+ 5 - 4
Web/src/views/system/codeGen/component/treeDialog.vue

@@ -24,8 +24,8 @@
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-						<el-form-item label="显示字段" prop="displayColumn" :rules="[{ required: true, message: '显示字段不能为空', trigger: 'blur' }]">
-							<el-select v-model="state.ruleForm.displayColumn" class="w100">
+						<el-form-item label="显示字段" prop="displayColumns" :rules="[{ required: true, message: '显示字段不能为空', trigger: 'blur' }]">
+							<el-select v-model="state.ruleForm.displayColumns" multiple 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>
@@ -117,7 +117,7 @@ const openDialog = async (row: any) => {
 	if (rowdata.fkConfigId) {
 		await getDbList();
 		state.ruleForm.tableName = rowdata.fkTableName;
-		state.ruleForm.displayColumn = rowdata.displayColumn;
+		state.ruleForm.displayColumns = rowdata.displayColumn?.split(",");
 		state.ruleForm.valueColumn = rowdata.valueColumn;
 		state.ruleForm.pidColumn = rowdata.pidColumn;
 		state.ruleForm.configId = rowdata.fkConfigId;
@@ -157,7 +157,8 @@ const cancel = () => {
 const submit = () => {
 	ruleFormRef.value.validate(async (valid: boolean) => {
 		if (!valid) return;
-
+		state.ruleForm.displayColumn = state.ruleForm.displayColumns.join()
+		state.ruleForm.displayColumns = undefined;
 		closeDialog();
 	});
 };