fix: 修复实体搜索包含非连接符的and,由text转换到tag失败的问题
This commit is contained in:
@@ -456,7 +456,7 @@ export default {
|
||||
// 如果地址栏包含参数q,则匹配出metaList到搜索栏回显使用
|
||||
let { q } = this.$route.query
|
||||
if (q) {
|
||||
q = comparedEntityKey(q).key
|
||||
q = comparedEntityKey(handleEntityTypeByStr(q)).key
|
||||
const parser = new Parser(this.columnList)
|
||||
this.metaList = parser.parseStr(q).metaList
|
||||
}
|
||||
|
||||
@@ -117,7 +117,7 @@ export default {
|
||||
changeMode () {
|
||||
let str = this.codeMirror.getValue().trim()
|
||||
if (str) {
|
||||
str = comparedEntityKey(str).key
|
||||
str = comparedEntityKey(handleEntityTypeByStr(str)).key
|
||||
const parser = new Parser(this.columnList)
|
||||
const errorList = parser.validateStr(str)
|
||||
if (_.isEmpty(errorList)) {
|
||||
|
||||
@@ -792,7 +792,7 @@ export function handleOperatorSpace (operator) {
|
||||
export function handleMetaListToStr (metaList) {
|
||||
// 将模糊搜索的值,转换为对应类型,如1.1.1.1,则添加操作符,类型等,以便于后面的操作
|
||||
metaList.forEach(item => {
|
||||
if (item.column.type === 'fullText') {
|
||||
if (item.column && item.column.type === 'fullText') {
|
||||
item.operator.value = '='
|
||||
item.value.value = item.column.label
|
||||
item.value.label = item.column.label
|
||||
|
||||
@@ -1446,7 +1446,7 @@ export function comparedEntityKey (str) {
|
||||
}
|
||||
|
||||
return returnObj
|
||||
} else if (q.indexOf('LIKE') > -1) {
|
||||
} else if (q.indexOf(' LIKE ') > -1 || q.indexOf(' like ') > -1) {
|
||||
return {
|
||||
key: q,
|
||||
isKey: true
|
||||
@@ -1461,7 +1461,7 @@ export function comparedEntityKey (str) {
|
||||
return { key: '[' + key + ']', isKey: false }
|
||||
}
|
||||
}
|
||||
} else if (q && (q.indexOf(' IN ') > -1 || q.indexOf(' LIKE ') > -1)) {
|
||||
} else if (q && (q.indexOf(' IN ') > -1 || q.indexOf(' in ') > -1 || q.indexOf(' LIKE ') > -1 || q.indexOf(' like ') > -1)) {
|
||||
return {
|
||||
key: q,
|
||||
isKey: true
|
||||
@@ -1507,7 +1507,7 @@ export const handleEntityTypeByStr = (str) => {
|
||||
let match
|
||||
|
||||
// 将单引号包裹的and内容集合起来
|
||||
while ((match = regex.exec(str)) !== null) {
|
||||
while ((match = regex.exec(newStr)) !== null) {
|
||||
if (match[1].includes('and')) {
|
||||
tempList.push(match[1])
|
||||
}
|
||||
@@ -1516,10 +1516,10 @@ export const handleEntityTypeByStr = (str) => {
|
||||
// 将单引号包裹的and内容用特殊值代替
|
||||
tempList.forEach((item, index) => {
|
||||
const regex = new RegExp(item, 'g')
|
||||
str = str.replace(regex, `it is test keyword${index}`)
|
||||
newStr = newStr.replace(regex, `it is test keyword${index}`)
|
||||
})
|
||||
|
||||
const noAndList = str.split(' and ')
|
||||
const noAndList = newStr.split(' and ')
|
||||
noAndList.forEach((item, index) => {
|
||||
// 发现插入的特殊值,获取键值,根据键值替换成原来内容,删除键值
|
||||
if (item.indexOf('it is test keyword') > -1) {
|
||||
@@ -1538,8 +1538,8 @@ export const handleEntityTypeByStr = (str) => {
|
||||
}
|
||||
})
|
||||
|
||||
str = newArr.join(' and ')
|
||||
return str
|
||||
newStr = newArr.join(' and ')
|
||||
return newStr
|
||||
} else if (result) {
|
||||
return str
|
||||
} else if (!result) {
|
||||
|
||||
Reference in New Issue
Block a user