main
vue 66 lines 1.79 KB
Raw
1 <template>
2 <n-button :size :type :secondary @click="openDrawer">
3 <template #icon>
4 <Icon :name="ThreatIcon" />
5 </template>
6 Threat Intel
7 </n-button>
8
9 <n-drawer
10 v-model:show="showThreatIntelDrawer"
11 :width="500"
12 style="max-width: 90vw"
13 :trap-focus="false"
14 :close-on-esc="false"
15 :mask-closable="false"
16 display-directive="show"
17 >
18 <n-drawer-content title="Threat Intel" closable :native-scrollbar="false" body-content-class="px-0! py-4!">
19 <n-collapse default-expanded-names="1" accordion display-directive="show">
20 <n-collapse-item title="SOCFortress Threat Intel" name="1" class="px-6">
21 <ThreatIntelForm @mounted="threatIntelCTX = $event" />
22 </n-collapse-item>
23 <n-collapse-item title="Virus Total" name="2" class="px-6">
24 <VirusTotalForm @mounted="virusTotalCTX = $event" />
25 </n-collapse-item>
26 </n-collapse>
27 </n-drawer-content>
28 </n-drawer>
29 </template>
30
31 <script setup lang="ts">
32 import type { ButtonSize, ButtonType } from "naive-ui"
33 import { NButton, NCollapse, NCollapseItem, NDrawer, NDrawerContent } from "naive-ui"
34 import { ref, watch } from "vue"
35 import Icon from "@/components/common/Icon.vue"
36 import ThreatIntelForm from "./ThreatIntelForm.vue"
37 import VirusTotalForm from "./VirusTotalForm.vue"
38
39 defineProps<{
40 size?: ButtonSize
41 type?: ButtonType
42 secondary?: boolean
43 }>()
44
45 const ThreatIcon = "mynaui:info-waves"
46 const showThreatIntelDrawer = ref(false)
47 const threatIntelCTX = ref<{ restore: () => void } | null>(null)
48 const virusTotalCTX = ref<{ restore: () => void } | null>(null)
49
50 function openDrawer() {
51 showThreatIntelDrawer.value = true
52 }
53 function closeDrawer() {
54 showThreatIntelDrawer.value = false
55 }
56
57 watch(showThreatIntelDrawer, () => {
58 threatIntelCTX.value?.restore()
59 virusTotalCTX.value?.restore()
60 })
61
62 defineExpose({
63 openDrawer,
64 closeDrawer
65 })
66 </script>