This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
cyber-narrator-cn-ui/src/views/detections/DetectionSearch.vue

193 lines
5.5 KiB
Vue
Raw Normal View History

2022-02-14 22:22:31 +08:00
<template>
2022-02-15 23:27:55 +08:00
<div class="explorer-search explorer-search--show-list">
2022-02-14 22:22:31 +08:00
<div class="explorer-search__input-case explorer-search__input-case--question-mark-in-line">
<div class="explorer-search__input">
<advanced-search
ref="search"
:column-list="columnList[pageType]"
2022-02-14 22:22:31 +08:00
:connection-list="connectionList"
:default-mode="defaultMode"
2022-02-14 22:22:31 +08:00
class="advanced-search--show-list"
:full-text="true"
:show-list="showList"
2022-02-14 22:22:31 +08:00
@search="search"
></advanced-search>
</div>
<!-- <div class="search-symbol-inline">-->
<!-- <i class="cn-icon cn-icon-help"></i>-->
<!-- </div>-->
2022-02-14 22:22:31 +08:00
</div>
</div>
</template>
<script>
import AdvancedSearch from '@/components/advancedSearch/Index'
import { schemaDetectionSecurity } from '@/utils/static-data'
import { useRoute } from 'vue-router'
import { ref } from 'vue'
2022-02-14 22:22:31 +08:00
export default {
name: 'DetectionSearch',
props: {
pageType: String
},
2022-02-14 22:22:31 +08:00
components: {
AdvancedSearch
},
data () {
return {
columnList: {
securityEvent: schemaDetectionSecurity,
performanceEvent: [
{
name: 'event_severity',
type: 'string',
// label: 'Event severity'
label: 'event_severity',
doc: {
constraints: {
operator_functions: '=,in'
}
}
},
{
name: 'app_name',
type: 'string',
// label: 'APP name'
label: 'app_name',
doc: {
constraints: {
operator_functions: '=,in'
}
}
},
{
name: 'domain',
type: 'string',
// label: 'Domain'
label: 'domain',
doc: {
constraints: {
operator_functions: '=,in'
}
}
},
{
name: 'server_ip',
type: 'string',
// label: 'IP'
label: 'server_ip',
doc: {
constraints: {
operator_functions: '=,in'
}
}
}
]
},
2023-06-07 15:58:59 +08:00
operatorList: ['=', '!=', /* '>', '<', '>=', '<=', */'IN', 'NOT IN', 'LIKE', 'NOT LIKE'],
2022-02-15 23:27:55 +08:00
connectionList: [
{
value: 'AND',
label: 'AND'
},
{
value: 'OR',
label: 'OR'
}
],
showList: true
2022-02-14 22:22:31 +08:00
}
},
emits: ['search'],
setup () {
// 根据地址栏添加mode即text和tag模式默认text
const { query } = useRoute()
const defaultMode = ref(query.mode || 'text')
return {
defaultMode
}
},
2022-02-14 22:22:31 +08:00
methods: {
2022-12-08 16:09:46 +08:00
/* search (metaList, formatSql) {
let sql = formatSql
// 全文搜索处理
if (metaList && this.$_.isArray(metaList)) {
const hasFullText = metaList.some(meta => {
return meta.column && meta.column.type === columnType.fullText
})
if (hasFullText) {
const parser = new SqlParser(metaList, this.columnList[this.pageType])
sql = parser.parseMetaToSql(metaList, true)
}
}
this.$emit('search', metaList, sql)
2022-12-08 16:09:46 +08:00
}, */
2022-06-06 17:34:55 +08:00
search ({ q, metaList }) {
this.$emit('search', { q, metaList })
2022-02-18 10:07:43 +08:00
},
changeParams (params) { // params: { column: columnName, oldValue: [...], newValue: [...] }
// 向下传递时需要再转换一次param格式为[{column, operator, value}, ...]
if (params.oldValue.length === 0 && params.newValue.length === 1) {
// 1.参数值数量从0到1直接addParams
const p = {
2023-10-22 18:29:34 +08:00
column: params.column,
2022-02-18 10:07:43 +08:00
operator: '=',
value: params.newValue
}
this.$refs.search.addParams([p])
} else if (params.oldValue.length === 1 && params.newValue.length === 0) {
// 2.参数值数量从1到0直接removeParams
const p = {
2023-10-22 18:29:34 +08:00
column: params.column,
2022-02-18 10:07:43 +08:00
operator: '=',
value: params.oldValue
2022-02-18 10:07:43 +08:00
}
this.$refs.search.removeParams([p])
} else if (params.oldValue.length === 2 && params.newValue.length === 1) {
// 3.参数值数量从多到1operator由'in'改为'='
const oldParam = {
2023-10-22 18:29:34 +08:00
column: params.column,
2022-02-18 10:07:43 +08:00
operator: 'IN',
value: params.oldValue
}
const newParam = {
2023-10-22 18:29:34 +08:00
column: params.column,
2022-02-18 10:07:43 +08:00
operator: '=',
value: params.newValue
}
this.$refs.search.changeParams([{ newParam, oldParam }])
} else if (params.oldValue.length === 1 && params.newValue.length === 2) {
2022-02-18 10:07:43 +08:00
// 4.参数值数量从1到多, operator由'='改为'in'
const oldParam = {
2023-10-22 18:29:34 +08:00
column: params.column,
2022-02-18 10:07:43 +08:00
operator: '=',
value: params.oldValue
}
const newParam = {
2023-10-22 18:29:34 +08:00
column: params.column,
2022-02-18 10:07:43 +08:00
operator: 'IN',
value: params.newValue
}
this.$refs.search.changeParams([{ newParam, oldParam }])
} else {
// 5.参数值数量从多到多加1或者减1
const oldParam = {
2023-10-22 18:29:34 +08:00
column: params.column,
operator: 'IN',
value: params.oldValue
}
const newParam = {
2023-10-22 18:29:34 +08:00
column: params.column,
operator: 'IN',
value: params.newValue
}
this.$refs.search.changeParams([{ newParam, oldParam }])
2022-02-18 10:07:43 +08:00
}
this.$nextTick(() => {
this.emitter.emit('advanced-search')
})
2022-02-14 22:22:31 +08:00
}
}
}
</script>