hl-core 0.0.7-beta.15 → 0.0.7-beta.16

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.
@@ -1,11 +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-[75vh] md:max-h-[77vh] overflow-y-scroll">
3
+ <v-form v-if="member" ref="vForm" @submit="submitForm" class="max-h-[82svh] overflow-y-scroll">
4
4
  <base-form-section :title="$t('form.personalData')">
5
5
  <base-form-input
6
6
  v-model="member.iin"
7
7
  :label="$t('form.iin')"
8
8
  maska="###-###-###-###"
9
+ :readonly="isDisabled || isIinPhoneDisabled"
10
+ :clearable="!isDisabled"
9
11
  append-inner-icon="mdi mdi-magnify"
10
12
  @append="searchMember"
11
13
  :rules="$rules.required.concat($rules.iinRight)"
@@ -14,23 +16,65 @@
14
16
  v-model="member.phoneNumber"
15
17
  :label="$t('form.phoneNumber')"
16
18
  maska="+7 (7##) ### ## ##"
17
- placeholder="+7 7"
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"
18
24
  :rules="$rules.required.concat($rules.phoneFormat)"
19
25
  ></base-form-input>
20
- <base-form-input v-model="member.lastName" :label="$t('form.lastName')" :rules="$rules.required.concat($rules.cyrillic)"></base-form-input>
21
- <base-form-input v-model="member.firstName" :label="$t('form.firstName')" :rules="$rules.required.concat($rules.cyrillic)"></base-form-input>
22
- <base-form-input v-model="member.middleName" :label="$t('form.middleName')" :rules="$rules.required.concat($rules.cyrillic)"></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="# # # #"
32
+ :append-inner-icon="hasOtp ? 'mdi mdi-check' : ''"
33
+ @keyup.enter.prevent="hasOtp ? checkOtp() : null"
34
+ ></base-form-input>
35
+ </base-fade-transition>
36
+ <base-form-input
37
+ v-model="member.lastName"
38
+ :readonly="isDisabled || isFromGBD"
39
+ :clearable="!isDisabled"
40
+ :label="$t('form.lastName')"
41
+ :rules="$rules.required.concat($rules.cyrillic)"
42
+ ></base-form-input>
43
+ <base-form-input
44
+ v-model="member.firstName"
45
+ :readonly="isDisabled || isFromGBD"
46
+ :clearable="!isDisabled"
47
+ :label="$t('form.firstName')"
48
+ :rules="$rules.required.concat($rules.cyrillic)"
49
+ ></base-form-input>
50
+ <base-form-input
51
+ v-model="member.middleName"
52
+ :readonly="isDisabled || isFromGBD"
53
+ :clearable="!isDisabled"
54
+ :label="$t('form.middleName')"
55
+ :rules="$rules.required.concat($rules.cyrillic)"
56
+ ></base-form-input>
23
57
  <base-form-input
24
58
  v-model="member.birthDate"
59
+ :readonly="isDisabled || isFromGBD"
60
+ :clearable="!isDisabled"
25
61
  :label="$t('form.birthDate')"
26
62
  :rules="$rules.required.concat($rules.birthDate)"
27
63
  maska="##.##.####"
28
64
  append-inner-icon="mdi mdi-calendar-blank-outline"
29
65
  ></base-form-input>
30
- <base-form-input v-model="member.age" :label="$t('form.age')" :rules="$rules.required.concat($rules.numbers)"></base-form-input>
66
+ <base-form-input
67
+ v-model="member.age"
68
+ :label="$t('form.age')"
69
+ :readonly="isDisabled || isFromGBD"
70
+ :clearable="!isDisabled"
71
+ :rules="$rules.required.concat($rules.numbers)"
72
+ ></base-form-input>
31
73
  <base-panel-input
32
74
  v-model="member.gender"
33
75
  :value="member.gender.nameRu"
76
+ :readonly="isDisabled || isFromGBD"
77
+ :clearable="!isDisabled"
34
78
  :label="$t('form.gender')"
35
79
  :rules="$rules.objectRequired"
36
80
  append-inner-icon="mdi mdi-chevron-right"
@@ -39,72 +83,232 @@
39
83
  <base-panel-input
40
84
  v-model="member.familyStatus"
41
85
  :value="member.familyStatus.nameRu"
86
+ :readonly="isDisabled"
87
+ :clearable="!isDisabled"
42
88
  :label="$t('form.familyStatus')"
43
89
  :rules="$rules.objectRequired"
44
90
  append-inner-icon="mdi mdi-chevron-right"
45
91
  @append="openPanel($t('form.familyStatus'), [], 'familyStatus', $dataStore.getFamilyStatuses)"
46
92
  ></base-panel-input>
93
+ <base-panel-input
94
+ v-if="(whichForm === formStore.beneficiaryFormKey || whichForm === formStore.insuredFormKey) && member.iin !== formStore.policyholderForm.iin"
95
+ v-model="member.relationDegree"
96
+ :value="member.relationDegree.nameRu"
97
+ :readonly="isDisabled"
98
+ :clearable="!isDisabled"
99
+ :label="$t('form.relations')"
100
+ :rules="$rules.objectRequired"
101
+ append-inner-icon="mdi mdi-chevron-right"
102
+ @append="openPanel($t('form.relations'), [], 'relationDegree', $dataStore.getRelationTypes)"
103
+ ></base-panel-input>
104
+ <base-form-input
105
+ v-if="whichForm === formStore.beneficiaryFormKey"
106
+ v-model="member.percentageOfPayoutAmount"
107
+ :readonly="isDisabled"
108
+ :clearable="!isDisabled"
109
+ :label="$t('form.percentageOfPayoutAmount')"
110
+ :rules="$rules.required.concat($rules.numbers)"
111
+ ></base-form-input>
112
+ <base-form-toggle v-if="$dataStore.isGons" :disabled="isDisabled" :has-border="false" v-model="member.isPdl" :title="$dataStore.t('isMemberIPDL')"></base-form-toggle>
47
113
  </base-form-section>
48
- <base-form-section :title="$t('form.jobData')">
49
- <base-form-input v-model="member.job" :label="$t('form.job')" :rules="$rules.required"></base-form-input>
50
- <base-form-input v-model="member.jobPosition" :label="$t('form.jobPosition')" :rules="$rules.required"></base-form-input>
51
- <base-form-input v-model="member.jobPlace" :label="$t('form.jobPlace')" :rules="$rules.required"></base-form-input>
114
+ <base-form-section :title="$t('policyholdersRepresentative.PowerOfAttorney')" v-if="whichForm === formStore.policyholdersRepresentativeFormKey">
115
+ <base-form-input
116
+ v-model="member.fullNameRod"
117
+ :label="$t('policyholdersRepresentative.NameParentCase')"
118
+ :readonly="isDisabled"
119
+ :clearable="!isDisabled"
120
+ :rules="$rules.required"
121
+ ></base-form-input>
122
+ <base-form-input
123
+ v-model="member.confirmDocTypeKz"
124
+ :label="$t('policyholdersRepresentative.basisDocKz')"
125
+ :readonly="isDisabled"
126
+ :clearable="!isDisabled"
127
+ :rules="$rules.required"
128
+ ></base-form-input>
129
+ <base-form-input
130
+ v-model="member.confirmDocType"
131
+ :label="$t('policyholdersRepresentative.basisDocRu')"
132
+ :readonly="isDisabled"
133
+ :clearable="!isDisabled"
134
+ :rules="$rules.required"
135
+ ></base-form-input>
136
+ <base-form-input
137
+ v-model="member.confirmDocTypeRod"
138
+ :label="$t('policyholdersRepresentative.basisDocRuParentCase')"
139
+ :readonly="isDisabled"
140
+ :clearable="!isDisabled"
141
+ :rules="$rules.required"
142
+ ></base-form-input>
143
+ <base-form-input
144
+ v-model="member.confirmDocNumber"
145
+ :label="$t('policyholdersRepresentative.numberDoc')"
146
+ :readonly="isDisabled"
147
+ :clearable="!isDisabled"
148
+ :rules="$rules.required"
149
+ ></base-form-input>
150
+ <base-form-input
151
+ v-model="member.confirmDocIssueDate"
152
+ :label="$t('form.documentDate')"
153
+ :readonly="isDisabled"
154
+ :clearable="!isDisabled"
155
+ :rules="$rules.date"
156
+ maska="##.##.####"
157
+ append-inner-icon="mdi mdi-calendar-blank-outline"
158
+ ></base-form-input>
159
+ <base-form-input
160
+ v-model="member.confirmDocExpireDate"
161
+ :label="$t('form.documentExpire')"
162
+ :readonly="isDisabled"
163
+ :clearable="!isDisabled"
164
+ :rules="$rules.date"
165
+ maska="##.##.####"
166
+ append-inner-icon="mdi mdi-calendar-blank-outline"
167
+ ></base-form-input>
168
+ <base-form-input v-model="member.migrationCard" :label="$t('policyholdersRepresentative.numberVisa')"></base-form-input>
169
+ <base-form-input
170
+ v-model="member.migrationCardIssueDate"
171
+ :label="$t('form.documentDate')"
172
+ :readonly="isDisabled"
173
+ :clearable="!isDisabled"
174
+ :rules="$rules.date"
175
+ maska="##.##.####"
176
+ append-inner-icon="mdi mdi-calendar-blank-outline"
177
+ ></base-form-input>
178
+ <base-form-input
179
+ v-model="member.migrationCardExpireDate"
180
+ :label="$t('form.documentExpire')"
181
+ :readonly="isDisabled"
182
+ :clearable="!isDisabled"
183
+ :rules="$rules.date"
184
+ maska="##.##.####"
185
+ append-inner-icon="mdi mdi-calendar-blank-outline"
186
+ ></base-form-input>
187
+ <base-form-toggle
188
+ v-model="formStore.policyholdersRepresentativeForm.isNotary"
189
+ :disabled="isDisabled"
190
+ :has-border="false"
191
+ :title="$t('policyholdersRepresentative.confirmAuthority')"
192
+ ></base-form-toggle>
193
+ <base-form-input
194
+ v-model="member.notaryLongName"
195
+ :label="$t('policyholdersRepresentative.name')"
196
+ :readonly="isDisabled"
197
+ :clearable="!isDisabled"
198
+ :rules="formStore.policyholdersRepresentativeForm.isNotary ? $rules.required : []"
199
+ ></base-form-input>
200
+ <base-form-input
201
+ v-model="member.notaryLicenseNumber"
202
+ :label="$t('policyholdersRepresentative.numberLicense')"
203
+ :readonly="isDisabled"
204
+ :clearable="!isDisabled"
205
+ :rules="formStore.policyholdersRepresentativeForm.isNotary ? $rules.required : []"
206
+ ></base-form-input>
207
+ <base-form-input
208
+ v-model="member.notaryLicenseIssuer"
209
+ :label="$t('policyholdersRepresentative.documentIssuers')"
210
+ :readonly="isDisabled"
211
+ :clearable="!isDisabled"
212
+ :rules="formStore.policyholdersRepresentativeForm.isNotary ? $rules.required : []"
213
+ ></base-form-input>
214
+ <base-form-input
215
+ v-model="member.notaryLicenseDate"
216
+ :label="$t('form.documentDate')"
217
+ :readonly="isDisabled"
218
+ :clearable="!isDisabled"
219
+ :rules="formStore.policyholdersRepresentativeForm.isNotary ? $rules.required.concat($rules.date) : []"
220
+ maska="##.##.####"
221
+ append-inner-icon="mdi mdi-calendar-blank-outline"
222
+ ></base-form-input>
52
223
  </base-form-section>
53
- <base-form-section :title="$t('form.placeRegistration')">
224
+ <base-form-section :title="$t('form.jobData')" v-if="$dataStore.hasJobSection(whichForm)">
225
+ <base-form-input v-model="member.job" :label="$t('form.job')" :readonly="isDisabled" :clearable="!isDisabled" :rules="$rules.required"></base-form-input>
226
+ <base-form-input v-model="member.jobPosition" :label="$t('form.jobPosition')" :readonly="isDisabled" :clearable="!isDisabled" :rules="$rules.required"></base-form-input>
227
+ <base-form-input v-model="member.jobPlace" :label="$t('form.jobPlace')" :readonly="isDisabled" :clearable="!isDisabled" :rules="$rules.required"></base-form-input>
228
+ </base-form-section>
229
+ <base-form-section :title="$t('form.placeRegistration')" v-if="$dataStore.hasPlaceSection(whichForm)">
54
230
  <base-panel-input
55
231
  v-model="member.registrationCountry"
56
232
  :value="member.registrationCountry.nameRu"
233
+ :readonly="isDisabled"
234
+ :clearable="!isDisabled"
57
235
  :label="$t('form.Country')"
58
236
  :rules="$rules.objectRequired"
59
237
  append-inner-icon="mdi mdi-chevron-right"
60
238
  @append="openPanel($t('form.Country'), [], 'registrationCountry', $dataStore.getCountries)"
61
239
  ></base-panel-input>
62
- <div class="flex flex-col gap-[1px]" v-if="member.registrationCountry.nameRu === 'Казахстан' || member.registrationCountry.nameRu === null">
63
- <base-panel-input
64
- v-model="member.registrationProvince"
65
- :value="member.registrationProvince.nameRu"
66
- :label="$t('form.Province')"
67
- :rules="$rules.objectRequired"
68
- append-inner-icon="mdi mdi-chevron-right"
69
- @append="openPanel($t('form.Province'), [], 'registrationProvince', $dataStore.getStates, 'registrationCountry')"
70
- ></base-panel-input>
71
- <base-panel-input
72
- v-model="member.registrationRegionType"
73
- :value="member.registrationRegionType.nameRu"
74
- :label="$t('form.RegionType')"
75
- :rules="$rules.objectRequired"
76
- append-inner-icon="mdi mdi-chevron-right"
77
- @append="openPanel($t('form.RegionType'), [], 'registrationRegionType', $dataStore.getLocalityTypes)"
78
- ></base-panel-input>
79
- <base-panel-input
80
- v-if="member.registrationRegionType.nameRu !== 'город'"
81
- v-model="member.registrationRegion"
82
- :value="member.registrationRegion.nameRu"
83
- :label="$t('form.Region')"
84
- :rules="$rules.objectRequired"
85
- append-inner-icon="mdi mdi-chevron-right"
86
- @append="openPanel($t('form.Region'), [], 'registrationRegion', $dataStore.getRegions, 'registrationProvince')"
87
- ></base-panel-input>
88
- <base-panel-input
89
- v-model="member.registrationCity"
90
- :value="member.registrationCity.nameRu"
91
- :label="$t('form.City')"
92
- :rules="$rules.objectRequired"
93
- append-inner-icon="mdi mdi-chevron-right"
94
- @append="openPanel($t('form.City'), [], 'registrationCity', $dataStore.getCities, 'registrationProvince')"
95
- ></base-panel-input>
96
- <base-form-input v-model="member.registrationQuarter" :label="$t('form.Quarter')"></base-form-input>
97
- <base-form-input v-model="member.registrationMicroDistrict" :label="$t('form.MicroDistrict')"></base-form-input>
98
- <base-form-input v-model="member.registrationStreet" :rules="$rules.required" :label="$t('form.Street')"></base-form-input>
99
- <base-form-input v-model="member.registrationNumberHouse" :rules="$rules.required" :label="$t('form.NumberHouse')"></base-form-input>
100
- <base-form-input v-model="member.registrationNumberApartment" :label="$t('form.NumberApartment')"></base-form-input>
101
- </div>
240
+ <base-fade-transition>
241
+ <div class="flex flex-col gap-[1px]" v-if="member.registrationCountry.nameRu === 'Казахстан' || member.registrationCountry.nameRu === null">
242
+ <base-panel-input
243
+ v-model="member.registrationProvince"
244
+ :value="member.registrationProvince.nameRu"
245
+ :label="$t('form.Province')"
246
+ :readonly="isDisabled"
247
+ :clearable="!isDisabled"
248
+ :rules="$rules.objectRequired"
249
+ append-inner-icon="mdi mdi-chevron-right"
250
+ @append="openPanel($t('form.Province'), [], 'registrationProvince', $dataStore.getStates, 'registrationCountry')"
251
+ ></base-panel-input>
252
+ <base-panel-input
253
+ v-model="member.registrationRegionType"
254
+ :value="member.registrationRegionType.nameRu"
255
+ :label="$t('form.RegionType')"
256
+ :readonly="isDisabled"
257
+ :clearable="!isDisabled"
258
+ :rules="$rules.objectRequired"
259
+ append-inner-icon="mdi mdi-chevron-right"
260
+ @append="openPanel($t('form.RegionType'), [], 'registrationRegionType', $dataStore.getLocalityTypes)"
261
+ ></base-panel-input>
262
+ <base-panel-input
263
+ v-if="member.registrationRegionType.nameRu !== 'город'"
264
+ v-model="member.registrationRegion"
265
+ :value="member.registrationRegion.nameRu"
266
+ :label="$t('form.Region')"
267
+ :readonly="isDisabled"
268
+ :clearable="!isDisabled"
269
+ :rules="$rules.objectRequired"
270
+ append-inner-icon="mdi mdi-chevron-right"
271
+ @append="openPanel($t('form.Region'), [], 'registrationRegion', $dataStore.getRegions, 'registrationProvince')"
272
+ ></base-panel-input>
273
+ <base-panel-input
274
+ v-model="member.registrationCity"
275
+ :value="member.registrationCity.nameRu"
276
+ :label="$t('form.City')"
277
+ :readonly="isDisabled"
278
+ :clearable="!isDisabled"
279
+ :rules="$rules.objectRequired"
280
+ append-inner-icon="mdi mdi-chevron-right"
281
+ @append="openPanel($t('form.City'), [], 'registrationCity', $dataStore.getCities, 'registrationProvince')"
282
+ ></base-panel-input>
283
+ <!-- <base-form-input v-if="$dataStore.isGons" v-model="member.postIndex" :readonly="isDisabled"
284
+ :clearable="!isDisabled" :label="$t('form.postIndex')" maska="######"></base-form-input> -->
285
+ <base-form-input v-model="member.registrationQuarter" :readonly="isDisabled" :clearable="!isDisabled" :label="$t('form.Quarter')"></base-form-input>
286
+ <base-form-input v-model="member.registrationMicroDistrict" :readonly="isDisabled" :clearable="!isDisabled" :label="$t('form.MicroDistrict')"></base-form-input>
287
+ <base-form-input
288
+ v-model="member.registrationStreet"
289
+ :rules="$rules.required"
290
+ :readonly="isDisabled"
291
+ :clearable="!isDisabled"
292
+ :label="$t('form.Street')"
293
+ ></base-form-input>
294
+ <base-form-input
295
+ v-model="member.registrationNumberHouse"
296
+ :rules="$rules.required"
297
+ :readonly="isDisabled"
298
+ :clearable="!isDisabled"
299
+ :label="$t('form.NumberHouse')"
300
+ ></base-form-input>
301
+ <base-form-input v-model="member.registrationNumberApartment" :readonly="isDisabled" :clearable="!isDisabled" :label="$t('form.NumberApartment')"></base-form-input>
302
+ </div>
303
+ </base-fade-transition>
102
304
  </base-form-section>
103
- <base-form-section :title="$t('form.birthData')">
305
+ <base-form-section :title="$t('form.birthData')" v-if="$dataStore.hasBirthSection(whichForm)">
104
306
  <base-panel-input
105
307
  v-model="member.birthPlace"
106
308
  :value="member.birthPlace.nameRu"
107
309
  :label="$t('form.Country')"
310
+ :readonly="isDisabled"
311
+ :clearable="!isDisabled"
108
312
  :rules="$rules.objectRequired"
109
313
  append-inner-icon="mdi mdi-chevron-right"
110
314
  @append="openPanel($t('form.Country'), [], 'birthPlace', $dataStore.getCountries)"
@@ -114,25 +318,42 @@
114
318
  v-model="member.birthRegion"
115
319
  :value="member.birthRegion.nameRu"
116
320
  :label="$t('form.Region')"
321
+ :readonly="isDisabled"
322
+ :clearable="!isDisabled"
117
323
  :rules="$rules.objectRequired"
118
324
  append-inner-icon="mdi mdi-chevron-right"
119
325
  @append="openPanel($t('form.Region'), [], 'birthRegion', $dataStore.getRegions)"
120
326
  ></base-panel-input> -->
121
327
  </base-form-section>
122
- <base-form-section :title="$t('form.documentData')">
328
+ <base-form-section :title="$t('form.documentData')" v-if="$dataStore.hasDocumentSection(whichForm)">
123
329
  <base-panel-input
124
330
  v-model="member.documentType"
125
331
  :value="member.documentType.nameRu"
126
332
  :label="$t('form.documentType')"
333
+ :readonly="isDisabled"
334
+ :clearable="!isDisabled"
127
335
  :rules="$rules.objectRequired"
128
336
  append-inner-icon="mdi mdi-chevron-right"
129
337
  @append="openPanel($t('form.documentType'), [], 'documentType', $dataStore.getDocumentTypes)"
130
338
  ></base-panel-input>
131
- <base-form-input v-model="member.documentNumber" :label="$t('form.documentNumber')" :rules="$rules.required"></base-form-input>
339
+ <base-form-input
340
+ v-model="member.documentNumber"
341
+ :label="$t('form.documentNumber')"
342
+ :readonly="isDisabled"
343
+ :clearable="!isDisabled"
344
+ :rules="$rules.required"
345
+ ></base-form-input>
346
+ <base-file-input v-if="!memberDocument" :disabled="isDisabled" :clearable="!isDisabled" @input="attachFile($event)"></base-file-input>
347
+ <base-empty-form-field v-if="memberDocument" @click="!isDisabled && openCustomPanel('document')" class="justify-between">
348
+ {{ `${memberDocument.fileTypeName} - ${memberDocument.fileName}` }}
349
+ <i class="cursor-pointer mdi mdi-file-document mr-6 text-[#a0b3d8] text-xl"></i>
350
+ </base-empty-form-field>
132
351
  <base-panel-input
133
352
  v-model="member.documentIssuers"
134
353
  :value="member.documentIssuers.nameRu"
135
354
  :label="$t('form.documentIssuers')"
355
+ :readonly="isDisabled"
356
+ :clearable="!isDisabled"
136
357
  :rules="$rules.objectRequired"
137
358
  append-inner-icon="mdi mdi-chevron-right"
138
359
  @append="openPanel($t('form.documentIssuers'), [], 'documentIssuers', $dataStore.getDocumentIssuers)"
@@ -140,22 +361,30 @@
140
361
  <base-form-input
141
362
  v-model="member.documentDate"
142
363
  :label="$t('form.documentDate')"
364
+ :readonly="isDisabled"
365
+ :clearable="!isDisabled"
143
366
  :rules="$rules.required.concat($rules.date)"
144
367
  maska="##.##.####"
145
368
  append-inner-icon="mdi mdi-calendar-blank-outline"
146
369
  ></base-form-input>
147
- <base-form-input
148
- v-if="member.documentType.ids !== 'SBI' && member.documentType.ids !== 'VNZ'"
149
- v-model="member.documentExpire"
150
- :label="$t('form.documentExpire')"
151
- :rules="$rules.required.concat($rules.date)"
152
- maska="##.##.####"
153
- append-inner-icon="mdi mdi-calendar-blank-outline"
154
- ></base-form-input>
370
+ <base-fade-transition>
371
+ <base-form-input
372
+ v-if="member.documentType.ids !== 'SBI' && member.documentType.ids !== 'VNZ'"
373
+ v-model="member.documentExpire"
374
+ :label="$t('form.documentExpire')"
375
+ :readonly="isDisabled"
376
+ :clearable="!isDisabled"
377
+ :rules="$rules.required.concat($rules.date)"
378
+ maska="##.##.####"
379
+ append-inner-icon="mdi mdi-calendar-blank-outline"
380
+ ></base-form-input>
381
+ </base-fade-transition>
155
382
  <base-panel-input
156
383
  v-model="member.signOfResidency"
157
384
  :value="member.signOfResidency.nameRu"
158
385
  :label="$t('form.signOfResidency')"
386
+ :readonly="isDisabled"
387
+ :clearable="!isDisabled"
159
388
  :rules="$rules.objectRequired"
160
389
  append-inner-icon="mdi mdi-chevron-right"
161
390
  @append="openPanel($t('form.signOfResidency'), [], 'signOfResidency', $dataStore.getResidents)"
@@ -164,23 +393,31 @@
164
393
  v-model="member.countryOfTaxResidency"
165
394
  :value="member.countryOfTaxResidency.nameRu"
166
395
  :label="$t('form.countryOfTaxResidency')"
396
+ :readonly="isDisabled"
397
+ :clearable="!isDisabled"
167
398
  :rules="$rules.objectRequired"
168
399
  append-inner-icon="mdi mdi-chevron-right"
169
400
  @append="openPanel($t('form.countryOfTaxResidency'), [], 'countryOfTaxResidency', $dataStore.getTaxCountries)"
170
401
  ></base-panel-input>
171
- <base-panel-input
172
- v-if="member.countryOfTaxResidency.ids === '500014.3'"
173
- v-model="member.addTaxResidency"
174
- :value="member.addTaxResidency.nameRu"
175
- :label="$t('form.addTaxResidency')"
176
- :rules="$rules.objectRequired"
177
- append-inner-icon="mdi mdi-chevron-right"
178
- @append="openPanel($t('form.addTaxResidency'), [], 'addTaxResidency', $dataStore.getAdditionalTaxCountries)"
179
- ></base-panel-input>
402
+ <base-fade-transition>
403
+ <base-panel-input
404
+ v-if="member.countryOfTaxResidency.ids === '500014.3'"
405
+ v-model="member.addTaxResidency"
406
+ :value="member.addTaxResidency.nameRu"
407
+ :label="$t('form.addTaxResidency')"
408
+ :readonly="isDisabled"
409
+ :clearable="!isDisabled"
410
+ :rules="$rules.objectRequired"
411
+ append-inner-icon="mdi mdi-chevron-right"
412
+ @append="openPanel($t('form.addTaxResidency'), [], 'addTaxResidency', $dataStore.getAdditionalTaxCountries)"
413
+ ></base-panel-input>
414
+ </base-fade-transition>
180
415
  <base-panel-input
181
416
  v-model="member.signOfIPDL"
182
417
  :value="member.signOfIPDL.nameRu"
183
418
  :label="$t('form.signOfIPDL')"
419
+ :readonly="isDisabled"
420
+ :clearable="!isDisabled"
184
421
  :rules="$rules.objectRequired"
185
422
  append-inner-icon="mdi mdi-chevron-right"
186
423
  @append="openPanel($t('form.signOfIPDL'), $dataStore.ipdl, 'signOfIPDL')"
@@ -189,6 +426,8 @@
189
426
  v-model="member.countryOfCitizenship"
190
427
  :value="member.countryOfCitizenship.nameRu"
191
428
  :label="$t('form.countryOfCitizenship')"
429
+ :readonly="isDisabled"
430
+ :clearable="!isDisabled"
192
431
  :rules="$rules.objectRequired"
193
432
  append-inner-icon="mdi mdi-chevron-right"
194
433
  @append="openPanel($t('form.countryOfCitizenship'), [], 'countryOfCitizenship', $dataStore.getCitizenshipCountries)"
@@ -197,39 +436,53 @@
197
436
  v-model="member.economySectorCode"
198
437
  :value="member.economySectorCode.nameRu"
199
438
  :label="$t('form.economySectorCode')"
439
+ :readonly="isDisabled"
440
+ :clearable="!isDisabled"
200
441
  :rules="$rules.objectRequired"
201
442
  append-inner-icon="mdi mdi-chevron-right"
202
443
  @append="openPanel($t('form.economySectorCode'), [], 'economySectorCode', $dataStore.getSectorCodeList)"
203
444
  ></base-panel-input>
204
445
  </base-form-section>
205
- <base-form-section :title="$t('form.contactsData')">
446
+ <base-form-section :title="$t('form.contactsData')" v-if="$dataStore.hasContactSection(whichForm)">
206
447
  <base-form-input
207
448
  v-model="member.homePhone"
208
449
  maska="+7 (7##) ### ## ##"
209
450
  placeholder="+7 7"
210
451
  :label="$t('form.homePhone')"
452
+ :readonly="isDisabled"
453
+ :clearable="!isDisabled"
211
454
  :rules="whichForm === formStore.beneficiaryFormKey ? [] : $rules.phoneFormat"
212
455
  ></base-form-input>
213
- <base-form-input v-model="member.email" :label="$t('form.email')" :rules="$rules.email"></base-form-input>
456
+ <base-form-input v-model.trim="member.email" :label="$t('form.email')" :rules="$rules.email"></base-form-input>
214
457
  </base-form-section>
215
458
  </v-form>
216
- <base-btn :text="$t('buttons.save')" @click="submitForm"></base-btn>
459
+ <base-btn v-if="!isDisabled && isTask && $dataStore.isInitiator()" :loading="isButtonLoading || isSubmittingForm" :text="$t('buttons.save')" @click="submitForm"></base-btn>
217
460
  <Teleport v-if="isPanelOpen" to="#panel-actions">
218
- <div :class="[$libStyles.scrollPage]">
219
- <base-rounded-input v-model="searchQuery" :label="$t('labels.search')" class="p-2" :hide-details="true"></base-rounded-input>
220
- <div v-if="panelList && isPanelLoading === false">
221
- <base-panel-item class="cursor-pointer border-t-[1px]" @click="pickPanelValue(new Value())">{{ $t('form.notChosen') }}</base-panel-item>
222
- <base-panel-item
461
+ <div :class="[$libStyles.scrollPage]" class="flex flex-col items-center">
462
+ <base-rounded-input v-model="searchQuery" :label="$t('labels.search')" class="w-full p-2" :hide-details="true"></base-rounded-input>
463
+ <div v-if="panelList && isPanelLoading === false" class="w-full flex flex-col gap-2 p-2">
464
+ <base-panel-select-item :text="$t('form.notChosen')" :selected="panelValue.nameRu === null" @click="pickPanelValue(new Value())"></base-panel-select-item>
465
+ <base-panel-select-item
223
466
  v-for="(item, index) of panelList.filter(i => i.nameRu && (i.nameRu as string).match(new RegExp(searchQuery, 'i')))"
224
467
  :key="index"
225
- class="cursor-pointer"
226
- :class="[item.nameRu === panelValue.nameRu && $libStyles.greenText]"
468
+ :text="item.nameRu as string"
469
+ :selected="item.nameRu === panelValue.nameRu"
227
470
  @click="pickPanelValue(item)"
228
- >
229
- {{ item.nameRu }}
230
- </base-panel-item>
471
+ ></base-panel-select-item>
231
472
  </div>
232
- <base-loader v-if="isPanelLoading" class="absolute mx-auto mt-10" :size="50"></base-loader>
473
+ <base-loader v-if="isPanelLoading" class="absolute mt-10" :size="50"></base-loader>
474
+ </div>
475
+ </Teleport>
476
+ <Teleport v-if="isSearchOpen" to="#panel-actions">
477
+ <div :class="[$libStyles.flexColNav]">
478
+ <base-btn v-if="$dataStore.controls.hasGBDFL" :loading="isButtonLoading" :text="$t('buttons.fromGBDFL')" @click="getContragentFromGBDFL"></base-btn>
479
+ <base-btn v-if="$dataStore.controls.hasInsis" :loading="isButtonLoading" :text="$t('buttons.fromInsis')" @click="getContragent"></base-btn>
480
+ </div>
481
+ </Teleport>
482
+ <Teleport v-if="isDocumentOpen" to="#panel-actions">
483
+ <div :class="[$libStyles.flexColNav]">
484
+ <base-btn :disabled="documentLoading" :loading="documentLoading" text="Открыть" @click="getFile('view')"></base-btn>
485
+ <base-btn :disabled="documentLoading" :loading="documentLoading" text="Скачать" @click="getFile('download')"></base-btn>
233
486
  </div>
234
487
  </Teleport>
235
488
  </section>
@@ -237,11 +490,13 @@
237
490
 
238
491
  <script lang="ts">
239
492
  import { LocationQueryValue } from 'vue-router';
240
- import { Value } from '@/composables/classes';
493
+ import { Value, DocumentItem } from '@/composables/classes';
494
+ import { uuid } from 'vue-uuid';
241
495
 
242
- export default defineComponent({
496
+ export default {
243
497
  setup() {
244
- const componentKey = ref<number>(0);
498
+ type FileActions = 'view' | 'download';
499
+
245
500
  const vForm = ref<any>();
246
501
  const route = useRoute();
247
502
  const router = useRouter();
@@ -252,26 +507,84 @@ export default defineComponent({
252
507
  memberStore.getMemberFromStore(whichForm as keyof typeof formStore, Number((whichIndex ? whichIndex : '0') as string))!;
253
508
  const member = ref(getMember(route.query.tab, route.query.i));
254
509
  const isPanelOpen = ref<boolean>(false);
510
+ const memberDocument = ref<DocumentItem>();
511
+ const isButtonLoading = ref<boolean>(false);
512
+ const isSubmittingForm = ref<boolean>(false);
513
+ const documentLoading = ref<boolean>(false);
514
+ const isSearchOpen = ref<boolean>(false);
515
+ const isDocumentOpen = ref<boolean>(false);
255
516
  const isPanelLoading = ref<boolean>(false);
256
517
  const panelValue = ref<Value>(new Value());
257
518
  const panelList = ref<Value[]>([]);
258
- const currentPanel = ref<string>('');
519
+ const currentPanel = ref<keyof typeof member.value>();
259
520
  const searchQuery = ref<string>('');
521
+ const fileData = ref<{ file: any }>();
260
522
 
261
523
  const whichForm = computed(() => route.query.tab);
262
524
  const whichIndex = computed(() => route.query.i);
525
+ const hasOtp = computed(() => member.value.otpCode && member.value.otpCode.length === 7);
526
+ const isDisabled = computed(() => !memberStore.isStatementEditible(whichForm.value as string));
527
+ const isTask = computed(() => route.params.taskId === '0' || dataStore.isTask());
528
+ const isIinPhoneDisabled = computed(() => formStore.applicationData && 'regNumber' in formStore.applicationData && whichForm.value === formStore.policyholderFormKey);
529
+ const isFromGBD = computed(() => !!member.value.gosPersonData);
530
+
531
+ const getOtpConditionByMember = () => {
532
+ switch (whichForm.value) {
533
+ case formStore.policyholderFormKey:
534
+ return route.params.taskId === '0';
535
+ case formStore.policyholdersRepresentativeFormKey:
536
+ return route.query.id === '0';
537
+ case formStore.insuredFormKey:
538
+ return route.query.id === '0';
539
+ case formStore.beneficiaryFormKey:
540
+ return route.query.id === '0';
541
+ case formStore.beneficialOwnerFormKey:
542
+ return route.query.id === '0';
543
+ }
544
+ };
545
+ const otpCondition = computed(() => {
546
+ // Add conditions by product
547
+ if (member.value.hasAgreement) return false;
548
+ if (!member.value.phoneNumber || (member.value.phoneNumber && member.value.phoneNumber.length !== 18)) return false;
549
+ return getOtpConditionByMember();
550
+ });
263
551
 
264
552
  const searchMember = async () => {
265
- console.log('Search');
553
+ if (!isDisabled.value) {
554
+ dataStore.panelAction = null;
555
+ dataStore.panel.title = 'Поиск клиента';
556
+ dataStore.panel.open = true;
557
+ isSearchOpen.value = true;
558
+ isDocumentOpen.value = false;
559
+ isPanelOpen.value = false;
560
+ } else {
561
+ dataStore.showToaster('error', dataStore.t('toaster.viewErrorText'));
562
+ }
563
+ };
564
+
565
+ const openCustomPanel = (type: 'document' = 'document') => {
566
+ dataStore.panelAction = null;
567
+ if (type === 'document' && memberDocument.value) {
568
+ dataStore.panel.title = memberDocument.value.fileTypeName!;
569
+ isDocumentOpen.value = true;
570
+ isSearchOpen.value = false;
571
+ isPanelOpen.value = false;
572
+ }
573
+ dataStore.panel.open = true;
266
574
  };
267
575
 
268
576
  const openPanel = async (title: string, list: Value[], key: string, asyncFunction?: Function, filterKey?: string) => {
269
- if (formStore.isDisabled[whichForm.value as keyof typeof formStore.isDisabled] === false) {
270
- const notAllowedToChange = ['gender', 'documentType', 'documentIssuers'];
271
- if (member.value.gotFromInsis === false && notAllowedToChange.includes(key)) {
272
- return;
273
- }
274
- currentPanel.value = key;
577
+ if (!isDisabled.value) {
578
+ isSearchOpen.value = false;
579
+ isDocumentOpen.value = false;
580
+ // Feature
581
+ // const notAllowedToChange = ['gender', 'documentType', 'documentIssuers'];
582
+ // if (member.value.gotFromInsis === false && notAllowedToChange.includes(key)) {
583
+ // dataStore.showToaster('error', 'Запрещенео менять значения этого поля');
584
+ // return;
585
+ // }
586
+ searchQuery.value = '';
587
+ currentPanel.value = key as keyof typeof member.value;
275
588
  isPanelOpen.value = true;
276
589
  dataStore.panelAction = null;
277
590
  dataStore.panel.open = true;
@@ -280,10 +593,10 @@ export default defineComponent({
280
593
  let newList = list;
281
594
  if (asyncFunction) {
282
595
  isPanelLoading.value = true;
283
- newList = await asyncFunction(filterKey, whichForm.value);
596
+ newList = await asyncFunction(filterKey, member.value);
284
597
  }
285
598
  panelList.value = newList;
286
- panelValue.value = member.value[key as keyof typeof member.value];
599
+ panelValue.value = member.value[currentPanel.value];
287
600
  isPanelLoading.value = false;
288
601
  } else {
289
602
  dataStore.showToaster('error', dataStore.t('toaster.viewErrorText'));
@@ -294,16 +607,208 @@ export default defineComponent({
294
607
  if (formStore.isDisabled[whichForm.value as keyof typeof formStore.isDisabled] === false) {
295
608
  dataStore.panel.open = false;
296
609
  isPanelOpen.value = false;
297
- member.value[currentPanel.value as keyof typeof member.value] = item.nameRu === null ? new Value() : item;
610
+ // @ts-ignore
611
+ member.value[currentPanel.value] = item.nameRu === null ? new Value() : item;
298
612
  } else {
299
613
  dataStore.showToaster('error', dataStore.t('toaster.viewErrorText'));
300
614
  }
301
615
  };
302
616
 
617
+ const uploadFile = async (processInstanceId: string | number) => {
618
+ const selectedDocument = dataStore.dicFileTypeList.find((i: Value) => i.nameRu === member.value.documentType.nameRu);
619
+ const formData = new FormData();
620
+ const information: any = [];
621
+ const uuidV4 = uuid.v4();
622
+ if (fileData.value) {
623
+ Object.values(fileData.value.file).map((value: any) => {
624
+ formData.append('file', value);
625
+ const ext = value.name.substr(value.name.lastIndexOf('.'));
626
+ information.push({
627
+ identifier: `${uuidV4}${ext}`,
628
+ iin: member.value.iin ? member.value.iin.replaceAll('-', '') : null,
629
+ processInstanceId: processInstanceId,
630
+ fileTypeCode: selectedDocument ? selectedDocument.code : null,
631
+ fileTypeId: selectedDocument ? selectedDocument.id : null,
632
+ fileName: value.name,
633
+ });
634
+ });
635
+ formData.append('fileData', JSON.stringify(information));
636
+ await dataStore.uploadFiles(formData, false);
637
+ }
638
+ };
639
+
640
+ const attachFile = (event: InputEvent) => {
641
+ if (event.target) {
642
+ fileData.value = { file: (event.target as HTMLInputElement).files };
643
+ } else {
644
+ if (event.dataTransfer) {
645
+ fileData.value = { file: (event.dataTransfer as DataTransfer).files };
646
+ }
647
+ }
648
+ };
649
+
650
+ const getFile = async (type: FileActions) => {
651
+ if (memberDocument.value) {
652
+ documentLoading.value = true;
653
+ const fileExtension = memberDocument.value.fileName!.match(/\.([0-9a-z]+)(?:[\?#]|$)/i)![1];
654
+ await dataStore.getFile(memberDocument.value, type, fileExtension);
655
+ documentLoading.value = false;
656
+ }
657
+ };
658
+
659
+ const getContragentFromGBDFL = async () => {
660
+ if (member.value.hasAgreement === false) {
661
+ dataStore.showToaster('error', dataStore.t('toaster.needAgreement'), 3000);
662
+ return;
663
+ }
664
+ if (!member.value.iin || member.value.iin.length !== 15 || !member.value.phoneNumber || member.value.phoneNumber.length !== 18) {
665
+ dataStore.showToaster('error', dataStore.t('toaster.errorFormField').replace('{text}', 'Номер телефона, ИИН'), 5000);
666
+ return;
667
+ }
668
+ isButtonLoading.value = true;
669
+ await dataStore.getContragentFromGBDFL(member.value.iin, member.value.phoneNumber, whichForm.value, whichIndex.value ? Number(whichIndex.value) : null);
670
+ member.value.gotFromInsis = true;
671
+ isSearchOpen.value = false;
672
+ dataStore.panel.open = false;
673
+ isButtonLoading.value = false;
674
+ };
675
+
676
+ const getContragent = async () => {
677
+ if (member.value.hasAgreement === false) {
678
+ dataStore.showToaster('error', dataStore.t('toaster.needAgreement'), 3000);
679
+ return;
680
+ }
681
+ if (!member.value.iin || member.value.iin.length !== 15) {
682
+ dataStore.showToaster('error', dataStore.t('toaster.errorFormField').replace('{text}', 'ИИН'), 5000);
683
+ return;
684
+ }
685
+ isButtonLoading.value = true;
686
+ await dataStore.getContragent(member.value, whichForm.value, whichIndex.value, false);
687
+ isSearchOpen.value = false;
688
+ dataStore.panel.open = false;
689
+ isButtonLoading.value = false;
690
+ };
691
+
692
+ const validateESBD = async (docTypeNumber: number) => {
693
+ const data = {
694
+ personType: 1,
695
+ iin: member.value.iin!.replaceAll('-', ''),
696
+ lastName: member.value.lastName,
697
+ firstName: member.value.firstName,
698
+ middleName: member.value.middleName,
699
+ birthDate: member.value.getDateByKey('birthDate'),
700
+ sex: member.value.gender.id,
701
+ docType: docTypeNumber,
702
+ docNumber: member.value.documentNumber,
703
+ docIssuedDate: member.value.getDateByKey('documentDate'),
704
+ docIssuedBy: member.value.documentIssuers.nameRu,
705
+ activityKindId: 0,
706
+ economicsSectorId: Number((member.value.economySectorCode.ids! as string).at(-1)),
707
+ resident: member.value.signOfResidency.ids === '500011.2' || member.value.signOfResidency.ids === null ? 0 : 1,
708
+ countryId: Number((member.value.countryOfTaxResidency.ids! as string).at(-1)),
709
+ };
710
+ return await dataStore.getValidateClientESBD(data);
711
+ };
712
+
713
+ const saveMember = async () => {
714
+ const hasSaved = await dataStore.saveContragent(member.value, whichForm.value, whichIndex.value, true);
715
+ if (hasSaved === false) {
716
+ dataStore.isLoading = false;
717
+ return false;
718
+ }
719
+ const isInsured = formStore.isPolicyholderInsured;
720
+ if (whichForm.value == formStore.policyholderFormKey) {
721
+ if (route.params.taskId === '0') {
722
+ try {
723
+ const taskId = await dataStore.startApplication(member.value);
724
+ if (taskId) {
725
+ await dataStore.getApplicationData(taskId, false, false, false, false);
726
+ await router.replace({
727
+ name: route.name!,
728
+ params: { taskId },
729
+ query: { ...route.query },
730
+ });
731
+ dataStore.showToaster('success', dataStore.t('toaster.successStatementCreation'));
732
+ } else {
733
+ formStore.applicationData = { processInstanceId: 0 };
734
+ return;
735
+ }
736
+ dataStore.isLoading = false;
737
+ } catch (err) {
738
+ formStore.applicationData = { processInstanceId: 0 };
739
+ dataStore.isLoading = false;
740
+ return;
741
+ }
742
+ }
743
+ if (fileData.value && fileData.value.file) {
744
+ await uploadFile(formStore.applicationData.processInstanceId);
745
+ }
746
+ }
747
+ const memberFromApplicaiton = memberStore.getMemberFromApplication(whichForm.value as keyof typeof formStore, whichIndex.value ? Number(whichIndex.value) : undefined);
748
+ const isSaved = await dataStore.saveMember(member.value, memberStore.getMemberCode(whichForm.value as keyof typeof formStore), memberFromApplicaiton);
749
+ if (!isSaved) return false;
750
+ if (whichForm.value === formStore.policyholderFormKey && isInsured === true) {
751
+ formStore.insuredForm[0] = formStore.policyholderForm;
752
+ const isInsuredSaved = await dataStore.saveMember(
753
+ member.value,
754
+ memberStore.getMemberCode(formStore.insuredFormKey as keyof typeof formStore),
755
+ memberStore.getMemberFromApplication(formStore.insuredFormKey as keyof typeof formStore, formStore.insuredFormIndex),
756
+ );
757
+ if (!isInsuredSaved) return false;
758
+ }
759
+ await router.replace({
760
+ name: route.name!,
761
+ query: { ...route.query, id: member.value.id },
762
+ });
763
+ await dataStore.getApplicationData(route.params.taskId, false, false, false, false);
764
+ if (dataStore.controls.hasCalculator) {
765
+ if (dataStore.additionalInsuranceTermsWithout && dataStore.additionalInsuranceTermsWithout.length !== 0) {
766
+ dataStore.additionalInsuranceTerms.forEach((term: any) => {
767
+ const defaultTerm = dataStore.additionalInsuranceTermsWithout.find((i: any) => i.coverTypeId === term.coverTypeId);
768
+ if (defaultTerm) {
769
+ term.coverSumName = defaultTerm.coverSumName;
770
+ term.coverSumId = defaultTerm.coverSumId;
771
+ }
772
+ });
773
+ }
774
+ }
775
+ dataStore.showToaster('success', dataStore.t('toaster.successSaved'));
776
+ dataStore.isLoading = false;
777
+ window.scrollTo({ top: 0, behavior: 'smooth' });
778
+ };
779
+
303
780
  const submitForm = async () => {
781
+ if (member.value.hasAgreement === false) {
782
+ dataStore.showToaster('error', dataStore.t('toaster.needAgreement'));
783
+ return;
784
+ }
304
785
  await vForm.value.validate().then(async (v: { valid: Boolean; errors: any }) => {
305
786
  if (v.valid) {
306
- console.log(v);
787
+ isSubmittingForm.value = true;
788
+ const docType = member.value.documentType.ids;
789
+ if (member.value.gotFromInsis === true && (docType === '1UDL' || docType === 'SBI')) {
790
+ dataStore.isLoading = true;
791
+ const ESBDResponse = await validateESBD(docType === '1UDL' ? 1 : 3);
792
+ if (!ESBDResponse) {
793
+ dataStore.isLoading = false;
794
+ return;
795
+ }
796
+ const initialPoint = `${member.value.iin!.replaceAll('-', '')}.`;
797
+ const RESPONSE = ESBDMessage(ESBDResponse, initialPoint);
798
+ let errorMessage = RESPONSE !== false ? RESPONSE : 'Что-то произошло не так';
799
+ if (ESBDResponse.errorCode === 0) {
800
+ member.value.verifyType = 'ESBD';
801
+ member.value.verifyDate = ESBDResponse.verifiedDate;
802
+ const hasMemberSaved = await saveMember();
803
+ } else {
804
+ dataStore.isLoading = false;
805
+ dataStore.showToaster('error', errorMessage, 5000);
806
+ }
807
+ } else {
808
+ member.value.gotFromInsis = true;
809
+ const hasMemberSaved = await saveMember();
810
+ }
811
+ isSubmittingForm.value = false;
307
812
  } else {
308
813
  const errors = document.querySelector('.v-input--error');
309
814
  if (errors) {
@@ -326,16 +831,100 @@ export default defineComponent({
326
831
  });
327
832
  };
328
833
 
834
+ const checkOtp = async () => {
835
+ if (!member.value.otpCode || member.value.iin?.length !== 15 || member.value.phoneNumber?.length !== 18) {
836
+ dataStore.showToaster('error', dataStore.t('toaster.errorFormField').replace('{text}', dataStore.t('form.otpCode')), 3000);
837
+ return;
838
+ }
839
+ const checked = await memberStore.checkOtp(member.value);
840
+ if (typeof checked !== 'undefined') {
841
+ member.value.hasAgreement = checked;
842
+ }
843
+ };
844
+
845
+ const sendOtp = async (onInit = false) => {
846
+ const response = await memberStore.sendOtp(member.value, formStore.applicationData.processInstanceId, onInit);
847
+ if (response) {
848
+ if (member.value.hasAgreement === null) member.value.hasAgreement = response.otpStatus;
849
+ }
850
+ };
851
+
852
+ const onInit = async () => {
853
+ if (route.params.taskId === '0' || (route.params.taskId !== '0' && dataStore.isProcessEditable(formStore.applicationData.statusCode))) {
854
+ await dataStore.getSignedDocList(formStore.applicationData.processInstanceId);
855
+ }
856
+ if (getOtpConditionByMember()) {
857
+ await sendOtp(true);
858
+ } else {
859
+ if (member.value.hasAgreement === null) member.value.hasAgreement = true;
860
+ }
861
+ if (route.query.id !== '0' && !member.value.id) {
862
+ await dataStore.getContragentById(route.query.id, whichForm.value, true);
863
+ }
864
+ if (member.value.id && route.query.id === '0') {
865
+ await router.replace({
866
+ name: route.name!,
867
+ query: { ...route.query, id: member.value.id },
868
+ });
869
+ }
870
+ if (member.value.id) {
871
+ const filteredDocuments: DocumentItem[] = dataStore.getFilesByIIN(member.value.iin!.replace(/-/g, '')) as DocumentItem[];
872
+ if (filteredDocuments && filteredDocuments.length) memberDocument.value = filteredDocuments[0];
873
+ }
874
+ };
875
+
876
+ onMounted(async () => {
877
+ await onInit();
878
+ });
879
+
329
880
  onBeforeRouteUpdate(to => {
330
- member.value = getMember(to.query.tab, to.query.i);
331
- componentKey.value++;
881
+ if ('tab' in to.query && to.query.tab !== 'productConditions') {
882
+ member.value = getMember(to.query.tab, to.query.i);
883
+ }
332
884
  });
333
885
 
886
+ watch(
887
+ () => member.value.percentageOfPayoutAmount,
888
+ val => {
889
+ if (val) {
890
+ if (val < 0) {
891
+ member.value.percentageOfPayoutAmount = 0;
892
+ dataStore.showToaster('error', dataStore.t('toaster.incorrectInput'), 1000);
893
+ } else if (val > 100) {
894
+ member.value.percentageOfPayoutAmount = 100;
895
+ dataStore.showToaster('error', dataStore.t('toaster.incorrectInput'), 1000);
896
+ }
897
+ }
898
+ },
899
+ );
900
+
901
+ watch(
902
+ () => member.value.birthDate,
903
+ val => {
904
+ if (val && val.length === 10) {
905
+ const calculatedAge = member.value.getAgeByBirthDate();
906
+ if (calculatedAge) member.value.age = calculatedAge;
907
+ }
908
+ },
909
+ );
910
+
911
+ watch(
912
+ () => member.value.otpCode,
913
+ async () => {
914
+ if (member.value.otpCode && member.value.otpCode.length === 7) {
915
+ await checkOtp();
916
+ }
917
+ },
918
+ );
919
+
334
920
  watch(
335
921
  () => dataStore.panel.open,
336
922
  () => {
337
923
  if (dataStore.panel.open === false) {
338
924
  isPanelOpen.value = false;
925
+ isDocumentOpen.value = false;
926
+ isSearchOpen.value = false;
927
+ dataStore.panelAction = null;
339
928
  }
340
929
  },
341
930
  { immediate: true },
@@ -354,23 +943,41 @@ export default defineComponent({
354
943
  memberStore,
355
944
  member,
356
945
  isPanelOpen,
946
+ isSearchOpen,
947
+ isDocumentOpen,
357
948
  isPanelLoading,
358
- componentKey,
949
+ isButtonLoading,
950
+ isSubmittingForm,
951
+ documentLoading,
359
952
  panelValue,
360
953
  panelList,
361
954
  searchQuery,
362
955
  Value,
956
+ memberDocument,
363
957
 
364
958
  // Computed
365
959
  whichForm,
366
960
  whichIndex,
961
+ otpCondition,
962
+ hasOtp,
963
+ isDisabled,
964
+ isTask,
965
+ isIinPhoneDisabled,
966
+ isFromGBD,
367
967
 
368
968
  // Functions
369
969
  searchMember,
370
970
  openPanel,
971
+ openCustomPanel,
371
972
  pickPanelValue,
372
973
  submitForm,
974
+ checkOtp,
975
+ sendOtp,
976
+ getContragentFromGBDFL,
977
+ getContragent,
978
+ attachFile,
979
+ getFile,
373
980
  };
374
981
  },
375
- });
982
+ };
376
983
  </script>