From 424a6eb330a55ac06a17ca1a9f49d9f44d4af50e Mon Sep 17 00:00:00 2001 From: FatttSnake Date: Sun, 4 Jun 2023 03:36:52 +0800 Subject: [PATCH] Added regex search in StaffManagement --- .../pinnacle/controller/StaffController.java | 4 +- .../cfive/pinnacle/mapper/StaffMapper.java | 2 +- .../cfive/pinnacle/service/IStaffService.java | 2 +- .../service/impl/StaffServiceImpl.java | 4 +- .../src/main/resources/mapper/StaffMapper.xml | 72 +++++++++++++---- ui/src/pages/info/DepartmentManagement.vue | 2 +- ui/src/pages/info/StaffManagement.vue | 79 ++++++++++++++----- 7 files changed, 123 insertions(+), 42 deletions(-) diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/StaffController.java b/Pinnacle/src/main/java/com/cfive/pinnacle/controller/StaffController.java index 284972b..dbd5e2b 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/StaffController.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/controller/StaffController.java @@ -29,8 +29,8 @@ public class StaffController { @GetMapping @PreAuthorize("hasAnyAuthority('staff:manege:get', 'staff:admin:get')") - public ResponseResult> getAllStaff(Long currentPage, Long pageSize, Integer searchType, String searchInput, Integer searchGender, String searchBirthFrom, String searchBirthTo) { - return ResponseResult.databaseSelectSuccess(staffService.getAllStaff(currentPage, pageSize, searchType, searchInput, searchGender, searchBirthFrom, searchBirthTo)); + public ResponseResult> getAllStaff(Long currentPage, Long pageSize, Integer searchType, String searchInput, Integer searchGender, String searchBirthFrom, String searchBirthTo, Integer searchRegex) { + return ResponseResult.databaseSelectSuccess(staffService.getAllStaff(currentPage, pageSize, searchType, searchInput, searchGender, searchBirthFrom, searchBirthTo, searchRegex)); } @PutMapping diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/mapper/StaffMapper.java b/Pinnacle/src/main/java/com/cfive/pinnacle/mapper/StaffMapper.java index 8b8a376..f9ac228 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/mapper/StaffMapper.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/mapper/StaffMapper.java @@ -17,5 +17,5 @@ import org.apache.ibatis.annotations.Param; */ @Mapper public interface StaffMapper extends BaseMapper { - IPage getAllStaff(IPage page, @Param("departmentId") Long departmentId, @Param("searchType") Integer searchType, @Param("searchInput") String searchInput, @Param("searchGender") Integer searchGender, @Param("searchBirthFrom") String searchBirthFrom, @Param("searchBirthTo") String searchBirthTo); + IPage getAllStaff(IPage page, @Param("departmentId") Long departmentId, @Param("searchType") Integer searchType, @Param("searchInput") String searchInput, @Param("searchGender") Integer searchGender, @Param("searchBirthFrom") String searchBirthFrom, @Param("searchBirthTo") String searchBirthTo, @Param("searchRegex") Integer searchRegex); } diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/service/IStaffService.java b/Pinnacle/src/main/java/com/cfive/pinnacle/service/IStaffService.java index ae42b2f..224dde0 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/service/IStaffService.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/service/IStaffService.java @@ -14,7 +14,7 @@ import com.cfive.pinnacle.entity.permission.User; * @since 2023-04-30 */ public interface IStaffService extends IService { - IPage getAllStaff(Long currentPage, Long pageSize, Integer searchType, String searchInput, Integer searchGender, String searchBirthFrom, String searchBirthTo); + IPage getAllStaff(Long currentPage, Long pageSize, Integer searchType, String searchInput, Integer searchGender, String searchBirthFrom, String searchBirthTo, Integer searchRegex); boolean modifyStaff(User user); } diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/StaffServiceImpl.java b/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/StaffServiceImpl.java index 35614e2..85aa379 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/StaffServiceImpl.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/service/impl/StaffServiceImpl.java @@ -39,7 +39,7 @@ public class StaffServiceImpl extends ServiceImpl implements } @Override - public IPage getAllStaff(Long currentPage, Long pageSize, Integer searchType, String searchInput, Integer searchGender, String searchBirthFrom, String searchBirthTo) { + public IPage getAllStaff(Long currentPage, Long pageSize, Integer searchType, String searchInput, Integer searchGender, String searchBirthFrom, String searchBirthTo, Integer searchRegex) { Long departmentId = WebUtil.hasAuthority("staff:admin:get") ? null : WebUtil.getLoginUser().getUser().getDepartmentId(); IPage userIPage; if (currentPage == null || pageSize == null) { @@ -48,7 +48,7 @@ public class StaffServiceImpl extends ServiceImpl implements userIPage = PageDTO.of(currentPage, pageSize); } searchInput = searchInput.trim(); - return staffMapper.getAllStaff(userIPage, departmentId, searchType, searchInput, searchGender, searchBirthFrom, searchBirthTo); + return staffMapper.getAllStaff(userIPage, departmentId, searchType, searchInput, searchGender, searchBirthFrom, searchBirthTo, searchRegex); } @Override diff --git a/Pinnacle/src/main/resources/mapper/StaffMapper.xml b/Pinnacle/src/main/resources/mapper/StaffMapper.xml index 3517bb7..7a1bca8 100644 --- a/Pinnacle/src/main/resources/mapper/StaffMapper.xml +++ b/Pinnacle/src/main/resources/mapper/StaffMapper.xml @@ -33,32 +33,72 @@ - and ( - instr(t_user.username, #{searchInput}) > 0 - or instr(concat(ts.first_name, ts.last_name), #{searchInput}) > 0 - or instr(concat(ts.last_name, ts.first_name), #{searchInput}) > 0 - or instr(ts.email, #{searchInput}) > 0 - or instr(ts.tel, #{searchInput}) > 0 - or instr(ts.address, #{searchInput}) > 0 - ) + + and ( + t_user.username regexp #{searchInput} + or concat(ts.first_name, ts.last_name) regexp #{searchInput} + or concat(ts.last_name, ts.first_name) regexp #{searchInput} + or ts.email regexp #{searchInput} + or ts.tel regexp #{searchInput} + or ts.address regexp #{searchInput} + ) + + + and ( + instr(t_user.username, #{searchInput}) > 0 + or instr(concat(ts.first_name, ts.last_name), #{searchInput}) > 0 + or instr(concat(ts.last_name, ts.first_name), #{searchInput}) > 0 + or instr(ts.email, #{searchInput}) > 0 + or instr(ts.tel, #{searchInput}) > 0 + or instr(ts.address, #{searchInput}) > 0 + ) + - and instr(t_user.username, #{searchInput}) > 0 + + and t_user.username regexp #{searchInput} + + + and instr(t_user.username, #{searchInput}) > 0 + - and ( - instr(concat(ts.first_name, ts.last_name), #{searchInput}) > 0 - or instr(concat(ts.last_name, ts.first_name), #{searchInput}) > 0 - ) + + and ( + concat(ts.first_name, ts.last_name) regexp #{searchInput} + or concat(ts.last_name, ts.first_name) regexp #{searchInput} + ) + + + and ( + instr(concat(ts.first_name, ts.last_name), #{searchInput}) > 0 + or instr(concat(ts.last_name, ts.first_name), #{searchInput}) > 0 + ) + - and instr(ts.email, #{searchInput}) > 0 + + and ts.email regexp #{searchInput} + + + and instr(ts.email, #{searchInput}) > 0 + - and instr(ts.tel, #{searchInput}) > 0 + + and ts.tel regexp #{searchInput} + + + and instr(ts.tel, #{searchInput}) > 0 + - and instr(ts.address, #{searchInput}) > 0 + + and ts.address regexp #{searchInput} + + + and instr(ts.address, #{searchInput}) > 0 + diff --git a/ui/src/pages/info/DepartmentManagement.vue b/ui/src/pages/info/DepartmentManagement.vue index 972c463..3ef0095 100644 --- a/ui/src/pages/info/DepartmentManagement.vue +++ b/ui/src/pages/info/DepartmentManagement.vue @@ -156,8 +156,8 @@ export default { inputInput: '', searchRegex: 0, checkedRegex: 0, - currentPage: 1, isRegexLegal: true, + currentPage: 1, pageSize: 50, totalCount: 0, departmentTable: [], diff --git a/ui/src/pages/info/StaffManagement.vue b/ui/src/pages/info/StaffManagement.vue index e03b24d..8b4def5 100644 --- a/ui/src/pages/info/StaffManagement.vue +++ b/ui/src/pages/info/StaffManagement.vue @@ -15,24 +15,37 @@ - - - + + + + + + @@ -195,6 +208,9 @@ export default { selectedType: 0, searchInput: '', inputInput: '', + searchRegex: 0, + checkedRegex: 0, + isRegexLegal: true, searchGender: -1, selectedGender: -1, searchBirth: [], @@ -234,6 +250,13 @@ export default { }, methods: { loadStaffTable() { + if (!this.isRegexLegal) { + ElMessage.error({ + dangerouslyUseHTMLString: true, + message: '非法正则表达式,请重新输入' + }) + return + } this.tableLoading = true request .get('/staff', { @@ -243,7 +266,8 @@ export default { searchInput: this.searchInput, searchGender: this.searchGender, searchBirthFrom: this.searchBirth ? this.searchBirth[0] ?? null : null, - searchBirthTo: this.searchBirth ? this.searchBirth[1] ?? null : null + searchBirthTo: this.searchBirth ? this.searchBirth[1] ?? null : null, + searchRegex: this.searchRegex ?? 0 }) .then((res) => { const response = res.data @@ -357,17 +381,34 @@ export default { handleQuery() { this.searchType = _.cloneDeep(this.selectedType) this.searchInput = _.cloneDeep(this.inputInput) + this.searchRegex = _.cloneDeep(this.checkedRegex) this.searchGender = _.cloneDeep(this.selectedGender) this.searchBirth = _.cloneDeep(this.selectedBirth) this.currentPage = 1 + this.handleInputChange() this.loadStaffTable() }, handleClear() { this.selectedType = 0 this.inputInput = '' + this.checkedRegex = 0 this.selectedGender = -1 this.selectedBirth = [] this.handleQuery() + }, + handleInputChange() { + if (this.checkedRegex) { + try { + RegExp(this.inputInput) + this.isRegexLegal = !( + this.inputInput.includes('{}') || this.inputInput.includes('[]') + ) + } catch (e) { + this.isRegexLegal = false + } + } else { + this.isRegexLegal = true + } } }, mounted() {