hl-core 0.0.7-beta.2 → 0.0.7-beta.21

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.
Files changed (57) hide show
  1. package/.prettierrc +2 -1
  2. package/api/index.ts +323 -31
  3. package/api/interceptors.ts +10 -1
  4. package/components/Button/Btn.vue +7 -2
  5. package/components/Button/BtnIcon.vue +47 -0
  6. package/components/Button/ScrollButtons.vue +6 -0
  7. package/components/Complex/Content.vue +1 -1
  8. package/components/Complex/ContentBlock.vue +5 -0
  9. package/components/Complex/Page.vue +13 -2
  10. package/components/{Layout → Dialog}/Dialog.vue +7 -11
  11. package/components/Dialog/FamilyDialog.vue +39 -0
  12. package/components/Form/FormBlock.vue +114 -0
  13. package/components/Form/FormSection.vue +18 -0
  14. package/components/Form/FormTextSection.vue +20 -0
  15. package/components/Form/FormToggle.vue +52 -0
  16. package/components/Form/ProductConditionsBlock.vue +68 -0
  17. package/components/Input/EmptyFormField.vue +5 -0
  18. package/components/Input/FileInput.vue +71 -0
  19. package/components/Input/FormInput.vue +171 -0
  20. package/components/Input/PanelInput.vue +133 -0
  21. package/components/Input/RoundedInput.vue +40 -36
  22. package/components/Layout/Drawer.vue +44 -0
  23. package/components/Layout/Header.vue +26 -12
  24. package/components/Layout/Loader.vue +9 -6
  25. package/components/Layout/SettingsPanel.vue +48 -0
  26. package/components/List/ListEmpty.vue +22 -0
  27. package/components/Menu/MenuNav.vue +70 -30
  28. package/components/Menu/MenuNavItem.vue +8 -1
  29. package/components/Pages/Anketa.vue +333 -0
  30. package/components/Pages/Auth.vue +91 -0
  31. package/components/Pages/Documents.vue +108 -0
  32. package/components/Pages/MemberForm.vue +1138 -0
  33. package/components/Pages/ProductAgreement.vue +18 -0
  34. package/components/Pages/ProductConditions.vue +349 -0
  35. package/components/Panel/PanelItem.vue +5 -0
  36. package/components/Panel/PanelSelectItem.vue +20 -0
  37. package/components/Transitions/FadeTransition.vue +5 -0
  38. package/composables/classes.ts +413 -207
  39. package/composables/constants.ts +27 -12
  40. package/composables/index.ts +73 -35
  41. package/composables/styles.ts +31 -7
  42. package/layouts/clear.vue +1 -1
  43. package/layouts/default.vue +72 -6
  44. package/layouts/full.vue +6 -0
  45. package/nuxt.config.ts +5 -2
  46. package/package.json +17 -11
  47. package/pages/500.vue +85 -0
  48. package/plugins/helperFunctionsPlugins.ts +10 -2
  49. package/plugins/storePlugin.ts +6 -5
  50. package/store/data.store.js +1858 -527
  51. package/store/member.store.ts +291 -0
  52. package/store/messages.ts +152 -34
  53. package/store/rules.js +26 -28
  54. package/tailwind.config.js +10 -0
  55. package/types/index.ts +250 -0
  56. package/models/index.ts +0 -23
  57. /package/store/{form.store.js → form.store.ts} +0 -0
package/.prettierrc CHANGED
@@ -5,5 +5,6 @@
5
5
  "trailingComma": "all",
6
6
  "bracketSpacing": true,
7
7
  "arrowParens": "avoid",
8
- "endOfLine": "auto"
8
+ "endOfLine": "auto",
9
+ "printWidth": 180
9
10
  }
package/api/index.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { useAxios } from '@/composables/axios';
2
+ import { Value, IDocument } from '@/composables/classes';
2
3
  import { AxiosRequestConfig } from 'axios';
3
4
 
4
5
  enum Methods {
@@ -7,21 +8,21 @@ enum Methods {
7
8
  }
8
9
 
9
10
  export class ApiClass {
10
- baseURL: string | undefined;
11
- constructor(baseURL: string | undefined) {
12
- this.baseURL = baseURL;
13
- }
11
+ private readonly baseURL: string = import.meta.env.VITE_BASE_URL as string;
12
+ private readonly productUrl: string = import.meta.env.VITE_PRODUCT_URL as string;
14
13
 
15
14
  private async axiosCall(config: AxiosRequestConfig) {
16
- const { data } = await useAxios(this.baseURL as string).request(config);
17
- return data;
15
+ const dataStore = useDataStore();
16
+ if ((dataStore.isEFO && this.baseURL) || (!dataStore.isEFO && this.baseURL && this.productUrl)) {
17
+ const { data } = await useAxios(this.baseURL as string).request(config);
18
+ return data;
19
+ } else {
20
+ console.error('No Axios baseURL or productURL');
21
+ return null;
22
+ }
18
23
  }
19
24
 
20
- async loginUser(data: {
21
- login: string;
22
- password: string;
23
- numAttempt: number;
24
- }) {
25
+ async loginUser(data: { login: string; password: string; numAttempt: number }): Promise<{ refreshToken: string; accessToken: string }> {
25
26
  return this.axiosCall({
26
27
  method: Methods.POST,
27
28
  url: '/identity/api/Account/login',
@@ -29,13 +30,7 @@ export class ApiClass {
29
30
  });
30
31
  }
31
32
 
32
- async getNewAccessToken({
33
- refreshToken,
34
- accessToken,
35
- }: {
36
- refreshToken: string;
37
- accessToken: string;
38
- }) {
33
+ async getNewAccessToken({ refreshToken, accessToken }: { refreshToken: string; accessToken: string }): Promise<{ refreshToken: string; accessToken: string }> {
39
34
  return this.axiosCall({
40
35
  method: Methods.POST,
41
36
  url: '/identity/api/Account/refresh',
@@ -70,6 +65,13 @@ export class ApiClass {
70
65
  });
71
66
  }
72
67
 
68
+ async getAdditionalTaxCountries() {
69
+ return this.axiosCall({
70
+ method: Methods.GET,
71
+ url: '/Ekk/api/Contragentinsis/DictionaryItems/Questionary?filter=507777',
72
+ });
73
+ }
74
+
73
75
  // Область
74
76
  async getStates() {
75
77
  return this.axiosCall({
@@ -157,6 +159,63 @@ export class ApiClass {
157
159
  });
158
160
  }
159
161
 
162
+ async getQuestionList(surveyType: string, processInstanceId: string, insuredId: number | string): Promise<AnketaFirst> {
163
+ return this.axiosCall({
164
+ method: Methods.GET,
165
+ url: `/Baiterek/api/Application/Anketa/${surveyType}/${processInstanceId}/${insuredId}`,
166
+ });
167
+ }
168
+
169
+ async getQuestionListSecond(surveyType: string, processInstanceId: string, insuredId: number | string): Promise<AnketaSecond[]> {
170
+ return this.axiosCall({
171
+ method: Methods.GET,
172
+ url: `/Baiterek/api/Application/Anketa/${surveyType}/${processInstanceId}/${insuredId}`,
173
+ });
174
+ }
175
+
176
+ async definedAnswers(filter: string) {
177
+ return this.axiosCall({
178
+ method: Methods.GET,
179
+ url: `/ekk/api/Contragentinsis/DictionaryItems/Questionary?filter=${filter}`,
180
+ });
181
+ }
182
+
183
+ async setSurvey(surveyData: AnketaFirst) {
184
+ return this.axiosCall({
185
+ method: Methods.POST,
186
+ data: surveyData,
187
+ url: `/${this.productUrl}/api/Application/SetAnketa`,
188
+ });
189
+ }
190
+
191
+ async getQuestionRefs(id: string | number): Promise<Value[]> {
192
+ return this.axiosCall({
193
+ method: Methods.GET,
194
+ url: `/Ekk/api/Contragentinsis/DictionaryItems/Questionary?filter=${id}`,
195
+ });
196
+ }
197
+
198
+ async getProcessIndexRate(processCode: string | number) {
199
+ return this.axiosCall({
200
+ method: Methods.GET,
201
+ url: `/Arm/api/Dictionary/ProcessIndexRate/${processCode}`,
202
+ });
203
+ }
204
+
205
+ async getAdditionalInsuranceTermsAnswers(processCode: string | number, questionId: string) {
206
+ return this.axiosCall({
207
+ method: Methods.GET,
208
+ url: `/Arm/api/Dictionary/ProcessCoverTypeSum/${processCode}/${questionId}`,
209
+ });
210
+ }
211
+
212
+ async getProcessPaymentPeriod(processCode: string | number) {
213
+ return this.axiosCall({
214
+ method: Methods.GET,
215
+ url: `/Arm/api/Dictionary/ProcessPaymentPeriod/${processCode}`,
216
+ });
217
+ }
218
+
160
219
  async getContragentById(id: any) {
161
220
  return this.axiosCall({
162
221
  method: Methods.GET,
@@ -172,7 +231,7 @@ export class ApiClass {
172
231
  });
173
232
  }
174
233
 
175
- async getFile(id: any) {
234
+ async getFile(id: string) {
176
235
  return await this.axiosCall({
177
236
  method: Methods.GET,
178
237
  url: `/Arm/api/File/DownloadFile/${id}`,
@@ -190,35 +249,35 @@ export class ApiClass {
190
249
  });
191
250
  }
192
251
 
193
- async getContrAgentData(personId: any) {
252
+ async getContrAgentData(personId: string | number) {
194
253
  return this.axiosCall({
195
254
  method: Methods.GET,
196
255
  url: `/Ekk/api/Contragentinsis/Questionaries?PersonId=${personId}`,
197
256
  });
198
257
  }
199
258
 
200
- async getContrAgentContacts(personId: any) {
259
+ async getContrAgentContacts(personId: string | number) {
201
260
  return this.axiosCall({
202
261
  method: Methods.GET,
203
262
  url: `/Ekk/api/Contragentinsis/Contacts?PersonId=${personId}`,
204
263
  });
205
264
  }
206
265
 
207
- async getContrAgentDocuments(personId: any) {
266
+ async getContrAgentDocuments(personId: string | number) {
208
267
  return this.axiosCall({
209
268
  method: Methods.GET,
210
269
  url: `/Ekk/api/Contragentinsis/Documents?PersonId=${personId}`,
211
270
  });
212
271
  }
213
272
 
214
- async getContrAgentAddress(personId: any) {
273
+ async getContrAgentAddress(personId: string | number) {
215
274
  return this.axiosCall({
216
275
  method: Methods.GET,
217
276
  url: `/Ekk/api/Contragentinsis/Address?PersonId=${personId}`,
218
277
  });
219
278
  }
220
279
 
221
- async getTaskList(data: any) {
280
+ async getTaskList(data: any): Promise<{ items: TaskListItem[]; totalItems: number }> {
222
281
  return this.axiosCall({
223
282
  method: Methods.POST,
224
283
  url: `/Arm/api/Bpm/TaskList`,
@@ -226,13 +285,13 @@ export class ApiClass {
226
285
  });
227
286
  }
228
287
 
229
- async getProcessHistory(id: any) {
288
+ async getProcessHistory(id: string): Promise<TaskHistory[]> {
230
289
  return this.axiosCall({
231
290
  url: `/Arm/api/Bpm/GetProcessHistory?processInstanceId=${id}`,
232
291
  });
233
292
  }
234
293
 
235
- async sendSms(data: any) {
294
+ async sendSms(data: { phone: string; template: string; tempFlags: { url: string } }): Promise<void> {
236
295
  return this.axiosCall({
237
296
  baseURL: import.meta.env.VITE_SMS_SERVICE as string,
238
297
  method: Methods.POST,
@@ -241,7 +300,7 @@ export class ApiClass {
241
300
  });
242
301
  }
243
302
 
244
- async getUserGroups() {
303
+ async getUserGroups(): Promise<Item[]> {
245
304
  return this.axiosCall({
246
305
  method: Methods.GET,
247
306
  url: '/Arm/api/Bpm/TaskGroups',
@@ -255,7 +314,7 @@ export class ApiClass {
255
314
  });
256
315
  }
257
316
 
258
- async getOtpStatus(data: any) {
317
+ async getOtpStatus(data: OtpDataType): Promise<boolean> {
259
318
  return this.axiosCall({
260
319
  method: Methods.POST,
261
320
  url: '/Arm/api/Otp/OtpLifeStatus',
@@ -263,7 +322,7 @@ export class ApiClass {
263
322
  });
264
323
  }
265
324
 
266
- async sendOtp(data: any) {
325
+ async sendOtp(data: OtpDataType): Promise<SendOtpResponse> {
267
326
  return this.axiosCall({
268
327
  method: Methods.POST,
269
328
  url: '/Arm/api/Otp/Get',
@@ -271,7 +330,7 @@ export class ApiClass {
271
330
  });
272
331
  }
273
332
 
274
- async checkOtp(data: any) {
333
+ async checkOtp(data: { tokenId: string; phoneNumber: string; code: string }): Promise<SendOtpResponse> {
275
334
  return this.axiosCall({
276
335
  method: Methods.POST,
277
336
  url: '/Arm/api/Otp/Check',
@@ -279,10 +338,243 @@ export class ApiClass {
279
338
  });
280
339
  }
281
340
 
282
- async getProcessList() {
341
+ async getProcessList(): Promise<Item[]> {
283
342
  return this.axiosCall({
284
343
  method: Methods.GET,
285
344
  url: '/Arm/api/Bpm/ProcessList',
345
+ timeout: 10000,
346
+ });
347
+ }
348
+
349
+ async startApplication(data: StartApplicationType): Promise<{
350
+ processInstanceId: string;
351
+ }> {
352
+ return this.axiosCall({
353
+ method: Methods.POST,
354
+ url: `/${this.productUrl}/api/Application/StartApplication`,
355
+ data: data,
356
+ });
357
+ }
358
+
359
+ async getApplicationData(id: string) {
360
+ return this.axiosCall({
361
+ url: `/${this.productUrl}/api/Application/applicationData?Id=${id} `,
362
+ });
363
+ }
364
+
365
+ async getCalculation(id: string) {
366
+ return this.axiosCall({
367
+ method: Methods.POST,
368
+ url: `/${this.productUrl}/api/Application/Calculator?processInstanceId=${id}`,
369
+ });
370
+ }
371
+
372
+ async setApplication(data: any) {
373
+ return this.axiosCall({
374
+ method: Methods.POST,
375
+ url: `/${this.productUrl}/api/Application/SetApplicationData`,
376
+ data,
377
+ responseType: 'blob',
378
+ });
379
+ }
380
+
381
+ async generatePdfDocument(data: any) {
382
+ return await this.axiosCall({
383
+ method: Methods.POST,
384
+ url: `/Arm/api/Bpm/GeneratePdfDocument`,
385
+ responseType: 'blob',
386
+ data: data,
387
+ });
388
+ }
389
+
390
+ async deleteFile(data: any) {
391
+ return this.axiosCall({
392
+ method: Methods.POST,
393
+ url: '/Arm/api/File/DeleteFiles',
394
+ data: data,
395
+ });
396
+ }
397
+
398
+ async uploadFiles(data: any) {
399
+ return this.axiosCall({
400
+ method: Methods.POST,
401
+ url: '/Arm/api/File/UploadFiles',
402
+ headers: {
403
+ 'Content-Type': 'multipart/form-data',
404
+ },
405
+ data: data,
406
+ });
407
+ }
408
+
409
+ async sendTask(data: any) {
410
+ return this.axiosCall({
411
+ method: Methods.POST,
412
+ url: `/${this.productUrl}/api/Application/SendTask`,
413
+ data: data,
414
+ });
415
+ }
416
+
417
+ async setMember(whichMember: string, data: any) {
418
+ return this.axiosCall({
419
+ method: Methods.POST,
420
+ url: `/Arm/api/BpmMembers/Set${whichMember}`,
421
+ data: data,
422
+ });
423
+ }
424
+
425
+ async deleteMember(whichMember: string, id: number | string) {
426
+ return this.axiosCall({
427
+ method: Methods.POST,
428
+ url: `/Arm/api/BpmMembers/Delete${whichMember}/${id}`,
429
+ });
430
+ }
431
+
432
+ async getInvoiceData(processInstanceId: string) {
433
+ return this.axiosCall({
434
+ method: Methods.GET,
435
+ url: `/Arm/api/Invoice/InvoiceData?processInstanceId=${processInstanceId}`,
436
+ });
437
+ }
438
+
439
+ async createInvoice(processInstanceId: string, amount: number | string) {
440
+ return this.axiosCall({
441
+ method: Methods.POST,
442
+ url: `/Arm/api/Invoice/CreateInvoice/${processInstanceId}/${amount}`,
443
+ });
444
+ }
445
+
446
+ async sendToEpay(processInstanceId: string) {
447
+ return this.axiosCall({
448
+ method: Methods.POST,
449
+ url: `/Arm/api/Invoice/SendToEpay/${processInstanceId}`,
450
+ });
451
+ }
452
+
453
+ async signToDocument(data: any) {
454
+ return this.axiosCall({
455
+ method: Methods.POST,
456
+ url: '/Arm/api/Bpm/SignDocument',
457
+ data: data,
458
+ });
459
+ }
460
+
461
+ async getSignedDocList(data: { processInstanceId: string }): Promise<IDocument[]> {
462
+ return this.axiosCall({
463
+ method: Methods.POST,
464
+ url: '/Arm/api/File/List',
465
+ data: data,
466
+ });
467
+ }
468
+
469
+ async calculateWithoutApplication(data: RecalculationDataType): Promise<RecalculationResponseType> {
470
+ return this.axiosCall({
471
+ method: Methods.POST,
472
+ url: `/${this.productUrl}/api/Application/Calculate`,
473
+ data: data,
474
+ });
475
+ }
476
+
477
+ async getDefaultCalculationData(): Promise<RecalculationDataType> {
478
+ return this.axiosCall({
479
+ method: Methods.GET,
480
+ url: `/${this.productUrl}/api/Application/DefaultCalculatorValues`,
481
+ });
482
+ }
483
+
484
+ async reCalculate(data: any) {
485
+ return this.axiosCall({
486
+ method: Methods.POST,
487
+ url: `/${this.productUrl}/api/Application/Recalculate`,
488
+ data: data,
489
+ });
490
+ }
491
+
492
+ async getValidateClientESBD(data: ESBDValidationType): Promise<ESBDResponseType> {
493
+ return this.axiosCall({
494
+ method: Methods.POST,
495
+ url: '/externalservices/api/ExternalServices/GetValidateClientEsbd',
496
+ data: data,
497
+ });
498
+ }
499
+
500
+ async isClaimTask(taskId: string): Promise<boolean> {
501
+ return this.axiosCall({
502
+ method: Methods.POST,
503
+ url: '/Arm/api/Bpm/IsClaimTask',
504
+ params: { TaskId: taskId },
505
+ });
506
+ }
507
+
508
+ async claimTask(taskId: string) {
509
+ return this.axiosCall({
510
+ method: Methods.POST,
511
+ url: '/Arm/api/Bpm/ClaimTaskUser',
512
+ params: { TaskId: taskId },
513
+ });
514
+ }
515
+
516
+ async getContragentFromGBDFL(data: { iin: string; phoneNumber: string }): Promise<GBDFLResponse> {
517
+ return this.axiosCall({
518
+ method: Methods.POST,
519
+ url: '/externalservices/api/ExternalServices/GetGbdflToken',
520
+ data: data,
521
+ });
522
+ }
523
+
524
+ async getFamilyInfo(data: { iin: string; phoneNumber: string }): Promise<FamilyInfoGKB> {
525
+ return this.axiosCall({
526
+ method: Methods.POST,
527
+ url: '/externalservices/api/ExternalServices/GetFamilyInfoToken',
528
+ data: data,
529
+ });
530
+ }
531
+
532
+ async getProcessTariff(code: number | string = 5) {
533
+ return this.axiosCall({ url: `/arm/api/Dictionary/ProcessTariff/${code}` });
534
+ }
535
+
536
+ async setConfirmation(data: any) {
537
+ return this.axiosCall({
538
+ method: Methods.POST,
539
+ url: '/Arm/api/UnderwritingCouncil/SetConfirmation',
540
+ data: data,
541
+ });
542
+ }
543
+
544
+ async getUnderwritingCouncilData(id: string | number) {
545
+ return this.axiosCall({
546
+ method: Methods.GET,
547
+ url: `/Arm/api/UnderwritingCouncil/ApplicationData?Id=${id}`,
548
+ });
549
+ }
550
+
551
+ async sendUnderwritingCouncilTask(data: any) {
552
+ return this.axiosCall({
553
+ method: Methods.POST,
554
+ url: '/arm/api/UnderwritingCouncil/SendTask',
555
+ data: data,
556
+ });
557
+ }
558
+
559
+ async filterManagerByRegion(dictName: string, filterName: string) {
560
+ return this.axiosCall({
561
+ method: Methods.GET,
562
+ url: `/ekk/api/ContragentInsis/DictionaryItems/${dictName}?filter=${filterName}`,
563
+ });
564
+ }
565
+
566
+ async setINSISWorkData(data: any) {
567
+ return this.axiosCall({
568
+ method: Methods.POST,
569
+ url: `/arm/api/Bpm/SetInsisWorkData`,
570
+ data: data,
571
+ });
572
+ }
573
+
574
+ async searchAgentByName(name: string) {
575
+ return this.axiosCall({
576
+ method: Methods.GET,
577
+ url: `/ekk/api/ContragentInsis/AgentByName?fullName=${name}`,
286
578
  });
287
579
  }
288
580
  }
@@ -21,7 +21,16 @@ export default function (axios: AxiosInstance) {
21
21
  if (error.response.status === 401) {
22
22
  dataStore.$reset();
23
23
  localStorage.clear();
24
- router.push({ name: 'Auth', query: { error: 401 } });
24
+ if (dataStore.isEFO) {
25
+ router.push({ name: 'Auth', query: { error: 401 } });
26
+ } else {
27
+ dataStore.sendToParent(constants.postActions.Error401, 401);
28
+ }
29
+ }
30
+ if (error.response.status >= 500) {
31
+ if (router.currentRoute.value.name !== 'Auth') {
32
+ dataStore.showToaster('error', error.stack, 5000);
33
+ }
25
34
  }
26
35
  return Promise.reject(error);
27
36
  },
@@ -3,7 +3,7 @@
3
3
  type="button"
4
4
  class="transition-all"
5
5
  @click="$emit('clicked')"
6
- :disabled="disabled"
6
+ :disabled="disabled || loading"
7
7
  :class="[
8
8
  disabled ? 'disabled' : '',
9
9
  classes,
@@ -11,7 +11,8 @@
11
11
  $libStyles[`btnH${$capitalize(size)}` as keyof typeof $libStyles],
12
12
  ]"
13
13
  >
14
- {{ text }}
14
+ <base-loader v-if="loading" :size="24" color="#FFF" bg-color="" :width="2"></base-loader>
15
+ <span v-if="!loading">{{ text }}</span>
15
16
  </button>
16
17
  </template>
17
18
 
@@ -35,6 +36,10 @@ export default defineComponent({
35
36
  type: Boolean,
36
37
  default: false,
37
38
  },
39
+ loading: {
40
+ type: Boolean,
41
+ default: false,
42
+ },
38
43
  btn: {
39
44
  type: String,
40
45
  default: new Styles().blueBtn,
@@ -0,0 +1,47 @@
1
+ <template>
2
+ <button
3
+ type="button"
4
+ class="transition-all"
5
+ @click="$emit('clicked')"
6
+ :disabled="disabled"
7
+ :class="[
8
+ disabled ? 'disabled' : '',
9
+ classes,
10
+ btn,
11
+ $libStyles[`btnH${$capitalize(size)}` as keyof typeof $libStyles],
12
+ ]"
13
+ >
14
+ <i class="mdi" :class="icon"></i>
15
+ </button>
16
+ </template>
17
+
18
+ <script lang="ts">
19
+ export default defineComponent({
20
+ name: 'BaseBtnIcon',
21
+ props: {
22
+ icon: { type: String, default: 'mdi-arrow-right-variant' },
23
+ size: {
24
+ type: String,
25
+ default: 'md',
26
+ },
27
+ classes: {
28
+ type: String,
29
+ default: '',
30
+ },
31
+ disabled: {
32
+ type: Boolean,
33
+ default: false,
34
+ },
35
+ btn: {
36
+ type: String,
37
+ default: new Styles().blueBtn,
38
+ },
39
+ },
40
+ });
41
+ </script>
42
+
43
+ <style scoped>
44
+ .disabled {
45
+ opacity: 0.3;
46
+ }
47
+ </style>
@@ -0,0 +1,6 @@
1
+ <template>
2
+ <div class="absolute bottom-[12%] right-1 flex flex-col gap-4">
3
+ <v-btn style="backdrop-filter: blur(5px)" color="#A0B3D8" variant="outlined" icon="mdi mdi-arrow-up" @click="$emit('up')"></v-btn>
4
+ <v-btn style="backdrop-filter: blur(5px)" color="#A0B3D8" variant="outlined" icon="mdi mdi-arrow-down" @click="$emit('down')"></v-btn>
5
+ </div>
6
+ </template>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <aside class="w-full hidden lg:flex lg:w-3/4">
2
+ <aside class="w-full lg:flex lg:w-3/4">
3
3
  <slot></slot>
4
4
  </aside>
5
5
  </template>
@@ -0,0 +1,5 @@
1
+ <template>
2
+ <div class="w-full p-4" :class="[$libStyles.blueBgLight, $libStyles.rounded]">
3
+ <slot></slot>
4
+ </div>
5
+ </template>
@@ -1,11 +1,14 @@
1
1
  <template>
2
2
  <base-content class="flex-col" :class="[$libStyles.whiteBg]">
3
3
  <base-header
4
- class="justify-start pl-14"
4
+ class="justify-center lg:pl-14"
5
5
  :has-back="hasBack"
6
6
  :back-icon="backIcon"
7
+ :has-more="hasMore"
8
+ :more-icon="moreIcon"
7
9
  :title="title"
8
10
  @onBack="$emit('onBack')"
11
+ @onMore="$emit('onMore')"
9
12
  ></base-header>
10
13
  <slot></slot>
11
14
  </base-content>
@@ -22,11 +25,19 @@ export default defineComponent({
22
25
  type: String,
23
26
  default: 'mdi-arrow-left',
24
27
  },
28
+ hasMore: {
29
+ type: Boolean,
30
+ default: false,
31
+ },
32
+ moreIcon: {
33
+ type: String,
34
+ default: 'mdi-cog-outline',
35
+ },
25
36
  title: {
26
37
  type: String,
27
38
  default: '',
28
39
  },
29
40
  },
30
- emits: ['onBack'],
41
+ emits: ['onBack', 'onMore'],
31
42
  });
32
43
  </script>
@@ -1,8 +1,6 @@
1
1
  <template>
2
2
  <v-dialog v-model="fieldModel">
3
- <v-card
4
- class="self-center w-full sm:w-3/4 md:w-2/3 lg:w-2/4 xl:w-[600px] rounded-lg !p-2"
5
- >
3
+ <v-card class="self-center w-full sm:w-3/4 md:w-2/3 lg:w-2/4 xl:w-[600px] rounded-lg !p-2">
6
4
  <v-card-title>
7
5
  <slot v-if="!title" name="title"></slot>
8
6
  {{ title }}
@@ -11,12 +9,10 @@
11
9
  <slot v-if="!subtitle" name="subtitle"></slot>
12
10
  {{ subtitle }}
13
11
  </v-card-subtitle>
14
- <v-card-text>
15
- <slot v-if="text" name="content"></slot>
16
- {{ text }}
17
- </v-card-text>
18
12
  <v-card-actions class="gap-[16px]">
19
- <slot name="actions"></slot>
13
+ <base-btn v-if="actions === 'default'" class="!w-fit px-6" size="sm" :text="$t('confirm.yes')" :btn="$libStyles.blueBtn" @click="$emit('yes')"></base-btn>
14
+ <base-btn v-if="actions === 'default'" class="!w-fit px-6" size="sm" :text="$t('confirm.no')" :btn="$libStyles.blueBtn" @click="$emit('no')" />
15
+ <slot v-if="actions !== 'default'" name="actions"></slot>
20
16
  </v-card-actions>
21
17
  </v-card>
22
18
  </v-dialog>
@@ -37,12 +33,12 @@ export default defineComponent({
37
33
  type: String,
38
34
  default: '',
39
35
  },
40
- text: {
36
+ actions: {
41
37
  type: String,
42
- default: '',
38
+ default: 'default',
43
39
  },
44
40
  },
45
- emits: ['update:modelValue', 'submitted'],
41
+ emits: ['update:modelValue', 'submitted', 'yes', 'no'],
46
42
  setup(props, { emit }) {
47
43
  const fieldModel = ref(props.modelValue);
48
44