Browse Source

feat: implement date and datetime range query support in entity and form components for enhanced filtering capabilities

lengleng 1 month ago
parent
commit
ee291d6bb7

+ 13 - 1
multiple/主子Contoller.java

@@ -4,6 +4,7 @@ package ${package}.${moduleName}.controller;
 import cn.hutool.core.util.StrUtil;
 #end
 import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -75,7 +76,18 @@ public class ${ClassName}Controller {
 #else
 #set($expression="Objects.nonNull")
 #end
-#if($field.queryType == '=')
+#if($field.queryFormType == 'date-range' || $field.queryFormType == 'datetime-range')
+		// ${field.fieldComment}范围查询
+		if (ArrayUtil.isNotEmpty(${className}.get${field.attrName.substring(0,1).toUpperCase()}${field.attrName.substring(1)}Range())) {
+			String[] range = ${className}.get${field.attrName.substring(0,1).toUpperCase()}${field.attrName.substring(1)}Range();
+			if (StrUtil.isNotBlank(range[0])) {
+				wrapper.ge(${ClassName}Entity::$getAttrName, range[0]);
+			}
+			if (StrUtil.isNotBlank(range[1])) {
+				wrapper.le(${ClassName}Entity::$getAttrName, range[1]);
+			}
+		}
+#elseif($field.queryType == '=')
 		wrapper.eq($expression($var),${ClassName}Entity::$getAttrName,$var);
 #elseif( $field.queryType == 'like' )
 		wrapper.like($expression($var),${ClassName}Entity::$getAttrName,$var);

+ 12 - 0
multiple/主子表单.vue

@@ -63,6 +63,16 @@
             <el-date-picker type="datetime" placeholder="请选择#if(${field.fieldComment})${field.fieldComment}#else${field.fieldName}#end" v-model="form.${field.attrName}" :value-format="dateTimeStr"></el-date-picker>
           </el-form-item>
         </el-col>
+#elseif($field.formType == 'date-range')
+          <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else${field.fieldName}#end" prop="${field.attrName}Range">
+            <el-date-picker type="daterange" start-placeholder="开始日期" end-placeholder="结束日期" v-model="form.${field.attrName}Range" :value-format="dateStr" range-separator="至"></el-date-picker>
+          </el-form-item>
+        </el-col>
+#elseif($field.formType == 'datetime-range')
+          <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else${field.fieldName}#end" prop="${field.attrName}Range">
+            <el-date-picker type="datetimerange" start-placeholder="开始时间" end-placeholder="结束时间" v-model="form.${field.attrName}Range" :value-format="dateTimeStr" range-separator="至"></el-date-picker>
+          </el-form-item>
+        </el-col>
 #elseif($field.formType == 'number')
           <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else${field.fieldName}#end" prop="${field.attrName}">
             <el-input-number :min="1" :max="1000" v-model="form.${field.attrName}" placeholder="请输入#if(${field.fieldComment})${field.fieldComment}#else${field.fieldName}#end"></el-input-number>
@@ -157,6 +167,8 @@ const form = reactive({
   ${field.attrName}: 0, // ${field.fieldComment}
 #elseif($field.formType == 'checkbox')
   ${field.attrName}: [], // ${field.fieldComment}
+#elseif($field.formType == 'date-range' || $field.formType == 'datetime-range')
+  ${field.attrName}Range: [], // ${field.fieldComment}范围
 #else
   ${field.attrName}: '', // ${field.fieldComment}
 #end

+ 22 - 0
multiple/主子表格.vue

@@ -38,6 +38,28 @@
               v-model="state.queryForm.${field.attrName}">
             </el-date-picker>
           </el-form-item>
+#elseif($field.queryFormType == 'date-range')
+          <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else${field.attrName}#end" prop="${field.attrName}Range">
+            <el-date-picker 
+              type="daterange" 
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              v-model="state.queryForm.${field.attrName}Range"
+              :value-format="dateStr"
+              range-separator="至">
+            </el-date-picker>
+          </el-form-item>
+#elseif($field.queryFormType == 'datetime-range')
+          <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else${field.attrName}#end" prop="${field.attrName}Range">
+            <el-date-picker 
+              type="datetimerange" 
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              v-model="state.queryForm.${field.attrName}Range"
+              :value-format="dateTimeStr"
+              range-separator="至">
+            </el-date-picker>
+          </el-form-item>
 #elseif($field.formType == 'radio')
           <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else${field.attrName}#end" prop="${field.attrName}">
             <el-radio-group v-model="state.queryForm.${field.attrName}">

+ 11 - 0
multiple/主实体.java

@@ -61,4 +61,15 @@ public class ${ClassName}Entity extends Model<${ClassName}Entity> {
     @TableField(exist = false)
     @EntityMapping(thisField = "$mainField", joinField = "$childField")
     private List<${ChildClassName}Entity> ${childClassName}List;
+
+#foreach ($field in $queryList)
+#if($field.queryFormType == 'date-range' || $field.queryFormType == 'datetime-range')
+	/**
+	* ${field.fieldComment}范围查询
+	*/
+	@TableField(exist = false)
+    @Schema(description="${field.fieldComment}范围查询", hidden=true)
+    private String[] ${field.attrName}Range;
+#end
+#end
 }

+ 13 - 1
single/Controller.java

@@ -5,6 +5,7 @@ import cn.hutool.core.util.StrUtil;
 #end
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -76,7 +77,18 @@ public class ${ClassName}Controller {
 #else
 #set($expression="Objects.nonNull")
 #end
-#if($field.queryType == '=')
+#if($field.queryFormType == 'date-range' || $field.queryFormType == 'datetime-range')
+		// ${field.fieldComment}范围查询
+		if (ArrayUtil.isNotEmpty(${className}.get${field.attrName.substring(0,1).toUpperCase()}${field.attrName.substring(1)}Range())) {
+			String[] range = ${className}.get${field.attrName.substring(0,1).toUpperCase()}${field.attrName.substring(1)}Range();
+			if (StrUtil.isNotBlank(range[0])) {
+				wrapper.ge(${ClassName}Entity::$getAttrName, range[0]);
+			}
+			if (StrUtil.isNotBlank(range[1])) {
+				wrapper.le(${ClassName}Entity::$getAttrName, range[1]);
+			}
+		}
+#elseif($field.queryType == '=')
 		wrapper.eq($expression($var),${ClassName}Entity::$getAttrName,$var);
 #elseif( $field.queryType == 'like' )
 		wrapper.like($expression($var),${ClassName}Entity::$getAttrName,$var);

+ 11 - 0
single/实体.java

@@ -54,4 +54,15 @@ public class ${ClassName}Entity extends Model<${ClassName}Entity> {
     private $field.attrType $field.attrName;
 #end    
 #end
+
+#foreach ($field in $queryList)
+#if($field.queryFormType == 'date-range' || $field.queryFormType == 'datetime-range')
+	/**
+	* ${field.fieldComment}范围查询
+	*/
+	@TableField(exist = false)
+    @Schema(description="${field.fieldComment}范围查询", hidden=true)
+    private String[] ${field.attrName}Range;
+#end
+#end
 }

+ 13 - 1
single/表单.vue

@@ -1,7 +1,7 @@
 <template>
   <el-dialog :title="form.${pk.attrName} ? '编辑' : '新增'" v-model="visible"
     :close-on-click-modal="false" draggable>
-    <el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="90px" v-loading="loading">
+    <el-form ref="dataFormRef" :model="form" :rules="dataRules" label-width="90px" v-loading="loading">
       <el-row :gutter="24">
 #foreach($field in $formList)
 #if($field.attrName != ${pk.attrName})
@@ -64,6 +64,16 @@
             <el-date-picker type="datetime" placeholder="请选择#if(${field.fieldComment})${field.fieldComment}#else${field.attrName}#end" v-model="form.${field.attrName}" :value-format="dateTimeStr"></el-date-picker>
           </el-form-item>
         </el-col>
+#elseif($field.formType == 'date-range')
+          <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else${field.attrName}#end" prop="${field.attrName}Range">
+            <el-date-picker type="daterange" start-placeholder="开始日期" end-placeholder="结束日期" v-model="form.${field.attrName}Range" :value-format="dateStr" range-separator="至"></el-date-picker>
+          </el-form-item>
+        </el-col>
+#elseif($field.formType == 'datetime-range')
+          <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else${field.attrName}#end" prop="${field.attrName}Range">
+            <el-date-picker type="datetimerange" start-placeholder="开始时间" end-placeholder="结束时间" v-model="form.${field.attrName}Range" :value-format="dateTimeStr" range-separator="至"></el-date-picker>
+          </el-form-item>
+        </el-col>
 #elseif($field.formType == 'number')
           <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else${field.attrName}#end" prop="${field.attrName}">
             <el-input-number :min="1" :max="1000" v-model="form.${field.attrName}" placeholder="请输入#if(${field.fieldComment})${field.fieldComment}#else${field.attrName}#end"></el-input-number>
@@ -130,6 +140,8 @@ const form = reactive({
   ${field.attrName}: 0, // ${field.fieldComment}
 #elseif($field.formType == 'checkbox')
   ${field.attrName}: [], // ${field.fieldComment}
+#elseif($field.formType == 'date-range' || $field.formType == 'datetime-range')
+  ${field.attrName}Range: [], // ${field.fieldComment}范围
 #else
   ${field.attrName}: '', // ${field.fieldComment}
 #end

+ 22 - 0
single/表格.vue

@@ -39,6 +39,28 @@
               :value-format="dateTimeStr"
             />
           </el-form-item>
+#elseif($field.queryFormType == 'date-range')
+          <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else${field.attrName}#end" prop="${field.attrName}Range">
+            <el-date-picker 
+              type="daterange" 
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              v-model="state.queryForm.${field.attrName}Range"
+              :value-format="dateStr"
+              range-separator="至"
+            />
+          </el-form-item>
+#elseif($field.queryFormType == 'datetime-range')
+          <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else${field.attrName}#end" prop="${field.attrName}Range">
+            <el-date-picker 
+              type="datetimerange" 
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              v-model="state.queryForm.${field.attrName}Range"
+              :value-format="dateTimeStr"
+              range-separator="至"
+            />
+          </el-form-item>
 #elseif($field.formType == 'radio')
           <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else${field.attrName}#end" prop="${field.attrName}">
             <el-radio-group v-model="state.queryForm.${field.attrName}">