14
14
NIcon ,
15
15
NScrollbar ,
16
16
NTooltip ,
17
- NSkeleton
17
+ NSkeleton ,
18
+ NEmpty
18
19
} from "naive-ui" ;
19
20
import { useStore } from "vuex" ;
20
21
import { computedVar } from "./utils" ;
@@ -47,7 +48,8 @@ export default class MCT {
47
48
ModalWithTabs,
48
49
NScrollbar,
49
50
NTooltip,
50
- NSkeleton
51
+ NSkeleton,
52
+ NEmpty
51
53
} ,
52
54
setup ( ) {
53
55
const store = useStore ( ) ;
@@ -68,16 +70,23 @@ export default class MCT {
68
70
} )
69
71
) ;
70
72
const genericModalTitle = ref ( null ) ;
73
+ const genericModalLoading = ref ( true ) ;
71
74
72
75
// external callbacks
73
76
self . genericModal = async ( title , slug ) => {
77
+ genericModalLoading . value = true ;
74
78
genericModal . value = null ;
75
79
genericModalShow . value = ! genericModalShow . value ;
76
80
genericModalTitle . value = title ;
77
- await store . dispatch (
78
- "content/requestPage" ,
79
- [ "UPDATE_GENERIC_MODAL" , slug ]
80
- ) ;
81
+ try {
82
+ await store . dispatch (
83
+ "content/requestPage" ,
84
+ [ "UPDATE_GENERIC_MODAL" , slug ]
85
+ ) ;
86
+ } catch {
87
+ // Do Nothing
88
+ }
89
+ genericModalLoading . value = false ;
81
90
}
82
91
83
92
// Define apiUrl in store state
@@ -128,6 +137,7 @@ export default class MCT {
128
137
tabBy,
129
138
api : self . api ,
130
139
genericModalShow,
140
+ genericModalLoading,
131
141
genericModalTitle,
132
142
logo,
133
143
disableMap,
@@ -147,7 +157,7 @@ export default class MCT {
147
157
<section class="main">
148
158
<n-message-provider>
149
159
<section class="main-header">
150
- <div class="main-header-container mct-scrollbar ">
160
+ <div class="main-header-container">
151
161
<div class="main-header-form">
152
162
<label class="main-header__label">Pesquisar por:</label>
153
163
<n-tabs type="segment" v-model:value="tabBy">
@@ -189,10 +199,7 @@ export default class MCT {
189
199
v-model:show="genericModalShow"
190
200
:title="genericModalTitle"
191
201
>
192
- <template v-if="modalContent">
193
- <div v-html="modalContent"></div>
194
- </template>
195
- <template v-else>
202
+ <template v-if="genericModalLoading">
196
203
<n-skeleton
197
204
:height="48"
198
205
:sharp="false"
@@ -206,6 +213,21 @@ export default class MCT {
206
213
<n-skeleton text :repeat="8" style="margin-bottom: 8px;" />
207
214
<n-skeleton text style=" width: 60%; margin-bottom: 24px;" />
208
215
</template>
216
+ <template v-else-if="modalContent">
217
+ <div v-html="modalContent"></div>
218
+ </template>
219
+ <template v-else>
220
+ <n-empty
221
+ description="Nada para ser exibido."
222
+ style="min-height: 70vh; display: flex; justify-content: center;"
223
+ >
224
+ <template #extra>
225
+ <span
226
+ style="color: #c5c5c5; font-size: .95rem; font-weight: 500"
227
+ >Página não existe ou não tem conteúdo para ser exibido.</span>
228
+ </template>
229
+ </n-empty>
230
+ </template>
209
231
</modal>
210
232
</n-message-provider>
211
233
</section>
0 commit comments