hl-core 0.0.9-beta.5 → 0.0.9-beta.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/api/base.api.ts +935 -0
  2. package/api/index.ts +2 -620
  3. package/api/interceptors.ts +53 -14
  4. package/components/Button/Btn.vue +2 -2
  5. package/components/Complex/MessageBlock.vue +2 -2
  6. package/components/Complex/Page.vue +1 -1
  7. package/components/Dialog/Dialog.vue +60 -15
  8. package/components/Form/DynamicForm.vue +100 -0
  9. package/components/Form/FormBlock.vue +12 -3
  10. package/components/Form/FormData.vue +110 -0
  11. package/components/Form/FormSection.vue +3 -3
  12. package/components/Form/FormToggle.vue +25 -5
  13. package/components/Form/ManagerAttachment.vue +150 -86
  14. package/components/Form/ProductConditionsBlock.vue +59 -6
  15. package/components/Input/Datepicker.vue +39 -8
  16. package/components/Input/DynamicInput.vue +23 -0
  17. package/components/Input/FileInput.vue +25 -5
  18. package/components/Input/FormInput.vue +2 -4
  19. package/components/Input/Monthpicker.vue +34 -0
  20. package/components/Input/PanelInput.vue +5 -1
  21. package/components/Input/RoundedEmptyField.vue +5 -0
  22. package/components/Input/RoundedSelect.vue +13 -0
  23. package/components/Input/SwitchInput.vue +64 -0
  24. package/components/Input/TextInput.vue +160 -0
  25. package/components/Layout/Drawer.vue +17 -4
  26. package/components/Layout/Header.vue +23 -2
  27. package/components/Layout/Loader.vue +1 -1
  28. package/components/Layout/SettingsPanel.vue +13 -7
  29. package/components/Menu/InfoMenu.vue +35 -0
  30. package/components/Menu/MenuNav.vue +17 -2
  31. package/components/Pages/Anketa.vue +140 -52
  32. package/components/Pages/Auth.vue +42 -7
  33. package/components/Pages/ContragentForm.vue +124 -50
  34. package/components/Pages/Documents.vue +72 -7
  35. package/components/Pages/InvoiceInfo.vue +1 -1
  36. package/components/Pages/MemberForm.vue +369 -100
  37. package/components/Pages/ProductAgreement.vue +1 -8
  38. package/components/Pages/ProductConditions.vue +888 -181
  39. package/components/Panel/PanelHandler.vue +414 -45
  40. package/components/Panel/PanelSelectItem.vue +17 -2
  41. package/components/Panel/RightPanelCloser.vue +7 -0
  42. package/components/Transitions/Animation.vue +28 -0
  43. package/components/Utilities/Qr.vue +44 -0
  44. package/composables/axios.ts +1 -0
  45. package/composables/classes.ts +433 -8
  46. package/composables/constants.ts +102 -2
  47. package/composables/fields.ts +328 -0
  48. package/composables/index.ts +257 -12
  49. package/composables/styles.ts +29 -16
  50. package/layouts/default.vue +48 -3
  51. package/locales/ru.json +480 -14
  52. package/package.json +27 -24
  53. package/pages/Token.vue +1 -12
  54. package/plugins/vuetifyPlugin.ts +2 -0
  55. package/store/data.store.ts +1190 -248
  56. package/store/extractStore.ts +17 -0
  57. package/store/form.store.ts +13 -1
  58. package/store/member.store.ts +1 -1
  59. package/store/rules.ts +66 -5
  60. package/types/enum.ts +43 -0
  61. package/types/env.d.ts +1 -0
  62. package/types/form.ts +94 -0
  63. package/types/index.ts +254 -21
@@ -1,23 +1,59 @@
1
1
  <template>
2
2
  <section v-show="showForm" class="flex flex-col gap-4 px-[10px]">
3
- <v-form v-if="member" ref="vForm" @submit="submitForm" class="max-h-[75vh] overflow-y-scroll">
3
+ <v-form v-if="member" ref="vForm" @submit="submitForm" class="max-h-[75svh] overflow-y-scroll">
4
4
  <base-form-section :title="$dataStore.t('form.personalData')" class="mt-[14px]">
5
- <base-form-input v-model="member.phoneNumber" :label="$dataStore.t('form.phoneNumber')" :maska="$maska.phone" :rules="$rules.required.concat($rules.phoneFormat)" />
6
- <base-form-input v-model="member.iin" :label="$dataStore.t('form.iin')" :maska="$maska.iin" :rules="$rules.required.concat($rules.iinRight)" />
7
- <base-form-input v-model.trim="member.lastName" :label="$dataStore.t('form.lastName')" :rules="$rules.required.concat($rules.cyrillic)" />
8
- <base-form-input v-model.trim="member.firstName" :label="$dataStore.t('form.firstName')" :rules="$rules.required.concat($rules.cyrillic)" />
9
- <base-form-input v-model.trim="member.middleName" :label="$dataStore.t('form.middleName')" :rules="$rules.cyrillicNonRequired" />
5
+ <base-form-input
6
+ v-model="member.phoneNumber"
7
+ :label="$dataStore.t('form.phoneNumber')"
8
+ :readonly="disabled"
9
+ :clearable="!disabled"
10
+ :maska="$maska.phone"
11
+ :rules="$rules.required.concat($rules.phoneFormat)"
12
+ />
13
+ <base-form-input
14
+ v-model="member.iin"
15
+ :label="$dataStore.t('form.iin')"
16
+ :readonly="disabled"
17
+ :clearable="!disabled"
18
+ :maska="$maska.iin"
19
+ :rules="$rules.required.concat($rules.iinRight)"
20
+ />
21
+ <base-form-input
22
+ v-model.trim="member.lastName"
23
+ :label="$dataStore.t('form.lastName')"
24
+ :readonly="disabled"
25
+ :clearable="!disabled"
26
+ :rules="$rules.required.concat($rules.cyrillic)"
27
+ />
28
+ <base-form-input
29
+ v-model.trim="member.firstName"
30
+ :label="$dataStore.t('form.firstName')"
31
+ :readonly="disabled"
32
+ :clearable="!disabled"
33
+ :rules="$rules.required.concat($rules.cyrillic)"
34
+ />
35
+ <base-form-input
36
+ v-model.trim="member.middleName"
37
+ :label="$dataStore.t('form.middleName')"
38
+ :readonly="disabled"
39
+ :clearable="!disabled"
40
+ :rules="$rules.cyrillicNonRequired"
41
+ />
10
42
  <base-form-input
11
43
  v-model="member.birthDate"
12
44
  :label="$dataStore.t('form.birthDate')"
45
+ :readonly="disabled"
46
+ :clearable="!disabled"
13
47
  :rules="$rules.required.concat($rules.birthDate)"
14
48
  :maska="$maska.date"
15
49
  append-inner-icon="mdi mdi-calendar-blank-outline"
16
50
  />
17
- <base-form-input v-model="member.age" :label="$dataStore.t('form.age')" :rules="$rules.numbers.concat($rules.age18)" />
51
+ <base-form-input v-model="member.age" :label="$dataStore.t('form.age')" :readonly="disabled" :clearable="!disabled" :rules="$rules.numbers.concat($rules.age18)" />
18
52
  <base-panel-input
19
53
  v-model="member.gender"
20
- :value="member.gender.nameRu"
54
+ :value="member.gender?.nameRu"
55
+ :readonly="disabled"
56
+ :clearable="!disabled"
21
57
  :label="$dataStore.t('form.gender')"
22
58
  :rules="$rules.objectRequired"
23
59
  append-inner-icon="mdi mdi-chevron-right"
@@ -25,15 +61,17 @@
25
61
  />
26
62
  </base-form-section>
27
63
  <!-- <base-form-section :title="$dataStore.t('form.jobData')">
28
- <base-form-input v-model.trim="member.job" :label="$dataStore.t('form.job')" :rules="$rules.required" />
29
- <base-form-input v-model.trim="member.jobPosition" :label="$dataStore.t('form.jobPosition')" :rules="$rules.required" />
30
- <base-form-input v-model.trim="member.jobPlace" :label="$dataStore.t('form.jobPlace')" :rules="$rules.required" />
64
+ <base-form-input v-model.trim="member.job" :label="$dataStore.t('form.job')" :readonly="disabled" :clearable="!disabled" :rules="$rules.required" />
65
+ <base-form-input v-model.trim="member.jobPosition" :label="$dataStore.t('form.jobPosition')" :readonly="disabled" :clearable="!disabled" :rules="$rules.required" />
66
+ <base-form-input v-model.trim="member.jobPlace" :label="$dataStore.t('form.jobPlace')" :readonly="disabled" :clearable="!disabled" :rules="$rules.required" />
31
67
  </base-form-section> -->
32
68
  <base-form-section :title="$dataStore.t('form.placeRegistration')">
33
69
  <base-panel-input
34
70
  v-model="member.registrationCountry"
35
- :value="member.registrationCountry.nameRu"
71
+ :value="member.registrationCountry?.nameRu"
36
72
  :label="$dataStore.t('form.Country')"
73
+ :readonly="disabled"
74
+ :clearable="!disabled"
37
75
  :rules="$rules.objectRequired"
38
76
  append-inner-icon="mdi mdi-chevron-right"
39
77
  @append="openPanel($dataStore.t('form.Country'), [], 'registrationCountry', $dataStore.getCountries)"
@@ -42,16 +80,20 @@
42
80
  <div class="flex flex-col gap-[1px]" v-if="member.registrationCountry.nameRu === 'Казахстан' || member.registrationCountry.nameRu === null">
43
81
  <base-panel-input
44
82
  v-model="member.registrationProvince"
45
- :value="member.registrationProvince.nameRu"
83
+ :value="member.registrationProvince?.nameRu"
46
84
  :label="$dataStore.t('form.Province')"
85
+ :readonly="disabled"
86
+ :clearable="!disabled"
47
87
  :rules="$rules.objectRequired"
48
88
  append-inner-icon="mdi mdi-chevron-right"
49
89
  @append="openPanel($dataStore.t('form.Province'), [], 'registrationProvince', $dataStore.getStates, 'registrationCountry')"
50
90
  />
51
91
  <base-panel-input
52
92
  v-model="member.registrationRegionType"
53
- :value="member.registrationRegionType.nameRu"
93
+ :value="member.registrationRegionType?.nameRu"
54
94
  :label="$dataStore.t('form.RegionType')"
95
+ :readonly="disabled"
96
+ :clearable="!disabled"
55
97
  :rules="$rules.objectRequired"
56
98
  append-inner-icon="mdi mdi-chevron-right"
57
99
  @append="openPanel($dataStore.t('form.RegionType'), [], 'registrationRegionType', $dataStore.getLocalityTypes)"
@@ -59,58 +101,62 @@
59
101
  <base-panel-input
60
102
  v-if="member.registrationRegionType.nameRu !== 'город'"
61
103
  v-model="member.registrationRegion"
62
- :value="member.registrationRegion.nameRu"
104
+ :value="member.registrationRegion?.nameRu"
63
105
  :label="$dataStore.t('form.Region')"
106
+ :readonly="disabled"
107
+ :clearable="!disabled"
64
108
  :rules="$rules.objectRequired"
65
109
  append-inner-icon="mdi mdi-chevron-right"
66
110
  @append="openPanel($dataStore.t('form.Region'), [], 'registrationRegion', $dataStore.getRegions, 'registrationProvince')"
67
111
  />
68
112
  <base-panel-input
69
113
  v-model="member.registrationCity"
70
- :value="member.registrationCity.nameRu"
114
+ :value="member.registrationCity?.nameRu"
71
115
  :label="$dataStore.t('form.City')"
116
+ :readonly="disabled"
117
+ :clearable="!disabled"
72
118
  :rules="$rules.objectRequired"
73
119
  append-inner-icon="mdi mdi-chevron-right"
74
120
  @append="openPanel($dataStore.t('form.City'), [], 'registrationCity', $dataStore.getCities, 'registrationProvince')"
75
121
  />
76
- <base-form-input v-model.trim="member.registrationQuarter" :label="$dataStore.t('form.Quarter')" />
77
- <base-form-input v-model.trim="member.registrationMicroDistrict" :label="$dataStore.t('form.MicroDistrict')" />
78
- <base-form-input v-model.trim="member.registrationStreet" :rules="$rules.required" :label="$dataStore.t('form.Street')" />
79
- <base-form-input v-model.trim="member.registrationNumberHouse" :rules="$rules.required" :label="$dataStore.t('form.NumberHouse')" />
80
- <base-form-input v-model.trim="member.registrationNumberApartment" :label="$dataStore.t('form.NumberApartment')" />
122
+ <base-form-input v-model.trim="member.registrationQuarter" :label="$dataStore.t('form.Quarter')" :readonly="disabled" :clearable="!disabled" />
123
+ <base-form-input v-model.trim="member.registrationMicroDistrict" :label="$dataStore.t('form.MicroDistrict')" :readonly="disabled" :clearable="!disabled" />
124
+ <base-form-input v-model.trim="member.registrationStreet" :rules="$rules.required" :label="$dataStore.t('form.Street')" :readonly="disabled" :clearable="!disabled" />
125
+ <base-form-input
126
+ v-model.trim="member.registrationNumberHouse"
127
+ :rules="$rules.required"
128
+ :label="$dataStore.t('form.NumberHouse')"
129
+ :readonly="disabled"
130
+ :clearable="!disabled"
131
+ />
132
+ <base-form-input v-model.trim="member.registrationNumberApartment" :label="$dataStore.t('form.NumberApartment')" :readonly="disabled" :clearable="!disabled" />
81
133
  </div>
82
134
  </base-fade-transition>
83
135
  </base-form-section>
84
136
  <base-form-section :title="$dataStore.t('form.birthData')">
85
137
  <base-panel-input
86
138
  v-model="member.birthPlace"
87
- :value="member.birthPlace.nameRu"
139
+ :value="member.birthPlace?.nameRu"
88
140
  :label="$dataStore.t('form.Country')"
141
+ :readonly="disabled"
142
+ :clearable="!disabled"
89
143
  :rules="$rules.objectRequired"
90
144
  append-inner-icon="mdi mdi-chevron-right"
91
145
  @append="openPanel($dataStore.t('form.Country'), [], 'birthPlace', $dataStore.getCountries)"
92
146
  />
93
- <!-- TODO -->
94
- <!-- <base-panel-input
95
- v-model="member.birthRegion"
96
- :value="member.birthRegion.nameRu"
97
- :label="$dataStore.t('form.Region')"
98
-
99
- :rules="$rules.objectRequired"
100
- append-inner-icon="mdi mdi-chevron-right"
101
- @append="openPanel($dataStore.t('form.Region'), [], 'birthRegion', $dataStore.getRegions)"
102
- /> -->
103
147
  </base-form-section>
104
148
  <base-form-section :title="$dataStore.t('form.documentData')">
105
149
  <base-panel-input
106
150
  v-model="member.documentType"
107
- :value="member.documentType.nameRu"
151
+ :value="member.documentType?.nameRu"
108
152
  :label="$dataStore.t('form.documentType')"
153
+ :readonly="disabled"
154
+ :clearable="!disabled"
109
155
  :rules="$rules.objectRequired"
110
156
  append-inner-icon="mdi mdi-chevron-right"
111
157
  @append="openPanel($dataStore.t('form.documentType'), [], 'documentType', $dataStore.getDocumentTypes)"
112
158
  />
113
- <base-form-input v-model.trim="member.documentNumber" :label="$dataStore.t('form.documentNumber')" :rules="$rules.required" />
159
+ <base-form-input v-model.trim="member.documentNumber" :label="$dataStore.t('form.documentNumber')" :readonly="disabled" :clearable="!disabled" :rules="$rules.required" />
114
160
  <!-- <base-file-input v-if="!memberDocument" :disabled="isDisabled" :clearable="!isDisabled" @input="attachFile($event)" />
115
161
  <base-empty-form-field v-if="memberDocument" @click="!isDisabled && openCustomPanel('document')" class="justify-between">
116
162
  {{ `${memberDocument.fileTypeName} - ${memberDocument.fileName}` }}
@@ -118,8 +164,10 @@
118
164
  </base-empty-form-field> -->
119
165
  <base-panel-input
120
166
  v-model="member.documentIssuers"
121
- :value="member.documentIssuers.nameRu"
167
+ :value="member.documentIssuers?.nameRu"
122
168
  :label="$dataStore.t('form.documentIssuers')"
169
+ :readonly="disabled"
170
+ :clearable="!disabled"
123
171
  :rules="$rules.objectRequired"
124
172
  append-inner-icon="mdi mdi-chevron-right"
125
173
  @append="openPanel($dataStore.t('form.documentIssuers'), [], 'documentIssuers', $dataStore.getDocumentIssuers)"
@@ -128,6 +176,8 @@
128
176
  v-model="member.documentDate"
129
177
  :label="$dataStore.t('form.documentDate')"
130
178
  :rules="$rules.required.concat($rules.date)"
179
+ :readonly="disabled"
180
+ :clearable="!disabled"
131
181
  :maska="$maska.date"
132
182
  append-inner-icon="mdi mdi-calendar-blank-outline"
133
183
  />
@@ -136,6 +186,8 @@
136
186
  v-if="member.documentType.ids !== 'SBI' && member.documentType.ids !== 'VNZ'"
137
187
  v-model="member.documentExpire"
138
188
  :label="$dataStore.t('form.documentExpire')"
189
+ :readonly="disabled"
190
+ :clearable="!disabled"
139
191
  :rules="$rules.required.concat($rules.date)"
140
192
  :maska="$maska.date"
141
193
  append-inner-icon="mdi mdi-calendar-blank-outline"
@@ -143,16 +195,20 @@
143
195
  </base-fade-transition>
144
196
  <base-panel-input
145
197
  v-model="member.signOfResidency"
146
- :value="member.signOfResidency.nameRu"
198
+ :value="member.signOfResidency?.nameRu"
147
199
  :label="$dataStore.t('form.signOfResidency')"
200
+ :readonly="disabled"
201
+ :clearable="!disabled"
148
202
  :rules="$rules.objectRequired"
149
203
  append-inner-icon="mdi mdi-chevron-right"
150
204
  @append="openPanel($dataStore.t('form.signOfResidency'), [], 'signOfResidency', $dataStore.getResidents)"
151
205
  />
152
206
  <base-panel-input
153
207
  v-model="member.countryOfTaxResidency"
154
- :value="member.countryOfTaxResidency.nameRu"
208
+ :value="member.countryOfTaxResidency?.nameRu"
155
209
  :label="$dataStore.t('form.countryOfTaxResidency')"
210
+ :readonly="disabled"
211
+ :clearable="!disabled"
156
212
  :rules="$rules.objectRequired"
157
213
  append-inner-icon="mdi mdi-chevron-right"
158
214
  @append="openPanel($dataStore.t('form.countryOfTaxResidency'), [], 'countryOfTaxResidency', $dataStore.getTaxCountries)"
@@ -161,8 +217,10 @@
161
217
  <base-panel-input
162
218
  v-if="member.countryOfTaxResidency.ids === '500014.3'"
163
219
  v-model="member.addTaxResidency"
164
- :value="member.addTaxResidency.nameRu"
220
+ :value="member.addTaxResidency?.nameRu"
165
221
  :label="$dataStore.t('form.addTaxResidency')"
222
+ :readonly="disabled"
223
+ :clearable="!disabled"
166
224
  :rules="$rules.objectRequired"
167
225
  append-inner-icon="mdi mdi-chevron-right"
168
226
  @append="openPanel($dataStore.t('form.addTaxResidency'), [], 'addTaxResidency', $dataStore.getAdditionalTaxCountries)"
@@ -170,28 +228,40 @@
170
228
  </base-fade-transition>
171
229
  <base-panel-input
172
230
  v-model="member.countryOfCitizenship"
173
- :value="member.countryOfCitizenship.nameRu"
231
+ :value="member.countryOfCitizenship?.nameRu"
174
232
  :label="$dataStore.t('form.countryOfCitizenship')"
233
+ :readonly="disabled"
234
+ :clearable="!disabled"
175
235
  :rules="$rules.objectRequired"
176
236
  append-inner-icon="mdi mdi-chevron-right"
177
237
  @append="openPanel($dataStore.t('form.countryOfCitizenship'), [], 'countryOfCitizenship', $dataStore.getCitizenshipCountries)"
178
238
  />
179
239
  <base-panel-input
180
240
  v-model="member.economySectorCode"
181
- :value="member.economySectorCode.nameRu"
241
+ :value="member.economySectorCode?.nameRu"
182
242
  :label="$dataStore.t('form.economySectorCode')"
243
+ :readonly="disabled"
244
+ :clearable="!disabled"
183
245
  :rules="$rules.objectRequired"
184
246
  append-inner-icon="mdi mdi-chevron-right"
185
247
  @append="openPanel($dataStore.t('form.economySectorCode'), [], 'economySectorCode', $dataStore.getSectorCodeList)"
186
248
  />
187
249
  </base-form-section>
188
250
  <base-form-section :title="$dataStore.t('form.contactsData')">
189
- <base-form-input v-model="member.homePhone" :maska="$maska.phone" placeholder="+7 7" :label="$dataStore.t('form.homePhone')" :rules="$rules.phoneFormat" />
190
- <base-form-input v-model.trim="member.email" :label="$dataStore.t('form.email')" :rules="$rules.email" />
251
+ <base-form-input
252
+ v-model="member.homePhone"
253
+ :maska="$maska.phone"
254
+ placeholder="+7 7"
255
+ :label="$dataStore.t('form.homePhone')"
256
+ :readonly="disabled"
257
+ :clearable="!disabled"
258
+ :rules="$rules.phoneFormat"
259
+ />
260
+ <base-form-input v-model.trim="member.email" :label="$dataStore.t('form.email')" :readonly="disabled" :clearable="!disabled" :rules="$rules.email" />
191
261
  </base-form-section>
192
262
  </v-form>
193
- <base-btn v-if="showSaveButton" :loading="isButtonLoading" :text="$dataStore.t('buttons.save')" @click="submitForm" />
194
- <Teleport v-if="isPanelOpen" to="#panel-actions">
263
+ <base-btn v-if="showSaveButton && !disabled" :loading="isButtonLoading" :text="$dataStore.t('buttons.save')" @click="submitForm" />
264
+ <Teleport v-if="isPanelOpen" to="#right-panel-actions">
195
265
  <div :class="[$styles.scrollPage]" class="relative flex flex-col items-center">
196
266
  <i
197
267
  v-if="type === 'panel'"
@@ -217,7 +287,7 @@
217
287
  </template>
218
288
 
219
289
  <script lang="ts">
220
- import { StoreMembers } from 'types/enum';
290
+ import { StoreMembers } from '../../types/enum';
221
291
  import { Member, Value } from '../../composables/classes';
222
292
 
223
293
  export default defineComponent({
@@ -234,6 +304,10 @@ export default defineComponent({
234
304
  type: String as PropType<'contragent' | keyof typeof StoreMembers>,
235
305
  default: 'contragent',
236
306
  },
307
+ disabled: {
308
+ type: Boolean,
309
+ default: false,
310
+ },
237
311
  },
238
312
  emits: ['success'],
239
313
  setup(props, { emit }) {
@@ -270,8 +344,8 @@ export default defineComponent({
270
344
  isPanelOpen.value = true;
271
345
  dataStore.panelAction = null;
272
346
  if (props.type === 'default') {
273
- dataStore.panel.open = true;
274
- dataStore.panel.title = title;
347
+ dataStore.rightPanel.open = true;
348
+ dataStore.rightPanel.title = title;
275
349
  }
276
350
 
277
351
  let newList = list;
@@ -289,7 +363,7 @@ export default defineComponent({
289
363
 
290
364
  const pickPanelValue = (item: Value) => {
291
365
  if (props.type === 'default') {
292
- dataStore.panel.open = false;
366
+ dataStore.rightPanel.open = false;
293
367
  }
294
368
  showForm.value = true;
295
369
  isPanelOpen.value = false;
@@ -389,9 +463,9 @@ export default defineComponent({
389
463
  );
390
464
 
391
465
  watch(
392
- () => dataStore.panel.open,
466
+ () => dataStore.rightPanel.open,
393
467
  () => {
394
- if (dataStore.panel.open === false) {
468
+ if (dataStore.rightPanel.open === false) {
395
469
  isPanelOpen.value = false;
396
470
  dataStore.panelAction = null;
397
471
  }
@@ -1,5 +1,15 @@
1
1
  <template>
2
2
  <section class="w-full px-[10px] pt-[14px] flex flex-col gap-2" :class="[$styles.scrollPage]" v-if="formStore.signedDocumentList && formStore.signedDocumentList.length">
3
+ <base-content-block
4
+ v-if="$dataStore.isInitiator() && $dataStore.controls.hasChooseSign && formStore.applicationData.statusCode === 'ContractSignedFrom'"
5
+ :class="[$styles.textSimple]"
6
+ >
7
+ <h5 class="text-center font-medium mb-4">{{ $dataStore.t('Contract') }}</h5>
8
+ <base-form-input v-model="formStore.documentName" :label="$dataStore.t('form.document')" :readonly="true" />
9
+ <base-form-input v-model="formStore.policyNumber" :label="$dataStore.t('form.documentNumber')" :readonly="true" />
10
+ <base-form-input v-model="formStore.contractDate" :label="$dataStore.t('form.date')" :readonly="true" append-inner-icon="mdi mdi-calendar-blank-outline" />
11
+ <base-file-input :readonly="isDisabled" @input.prevent="onFileChange($event)" />
12
+ </base-content-block>
3
13
  <base-content-block v-for="document of formStore.signedDocumentList" :key="document.id" :class="[$styles.textSimple]">
4
14
  <h5 class="text-center font-medium mb-4">
5
15
  {{ document.fileTypeName }}
@@ -14,8 +24,27 @@
14
24
  </div>
15
25
  </base-content-block>
16
26
  </section>
17
- <base-list-empty v-else />
18
- <Teleport v-if="$dataStore.panelAction === null" to="#panel-actions">
27
+ <div v-else class="h-[calc(90vh-70px)] flex flex-col items-center justify-center gap-6">
28
+ <svg xmlns="http://www.w3.org/2000/svg" width="125" height="131" viewBox="0 0 125 131" fill="none" class="cursor-help">
29
+ <path
30
+ fill-rule="evenodd"
31
+ clip-rule="evenodd"
32
+ d="M71.0404 15.5H34.8737C29.8801 15.5 25.832 19.6638 25.832 24.8V99.2C25.832 104.336 29.8801 108.5 34.8737 108.5H89.1237C94.1173 108.5 98.1654 104.336 98.1654 99.2V43.4L71.0404 15.5Z"
33
+ stroke="#009C73"
34
+ stroke-width="6"
35
+ stroke-linecap="round"
36
+ stroke-linejoin="round"
37
+ />
38
+ <path d="M72.332 20.6641V41.3307H92.9987" stroke="#009C73" stroke-width="6" stroke-linecap="round" stroke-linejoin="round" />
39
+ <path opacity="0.497024" d="M82.6654 67.1641H41.332" stroke="#009C73" stroke-width="6" stroke-linecap="round" stroke-linejoin="round" />
40
+ <path opacity="0.497024" d="M82.6654 87.8359H41.332" stroke="#009C73" stroke-width="6" stroke-linecap="round" stroke-linejoin="round" />
41
+ <path opacity="0.497024" d="M51.6654 46.5H46.4987H41.332" stroke="#009C73" stroke-width="6" stroke-linecap="round" stroke-linejoin="round" />
42
+ <circle cx="102" cy="108" r="22.5" fill="#FCB016" stroke="#F1F2F6" />
43
+ <path d="M103.375 95.625V109.375H92.375" stroke="white" stroke-linecap="round" stroke-linejoin="round" />
44
+ </svg>
45
+ <p class="text-xl" :class="[$styles.mutedText]">{{ $dataStore.t('labels.noDocuments') }}</p>
46
+ </div>
47
+ <Teleport v-if="$dataStore.panelAction === null" to="#right-panel-actions">
19
48
  <base-fade-transition>
20
49
  <div :class="[$styles.flexColNav]">
21
50
  <base-btn :disabled="documentLoading" :loading="documentLoading" text="Открыть" @click="getFile('view')" />
@@ -35,6 +64,19 @@ export default defineComponent({
35
64
  const currentDocument = ref<DocumentItem>(new DocumentItem());
36
65
  const documentLoading = ref<boolean>(false);
37
66
 
67
+ const isDisabled = computed(() => !dataStore.isTask());
68
+ const contractDict = computed(() => dataStore.dicFileTypeList.find(i => i.nameRu === 'Договор страхования' || i.nameRu === 'Договор'));
69
+ const signedContract = reactive<{
70
+ processInstanceId: string | number;
71
+ fileTypeId: string | number | null;
72
+ fileTypeCode: string | number | null;
73
+ fileName?: string | number | null;
74
+ }>({
75
+ processInstanceId: formStore.applicationData.processInstanceId,
76
+ fileTypeId: contractDict.value ? contractDict.value.id : '',
77
+ fileTypeCode: contractDict.value ? contractDict.value.code : '',
78
+ });
79
+ const signedContractFormData = ref(new FormData());
38
80
  const currentState = reactive<{ action: string; text: string }>({
39
81
  action: '',
40
82
  text: '',
@@ -50,10 +92,29 @@ export default defineComponent({
50
92
  );
51
93
 
52
94
  const openPanel = async (document: DocumentItem) => {
53
- dataStore.panelAction = null;
54
- dataStore.panel.title = document.fileTypeName!;
95
+ dataStore.rightPanel.title = document.fileTypeName!;
55
96
  currentDocument.value = document;
56
- dataStore.panel.open = true;
97
+ dataStore.rightPanel.open = true;
98
+ };
99
+
100
+ const onFileChange = async (event: InputEvent) => {
101
+ if (event.target) {
102
+ const files = (event.target as HTMLInputElement).files;
103
+ if (files && files.length && files[0].name !== signedContract.fileName) {
104
+ if (files[0].size >= 20_000_000) {
105
+ return dataStore.showToaster('error', dataStore.t('toaster.fileOnlyBelow20mb'), 6000);
106
+ }
107
+ if (files[0].type !== 'application/pdf') {
108
+ return dataStore.showToaster('error', dataStore.t('toaster.onlyPDF'), 6000);
109
+ }
110
+ signedContract.fileName = files[0].name;
111
+ formStore.documentName = signedContract.fileName;
112
+ signedContractFormData.value.append('file', files[0]);
113
+ signedContractFormData.value.append('fileData', JSON.stringify([signedContract]));
114
+ formStore.signedContractFormData = signedContractFormData.value;
115
+ formStore.isUploadedSignedContract = true;
116
+ }
117
+ }
57
118
  };
58
119
 
59
120
  watch(
@@ -89,8 +150,7 @@ export default defineComponent({
89
150
  onInit();
90
151
 
91
152
  onUnmounted(() => {
92
- dataStore.panel.open = false;
93
- dataStore.panelAction = null;
153
+ dataStore.rightPanel.open = false;
94
154
  });
95
155
 
96
156
  return {
@@ -98,10 +158,15 @@ export default defineComponent({
98
158
  formStore,
99
159
  documentLoading,
100
160
  DocumentItem,
161
+ signedContract,
162
+
163
+ // Computed
164
+ isDisabled,
101
165
 
102
166
  // Functions
103
167
  openPanel,
104
168
  getFile,
169
+ onFileChange,
105
170
  };
106
171
  },
107
172
  });
@@ -8,7 +8,7 @@
8
8
  </lazy-base-form-section>
9
9
  <lazy-base-form-section v-if="invoiceData.paymentLink && invoiceData.status !== 1" :title="$dataStore.t('labels.epayPage')" class="flex items-center">
10
10
  <div class="w-full lg:w-[70%] bg-white">
11
- <iframe :src="invoiceData.paymentLink" frameborder="0" class="w-full h-[70vh]"></iframe>
11
+ <iframe :src="invoiceData.paymentLink" frameborder="0" class="w-full h-[70svh]"></iframe>
12
12
  </div>
13
13
  </lazy-base-form-section>
14
14
  </section>