perf: 下拉过滤器选模糊搜索
This commit is contained in:
parent
5c24fee5e2
commit
3ed4c133ba
@ -214,7 +214,7 @@ public class DataSetTableFieldController {
|
||||
public List<Object> multFieldValues(@RequestBody MultFieldValuesRequest multFieldValuesRequest) throws Exception {
|
||||
List<Object> results = new ArrayList<>();
|
||||
for (String fieldId : multFieldValuesRequest.getFieldIds()) {
|
||||
List<Object> fieldValues = dataSetFieldService.fieldValues(fieldId, multFieldValuesRequest.getSort(), multFieldValuesRequest.getUserId(), true, false);
|
||||
List<Object> 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<Object> 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
|
||||
|
||||
@ -13,4 +13,6 @@ public class MultFieldValuesRequest {
|
||||
|
||||
private DeSortDTO sort;
|
||||
|
||||
private String keyword;
|
||||
|
||||
}
|
||||
|
||||
@ -9,9 +9,9 @@ public interface DataSetFieldService {
|
||||
|
||||
List<Object> fieldValues(String fieldId, Long userId, Boolean userPermissions, Boolean rowAndColumnMgm) throws Exception;
|
||||
|
||||
List<Object> fieldValues(String fieldId, DeSortDTO sortDTO, Long userId, Boolean userPermissions, Boolean rowAndColumnMgm) throws Exception;
|
||||
List<Object> fieldValues(String fieldId, DeSortDTO sortDTO, Long userId, Boolean userPermissions, Boolean rowAndColumnMgm, String keyword) throws Exception;
|
||||
|
||||
List<Object> fieldValues(List<String> fieldIds, DeSortDTO sortDTO, Long userId, Boolean userPermissions, Boolean needMapping, Boolean rowAndColumnMgm) throws Exception;
|
||||
List<Object> fieldValues(List<String> fieldIds, DeSortDTO sortDTO, Long userId, Boolean userPermissions, Boolean needMapping, Boolean rowAndColumnMgm, String keyword) throws Exception;
|
||||
|
||||
List<Object> chineseSort(List<Object> list, DeSortDTO sortDTO) throws Exception;
|
||||
}
|
||||
|
||||
@ -58,14 +58,14 @@ public class DirectFieldService implements DataSetFieldService {
|
||||
public List<Object> fieldValues(String fieldId, Long userId, Boolean userPermissions, Boolean rowAndColumnMgm) throws Exception {
|
||||
List<String> 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<Object> fieldValues(String fieldId, DeSortDTO sortDTO, Long userId, Boolean userPermissions, Boolean rowAndColumnMgm) throws Exception {
|
||||
public List<Object> fieldValues(String fieldId, DeSortDTO sortDTO, Long userId, Boolean userPermissions, Boolean rowAndColumnMgm, String keyword) throws Exception {
|
||||
List<String> 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<DeSortField> buildSorts(List<DatasetTableField> allFields, DeSortDTO sortDTO) {
|
||||
@ -98,8 +98,15 @@ public class DirectFieldService implements DataSetFieldService {
|
||||
return result;
|
||||
}
|
||||
|
||||
private String formatTableByKeyword(String keyword, String originTable, List<DatasetTableField> fields) {
|
||||
if (StringUtils.isBlank(keyword)) return originTable;
|
||||
List<String> 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<Object> fieldValues(List<String> fieldIds, DeSortDTO sortDTO, Long userId, Boolean userPermissions, Boolean needMapping, Boolean rowAndColumnMgm) throws Exception {
|
||||
public List<Object> fieldValues(List<String> 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()) {
|
||||
|
||||
@ -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()
|
||||
},
|
||||
|
||||
|
||||
@ -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) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user