hl-core 0.0.8-beta.9 → 0.0.9-beta.1

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 (59) hide show
  1. package/api/index.ts +100 -34
  2. package/api/interceptors.ts +17 -13
  3. package/components/Button/Btn.vue +1 -1
  4. package/components/Button/ScrollButtons.vue +2 -2
  5. package/components/Complex/Page.vue +1 -1
  6. package/components/Dialog/Dialog.vue +9 -39
  7. package/components/Dialog/FamilyDialog.vue +7 -4
  8. package/components/Form/FormBlock.vue +51 -28
  9. package/components/Form/FormSection.vue +4 -1
  10. package/components/Form/FormToggle.vue +2 -3
  11. package/components/Form/ManagerAttachment.vue +21 -20
  12. package/components/Form/ProductConditionsBlock.vue +60 -10
  13. package/components/Input/Datepicker.vue +6 -2
  14. package/components/Input/FileInput.vue +2 -2
  15. package/components/Input/FormInput.vue +29 -7
  16. package/components/Input/PanelInput.vue +7 -2
  17. package/components/Input/RoundedInput.vue +2 -2
  18. package/components/Input/RoundedSelect.vue +137 -0
  19. package/components/Layout/Drawer.vue +3 -2
  20. package/components/Layout/Header.vue +40 -4
  21. package/components/Layout/Loader.vue +1 -1
  22. package/components/Layout/SettingsPanel.vue +51 -13
  23. package/components/Menu/MenuHover.vue +30 -0
  24. package/components/Menu/MenuNav.vue +29 -13
  25. package/components/Menu/MenuNavItem.vue +6 -3
  26. package/components/Pages/Anketa.vue +49 -31
  27. package/components/Pages/Auth.vue +139 -46
  28. package/components/Pages/Documents.vue +6 -6
  29. package/components/Pages/InvoiceInfo.vue +30 -0
  30. package/components/Pages/MemberForm.vue +503 -343
  31. package/components/Pages/ProductAgreement.vue +4 -2
  32. package/components/Pages/ProductConditions.vue +494 -95
  33. package/components/Panel/PanelHandler.vue +91 -20
  34. package/components/Panel/PanelSelectItem.vue +1 -1
  35. package/components/Utilities/Chip.vue +27 -0
  36. package/components/Utilities/JsonViewer.vue +27 -0
  37. package/composables/axios.ts +1 -1
  38. package/composables/classes.ts +165 -81
  39. package/composables/constants.ts +25 -52
  40. package/composables/index.ts +80 -2
  41. package/composables/styles.ts +8 -3
  42. package/configs/i18n.ts +2 -4
  43. package/layouts/default.vue +6 -6
  44. package/locales/kz.json +532 -346
  45. package/locales/ru.json +210 -22
  46. package/nuxt.config.ts +1 -1
  47. package/package.json +38 -12
  48. package/pages/500.vue +2 -2
  49. package/pages/Token.vue +51 -0
  50. package/plugins/helperFunctionsPlugins.ts +2 -1
  51. package/plugins/vuetifyPlugin.ts +3 -1
  52. package/store/{data.store.js → data.store.ts} +1116 -752
  53. package/store/form.store.ts +1 -1
  54. package/store/member.store.ts +94 -72
  55. package/store/{rules.js → rules.ts} +54 -26
  56. package/types/enum.ts +83 -0
  57. package/types/env.d.ts +10 -0
  58. package/types/index.ts +197 -7
  59. package/locales/en.json +0 -399
@@ -1,350 +1,360 @@
1
1
  <template>
2
2
  <section class="flex flex-col gap-4 px-[10px]">
3
3
  <v-form v-if="member" ref="vForm" @submit="submitForm" class="max-h-[82svh] overflow-y-scroll">
4
- <base-form-section :title="$t('form.personalData')">
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">
6
+ <div
7
+ v-for="(each, index) of formStore[whichForm]"
8
+ :key="index"
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]"
11
+ @click.self="index !== Number(whichIndex) ? selectMember(index) : null"
12
+ >
13
+ {{ `${$dataStore.menu.selectedItem.title} ${index + 1}` }}
14
+ <v-btn
15
+ icon="mdi-close !text-[20px]"
16
+ size="x-small"
17
+ :disabled="!memberStore.canMemberDeleted(whichForm, index) && !memberStore.canMemberCleared(whichForm, index)"
18
+ variant="plain"
19
+ :color="Number(whichIndex) === index ? '#FFF' : '#A0B3D8'"
20
+ @click.prevent="memberStore.canMemberDeleted(whichForm, index) || memberStore.canMemberCleared(whichForm, index) ? deleteMember(index) : null"
21
+ />
22
+ </div>
23
+ </div>
24
+ <v-btn class="ml-2" icon="mdi-plus !text-[24px]" @click="memberStore.addMember(whichForm)" size="small" color="#A0B3D8" variant="tonal" />
25
+ </div>
26
+ <base-form-section
27
+ :title="$dataStore.t('form.personalData')"
28
+ :class="[memberSetting && memberSetting.has === true && memberSetting.isMultiple === true ? 'rounded-t-0 !mt-[-5px]' : 'mt-[14px]']"
29
+ >
30
+ <base-form-input
31
+ v-model="member.phoneNumber"
32
+ :label="$dataStore.t('form.phoneNumber')"
33
+ :maska="$maska.phone"
34
+ :readonly="!!isDisabled || !!isIinPhoneDisabled"
35
+ :clearable="!isDisabled"
36
+ :append-inner-icon="otpCondition ? 'mdi mdi-phone-message' : ''"
37
+ @append="openCustomPanel('otp')"
38
+ @keyup.enter.prevent="otpCondition ? openCustomPanel('otp') : null"
39
+ :rules="phoneRule"
40
+ />
5
41
  <base-form-input
6
42
  v-model="member.iin"
7
- :label="$t('form.iin')"
43
+ :label="$dataStore.t('form.iin')"
8
44
  :maska="$maska.iin"
9
- :readonly="isDisabled || isIinPhoneDisabled"
45
+ :readonly="!!isDisabled || !!isIinPhoneDisabled"
10
46
  :clearable="!isDisabled"
11
47
  :append-inner-icon="showSaveButton ? 'mdi mdi-magnify' : ''"
12
48
  @append="searchMember"
49
+ @input="onIinInput"
13
50
  :rules="$rules.required.concat($rules.iinRight)"
14
- ></base-form-input>
15
- <base-form-input
16
- v-model="member.phoneNumber"
17
- :label="$t('form.phoneNumber')"
18
- :maska="$maska.phone"
19
- :readonly="isDisabled || isIinPhoneDisabled"
20
- :clearable="!isDisabled"
21
- :append-inner-icon="otpCondition ? 'mdi mdi-phone-message' : ''"
22
- @append="sendOtp(false)"
23
- @keyup.enter.prevent="otpCondition ? sendOtp(false) : null"
24
- :rules="phoneRule"
25
- ></base-form-input>
26
- <base-fade-transition>
27
- <base-form-input
28
- v-if="otpCondition && member.otpTokenId"
29
- v-model="member.otpCode"
30
- :label="$t('form.otpCode')"
31
- :maska="$maska.otp"
32
- :append-inner-icon="hasOtp ? 'mdi mdi-check' : ''"
33
- @keyup.enter.prevent="hasOtp ? checkOtp() : null"
34
- ></base-form-input>
35
- </base-fade-transition>
51
+ />
36
52
  <base-form-input
37
- v-model="member.lastName"
53
+ v-model.trim="member.lastName"
38
54
  :readonly="isDisabled || isFromGBD"
39
55
  :clearable="!isDisabled"
40
- :label="$t('form.lastName')"
56
+ :label="$dataStore.t('form.lastName')"
41
57
  :rules="$rules.required.concat($rules.cyrillic)"
42
- ></base-form-input>
58
+ />
43
59
  <base-form-input
44
- v-model="member.firstName"
60
+ v-model.trim="member.firstName"
45
61
  :readonly="isDisabled || isFromGBD"
46
62
  :clearable="!isDisabled"
47
- :label="$t('form.firstName')"
63
+ :label="$dataStore.t('form.firstName')"
48
64
  :rules="$rules.required.concat($rules.cyrillic)"
49
- ></base-form-input>
65
+ />
50
66
  <base-form-input
51
- v-model="member.middleName"
67
+ v-model.trim="member.middleName"
52
68
  :readonly="isDisabled || isFromGBD"
53
69
  :clearable="!isDisabled"
54
- :label="$t('form.middleName')"
55
- :rules="$rules.required.concat($rules.cyrillic)"
56
- ></base-form-input>
70
+ :label="$dataStore.t('form.middleName')"
71
+ :rules="$rules.cyrillicNonRequired"
72
+ />
57
73
  <base-form-input
58
74
  v-model="member.birthDate"
59
75
  :readonly="isDisabled || isFromGBD"
60
76
  :clearable="!isDisabled"
61
- :label="$t('form.birthDate')"
62
- :rules="$rules.required.concat($rules.birthDate)"
77
+ :label="$dataStore.t('form.birthDate')"
78
+ :rules="birthDateRule"
63
79
  :maska="$maska.date"
64
80
  append-inner-icon="mdi mdi-calendar-blank-outline"
65
- ></base-form-input>
66
- <base-form-input v-model="member.age" :label="$t('form.age')" :readonly="true" :clearable="!isDisabled" :rules="ageRule"></base-form-input>
81
+ />
82
+ <base-form-input v-model="member.age" :label="$dataStore.t('form.age')" :readonly="true" :clearable="!isDisabled" :rules="ageRule" />
67
83
  <base-panel-input
68
84
  v-model="member.gender"
69
85
  :value="member.gender.nameRu"
70
86
  :readonly="isDisabled || isFromGBD"
71
87
  :clearable="!isDisabled"
72
- :label="$t('form.gender')"
88
+ :label="$dataStore.t('form.gender')"
73
89
  :rules="$rules.objectRequired"
74
90
  append-inner-icon="mdi mdi-chevron-right"
75
- @append="openPanel($t('form.gender'), $dataStore.gender, 'gender')"
76
- ></base-panel-input>
91
+ @append="openPanel($dataStore.t('form.gender'), $dataStore.gender, 'gender')"
92
+ />
77
93
  <base-panel-input
94
+ v-if="hasFamilyStatus"
78
95
  v-model="member.familyStatus"
79
96
  :value="member.familyStatus.nameRu"
80
97
  :readonly="isDisabled"
81
98
  :clearable="!isDisabled"
82
- :label="$t('form.familyStatus')"
99
+ :label="$dataStore.t('form.familyStatus')"
83
100
  :rules="$rules.objectRequired"
84
101
  append-inner-icon="mdi mdi-chevron-right"
85
- @append="openPanel($t('form.familyStatus'), [], 'familyStatus', $dataStore.getFamilyStatuses)"
86
- ></base-panel-input>
102
+ @append="openPanel($dataStore.t('form.familyStatus'), [], 'familyStatus', $dataStore.getFamilyStatuses)"
103
+ />
87
104
  <base-panel-input
88
105
  v-if="(whichForm === formStore.beneficiaryFormKey || whichForm === formStore.insuredFormKey) && member.iin !== formStore.policyholderForm.iin"
89
106
  v-model="member.relationDegree"
90
107
  :value="member.relationDegree.nameRu"
91
108
  :readonly="isDisabled"
92
109
  :clearable="!isDisabled"
93
- :label="$t('form.relations')"
110
+ :label="$dataStore.t('form.relations')"
94
111
  :rules="$rules.objectRequired"
95
112
  append-inner-icon="mdi mdi-chevron-right"
96
- @append="openPanel($t('form.relations'), [], 'relationDegree', $dataStore.getRelationTypes)"
97
- ></base-panel-input>
113
+ @append="openPanel($dataStore.t('form.relations'), [], 'relationDegree', $dataStore.getRelationTypes)"
114
+ />
98
115
  <base-form-input
99
116
  v-if="whichForm === formStore.beneficiaryFormKey"
100
117
  v-model="member.percentageOfPayoutAmount"
101
118
  :readonly="isDisabled"
102
119
  :clearable="!isDisabled"
103
- :label="$t('form.percentageOfPayoutAmount')"
120
+ :label="$dataStore.t('form.percentageOfPayoutAmount')"
104
121
  :rules="$rules.required.concat($rules.numbers)"
105
- ></base-form-input>
106
- <base-form-toggle v-if="$dataStore.isGons" :disabled="isDisabled" :has-border="false" v-model="member.isPdl" :title="$t('isMemberIPDL')"></base-form-toggle>
122
+ />
107
123
  </base-form-section>
108
- <base-form-section :title="$t('policyholdersRepresentative.PowerOfAttorney')" v-if="whichForm === formStore.policyholdersRepresentativeFormKey">
124
+ <base-form-section :title="$dataStore.t('policyholdersRepresentative.PowerOfAttorney')" v-if="whichForm === formStore.policyholdersRepresentativeFormKey">
109
125
  <base-form-input
110
- v-model="member.fullNameRod"
111
- :label="$t('policyholdersRepresentative.NameParentCase')"
126
+ v-model.trim="member.fullNameRod"
127
+ :label="$dataStore.t('policyholdersRepresentative.NameParentCase')"
112
128
  :readonly="isDisabled"
113
129
  :clearable="!isDisabled"
114
130
  :rules="$rules.required"
115
- ></base-form-input>
131
+ />
116
132
  <base-form-input
117
- v-model="member.confirmDocTypeKz"
118
- :label="$t('policyholdersRepresentative.basisDocKz')"
133
+ v-model.trim="member.confirmDocTypeKz"
134
+ :label="$dataStore.t('policyholdersRepresentative.basisDocKz')"
119
135
  :readonly="isDisabled"
120
136
  :clearable="!isDisabled"
121
137
  :rules="$rules.required"
122
- ></base-form-input>
138
+ />
123
139
  <base-form-input
124
- v-model="member.confirmDocType"
125
- :label="$t('policyholdersRepresentative.basisDocRu')"
140
+ v-model.trim="member.confirmDocType"
141
+ :label="$dataStore.t('policyholdersRepresentative.basisDocRu')"
126
142
  :readonly="isDisabled"
127
143
  :clearable="!isDisabled"
128
144
  :rules="$rules.required"
129
- ></base-form-input>
145
+ />
130
146
  <base-form-input
131
- v-model="member.confirmDocTypeRod"
132
- :label="$t('policyholdersRepresentative.basisDocRuParentCase')"
147
+ v-model.trim="member.confirmDocTypeRod"
148
+ :label="$dataStore.t('policyholdersRepresentative.basisDocRuParentCase')"
133
149
  :readonly="isDisabled"
134
150
  :clearable="!isDisabled"
135
151
  :rules="$rules.required"
136
- ></base-form-input>
152
+ />
137
153
  <base-form-input
138
- v-model="member.confirmDocNumber"
139
- :label="$t('policyholdersRepresentative.numberDoc')"
154
+ v-model.trim="member.confirmDocNumber"
155
+ :label="$dataStore.t('policyholdersRepresentative.numberDoc')"
140
156
  :readonly="isDisabled"
141
157
  :clearable="!isDisabled"
142
158
  :rules="$rules.required"
143
- ></base-form-input>
159
+ />
144
160
  <base-form-input
145
161
  v-model="member.confirmDocIssueDate"
146
- :label="$t('form.documentDate')"
162
+ :label="$dataStore.t('form.documentDate')"
147
163
  :readonly="isDisabled"
148
164
  :clearable="!isDisabled"
149
165
  :rules="$rules.date"
150
166
  :maska="$maska.date"
151
167
  append-inner-icon="mdi mdi-calendar-blank-outline"
152
- ></base-form-input>
168
+ />
153
169
  <base-form-input
154
170
  v-model="member.confirmDocExpireDate"
155
- :label="$t('form.documentExpire')"
171
+ :label="$dataStore.t('form.documentExpire')"
156
172
  :readonly="isDisabled"
157
173
  :clearable="!isDisabled"
158
174
  :rules="$rules.date"
159
175
  :maska="$maska.date"
160
176
  append-inner-icon="mdi mdi-calendar-blank-outline"
161
- ></base-form-input>
162
- <base-form-input v-model="member.migrationCard" :label="$t('policyholdersRepresentative.numberVisa')"></base-form-input>
177
+ />
178
+ <base-form-input v-model.trim="member.migrationCard" :label="$dataStore.t('policyholdersRepresentative.numberVisa')" />
163
179
  <base-form-input
164
180
  v-model="member.migrationCardIssueDate"
165
- :label="$t('form.documentDate')"
181
+ :label="$dataStore.t('form.documentDate')"
166
182
  :readonly="isDisabled"
167
183
  :clearable="!isDisabled"
168
184
  :rules="$rules.date"
169
185
  :maska="$maska.date"
170
186
  append-inner-icon="mdi mdi-calendar-blank-outline"
171
- ></base-form-input>
187
+ />
172
188
  <base-form-input
173
189
  v-model="member.migrationCardExpireDate"
174
- :label="$t('form.documentExpire')"
190
+ :label="$dataStore.t('form.documentExpire')"
175
191
  :readonly="isDisabled"
176
192
  :clearable="!isDisabled"
177
193
  :rules="$rules.date"
178
194
  :maska="$maska.date"
179
195
  append-inner-icon="mdi mdi-calendar-blank-outline"
180
- ></base-form-input>
196
+ />
181
197
  <base-form-toggle
182
198
  v-model="formStore.policyholdersRepresentativeForm.isNotary"
183
199
  :disabled="isDisabled"
184
200
  :has-border="false"
185
- :title="$t('policyholdersRepresentative.confirmAuthority')"
186
- ></base-form-toggle>
201
+ :title="$dataStore.t('policyholdersRepresentative.confirmAuthority')"
202
+ />
187
203
  <base-form-input
188
- v-model="member.notaryLongName"
189
- :label="$t('policyholdersRepresentative.name')"
204
+ v-model.trim="member.notaryLongName"
205
+ :label="$dataStore.t('policyholdersRepresentative.name')"
190
206
  :readonly="isDisabled"
191
207
  :clearable="!isDisabled"
192
208
  :rules="formStore.policyholdersRepresentativeForm.isNotary ? $rules.required : []"
193
- ></base-form-input>
209
+ />
194
210
  <base-form-input
195
- v-model="member.notaryLicenseNumber"
196
- :label="$t('policyholdersRepresentative.numberLicense')"
211
+ v-model.trim="member.notaryLicenseNumber"
212
+ :label="$dataStore.t('policyholdersRepresentative.numberLicense')"
197
213
  :readonly="isDisabled"
198
214
  :clearable="!isDisabled"
199
215
  :rules="formStore.policyholdersRepresentativeForm.isNotary ? $rules.required : []"
200
- ></base-form-input>
216
+ />
201
217
  <base-form-input
202
- v-model="member.notaryLicenseIssuer"
203
- :label="$t('policyholdersRepresentative.documentIssuers')"
218
+ v-model.trim="member.notaryLicenseIssuer"
219
+ :label="$dataStore.t('policyholdersRepresentative.documentIssuers')"
204
220
  :readonly="isDisabled"
205
221
  :clearable="!isDisabled"
206
222
  :rules="formStore.policyholdersRepresentativeForm.isNotary ? $rules.required : []"
207
- ></base-form-input>
223
+ />
208
224
  <base-form-input
209
225
  v-model="member.notaryLicenseDate"
210
- :label="$t('form.documentDate')"
226
+ :label="$dataStore.t('form.documentDate')"
211
227
  :readonly="isDisabled"
212
228
  :clearable="!isDisabled"
213
229
  :rules="formStore.policyholdersRepresentativeForm.isNotary ? $rules.required.concat($rules.date) : []"
214
230
  :maska="$maska.date"
215
231
  append-inner-icon="mdi mdi-calendar-blank-outline"
216
- ></base-form-input>
232
+ />
217
233
  </base-form-section>
218
- <base-form-section :title="$t('form.jobData')" v-if="$dataStore.hasJobSection(whichForm)">
219
- <base-form-input v-model="member.job" :label="$t('form.job')" :readonly="isDisabled" :clearable="!isDisabled" :rules="$rules.required"></base-form-input>
220
- <base-form-input v-model="member.jobPosition" :label="$t('form.jobPosition')" :readonly="isDisabled" :clearable="!isDisabled" :rules="$rules.required"></base-form-input>
221
- <base-form-input v-model="member.jobPlace" :label="$t('form.jobPlace')" :readonly="isDisabled" :clearable="!isDisabled" :rules="$rules.required"></base-form-input>
234
+ <base-form-section :title="$dataStore.t('form.jobData')" v-if="$dataStore.hasJobSection(whichForm)">
235
+ <base-form-input v-model.trim="member.job" :label="$dataStore.t('form.job')" :readonly="isDisabled" :clearable="!isDisabled" :rules="$rules.required" />
236
+ <base-form-input v-model.trim="member.jobPosition" :label="$dataStore.t('form.jobPosition')" :readonly="isDisabled" :clearable="!isDisabled" :rules="$rules.required" />
237
+ <base-form-input v-model.trim="member.jobPlace" :label="$dataStore.t('form.jobPlace')" :readonly="isDisabled" :clearable="!isDisabled" :rules="$rules.required" />
222
238
  </base-form-section>
223
- <base-form-section :title="$t('form.placeRegistration')" v-if="$dataStore.hasPlaceSection(whichForm)">
224
- <base-form-toggle
225
- v-if="whichForm === formStore.beneficiaryFormKey"
226
- v-model="sameAddress"
227
- :disabled="isDisabled"
228
- :has-border="false"
229
- :title="$t('form.sameAddress')"
230
- ></base-form-toggle>
239
+ <base-form-section :title="$dataStore.t('form.placeRegistration')" v-if="$dataStore.hasPlaceSection(whichForm)">
240
+ <base-form-toggle v-if="hasSameAddressToggle" v-model="sameAddress" :disabled="isDisabled" :has-border="false" :title="$dataStore.t('form.sameAddress')" />
231
241
  <base-panel-input
232
242
  v-model="member.registrationCountry"
233
243
  :value="member.registrationCountry.nameRu"
234
244
  :readonly="isDisabled"
235
245
  :clearable="!isDisabled"
236
- :label="$t('form.Country')"
246
+ :label="$dataStore.t('form.Country')"
237
247
  :rules="$rules.objectRequired"
238
248
  append-inner-icon="mdi mdi-chevron-right"
239
- @append="openPanel($t('form.Country'), [], 'registrationCountry', $dataStore.getCountries)"
240
- ></base-panel-input>
249
+ @append="openPanel($dataStore.t('form.Country'), [], 'registrationCountry', $dataStore.getCountries)"
250
+ />
241
251
  <base-fade-transition>
242
252
  <div class="flex flex-col gap-[1px]" v-if="member.registrationCountry.nameRu === 'Казахстан' || member.registrationCountry.nameRu === null">
243
253
  <base-panel-input
244
254
  v-model="member.registrationProvince"
245
255
  :value="member.registrationProvince.nameRu"
246
- :label="$t('form.Province')"
256
+ :label="$dataStore.t('form.Province')"
247
257
  :readonly="isDisabled"
248
258
  :clearable="!isDisabled"
249
259
  :rules="$rules.objectRequired"
250
260
  append-inner-icon="mdi mdi-chevron-right"
251
- @append="openPanel($t('form.Province'), [], 'registrationProvince', $dataStore.getStates, 'registrationCountry')"
252
- ></base-panel-input>
261
+ @append="openPanel($dataStore.t('form.Province'), [], 'registrationProvince', $dataStore.getStates, 'registrationCountry')"
262
+ />
253
263
  <base-panel-input
254
264
  v-model="member.registrationRegionType"
255
265
  :value="member.registrationRegionType.nameRu"
256
- :label="$t('form.RegionType')"
266
+ :label="$dataStore.t('form.RegionType')"
257
267
  :readonly="isDisabled"
258
268
  :clearable="!isDisabled"
259
269
  :rules="$rules.objectRequired"
260
270
  append-inner-icon="mdi mdi-chevron-right"
261
- @append="openPanel($t('form.RegionType'), [], 'registrationRegionType', $dataStore.getLocalityTypes)"
262
- ></base-panel-input>
271
+ @append="openPanel($dataStore.t('form.RegionType'), [], 'registrationRegionType', $dataStore.getLocalityTypes)"
272
+ />
263
273
  <base-panel-input
264
274
  v-if="member.registrationRegionType.nameRu !== 'город'"
265
275
  v-model="member.registrationRegion"
266
276
  :value="member.registrationRegion.nameRu"
267
- :label="$t('form.Region')"
277
+ :label="$dataStore.t('form.Region')"
268
278
  :readonly="isDisabled"
269
279
  :clearable="!isDisabled"
270
280
  :rules="$rules.objectRequired"
271
281
  append-inner-icon="mdi mdi-chevron-right"
272
- @append="openPanel($t('form.Region'), [], 'registrationRegion', $dataStore.getRegions, 'registrationProvince')"
273
- ></base-panel-input>
282
+ @append="openPanel($dataStore.t('form.Region'), [], 'registrationRegion', $dataStore.getRegions, 'registrationProvince')"
283
+ />
274
284
  <base-panel-input
275
285
  v-model="member.registrationCity"
276
286
  :value="member.registrationCity.nameRu"
277
- :label="$t('form.City')"
287
+ :label="$dataStore.t('form.City')"
278
288
  :readonly="isDisabled"
279
289
  :clearable="!isDisabled"
280
290
  :rules="$rules.objectRequired"
281
291
  append-inner-icon="mdi mdi-chevron-right"
282
- @append="openPanel($t('form.City'), [], 'registrationCity', $dataStore.getCities, 'registrationProvince')"
283
- ></base-panel-input>
292
+ @append="openPanel($dataStore.t('form.City'), [], 'registrationCity', $dataStore.getCities, 'registrationProvince')"
293
+ />
284
294
  <!-- <base-form-input v-if="$dataStore.isGons" v-model="member.postIndex" :readonly="isDisabled"
285
- :clearable="!isDisabled" :label="$t('form.postIndex')" :maska="$maska.post"></base-form-input> -->
286
- <base-form-input v-model="member.registrationQuarter" :readonly="isDisabled" :clearable="!isDisabled" :label="$t('form.Quarter')"></base-form-input>
287
- <base-form-input v-model="member.registrationMicroDistrict" :readonly="isDisabled" :clearable="!isDisabled" :label="$t('form.MicroDistrict')"></base-form-input>
295
+ :clearable="!isDisabled" :label="$dataStore.t('form.postIndex')" :maska="$maska.post"/> -->
296
+ <base-form-input v-model.trim="member.registrationQuarter" :readonly="isDisabled" :clearable="!isDisabled" :label="$dataStore.t('form.Quarter')" />
297
+ <base-form-input v-model.trim="member.registrationMicroDistrict" :readonly="isDisabled" :clearable="!isDisabled" :label="$dataStore.t('form.MicroDistrict')" />
288
298
  <base-form-input
289
- v-model="member.registrationStreet"
299
+ v-model.trim="member.registrationStreet"
290
300
  :rules="$rules.required"
291
301
  :readonly="isDisabled"
292
302
  :clearable="!isDisabled"
293
- :label="$t('form.Street')"
294
- ></base-form-input>
303
+ :label="$dataStore.t('form.Street')"
304
+ />
295
305
  <base-form-input
296
- v-model="member.registrationNumberHouse"
306
+ v-model.trim="member.registrationNumberHouse"
297
307
  :rules="$rules.required"
298
308
  :readonly="isDisabled"
299
309
  :clearable="!isDisabled"
300
- :label="$t('form.NumberHouse')"
301
- ></base-form-input>
302
- <base-form-input v-model="member.registrationNumberApartment" :readonly="isDisabled" :clearable="!isDisabled" :label="$t('form.NumberApartment')"></base-form-input>
310
+ :label="$dataStore.t('form.NumberHouse')"
311
+ />
312
+ <base-form-input v-model.trim="member.registrationNumberApartment" :readonly="isDisabled" :clearable="!isDisabled" :label="$dataStore.t('form.NumberApartment')" />
303
313
  </div>
304
314
  </base-fade-transition>
305
315
  </base-form-section>
306
- <base-form-section :title="$t('form.birthData')" v-if="$dataStore.hasBirthSection(whichForm)">
316
+ <base-form-section :title="$dataStore.t('form.birthData')" v-if="$dataStore.hasBirthSection(whichForm)">
307
317
  <base-panel-input
308
318
  v-model="member.birthPlace"
309
319
  :value="member.birthPlace.nameRu"
310
- :label="$t('form.Country')"
320
+ :label="$dataStore.t('form.Country')"
311
321
  :readonly="isDisabled"
312
322
  :clearable="!isDisabled"
313
323
  :rules="$rules.objectRequired"
314
324
  append-inner-icon="mdi mdi-chevron-right"
315
- @append="openPanel($t('form.Country'), [], 'birthPlace', $dataStore.getCountries)"
316
- ></base-panel-input>
325
+ @append="openPanel($dataStore.t('form.Country'), [], 'birthPlace', $dataStore.getCountries)"
326
+ />
317
327
  <!-- TODO -->
318
328
  <!-- <base-panel-input
319
329
  v-model="member.birthRegion"
320
330
  :value="member.birthRegion.nameRu"
321
- :label="$t('form.Region')"
331
+ :label="$dataStore.t('form.Region')"
322
332
  :readonly="isDisabled"
323
333
  :clearable="!isDisabled"
324
334
  :rules="$rules.objectRequired"
325
335
  append-inner-icon="mdi mdi-chevron-right"
326
- @append="openPanel($t('form.Region'), [], 'birthRegion', $dataStore.getRegions)"
327
- ></base-panel-input> -->
336
+ @append="openPanel($dataStore.t('form.Region'), [], 'birthRegion', $dataStore.getRegions)"
337
+ /> -->
328
338
  </base-form-section>
329
- <base-form-section :title="$t('form.documentData')" v-if="$dataStore.hasDocumentSection(whichForm)">
339
+ <base-form-section :title="$dataStore.t('form.documentData')" v-if="$dataStore.hasDocumentSection(whichForm)">
330
340
  <base-panel-input
331
341
  v-model="member.documentType"
332
342
  :value="member.documentType.nameRu"
333
- :label="$t('form.documentType')"
343
+ :label="$dataStore.t('form.documentType')"
334
344
  :readonly="isDisabled"
335
345
  :clearable="!isDisabled"
336
346
  :rules="$rules.objectRequired"
337
347
  append-inner-icon="mdi mdi-chevron-right"
338
- @append="openPanel($t('form.documentType'), [], 'documentType', $dataStore.getDocumentTypes)"
339
- ></base-panel-input>
348
+ @append="openPanel($dataStore.t('form.documentType'), [], 'documentType', $dataStore.getDocumentTypes)"
349
+ />
340
350
  <base-form-input
341
- v-model="member.documentNumber"
342
- :label="$t('form.documentNumber')"
351
+ v-model.trim="member.documentNumber"
352
+ :label="$dataStore.t('form.documentNumber')"
343
353
  :readonly="isDisabled"
344
354
  :clearable="!isDisabled"
345
355
  :rules="$rules.required"
346
- ></base-form-input>
347
- <!-- <base-file-input v-if="!memberDocument" :disabled="isDisabled" :clearable="!isDisabled" @input="attachFile($event)"></base-file-input>
356
+ />
357
+ <!-- <base-file-input v-if="!memberDocument" :disabled="isDisabled" :clearable="!isDisabled" @input="attachFile($event)" />
348
358
  <base-empty-form-field v-if="memberDocument" @click="!isDisabled && openCustomPanel('document')" class="justify-between">
349
359
  {{ `${memberDocument.fileTypeName} - ${memberDocument.fileName}` }}
350
360
  <i class="cursor-pointer mdi mdi-file-document mr-6 text-[#a0b3d8] text-xl"></i>
@@ -352,154 +362,184 @@
352
362
  <base-panel-input
353
363
  v-model="member.documentIssuers"
354
364
  :value="member.documentIssuers.nameRu"
355
- :label="$t('form.documentIssuers')"
365
+ :label="$dataStore.t('form.documentIssuers')"
356
366
  :readonly="isDisabled"
357
367
  :clearable="!isDisabled"
358
368
  :rules="$rules.objectRequired"
359
369
  append-inner-icon="mdi mdi-chevron-right"
360
- @append="openPanel($t('form.documentIssuers'), [], 'documentIssuers', $dataStore.getDocumentIssuers)"
361
- ></base-panel-input>
370
+ @append="openPanel($dataStore.t('form.documentIssuers'), [], 'documentIssuers', $dataStore.getDocumentIssuers)"
371
+ />
362
372
  <base-form-input
363
373
  v-model="member.documentDate"
364
- :label="$t('form.documentDate')"
374
+ :label="$dataStore.t('form.documentDate')"
365
375
  :readonly="isDisabled"
366
376
  :clearable="!isDisabled"
367
377
  :rules="$rules.required.concat($rules.date)"
368
378
  :maska="$maska.date"
369
379
  append-inner-icon="mdi mdi-calendar-blank-outline"
370
- ></base-form-input>
380
+ />
371
381
  <base-fade-transition>
372
382
  <base-form-input
373
383
  v-if="member.documentType.ids !== 'SBI' && member.documentType.ids !== 'VNZ'"
374
384
  v-model="member.documentExpire"
375
- :label="$t('form.documentExpire')"
385
+ :label="$dataStore.t('form.documentExpire')"
376
386
  :readonly="isDisabled"
377
387
  :clearable="!isDisabled"
378
388
  :rules="$rules.required.concat($rules.date)"
379
389
  :maska="$maska.date"
380
390
  append-inner-icon="mdi mdi-calendar-blank-outline"
381
- ></base-form-input>
391
+ />
382
392
  </base-fade-transition>
383
393
  <base-panel-input
384
394
  v-model="member.signOfResidency"
385
395
  :value="member.signOfResidency.nameRu"
386
- :label="$t('form.signOfResidency')"
396
+ :label="$dataStore.t('form.signOfResidency')"
387
397
  :readonly="isDisabled"
388
398
  :clearable="!isDisabled"
389
399
  :rules="residencyRule"
390
400
  append-inner-icon="mdi mdi-chevron-right"
391
- @append="openPanel($t('form.signOfResidency'), [], 'signOfResidency', $dataStore.getResidents)"
392
- ></base-panel-input>
401
+ @append="openPanel($dataStore.t('form.signOfResidency'), [], 'signOfResidency', $dataStore.getResidents)"
402
+ />
393
403
  <base-panel-input
394
404
  v-model="member.countryOfTaxResidency"
395
405
  :value="member.countryOfTaxResidency.nameRu"
396
- :label="$t('form.countryOfTaxResidency')"
406
+ :label="$dataStore.t('form.countryOfTaxResidency')"
397
407
  :readonly="isDisabled"
398
408
  :clearable="!isDisabled"
399
409
  :rules="$rules.objectRequired"
400
410
  append-inner-icon="mdi mdi-chevron-right"
401
- @append="openPanel($t('form.countryOfTaxResidency'), [], 'countryOfTaxResidency', $dataStore.getTaxCountries)"
402
- ></base-panel-input>
411
+ @append="openPanel($dataStore.t('form.countryOfTaxResidency'), [], 'countryOfTaxResidency', $dataStore.getTaxCountries)"
412
+ />
403
413
  <base-fade-transition>
404
414
  <base-panel-input
405
415
  v-if="member.countryOfTaxResidency.ids === '500014.3'"
406
416
  v-model="member.addTaxResidency"
407
417
  :value="member.addTaxResidency.nameRu"
408
- :label="$t('form.addTaxResidency')"
418
+ :label="$dataStore.t('form.addTaxResidency')"
409
419
  :readonly="isDisabled"
410
420
  :clearable="!isDisabled"
411
421
  :rules="$rules.objectRequired"
412
422
  append-inner-icon="mdi mdi-chevron-right"
413
- @append="openPanel($t('form.addTaxResidency'), [], 'addTaxResidency', $dataStore.getAdditionalTaxCountries)"
414
- ></base-panel-input>
423
+ @append="openPanel($dataStore.t('form.addTaxResidency'), [], 'addTaxResidency', $dataStore.getAdditionalTaxCountries)"
424
+ />
415
425
  </base-fade-transition>
416
426
  <base-panel-input
427
+ v-if="hasSignOfIPDL"
417
428
  v-model="member.signOfIPDL"
418
429
  :value="member.signOfIPDL.nameRu"
419
- :label="$t('form.signOfIPDL')"
430
+ :label="$dataStore.t('form.signOfIPDL')"
420
431
  :readonly="isDisabled"
421
432
  :clearable="!isDisabled"
422
433
  :rules="$rules.objectRequired"
423
434
  append-inner-icon="mdi mdi-chevron-right"
424
- @append="openPanel($t('form.signOfIPDL'), $dataStore.ipdl, 'signOfIPDL')"
425
- ></base-panel-input>
435
+ @append="openPanel($dataStore.t('form.signOfIPDL'), $dataStore.ipdl, 'signOfIPDL')"
436
+ />
426
437
  <base-panel-input
427
438
  v-model="member.countryOfCitizenship"
428
439
  :value="member.countryOfCitizenship.nameRu"
429
- :label="$t('form.countryOfCitizenship')"
440
+ :label="$dataStore.t('form.countryOfCitizenship')"
430
441
  :readonly="isDisabled"
431
442
  :clearable="!isDisabled"
432
443
  :rules="$rules.objectRequired"
433
444
  append-inner-icon="mdi mdi-chevron-right"
434
- @append="openPanel($t('form.countryOfCitizenship'), [], 'countryOfCitizenship', $dataStore.getCitizenshipCountries)"
435
- ></base-panel-input>
445
+ @append="openPanel($dataStore.t('form.countryOfCitizenship'), [], 'countryOfCitizenship', $dataStore.getCitizenshipCountries)"
446
+ />
436
447
  <base-panel-input
437
448
  v-model="member.economySectorCode"
438
449
  :value="member.economySectorCode.nameRu"
439
- :label="$t('form.economySectorCode')"
450
+ :label="$dataStore.t('form.economySectorCode')"
440
451
  :readonly="isDisabled"
441
452
  :clearable="!isDisabled"
442
453
  :rules="$rules.objectRequired"
443
454
  append-inner-icon="mdi mdi-chevron-right"
444
- @append="openPanel($t('form.economySectorCode'), [], 'economySectorCode', $dataStore.getSectorCodeList)"
445
- ></base-panel-input>
455
+ @append="openPanel($dataStore.t('form.economySectorCode'), [], 'economySectorCode', $dataStore.getSectorCodeList)"
456
+ />
457
+ <base-panel-input
458
+ v-if="hasInsurancePay"
459
+ v-model="member.insurancePay"
460
+ :value="member.insurancePay.nameRu"
461
+ :readonly="isDisabled"
462
+ :clearable="!isDisabled"
463
+ :rules="$rules.objectRequired"
464
+ :label="$dataStore.t('form.insurancePay')"
465
+ append-inner-icon="mdi mdi-chevron-right"
466
+ @append="openPanel($dataStore.t('form.insurancePay'), $dataStore.insurancePay, 'insurancePay', $dataStore.getInsurancePay)"
467
+ />
446
468
  </base-form-section>
447
- <base-form-section :title="$t('form.contactsData')" v-if="$dataStore.hasContactSection(whichForm)">
469
+ <base-form-section :title="$dataStore.t('form.contactsData')" v-if="$dataStore.hasContactSection(whichForm)">
448
470
  <base-form-input
449
471
  v-model="member.homePhone"
450
472
  :maska="$maska.phone"
451
473
  placeholder="+7 7"
452
- :label="$t('form.homePhone')"
474
+ :label="$dataStore.t('form.homePhone')"
453
475
  :readonly="isDisabled"
454
476
  :clearable="!isDisabled"
455
477
  :rules="whichForm === formStore.beneficiaryFormKey ? [] : $rules.phoneFormat"
456
- ></base-form-input>
457
- <base-form-input v-model.trim="member.email" :label="$t('form.email')" :rules="$rules.email"></base-form-input>
478
+ />
479
+ <base-form-input v-model.trim="member.email" :label="$dataStore.t('form.email')" :rules="$rules.email" />
458
480
  </base-form-section>
459
481
  </v-form>
460
- <base-btn v-if="showSaveButton" :loading="isButtonLoading || isSubmittingForm" :text="$t('buttons.save')" @click="submitForm"></base-btn>
482
+ <base-btn v-if="showSaveButton" :loading="isButtonLoading || isSubmittingForm" :text="$dataStore.t('buttons.save')" @click="submitForm" />
461
483
  <Teleport v-if="isPanelOpen" to="#panel-actions">
462
484
  <div :class="[$libStyles.scrollPage]" class="flex flex-col items-center">
463
- <base-rounded-input v-model="searchQuery" :label="$t('labels.search')" class="w-full p-2" :hide-details="true"></base-rounded-input>
485
+ <base-rounded-input v-model="searchQuery" :label="$dataStore.t('labels.search')" class="w-full p-2" :hide-details="true" />
464
486
  <div v-if="panelList && isPanelLoading === false" class="w-full flex flex-col gap-2 p-2">
465
- <base-panel-select-item :text="$t('form.notChosen')" :selected="panelValue.nameRu === null" @click="pickPanelValue(new Value())"></base-panel-select-item>
487
+ <base-panel-select-item :text="$dataStore.t('form.notChosen')" :selected="panelValue.nameRu === null" @click="pickPanelValue(new Value())" />
466
488
  <base-panel-select-item
467
489
  v-for="(item, index) of panelList.filter(i => i.nameRu && (i.nameRu as string).match(new RegExp(searchQuery, 'i')))"
468
490
  :key="index"
469
491
  :text="(item.nameRu as string)"
470
492
  :selected="item.nameRu === panelValue.nameRu"
471
493
  @click="pickPanelValue(item)"
472
- ></base-panel-select-item>
494
+ />
473
495
  </div>
474
- <base-loader v-if="isPanelLoading" class="absolute mt-10" :size="50"></base-loader>
496
+ <base-loader v-if="isPanelLoading" class="absolute mt-10" :size="50" />
475
497
  </div>
476
498
  </Teleport>
477
499
  <Teleport v-if="isSearchOpen" to="#panel-actions">
478
500
  <div :class="[$libStyles.flexColNav]">
479
- <base-btn v-if="hasGBDFL" :loading="isButtonLoading" :text="$t('buttons.fromGBDFL')" @click="getContragentFromGBDFL"></base-btn>
480
- <base-btn v-if="hasInsis" :loading="isButtonLoading" :text="$t('buttons.fromInsis')" @click="getContragent"></base-btn>
481
- <base-btn v-if="hasGKB" :loading="isButtonLoading" :text="$t('buttons.fromGKB')" @click="getFamilyInfo"></base-btn>
501
+ <base-btn v-if="hasGBDFL" :loading="isButtonLoading" :text="$dataStore.t('buttons.fromGBDFL')" @click="getContragentFromGBDFL" />
502
+ <base-btn v-if="hasInsis" :loading="isButtonLoading" :text="$dataStore.t('buttons.fromInsis')" @click="getContragent" />
503
+ <base-btn v-if="hasGKB" :loading="isButtonLoading" :text="$dataStore.t('buttons.fromGKB')" @click="getFamilyInfo" />
482
504
  </div>
483
505
  </Teleport>
484
506
  <Teleport v-if="isDocumentOpen" to="#panel-actions">
485
507
  <div :class="[$libStyles.flexColNav]">
486
- <base-btn :disabled="documentLoading" :loading="documentLoading" text="Открыть" @click="getFile('view')"></base-btn>
487
- <base-btn :disabled="documentLoading" :loading="documentLoading" text="Скачать" @click="getFile('download')"></base-btn>
508
+ <base-btn :disabled="documentLoading" :loading="documentLoading" text="Открыть" @click="getFile('view')" />
509
+ <base-btn :disabled="documentLoading" :loading="documentLoading" text="Скачать" @click="getFile('download')" />
510
+ </div>
511
+ </Teleport>
512
+ <Teleport v-if="isOtpPanelOpen && !member.hasAgreement" to="#panel-actions">
513
+ <div :class="[$libStyles.flexColNav]">
514
+ <base-fade-transition>
515
+ <base-rounded-input
516
+ v-if="otpCondition && member.otpTokenId"
517
+ v-model="member.otpCode"
518
+ :label="$dataStore.t('form.otpCode')"
519
+ :maska="$maska.otp"
520
+ :append-inner-icon="hasOtp ? 'mdi-cellphone-message text-[17px]' : ''"
521
+ hide-details
522
+ @keyup.enter.prevent="hasOtp ? checkOtp() : null"
523
+ @input="onOtpCodeInput"
524
+ />
525
+ </base-fade-transition>
526
+ <base-btn v-if="!member.otpTokenId" :disabled="otpSending" :loading="otpSending" :text="$dataStore.t('buttons.sendOtp')" @click="sendOtp(false)" />
527
+ <base-btn v-if="member.otpTokenId" :disabled="otpSending" :loading="otpSending" :text="$dataStore.t('buttons.check')" @click="checkOtp()" />
488
528
  </div>
489
529
  </Teleport>
490
- <base-dialog v-model="familyDialog" :title="$t('dialog.familyMember')" actions="familyDialog">
530
+ <base-dialog v-model="familyDialog" :title="$dataStore.t('dialog.familyMember')" actions="familyDialog">
491
531
  <template #actions>
492
- <base-family-dialog :selected="selectedFamilyMember" @selectFamilyMember="selectFamilyMember" @reset="closeFamilyDialog(true)"></base-family-dialog>
532
+ <base-family-dialog :selected="selectedFamilyMember" @selectFamilyMember="selectFamilyMember" @reset="closeFamilyDialog(true)" />
493
533
  </template>
494
534
  </base-dialog>
495
535
  </section>
496
- <base-scroll-buttons @up="scrollForm('up')" @down="scrollForm('down')"></base-scroll-buttons>
536
+ <base-scroll-buttons @up="scrollForm('up')" @down="scrollForm('down')" />
497
537
  </template>
498
538
 
499
539
  <script lang="ts">
500
- import { LocationQueryValue } from 'vue-router';
501
- import { Value, DocumentItem } from '@/composables/classes';
540
+ import { Value, DocumentItem, Member } from '../../composables/classes';
502
541
  import { uuid } from 'vue-uuid';
542
+ import { StoreMembers } from '../../types/enum';
503
543
 
504
544
  export default {
505
545
  setup() {
@@ -509,18 +549,22 @@ export default {
509
549
  const dataStore = useDataStore();
510
550
  const formStore = useFormStore();
511
551
  const memberStore = useMemberStore();
512
- const getMember = (whichForm: LocationQueryValue | LocationQueryValue[], whichIndex?: LocationQueryValue | LocationQueryValue[]) =>
513
- memberStore.getMemberFromStore(whichForm as MemberKeys, Number((whichIndex ? whichIndex : '0') as string))!;
514
- const member = ref(getMember(route.query.tab, route.query.i));
552
+ const whichForm = computed(() => route.query.tab as keyof typeof StoreMembers);
553
+ const whichIndex = computed(() => route.query.i as string);
554
+ const getMember = (whichForm: keyof typeof StoreMembers, whichIndex?: string) => memberStore.getMemberFromStore(whichForm, Number((whichIndex ? whichIndex : '0') as string))!;
555
+ const member = ref(getMember(whichForm.value, whichIndex.value));
515
556
  const selectedFamilyMember = ref<BirthInfoGKB>({});
516
557
  const isPanelOpen = ref<boolean>(false);
517
558
  const memberDocument = ref<DocumentItem>();
518
559
  const isButtonLoading = ref<boolean>(false);
519
560
  const isSubmittingForm = ref<boolean>(false);
520
561
  const documentLoading = ref<boolean>(false);
562
+ const otpSending = ref<boolean>(false);
521
563
  const isSearchOpen = ref<boolean>(false);
522
564
  const isDocumentOpen = ref<boolean>(false);
565
+ const isOtpPanelOpen = ref<boolean>(false);
523
566
  const isPanelLoading = ref<boolean>(false);
567
+ const isChangingMember = ref<boolean>(false);
524
568
  const familyDialog = ref<boolean>(false);
525
569
  const sameAddress = ref<boolean>(false);
526
570
  const panelValue = ref<Value>(new Value());
@@ -529,12 +573,11 @@ export default {
529
573
  const searchQuery = ref<string>('');
530
574
  const fileData = ref<{ file: any }>();
531
575
 
532
- const whichForm = computed(() => route.query.tab);
533
- const whichIndex = computed(() => route.query.i);
576
+ const memberSetting = computed(() => dataStore.members[memberStore.getMemberApplicationCode(whichForm.value)!]);
534
577
  const hasOtp = computed(() => member.value.otpCode && member.value.otpCode.length === useMask().otp.length);
535
- const isDisabled = computed(() => !memberStore.isStatementEditible(whichForm.value as string));
578
+ const isDisabled = computed(() => !memberStore.isStatementEditible(whichForm.value));
536
579
  const isTask = computed(() => route.params.taskId === '0' || dataStore.isTask());
537
- const isIinPhoneDisabled = computed(() => formStore.applicationData && 'regNumber' in formStore.applicationData && whichForm.value === formStore.policyholderFormKey);
580
+ const isIinPhoneDisabled = computed(() => member.value.hasAgreement);
538
581
  const isFromGBD = computed(() => !!member.value.gosPersonData);
539
582
  const showSaveButton = computed(() => {
540
583
  const generalCondition = !isDisabled.value && !!isTask.value && !!dataStore.isInitiator();
@@ -554,14 +597,39 @@ export default {
554
597
  return generalCondition && perMemberCondtion();
555
598
  });
556
599
 
557
- const hasGBDFL = computed(() => dataStore.controls.hasGBDFL && !hasGKB.value);
600
+ const hasGBDFL = computed(() => {
601
+ const perMemberCondition = () => {
602
+ switch (whichForm.value) {
603
+ case formStore.beneficiaryFormKey: {
604
+ if (dataStore.isKazyna || dataStore.isLiferenta) {
605
+ return !!member.value.iin;
606
+ }
607
+ if (dataStore.isBolashak || dataStore.isGons) {
608
+ return false;
609
+ }
610
+ return true;
611
+ }
612
+ case formStore.insuredFormKey:
613
+ case formStore.beneficiaryFormKey:
614
+ case formStore.beneficialOwnerFormKey:
615
+ case formStore.policyholdersRepresentativeFormKey:
616
+ return true;
617
+ default:
618
+ return true;
619
+ }
620
+ };
621
+ return dataStore.controls.hasGBDFL && perMemberCondition();
622
+ });
558
623
  const hasInsis = computed(() => dataStore.controls.hasInsis);
559
624
  const hasGKB = computed(() => {
560
- const byProductCondition = dataStore.isGons || dataStore.isBolashak;
561
625
  const perMemberCondition = () => {
562
626
  switch (whichForm.value) {
563
- case formStore.beneficiaryFormKey:
627
+ case formStore.beneficiaryFormKey: {
628
+ if (dataStore.isKazyna || dataStore.isLiferenta) {
629
+ return !member.value.iin;
630
+ }
564
631
  return member.value.id === 0;
632
+ }
565
633
  case formStore.policyholderFormKey:
566
634
  case formStore.insuredFormKey:
567
635
  case formStore.beneficialOwnerFormKey:
@@ -571,56 +639,91 @@ export default {
571
639
  return false;
572
640
  }
573
641
  };
574
- return dataStore.controls.hasGKB && !!dataStore.isTask() && byProductCondition && perMemberCondition();
642
+ return dataStore.controls.hasGKB && !!dataStore.isTask() && perMemberCondition();
575
643
  });
576
644
 
645
+ const hasFamilyStatus = computed(() => {
646
+ if (whichForm.value === formStore.beneficiaryFormKey) {
647
+ if (dataStore.isBolashak) {
648
+ return false;
649
+ }
650
+ }
651
+ return true;
652
+ });
653
+ const hasInsurancePay = computed(() => {
654
+ if (whichForm.value === formStore.beneficiaryFormKey) {
655
+ if (dataStore.isBolashak || dataStore.isLiferenta) {
656
+ return true;
657
+ }
658
+ }
659
+ return false;
660
+ });
661
+ const hasSignOfIPDL = computed(() => {
662
+ if (dataStore.isGons) {
663
+ return false;
664
+ }
665
+ return true;
666
+ });
667
+ const hasSameAddressToggle = computed(() => whichForm.value === formStore.beneficiaryFormKey && member.value.iin !== formStore.policyholderForm.iin);
668
+
669
+ const birthDateRule = computed(() => {
670
+ const baseDateRule = dataStore.rules.required.concat(dataStore.rules.birthDate);
671
+ const byMemverAndProductRule = () => {
672
+ if (whichForm.value === formStore.policyholderFormKey) {
673
+ if (dataStore.isGons || dataStore.isBolashak || dataStore.isBaiterek) {
674
+ return dataStore.rules.age18ByDate;
675
+ }
676
+ }
677
+ if (whichForm.value === formStore.insuredFormKey) {
678
+ if (dataStore.isBolashak || dataStore.isBaiterek) {
679
+ return dataStore.rules.age18ByDate;
680
+ }
681
+ }
682
+ return [];
683
+ };
684
+ return baseDateRule.concat(byMemverAndProductRule());
685
+ });
577
686
  const ageRule = computed(() => {
578
- const baseAgeRule = dataStore.rules.required.concat(dataStore.rules.numbers);
687
+ const baseAgeRule = dataStore.rules.numbers;
579
688
  const byMemberAndProductRule = () => {
580
- switch (whichForm.value) {
581
- case formStore.policyholderFormKey: {
582
- if (dataStore.isGons || dataStore.isBolashak) {
583
- return dataStore.rules.policyholderAgeLimit;
584
- }
689
+ if (whichForm.value === formStore.policyholderFormKey) {
690
+ if (dataStore.isGons || dataStore.isBolashak || dataStore.isBaiterek) {
691
+ return dataStore.rules.age18;
585
692
  }
586
- case formStore.beneficiaryFormKey: {
587
- if (dataStore.isBolashak) {
588
- return dataStore.rules.beneficiaryAgeLimit;
589
- }
693
+ }
694
+ if (whichForm.value === formStore.beneficiaryFormKey) {
695
+ if (dataStore.isBolashak) {
696
+ return dataStore.rules.beneficiaryAgeLimit;
697
+ }
698
+ }
699
+ if (whichForm.value === formStore.insuredFormKey) {
700
+ if (dataStore.isBaiterek || dataStore.isBolashak) {
701
+ return dataStore.rules.age18;
590
702
  }
591
- default:
592
- return [];
593
703
  }
704
+ return [];
594
705
  };
595
706
  return baseAgeRule.concat(byMemberAndProductRule());
596
707
  });
597
708
 
598
709
  const phoneRule = computed(() => {
599
710
  const basePhoneRule = dataStore.rules.required.concat(dataStore.rules.phoneFormat);
600
- const byMemberAndProductRule = () => {
601
- switch (whichForm.value) {
602
- case formStore.beneficiaryFormKey: {
603
- if (dataStore.isGons || dataStore.isBolashak) {
604
- return [];
605
- }
606
- }
607
- default:
608
- return basePhoneRule;
711
+ if (whichForm.value === formStore.beneficiaryFormKey) {
712
+ if (dataStore.isGons || dataStore.isBolashak) {
713
+ return [];
609
714
  }
610
- };
611
- return byMemberAndProductRule();
715
+ }
716
+ return basePhoneRule;
612
717
  });
613
718
 
614
719
  const residencyRule = computed(() => {
615
- switch (whichForm.value) {
616
- case formStore.policyholderFormKey: {
617
- if (dataStore.isBolashak || dataStore.isBaiterek) {
618
- return dataStore.rules.objectRequired.concat(dataStore.rules.noResident);
619
- }
720
+ const baseResidencyRule = dataStore.rules.objectRequired;
721
+ if (whichForm.value === formStore.policyholderFormKey) {
722
+ if (dataStore.isBolashak || dataStore.isBaiterek) {
723
+ return baseResidencyRule.concat(dataStore.rules.noResident);
620
724
  }
621
- default:
622
- return dataStore.rules.objectRequired;
623
725
  }
726
+ return baseResidencyRule;
624
727
  });
625
728
 
626
729
  const getOtpConditionByMember = () => {
@@ -644,10 +747,11 @@ export default {
644
747
  const searchMember = async () => {
645
748
  if (!isDisabled.value) {
646
749
  dataStore.panelAction = null;
647
- dataStore.panel.title = 'Поиск клиента';
750
+ dataStore.panel.title = 'Поиск контрагента';
648
751
  dataStore.panel.open = true;
649
752
  isSearchOpen.value = true;
650
753
  isDocumentOpen.value = false;
754
+ isOtpPanelOpen.value = false;
651
755
  isPanelOpen.value = false;
652
756
  } else {
653
757
  dataStore.showToaster('error', dataStore.t('toaster.viewErrorText'));
@@ -658,13 +762,21 @@ export default {
658
762
  vForm.value.scrollTo({ top: direction === 'up' ? 0 : screen.height * 10, behavior: 'smooth' });
659
763
  };
660
764
 
661
- const openCustomPanel = (type: 'document' = 'document') => {
765
+ const openCustomPanel = (type: 'document' | 'otp' = 'document') => {
662
766
  dataStore.panelAction = null;
663
767
  if (type === 'document' && memberDocument.value) {
664
768
  dataStore.panel.title = memberDocument.value.fileTypeName!;
665
769
  isDocumentOpen.value = true;
666
770
  isSearchOpen.value = false;
667
771
  isPanelOpen.value = false;
772
+ isOtpPanelOpen.value = false;
773
+ }
774
+ if (type === 'otp') {
775
+ dataStore.panel.title = dataStore.t('form.otpCode');
776
+ isOtpPanelOpen.value = true;
777
+ isDocumentOpen.value = false;
778
+ isSearchOpen.value = false;
779
+ isPanelOpen.value = false;
668
780
  }
669
781
  dataStore.panel.open = true;
670
782
  };
@@ -673,6 +785,7 @@ export default {
673
785
  if (!isDisabled.value) {
674
786
  isSearchOpen.value = false;
675
787
  isDocumentOpen.value = false;
788
+ isOtpPanelOpen.value = false;
676
789
  // Feature
677
790
  // const notAllowedToChange = ['gender', 'documentType', 'documentIssuers'];
678
791
  // if (member.value.gotFromInsis === false && notAllowedToChange.includes(key)) {
@@ -726,55 +839,6 @@ export default {
726
839
  }
727
840
  };
728
841
 
729
- const setAddress = () => {
730
- const beneficiary = formStore.beneficiaryForm[Number(whichIndex.value)];
731
- const policyholder = formStore.policyholderForm;
732
- if (sameAddress.value === true) {
733
- beneficiary.registrationCity = policyholder.registrationCity;
734
- beneficiary.registrationCountry = policyholder.registrationCountry;
735
- beneficiary.birthPlace = policyholder.birthPlace;
736
- beneficiary.registrationMicroDistrict = policyholder.registrationMicroDistrict;
737
- beneficiary.registrationNumberApartment = policyholder.registrationNumberApartment;
738
- beneficiary.registrationNumberApartment = policyholder.registrationNumberApartment;
739
- beneficiary.registrationNumberHouse = policyholder.registrationNumberHouse;
740
- beneficiary.registrationProvince = policyholder.registrationProvince;
741
- beneficiary.registrationQuarter = policyholder.registrationQuarter;
742
- beneficiary.registrationRegion = policyholder.registrationRegion;
743
- beneficiary.registrationRegionType = policyholder.registrationRegionType;
744
- beneficiary.registrationStreet = policyholder.registrationStreet;
745
- } else {
746
- if (beneficiary.id === 0) {
747
- beneficiary.registrationCity = new Value();
748
- beneficiary.registrationCountry = new Value();
749
- beneficiary.registrationMicroDistrict = '';
750
- beneficiary.registrationNumberApartment = '';
751
- beneficiary.registrationNumberApartment = '';
752
- beneficiary.registrationNumberHouse = '';
753
- beneficiary.registrationProvince = new Value();
754
- beneficiary.registrationQuarter = '';
755
- beneficiary.registrationRegion = new Value();
756
- beneficiary.registrationRegionType = new Value();
757
- beneficiary.registrationStreet = '';
758
- } else {
759
- const country = dataStore.countries.find(i => (i.nameRu as string).match(new RegExp(beneficiary.response?.addresses[0].countryName, 'i')));
760
- const city = dataStore.cities.find(i => i.nameRu === beneficiary.response?.addresses[0].cityName.replace('г.', ''));
761
- const province = dataStore.states.find(i => i.ids === beneficiary.response?.addresses[0].stateCode);
762
- const localityType = dataStore.localityTypes.find(i => i.nameRu === beneficiary.response?.addresses[0].cityTypeName);
763
- const region = dataStore.regions.find(i => i.ids == beneficiary.response?.addresses[0].regionCode);
764
- beneficiary.registrationCountry = country ?? new Value();
765
- beneficiary.registrationCity = city ?? new Value();
766
- beneficiary.registrationMicroDistrict = beneficiary.response?.addresses[0].microRaion ?? '';
767
- beneficiary.registrationNumberApartment = beneficiary.response?.addresses[0].apartmentNumber ?? '';
768
- beneficiary.registrationNumberHouse = beneficiary.response?.addresses[0].blockNumber ?? '';
769
- beneficiary.registrationProvince = province ?? new Value();
770
- beneficiary.registrationQuarter = beneficiary.response?.addresses[0].kvartal ?? '';
771
- beneficiary.registrationRegion = region ?? new Value();
772
- beneficiary.registrationRegionType = localityType ?? new Value();
773
- beneficiary.registrationStreet = beneficiary.response?.addresses[0].streetName ?? '';
774
- }
775
- }
776
- };
777
-
778
842
  const uploadFile = async (processInstanceId: string | number) => {
779
843
  const selectedDocument = dataStore.dicFileTypeList.find((i: Value) => i.nameRu === member.value.documentType.nameRu);
780
844
  const formData = new FormData();
@@ -818,6 +882,7 @@ export default {
818
882
  };
819
883
 
820
884
  const getFamilyInfo = async () => {
885
+ if (!formStore.policyholderForm.iin || !formStore.policyholderForm.phoneNumber) return;
821
886
  if (formStore.birthInfos.length === 0) {
822
887
  isButtonLoading.value = true;
823
888
  await dataStore.getFamilyInfo(formStore.policyholderForm.iin, formStore.policyholderForm.phoneNumber);
@@ -859,7 +924,7 @@ export default {
859
924
  };
860
925
 
861
926
  const getContragentFromGBDFL = async () => {
862
- if (member.value.hasAgreement === false) {
927
+ if (member.value.hasAgreement !== true) {
863
928
  dataStore.showToaster('error', dataStore.t('toaster.needAgreement'), 3000);
864
929
  dataStore.panel.open = false;
865
930
  isSearchOpen.value = false;
@@ -872,15 +937,19 @@ export default {
872
937
  return;
873
938
  }
874
939
  isButtonLoading.value = true;
875
- await dataStore.getContragentFromGBDFL(member.value);
876
- member.value.gotFromInsis = true;
940
+ const response = await dataStore.getContragentFromGBDFL(member.value);
941
+ if (typeof response === 'boolean') {
942
+ if (response === true) {
943
+ member.value.gotFromInsis = true;
944
+ }
945
+ dataStore.panel.open = false;
946
+ isSearchOpen.value = false;
947
+ }
877
948
  isButtonLoading.value = false;
878
- dataStore.panel.open = false;
879
- isSearchOpen.value = false;
880
949
  };
881
950
 
882
951
  const getContragent = async () => {
883
- if (member.value.hasAgreement === false) {
952
+ if (member.value.hasAgreement !== true) {
884
953
  dataStore.showToaster('error', dataStore.t('toaster.needAgreement'), 3000);
885
954
  dataStore.panel.open = false;
886
955
  isSearchOpen.value = false;
@@ -900,18 +969,18 @@ export default {
900
969
  };
901
970
 
902
971
  const validateESBD = async (docTypeNumber: number) => {
903
- const data = {
972
+ const data: ESBDValidationType = {
904
973
  personType: 1,
905
974
  iin: member.value.iin!.replaceAll('-', ''),
906
- lastName: member.value.lastName,
907
- firstName: member.value.firstName,
908
- middleName: member.value.middleName,
909
- birthDate: member.value.getDateByKey('birthDate'),
910
- sex: member.value.gender.id,
975
+ lastName: member.value.lastName ?? '',
976
+ firstName: member.value.firstName ?? '',
977
+ middleName: member.value.middleName ?? '',
978
+ birthDate: member.value.getDateByKey('birthDate') ?? '',
979
+ sex: Number(member.value.gender.id),
911
980
  docType: docTypeNumber,
912
- docNumber: member.value.documentNumber,
913
- docIssuedDate: member.value.getDateByKey('documentDate'),
914
- docIssuedBy: member.value.documentIssuers.nameRu,
981
+ docNumber: member.value.documentNumber ?? '',
982
+ docIssuedDate: member.value.getDateByKey('documentDate') ?? '',
983
+ docIssuedBy: member.value.documentIssuers.nameRu ?? '',
915
984
  activityKindId: 0,
916
985
  economicsSectorId: Number((member.value.economySectorCode.ids! as string).at(-1)),
917
986
  resident: member.value.signOfResidency.ids === '500011.2' || member.value.signOfResidency.ids === null ? 0 : 1,
@@ -921,18 +990,20 @@ export default {
921
990
  };
922
991
 
923
992
  const saveMember = async () => {
924
- const hasSaved = await dataStore.saveContragent(member.value, whichForm.value, whichIndex.value, true);
993
+ const hasSaved = await dataStore.saveContragent(member.value, whichForm.value, whichIndex.value ? Number(whichIndex.value) : null, true);
925
994
  if (hasSaved === false) {
926
995
  dataStore.isLoading = false;
927
996
  return false;
928
997
  }
929
998
  const isInsured = formStore.isPolicyholderInsured;
999
+ const remoteIsInsured = ref<boolean | null>(null);
930
1000
  if (whichForm.value == formStore.policyholderFormKey) {
931
1001
  if (route.params.taskId === '0') {
932
1002
  try {
933
1003
  const taskId = await dataStore.startApplication(member.value);
934
- if (taskId) {
1004
+ if (typeof taskId === 'string') {
935
1005
  await dataStore.getApplicationData(taskId, false, false, false, false);
1006
+ remoteIsInsured.value = formStore.applicationData.clientApp.isInsured;
936
1007
  await router.replace({
937
1008
  name: route.name!,
938
1009
  params: { taskId: taskId as string },
@@ -954,23 +1025,33 @@ export default {
954
1025
  await uploadFile(formStore.applicationData.processInstanceId);
955
1026
  }
956
1027
  }
957
- const memberFromApplicaiton = memberStore.getMemberFromApplication(whichForm.value as MemberKeys, whichIndex.value ? Number(whichIndex.value) : undefined);
958
- const isSaved = await dataStore.saveMember(member.value, memberStore.getMemberCode(whichForm.value as MemberKeys), memberFromApplicaiton);
1028
+ const memberFromApplicaiton = memberStore.getMemberFromApplication(whichForm.value, whichIndex.value ? Number(whichIndex.value) : undefined);
1029
+ if (typeof member.value.id !== 'number' || (typeof member.value.id === 'number' && member.value.id > 0 === false)) {
1030
+ return false;
1031
+ }
1032
+ const wasInsuredAction = ref<boolean>(false);
1033
+ const isSaved = await dataStore.saveMember(member.value, memberStore.getMemberCode(whichForm.value)!, memberFromApplicaiton);
959
1034
  if (!isSaved) return false;
960
- if (whichForm.value === formStore.policyholderFormKey && isInsured === true) {
961
- formStore.insuredForm[0] = formStore.policyholderForm;
962
- const isInsuredSaved = await dataStore.saveMember(
963
- member.value,
964
- memberStore.getMemberCode(formStore.insuredFormKey as MemberKeys),
965
- memberStore.getMemberFromApplication(formStore.insuredFormKey as MemberKeys, formStore.insuredFormIndex),
966
- );
967
- if (!isInsuredSaved) return false;
1035
+ if (whichForm.value === formStore.policyholderFormKey) {
1036
+ 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;
1045
+ }
1046
+ }
1047
+ if (whichForm.value === formStore.insuredFormKey) {
1048
+ wasInsuredAction.value = true;
968
1049
  }
969
1050
  await router.replace({
970
1051
  name: route.name!,
971
1052
  query: { ...route.query, id: member.value.id },
972
1053
  });
973
- await dataStore.getApplicationData(route.params.taskId, false, false, false, false);
1054
+ await dataStore.getApplicationData(route.params.taskId as string, false, false, true, wasInsuredAction.value);
974
1055
  if (dataStore.controls.hasCalculator) {
975
1056
  if (formStore.additionalInsuranceTermsWithout && formStore.additionalInsuranceTermsWithout.length !== 0) {
976
1057
  formStore.additionalInsuranceTerms.forEach((term: any) => {
@@ -994,7 +1075,7 @@ export default {
994
1075
  return true;
995
1076
  }
996
1077
  }
997
- if (member.value.hasAgreement === false) {
1078
+ if (member.value.hasAgreement !== true) {
998
1079
  dataStore.showToaster('error', dataStore.t('toaster.needAgreement'));
999
1080
  return false;
1000
1081
  }
@@ -1058,71 +1139,130 @@ export default {
1058
1139
  dataStore.showToaster('error', dataStore.t('toaster.errorFormField', { text: dataStore.t('form.otpCode') }), 3000);
1059
1140
  return;
1060
1141
  }
1142
+ otpSending.value = true;
1061
1143
  const checked = await memberStore.checkOtp(member.value);
1062
1144
  if (typeof checked !== 'undefined') {
1063
1145
  member.value.hasAgreement = checked;
1064
1146
  }
1147
+ otpSending.value = false;
1148
+ if (checked === true) {
1149
+ dataStore.panel.open = false;
1150
+ }
1065
1151
  };
1066
1152
 
1067
1153
  const sendOtp = async (onInit = false) => {
1154
+ otpSending.value = true;
1068
1155
  const response = await memberStore.sendOtp(member.value, formStore.applicationData.processInstanceId, onInit);
1069
1156
  if (response) {
1070
1157
  if (member.value.hasAgreement === null) member.value.hasAgreement = response.otpStatus;
1158
+ if (response.otpStatus === true) {
1159
+ dataStore.panel.open = false;
1160
+ }
1071
1161
  }
1162
+ otpSending.value = false;
1072
1163
  };
1073
1164
 
1074
- const onInit = async () => {
1075
- if (route.params.taskId === '0' || (route.params.taskId !== '0' && dataStore.isProcessEditable(formStore.applicationData.statusCode))) {
1076
- await dataStore.getSignedDocList(formStore.applicationData.processInstanceId);
1165
+ const setDefaultValues = async () => {
1166
+ const setDefaults = dataStore.controls.setDefaults;
1167
+ if (setDefaults.sectorCode) {
1168
+ await setSectorCode();
1169
+ }
1170
+ if (setDefaults.percentage) {
1171
+ setPercentage();
1172
+ }
1173
+ };
1174
+
1175
+ const setSectorCode = async () => {
1176
+ if (member.value.id === 0 && route.query.id === '0') {
1177
+ const sectorList = await dataStore.getSectorCodeList();
1178
+ const defaultValue = sectorList.find(item => item.ids === '500003.9') as Value;
1179
+ member.value.economySectorCode = defaultValue ? defaultValue : new Value();
1180
+ }
1181
+ };
1182
+
1183
+ const setPercentage = () => {
1184
+ if (whichForm.value === formStore.beneficiaryFormKey && member.value.id === 0 && route.query.id === '0' && member.value.percentageOfPayoutAmount === null) {
1185
+ if (dataStore.members.beneficiaryApp.isMultiple) {
1186
+ const availablePercentage =
1187
+ 100 -
1188
+ formStore.beneficiaryForm.reduce((sum: number, member: Member) => {
1189
+ return sum + Number(member.percentageOfPayoutAmount);
1190
+ }, 0);
1191
+ if (availablePercentage >= 0 && availablePercentage <= 100) member.value.percentageOfPayoutAmount = availablePercentage;
1192
+ } else {
1193
+ member.value.percentageOfPayoutAmount = 100;
1194
+ }
1077
1195
  }
1196
+ };
1197
+
1198
+ const selectMember = async (index: number, update?: boolean) => {
1199
+ dataStore.panel.open = false;
1200
+ isButtonLoading.value = true;
1201
+ isChangingMember.value = true;
1202
+ //@ts-ignore
1203
+ await router.replace({ query: { ...route.query, i: index, id: getMember(route.query.tab, index).id, upd: update } });
1204
+ isChangingMember.value = false;
1205
+ isButtonLoading.value = false;
1206
+ };
1207
+
1208
+ const deleteMember = async (index: number) => {
1209
+ await memberStore.deleteMember(route.params.taskId as string, whichForm.value, index);
1210
+ const currentIndex = Number(whichIndex.value);
1211
+ if (index <= currentIndex) {
1212
+ const newIndex = ref<number>(currentIndex - 1 > 0 ? currentIndex - 1 : 0);
1213
+ await selectMember(newIndex.value, index === currentIndex ? true : undefined);
1214
+ }
1215
+ };
1216
+
1217
+ const onInit = async () => {
1218
+ // if (route.params.taskId === '0' || (route.params.taskId !== '0' && dataStore.isProcessEditable(formStore.applicationData.statusCode))) {
1219
+ // await dataStore.getSignedDocList(formStore.applicationData.processInstanceId);
1220
+ // }
1078
1221
  if (getOtpConditionByMember()) {
1079
1222
  await sendOtp(true);
1080
1223
  } else {
1081
1224
  if (member.value.hasAgreement === null) member.value.hasAgreement = true;
1082
1225
  }
1083
- if (route.query.id !== '0' && !member.value.id) {
1084
- await dataStore.getContragentById(route.query.id, whichForm.value, true);
1085
- }
1086
- if (member.value.id && route.query.id === '0') {
1087
- await router.replace({
1088
- name: route.name!,
1089
- query: { ...route.query, id: member.value.id },
1090
- });
1091
- }
1092
- if (member.value.id) {
1093
- const filteredDocuments: DocumentItem[] = dataStore.getFilesByIIN(member.value.iin!.replace(/-/g, '')) as DocumentItem[];
1094
- if (filteredDocuments && filteredDocuments.length) memberDocument.value = filteredDocuments[0];
1226
+ if (!member.value.id) {
1227
+ await router.replace({ query: { ...route.query, id: 0 } });
1228
+ } else {
1229
+ if (route.query.id !== String(member.value.id)) await router.replace({ query: { ...route.query, id: member.value.id } });
1230
+ // const filteredDocuments: DocumentItem[] = dataStore.getFilesByIIN(member.value.iin!.replace(/-/g, '')) as DocumentItem[];
1231
+ // if (filteredDocuments && filteredDocuments.length) memberDocument.value = filteredDocuments[0];
1095
1232
  }
1233
+ await setDefaultValues();
1096
1234
  };
1097
1235
 
1098
1236
  onMounted(async () => {
1099
1237
  await onInit();
1100
1238
  });
1101
1239
 
1102
- onBeforeRouteUpdate(to => {
1103
- if ('tab' in to.query && to.query.tab !== 'productConditions') {
1104
- member.value = getMember(to.query.tab, to.query.i);
1105
- }
1106
- });
1107
-
1108
1240
  watch(
1109
1241
  () => sameAddress.value,
1110
1242
  () => {
1111
- if (whichForm.value === formStore.beneficiaryFormKey) setAddress();
1243
+ if (whichForm.value === formStore.beneficiaryFormKey) setAddressBeneficiary(Number(whichIndex.value), sameAddress.value);
1112
1244
  },
1113
1245
  );
1114
1246
 
1115
1247
  watch(
1116
1248
  () => member.value.percentageOfPayoutAmount,
1117
1249
  val => {
1118
- const percentage = typeof val === 'string' ? Number(val) : val;
1119
- if (percentage) {
1120
- if (percentage < 0) {
1121
- member.value.percentageOfPayoutAmount = 0;
1122
- dataStore.showToaster('error', dataStore.t('toaster.incorrectInput'), 1000);
1123
- } else if (percentage > 100) {
1124
- member.value.percentageOfPayoutAmount = 100;
1125
- dataStore.showToaster('error', dataStore.t('toaster.incorrectInput'), 1000);
1250
+ if (whichForm.value === formStore.beneficiaryFormKey && !isDisabled.value) {
1251
+ const percentage = typeof val === 'string' ? Number(val) : val;
1252
+ if (typeof percentage === 'number') {
1253
+ if (memberSetting.value.isMultiple) {
1254
+ if (percentage < 0) {
1255
+ member.value.percentageOfPayoutAmount = 0;
1256
+ dataStore.showToaster('error', dataStore.t('toaster.incorrectInput'), 1000);
1257
+ } else if (percentage > 100) {
1258
+ member.value.percentageOfPayoutAmount = 100;
1259
+ dataStore.showToaster('error', dataStore.t('toaster.incorrectInput'), 1000);
1260
+ }
1261
+ } else {
1262
+ if (member.value.percentageOfPayoutAmount !== 100) {
1263
+ member.value.percentageOfPayoutAmount = 100;
1264
+ }
1265
+ }
1126
1266
  }
1127
1267
  }
1128
1268
  },
@@ -1138,14 +1278,21 @@ export default {
1138
1278
  },
1139
1279
  );
1140
1280
 
1141
- watch(
1142
- () => member.value.otpCode,
1143
- async () => {
1144
- if (member.value.otpCode && member.value.otpCode.length === useMask().otp.length) {
1145
- await checkOtp();
1281
+ const onIinInput = () => {
1282
+ if (!!member.value.iin && member.value.iin.length === useMask().iin.length && memberSetting.value.isMultiple === true) {
1283
+ const alreadyInStatement = formStore[whichForm.value as MultipleMember].findIndex((i: Member) => i.iin === member.value.iin);
1284
+ if (alreadyInStatement !== -1 && alreadyInStatement !== Number(whichIndex.value)) {
1285
+ dataStore.showToaster('error', dataStore.t('toaster.hasAlreadyMember'), 3000);
1286
+ member.value.iin = null;
1146
1287
  }
1147
- },
1148
- );
1288
+ }
1289
+ };
1290
+
1291
+ const onOtpCodeInput = async () => {
1292
+ if (member.value.otpCode && member.value.otpCode.length === useMask().otp.length) {
1293
+ await checkOtp();
1294
+ }
1295
+ };
1149
1296
 
1150
1297
  watch(
1151
1298
  () => dataStore.panel.open,
@@ -1154,6 +1301,7 @@ export default {
1154
1301
  isPanelOpen.value = false;
1155
1302
  isDocumentOpen.value = false;
1156
1303
  isSearchOpen.value = false;
1304
+ isOtpPanelOpen.value = false;
1157
1305
  dataStore.panelAction = null;
1158
1306
  }
1159
1307
  },
@@ -1175,10 +1323,12 @@ export default {
1175
1323
  isPanelOpen,
1176
1324
  isSearchOpen,
1177
1325
  isDocumentOpen,
1326
+ isOtpPanelOpen,
1178
1327
  isPanelLoading,
1179
1328
  isButtonLoading,
1180
1329
  isSubmittingForm,
1181
1330
  documentLoading,
1331
+ otpSending,
1182
1332
  panelValue,
1183
1333
  panelList,
1184
1334
  searchQuery,
@@ -1191,6 +1341,7 @@ export default {
1191
1341
  // Computed
1192
1342
  whichForm,
1193
1343
  whichIndex,
1344
+ memberSetting,
1194
1345
  otpCondition,
1195
1346
  hasOtp,
1196
1347
  isDisabled,
@@ -1201,11 +1352,16 @@ export default {
1201
1352
  hasGBDFL,
1202
1353
  hasInsis,
1203
1354
  hasGKB,
1355
+ hasFamilyStatus,
1356
+ hasInsurancePay,
1357
+ hasSignOfIPDL,
1358
+ hasSameAddressToggle,
1204
1359
 
1205
1360
  // Rules
1206
1361
  ageRule,
1207
1362
  phoneRule,
1208
1363
  residencyRule,
1364
+ birthDateRule,
1209
1365
 
1210
1366
  // Functions
1211
1367
  searchMember,
@@ -1223,6 +1379,10 @@ export default {
1223
1379
  selectFamilyMember,
1224
1380
  closeFamilyDialog,
1225
1381
  scrollForm,
1382
+ onIinInput,
1383
+ onOtpCodeInput,
1384
+ deleteMember,
1385
+ selectMember,
1226
1386
  };
1227
1387
  },
1228
1388
  };