diff --git a/public/config.js b/public/config.js index 4077e081..8e863370 100644 --- a/public/config.js +++ b/public/config.js @@ -14,6 +14,8 @@ const DEFAULT_TIME_FILTER_RANGE = { informationAggregation: 0, relatedEntity: 60 * 24 * 7, openPort: 60 * 24 * 7, + deviceInformation: 60 * 24 * 7, + accountInformation: 60 * 24 * 7, securityEvent: 60 * 24 * 7, performanceEvent: 60 * 24 * 7, behaviorPattern: 60 * 24 * 7 diff --git a/src/assets/css/font/iconfont.css b/src/assets/css/font/iconfont.css index 682c2a25..17ce4dc8 100644 --- a/src/assets/css/font/iconfont.css +++ b/src/assets/css/font/iconfont.css @@ -1,8 +1,8 @@ @font-face { font-family: "cn-icon"; /* Project id 2614877 */ - src: url('iconfont.woff2?t=1699411209748') format('woff2'), - url('iconfont.woff?t=1699411209748') format('woff'), - url('iconfont.ttf?t=1699411209748') format('truetype'); + src: url('iconfont.woff2?t=1701240781545') format('woff2'), + url('iconfont.woff?t=1701240781545') format('woff'), + url('iconfont.ttf?t=1701240781545') format('truetype'); } .cn-icon { @@ -13,6 +13,14 @@ -moz-osx-font-smoothing: grayscale; } +.cn-icon-account-info:before { + content: "\e80e"; +} + +.cn-icon-device-info:before { + content: "\e80f"; +} + .cn-icon-related:before { content: "\e640"; } diff --git a/src/assets/css/font/iconfont.js b/src/assets/css/font/iconfont.js index 7c9e69cc..ebc1a1e2 100644 --- a/src/assets/css/font/iconfont.js +++ b/src/assets/css/font/iconfont.js @@ -1 +1 @@ -window._iconfont_svg_string_2614877='',function(l){var a=(a=document.getElementsByTagName("script"))[a.length-1],c=a.getAttribute("data-injectcss"),a=a.getAttribute("data-disable-injectsvg");if(!a){var h,o,i,v,m,z=function(a,c){c.parentNode.insertBefore(a,c)};if(c&&!l.__iconfont__svg__cssinject__){l.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}h=function(){var a,c=document.createElement("div");c.innerHTML=l._iconfont_svg_string_2614877,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(a=document.body).firstChild?z(c,a.firstChild):a.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(h,0):(o=function(){document.removeEventListener("DOMContentLoaded",o,!1),h()},document.addEventListener("DOMContentLoaded",o,!1)):document.attachEvent&&(i=h,v=l.document,m=!1,s(),v.onreadystatechange=function(){"complete"==v.readyState&&(v.onreadystatechange=null,t())})}function t(){m||(m=!0,i())}function s(){try{v.documentElement.doScroll("left")}catch(a){return void setTimeout(s,50)}t()}}(window); +window._iconfont_svg_string_2614877 = '', (function (l) { var a = (a = document.getElementsByTagName('script'))[a.length - 1]; const c = a.getAttribute('data-injectcss'); var a = a.getAttribute('data-disable-injectsvg'); if (!a) { let h; let o; var i; var v; var m; const z = function (a, c) { c.parentNode.insertBefore(a, c) }; if (c && !l.__iconfont__svg__cssinject__) { l.__iconfont__svg__cssinject__ = !0; try { document.write('') } catch (a) { console && console.log(a) } }h = function () { let a; let c = document.createElement('div'); c.innerHTML = l._iconfont_svg_string_2614877, (c = c.getElementsByTagName('svg')[0]) && (c.setAttribute('aria-hidden', 'true'), c.style.position = 'absolute', c.style.width = 0, c.style.height = 0, c.style.overflow = 'hidden', c = c, (a = document.body).firstChild ? z(c, a.firstChild) : a.appendChild(c)) }, document.addEventListener ? ~['complete', 'loaded', 'interactive'].indexOf(document.readyState) ? setTimeout(h, 0) : (o = function () { document.removeEventListener('DOMContentLoaded', o, !1), h() }, document.addEventListener('DOMContentLoaded', o, !1)) : document.attachEvent && (i = h, v = l.document, m = !1, s(), v.onreadystatechange = function () { v.readyState == 'complete' && (v.onreadystatechange = null, t()) }) } function t () { m || (m = !0, i()) } function s () { try { v.documentElement.doScroll('left') } catch (a) { return void setTimeout(s, 50) }t() } }(window)) diff --git a/src/assets/css/font/iconfont.ttf b/src/assets/css/font/iconfont.ttf index 68ea333f..43b6b87c 100644 Binary files a/src/assets/css/font/iconfont.ttf and b/src/assets/css/font/iconfont.ttf differ diff --git a/src/assets/css/font/iconfont.woff b/src/assets/css/font/iconfont.woff index 9f1a90d0..ab0b4618 100644 Binary files a/src/assets/css/font/iconfont.woff and b/src/assets/css/font/iconfont.woff differ diff --git a/src/assets/css/font/iconfont.woff2 b/src/assets/css/font/iconfont.woff2 index c72340fe..2cdeec00 100644 Binary files a/src/assets/css/font/iconfont.woff2 and b/src/assets/css/font/iconfont.woff2 differ diff --git a/src/components/rightBox/settings/RoleBox.vue b/src/components/rightBox/settings/RoleBox.vue index 8502abd8..b4392866 100644 --- a/src/components/rightBox/settings/RoleBox.vue +++ b/src/components/rightBox/settings/RoleBox.vue @@ -183,21 +183,21 @@ export default { } } }, - checkParentNode(node) { - if(node && this.$refs.menuTree.getNode(node)){ - let parent = this.$refs.menuTree.getNode(node).parent - let parentNode = parent.data - if(parentNode && parentNode.id && parentNode.id !== 0 ){ - this.$refs.menuTree.setChecked(parentNode,true,false) + checkParentNode (node) { + if (node && this.$refs.menuTree.getNode(node)) { + const parent = this.$refs.menuTree.getNode(node).parent + const parentNode = parent.data + if (parentNode && parentNode.id && parentNode.id !== 0) { + this.$refs.menuTree.setChecked(parentNode, true, false) this.checkParentNode(parentNode) } } }, selectChange: function (data, isCheck, childIsCheck) { - if(isCheck) {//如果是选中节点,则同步选中所有的父辈节点(有全选和半选两种状态) + if (isCheck) { // 如果是选中节点,则同步选中所有的父辈节点(有全选和半选两种状态) this.checkParentNode(data) - } else {//如果是取消节点,则同步取消选中所有子节点 - if(data.children && data.children.length > 0) { + } else { // 如果是取消节点,则同步取消选中所有子节点 + if (data.children && data.children.length > 0) { data.children.forEach(node => { this.$refs.menuTree.setChecked(node, false, true) }) diff --git a/src/components/rightBox/settings/UserBox.vue b/src/components/rightBox/settings/UserBox.vue index 39d27af0..a6cfa6c9 100644 --- a/src/components/rightBox/settings/UserBox.vue +++ b/src/components/rightBox/settings/UserBox.vue @@ -132,9 +132,9 @@ export default { } } const validateConfirmPin = (rule, value, callback) => { // 确认密码的二次校验 - if (_.isEmpty(value) && !_.isEmpty(this.editObject.pin)) {//密码有内容,确认密码没内容 + if (_.isEmpty(value) && !_.isEmpty(this.editObject.pin)) { // 密码有内容,确认密码没内容 callback(new Error(this.$t('config.user.confirmPin'))) - } else if (!_.isEmpty(value) && value !== this.editObject.pin) {//密码有内容,确认密码也有内容,内容不一致 + } else if (!_.isEmpty(value) && value !== this.editObject.pin) { // 密码有内容,确认密码也有内容,内容不一致 callback(new Error(this.$t('config.user.confirmPinErr'))) } else { callback() diff --git a/src/components/table/setting/knowledgeBaseTableForCard.vue b/src/components/table/setting/knowledgeBaseTableForCard.vue index e9124d5b..63054a68 100644 --- a/src/components/table/setting/knowledgeBaseTableForCard.vue +++ b/src/components/table/setting/knowledgeBaseTableForCard.vue @@ -849,7 +849,7 @@ export default { }) }, beforeUnmount () { - //clearTimeout(this.timer) + // clearTimeout(this.timer) window.removeEventListener('resize', this.resize) const dom = document.getElementById('psiphonBarChart') if (dom) { diff --git a/src/utils/api.js b/src/utils/api.js index d8212cc9..d3a0b3bb 100644 --- a/src/utils/api.js +++ b/src/utils/api.js @@ -282,6 +282,8 @@ export const api = { basicInfo: apiVersion + '/entity/detail/basic', tags: apiVersion + '/entity/detail/kb/intelligence/tag', informationAggregation: apiVersion + '/entity/detail/kb/intelligence/list', + deviceInformation: apiVersion + '/entity/detail/subscribe/device', // 暂时写的值 + accountInformation: apiVersion + '/entity/detail/subscribe/account', // 暂时写的值 // 实体关系 entityGraph: { basicInfo: apiVersion + '/entity/graph/relation/basic', diff --git a/src/utils/constants.js b/src/utils/constants.js index 51a23026..aef62996 100644 --- a/src/utils/constants.js +++ b/src/utils/constants.js @@ -95,9 +95,10 @@ export const position = { } export const entityType = { - app: 'APP', - domain: 'Domain', - ip: 'IP' + app: 'app', + domain: 'domain', + ip: 'ip', + subscribe: 'subscribe' } export const knowledgeCardUpdateRecordType = { @@ -109,12 +110,60 @@ export const entityDetailTabsName = { informationAggregation: 'informationAggregation', relatedEntity: 'relatedEntity', openPort: 'openPort', + deviceInformation: 'deviceInformation', + accountInformation: 'accountInformation', digitalCertificate: 'digitalCertificate', securityEvent: 'securityEvent', performanceEvent: 'performanceEvent', behaviorPattern: 'behaviorPattern' } +export const entityDetailTabConfig = [ + { + name: 'app', + config: [ + { name: entityDetailTabsName.relatedEntity, label: 'entities.relatedEntity', icon: 'cn-icon cn-icon-domain-name-resolution', tag: 0 }, + { name: entityDetailTabsName.openPort, label: 'entities.openPort', icon: 'cn-icon cn-icon-open-port', tag: 0 }, + // { name: entityDetailTabsName.digitalCertificate, label: 'entities.digitalCertificate', icon: 'cn-icon cn-icon-digital-certificate', tag: 0 }, + { name: entityDetailTabsName.securityEvent, label: 'overall.securityEvent', icon: 'cn-icon cn-icon-security-event', tag: 0 }, + { name: entityDetailTabsName.performanceEvent, label: 'overall.performanceEvent', icon: 'cn-icon cn-icon-a-PerformanceEvent', tag: 0 } + ] + }, + { + name: 'domain', + config: [ + { name: entityDetailTabsName.informationAggregation, label: 'entities.informationAggregation', icon: 'cn-icon cn-icon-information-aggregation', tag: 0 }, + { name: entityDetailTabsName.relatedEntity, label: 'entities.relatedEntity', icon: 'cn-icon cn-icon-domain-name-resolution', tag: 0 }, + { name: entityDetailTabsName.openPort, label: 'entities.openPort', icon: 'cn-icon cn-icon-open-port', tag: 0 }, + // { name: entityDetailTabsName.digitalCertificate, label: 'entities.digitalCertificate', icon: 'cn-icon cn-icon-digital-certificate', tag: 0 }, + { name: entityDetailTabsName.securityEvent, label: 'overall.securityEvent', icon: 'cn-icon cn-icon-security-event', tag: 0 }, + { name: entityDetailTabsName.performanceEvent, label: 'overall.performanceEvent', icon: 'cn-icon cn-icon-a-PerformanceEvent', tag: 0 } + ] + }, + { + name: 'ip', + config: [ + { name: entityDetailTabsName.informationAggregation, label: 'entities.informationAggregation', icon: 'cn-icon cn-icon-information-aggregation', tag: 0 }, + { name: entityDetailTabsName.relatedEntity, label: 'entities.relatedEntity', icon: 'cn-icon cn-icon-domain-name-resolution', tag: 0 }, + { name: entityDetailTabsName.openPort, label: 'entities.openPort', icon: 'cn-icon cn-icon-open-port', tag: 0 }, + // { name: entityDetailTabsName.digitalCertificate, label: 'entities.digitalCertificate', icon: 'cn-icon cn-icon-digital-certificate', tag: 0 }, + { name: entityDetailTabsName.securityEvent, label: 'overall.securityEvent', icon: 'cn-icon cn-icon-security-event', tag: 0 }, + { name: entityDetailTabsName.performanceEvent, label: 'overall.performanceEvent', icon: 'cn-icon cn-icon-a-PerformanceEvent', tag: 0 }, + { name: entityDetailTabsName.behaviorPattern, label: 'entities.behaviorPattern', icon: 'cn-icon cn-icon-behavior', tag: 0 } + ] + }, + { + name: 'subscribe', + config: [ + { name: entityDetailTabsName.deviceInformation, label: 'entities.deviceInformation', icon: 'cn-icon cn-icon-device-info', tag: 0 }, + { name: entityDetailTabsName.accountInformation, label: 'entities.accountInformation', icon: 'cn-icon cn-icon-account-info', tag: 0 }, + { name: entityDetailTabsName.relatedEntity, label: 'entities.relatedEntity', icon: 'cn-icon cn-icon-domain-name-resolution', tag: 0 }, + { name: entityDetailTabsName.securityEvent, label: 'overall.securityEvent', icon: 'cn-icon cn-icon-security-event', tag: 0 }, + { name: entityDetailTabsName.performanceEvent, label: 'overall.performanceEvent', icon: 'cn-icon cn-icon-a-PerformanceEvent', tag: 0 } + ] + } +] + export const entityDetailRelatedEntitiesShowSize = 100 export const echartsFontSize = { diff --git a/src/views/charts2/chart-mixin.js b/src/views/charts2/chart-mixin.js index ad556b1d..ca31ac2e 100644 --- a/src/views/charts2/chart-mixin.js +++ b/src/views/charts2/chart-mixin.js @@ -47,6 +47,12 @@ export default { case entityDetailTabsName.openPort: dataRangeValue = DEFAULT_TIME_FILTER_RANGE.entity.openPort break + case entityDetailTabsName.deviceInformation: + dataRangeValue = DEFAULT_TIME_FILTER_RANGE.entity.deviceInformation + break + case entityDetailTabsName.accountInformation: + dataRangeValue = DEFAULT_TIME_FILTER_RANGE.entity.accountInformation + break case entityDetailTabsName.informationAggregation: dataRangeValue = DEFAULT_TIME_FILTER_RANGE.entity.informationAggregation break diff --git a/src/views/charts2/charts/entityDetail/EntityDetailTabs.vue b/src/views/charts2/charts/entityDetail/EntityDetailTabs.vue index 7d5a21d4..2db814c9 100644 --- a/src/views/charts2/charts/entityDetail/EntityDetailTabs.vue +++ b/src/views/charts2/charts/entityDetail/EntityDetailTabs.vue @@ -9,7 +9,7 @@ class="tab-pane--border-card">