fix: 修复实体搜索包含非连接符的and,由text转换到tag失败的问题

This commit is contained in:
刘洪洪
2023-08-30 10:44:58 +08:00
parent de82981da0
commit dc9b25fd58
4 changed files with 10 additions and 10 deletions

View File

@@ -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
}

View File

@@ -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)) {

View File

@@ -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

View File

@@ -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) {