hl-core 0.0.10-beta.20 → 0.0.10-beta.21
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.
- package/api/base.api.ts +140 -134
- package/components/Dialog/Dialog.vue +5 -1
- package/components/Form/ManagerAttachment.vue +1 -4
- package/components/Input/RoundedSelect.vue +2 -0
- package/components/Pages/Anketa.vue +164 -166
- package/components/Pages/Documents.vue +1 -1
- package/components/Pages/MemberForm.vue +166 -28
- package/components/Pages/ProductConditions.vue +143 -72
- package/components/Panel/PanelHandler.vue +223 -104
- package/composables/classes.ts +28 -0
- package/composables/styles.ts +3 -8
- package/locales/ru.json +8 -2
- package/package.json +1 -1
- package/store/data.store.ts +110 -102
- package/types/enum.ts +12 -0
- package/types/index.ts +42 -0
|
@@ -1,181 +1,179 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
3
|
-
<section v-if="
|
|
4
|
-
<base-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
2
|
+
<section v-if="firstQuestionList && firstQuestionList.length && (isFirstPanelOnRight ? true : !firstPanel) && !secondPanel" class="flex flex-col shrink grow max-h-[85svh]">
|
|
3
|
+
<base-form-section v-if="$dataStore.isUnderwriter()" class="mx-[10px]">
|
|
4
|
+
<base-rounded-select v-model="filterType" class="w-[200px]" :items="filterItems" :label="$dataStore.t('labels.filter')" hide-details />
|
|
5
|
+
</base-form-section>
|
|
6
|
+
<section :class="[$styles.blueBgLight, $styles.rounded]" class="mx-[10px] my-[14px] p-4 flex flex-col gap-4">
|
|
7
|
+
<base-form-toggle
|
|
8
|
+
v-model="answerToAll"
|
|
9
|
+
:title="$dataStore.t('questionnaireType.answerAllNo')"
|
|
10
|
+
:disabled="formStore.isDisabled[whichSurvey] || !$dataStore.isTask()"
|
|
11
|
+
:has-border="false"
|
|
12
|
+
@clicked="handleToggler"
|
|
13
|
+
/>
|
|
14
|
+
</section>
|
|
15
|
+
<v-form ref="vForm" class="grow shrink overflow-y-scroll" @submit="submitForm">
|
|
16
|
+
<section
|
|
17
|
+
v-if="firstQuestionList.filter(i => i.first.definedAnswers === 'N').length"
|
|
18
|
+
:class="[$styles.blueBgLight, $styles.rounded]"
|
|
19
|
+
class="mx-[10px] p-4 flex flex-col gap-4"
|
|
20
|
+
>
|
|
21
|
+
<base-form-input
|
|
22
|
+
v-for="(question, index) in firstQuestionList.filter(i => i.first.definedAnswers === 'N')"
|
|
23
|
+
:key="index"
|
|
24
|
+
v-model="question.first.answerText"
|
|
25
|
+
:label="question.first.name"
|
|
26
|
+
:maska="$maska.threeDigit"
|
|
27
|
+
:readonly="formStore.isDisabled[whichSurvey] || !$dataStore.isTask()"
|
|
28
|
+
:rules="$rules.required"
|
|
14
29
|
/>
|
|
15
30
|
</section>
|
|
16
|
-
<
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
v-model="question.first.answerText"
|
|
26
|
-
:label="question.first.name"
|
|
27
|
-
:maska="$maska.threeDigit"
|
|
28
|
-
:readonly="formStore.isDisabled[whichSurvey] || !$dataStore.isTask()"
|
|
29
|
-
:rules="$rules.required"
|
|
30
|
-
/>
|
|
31
|
-
</section>
|
|
32
|
-
<section
|
|
33
|
-
v-if="firstQuestions.filter(i => i.first.definedAnswers === 'Y').length"
|
|
34
|
-
:class="[$styles.blueBgLight, $styles.rounded]"
|
|
35
|
-
class="mx-[10px] mt-[14px] p-4 flex flex-col gap-4"
|
|
36
|
-
>
|
|
37
|
-
<base-form-text-section
|
|
38
|
-
v-for="(question, index) in firstQuestions.filter(i => i.first.definedAnswers === 'Y')"
|
|
39
|
-
:key="index"
|
|
40
|
-
:class="[currentQuestion?.first.id === question.first.id && $dataStore.rightPanel.open ? $styles.greenBorder : '']"
|
|
41
|
-
>
|
|
42
|
-
<base-animation>
|
|
43
|
-
<div
|
|
44
|
-
v-if="question.first.answerName === 'Да' && question.second"
|
|
45
|
-
:class="[$styles.greenBg, $styles.whiteText, $styles.textSimple]"
|
|
46
|
-
class="rounded-t-lg pl-6 py-1 cursor-pointer"
|
|
47
|
-
@click="openFirstPanel(question)"
|
|
48
|
-
>
|
|
49
|
-
{{ $dataStore.t('questionnaireType.pleaseAnswer', { text: question.second.length }) }}
|
|
50
|
-
</div>
|
|
51
|
-
</base-animation>
|
|
52
|
-
<span :class="[$styles.textTitle]" class="border-b-[1px] border-b-[#F3F6FC] p-6 flex items-center justify-between">
|
|
53
|
-
{{ question.first.name }}
|
|
54
|
-
<base-animation>
|
|
55
|
-
<i
|
|
56
|
-
v-if="question.first.answerName === 'Да' && question.second && question.second.length"
|
|
57
|
-
class="mdi mdi-chevron-right text-2xl cursor-pointer"
|
|
58
|
-
@click="openFirstPanel(question)"
|
|
59
|
-
></i>
|
|
60
|
-
</base-animation>
|
|
61
|
-
</span>
|
|
62
|
-
<div class="flex items-center justify-start gap-5 px-4 pt-4" :class="[$styles.textSimple]">
|
|
63
|
-
<v-radio-group
|
|
64
|
-
v-model="question.first.answerName"
|
|
65
|
-
class="anketa-radio"
|
|
66
|
-
:true-icon="`mdi-radiobox-marked ${$styles.greenText}`"
|
|
67
|
-
false-icon="mdi-radiobox-blank text-[#636363]"
|
|
68
|
-
:rules="$rules.required"
|
|
69
|
-
:readonly="formStore.isDisabled[whichSurvey] || !$dataStore.isTask()"
|
|
70
|
-
inline
|
|
71
|
-
>
|
|
72
|
-
<v-radio label="Да" value="Да" />
|
|
73
|
-
<v-radio label="Нет" value="Нет" />
|
|
74
|
-
</v-radio-group>
|
|
75
|
-
</div>
|
|
76
|
-
</base-form-text-section>
|
|
77
|
-
</section>
|
|
78
|
-
<section
|
|
79
|
-
v-if="firstQuestions.filter(i => i.first.definedAnswers === 'D').length"
|
|
80
|
-
:class="[$styles.blueBgLight, $styles.rounded]"
|
|
81
|
-
class="mx-[10px] mt-[14px] p-4 flex flex-col gap-4"
|
|
31
|
+
<section
|
|
32
|
+
v-if="firstQuestions.filter(i => i.first.definedAnswers === 'Y').length"
|
|
33
|
+
:class="[$styles.blueBgLight, $styles.rounded]"
|
|
34
|
+
class="mx-[10px] mt-[14px] p-4 flex flex-col gap-4"
|
|
35
|
+
>
|
|
36
|
+
<base-form-text-section
|
|
37
|
+
v-for="(question, index) in firstQuestions.filter(i => i.first.definedAnswers === 'Y')"
|
|
38
|
+
:key="index"
|
|
39
|
+
:class="[currentQuestion?.first.id === question.first.id && $dataStore.rightPanel.open ? $styles.greenBorder : '']"
|
|
82
40
|
>
|
|
83
|
-
<base-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
v-model="question.first.answerName"
|
|
92
|
-
class="anketa-radio"
|
|
93
|
-
:true-icon="`mdi-radiobox-marked ${$styles.greenText}`"
|
|
94
|
-
false-icon="mdi-radiobox-blank text-[#636363]"
|
|
95
|
-
:rules="$rules.required"
|
|
96
|
-
:readonly="formStore.isDisabled[whichSurvey] || !$dataStore.isTask()"
|
|
97
|
-
inline
|
|
98
|
-
>
|
|
99
|
-
<v-radio label="Да" value="Да" />
|
|
100
|
-
<v-radio label="Нет" value="Нет" />
|
|
101
|
-
</v-radio-group>
|
|
41
|
+
<base-animation>
|
|
42
|
+
<div
|
|
43
|
+
v-if="question.first.answerName === 'Да' && question.second"
|
|
44
|
+
:class="[$styles.greenBg, $styles.whiteText, $styles.textSimple]"
|
|
45
|
+
class="rounded-t-lg pl-6 py-1 cursor-pointer"
|
|
46
|
+
@click="openFirstPanel(question)"
|
|
47
|
+
>
|
|
48
|
+
{{ $dataStore.t('questionnaireType.pleaseAnswer', { text: question.second.length }) }}
|
|
102
49
|
</div>
|
|
50
|
+
</base-animation>
|
|
51
|
+
<span :class="[$styles.textTitle]" class="border-b-[1px] border-b-[#F3F6FC] p-6 flex items-center justify-between">
|
|
52
|
+
{{ question.first.name }}
|
|
103
53
|
<base-animation>
|
|
104
|
-
<
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
:rules="$rules.required"
|
|
110
|
-
/>
|
|
111
|
-
</div>
|
|
54
|
+
<i
|
|
55
|
+
v-if="question.first.answerName === 'Да' && question.second && question.second.length"
|
|
56
|
+
class="mdi mdi-chevron-right text-2xl cursor-pointer"
|
|
57
|
+
@click="openFirstPanel(question)"
|
|
58
|
+
></i>
|
|
112
59
|
</base-animation>
|
|
113
|
-
</
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
<section
|
|
133
|
-
ref="firstPanelSection"
|
|
134
|
-
v-if="currentQuestion && currentQuestion.second && isFirstPanelOnRight ? false : firstPanel"
|
|
135
|
-
class="flex flex-col px-[10px] pb-[14px]"
|
|
136
|
-
:class="[$styles.scrollPage]"
|
|
137
|
-
>
|
|
138
|
-
<v-form
|
|
139
|
-
v-if="currentQuestion"
|
|
60
|
+
</span>
|
|
61
|
+
<div class="flex items-center justify-start gap-5 px-4 pt-4" :class="[$styles.textSimple]">
|
|
62
|
+
<v-radio-group
|
|
63
|
+
v-model="question.first.answerName"
|
|
64
|
+
class="anketa-radio"
|
|
65
|
+
:true-icon="`mdi-radiobox-marked ${$styles.greenText}`"
|
|
66
|
+
false-icon="mdi-radiobox-blank text-[#636363]"
|
|
67
|
+
:rules="$rules.required"
|
|
68
|
+
:readonly="formStore.isDisabled[whichSurvey] || !$dataStore.isTask()"
|
|
69
|
+
inline
|
|
70
|
+
>
|
|
71
|
+
<v-radio label="Да" value="Да" />
|
|
72
|
+
<v-radio label="Нет" value="Нет" />
|
|
73
|
+
</v-radio-group>
|
|
74
|
+
</div>
|
|
75
|
+
</base-form-text-section>
|
|
76
|
+
</section>
|
|
77
|
+
<section
|
|
78
|
+
v-if="firstQuestions.filter(i => i.first.definedAnswers === 'D').length"
|
|
140
79
|
:class="[$styles.blueBgLight, $styles.rounded]"
|
|
141
80
|
class="mx-[10px] mt-[14px] p-4 flex flex-col gap-4"
|
|
142
|
-
ref="vSecondaryForm"
|
|
143
|
-
@submit="submitSecondaryForm"
|
|
144
81
|
>
|
|
145
|
-
<base-form-text-section
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
class="border-t-[1px] border-t-[#F3F6FC]"
|
|
159
|
-
:placeholder="$dataStore.t('form.date')"
|
|
82
|
+
<base-form-text-section
|
|
83
|
+
v-for="(question, index) in firstQuestions.filter(i => i.first.definedAnswers === 'D')"
|
|
84
|
+
:key="index"
|
|
85
|
+
:class="[currentQuestion?.first.id === question.first.id && $dataStore.rightPanel.open ? $styles.greenBorder : '']"
|
|
86
|
+
>
|
|
87
|
+
<span :class="[$styles.textTitle]" class="border-b-[1px] border-b-[#F3F6FC] p-6 flex items-center justify-between"> {{ question.first.name }} </span>
|
|
88
|
+
<div class="flex items-center justify-start gap-5 px-4 pt-4" :class="[$styles.textSimple]">
|
|
89
|
+
<v-radio-group
|
|
90
|
+
v-model="question.first.answerName"
|
|
91
|
+
class="anketa-radio"
|
|
92
|
+
:true-icon="`mdi-radiobox-marked ${$styles.greenText}`"
|
|
93
|
+
false-icon="mdi-radiobox-blank text-[#636363]"
|
|
94
|
+
:rules="$rules.required"
|
|
160
95
|
:readonly="formStore.isDisabled[whichSurvey] || !$dataStore.isTask()"
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
96
|
+
inline
|
|
97
|
+
>
|
|
98
|
+
<v-radio label="Да" value="Да" />
|
|
99
|
+
<v-radio label="Нет" value="Нет" />
|
|
100
|
+
</v-radio-group>
|
|
165
101
|
</div>
|
|
166
|
-
<base-
|
|
167
|
-
v-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
102
|
+
<base-animation>
|
|
103
|
+
<div v-if="question.first.answerName === 'Да'" :class="[$styles.whiteText, $styles.textSimple]">
|
|
104
|
+
<base-form-input
|
|
105
|
+
v-model="question.first.answerText"
|
|
106
|
+
:label="$dataStore.t('labels.inDetails')"
|
|
107
|
+
:readonly="formStore.isDisabled[whichSurvey] || !$dataStore.isTask()"
|
|
108
|
+
:rules="$rules.required"
|
|
109
|
+
/>
|
|
110
|
+
</div>
|
|
111
|
+
</base-animation>
|
|
175
112
|
</base-form-text-section>
|
|
176
|
-
</
|
|
177
|
-
</
|
|
178
|
-
|
|
113
|
+
</section>
|
|
114
|
+
</v-form>
|
|
115
|
+
<div class="px-[14px]">
|
|
116
|
+
<base-btn
|
|
117
|
+
class="my-[14px] self-center"
|
|
118
|
+
:loading="isButtonLoading"
|
|
119
|
+
:disabled="formStore.isDisabled[whichSurvey] || !$dataStore.isTask()"
|
|
120
|
+
@click="submitForm"
|
|
121
|
+
:text="$dataStore.t('buttons.save')"
|
|
122
|
+
/>
|
|
123
|
+
</div>
|
|
124
|
+
</section>
|
|
125
|
+
<base-btn
|
|
126
|
+
v-if="currentQuestion && currentQuestion.second && currentQuestion.second.length && isFirstPanelOnRight ? false : firstPanel"
|
|
127
|
+
class="!absolute z-10 self-center w-[96%] bottom-0"
|
|
128
|
+
:text="$dataStore.t('buttons.save')"
|
|
129
|
+
@click="submitSecondaryForm"
|
|
130
|
+
/>
|
|
131
|
+
<section
|
|
132
|
+
ref="firstPanelSection"
|
|
133
|
+
v-if="currentQuestion && currentQuestion.second && isFirstPanelOnRight ? false : firstPanel"
|
|
134
|
+
class="flex flex-col px-[10px] pb-[14px]"
|
|
135
|
+
:class="[$styles.scrollPage]"
|
|
136
|
+
>
|
|
137
|
+
<v-form
|
|
138
|
+
v-if="currentQuestion"
|
|
139
|
+
:class="[$styles.blueBgLight, $styles.rounded]"
|
|
140
|
+
class="mx-[10px] mt-[14px] p-4 flex flex-col gap-4"
|
|
141
|
+
ref="vSecondaryForm"
|
|
142
|
+
@submit="submitSecondaryForm"
|
|
143
|
+
>
|
|
144
|
+
<base-form-text-section v-for="question in currentQuestion.second" :title="question.name" :key="question.name">
|
|
145
|
+
<div v-if="question.definedAnswers === 'N'">
|
|
146
|
+
<base-form-input
|
|
147
|
+
v-if="question.answerType === 'T' || question.answerType === 'N'"
|
|
148
|
+
v-model="question.answerText"
|
|
149
|
+
class="border-t-[1px] border-t-[#F3F6FC]"
|
|
150
|
+
:placeholder="$dataStore.t('labels.inputText')"
|
|
151
|
+
:readonly="formStore.isDisabled[whichSurvey] || !$dataStore.isTask()"
|
|
152
|
+
:rules="isSecondRequired ? $rules.required : []"
|
|
153
|
+
/>
|
|
154
|
+
<base-form-input
|
|
155
|
+
v-if="question.answerType === 'D'"
|
|
156
|
+
v-model="question.answerText"
|
|
157
|
+
class="border-t-[1px] border-t-[#F3F6FC]"
|
|
158
|
+
:placeholder="$dataStore.t('form.date')"
|
|
159
|
+
:readonly="formStore.isDisabled[whichSurvey] || !$dataStore.isTask()"
|
|
160
|
+
:rules="isSecondRequired ? $rules.date : []"
|
|
161
|
+
:maska="$maska.date"
|
|
162
|
+
append-inner-icon="mdi mdi-calendar-blank-outline"
|
|
163
|
+
/>
|
|
164
|
+
</div>
|
|
165
|
+
<base-panel-input
|
|
166
|
+
v-else
|
|
167
|
+
:class="[$styles.textTitle, $styles.greenText]"
|
|
168
|
+
:value="question.answerName ? question.answerName : 'Выбрать вариант ответа'"
|
|
169
|
+
:readonly="formStore.isDisabled[whichSurvey] || !$dataStore.isTask()"
|
|
170
|
+
:clearable="false"
|
|
171
|
+
:error-messages="isSecondRequired ? (question.answerName ? [] : ['Выбрать вариант ответа']) : []"
|
|
172
|
+
@click="openSecondPanel(question)"
|
|
173
|
+
></base-panel-input>
|
|
174
|
+
</base-form-text-section>
|
|
175
|
+
</v-form>
|
|
176
|
+
</section>
|
|
179
177
|
<Teleport v-if="secondPanel" to="#right-panel-actions">
|
|
180
178
|
<div :class="[$styles.scrollPage]" class="flex flex-col items-center">
|
|
181
179
|
<base-rounded-input v-model="searchQuery" :label="$dataStore.t('labels.search')" class="w-full p-2" :hide-details="true" />
|
|
@@ -234,7 +232,7 @@
|
|
|
234
232
|
</v-form>
|
|
235
233
|
</div>
|
|
236
234
|
</Teleport>
|
|
237
|
-
<base-scroll-buttons v-if="firstQuestionList && firstQuestionList.length" @up="scrollForm('up')" @down="scrollForm('down')" />
|
|
235
|
+
<base-scroll-buttons v-if="firstQuestionList && firstQuestionList.length" class="bottom-[20%]" @up="scrollForm('up')" @down="scrollForm('down')" />
|
|
238
236
|
</template>
|
|
239
237
|
|
|
240
238
|
<script lang="ts">
|
|
@@ -271,7 +271,7 @@ export default defineComponent({
|
|
|
271
271
|
(formStore.applicationData.statusCode === 'Completed' || formStore.applicationData.statusCode === 'PreparationDossierForm' || dataStore.isActuary()),
|
|
272
272
|
);
|
|
273
273
|
const noDocuments = computed(() => {
|
|
274
|
-
if (dataStore.isPension) return !showContract.value;
|
|
274
|
+
if (dataStore.isPension && (!formStore.signedDocumentList || !formStore.signedDocumentList.length)) return !showContract.value;
|
|
275
275
|
return !formStore.signedDocumentList || !formStore.signedDocumentList.length;
|
|
276
276
|
});
|
|
277
277
|
const isUnderwriterDocuments = computed(
|