diff --git a/core/backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java b/core/backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java index 5f030fb51b..dee0a2fd4a 100644 --- a/core/backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java +++ b/core/backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java @@ -214,7 +214,7 @@ public class DataSetTableFieldController { public List multFieldValues(@RequestBody MultFieldValuesRequest multFieldValuesRequest) throws Exception { List results = new ArrayList<>(); for (String fieldId : multFieldValuesRequest.getFieldIds()) { - List fieldValues = dataSetFieldService.fieldValues(fieldId, multFieldValuesRequest.getSort(), multFieldValuesRequest.getUserId(), true, false); + List fieldValues = dataSetFieldService.fieldValues(fieldId, multFieldValuesRequest.getSort(), multFieldValuesRequest.getUserId(), true, false, multFieldValuesRequest.getKeyword()); if (CollectionUtil.isNotEmpty(fieldValues)) { results.addAll(fieldValues); } @@ -233,13 +233,13 @@ public class DataSetTableFieldController { DecodedJWT jwt = JWT.decode(linkToken); Long userId = jwt.getClaim("userId").asLong(); multFieldValuesRequest.setUserId(userId); - return dataSetFieldService.fieldValues(multFieldValuesRequest.getFieldIds(), multFieldValuesRequest.getSort(), multFieldValuesRequest.getUserId(), true, true, false); + return dataSetFieldService.fieldValues(multFieldValuesRequest.getFieldIds(), multFieldValuesRequest.getSort(), multFieldValuesRequest.getUserId(), true, true, false, multFieldValuesRequest.getKeyword()); } @ApiIgnore @PostMapping("mappingFieldValues") public List mappingFieldValues(@RequestBody MultFieldValuesRequest multFieldValuesRequest) throws Exception { - return dataSetFieldService.fieldValues(multFieldValuesRequest.getFieldIds(), multFieldValuesRequest.getSort(), multFieldValuesRequest.getUserId(), true, true, false); + return dataSetFieldService.fieldValues(multFieldValuesRequest.getFieldIds(), multFieldValuesRequest.getSort(), multFieldValuesRequest.getUserId(), true, true, false, multFieldValuesRequest.getKeyword()); } @ApiIgnore diff --git a/core/backend/src/main/java/io/dataease/controller/request/dataset/MultFieldValuesRequest.java b/core/backend/src/main/java/io/dataease/controller/request/dataset/MultFieldValuesRequest.java index 5c0bf52fa0..cd9b46b077 100644 --- a/core/backend/src/main/java/io/dataease/controller/request/dataset/MultFieldValuesRequest.java +++ b/core/backend/src/main/java/io/dataease/controller/request/dataset/MultFieldValuesRequest.java @@ -13,4 +13,6 @@ public class MultFieldValuesRequest { private DeSortDTO sort; + private String keyword; + } diff --git a/core/backend/src/main/java/io/dataease/service/dataset/DataSetFieldService.java b/core/backend/src/main/java/io/dataease/service/dataset/DataSetFieldService.java index df8e1e5b02..cc433ec9bb 100644 --- a/core/backend/src/main/java/io/dataease/service/dataset/DataSetFieldService.java +++ b/core/backend/src/main/java/io/dataease/service/dataset/DataSetFieldService.java @@ -9,9 +9,9 @@ public interface DataSetFieldService { List fieldValues(String fieldId, Long userId, Boolean userPermissions, Boolean rowAndColumnMgm) throws Exception; - List fieldValues(String fieldId, DeSortDTO sortDTO, Long userId, Boolean userPermissions, Boolean rowAndColumnMgm) throws Exception; + List fieldValues(String fieldId, DeSortDTO sortDTO, Long userId, Boolean userPermissions, Boolean rowAndColumnMgm, String keyword) throws Exception; - List fieldValues(List fieldIds, DeSortDTO sortDTO, Long userId, Boolean userPermissions, Boolean needMapping, Boolean rowAndColumnMgm) throws Exception; + List fieldValues(List fieldIds, DeSortDTO sortDTO, Long userId, Boolean userPermissions, Boolean needMapping, Boolean rowAndColumnMgm, String keyword) throws Exception; List chineseSort(List list, DeSortDTO sortDTO) throws Exception; } diff --git a/core/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java b/core/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java index e0f0031230..0930315a95 100644 --- a/core/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java +++ b/core/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java @@ -58,14 +58,14 @@ public class DirectFieldService implements DataSetFieldService { public List fieldValues(String fieldId, Long userId, Boolean userPermissions, Boolean rowAndColumnMgm) throws Exception { List fieldIds = new ArrayList<>(); fieldIds.add(fieldId); - return fieldValues(fieldIds, null, userId, userPermissions, false, rowAndColumnMgm); + return fieldValues(fieldIds, null, userId, userPermissions, false, rowAndColumnMgm, null); } @Override - public List fieldValues(String fieldId, DeSortDTO sortDTO, Long userId, Boolean userPermissions, Boolean rowAndColumnMgm) throws Exception { + public List fieldValues(String fieldId, DeSortDTO sortDTO, Long userId, Boolean userPermissions, Boolean rowAndColumnMgm, String keyword) throws Exception { List fieldIds = new ArrayList<>(); fieldIds.add(fieldId); - return fieldValues(fieldIds, sortDTO, userId, userPermissions, false, rowAndColumnMgm); + return fieldValues(fieldIds, sortDTO, userId, userPermissions, false, rowAndColumnMgm, keyword); } public List buildSorts(List allFields, DeSortDTO sortDTO) { @@ -98,8 +98,15 @@ public class DirectFieldService implements DataSetFieldService { return result; } + private String formatTableByKeyword(String keyword, String originTable, List fields) { + if (StringUtils.isBlank(keyword)) return originTable; + List fieldNames = fields.stream().map(DatasetTableField::getOriginName).collect(Collectors.toList()); + String whereSql = fieldNames.stream().map(fieldName -> " " + fieldName + " like '%" + keyword + "%'").collect(Collectors.joining(" or ")); + return "( select * from " + originTable + " where (" + whereSql + ") )"; + } + @Override - public List fieldValues(List fieldIds, DeSortDTO sortDTO, Long userId, Boolean userPermissions, Boolean needMapping, Boolean rowAndColumnMgm) throws Exception { + public List fieldValues(List fieldIds, DeSortDTO sortDTO, Long userId, Boolean userPermissions, Boolean needMapping, Boolean rowAndColumnMgm, String keyword) throws Exception { String fieldId = fieldIds.get(0); DatasetTableField field = dataSetTableFieldsService.selectByPrimaryKey(fieldId); if (field == null || StringUtils.isEmpty(field.getTableId())) return null; @@ -165,7 +172,8 @@ public class DirectFieldService implements DataSetFieldService { QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); if (StringUtils.equalsIgnoreCase(datasetTable.getType(), DatasetType.DB.toString())) { datasourceRequest.setTable(dataTableInfoDTO.getTable()); - createSQL = qp.createQuerySQL(dataTableInfoDTO.getTable(), permissionFields, !needSort, ds, customFilter, rowPermissionsTree, deSortFields); + String formatSql = formatTableByKeyword(keyword, dataTableInfoDTO.getTable(), permissionFields); + createSQL = qp.createQuerySQL(formatSql, permissionFields, !needSort, ds, customFilter, rowPermissionsTree, deSortFields); } else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), DatasetType.SQL.toString())) { String sql = dataTableInfoDTO.getSql(); if (dataTableInfoDTO.isBase64Encryption()) { diff --git a/core/frontend/src/components/elVisualSelect/index.vue b/core/frontend/src/components/elVisualSelect/index.vue index 9778792549..6f4af06266 100644 --- a/core/frontend/src/components/elVisualSelect/index.vue +++ b/core/frontend/src/components/elVisualSelect/index.vue @@ -124,9 +124,9 @@ export default { }, list() { this.resetList() - this.show = false + // this.show = false this.$nextTick(() => { - this.show = true + // this.show = true this.$nextTick(() => { this.init() }) @@ -212,14 +212,20 @@ export default { ) this.scrollbar = document.querySelector(`.${this.classId} .el-select-dropdown .el-scrollbar`) this.selectBoxDom = document.querySelector(`.${this.classId} .el-select-dropdown__wrap`) - this.selectBoxDom.style.display = 'flex' - this.selectBoxDom.style.flexDirection = 'row' - this.domList = selectDom.querySelector( - `.${this.classId} .el-select-dropdown__wrap .el-select-dropdown__list` - ) - this.addScrollDiv(this.selectBoxDom) + if (this.selectBoxDom) { + this.selectBoxDom.style.display = 'flex' + this.selectBoxDom.style.flexDirection = 'row' + } + if (selectDom) { + this.domList = selectDom.querySelector( + `.${this.classId} .el-select-dropdown__wrap .el-select-dropdown__list` + ) + } + if (this.selectBoxDom) { + this.addScrollDiv(this.selectBoxDom) + } - this.scrollFn() + this.scrollbar && this.scrollFn() this.customInputStyle() }, diff --git a/core/frontend/src/components/widget/deWidget/DeSelect.vue b/core/frontend/src/components/widget/deWidget/DeSelect.vue index ef2e33d5c8..4b36c97e66 100644 --- a/core/frontend/src/components/widget/deWidget/DeSelect.vue +++ b/core/frontend/src/components/widget/deWidget/DeSelect.vue @@ -94,7 +94,9 @@ export default { data: [], onFocus: false, keyWord: '', - separator: ',' + separator: ',', + timeMachine: null, + changeIndex: 0 } }, computed: { @@ -292,8 +294,55 @@ export default { this.value = this.element.options.attrs.multiple ? [] : null this.$refs.deSelect && this.$refs.deSelect.resetSelectAll && this.$refs.deSelect.resetSelectAll() }, + + searchWithKey(index) { + this.timeMachine = setTimeout(() => { + if (index === this.changeIndex) { + this.refreshOptions() + } + this.destroyTimeMachine() + }, 1500) + }, + destroyTimeMachine() { + this.timeMachine && clearTimeout(this.timeMachine) + this.timeMachine = null + }, filterMethod(key) { + if (key === this.keyWord) { + return + } this.keyWord = key + this.destroyTimeMachine() + this.changeIndex++ + this.searchWithKey(this.changeIndex) + }, + refreshOptions() { + // this.data = [] + let method = multFieldValues + const token = this.$store.getters.token || getToken() + const linkToken = this.$store.getters.linkToken || getLinkToken() + if (!token && linkToken) { + method = linkMultFieldValues + } + if (!this.element.options.attrs.fieldId) { + return + } + const param = { fieldIds: this.element.options.attrs.fieldId.split(this.separator), sort: this.element.options.attrs.sort, keyword: this.keyWord } + if (this.panelInfo.proxy) { + param.userId = this.panelInfo.proxy + } + this.element.options.attrs.fieldId && + this.element.options.attrs.fieldId.length > 0 && + method(param).then(res => { + // console.log(res.data) + this.data = this.optionData(res.data) + /* this.$nextTick(() => { + this.handleCoustomStyle() + }) */ + // bus.$emit('valid-values-change', true) + }).catch(e => { + // bus.$emit('valid-values-change', false) + }) }, onScroll() { if (this.onFocus) {