From 41de66c2f92503b7514fb1d4544f2b1cc0ca3174 Mon Sep 17 00:00:00 2001 From: Odboy Date: Thu, 5 Feb 2026 22:43:45 +0800 Subject: [PATCH] =?UTF-8?q?feat(system):=20=E4=BC=98=E5=8C=96=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E8=A1=A8=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=B9=B6=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=9F=A5=E8=AF=A2=E6=90=9C=E7=B4=A2=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在SystemQueryMenuArgs中添加模糊查询注解支持 - 重构KitDynamicTableResponse类为泛型实现,支持更灵活的数据类型 - 新增KitDynamicTableUtil工具类提供排序和查询条件构建功能 - 添加多种查询方式的API接口实现 --- .../src/api/features/cute-dynamic-table.js | 10 ++- .../advanced/CuteDynamicTableDemo.vue | 2 +- .../model/request/SystemQueryMenuArgs.java | 3 + .../features/CuteDynamicTableDemoApi.java | 34 +++++++++- .../core/KitDynamicTableResponse.java | 66 +++++++++++++++--- .../model/SystemMenuDynamicTableModel.java | 3 + .../features/util/KitDynamicTableUtil.java | 67 +++++++++++++++++++ 7 files changed, 172 insertions(+), 13 deletions(-) create mode 100644 cutejava/cutejava-module-system/src/main/java/cn/odboy/system/features/util/KitDynamicTableUtil.java diff --git a/cutejava-front/src/api/features/cute-dynamic-table.js b/cutejava-front/src/api/features/cute-dynamic-table.js index 10e1992b..de9b9a73 100644 --- a/cutejava-front/src/api/features/cute-dynamic-table.js +++ b/cutejava-front/src/api/features/cute-dynamic-table.js @@ -8,5 +8,13 @@ export function searchMenu(query) { }) } -export default { searchMenu } +export function searchMenu2(query) { + return request({ + url: 'api/features/CuteDynamicTable/searchMenu2', + method: 'post', + data: query + }) +} + +export default { searchMenu, searchMenu2 } diff --git a/cutejava-front/src/views/componentsDemo/advanced/CuteDynamicTableDemo.vue b/cutejava-front/src/views/componentsDemo/advanced/CuteDynamicTableDemo.vue index 4194e22e..6a05c1f8 100644 --- a/cutejava-front/src/views/componentsDemo/advanced/CuteDynamicTableDemo.vue +++ b/cutejava-front/src/views/componentsDemo/advanced/CuteDynamicTableDemo.vue @@ -87,7 +87,7 @@ export default { } }, fetch: async(queryParams) => { - return FeatureCuteDynamicTableService.searchMenu(queryParams) + return FeatureCuteDynamicTableService.searchMenu2(queryParams) } }, apiData: [ diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/request/SystemQueryMenuArgs.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/request/SystemQueryMenuArgs.java index a1c27634..0d900973 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/request/SystemQueryMenuArgs.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/request/SystemQueryMenuArgs.java @@ -15,6 +15,8 @@ */ package cn.odboy.system.dal.model.request; +import cn.odboy.framework.mybatisplus.config.KitMpQTypeEnum; +import cn.odboy.framework.mybatisplus.config.KitMpQuery; import io.swagger.annotations.ApiModelProperty; import java.util.Date; import java.util.List; @@ -24,6 +26,7 @@ import lombok.Data; public class SystemQueryMenuArgs { @ApiModelProperty(value = "模糊查询") + @KitMpQuery(type = KitMpQTypeEnum.INNER_LIKE) private String blurry; @ApiModelProperty(value = "创建时间") private List createTime; diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/features/CuteDynamicTableDemoApi.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/features/CuteDynamicTableDemoApi.java index 59c71736..c095dd7a 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/features/CuteDynamicTableDemoApi.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/features/CuteDynamicTableDemoApi.java @@ -17,11 +17,13 @@ package cn.odboy.system.features; import cn.hutool.core.util.StrUtil; import cn.odboy.base.KitPageArgs; +import cn.odboy.framework.mybatisplus.core.KitMpQUtil; import cn.odboy.system.features.core.KitDynamicTableResponse; import cn.odboy.system.features.model.SystemMenuDynamicTableModel; import cn.odboy.system.dal.dataobject.SystemMenuTb; import cn.odboy.system.dal.model.request.SystemQueryMenuArgs; import cn.odboy.system.dal.mysql.SystemMenuMapper; +import cn.odboy.system.features.util.KitDynamicTableUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -45,10 +47,10 @@ public class CuteDynamicTableDemoApi { @Autowired private SystemMenuMapper systemMenuMapper; - @ApiOperation("查询动态数据") + @ApiOperation("写法1:查询动态数据") @PostMapping(value = "/searchMenu") @PreAuthorize("@el.check()") - public ResponseEntity> searchMenu(@Validated @RequestBody KitPageArgs pageArgs) { + public ResponseEntity> searchMenu(@Validated @RequestBody KitPageArgs pageArgs) { // 请求参数 Integer page = pageArgs.getPage(); Integer size = pageArgs.getSize(); @@ -66,6 +68,32 @@ public class CuteDynamicTableDemoApi { } IPage pageResult = systemMenuMapper.selectPage(iPage, wrapper); // 响应结果 - return ResponseEntity.ok(new KitDynamicTableResponse<>(SystemMenuDynamicTableModel.class, "id", pageResult)); + return ResponseEntity.ok(new KitDynamicTableResponse<>(SystemMenuDynamicTableModel.class, pageResult, "id")); + } + + @ApiOperation("写法2:查询动态数据") + @PostMapping(value = "/searchMenu2") + @PreAuthorize("@el.check()") + public ResponseEntity> searchMenu2(@Validated @RequestBody KitPageArgs pageArgs) { + // 渲染排序(非必须) + QueryWrapper wrapper = KitDynamicTableUtil.renderOrder(pageArgs); + LambdaQueryWrapper lambda = wrapper.lambda(); + // 查询条件 + SystemQueryMenuArgs args = pageArgs.getArgs(); + if (args != null) { + lambda.like(StrUtil.isNotBlank(args.getBlurry()), SystemMenuTb::getTitle, args.getBlurry()); + } + // 响应结果 + return ResponseEntity.ok(new KitDynamicTableResponse<>(SystemMenuDynamicTableModel.class, pageArgs, "id", systemMenuMapper, lambda)); + } + + @ApiOperation("写法3:查询动态数据") + @PostMapping(value = "/searchMenu3") + @PreAuthorize("@el.check()") + public ResponseEntity> searchMenu3(@Validated @RequestBody KitPageArgs pageArgs) { + // 渲染查询条件 + LambdaQueryWrapper wrapper = KitDynamicTableUtil.renderAll(pageArgs); + // 响应结果 + return ResponseEntity.ok(new KitDynamicTableResponse<>(SystemMenuDynamicTableModel.class, pageArgs, "id", systemMenuMapper, wrapper)); } } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/features/core/KitDynamicTableResponse.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/features/core/KitDynamicTableResponse.java index 17d3799c..11f1c038 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/features/core/KitDynamicTableResponse.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/features/core/KitDynamicTableResponse.java @@ -17,9 +17,12 @@ package cn.odboy.system.features.core; import cn.hutool.core.util.ReflectUtil; import cn.odboy.base.KitObject; +import cn.odboy.base.KitPageArgs; import cn.odboy.system.features.model.SystemMenuDynamicTableModel; import cn.odboy.system.dal.dataobject.SystemMenuTb; import cn.odboy.util.KitBeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.Getter; @@ -32,11 +35,13 @@ import java.util.List; /** * 动态表格 * + * @param 数据表对象 + * @param 渲染对象 * @author odboy * @date 2026-02-05 */ @Getter -public class KitDynamicTableResponse extends KitObject { +public class KitDynamicTableResponse extends KitObject { /** * 主键 @@ -56,17 +61,57 @@ public class KitDynamicTableResponse extends KitObject { */ private List content; - public KitDynamicTableResponse(Class clazz, IPage pageResult) { + /** + * @param clazz 渲染类型 + * @param pageResult 渲染类型分页参数 + */ + public KitDynamicTableResponse(Class clazz, IPage pageResult) { this.renderColumns(clazz); - this.setPage(clazz, pageResult); + this.setContent(clazz, pageResult); } - public KitDynamicTableResponse(Class clazz, String id, IPage pageResult) { - this.primaryKey = id; + /** + * @param clazz 渲染类型 + * @param pageResult 渲染类型分页参数 + * @param primaryKey 主键 + */ + public KitDynamicTableResponse(Class clazz, IPage pageResult, String primaryKey) { + this.primaryKey = primaryKey; this.renderColumns(clazz); - this.setPage(clazz, pageResult); + this.setContent(clazz, pageResult); } + /** + * @param clazz 渲染类型 + * @param pageArgs 分页参数 + * @param baseMapper 数据表Mapper + * @param wrapper 查询条件 + */ + public KitDynamicTableResponse(Class clazz, KitPageArgs pageArgs, BaseMapper baseMapper, LambdaQueryWrapper wrapper) { + this.renderColumns(clazz); + Page pageResult = baseMapper.selectPage(new Page<>(pageArgs.getPage(), pageArgs.getSize()), wrapper); + this.setContent(clazz, pageResult); + } + + /** + * @param clazz 渲染类型 + * @param pageArgs 分页参数 + * @param primaryKey 主键 + * @param baseMapper 数据表Mapper + * @param wrapper 查询条件 + */ + public KitDynamicTableResponse(Class clazz, KitPageArgs pageArgs, String primaryKey, BaseMapper baseMapper, LambdaQueryWrapper wrapper) { + this.primaryKey = primaryKey; + this.renderColumns(clazz); + Page pageResult = baseMapper.selectPage(new Page<>(pageArgs.getPage(), pageArgs.getSize()), wrapper); + this.setContent(clazz, pageResult); + } + + /** + * 渲染表格列 + * + * @param clazz 渲染类型 + */ private void renderColumns(Class clazz) { List columns = new ArrayList<>(); if (clazz == null) { @@ -94,7 +139,11 @@ public class KitDynamicTableResponse extends KitObject { this.columns = columns; } - public void setPage(Class clazz, IPage pageResult) { + /** + * @param clazz 渲染类型 + * @param pageResult 渲染结果 + */ + public void setContent(Class clazz, IPage pageResult) { if (pageResult == null) { return; } @@ -125,7 +174,8 @@ public class KitDynamicTableResponse extends KitObject { } public static void main(String[] args) { - KitDynamicTableResponse response = new KitDynamicTableResponse<>(SystemMenuDynamicTableModel.class, "id", new Page<>()); + KitDynamicTableResponse response = new KitDynamicTableResponse<>( + SystemMenuDynamicTableModel.class, new Page<>(), "id"); System.err.println(response); } } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/features/model/SystemMenuDynamicTableModel.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/features/model/SystemMenuDynamicTableModel.java index 43bbe6d5..6678d1df 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/features/model/SystemMenuDynamicTableModel.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/features/model/SystemMenuDynamicTableModel.java @@ -20,6 +20,9 @@ import cn.odboy.system.features.core.KitDynamicTableColumn; import lombok.Getter; import lombok.Setter; +/** + * 例子:渲染对象 + */ @Getter @Setter public class SystemMenuDynamicTableModel extends KitObject { diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/features/util/KitDynamicTableUtil.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/features/util/KitDynamicTableUtil.java new file mode 100644 index 00000000..7a36fa9c --- /dev/null +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/features/util/KitDynamicTableUtil.java @@ -0,0 +1,67 @@ +/* + * Copyright 2021-2026 Odboy + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.odboy.system.features.util; + +import cn.odboy.base.KitPageArgs; +import cn.odboy.framework.mybatisplus.core.KitMpQUtil; +import cn.odboy.system.dal.dataobject.SystemMenuTb; +import cn.odboy.system.dal.model.request.SystemQueryMenuArgs; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.experimental.UtilityClass; + +/** + * 动态表格辅助工具 + * + * @author odboy + */ +@UtilityClass +public class KitDynamicTableUtil { + + /** + * 渲染排序规则 + * + * @param pageArgs 分页参数 + * @param 数据表对象 + * @param 渲染对象 + * @return / + */ + public static QueryWrapper renderOrder(KitPageArgs pageArgs) { + QueryWrapper wrapper = new QueryWrapper<>(); + KitPageArgs.OrderBy orderBy = pageArgs.getOrderBy(); + if (orderBy != null) { + wrapper.orderBy(true, orderBy.isAsc(), orderBy.getColumn()); + } + return wrapper; + } + + /** + * 渲染所有规则(需要配合 @KitMpQuery 注解使用) + * + * @param pageArgs 分页参数 + * @param 数据表对象 + * @param 渲染对象 + * @return / + */ + public static LambdaQueryWrapper renderAll(KitPageArgs pageArgs) { + QueryWrapper wrapper = KitMpQUtil.build(pageArgs.getArgs()); + KitPageArgs.OrderBy orderBy = pageArgs.getOrderBy(); + if (orderBy != null) { + wrapper.orderBy(true, orderBy.isAsc(), orderBy.getColumn()); + } + return wrapper.lambda(); + } +}