main
vue 74 lines 1.73 KB
Raw
1 <template>
2 <n-spin :show="loading">
3 <div class="header flex items-center justify-end gap-2">
4 <div class="info flex grow gap-5">
5 <div class="box">
6 Total:
7 <code>{{ collectList.length }}</code>
8 </div>
9 </div>
10 </div>
11 <div class="my-3 flex min-h-52 flex-col gap-4">
12 <template v-if="collectList.length">
13 <CollectItem
14 v-for="item of collectList"
15 :key="item.___id"
16 :collect="item"
17 embedded
18 class="item-appear item-appear-bottom item-appear-005"
19 />
20 </template>
21 <template v-else>
22 <n-empty v-if="!loading" description="No items found" class="h-48 justify-center" />
23 </template>
24 </div>
25 </n-spin>
26 </template>
27
28 <script setup lang="ts">
29 import type { CollectResult, FlowResult } from "@/types/flow.d"
30 import { NEmpty, NSpin, useMessage } from "naive-ui"
31 import { nanoid } from "nanoid"
32 import { onBeforeMount, ref } from "vue"
33 import Api from "@/api"
34 import CollectItem from "@/components/artifacts/CollectItem.vue"
35
36 const { flow } = defineProps<{
37 flow: FlowResult
38 }>()
39
40 const message = useMessage()
41 const loading = ref(false)
42 const collectList = ref<CollectResult[]>([])
43
44 function getData() {
45 loading.value = true
46
47 Api.flow
48 .retrieve(flow.client_id, flow.session_id)
49 .then(res => {
50 if (res.data.success) {
51 collectList.value = (res.data.results || []).map(o => {
52 o.___id = nanoid()
53 return o
54 })
55 } else {
56 message.warning(res.data?.message || "An error occurred. Please try again later.")
57 }
58 })
59 .catch(err => {
60 message.error(err.response?.data?.message || "An error occurred. Please try again later.")
61 // MOCK
62 /*
63 collectList.value = collect_result
64 */
65 })
66 .finally(() => {
67 loading.value = false
68 })
69 }
70
71 onBeforeMount(() => {
72 getData()
73 })
74 </script>