From d8014f859f84d208be1a6997ddc7fecdc31df9a5 Mon Sep 17 00:00:00 2001 From: chenjinsong <523037378@qq.com> Date: Fri, 18 Feb 2022 18:09:44 +0800 Subject: [PATCH] =?UTF-8?q?CN-296=20feat:=20=E5=B7=A6=E4=BE=A7=E7=AD=9B?= =?UTF-8?q?=E9=80=89=E5=92=8C=E6=90=9C=E7=B4=A2=E6=A1=86=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E3=80=81=E6=A0=B7=E5=BC=8F=E5=AE=8C=E6=88=90=EF=BC=9B=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=9C=AA=E5=AF=B9=E6=8E=A5=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/advancedSearch/Index.vue | 8 +- src/components/advancedSearch/TagMode.vue | 33 +++++- src/components/advancedSearch/TextMode.vue | 30 +++-- .../advancedSearch/meta/sql-parser.js | 4 +- src/utils/api.js | 11 +- src/views/detections/DetectionFilter.vue | 2 +- src/views/detections/DetectionSearch.vue | 27 +++-- src/views/detections/Index.vue | 108 +++++++++++++----- 8 files changed, 165 insertions(+), 58 deletions(-) diff --git a/src/components/advancedSearch/Index.vue b/src/components/advancedSearch/Index.vue index 73bed4ba..e1e507c2 100644 --- a/src/components/advancedSearch/Index.vue +++ b/src/components/advancedSearch/Index.vue @@ -79,13 +79,15 @@ export default { this.$refs.tagMode && this.$refs.tagMode.addParams(params) this.$refs.textMode && this.$refs.textMode.addParams(params) }, + // params: [{column, operator, value}, ...] removeParams (params) { this.$refs.tagMode && this.$refs.tagMode.removeParams(params) this.$refs.textMode && this.$refs.textMode.removeParams(params) }, - changeParams (n, o) { - this.$refs.tagMode && this.$refs.tagMode.changeParams(n, o) - this.$refs.textMode && this.$refs.textMode.changeParams(n, o) + // params: [{ newParam: {column, operator, value }, oldParam: { column, operator, value }], ...] + changeParams (params) { + this.$refs.tagMode && this.$refs.tagMode.changeParams(params) + this.$refs.textMode && this.$refs.textMode.changeParams(params) }, setSql (sql) { if (this.searchMode === 'text') { diff --git a/src/components/advancedSearch/TagMode.vue b/src/components/advancedSearch/TagMode.vue index 30b375ee..cc0bb275 100644 --- a/src/components/advancedSearch/TagMode.vue +++ b/src/components/advancedSearch/TagMode.vue @@ -242,8 +242,8 @@ export default { this.$emit('changeMode', 'text', formatSql) }, // 处理value,例如转换IN的值 - handleValue (value, column) { - const isArray = ['IN', 'NOT IN'].indexOf(column.operator.value) > -1 + handleValue (value, column, operator) { + const isArray = ['IN', 'NOT IN'].indexOf(operator) > -1 if (isArray) { if (this.$_.isArray(value)) { value = value.map(v => column.type === columnType.string ? stringInQuot(v) : v) @@ -266,14 +266,39 @@ export default { meta.column.label = column ? column.label : param.column meta.operator.value = '=' meta.operator.show = true - meta.value.value = this.handleValue(param.value, column) + meta.value.value = this.handleValue(param.value, column, column.operator) meta.value.show = true meta.value.label = meta.value.value this.addCondition(meta) }) }, changeParams (params) { - + params.forEach(param => { + const oldColumn = this.columnList.find(column => { + return column.name === param.oldParam.column + }) + const newColumn = this.columnList.find(column => { + return column.name === param.newParam.column + }) + const meta = this.metaList.find(m => m.column.name === oldColumn.name && m.operator.value === param.oldParam.operator && m.value.value === this.handleValue(param.oldParam.value, oldColumn, param.oldParam.operator)) + if (meta) { + meta.column.name = newColumn.name + meta.column.type = newColumn.type + meta.column.label = newColumn.label ? newColumn.label : newColumn.name + meta.operator.value = param.newParam.operator + meta.value.value = this.handleValue(param.newParam.value, newColumn, param.newParam.operator) + meta.value.label = meta.value.value + } + }) + }, + removeParams (params) { + params.forEach(param => { + const column = this.columnList.find(c => { + return c.name === param.column + }) + const metaIndex = this.metaList.findIndex(m => m.column.name === param.column && m.operator.value === param.operator && m.value.value === this.handleValue(param.value, column, param.operator)) + this.metaList.splice(metaIndex, 1) + }) } }, watch: { diff --git a/src/components/advancedSearch/TextMode.vue b/src/components/advancedSearch/TextMode.vue index ce58cc5c..fdcda0dd 100644 --- a/src/components/advancedSearch/TextMode.vue +++ b/src/components/advancedSearch/TextMode.vue @@ -104,21 +104,27 @@ export default { }) toRaw(this.codeMirror).setValue(current) }, - removeParams () { - + removeParams (params) { + let current = this.codeMirror.getValue() + params.forEach(param => { + const column = this.columnList.find(c => c.name === param.column) + // 将对应内容替换为空串 + const sqlPiece = `${param.column}${handleOperatorSpace(param.operator)}${this.handleValue(param.value, column, param.operator)}`.trim() + current = current.replace(sqlPiece, '') + }) + toRaw(this.codeMirror).setValue(current) }, changeParams (params) { - Object.keys(params).forEach(key => { - const column = this.columnList.find(column => { - return column.name === key - }) - console.info(this.columnList, params) - let current = this.codeMirror.getValue() - let selected = column.value - // if (selected && selected.length ) - current = `${current ? current + 'AND ' : ''}${key}=${(column.type === columnType.string ? stringInQuot(params[key]) : params[key])}` - toRaw(this.codeMirror).setValue(current) + let current = this.codeMirror.getValue() + params.forEach(param => { + const oldColumn = this.columnList.find(c => c.name === param.oldParam.column) + const newColumn = this.columnList.find(c => c.name === param.newParam.column) + // 将oldParam内容替换为newParam + const oldSqlPiece = `${param.oldParam.column}${handleOperatorSpace(param.oldParam.operator)}${this.handleValue(param.oldParam.value, oldColumn, param.oldParam.operator)}`.trim() + const newSqlPiece = `${param.newParam.column}${handleOperatorSpace(param.newParam.operator)}${this.handleValue(param.newParam.value, newColumn, param.newParam.operator)}`.trim() + current = current.replace(oldSqlPiece, newSqlPiece) }) + toRaw(this.codeMirror).setValue(current) } }, watch: { diff --git a/src/components/advancedSearch/meta/sql-parser.js b/src/components/advancedSearch/meta/sql-parser.js index 108ec973..ad2f0f4c 100644 --- a/src/components/advancedSearch/meta/sql-parser.js +++ b/src/components/advancedSearch/meta/sql-parser.js @@ -70,6 +70,8 @@ export default class SqlParser extends SqlParserVisitor { let tempArr = temp.split(',') tempArr = tempArr.map(t => meta.column.type === columnType.string ? stringInQuot(t.trim()) : t.trim()) meta.value.value = `(${tempArr.join(',')})` + } else { + meta.value.value = meta.column.type === columnType.string ? stringInQuot(meta.value.value.trim()) : meta.value.value.trim() } meta.value.label = meta.value.value } @@ -156,7 +158,7 @@ export default class SqlParser extends SqlParserVisitor { tempArr = tempArr.map(t => this.tempMeta.column.type === columnType.string ? stringInQuot(t.trim()) : t.trim()) this.tempMeta.value.value = `(${tempArr.join(',')})` } else { - this.tempMeta.value.value = value + this.tempMeta.value.value = this.tempMeta.column.type === columnType.string ? stringInQuot(value.trim()) : value.trim() } this.tempMeta.value.label = this.tempMeta.value.value } diff --git a/src/utils/api.js b/src/utils/api.js index 103355f3..e77cd5c6 100644 --- a/src/utils/api.js +++ b/src/utils/api.js @@ -73,10 +73,13 @@ export const api = { entityIpDetailSecurity: '/interface/entity/detail/overview/ip/security', entityIpRelatedServerDomain: '/interface/entity/detail/overview/ip/relatedDomain', entityIpRelatedServerApp: '/interface/entity/detail/overview/ip/relatedApp', - //detection - detectionEventSeverity:'/interface/detection/filter/severity', - detectionAttackType:'/interface/detection/filter/attackType', - detectionOffenderIp:'/interface/detection/filter/offenderIp', + // detection + detectionEventSeverity: '/interface/detection/filter/severity', + detectionAttackType: '/interface/detection/filter/attackType', + detectionOffenderIp: '/interface/detection/filter/offenderIp', + detectionOffenderLocation: '/interface/detection/filter/offenderLocation', + detectionVictimIp: '/interface/detection/filter/victimIp', + detectionVictimLocation: '/interface/detection/filter/victimLocation', detectionSeverity:'/interface/detection/filter/severity', detectionListBasic:'/interface/detection/list/basic' } diff --git a/src/views/detections/DetectionFilter.vue b/src/views/detections/DetectionFilter.vue index 5953d560..ad62ffa7 100644 --- a/src/views/detections/DetectionFilter.vue +++ b/src/views/detections/DetectionFilter.vue @@ -1,7 +1,7 @@