hl-core 0.0.9-beta.2 → 0.0.9-beta.20

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 (63) hide show
  1. package/api/base.api.ts +684 -0
  2. package/api/index.ts +2 -620
  3. package/api/interceptors.ts +52 -14
  4. package/components/Button/Btn.vue +3 -3
  5. package/components/Complex/ContentBlock.vue +1 -1
  6. package/components/Complex/MessageBlock.vue +1 -1
  7. package/components/Complex/Page.vue +7 -1
  8. package/components/Complex/WhiteBlock.vue +7 -0
  9. package/components/Dialog/Dialog.vue +2 -2
  10. package/components/Dialog/FamilyDialog.vue +5 -5
  11. package/components/Form/FormBlock.vue +36 -29
  12. package/components/Form/FormSection.vue +2 -2
  13. package/components/Form/FormTextSection.vue +3 -3
  14. package/components/Form/FormToggle.vue +3 -3
  15. package/components/Form/ManagerAttachment.vue +55 -42
  16. package/components/Form/ProductConditionsBlock.vue +73 -20
  17. package/components/Input/EmptyFormField.vue +1 -1
  18. package/components/Input/FileInput.vue +8 -3
  19. package/components/Input/Monthpicker.vue +33 -0
  20. package/components/Input/PanelInput.vue +5 -1
  21. package/components/Input/RoundedEmptyField.vue +5 -0
  22. package/components/Input/RoundedSelect.vue +13 -0
  23. package/components/Layout/Drawer.vue +2 -1
  24. package/components/Layout/Header.vue +1 -1
  25. package/components/Layout/SettingsPanel.vue +5 -9
  26. package/components/List/ListEmpty.vue +1 -1
  27. package/components/Menu/MenuHover.vue +1 -1
  28. package/components/Menu/MenuNav.vue +1 -1
  29. package/components/Menu/MenuNavItem.vue +4 -4
  30. package/components/Pages/Anketa.vue +88 -47
  31. package/components/Pages/Auth.vue +9 -9
  32. package/components/Pages/ContragentForm.vue +505 -0
  33. package/components/Pages/Documents.vue +5 -5
  34. package/components/Pages/InvoiceInfo.vue +2 -2
  35. package/components/Pages/MemberForm.vue +215 -59
  36. package/components/Pages/ProductAgreement.vue +1 -3
  37. package/components/Pages/ProductConditions.vue +677 -151
  38. package/components/Panel/PanelHandler.vue +86 -21
  39. package/components/Panel/PanelSelectItem.vue +18 -3
  40. package/components/Utilities/IconBorder.vue +17 -0
  41. package/composables/axios.ts +1 -1
  42. package/composables/classes.ts +276 -11
  43. package/composables/constants.ts +43 -0
  44. package/composables/index.ts +40 -4
  45. package/composables/styles.ts +20 -10
  46. package/configs/i18n.ts +0 -2
  47. package/layouts/default.vue +5 -2
  48. package/layouts/full.vue +1 -1
  49. package/locales/ru.json +202 -6
  50. package/nuxt.config.ts +1 -1
  51. package/package.json +30 -39
  52. package/pages/500.vue +2 -2
  53. package/pages/Token.vue +1 -0
  54. package/plugins/helperFunctionsPlugins.ts +6 -7
  55. package/plugins/vuetifyPlugin.ts +2 -0
  56. package/store/data.store.ts +541 -211
  57. package/store/form.store.ts +11 -1
  58. package/store/member.store.ts +1 -1
  59. package/store/rules.ts +37 -2
  60. package/types/enum.ts +6 -0
  61. package/types/index.ts +145 -31
  62. package/components/Button/BtnIcon.vue +0 -47
  63. package/locales/kz.json +0 -585
@@ -1,13 +1,13 @@
1
1
  <template>
2
2
  <section class="flex flex-col gap-4 px-[10px]">
3
- <v-form v-if="member" ref="vForm" @submit="submitForm" class="max-h-[82svh] overflow-y-scroll">
3
+ <v-form v-if="member" ref="vForm" @submit="submitForm" class="max-h-[80svh] overflow-y-scroll">
4
4
  <div v-if="memberSetting && memberSetting.has === true && memberSetting.isMultiple === true" class="flex items-center mt-[14px] min-h-[54px]">
5
- <div :class="[$libStyles.blueBgLight]" class="flex flex-wrap items-center gap-2 p-1 rounded-t-[8px] h-full">
5
+ <div :class="[$styles.blueBgLight]" class="flex flex-wrap items-center gap-2 p-1 rounded-t-[8px] h-full">
6
6
  <div
7
7
  v-for="(each, index) of formStore[whichForm]"
8
8
  :key="index"
9
9
  class="pl-3 pr-1 py-1 rounded-[8px] cursor-pointer flex items-center"
10
- :class="[Number(whichIndex) === index ? `${$libStyles.blueBg} ${$libStyles.whiteText}` : '', $libStyles.textSimple]"
10
+ :class="[Number(whichIndex) === index ? `${$styles.blueBg} ${$styles.whiteText}` : '', $styles.textSimple]"
11
11
  @click.self="index !== Number(whichIndex) ? selectMember(index) : null"
12
12
  >
13
13
  {{ `${$dataStore.menu.selectedItem.title} ${index + 1}` }}
@@ -17,7 +17,7 @@
17
17
  :disabled="!memberStore.canMemberDeleted(whichForm, index) && !memberStore.canMemberCleared(whichForm, index)"
18
18
  variant="plain"
19
19
  :color="Number(whichIndex) === index ? '#FFF' : '#A0B3D8'"
20
- @click.prevent="memberStore.canMemberDeleted(whichForm, index) || memberStore.canMemberCleared(whichForm, index) ? deleteMember(index) : null"
20
+ @click.prevent="memberStore.canMemberDeleted(whichForm, index) || memberStore.canMemberCleared(whichForm, index) ? openDeletionDialog(index) : null"
21
21
  />
22
22
  </div>
23
23
  </div>
@@ -27,6 +27,23 @@
27
27
  :title="$dataStore.t('form.personalData')"
28
28
  :class="[memberSetting && memberSetting.has === true && memberSetting.isMultiple === true ? 'rounded-t-0 !mt-[-5px]' : 'mt-[14px]']"
29
29
  >
30
+ <base-panel-input
31
+ v-if="$dataStore.isLifetrip"
32
+ v-model="member.signOfResidency"
33
+ :value="member.signOfResidency?.nameRu"
34
+ :label="$dataStore.t('form.signOfResidency')"
35
+ :readonly="isDisabled"
36
+ :clearable="!isDisabled"
37
+ :rules="residencyRule"
38
+ append-inner-icon="mdi mdi-chevron-right"
39
+ @append="openPanel($dataStore.t('form.signOfResidency'), [], 'signOfResidency', $dataStore.getResidents)"
40
+ />
41
+ <base-form-toggle
42
+ v-if="$dataStore.isLifetrip && whichForm === 'insuredForm'"
43
+ v-model="member.isInsuredUnderage"
44
+ :title="$dataStore.t('isInsuredUnderage')"
45
+ :has-border="false"
46
+ />
30
47
  <base-form-input
31
48
  v-model="member.phoneNumber"
32
49
  :label="$dataStore.t('form.phoneNumber')"
@@ -44,7 +61,7 @@
44
61
  :maska="$maska.iin"
45
62
  :readonly="!!isDisabled || !!isIinPhoneDisabled"
46
63
  :clearable="!isDisabled"
47
- :append-inner-icon="showSaveButton ? 'mdi mdi-magnify' : ''"
64
+ :append-inner-icon="hasMemberSearch ? 'mdi mdi-magnify' : ''"
48
65
  @append="searchMember"
49
66
  @input="onIinInput"
50
67
  :rules="$rules.required.concat($rules.iinRight)"
@@ -64,12 +81,31 @@
64
81
  :rules="$rules.required.concat($rules.cyrillic)"
65
82
  />
66
83
  <base-form-input
84
+ v-if="hasMiddleName"
67
85
  v-model.trim="member.middleName"
68
86
  :readonly="isDisabled || isFromGBD"
69
87
  :clearable="!isDisabled"
70
88
  :label="$dataStore.t('form.middleName')"
71
89
  :rules="$rules.cyrillicNonRequired"
72
90
  />
91
+ <base-form-input
92
+ v-if="$dataStore.isLifetrip"
93
+ v-model.trim="member.lastNameLat"
94
+ :readonly="isDisabled || isFromGBD"
95
+ :clearable="!isDisabled"
96
+ :label="$dataStore.t('form.lastNameLat')"
97
+ :rules="$rules.required.concat($rules.latin)"
98
+ :hint="$dataStore.t('labels.checkWithDoc')"
99
+ />
100
+ <base-form-input
101
+ v-if="$dataStore.isLifetrip"
102
+ v-model.trim="member.firstNameLat"
103
+ :readonly="isDisabled || isFromGBD"
104
+ :clearable="!isDisabled"
105
+ :label="$dataStore.t('form.firstNameLat')"
106
+ :rules="$rules.required.concat($rules.latin)"
107
+ :hint="$dataStore.t('labels.checkWithDoc')"
108
+ />
73
109
  <base-form-input
74
110
  v-model="member.birthDate"
75
111
  :readonly="isDisabled || isFromGBD"
@@ -82,9 +118,9 @@
82
118
  <base-form-input v-model="member.age" :label="$dataStore.t('form.age')" :readonly="true" :clearable="!isDisabled" :rules="ageRule" />
83
119
  <base-panel-input
84
120
  v-model="member.gender"
85
- :value="member.gender.nameRu"
121
+ :value="member.gender?.nameRu"
86
122
  :readonly="isDisabled || isFromGBD"
87
- :clearable="!isDisabled"
123
+ :clearable="!isDisabled && !isFromGBD"
88
124
  :label="$dataStore.t('form.gender')"
89
125
  :rules="$rules.objectRequired"
90
126
  append-inner-icon="mdi mdi-chevron-right"
@@ -93,7 +129,7 @@
93
129
  <base-panel-input
94
130
  v-if="hasFamilyStatus"
95
131
  v-model="member.familyStatus"
96
- :value="member.familyStatus.nameRu"
132
+ :value="member.familyStatus?.nameRu"
97
133
  :readonly="isDisabled"
98
134
  :clearable="!isDisabled"
99
135
  :label="$dataStore.t('form.familyStatus')"
@@ -102,9 +138,9 @@
102
138
  @append="openPanel($dataStore.t('form.familyStatus'), [], 'familyStatus', $dataStore.getFamilyStatuses)"
103
139
  />
104
140
  <base-panel-input
105
- v-if="(whichForm === formStore.beneficiaryFormKey || whichForm === formStore.insuredFormKey) && member.iin !== formStore.policyholderForm.iin"
141
+ v-if="hasRelationDegree"
106
142
  v-model="member.relationDegree"
107
- :value="member.relationDegree.nameRu"
143
+ :value="member.relationDegree?.nameRu"
108
144
  :readonly="isDisabled"
109
145
  :clearable="!isDisabled"
110
146
  :label="$dataStore.t('form.relations')"
@@ -231,7 +267,7 @@
231
267
  append-inner-icon="mdi mdi-calendar-blank-outline"
232
268
  />
233
269
  </base-form-section>
234
- <base-form-section :title="$dataStore.t('form.jobData')" v-if="$dataStore.hasJobSection(whichForm)">
270
+ <base-form-section v-if="$dataStore.hasJobSection(whichForm)" :title="$dataStore.t('form.jobData')">
235
271
  <base-form-input v-model.trim="member.job" :label="$dataStore.t('form.job')" :readonly="isDisabled" :clearable="!isDisabled" :rules="$rules.required" />
236
272
  <base-form-input v-model.trim="member.jobPosition" :label="$dataStore.t('form.jobPosition')" :readonly="isDisabled" :clearable="!isDisabled" :rules="$rules.required" />
237
273
  <base-form-input v-model.trim="member.jobPlace" :label="$dataStore.t('form.jobPlace')" :readonly="isDisabled" :clearable="!isDisabled" :rules="$rules.required" />
@@ -240,11 +276,11 @@
240
276
  <base-form-toggle v-if="hasSameAddressToggle" v-model="sameAddress" :disabled="isDisabled" :has-border="false" :title="$dataStore.t('form.sameAddress')" />
241
277
  <base-panel-input
242
278
  v-model="member.registrationCountry"
243
- :value="member.registrationCountry.nameRu"
279
+ :value="member.registrationCountry?.nameRu"
244
280
  :readonly="isDisabled"
245
281
  :clearable="!isDisabled"
246
282
  :label="$dataStore.t('form.Country')"
247
- :rules="$rules.objectRequired"
283
+ :rules="member.isInsuredUnderage ? [] : $rules.objectRequired"
248
284
  append-inner-icon="mdi mdi-chevron-right"
249
285
  @append="openPanel($dataStore.t('form.Country'), [], 'registrationCountry', $dataStore.getCountries)"
250
286
  />
@@ -252,42 +288,42 @@
252
288
  <div class="flex flex-col gap-[1px]" v-if="member.registrationCountry.nameRu === 'Казахстан' || member.registrationCountry.nameRu === null">
253
289
  <base-panel-input
254
290
  v-model="member.registrationProvince"
255
- :value="member.registrationProvince.nameRu"
291
+ :value="member.registrationProvince?.nameRu"
256
292
  :label="$dataStore.t('form.Province')"
257
293
  :readonly="isDisabled"
258
294
  :clearable="!isDisabled"
259
- :rules="$rules.objectRequired"
295
+ :rules="member.isInsuredUnderage ? [] : $rules.objectRequired"
260
296
  append-inner-icon="mdi mdi-chevron-right"
261
297
  @append="openPanel($dataStore.t('form.Province'), [], 'registrationProvince', $dataStore.getStates, 'registrationCountry')"
262
298
  />
263
299
  <base-panel-input
264
300
  v-model="member.registrationRegionType"
265
- :value="member.registrationRegionType.nameRu"
301
+ :value="member.registrationRegionType?.nameRu"
266
302
  :label="$dataStore.t('form.RegionType')"
267
303
  :readonly="isDisabled"
268
304
  :clearable="!isDisabled"
269
- :rules="$rules.objectRequired"
305
+ :rules="member.isInsuredUnderage ? [] : $rules.objectRequired"
270
306
  append-inner-icon="mdi mdi-chevron-right"
271
307
  @append="openPanel($dataStore.t('form.RegionType'), [], 'registrationRegionType', $dataStore.getLocalityTypes)"
272
308
  />
273
309
  <base-panel-input
274
310
  v-if="member.registrationRegionType.nameRu !== 'город'"
275
311
  v-model="member.registrationRegion"
276
- :value="member.registrationRegion.nameRu"
312
+ :value="member.registrationRegion?.nameRu"
277
313
  :label="$dataStore.t('form.Region')"
278
314
  :readonly="isDisabled"
279
315
  :clearable="!isDisabled"
280
- :rules="$rules.objectRequired"
316
+ :rules="member.isInsuredUnderage ? [] : $rules.objectRequired"
281
317
  append-inner-icon="mdi mdi-chevron-right"
282
318
  @append="openPanel($dataStore.t('form.Region'), [], 'registrationRegion', $dataStore.getRegions, 'registrationProvince')"
283
319
  />
284
320
  <base-panel-input
285
321
  v-model="member.registrationCity"
286
- :value="member.registrationCity.nameRu"
322
+ :value="member.registrationCity?.nameRu"
287
323
  :label="$dataStore.t('form.City')"
288
324
  :readonly="isDisabled"
289
325
  :clearable="!isDisabled"
290
- :rules="$rules.objectRequired"
326
+ :rules="member.isInsuredUnderage ? [] : $rules.objectRequired"
291
327
  append-inner-icon="mdi mdi-chevron-right"
292
328
  @append="openPanel($dataStore.t('form.City'), [], 'registrationCity', $dataStore.getCities, 'registrationProvince')"
293
329
  />
@@ -297,14 +333,14 @@
297
333
  <base-form-input v-model.trim="member.registrationMicroDistrict" :readonly="isDisabled" :clearable="!isDisabled" :label="$dataStore.t('form.MicroDistrict')" />
298
334
  <base-form-input
299
335
  v-model.trim="member.registrationStreet"
300
- :rules="$rules.required"
336
+ :rules="member.isInsuredUnderage ? [] : $rules.required"
301
337
  :readonly="isDisabled"
302
338
  :clearable="!isDisabled"
303
339
  :label="$dataStore.t('form.Street')"
304
340
  />
305
341
  <base-form-input
306
342
  v-model.trim="member.registrationNumberHouse"
307
- :rules="$rules.required"
343
+ :rules="member.isInsuredUnderage ? [] : $rules.required"
308
344
  :readonly="isDisabled"
309
345
  :clearable="!isDisabled"
310
346
  :label="$dataStore.t('form.NumberHouse')"
@@ -316,7 +352,7 @@
316
352
  <base-form-section :title="$dataStore.t('form.birthData')" v-if="$dataStore.hasBirthSection(whichForm)">
317
353
  <base-panel-input
318
354
  v-model="member.birthPlace"
319
- :value="member.birthPlace.nameRu"
355
+ :value="member.birthPlace?.nameRu"
320
356
  :label="$dataStore.t('form.Country')"
321
357
  :readonly="isDisabled"
322
358
  :clearable="!isDisabled"
@@ -327,7 +363,7 @@
327
363
  <!-- TODO -->
328
364
  <!-- <base-panel-input
329
365
  v-model="member.birthRegion"
330
- :value="member.birthRegion.nameRu"
366
+ :value="member.birthRegion?.nameRu"
331
367
  :label="$dataStore.t('form.Region')"
332
368
  :readonly="isDisabled"
333
369
  :clearable="!isDisabled"
@@ -339,7 +375,7 @@
339
375
  <base-form-section :title="$dataStore.t('form.documentData')" v-if="$dataStore.hasDocumentSection(whichForm)">
340
376
  <base-panel-input
341
377
  v-model="member.documentType"
342
- :value="member.documentType.nameRu"
378
+ :value="member.documentType?.nameRu"
343
379
  :label="$dataStore.t('form.documentType')"
344
380
  :readonly="isDisabled"
345
381
  :clearable="!isDisabled"
@@ -361,7 +397,7 @@
361
397
  </base-empty-form-field> -->
362
398
  <base-panel-input
363
399
  v-model="member.documentIssuers"
364
- :value="member.documentIssuers.nameRu"
400
+ :value="member.documentIssuers?.nameRu"
365
401
  :label="$dataStore.t('form.documentIssuers')"
366
402
  :readonly="isDisabled"
367
403
  :clearable="!isDisabled"
@@ -391,8 +427,9 @@
391
427
  />
392
428
  </base-fade-transition>
393
429
  <base-panel-input
430
+ v-if="!$dataStore.isLifetrip"
394
431
  v-model="member.signOfResidency"
395
- :value="member.signOfResidency.nameRu"
432
+ :value="member.signOfResidency?.nameRu"
396
433
  :label="$dataStore.t('form.signOfResidency')"
397
434
  :readonly="isDisabled"
398
435
  :clearable="!isDisabled"
@@ -402,7 +439,7 @@
402
439
  />
403
440
  <base-panel-input
404
441
  v-model="member.countryOfTaxResidency"
405
- :value="member.countryOfTaxResidency.nameRu"
442
+ :value="member.countryOfTaxResidency?.nameRu"
406
443
  :label="$dataStore.t('form.countryOfTaxResidency')"
407
444
  :readonly="isDisabled"
408
445
  :clearable="!isDisabled"
@@ -414,7 +451,7 @@
414
451
  <base-panel-input
415
452
  v-if="member.countryOfTaxResidency.ids === '500014.3'"
416
453
  v-model="member.addTaxResidency"
417
- :value="member.addTaxResidency.nameRu"
454
+ :value="member.addTaxResidency?.nameRu"
418
455
  :label="$dataStore.t('form.addTaxResidency')"
419
456
  :readonly="isDisabled"
420
457
  :clearable="!isDisabled"
@@ -426,7 +463,7 @@
426
463
  <base-panel-input
427
464
  v-if="hasSignOfIPDL"
428
465
  v-model="member.signOfIPDL"
429
- :value="member.signOfIPDL.nameRu"
466
+ :value="member.signOfIPDL?.nameRu"
430
467
  :label="$dataStore.t('form.signOfIPDL')"
431
468
  :readonly="isDisabled"
432
469
  :clearable="!isDisabled"
@@ -436,7 +473,7 @@
436
473
  />
437
474
  <base-panel-input
438
475
  v-model="member.countryOfCitizenship"
439
- :value="member.countryOfCitizenship.nameRu"
476
+ :value="member.countryOfCitizenship?.nameRu"
440
477
  :label="$dataStore.t('form.countryOfCitizenship')"
441
478
  :readonly="isDisabled"
442
479
  :clearable="!isDisabled"
@@ -446,7 +483,7 @@
446
483
  />
447
484
  <base-panel-input
448
485
  v-model="member.economySectorCode"
449
- :value="member.economySectorCode.nameRu"
486
+ :value="member.economySectorCode?.nameRu"
450
487
  :label="$dataStore.t('form.economySectorCode')"
451
488
  :readonly="isDisabled"
452
489
  :clearable="!isDisabled"
@@ -457,7 +494,7 @@
457
494
  <base-panel-input
458
495
  v-if="hasInsurancePay"
459
496
  v-model="member.insurancePay"
460
- :value="member.insurancePay.nameRu"
497
+ :value="member.insurancePay?.nameRu"
461
498
  :readonly="isDisabled"
462
499
  :clearable="!isDisabled"
463
500
  :rules="$rules.objectRequired"
@@ -474,14 +511,14 @@
474
511
  :label="$dataStore.t('form.homePhone')"
475
512
  :readonly="isDisabled"
476
513
  :clearable="!isDisabled"
477
- :rules="whichForm === formStore.beneficiaryFormKey ? [] : $rules.phoneFormat"
514
+ :rules="whichForm === formStore.beneficiaryFormKey || member.isInsuredUnderage ? [] : $rules.phoneFormat"
478
515
  />
479
516
  <base-form-input v-model.trim="member.email" :label="$dataStore.t('form.email')" :rules="$rules.email" />
480
517
  </base-form-section>
481
518
  </v-form>
482
519
  <base-btn v-if="showSaveButton" :loading="isButtonLoading || isSubmittingForm" :text="$dataStore.t('buttons.save')" @click="submitForm" />
483
520
  <Teleport v-if="isPanelOpen" to="#panel-actions">
484
- <div :class="[$libStyles.scrollPage]" class="flex flex-col items-center">
521
+ <div :class="[$styles.scrollPage]" class="flex flex-col items-center">
485
522
  <base-rounded-input v-model="searchQuery" :label="$dataStore.t('labels.search')" class="w-full p-2" :hide-details="true" />
486
523
  <div v-if="panelList && isPanelLoading === false" class="w-full flex flex-col gap-2 p-2">
487
524
  <base-panel-select-item :text="$dataStore.t('form.notChosen')" :selected="panelValue.nameRu === null" @click="pickPanelValue(new Value())" />
@@ -497,20 +534,20 @@
497
534
  </div>
498
535
  </Teleport>
499
536
  <Teleport v-if="isSearchOpen" to="#panel-actions">
500
- <div :class="[$libStyles.flexColNav]">
537
+ <div :class="[$styles.flexColNav]">
501
538
  <base-btn v-if="hasGBDFL" :loading="isButtonLoading" :text="$dataStore.t('buttons.fromGBDFL')" @click="getContragentFromGBDFL" />
502
539
  <base-btn v-if="hasInsis" :loading="isButtonLoading" :text="$dataStore.t('buttons.fromInsis')" @click="getContragent" />
503
540
  <base-btn v-if="hasGKB" :loading="isButtonLoading" :text="$dataStore.t('buttons.fromGKB')" @click="getFamilyInfo" />
504
541
  </div>
505
542
  </Teleport>
506
543
  <Teleport v-if="isDocumentOpen" to="#panel-actions">
507
- <div :class="[$libStyles.flexColNav]">
544
+ <div :class="[$styles.flexColNav]">
508
545
  <base-btn :disabled="documentLoading" :loading="documentLoading" text="Открыть" @click="getFile('view')" />
509
546
  <base-btn :disabled="documentLoading" :loading="documentLoading" text="Скачать" @click="getFile('download')" />
510
547
  </div>
511
548
  </Teleport>
512
549
  <Teleport v-if="isOtpPanelOpen && !member.hasAgreement" to="#panel-actions">
513
- <div :class="[$libStyles.flexColNav]">
550
+ <div :class="[$styles.flexColNav]">
514
551
  <base-fade-transition>
515
552
  <base-rounded-input
516
553
  v-if="otpCondition && member.otpTokenId"
@@ -527,6 +564,7 @@
527
564
  <base-btn v-if="member.otpTokenId" :disabled="otpSending" :loading="otpSending" :text="$dataStore.t('buttons.check')" @click="checkOtp()" />
528
565
  </div>
529
566
  </Teleport>
567
+ <base-dialog v-model="deletionDialog" :subtitle="$dataStore.t('dialog.delete')" actions="default" @yes="deleteMember(selectedIndex)" @no="deletionDialog = false" />
530
568
  <base-dialog v-model="familyDialog" :title="$dataStore.t('dialog.familyMember')" actions="familyDialog">
531
569
  <template #actions>
532
570
  <base-family-dialog :selected="selectedFamilyMember" @selectFamilyMember="selectFamilyMember" @reset="closeFamilyDialog(true)" />
@@ -566,6 +604,8 @@ export default {
566
604
  const isPanelLoading = ref<boolean>(false);
567
605
  const isChangingMember = ref<boolean>(false);
568
606
  const familyDialog = ref<boolean>(false);
607
+ const deletionDialog = ref<boolean>(false);
608
+ const selectedIndex = ref<number>(0);
569
609
  const sameAddress = ref<boolean>(false);
570
610
  const panelValue = ref<Value>(new Value());
571
611
  const panelList = ref<Value[]>([]);
@@ -607,10 +647,17 @@ export default {
607
647
  if (dataStore.isBolashak || dataStore.isGons) {
608
648
  return false;
609
649
  }
650
+ if (member.value.age !== null && Number(member.value.age) < 18) {
651
+ return false;
652
+ }
653
+ return true;
654
+ }
655
+ case formStore.insuredFormKey: {
656
+ if (dataStore.isLifetrip && member.value.isInsuredUnderage) {
657
+ return false;
658
+ }
610
659
  return true;
611
660
  }
612
- case formStore.insuredFormKey:
613
- case formStore.beneficiaryFormKey:
614
661
  case formStore.beneficialOwnerFormKey:
615
662
  case formStore.policyholdersRepresentativeFormKey:
616
663
  return true;
@@ -641,8 +688,26 @@ export default {
641
688
  };
642
689
  return dataStore.controls.hasGKB && !!dataStore.isTask() && perMemberCondition();
643
690
  });
644
-
691
+ const hasMemberSearch = computed(() => showSaveButton.value && (hasGBDFL.value || hasGKB.value || hasInsis.value));
692
+ const hasMiddleName = computed(() => {
693
+ if (dataStore.isLifetrip) {
694
+ return false;
695
+ }
696
+ return true;
697
+ });
698
+ const hasRelationDegree = computed(() => {
699
+ if (dataStore.isLifetrip) {
700
+ return false;
701
+ }
702
+ if ((whichForm.value === formStore.beneficiaryFormKey || whichForm.value === formStore.insuredFormKey) && member.value.iin !== formStore.policyholderForm.iin) {
703
+ return true;
704
+ }
705
+ return false;
706
+ });
645
707
  const hasFamilyStatus = computed(() => {
708
+ if (dataStore.isLifetrip) {
709
+ return false;
710
+ }
646
711
  if (whichForm.value === formStore.beneficiaryFormKey) {
647
712
  if (dataStore.isBolashak) {
648
713
  return false;
@@ -659,7 +724,7 @@ export default {
659
724
  return false;
660
725
  });
661
726
  const hasSignOfIPDL = computed(() => {
662
- if (dataStore.isGons) {
727
+ if (dataStore.isGons || dataStore.isLifetrip) {
663
728
  return false;
664
729
  }
665
730
  return true;
@@ -678,6 +743,9 @@ export default {
678
743
  if (dataStore.isBolashak || dataStore.isBaiterek) {
679
744
  return dataStore.rules.age18ByDate;
680
745
  }
746
+ if (dataStore.isLifetrip) {
747
+ return dataStore.rules.ageExceeds80ByDate;
748
+ }
681
749
  }
682
750
  return [];
683
751
  };
@@ -712,6 +780,12 @@ export default {
712
780
  if (dataStore.isGons || dataStore.isBolashak) {
713
781
  return [];
714
782
  }
783
+ if (member.value.age !== null && Number(member.value.age) < 18) {
784
+ return [];
785
+ }
786
+ }
787
+ if (member.value.isInsuredUnderage) {
788
+ return [];
715
789
  }
716
790
  return basePhoneRule;
717
791
  });
@@ -723,6 +797,9 @@ export default {
723
797
  return baseResidencyRule.concat(dataStore.rules.noResident);
724
798
  }
725
799
  }
800
+ if (dataStore.isLifetrip) {
801
+ return baseResidencyRule.concat(dataStore.rules.noResidentOffline);
802
+ }
726
803
  return baseResidencyRule;
727
804
  });
728
805
 
@@ -740,6 +817,8 @@ export default {
740
817
  const otpCondition = computed(() => {
741
818
  // Add conditions by product
742
819
  if (member.value.hasAgreement) return false;
820
+ if (whichForm.value === formStore.beneficiaryFormKey && member.value.age !== null && Number(member.value.age) < 18) return false;
821
+ if (dataStore.isLifetrip && whichForm.value === formStore.insuredFormKey && member.value.isInsuredUnderage) return false;
743
822
  if (!member.value.phoneNumber || (member.value.phoneNumber && member.value.phoneNumber.length !== useMask().phone.length)) return false;
744
823
  return getOtpConditionByMember();
745
824
  });
@@ -1034,14 +1113,17 @@ export default {
1034
1113
  if (!isSaved) return false;
1035
1114
  if (whichForm.value === formStore.policyholderFormKey) {
1036
1115
  if (isInsured === true || remoteIsInsured.value === true) {
1037
- formStore.insuredForm[0] = formStore.policyholderForm;
1038
- const isInsuredSaved = await dataStore.saveMember(
1039
- member.value,
1040
- memberStore.getMemberCode(formStore.insuredFormKey)!,
1041
- memberStore.getMemberFromApplication(formStore.insuredFormKey, formStore.insuredFormIndex),
1042
- );
1043
- if (!isInsuredSaved) return false;
1044
- wasInsuredAction.value = true;
1116
+ const insuredFormIndex = remoteIsInsured.value === true ? 0 : isInsured === true ? formStore.insuredForm.findIndex(i => i.iin === formStore.policyholderForm.iin) : -1;
1117
+ if (insuredFormIndex !== -1) {
1118
+ formStore.insuredForm[insuredFormIndex] = formStore.policyholderForm;
1119
+ const isInsuredSaved = await dataStore.saveMember(
1120
+ member.value,
1121
+ memberStore.getMemberCode(formStore.insuredFormKey)!,
1122
+ memberStore.getMemberFromApplication(formStore.insuredFormKey, insuredFormIndex),
1123
+ );
1124
+ if (!isInsuredSaved) return false;
1125
+ wasInsuredAction.value = true;
1126
+ }
1045
1127
  }
1046
1128
  }
1047
1129
  if (whichForm.value === formStore.insuredFormKey) {
@@ -1054,8 +1136,8 @@ export default {
1054
1136
  await dataStore.getApplicationData(route.params.taskId as string, false, false, true, wasInsuredAction.value);
1055
1137
  if (dataStore.controls.hasCalculator) {
1056
1138
  if (formStore.additionalInsuranceTermsWithout && formStore.additionalInsuranceTermsWithout.length !== 0) {
1057
- formStore.additionalInsuranceTerms.forEach((term: any) => {
1058
- const defaultTerm = formStore.additionalInsuranceTermsWithout.find((i: any) => i.coverTypeId === term.coverTypeId);
1139
+ formStore.additionalInsuranceTerms.forEach(term => {
1140
+ const defaultTerm = formStore.additionalInsuranceTermsWithout.find(i => i.coverTypeId === term.coverTypeId);
1059
1141
  if (defaultTerm) {
1060
1142
  term.coverSumName = defaultTerm.coverSumName;
1061
1143
  term.coverSumId = defaultTerm.coverSumId;
@@ -1069,9 +1151,13 @@ export default {
1069
1151
  };
1070
1152
 
1071
1153
  const validateAgreement = () => {
1072
- if (dataStore.isGons || dataStore.isBolashak) {
1073
- if (whichForm.value === formStore.beneficiaryFormKey) {
1074
- // TODO уточнить
1154
+ if (whichForm.value === formStore.beneficiaryFormKey) {
1155
+ if (member.value.age !== null && Number(member.value.age) < 18) {
1156
+ return true;
1157
+ }
1158
+ }
1159
+ if (whichForm.value === formStore.insuredFormKey) {
1160
+ if (dataStore.isLifetrip && member.value.isInsuredUnderage) {
1075
1161
  return true;
1076
1162
  }
1077
1163
  }
@@ -1089,9 +1175,14 @@ export default {
1089
1175
  if (v.valid) {
1090
1176
  isSubmittingForm.value = true;
1091
1177
  const docType = member.value.documentType.ids;
1092
- if (member.value.gotFromInsis === true && (docType === '1UDL' || docType === 'SBI')) {
1178
+ if (member.value.gotFromInsis === true && (docType === '1UDL' || docType === 'SBI' || docType === 'PS')) {
1093
1179
  dataStore.isLoading = true;
1094
- const ESBDResponse = await validateESBD(docType === '1UDL' ? 1 : 3);
1180
+ const docTypeCodes = {
1181
+ '1UDL': 1,
1182
+ PS: 2,
1183
+ SBI: 3,
1184
+ };
1185
+ const ESBDResponse = await validateESBD(docTypeCodes[docType]);
1095
1186
  if (!ESBDResponse) {
1096
1187
  dataStore.isLoading = false;
1097
1188
  return;
@@ -1170,6 +1261,15 @@ export default {
1170
1261
  if (setDefaults.percentage) {
1171
1262
  setPercentage();
1172
1263
  }
1264
+ if (setDefaults.signOfResidency) {
1265
+ setSignOfResidency();
1266
+ }
1267
+ if (setDefaults.countryOfTaxResidency) {
1268
+ setCountryOfTaxResidency();
1269
+ }
1270
+ if (setDefaults.countryOfCitizenship) {
1271
+ setCountryOfCitizenship();
1272
+ }
1173
1273
  };
1174
1274
 
1175
1275
  const setSectorCode = async () => {
@@ -1179,7 +1279,27 @@ export default {
1179
1279
  member.value.economySectorCode = defaultValue ? defaultValue : new Value();
1180
1280
  }
1181
1281
  };
1182
-
1282
+ const setSignOfResidency = async () => {
1283
+ if (member.value.id === 0 && route.query.id === '0') {
1284
+ const residents = await dataStore.getResidents();
1285
+ const defaultValue = residents.find(item => String(item.nameRu).match(new RegExp('Резидент', 'i'))) as Value;
1286
+ member.value.signOfResidency = defaultValue ? defaultValue : new Value();
1287
+ }
1288
+ };
1289
+ const setCountryOfTaxResidency = async () => {
1290
+ if (member.value.id === 0 && route.query.id === '0') {
1291
+ const taxCountries = await dataStore.getTaxCountries();
1292
+ const defaultValue = taxCountries.find(item => String(item.nameRu).match(new RegExp('Казахстан', 'i'))) as Value;
1293
+ member.value.countryOfTaxResidency = defaultValue ? defaultValue : new Value();
1294
+ }
1295
+ };
1296
+ const setCountryOfCitizenship = async () => {
1297
+ if (member.value.id === 0 && route.query.id === '0') {
1298
+ const citizenshipCountries = await dataStore.getCitizenshipCountries();
1299
+ const defaultValue = citizenshipCountries.find(item => String(item.nameRu).match(new RegExp('Казахстан', 'i'))) as Value;
1300
+ member.value.countryOfCitizenship = defaultValue ? defaultValue : new Value();
1301
+ }
1302
+ };
1183
1303
  const setPercentage = () => {
1184
1304
  if (whichForm.value === formStore.beneficiaryFormKey && member.value.id === 0 && route.query.id === '0' && member.value.percentageOfPayoutAmount === null) {
1185
1305
  if (dataStore.members.beneficiaryApp.isMultiple) {
@@ -1205,6 +1325,11 @@ export default {
1205
1325
  isButtonLoading.value = false;
1206
1326
  };
1207
1327
 
1328
+ const openDeletionDialog = (index: number) => {
1329
+ deletionDialog.value = true;
1330
+ selectedIndex.value = index;
1331
+ };
1332
+
1208
1333
  const deleteMember = async (index: number) => {
1209
1334
  await memberStore.deleteMember(route.params.taskId as string, whichForm.value, index);
1210
1335
  const currentIndex = Number(whichIndex.value);
@@ -1212,6 +1337,7 @@ export default {
1212
1337
  const newIndex = ref<number>(currentIndex - 1 > 0 ? currentIndex - 1 : 0);
1213
1338
  await selectMember(newIndex.value, index === currentIndex ? true : undefined);
1214
1339
  }
1340
+ deletionDialog.value = false;
1215
1341
  };
1216
1342
 
1217
1343
  const onInit = async () => {
@@ -1313,6 +1439,30 @@ export default {
1313
1439
  searchQuery.value = '';
1314
1440
  }
1315
1441
  });
1442
+ if (dataStore.isLifetrip) {
1443
+ watch(
1444
+ () => member.value.age,
1445
+ val => {
1446
+ if (val && Number(val) >= 18) {
1447
+ if (member.value.hasAgreement !== true) {
1448
+ member.value.hasAgreement = false;
1449
+ }
1450
+ } else {
1451
+ member.value.hasAgreement = true;
1452
+ }
1453
+ member.value.isInsuredUnderage = Number(val) >= 18 ? false : true;
1454
+ },
1455
+ );
1456
+ watch(
1457
+ () => member.value.isInsuredUnderage,
1458
+ val => {
1459
+ if (val === true && Number(member.value.age) >= 18) {
1460
+ member.value.isInsuredUnderage = false;
1461
+ return dataStore.showToaster('error', dataStore.t('toaster.underageShouldBeLess18'), 3000);
1462
+ }
1463
+ },
1464
+ );
1465
+ }
1316
1466
 
1317
1467
  return {
1318
1468
  // State
@@ -1335,6 +1485,8 @@ export default {
1335
1485
  Value,
1336
1486
  memberDocument,
1337
1487
  familyDialog,
1488
+ deletionDialog,
1489
+ selectedIndex,
1338
1490
  selectedFamilyMember,
1339
1491
  sameAddress,
1340
1492
 
@@ -1352,10 +1504,13 @@ export default {
1352
1504
  hasGBDFL,
1353
1505
  hasInsis,
1354
1506
  hasGKB,
1507
+ hasMiddleName,
1508
+ hasRelationDegree,
1355
1509
  hasFamilyStatus,
1356
1510
  hasInsurancePay,
1357
1511
  hasSignOfIPDL,
1358
1512
  hasSameAddressToggle,
1513
+ hasMemberSearch,
1359
1514
 
1360
1515
  // Rules
1361
1516
  ageRule,
@@ -1378,6 +1533,7 @@ export default {
1378
1533
  getFile,
1379
1534
  selectFamilyMember,
1380
1535
  closeFamilyDialog,
1536
+ openDeletionDialog,
1381
1537
  scrollForm,
1382
1538
  onIinInput,
1383
1539
  onOtpCodeInput,
@@ -1,8 +1,6 @@
1
1
  <template>
2
2
  <base-content :title="$dataStore.t('agreementBlock.title')" class="!w-full">
3
- <p class="h-full p-4 lg:p-8 leading-8 font-medium" :class="[$libStyles.scrollPage, $libStyles.textSimple]">
4
- &nbsp;&nbsp;&nbsp;&nbsp; {{ $dataStore.t('agreementBlock.text') }}
5
- </p>
3
+ <p class="h-full p-4 lg:p-8 leading-8 font-medium" :class="[$styles.scrollPage, $styles.textSimple]">&nbsp;&nbsp;&nbsp;&nbsp; {{ $dataStore.t('agreementBlock.text') }}</p>
6
4
  </base-content>
7
5
  </template>
8
6