From d8161667f9e0327b1bf3c0de8a9d20c5ade2089a Mon Sep 17 00:00:00 2001 From: FatttSnake Date: Sun, 4 Jun 2023 03:55:25 +0800 Subject: [PATCH] Added regex search in GroupManagement --- .../permission/GroupController.java | 4 +- .../mapper/permission/GroupMapper.java | 2 +- .../service/permission/IGroupService.java | 2 +- .../permission/impl/GroupServiceImpl.java | 6 +- .../mapper/permission/GroupMapper.xml | 7 ++- ui/src/pages/power/GroupManagement.vue | 55 +++++++++++++++++-- ui/src/pages/power/RoleManagement.vue | 1 + 7 files changed, 64 insertions(+), 13 deletions(-) diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/permission/GroupController.java b/Pinnacle/src/main/java/com/cfive/pinnacle/controller/permission/GroupController.java index a2b37e7..edecae0 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/permission/GroupController.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/controller/permission/GroupController.java @@ -41,10 +41,10 @@ public class GroupController { @Operation(summary = "获取所有用户组") @GetMapping @PreAuthorize("hasAuthority('system:group:get')") - public ResponseResult> getAllGroup(Long currentPage, Long pageSize, String searchName, String searchRole, Integer searchEnable) { + public ResponseResult> getAllGroup(Long currentPage, Long pageSize, String searchName, String searchRole, Integer searchEnable, Integer searchRegex) { List searchRoleList = WebUtil.convertStringToList(searchRole, Long.class); - IPage groups = groupService.getAllGroup(currentPage, pageSize, searchName, searchRoleList, searchEnable); + IPage groups = groupService.getAllGroup(currentPage, pageSize, searchName, searchRoleList, searchEnable, searchRegex); return ResponseResult.databaseSelectSuccess(groups); } diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/mapper/permission/GroupMapper.java b/Pinnacle/src/main/java/com/cfive/pinnacle/mapper/permission/GroupMapper.java index fddc3b8..56f0d77 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/mapper/permission/GroupMapper.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/mapper/permission/GroupMapper.java @@ -17,7 +17,7 @@ import java.util.List; */ @Mapper public interface GroupMapper extends BaseMapper { - List filterGroupByRoleId(@Param("groupList") List groupList, @Param("roleId") Long roleId, String searchName, Integer searchEnable); + List filterGroupByRoleId(@Param("groupList") List groupList, @Param("roleId") Long roleId, @Param("searchName") String searchName, @Param("searchEnable") Integer searchEnable, @Param("searchRegex") Integer searchRegex); List getAll(@Param("groupList") List groupList); Group getOneById(@Param("id") long id); diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/service/permission/IGroupService.java b/Pinnacle/src/main/java/com/cfive/pinnacle/service/permission/IGroupService.java index 2e51943..0066a3c 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/service/permission/IGroupService.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/service/permission/IGroupService.java @@ -15,7 +15,7 @@ import java.util.List; * @since 2023-04-30 */ public interface IGroupService extends IService { - IPage getAllGroup(Long currentPage, Long pageSize, String searchName, List searchRole, Integer searchEnable); + IPage getAllGroup(Long currentPage, Long pageSize, String searchName, List searchRole, Integer searchEnable, Integer searchRegex); Group getGroup(Long id); diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/service/permission/impl/GroupServiceImpl.java b/Pinnacle/src/main/java/com/cfive/pinnacle/service/permission/impl/GroupServiceImpl.java index ad21971..d7faea0 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/service/permission/impl/GroupServiceImpl.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/service/permission/impl/GroupServiceImpl.java @@ -41,13 +41,13 @@ public class GroupServiceImpl extends ServiceImpl implements } @Override - public IPage getAllGroup(Long currentPage, Long pageSize, String searchName, List searchRole, Integer searchEnable) { + public IPage getAllGroup(Long currentPage, Long pageSize, String searchName, List searchRole, Integer searchEnable, Integer searchRegex) { Page groupIPage = PageDTO.of(currentPage, pageSize); searchName = searchName.trim(); - List groupList = groupMapper.filterGroupByRoleId(null, null, searchName, searchEnable); + List groupList = groupMapper.filterGroupByRoleId(null, null, searchName, searchEnable, searchRegex); if (groupList.size() > 0) { for (Long roleId : searchRole) { - groupList = groupMapper.filterGroupByRoleId(groupList, roleId, null, null); + groupList = groupMapper.filterGroupByRoleId(groupList, roleId, null, null, null); if (groupList.size() == 0) { break; } diff --git a/Pinnacle/src/main/resources/mapper/permission/GroupMapper.xml b/Pinnacle/src/main/resources/mapper/permission/GroupMapper.xml index 438bcb9..bfd4df5 100644 --- a/Pinnacle/src/main/resources/mapper/permission/GroupMapper.xml +++ b/Pinnacle/src/main/resources/mapper/permission/GroupMapper.xml @@ -16,7 +16,12 @@ #{item} - and instr(t_group.name, #{searchName}) > 0 + + and t_group.name regexp #{searchName} + + + and instr(t_group.name, #{searchName}) > 0 + and t_group.enable = #{searchEnable} diff --git a/ui/src/pages/power/GroupManagement.vue b/ui/src/pages/power/GroupManagement.vue index e2850da..e272f96 100644 --- a/ui/src/pages/power/GroupManagement.vue +++ b/ui/src/pages/power/GroupManagement.vue @@ -24,14 +24,30 @@ - + + @change="handleInputChange" + > + + @@ -156,6 +172,7 @@ import { DATABASE_UPDATE_OK } from '@/constants/Common.constants.js' import { ElMessage, ElMessageBox } from 'element-plus' +import _ from 'lodash' export default { name: 'GroupManagement', @@ -166,10 +183,13 @@ export default { dialogLoading: true, roleOptions: [], searchName: '', - searchRole: [], - searchEnable: -1, inputName: '', + searchRegex: 0, + checkedRegex: 0, + isRegexLegal: true, + searchRole: [], selectedRole: [], + searchEnable: -1, selectedEnable: -1, currentPage: 1, pageSize: 50, @@ -196,6 +216,13 @@ export default { }, methods: { loadGroupTable() { + if (!this.isRegexLegal) { + ElMessage.error({ + dangerouslyUseHTMLString: true, + message: '非法正则表达式,请重新输入' + }) + return + } this.tableLoading = true request .get('/group', { @@ -203,7 +230,8 @@ export default { pageSize: this.pageSize, searchName: this.searchName, searchRole: this.searchRole + '', - searchEnable: this.searchEnable + searchEnable: this.searchEnable, + searchRegex: this.searchRegex ?? 0 }) .then((res) => { const response = res.data @@ -366,16 +394,33 @@ export default { }, handleQuery() { this.searchName = this.inputName + this.searchRegex = _.cloneDeep(this.checkedRegex) this.searchRole = this.selectedRole this.searchEnable = this.selectedEnable this.currentPage = 1 + this.handleInputChange() this.loadGroupTable() }, handleClear() { this.inputName = '' + this.checkedRegex = 0 this.selectedRole = [] this.selectedEnable = -1 this.handleQuery() + }, + handleInputChange() { + if (this.checkedRegex) { + try { + RegExp(this.inputName) + this.isRegexLegal = !( + this.inputName.includes('{}') || this.inputName.includes('[]') + ) + } catch (e) { + this.isRegexLegal = false + } + } else { + this.isRegexLegal = true + } } }, mounted() { diff --git a/ui/src/pages/power/RoleManagement.vue b/ui/src/pages/power/RoleManagement.vue index 38b72e2..eef6673 100644 --- a/ui/src/pages/power/RoleManagement.vue +++ b/ui/src/pages/power/RoleManagement.vue @@ -35,6 +35,7 @@ show-word-limit placeholder="请输入内容" @keyup.enter="handleQuery" + @change="handleInputChange" >