hl-core 0.0.8 → 0.0.9-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/index.ts +142 -101
- package/api/interceptors.ts +17 -13
- package/components/Button/Btn.vue +1 -1
- package/components/Button/ScrollButtons.vue +2 -2
- package/components/Complex/MessageBlock.vue +26 -0
- package/components/Complex/Page.vue +1 -1
- package/components/Dialog/Dialog.vue +9 -39
- package/components/Dialog/FamilyDialog.vue +7 -4
- package/components/Form/FormBlock.vue +90 -42
- package/components/Form/FormSection.vue +4 -1
- package/components/Form/FormToggle.vue +1 -2
- package/components/Form/ManagerAttachment.vue +197 -0
- package/components/Form/ProductConditionsBlock.vue +68 -14
- package/components/Input/Datepicker.vue +45 -0
- package/components/Input/FileInput.vue +2 -3
- package/components/Input/FormInput.vue +31 -7
- package/components/Input/PanelInput.vue +7 -2
- package/components/Input/RoundedInput.vue +2 -2
- package/components/Input/RoundedSelect.vue +137 -0
- package/components/Layout/Drawer.vue +4 -2
- package/components/Layout/Header.vue +40 -4
- package/components/Layout/Loader.vue +1 -1
- package/components/Layout/SettingsPanel.vue +51 -13
- package/components/Menu/MenuHover.vue +30 -0
- package/components/Menu/MenuNav.vue +29 -13
- package/components/Menu/MenuNavItem.vue +6 -3
- package/components/Pages/Anketa.vue +59 -33
- package/components/Pages/Auth.vue +139 -46
- package/components/Pages/Documents.vue +7 -7
- package/components/Pages/InvoiceInfo.vue +30 -0
- package/components/Pages/MemberForm.vue +544 -293
- package/components/Pages/ProductAgreement.vue +4 -2
- package/components/Pages/ProductConditions.vue +673 -75
- package/components/Panel/PanelHandler.vue +304 -0
- package/components/Panel/PanelSelectItem.vue +1 -1
- package/components/Transitions/SlideTransition.vue +5 -0
- package/components/Utilities/Chip.vue +27 -0
- package/components/Utilities/JsonViewer.vue +27 -0
- package/composables/axios.ts +1 -1
- package/composables/classes.ts +223 -101
- package/composables/constants.ts +26 -51
- package/composables/index.ts +80 -2
- package/composables/styles.ts +15 -3
- package/configs/i18n.ts +17 -0
- package/layouts/default.vue +6 -6
- package/locales/kz.json +585 -0
- package/locales/ru.json +587 -0
- package/nuxt.config.ts +13 -1
- package/package.json +43 -11
- package/pages/500.vue +2 -2
- package/pages/Token.vue +51 -0
- package/plugins/helperFunctionsPlugins.ts +6 -0
- package/plugins/storePlugin.ts +0 -1
- package/plugins/vuetifyPlugin.ts +8 -1
- package/store/data.store.ts +2649 -0
- package/store/form.store.ts +1 -1
- package/store/member.store.ts +164 -52
- package/store/{rules.js → rules.ts} +65 -34
- package/types/enum.ts +83 -0
- package/types/env.d.ts +10 -0
- package/types/index.ts +262 -5
- package/store/data.store.js +0 -2482
- package/store/messages.ts +0 -429
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<section v-if="sendingActions">
|
|
3
|
+
<div :class="[$libStyles.flexColNav]">
|
|
4
|
+
<v-form ref="vForm">
|
|
5
|
+
<base-rounded-input v-model.trim="actionCause" placeholder="Причина" :rules="$rules.required" />
|
|
6
|
+
</v-form>
|
|
7
|
+
<base-btn :text="buttonText" :loading="loading" @click="submitForm" />
|
|
8
|
+
</div>
|
|
9
|
+
</section>
|
|
10
|
+
<section v-if="acceptAction">
|
|
11
|
+
<div :class="[$libStyles.flexColNav]">
|
|
12
|
+
<base-content-block v-if="hasConditionsInfo" class="flex flex-col gap-3">
|
|
13
|
+
<span
|
|
14
|
+
>{{ `Сумма страховой премии ${paymentPeriod}:` }} <b>{{ `${insurancePremiumPerMonth}₸` }}</b></span
|
|
15
|
+
>
|
|
16
|
+
<span
|
|
17
|
+
>{{ `Запрашиваемая страховая сумма: ` }} <b>{{ `${requestedSumInsured}₸` }}</b>
|
|
18
|
+
</span>
|
|
19
|
+
</base-content-block>
|
|
20
|
+
<base-btn :text="$dataStore.t('confirm.yes')" @click="handleTask" />
|
|
21
|
+
<base-btn :btn="$libStyles.blueLightBtn" :text="$dataStore.t('confirm.no')" @click="closePanel" />
|
|
22
|
+
</div>
|
|
23
|
+
</section>
|
|
24
|
+
<section v-if="signingActions" class="relative">
|
|
25
|
+
<div>
|
|
26
|
+
<base-fade-transition>
|
|
27
|
+
<div v-if="!isSendNumberOpen" :class="[$libStyles.flexColNav]">
|
|
28
|
+
<div :class="[$libStyles.blueBgLight]" class="rounded-lg p-4">
|
|
29
|
+
<v-expansion-panels v-if="formStore.signUrls && formStore.signUrls.length" variant="accordion" multiple>
|
|
30
|
+
<v-expansion-panel v-for="signUrl of formStore.signUrls" :key="signUrl.iin!" class="border-[1px]" elevation="0" bg-color="#FFF">
|
|
31
|
+
<v-expansion-panel-title class="h-[80px]" :class="$libStyles.textTitle">{{ `${signUrl.longName} - ${signUrl.iin}` }}</v-expansion-panel-title>
|
|
32
|
+
<v-expansion-panel-text class="border-t-[1px]">
|
|
33
|
+
<section class="flex flex-col gap-4 py-3" :class="$libStyles.textSimple">
|
|
34
|
+
<base-btn :loading="loading" :text="$dataStore.t('sign.copyCloud')" @click="$dataStore.copyToClipboard(signUrl.uri)" />
|
|
35
|
+
<base-btn :loading="loading" :btn="$libStyles.blueLightBtn" :text="$dataStore.t('sign.recipientNumber')" @click="openSmsPanel(signUrl)" />
|
|
36
|
+
</section>
|
|
37
|
+
</v-expansion-panel-text>
|
|
38
|
+
</v-expansion-panel>
|
|
39
|
+
</v-expansion-panels>
|
|
40
|
+
<base-list-empty v-else />
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
<div v-if="isSendNumberOpen" :class="[$libStyles.flexColNav]">
|
|
44
|
+
<i
|
|
45
|
+
class="mdi mdi-arrow-left cursor-pointer absolute text-xl left-0 top-0 rounded-br-full bg-white border-[1px] pb-3 pt-1 pl-1 pr-3"
|
|
46
|
+
@click="isSendNumberOpen = false"
|
|
47
|
+
></i>
|
|
48
|
+
<base-form-section :title="selectedClient && selectedClient.longName ? selectedClient.longName : ''">
|
|
49
|
+
<v-form ref="vForm">
|
|
50
|
+
<base-rounded-input
|
|
51
|
+
v-model="phoneNumber"
|
|
52
|
+
:maska="$maska.phone"
|
|
53
|
+
:rules="$rules.required.concat($rules.phoneFormat)"
|
|
54
|
+
:label="$dataStore.t('form.phoneNumber')"
|
|
55
|
+
placeholder="+7 7"
|
|
56
|
+
/>
|
|
57
|
+
</v-form>
|
|
58
|
+
<base-btn :text="$dataStore.t('buttons.sendSMS')" :loading="loading" @click="submitForm"
|
|
59
|
+
/></base-form-section>
|
|
60
|
+
</div>
|
|
61
|
+
</base-fade-transition>
|
|
62
|
+
</div>
|
|
63
|
+
</section>
|
|
64
|
+
<section v-if="payingActions" class="relative">
|
|
65
|
+
<div>
|
|
66
|
+
<base-fade-transition>
|
|
67
|
+
<div v-if="!isSendNumberOpen" :class="[$libStyles.flexColNav]">
|
|
68
|
+
<base-btn :loading="loading" :text="$dataStore.t('payment.copyUrl')" @click="$dataStore.copyToClipboard(formStore.epayLink)" />
|
|
69
|
+
<base-btn :loading="loading" :btn="$libStyles.blueLightBtn" :text="$dataStore.t('payment.recipientNumber')" @click="openEpayPanel" />
|
|
70
|
+
</div>
|
|
71
|
+
<div v-if="isSendNumberOpen" :class="[$libStyles.flexColNav]">
|
|
72
|
+
<i
|
|
73
|
+
class="mdi mdi-arrow-left cursor-pointer absolute text-xl left-0 top-0 rounded-br-full bg-white border-[1px] pb-3 pt-1 pl-1 pr-3"
|
|
74
|
+
@click="isSendNumberOpen = false"
|
|
75
|
+
></i>
|
|
76
|
+
<base-form-section title="">
|
|
77
|
+
<v-form ref="vForm">
|
|
78
|
+
<base-rounded-input
|
|
79
|
+
v-model="phoneNumber"
|
|
80
|
+
:maska="$maska.phone"
|
|
81
|
+
:rules="$rules.required.concat($rules.phoneFormat)"
|
|
82
|
+
:label="$dataStore.t('form.phoneNumber')"
|
|
83
|
+
placeholder="+7 7"
|
|
84
|
+
/>
|
|
85
|
+
</v-form>
|
|
86
|
+
<base-btn :text="$dataStore.t('buttons.sendSMS')" :loading="loading" @click="submitForm" />
|
|
87
|
+
</base-form-section>
|
|
88
|
+
</div>
|
|
89
|
+
</base-fade-transition>
|
|
90
|
+
</div>
|
|
91
|
+
</section>
|
|
92
|
+
<section v-if="affiliateActions">
|
|
93
|
+
<div :class="[$libStyles.flexColNav]">
|
|
94
|
+
<v-form ref="vForm">
|
|
95
|
+
<base-content-block class="flex flex-col gap-3">
|
|
96
|
+
<base-form-input v-model.trim="formStore.affilationResolution.number" :rules="$rules.required" :label="$dataStore.t('form.documentNumber')" />
|
|
97
|
+
<base-form-input
|
|
98
|
+
v-model="formStore.affilationResolution.date"
|
|
99
|
+
:maska="$maska.date"
|
|
100
|
+
:rules="$rules.required"
|
|
101
|
+
:label="$dataStore.t('form.date')"
|
|
102
|
+
append-inner-icon="mdi mdi-calendar-blank-outline" />
|
|
103
|
+
<base-file-input v-if="!affiliationDocument" @input.prevent="onFileChange($event)" />
|
|
104
|
+
<base-empty-form-field v-if="affiliationDocument" class="justify-between">
|
|
105
|
+
{{ `${affiliationDocument.fileTypeName} - ${affiliationDocument.fileName}` }}
|
|
106
|
+
<i class="cursor-pointer mdi mdi-file-document mr-6 text-[#a0b3d8] text-xl"></i></base-empty-form-field
|
|
107
|
+
></base-content-block>
|
|
108
|
+
</v-form>
|
|
109
|
+
<base-btn :text="buttonText" :loading="loading" @click="submitForm" />
|
|
110
|
+
</div>
|
|
111
|
+
</section>
|
|
112
|
+
</template>
|
|
113
|
+
|
|
114
|
+
<script lang="ts">
|
|
115
|
+
import { DocumentItem } from '../../composables/classes';
|
|
116
|
+
export default defineComponent({
|
|
117
|
+
setup() {
|
|
118
|
+
const route = useRoute();
|
|
119
|
+
const dataStore = useDataStore();
|
|
120
|
+
const formStore = useFormStore();
|
|
121
|
+
const actionCause = ref<string>('');
|
|
122
|
+
const loading = ref<boolean>(false);
|
|
123
|
+
const vForm = ref<any>();
|
|
124
|
+
const isSendNumberOpen = ref<boolean>(false);
|
|
125
|
+
const phoneNumber = ref<string | null>(formStore.policyholderForm.phoneNumber ?? '');
|
|
126
|
+
const selectedClient = ref<SignUrlType>();
|
|
127
|
+
const documentDict = computed(() => dataStore.dicFileTypeList.find(i => i.nameRu === 'Решение АС'));
|
|
128
|
+
const affiliationDocument = computed(() => formStore.signedDocumentList.find((file: DocumentItem) => file.fileTypeName === 'Решение АС'));
|
|
129
|
+
const affiliationData = ref<{
|
|
130
|
+
processInstanceId: string | number;
|
|
131
|
+
fileTypeId: string | number | null;
|
|
132
|
+
fileTypeCode: string | number | null;
|
|
133
|
+
fileName?: string | number | null;
|
|
134
|
+
}>({
|
|
135
|
+
processInstanceId: formStore.applicationData.processInstanceId,
|
|
136
|
+
fileTypeId: documentDict.value ? documentDict.value.id : '',
|
|
137
|
+
fileTypeCode: documentDict.value ? documentDict.value.code : '',
|
|
138
|
+
});
|
|
139
|
+
const affiliationFormData = ref(new FormData());
|
|
140
|
+
|
|
141
|
+
const openSmsPanel = (signInfo: SignUrlType) => {
|
|
142
|
+
if (signInfo) {
|
|
143
|
+
isSendNumberOpen.value = true;
|
|
144
|
+
selectedClient.value = signInfo;
|
|
145
|
+
phoneNumber.value = signInfo.phoneNumber;
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
const openEpayPanel = () => {
|
|
150
|
+
isSendNumberOpen.value = true;
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
const closePanel = () => {
|
|
154
|
+
dataStore.panel.open = false;
|
|
155
|
+
dataStore.panelAction = null;
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
const onFileChange = (event: InputEvent) => {
|
|
159
|
+
if (event.target) {
|
|
160
|
+
const files = (event.target as HTMLInputElement).files;
|
|
161
|
+
if (files && files.length && files[0].name !== affiliationData.value.fileName) {
|
|
162
|
+
affiliationData.value.fileName = files[0].name;
|
|
163
|
+
affiliationFormData.value.append('file', files[0]);
|
|
164
|
+
affiliationFormData.value.append('fileData', JSON.stringify([affiliationData.value]));
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
const submitForm = async () => {
|
|
170
|
+
await vForm.value.validate().then(async (v: { valid: Boolean; errors: any }) => {
|
|
171
|
+
if (v.valid) {
|
|
172
|
+
loading.value = true;
|
|
173
|
+
switch (dataStore.panelAction) {
|
|
174
|
+
case constants.actions.pay:
|
|
175
|
+
await dataStore.sendSMS('PayUrl', phoneNumber.value!, formStore.epayLink!);
|
|
176
|
+
break;
|
|
177
|
+
case constants.actions.sign:
|
|
178
|
+
await dataStore.sendSMS('SignUrl', phoneNumber.value!, selectedClient.value?.uri!);
|
|
179
|
+
break;
|
|
180
|
+
case constants.actions.affiliate:
|
|
181
|
+
formStore.affilationResolution.processInstanceId = formStore.applicationData.processInstanceId;
|
|
182
|
+
let uploaded, confirmed;
|
|
183
|
+
confirmed = await dataStore.setConfirmation();
|
|
184
|
+
if (affiliationData.value.fileName) {
|
|
185
|
+
uploaded = await dataStore.uploadFiles(affiliationFormData.value);
|
|
186
|
+
}
|
|
187
|
+
if ((affiliationData.value.fileName && confirmed && uploaded) || (!affiliationData.value.fileName && confirmed)) {
|
|
188
|
+
await handleTask();
|
|
189
|
+
}
|
|
190
|
+
break;
|
|
191
|
+
default:
|
|
192
|
+
await handleTask();
|
|
193
|
+
}
|
|
194
|
+
loading.value = false;
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
const handleTask = async () => {
|
|
200
|
+
loading.value = true;
|
|
201
|
+
await dataStore.handleTask(dataStore.panelAction, route.params.taskId as string, actionCause.value);
|
|
202
|
+
loading.value = false;
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
const buttonText = computed(() => {
|
|
206
|
+
switch (dataStore.panelAction) {
|
|
207
|
+
case constants.actions.reject:
|
|
208
|
+
case constants.actions.rejectclient:
|
|
209
|
+
return dataStore.t('buttons.rejectStatement');
|
|
210
|
+
case constants.actions.return:
|
|
211
|
+
return dataStore.t('buttons.returnStatement');
|
|
212
|
+
case constants.actions.accept:
|
|
213
|
+
return dataStore.t('buttons.approve');
|
|
214
|
+
case constants.actions.sign:
|
|
215
|
+
return dataStore.t('buttons.sign');
|
|
216
|
+
case constants.actions.pay:
|
|
217
|
+
return dataStore.t('buttons.pay');
|
|
218
|
+
case constants.actions.register:
|
|
219
|
+
return dataStore.t('buttons.register');
|
|
220
|
+
case constants.actions.affiliate:
|
|
221
|
+
return dataStore.t('buttons.send');
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
watch(
|
|
226
|
+
() => dataStore.panelAction,
|
|
227
|
+
val => {
|
|
228
|
+
if (!!val) {
|
|
229
|
+
dataStore.panel.title = buttonText.value!;
|
|
230
|
+
dataStore.panel.open = true;
|
|
231
|
+
}
|
|
232
|
+
},
|
|
233
|
+
{ immediate: true },
|
|
234
|
+
);
|
|
235
|
+
const sendingActions = computed(
|
|
236
|
+
() => dataStore.panelAction === constants.actions.reject || dataStore.panelAction === constants.actions.return || dataStore.panelAction === constants.actions.rejectclient,
|
|
237
|
+
);
|
|
238
|
+
const acceptAction = computed(() => dataStore.panelAction === constants.actions.accept);
|
|
239
|
+
const signingActions = computed(() => dataStore.panelAction === constants.actions.sign);
|
|
240
|
+
const payingActions = computed(() => dataStore.panelAction === constants.actions.pay);
|
|
241
|
+
const affiliateActions = computed(() => dataStore.panelAction === constants.actions.affiliate);
|
|
242
|
+
const paymentPeriod = computed(() => formStore.productConditionsForm.paymentPeriod.nameRu);
|
|
243
|
+
const insurancePremiumPerMonth = computed(() => dataStore.getNumberWithSpaces(formStore.productConditionsForm.insurancePremiumPerMonth));
|
|
244
|
+
const requestedSumInsured = computed(() => dataStore.getNumberWithSpaces(formStore.productConditionsForm.requestedSumInsured));
|
|
245
|
+
const hasConditionsInfo = computed(() => {
|
|
246
|
+
if (dataStore.isFinCenter()) {
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
return true;
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
return {
|
|
253
|
+
// State
|
|
254
|
+
formStore,
|
|
255
|
+
loading,
|
|
256
|
+
actionCause,
|
|
257
|
+
vForm,
|
|
258
|
+
isSendNumberOpen,
|
|
259
|
+
phoneNumber,
|
|
260
|
+
selectedClient,
|
|
261
|
+
|
|
262
|
+
// Functions
|
|
263
|
+
closePanel,
|
|
264
|
+
submitForm,
|
|
265
|
+
handleTask,
|
|
266
|
+
openSmsPanel,
|
|
267
|
+
openEpayPanel,
|
|
268
|
+
onFileChange,
|
|
269
|
+
|
|
270
|
+
// Computed
|
|
271
|
+
buttonText,
|
|
272
|
+
sendingActions,
|
|
273
|
+
signingActions,
|
|
274
|
+
payingActions,
|
|
275
|
+
acceptAction,
|
|
276
|
+
affiliateActions,
|
|
277
|
+
paymentPeriod,
|
|
278
|
+
insurancePremiumPerMonth,
|
|
279
|
+
requestedSumInsured,
|
|
280
|
+
affiliationDocument,
|
|
281
|
+
hasConditionsInfo,
|
|
282
|
+
};
|
|
283
|
+
},
|
|
284
|
+
});
|
|
285
|
+
</script>
|
|
286
|
+
|
|
287
|
+
<style>
|
|
288
|
+
.v-expansion-panel-title__overlay {
|
|
289
|
+
background: #ffffff;
|
|
290
|
+
}
|
|
291
|
+
.v-expansion-panel-title {
|
|
292
|
+
height: 70px !important;
|
|
293
|
+
padding: 10px 20px !important;
|
|
294
|
+
}
|
|
295
|
+
.v-expansion-panels--variant-accordion > :last-child {
|
|
296
|
+
border-top-left-radius: 0.5rem !important;
|
|
297
|
+
border-top-right-radius: 0.5rem !important;
|
|
298
|
+
border-top-left-radius: 0.5rem !important;
|
|
299
|
+
border-radius: 0.5rem !important;
|
|
300
|
+
}
|
|
301
|
+
.v-expansion-panel-text__wrapper {
|
|
302
|
+
padding: 10px 20px !important;
|
|
303
|
+
}
|
|
304
|
+
</style>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="flex justify-between
|
|
2
|
+
<div class="flex justify-between p-4 items-center cursor-pointer" :class="[$libStyles.rounded, $libStyles.blueBgLight, $libStyles.blueBgLightHover]">
|
|
3
3
|
<span :class="[$libStyles.textSimple]">{{ text }}</span>
|
|
4
4
|
<i class="mdi text-xl" :class="[selected ? `mdi-radiobox-marked ${$libStyles.greenText}` : 'mdi-radiobox-blank text-[#636363]']"></i>
|
|
5
5
|
</div>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<label v-if="chip && chip.title" class="transition-all leading-6 px-3 py-1 rounded-pill border-[1px] border-white mr-4 whitespace-nowrap" :class="[textSize, color]"
|
|
3
|
+
>{{ chip.title }}<v-tooltip v-if="chip.description" activator="parent" location="bottom" :max-width="maxWidth">{{ chip.description }}</v-tooltip></label
|
|
4
|
+
>
|
|
5
|
+
</template>
|
|
6
|
+
|
|
7
|
+
<script lang="ts">
|
|
8
|
+
export default defineComponent({
|
|
9
|
+
props: {
|
|
10
|
+
chip: {
|
|
11
|
+
type: Object as PropType<ChipComponent>,
|
|
12
|
+
},
|
|
13
|
+
color: {
|
|
14
|
+
type: String,
|
|
15
|
+
default: 'bg-[#A0B3D8] text-white group-hover:bg-white group-hover:!text-black',
|
|
16
|
+
},
|
|
17
|
+
textSize: {
|
|
18
|
+
type: String,
|
|
19
|
+
default: '!text-[10px]',
|
|
20
|
+
},
|
|
21
|
+
maxWidth: {
|
|
22
|
+
type: [String, Number],
|
|
23
|
+
default: 230,
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
</script>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<vue-json-pretty
|
|
3
|
+
:data="(data as JSONDataType)"
|
|
4
|
+
:show-icon="true"
|
|
5
|
+
:show-line="true"
|
|
6
|
+
:show-line-number="true"
|
|
7
|
+
:show-double-quotes="true"
|
|
8
|
+
:show-key-value-space="true"
|
|
9
|
+
:collapsed-on-click-brackets="true"
|
|
10
|
+
:deep="4"
|
|
11
|
+
/>
|
|
12
|
+
</template>
|
|
13
|
+
|
|
14
|
+
<script lang="ts">
|
|
15
|
+
import VueJsonPretty from 'vue-json-pretty';
|
|
16
|
+
import 'vue-json-pretty/lib/styles.css';
|
|
17
|
+
import { JSONDataType } from 'vue-json-pretty/types/utils';
|
|
18
|
+
|
|
19
|
+
export default defineComponent({
|
|
20
|
+
components: { VueJsonPretty },
|
|
21
|
+
props: {
|
|
22
|
+
data: {
|
|
23
|
+
required: false,
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
</script>
|
package/composables/axios.ts
CHANGED