fix: 修复实体搜索框因输入语句包含and导致识别错误的问题,以及schema字段修改导致的模糊搜索domain和app不能识别的问题
This commit is contained in:
@@ -1398,7 +1398,7 @@ export function comparedEntityKey (str) {
|
|||||||
const regex = /\ = | =|= /g
|
const regex = /\ = | =|= /g
|
||||||
q = q.replace(regex, '=')
|
q = q.replace(regex, '=')
|
||||||
|
|
||||||
if (q.indexOf('AND') > -1) {
|
if (q.indexOf('AND') > -1 && checkStrIncludeAnd(q)) {
|
||||||
const arr = q.split(' AND ')
|
const arr = q.split(' AND ')
|
||||||
let newQ = ''
|
let newQ = ''
|
||||||
let errorQ = ''
|
let errorQ = ''
|
||||||
@@ -1449,6 +1449,7 @@ export function comparedEntityKey (str) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
const key = q.substring(0, q.indexOf('='))
|
const key = q.substring(0, q.indexOf('='))
|
||||||
|
q = q.replace(/ AND /g, ' and ')
|
||||||
const obj = columnList.find(t => t.label.toLowerCase() === key.toLowerCase())
|
const obj = columnList.find(t => t.label.toLowerCase() === key.toLowerCase())
|
||||||
if (obj) {
|
if (obj) {
|
||||||
return { key: obj.label + q.substring(q.indexOf('='), q.length), isKey: true }
|
return { key: obj.label + q.substring(q.indexOf('='), q.length), isKey: true }
|
||||||
@@ -1511,11 +1512,15 @@ export const handleEntityTypeByStr = (str) => {
|
|||||||
const reg = /^(?=^.{3,255}$)(http(s)?:\/\/)?(www\.)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:\d+)*(\/\w+\.\w+)*$/
|
const reg = /^(?=^.{3,255}$)(http(s)?:\/\/)?(www\.)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:\d+)*(\/\w+\.\w+)*$/
|
||||||
|
|
||||||
if (regexIPv4.test(str) || regexIPv6.test(str)) {
|
if (regexIPv4.test(str) || regexIPv6.test(str)) {
|
||||||
return `IP='${str}'`
|
const obj = columnList.find(t => t.label.toLowerCase() === 'ip')
|
||||||
|
return `${obj.label}='${str}'`
|
||||||
} else if (reg.test(str)) {
|
} else if (reg.test(str)) {
|
||||||
return `Domain LIKE '%${str}'`
|
// 只写作domain即可,schema字段更改几次,避免后续再更改,直接拿columnList的label进行替换
|
||||||
|
const obj = columnList.find(t => t.label.toLowerCase() === 'domain')
|
||||||
|
return `${obj.label} LIKE '%${str}'`
|
||||||
} else {
|
} else {
|
||||||
return `App LIKE '%${str}%'`
|
const obj = columnList.find(t => t.label.toLowerCase() === 'app')
|
||||||
|
return `${obj.label} LIKE '%${str}%'`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1609,3 +1614,28 @@ const combineLabel1 = (list) => {
|
|||||||
return acc
|
return acc
|
||||||
}, {})
|
}, {})
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 检测传过来的字符串是否包含and,
|
||||||
|
* 例如 app='Computer and Internet'这种情况,需要单独甄别
|
||||||
|
* @param str
|
||||||
|
*/
|
||||||
|
const checkStrIncludeAnd = (str) => {
|
||||||
|
const arr = str.split(' AND ')
|
||||||
|
let label = ''
|
||||||
|
|
||||||
|
arr.forEach((item, index) => {
|
||||||
|
// and前后的语句,前面一段不需要甄别,因为前一段可能是app='Computer,但后一段肯定不属于columnList
|
||||||
|
// 如果后面一段属于columnList的关键字,整段字符串具有and的连接效果
|
||||||
|
if (index % 2 !== 0) {
|
||||||
|
if (item.indexOf('=') > -1) {
|
||||||
|
label = item.substring(0, item.indexOf('='))
|
||||||
|
} else if (item.toLowerCase().indexOf(' in ') > -1) {
|
||||||
|
label = item.substring(0, item.toLowerCase().indexOf(' in '))
|
||||||
|
} else if (item.indexOf('has(') > -1) {
|
||||||
|
label = item.substring(4, item.indexOf(','))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
return columnList.find(t => t.label.toLowerCase() === label.toLowerCase())
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user