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

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 +1042 -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 +43 -7
  16. package/components/Input/DynamicInput.vue +23 -0
  17. package/components/Input/FileInput.vue +25 -5
  18. package/components/Input/FormInput.vue +7 -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 +18 -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 +50 -9
  33. package/components/Pages/ContragentForm.vue +124 -50
  34. package/components/Pages/Documents.vue +179 -29
  35. package/components/Pages/InvoiceInfo.vue +1 -1
  36. package/components/Pages/MemberForm.vue +605 -116
  37. package/components/Pages/ProductAgreement.vue +1 -8
  38. package/components/Pages/ProductConditions.vue +1055 -183
  39. package/components/Panel/PanelHandler.vue +583 -46
  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 +456 -8
  46. package/composables/constants.ts +114 -2
  47. package/composables/fields.ts +328 -0
  48. package/composables/index.ts +270 -19
  49. package/composables/styles.ts +29 -16
  50. package/layouts/default.vue +48 -3
  51. package/locales/ru.json +547 -14
  52. package/package.json +28 -24
  53. package/pages/Token.vue +1 -12
  54. package/plugins/vuetifyPlugin.ts +2 -0
  55. package/store/data.store.ts +1463 -275
  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 +83 -5
  60. package/types/enum.ts +61 -0
  61. package/types/env.d.ts +1 -0
  62. package/types/form.ts +94 -0
  63. package/types/index.ts +259 -23
@@ -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,28 +1,124 @@
1
1
  <template>
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 v-for="document of formStore.signedDocumentList" :key="document.id" :class="[$styles.textSimple]">
4
- <h5 class="text-center font-medium mb-4">
5
- {{ document.fileTypeName }}
6
- </h5>
7
- <div :class="[$styles.whiteBg, $styles.rounded]" class="p-2 h-12 flex items-center relative">
8
- <span class="ml-2">{{ document.fileName }}</span>
9
- <i
10
- class="transition-all cursor-pointer mdi mdi-dots-vertical pl-2 mr-3 border-l-[1px] text-xl absolute right-0"
11
- :class="[$styles.greenTextHover]"
12
- @click="openPanel(document)"
13
- ></i>
14
- </div>
15
- </base-content-block>
2
+ <section :class="[$styles.scrollPage]">
3
+ <section class="w-full px-[10px] pt-[14px] flex flex-col gap-2" v-if="formStore.signedDocumentList && formStore.signedDocumentList.length">
4
+ <base-content-block
5
+ v-if="$dataStore.isInitiator() && $dataStore.controls.hasChooseSign && formStore.applicationData.statusCode === 'ContractSignedFrom'"
6
+ :class="[$styles.textSimple]"
7
+ >
8
+ <h5 class="text-center font-medium mb-4">{{ $dataStore.t('Contract') }}</h5>
9
+ <base-form-input v-model="formStore.documentName" :label="$dataStore.t('form.document')" :readonly="true" />
10
+ <base-form-input v-model="formStore.policyNumber" :label="$dataStore.t('form.documentNumber')" :readonly="true" />
11
+ <base-form-input v-model="formStore.contractDate" :label="$dataStore.t('form.date')" :readonly="true" append-inner-icon="mdi mdi-calendar-blank-outline" />
12
+ <base-file-input :readonly="isDisabled" @input.prevent="onFileChange($event)" />
13
+ </base-content-block>
14
+ <base-content-block v-for="document of formStore.signedDocumentList" :key="document.id" :class="[$styles.textSimple]">
15
+ <h5 class="text-center font-medium mb-4">
16
+ {{ document.fileTypeName }}
17
+ </h5>
18
+ <div :class="[$styles.whiteBg, $styles.rounded]" class="p-2 h-12 flex items-center relative">
19
+ <span class="ml-2">{{ document.fileName }}</span>
20
+ <i
21
+ class="transition-all cursor-pointer mdi mdi-dots-vertical pl-2 mr-3 border-l-[1px] text-xl absolute right-0"
22
+ :class="[$styles.greenTextHover]"
23
+ @click="openPanel(document)"
24
+ ></i>
25
+ </div>
26
+ </base-content-block>
27
+ </section>
28
+ <div
29
+ v-if="(!formStore.signedDocumentList || !formStore.signedDocumentList.length) && !$dataStore.isPension"
30
+ class="h-[calc(90vh-70px)] flex flex-col items-center justify-center gap-6"
31
+ >
32
+ <svg xmlns="http://www.w3.org/2000/svg" width="125" height="131" viewBox="0 0 125 131" fill="none" class="cursor-help">
33
+ <path
34
+ fill-rule="evenodd"
35
+ clip-rule="evenodd"
36
+ 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"
37
+ stroke="#009C73"
38
+ stroke-width="6"
39
+ stroke-linecap="round"
40
+ stroke-linejoin="round"
41
+ />
42
+ <path d="M72.332 20.6641V41.3307H92.9987" stroke="#009C73" stroke-width="6" stroke-linecap="round" stroke-linejoin="round" />
43
+ <path opacity="0.497024" d="M82.6654 67.1641H41.332" stroke="#009C73" stroke-width="6" stroke-linecap="round" stroke-linejoin="round" />
44
+ <path opacity="0.497024" d="M82.6654 87.8359H41.332" stroke="#009C73" stroke-width="6" stroke-linecap="round" stroke-linejoin="round" />
45
+ <path opacity="0.497024" d="M51.6654 46.5H46.4987H41.332" stroke="#009C73" stroke-width="6" stroke-linecap="round" stroke-linejoin="round" />
46
+ <circle cx="102" cy="108" r="22.5" fill="#FCB016" stroke="#F1F2F6" />
47
+ <path d="M103.375 95.625V109.375H92.375" stroke="white" stroke-linecap="round" stroke-linejoin="round" />
48
+ </svg>
49
+ <p class="text-xl" :class="[$styles.mutedText]">{{ $dataStore.t('labels.noDocuments') }}</p>
50
+ </div>
51
+ <section class="w-full px-[10px] pt-[14px] flex flex-col gap-2" v-if="$dataStore.isPension">
52
+ <base-content-block :class="[$styles.textSimple]">
53
+ <h5 class="text-center font-medium mb-4">{{ $dataStore.t('labels.statements') }}</h5>
54
+ <div :class="[$styles.whiteBg, $styles.rounded]" class="p-2 h-12 flex items-center relative">
55
+ <span class="ml-2">Заявления на {{ processCode == 1 ? 'страхование' : 'возврат' }}</span>
56
+ <i
57
+ class="transition-all cursor-pointer mdi mdi-paperclip pl-2 mr-3 border-l-[1px] text-xl absolute right-0"
58
+ :class="[$styles.greenTextHover]"
59
+ @click="$dataStore.generatePDFDocument(processCode == 1 ? 'PA_Statement' : 'PA_RefundStatement', '37')"
60
+ ></i>
61
+ </div>
62
+ </base-content-block>
63
+ <base-content-block :class="[$styles.textSimple]">
64
+ <h5 class="text-center font-medium mb-4">{{ $dataStore.t('labels.contract') }}</h5>
65
+ <div :class="[$styles.whiteBg, $styles.rounded]" class="p-2 h-12 flex items-center relative">
66
+ <span class="ml-2">Договор {{ processCode == 1 ? 'страхования' : 'возврата' }}</span>
67
+ <i
68
+ class="transition-all cursor-pointer mdi mdi-paperclip pl-2 mr-3 border-l-[1px] text-xl absolute right-0"
69
+ :class="[$styles.greenTextHover]"
70
+ @click="$dataStore.generatePDFDocument(processCode == 1 ? 'PA_Contract' : 'PA_RefundAgreement', '38')"
71
+ ></i>
72
+ </div>
73
+ </base-content-block>
74
+ <base-content-block :class="[$styles.textSimple]" v-if="formStore.applicationData.statusCode !== 'StartForm' && processCode == 1">
75
+ <h5 class="text-center font-medium mb-4">{{ $dataStore.t('pension.complianceFinMonitoring') }}</h5>
76
+ <div :class="[$styles.whiteBg, $styles.rounded]" class="p-2 h-12 flex items-center relative">
77
+ <span class="ml-2">{{ $dataStore.t('pension.complianceFinMonitoring') }}</span>
78
+ <i
79
+ class="transition-all cursor-pointer mdi mdi-paperclip pl-2 mr-3 border-l-[1px] text-xl absolute right-0"
80
+ :class="[$styles.greenTextHover]"
81
+ @click="$dataStore.generatePDFDocument('Compliance_FinMonitoring', '39')"
82
+ ></i>
83
+ </div>
84
+ </base-content-block>
85
+ <base-content-block :class="[$styles.textSimple]" v-if="formStore.applicationData.statusCode === 'PreparationDossierForm' && processCode == 1">
86
+ <h5 class="text-center font-medium mb-4">{{ $dataStore.t('pension.dossierPA') }}</h5>
87
+ <div :class="[$styles.whiteBg, $styles.rounded]" class="p-2 h-12 flex items-center relative">
88
+ <span class="ml-2">{{ $dataStore.t('pension.dossierPA') }}</span>
89
+ <i
90
+ class="transition-all cursor-pointer mdi mdi-paperclip pl-2 mr-3 border-l-[1px] text-xl absolute right-0"
91
+ :class="[$styles.greenTextHover]"
92
+ @click="$dataStore.generatePDFDocument('PA_Dossier', '40', 'doc')"
93
+ ></i>
94
+ </div>
95
+ </base-content-block>
96
+ </section>
97
+ <Teleport v-if="$dataStore.panelAction === null" to="#right-panel-actions">
98
+ <base-fade-transition>
99
+ <div :class="[$styles.flexColNav]">
100
+ <base-btn :disabled="documentLoading" :loading="documentLoading" text="Открыть" @click="getFile('view')" />
101
+ <base-btn :disabled="documentLoading" :loading="documentLoading" text="Скачать" @click="getFile('download')" />
102
+ <base-btn
103
+ v-if="$dataStore.isPension && $dataStore.isProcessEditable(formStore.applicationData.statusCode)"
104
+ :disabled="documentLoading"
105
+ :loading="documentLoading"
106
+ text="Удалить"
107
+ @click="deletionDialog = true"
108
+ />
109
+ </div>
110
+ </base-fade-transition>
111
+ </Teleport>
112
+ <base-dialog
113
+ v-model="deletionDialog"
114
+ :title="$dataStore.t('dialog.confirmDelete')"
115
+ :subtitle="$dataStore.t('dialog.deleteFile')"
116
+ :confirm="$dataStore.t('confirm.delete')"
117
+ :icon="{ mdi: 'delete-outline', color: '#FD2D39' }"
118
+ @yes="deleteFile"
119
+ @no="deletionDialog = false"
120
+ />
16
121
  </section>
17
- <base-list-empty v-else />
18
- <Teleport v-if="$dataStore.panelAction === null" to="#panel-actions">
19
- <base-fade-transition>
20
- <div :class="[$styles.flexColNav]">
21
- <base-btn :disabled="documentLoading" :loading="documentLoading" text="Открыть" @click="getFile('view')" />
22
- <base-btn :disabled="documentLoading" :loading="documentLoading" text="Скачать" @click="getFile('download')" />
23
- </div>
24
- </base-fade-transition>
25
- </Teleport>
26
122
  </template>
27
123
 
28
124
  <script lang="ts">
@@ -34,7 +130,21 @@ export default defineComponent({
34
130
  const formStore = useFormStore();
35
131
  const currentDocument = ref<DocumentItem>(new DocumentItem());
36
132
  const documentLoading = ref<boolean>(false);
37
-
133
+ const deletionDialog = ref<boolean>(false);
134
+ const isDisabled = computed(() => !dataStore.isTask());
135
+ const contractDict = computed(() => dataStore.dicFileTypeList.find(i => i.nameRu === 'Договор страхования' || i.nameRu === 'Договор'));
136
+ const processCode = formStore.applicationData.processCode;
137
+ const signedContract = reactive<{
138
+ processInstanceId: string | number;
139
+ fileTypeId: string | number | null;
140
+ fileTypeCode: string | number | null;
141
+ fileName?: string | number | null;
142
+ }>({
143
+ processInstanceId: formStore.applicationData.processInstanceId,
144
+ fileTypeId: contractDict.value ? contractDict.value.id : '',
145
+ fileTypeCode: contractDict.value ? contractDict.value.code : '',
146
+ });
147
+ const signedContractFormData = ref(new FormData());
38
148
  const currentState = reactive<{ action: string; text: string }>({
39
149
  action: '',
40
150
  text: '',
@@ -50,10 +160,29 @@ export default defineComponent({
50
160
  );
51
161
 
52
162
  const openPanel = async (document: DocumentItem) => {
53
- dataStore.panelAction = null;
54
- dataStore.panel.title = document.fileTypeName!;
163
+ dataStore.rightPanel.title = document.fileTypeName!;
55
164
  currentDocument.value = document;
56
- dataStore.panel.open = true;
165
+ dataStore.rightPanel.open = true;
166
+ };
167
+
168
+ const onFileChange = async (event: InputEvent) => {
169
+ if (event.target) {
170
+ const files = (event.target as HTMLInputElement).files;
171
+ if (files && files.length && files[0].name !== signedContract.fileName) {
172
+ if (files[0].size >= 20_000_000) {
173
+ return dataStore.showToaster('error', dataStore.t('toaster.fileOnlyBelow20mb'), 6000);
174
+ }
175
+ if (files[0].type !== 'application/pdf') {
176
+ return dataStore.showToaster('error', dataStore.t('toaster.onlyPDF'), 6000);
177
+ }
178
+ signedContract.fileName = files[0].name;
179
+ formStore.documentName = signedContract.fileName;
180
+ signedContractFormData.value.append('file', files[0]);
181
+ signedContractFormData.value.append('fileData', JSON.stringify([signedContract]));
182
+ formStore.signedContractFormData = signedContractFormData.value;
183
+ formStore.isUploadedSignedContract = true;
184
+ }
185
+ }
57
186
  };
58
187
 
59
188
  watch(
@@ -81,6 +210,20 @@ export default defineComponent({
81
210
  }
82
211
  };
83
212
 
213
+ const deleteFile = async () => {
214
+ if (currentDocument.value) {
215
+ const data = {
216
+ id: currentDocument.value.id,
217
+ processInstanceId: currentDocument.value.processInstanceId,
218
+ };
219
+ await dataStore.deleteFile(data);
220
+ deletionDialog.value = false;
221
+ dataStore.rightPanel.open = false;
222
+ dataStore.panelAction = null;
223
+ await dataStore.getSignedDocList(formStore.applicationData.processInstanceId);
224
+ }
225
+ };
226
+
84
227
  const onInit = async () => {
85
228
  await dataStore.getDicFileTypeList();
86
229
  await dataStore.getSignedDocList(formStore.applicationData.processInstanceId);
@@ -89,8 +232,7 @@ export default defineComponent({
89
232
  onInit();
90
233
 
91
234
  onUnmounted(() => {
92
- dataStore.panel.open = false;
93
- dataStore.panelAction = null;
235
+ dataStore.rightPanel.open = false;
94
236
  });
95
237
 
96
238
  return {
@@ -98,10 +240,18 @@ export default defineComponent({
98
240
  formStore,
99
241
  documentLoading,
100
242
  DocumentItem,
243
+ signedContract,
244
+ deletionDialog,
245
+ processCode,
246
+
247
+ // Computed
248
+ isDisabled,
101
249
 
102
250
  // Functions
103
251
  openPanel,
104
252
  getFile,
253
+ onFileChange,
254
+ deleteFile,
105
255
  };
106
256
  },
107
257
  });
@@ -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>