Bladeren bron

chore: 😁代码优化

喵你个旺呀 1 jaar geleden
bovenliggende
commit
48c2af3fdf

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

@@ -44,12 +44,18 @@ public class @(Model.ClassName)Service : IDynamicApiController, ITransient
           var queryFields = Model.TableField.Where(u => u.WhetherQuery == "Y");
           // 关键字模糊查询
           if (queryFields.Any(u => u.QueryType == "like")) {
-            @:.WhereIF(!string.IsNullOrEmpty(input.Keyword), u => @string.Join(" || ", queryFields.Where(u => u.QueryType == "like").Select(col => $"u.{col.PropertyName}.Contains(input.Keyword)")))
+            @:.WhereIF(!string.IsNullOrWhiteSpace(input.Keyword), u => @string.Join(" || ", queryFields.Where(u => u.QueryType == "like").Select(col => $"u.{col.PropertyName}.Contains(input.Keyword)")))
           }
+
+          // 单字段模糊查询
+          foreach(var column in queryFields.Where(u => u.QueryType == "like")) {
+            @:.WhereIF(!string.IsNullOrWhiteSpace(input.@(column.PropertyName)), u => u.@(column.PropertyName).Contains(input.@(column.PropertyName).Trim()))
+          }
+
           // 字段组合查询
-          foreach(var column in queryFields) {
+          foreach(var column in queryFields.Where(u => u.QueryType != "like")) {
             if (column.NetType.TrimEnd('?') == "string") {
-            @:.WhereIF(!string.IsNullOrWhiteSpace(input.@(column.PropertyName)), u => u.@(column.PropertyName)@(column.QueryType == "like" ? $".Contains(input.{column.PropertyName}.Trim())" : $" {column.QueryType} input.{column.PropertyName}.Trim()"))
+            @:.WhereIF(!string.IsNullOrWhiteSpace(input.@(column.PropertyName)), u => u.@(column.PropertyName) == input.@(column.PropertyName))
             } else if (column.NetType.TrimEnd('?') == "int" || column.NetType.TrimEnd('?') == "long") {
             @:.WhereIF(input.@(column.PropertyName) != null, u => u.@(column.PropertyName) @(column.QueryType) input.@(column.PropertyName))
             } else if (column.NetType.TrimEnd('?').EndsWith("Enum")) {

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

@@ -23,7 +23,7 @@ const state = reactive({
 	title: '',
 	loading: false,
 	showDialog: false,
-	ruleForm: {},
+	ruleForm: {} as any,
 	stores: @(Model.HasDictField || Model.HasEnumField || Model.HasConstField ? "useUserInfo()" : "{}"),
 	dropdownData: {} as any,
 });
@@ -41,13 +41,13 @@ onMounted(async () => {
   @if (Model.DropdownFieldList.Count > 0) {
   @:const data = await @(Model.LowerClassName)Api.getDropdownData(false).then(res => res.data.result) ?? {};
   @foreach (var column in Model.DropdownFieldList) {
-  @:state.dropdownData.@(column.LowerPropertyName) = data.@(column.LowerPropertyName);
+  @:state.dropdownData.@(column.LowerPropertyName) = data.@(column.LowerPropertyName) ?? [];
   }
   }
 });
 
 // 打开弹窗
-const openDialog = async (row: any, title) => {
+const openDialog = async (row: any, title: string) => {
 	state.title = title;
 	row = row ?? { @(Model.GetAddDefaultValue()) };
 	state.ruleForm = row.id ? await @(Model.LowerClassName)Api.detail(row.id).then(res => res.data.result) : JSON.parse(JSON.stringify(row));
@@ -108,7 +108,7 @@ defineExpose({ openDialog });
 						if (column.IsSelectorEffectType) {
 							if (column.EffectType == "ApiTreeSelector") {
 							@:<el-cascader
-								@::options="state.dropdownData.@(column.LowerPropertyName) ?? []"
+								@::options="state.dropdownData.@(column.LowerPropertyName)"
 								@::props="{ checkStrictly: true, emitPath: false }"
 								@:v-model="state.ruleForm.@(column.LowerPropertyName)"
 								@:placeholder="请选择@(column.ColumnComment)"
@@ -123,11 +123,11 @@ defineExpose({ openDialog });
 							} else {
 							@:<el-select clearable filterable v-model="state.ruleForm.@(column.LowerPropertyName)" placeholder="请选择@(column.ColumnComment)">
 								if (column.EffectType == "ForeignKey") {
-								@:<el-option v-for="(item,index) in state.dropdownData.@(column.LowerPropertyName) ?? []" :key="index" :value="item.value" :label="item.label" />
+								@:<el-option v-for="(item,index) in state.dropdownData.@(column.LowerPropertyName)" :key="index" :value="item.value" :label="item.label" />
 								} else if (column.EffectType == "ConstSelector") {
 								@:<el-option v-for="(item, index) in state.stores.getConstDataByTypeCode('@column.DictTypeCode')" :key="index" :label="item.name" :value="item.code" />
 								} else if (column.EffectType == "DictSelector" || column.EffectType == "EnumSelector") {
-								@:<el-option v-for="(item, index) in state.stores.getDictDataByCode('@(column.DictTypeCode)') ?? []"  :key="index" :value="item.code" :label="`[${item.code}]${item.value}`" />
+								@:<el-option v-for="(item, index) in state.stores.getDictDataByCode('@(column.DictTypeCode)')"  :key="index" :value="item.code" :label="`[${item.code}]${item.value}`" />
 								}
 							@:</el-select>
 							}

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

@@ -35,8 +35,8 @@ const state = reactive({
   stores: @(Model.HasDictField || Model.HasEnumField || Model.HasConstField ? "useUserInfo()" : "{}"),
   showAdvanceQueryUI: @(Model.HasLikeQuery ? "false" : "true"),
   dropdownData: {} as any,
-  selectData: [] as [],
-  tableQueryParams: {},
+  selectData: [] as any[],
+  tableQueryParams: {} as any,
   tableParams: {
     page: 1,
     pageSize: 20,
@@ -143,27 +143,24 @@ handleQuery();
           }
           foreach (var column in Model.QueryWhetherList) {
           @:<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="state.showAdvanceQueryUI">
-            if(column.EffectType == "Input" || column.EffectType == "InputTextArea"){
             @:<el-form-item label="@column.ColumnComment">
+            if(column.EffectType == "Input" || column.EffectType == "InputTextArea"){
               @:<el-input v-model="state.tableQueryParams.@(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="state.tableQueryParams.@(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="state.tableQueryParams.@(column.LowerPropertyName)"  clearable placeholder="请输入@(column.ColumnComment)"/>
-            @:</el-form-item>
-            }else if(column.EffectType == "ForeignKey") {
-            @:<el-form-item label="@column.ColumnComment">
+            }else if(column.IsSelectorEffectType || column.EffectType == "ForeignKey") {
               @:<el-select clearable filterable v-model="state.tableQueryParams.@(column.LowerPropertyName)" placeholder="请选择@(column.ColumnComment)">
+                if (column.EffectType == "ForeignKey") {
                 @:<el-option v-for="(item,index) in state.dropdownData.@(column.LowerPropertyName) ?? []" :key="index" :value="item.value" :label="item.label" />
+                } else if (column.EffectType == "ConstSelector") {
+                @:<el-option v-for="(item, index) in state.stores.getConstDataByTypeCode('@column.DictTypeCode')" :key="index" :label="item.name" :value="item.code" />
+                } else {
+                @:<el-option v-for="(item,index) in state.stores.getDictDataByCode('@(column.DictTypeCode)')" :key="index" :value="item.code" :label="`[${item.code}]${item.value}`" />
+                }
               @:</el-select>
-            @:</el-form-item>
             }else if(column.EffectType == "ApiTreeSelector"){
-            @:<el-form-item label="@column.ColumnComment">
               @:<el-cascader
                 @::options="state.dropdownData.@(column.LowerPropertyName) ?? []"
                 @:@:props="{ checkStrictly: true, emitPath: false }"
@@ -178,20 +175,15 @@ handleQuery();
                     @:<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
                   @:</template>
               @:</el-cascader>
-            @:</el-form-item>
-            }else if(column.EffectType == "DictSelector" || column.EffectType == "EnumSelector"){
-            @:<el-form-item label="@column.ColumnComment">
-              @:<el-select clearable filterable v-model="state.tableQueryParams.@(column.LowerPropertyName)" placeholder="请选择@(column.ColumnComment)">
-                @:<el-option v-for="(item,index) in state.stores.getDictDataByCode('@(column.DictTypeCode)')" :key="index" :value="item.code" :label="`[${item.code}]${item.value}`" />
-              @:</el-select>
-            @:</el-form-item>
-            }else if(column.EffectType == "DatePicker"){
-            @:<el-form-item label="@column.ColumnComment">
+            } else if (column.EffectType == "DatePicker"){
               if (column.QueryType == "~") {
               @:<el-date-picker type="daterange" v-model="state.tableQueryParams.@(column.LowerPropertyName)Range"  value-format="YYYY-MM-DD HH:mm:ss" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" />
               } else {
               @:<el-date-picker placeholder="请选择@(column.ColumnComment)" value-format="YYYY/MM/DD"  v-model="state.tableQueryParams.@(column.LowerPropertyName)" />
               }
+            } else {
+              @:<el-input v-model="state.tableQueryParams.@(column.LowerPropertyName)" clearable placeholder="请输入@(column.ColumnComment)"/>
+            }
             @:</el-form-item>
           @:</el-col>
           }
@@ -282,8 +274,8 @@ handleQuery();
       <el-pagination 
               v-model:currentPage="state.tableParams.page"
               v-model:page-size="state.tableParams.pageSize"
-              @@size-change="(val) => handleQuery({ pageSize: val })"
-              @@current-change="(val) => handleQuery({ page: val })"
+              @@size-change="(val: any) => handleQuery({ pageSize: val })"
+              @@current-change="(val: any) => handleQuery({ page: val })"
               layout="total, sizes, prev, pager, next, jumper"
               :page-sizes="[10, 20, 50, 100, 200, 500]"
               :total="state.tableParams.total"

+ 4 - 1
Web/src/components/table/dictLabel.vue

@@ -8,7 +8,10 @@ import { reactive, onMounted, watch } from 'vue';
 
 const props = defineProps({
 	code: String,
-	value: Object,
+	value: {
+    type: null,
+    default: null
+  },
 	propLabel: {
 		type: String,
 		default: 'value',

+ 6 - 15
Web/src/components/table/importData.vue

@@ -39,7 +39,7 @@
 <script lang="ts" setup name="sysImportData">
 import type {UploadInstance, UploadProps, UploadRawFile, UploadRequestOptions} from 'element-plus'
 import { ElUpload, ElMessage, genFileId } from 'element-plus';
-import { downloadFile } from '/@/utils/downloadFile';
+import { downloadStreamFile } from '/@/utils/downloadFile';
 import { reactive, ref } from 'vue';
 
 const uploadRef = ref<UploadInstance>();
@@ -70,15 +70,15 @@ const handleImportData = (opt: UploadRequestOptions) => {
   state.loading = true;
   props.import(opt.file).then((res: any) => {
     try {
-      handleFileStream(res);
-	  state.isShowDialog = false;
+      downloadStreamFile(res);
+	    state.isShowDialog = false;
       emit('refresh');
     } catch {
       ElMessage.error(res.data.message || '上传失败');
     }
-	state.loading = false;
+	  state.loading = false;
   }).catch(() => {
-	state.loading = false;
+	  state.loading = false;
   }).finally(() => {
     uploadRef.value?.clearFiles();
   });
@@ -86,16 +86,7 @@ const handleImportData = (opt: UploadRequestOptions) => {
 
 // 下载模板
 const download = () => {
-	props.download().then((res: any) => handleFileStream(res)).catch((res: any) => ElMessage.error('下载错误: ' + res));
-}
-
-// 下载文件流
-const handleFileStream = (res: any) => {
-  const contentType = res.headers['content-type'];
-  const contentDisposition = res.headers['content-disposition'];
-  const filename = decodeURIComponent(contentDisposition.split('; ')[1].split('=')[1])
-  const blob = res.data instanceof Blob ? res.data : new Blob([res.data], { type: contentType });
-  downloadFile(window.URL.createObjectURL(blob), filename);
+	props.download().then((res: any) => downloadStreamFile(res)).catch((res: any) => ElMessage.error('下载错误: ' + res));
 }
 
 // 导出对象