Skip to content

Commit 96f5ed7

Browse files
[fix]ISVJ-5321特殊字符字段过滤 review by qiw
1 parent 9ef233e commit 96f5ed7

File tree

3 files changed

+34
-4
lines changed

3 files changed

+34
-4
lines changed

src/common/util/FilterCondition.js

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,52 @@
1+
function getParseSpecialCharacter() {
2+
// 特殊字符字典
3+
const directory = ['(', ')', '(', ')', ',', ','];
4+
const res = {};
5+
directory.forEach((item, index) => {
6+
res[item] = `$${index}`
7+
});
8+
return res;
9+
}
10+
11+
function parseSpecialCharacter(str) {
12+
const directory = getParseSpecialCharacter();
13+
for (let key in directory) {
14+
const replaceValue = directory[key];
15+
const pattern = new RegExp(`\\${key}`, 'g');
16+
// eslint-disable-next-line
17+
while (pattern.test(str)) {
18+
str = str.replace(pattern, replaceValue);
19+
}
20+
}
21+
return str;
22+
}
23+
124
function parseCondition(filterCondition, keys) {
225
const str = filterCondition.replace(/&|\||>|<|=|!/g, ' ');
326
const arr = str.split(' ').filter((item) => item);
427
let result = filterCondition;
528
arr.forEach((item) => {
6-
const key = startsWithNumber(item) && keys.find((val) => val === item);
7-
if (key) {
29+
const key = keys.find((val) => val === item);
30+
if (startsWithNumber(item) && key) {
831
result = result.replace(key, '$' + key);
932
}
33+
if (key) {
34+
const res = parseSpecialCharacter(key);
35+
result = result.replace(key, res);
36+
}
1037
});
1138
return result;
1239
}
1340

1441
// 处理jsonsqlfeature, 加前缀
1542
function parseConditionFeature(feature) {
16-
const copyValue = {};
17-
for (const key in feature) {
43+
let copyValue = {};
44+
for (let key in feature) {
1845
let copyKey = key;
1946
if (startsWithNumber(key)) {
2047
copyKey = '$' + key;
2148
}
49+
copyKey = parseSpecialCharacter(copyKey);
2250
copyValue[copyKey] = feature[key];
2351
}
2452
return copyValue;

test/mapboxgl/mapping/WebMapSpec.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ describe('mapboxgl_WebMap', () => {
109109
datavizWebmap = new WebMap(id, options);
110110
datavizWebmap.on('mapinitialized', () => {
111111
datavizWebmap._getFiterFeatures('2020年人口数>20', [{ properties: { '2020年人口数': 30 }}]);
112+
datavizWebmap._getFiterFeatures('观测场海拔高度(米)>150', [{ properties: { '观测场海拔高度(米)': 150 }}]);
112113
done();
113114
});
114115
});

test/openlayers/mapping/WebMapSpec.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ describe('openlayers_WebMap', () => {
197197

198198
function successCallback() {
199199
datavizWebmap.getFiterFeatures('2020年人口数> 20', [{ get: () => ({ '2020年人口数': 30 }) }]);
200+
datavizWebmap.getFiterFeatures('观测场海拔高度(米)>150', [{ get: () => ({ '观测场海拔高度(米)': 30 }) }]);
200201
// datavizWebmap.createDataflowLayer({filterCondition:'2020年人口数> 20', pointStyle:{}, wsUrl: 'ws://test/iserver/services/dataflow/dataflow/subscribe'}, [{ get: () => ({ '2020年人口数': 30 }) }]);
201202
done();
202203
}

0 commit comments

Comments
 (0)