main
vue 51 lines 1.53 KB
Raw
1 <template>
2 <n-input-group>
3 <n-select
4 v-model:value="templateName"
5 :options="templateNameOptions"
6 placeholder="Select..."
7 clearable
8 :loading="loadingOptions"
9 class="overflow-hidden"
10 to="body"
11 />
12 <n-button secondary @click="showManagerDialog = true">
13 <template #icon>
14 <Icon :name="SettingsIcon" />
15 </template>
16 </n-button>
17 </n-input-group>
18
19 <n-modal
20 v-model:show="showManagerDialog"
21 display-directive="show"
22 preset="card"
23 :style="{ maxWidth: 'min(600px, 90vw)', minHeight: 'min(270px, 90vh)', overflow: 'hidden' }"
24 title="Report templates manager"
25 :bordered="false"
26 segmented
27 >
28 <CaseReportTemplateManager />
29 </n-modal>
30 </template>
31
32 <script setup lang="ts">
33 import { NButton, NInputGroup, NModal, NSelect } from "naive-ui"
34 import { computed, onBeforeMount, ref } from "vue"
35 import Icon from "@/components/common/Icon.vue"
36 import { useCaseReportTemplateStore } from "@/stores/caseReportTemplate"
37 import CaseReportTemplateManager from "./CaseReportTemplateManager.vue"
38
39 const templateName = defineModel<string | null>("value", { default: null })
40
41 const SettingsIcon = "carbon:settings"
42 const showManagerDialog = ref(false)
43 const caseReportTemplateStore = useCaseReportTemplateStore()
44 const loadingOptions = computed(() => caseReportTemplateStore.loading)
45 const templateNameList = computed(() => caseReportTemplateStore.templatesList)
46 const templateNameOptions = computed(() => templateNameList.value.map(item => ({ label: item, value: item })))
47
48 onBeforeMount(() => {
49 caseReportTemplateStore.init()
50 })
51 </script>