Browse Source

feat: implement date and datetime range query support in controllers and Vue components for enhanced filtering capabilities

lengleng 1 month ago
parent
commit
2e85281a53
5 changed files with 118 additions and 2 deletions
  1. 14 0
      multiple/主子Contoller.java
  2. 14 0
      single/Controller.java
  3. 39 1
      tree/树形Controller.java
  4. 18 1
      tree/树形实体.java
  5. 33 0
      tree/树形表格.vue

+ 14 - 0
multiple/主子Contoller.java

@@ -5,8 +5,22 @@ import cn.hutool.core.util.StrUtil;
 #end
 #end
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.DateUtil;
+#set($hasDateRange = false)
+#set($hasDateTimeRange = false)
+#foreach($field in $queryList)
+#if($field.queryFormType == 'date-range')
+#set($hasDateRange = true)
+#end
+#if($field.queryFormType == 'datetime-range')
+#set($hasDateTimeRange = true)
+#end
+#end
+#if($hasDateRange)
 import java.time.LocalDate;
 import java.time.LocalDate;
+#end
+#if($hasDateTimeRange)
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
+#end
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

+ 14 - 0
single/Controller.java

@@ -6,8 +6,22 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.DateUtil;
+#set($hasDateRange = false)
+#set($hasDateTimeRange = false)
+#foreach($field in $queryList)
+#if($field.queryFormType == 'date-range')
+#set($hasDateRange = true)
+#end
+#if($field.queryFormType == 'datetime-range')
+#set($hasDateTimeRange = true)
+#end
+#end
+#if($hasDateRange)
 import java.time.LocalDate;
 import java.time.LocalDate;
+#end
+#if($hasDateTimeRange)
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
+#end
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

+ 39 - 1
tree/树形Controller.java

@@ -5,6 +5,22 @@ import cn.hutool.core.util.StrUtil;
 #end
 #end
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollUtil;
+#set($hasDateRange = false)
+#set($hasDateTimeRange = false)
+#foreach($field in $queryList)
+#if($field.queryFormType == 'date-range')
+#set($hasDateRange = true)
+#end
+#if($field.queryFormType == 'datetime-range')
+#set($hasDateTimeRange = true)
+#end
+#end
+#if($hasDateRange)
+import java.time.LocalDate;
+#end
+#if($hasDateTimeRange)
+import java.time.LocalDateTime;
+#end
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import ${package}.common.core.util.R;
 import ${package}.common.core.util.R;
@@ -74,7 +90,29 @@ public class ${ClassName}Controller {
 #else
 #else
 #set($expression="Objects.nonNull")
 #set($expression="Objects.nonNull")
 #end
 #end
-#if($field.queryType == '=')
+#if($field.queryFormType == 'date-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, LocalDate.parse(range[0]));
+			}
+			if (StrUtil.isNotBlank(range[1])) {
+				wrapper.le(${ClassName}Entity::$getAttrName, LocalDate.parse(range[1]));
+			}
+		}
+#elseif($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, LocalDateTime.parse(range[0]));
+			}
+			if (StrUtil.isNotBlank(range[1])) {
+				wrapper.le(${ClassName}Entity::$getAttrName, LocalDateTime.parse(range[1]));
+			}
+		}
+#elseif($field.queryType == '=')
 		wrapper.eq($expression($var),${ClassName}Entity::$getAttrName,$var);
 		wrapper.eq($expression($var),${ClassName}Entity::$getAttrName,$var);
 #elseif( $field.queryType == 'like' )
 #elseif( $field.queryType == 'like' )
 		wrapper.like($expression($var),${ClassName}Entity::$getAttrName,$var);
 		wrapper.like($expression($var),${ClassName}Entity::$getAttrName,$var);

+ 18 - 1
tree/树形实体.java

@@ -6,6 +6,8 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.FieldNameConstants;
 import lombok.experimental.FieldNameConstants;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
 #if($isTenant)
 #if($isTenant)
 import ${package}.common.core.util.TenantTable;
 import ${package}.common.core.util.TenantTable;
 #end
 #end
@@ -50,10 +52,25 @@ public class ${ClassName}Entity extends Model<${ClassName}Entity> {
 	@TableField(fill = FieldFill.INSERT)
 	@TableField(fill = FieldFill.INSERT)
 #end
 #end
     @Schema(description="$comment"#if($field.hidden),hidden=$field.hidden#end)
     @Schema(description="$comment"#if($field.hidden),hidden=$field.hidden#end)
-#if($field.formType == 'checkbox')
+#if($field.fieldType == 'date')
+    private LocalDate $field.attrName;
+#elseif($field.fieldType == 'datetime')
+    private LocalDateTime $field.attrName;
+#elseif($field.formType == 'checkbox')
     private ${field.attrType}[] $field.attrName;
     private ${field.attrType}[] $field.attrName;
 #else
 #else
     private $field.attrType $field.attrName;
     private $field.attrType $field.attrName;
 #end    
 #end    
 #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
 }
 }

+ 33 - 0
tree/树形表格.vue

@@ -30,6 +30,16 @@
               :value-format="dateStr"
               :value-format="dateStr"
             />
             />
           </el-form-item>
           </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="YYYY-MM-DD"
+            />
+          </el-form-item>
 #elseif($field.queryFormType == 'datetime')
 #elseif($field.queryFormType == 'datetime')
           <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else${field.attrName}#end" prop="${field.attrName}">
           <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else${field.attrName}#end" prop="${field.attrName}">
             <el-date-picker 
             <el-date-picker 
@@ -39,6 +49,16 @@
               :value-format="dateTimeStr"
               :value-format="dateTimeStr"
             />
             />
           </el-form-item>
           </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="YYYY-MM-DD HH:mm:ss"
+            />
+          </el-form-item>
 #elseif($field.formType == 'radio')
 #elseif($field.formType == 'radio')
           <el-form-item label="#if(${field.fieldComment})${field.fieldComment}#else${field.attrName}#end" prop="${field.attrName}">
           <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}">
             <el-radio-group v-model="state.queryForm.${field.attrName}">
@@ -142,6 +162,19 @@
             <dict-tag :options="${field.fieldDict}" :value="scope.row.${field.attrName}" />
             <dict-tag :options="${field.fieldDict}" :value="scope.row.${field.attrName}" />
           </template>
           </template>
         </el-table-column>
         </el-table-column>
+#elseif($field.formType == 'upload-img')
+        <el-table-column prop="${field.attrName}" label="#if(${field.fieldComment})${field.fieldComment}#else${field.attrName}#end" width="120">
+          <template #default="scope">
+            <el-image 
+              v-if="scope.row.${field.attrName}"
+              :src="baseURL + scope.row.${field.attrName}" 
+              fit="cover"
+              class="w-20 h-20 rounded"
+              :preview-teleported="true"
+            />
+            <span v-else class="text-gray-400">暂无图片</span>
+          </template>
+        </el-table-column>
 #else
 #else
         <el-table-column 
         <el-table-column 
           prop="${field.attrName}" 
           prop="${field.attrName}"