hl-core 0.0.8-beta.4 → 0.0.8-beta.40
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/index.ts +117 -44
- package/api/interceptors.ts +17 -13
- package/components/Button/Btn.vue +1 -1
- package/components/Button/ScrollButtons.vue +2 -2
- package/components/Complex/Page.vue +1 -1
- package/components/Dialog/Dialog.vue +9 -39
- package/components/Dialog/FamilyDialog.vue +7 -4
- package/components/Form/FormBlock.vue +77 -33
- package/components/Form/FormSection.vue +4 -1
- package/components/Form/FormToggle.vue +2 -3
- package/components/Form/ManagerAttachment.vue +197 -0
- package/components/Form/ProductConditionsBlock.vue +60 -10
- package/components/Input/Datepicker.vue +6 -2
- package/components/Input/FileInput.vue +2 -2
- package/components/Input/FormInput.vue +29 -7
- package/components/Input/PanelInput.vue +7 -2
- package/components/Input/RoundedInput.vue +2 -2
- package/components/Input/RoundedSelect.vue +137 -0
- package/components/Layout/Drawer.vue +3 -2
- package/components/Layout/Header.vue +40 -4
- package/components/Layout/Loader.vue +1 -1
- package/components/Layout/SettingsPanel.vue +51 -13
- package/components/Menu/MenuHover.vue +30 -0
- package/components/Menu/MenuNav.vue +29 -13
- package/components/Menu/MenuNavItem.vue +6 -3
- package/components/Pages/Anketa.vue +51 -33
- package/components/Pages/Auth.vue +139 -46
- package/components/Pages/Documents.vue +6 -6
- package/components/Pages/InvoiceInfo.vue +30 -0
- package/components/Pages/MemberForm.vue +533 -292
- package/components/Pages/ProductAgreement.vue +4 -2
- package/components/Pages/ProductConditions.vue +509 -99
- package/components/Panel/PanelHandler.vue +93 -20
- package/components/Panel/PanelSelectItem.vue +1 -1
- package/components/Utilities/Chip.vue +27 -0
- package/components/Utilities/JsonViewer.vue +27 -0
- package/composables/axios.ts +1 -1
- package/composables/classes.ts +217 -97
- package/composables/constants.ts +26 -52
- package/composables/index.ts +80 -2
- package/composables/styles.ts +8 -3
- package/configs/i18n.ts +17 -0
- package/layouts/default.vue +6 -6
- package/locales/kz.json +585 -0
- package/locales/ru.json +587 -0
- package/nuxt.config.ts +9 -1
- package/package.json +41 -11
- package/pages/500.vue +2 -2
- package/pages/Token.vue +51 -0
- package/plugins/helperFunctionsPlugins.ts +3 -0
- package/plugins/storePlugin.ts +0 -1
- package/plugins/vuetifyPlugin.ts +8 -1
- package/store/data.store.ts +2649 -0
- package/store/form.store.ts +1 -1
- package/store/member.store.ts +164 -52
- package/store/{rules.js → rules.ts} +63 -25
- package/types/enum.ts +83 -0
- package/types/env.d.ts +10 -0
- package/types/index.ts +211 -7
- package/store/data.store.js +0 -2508
- package/store/messages.ts +0 -434
|
@@ -1,62 +1,93 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="pt-3 rounded-lg border-[1px]" :class="[$libStyles.whiteBg, disabled && $libStyles.disabled]">
|
|
3
3
|
<div class="ml-5">
|
|
4
|
-
<
|
|
4
|
+
<div class="flex justify-between mr-5">
|
|
5
|
+
<p :class="[$libStyles.textTitle, $libStyles.greenText]">{{ title }}</p>
|
|
6
|
+
<div
|
|
7
|
+
v-if="isMultiple && more && !isShort && isActionsAvailable"
|
|
8
|
+
:class="[$libStyles.blueBg, $libStyles.whiteText, $libStyles.textSimple, disabled ? $libStyles.disabled : 'cursor-pointer']"
|
|
9
|
+
class="lg:flex transition-all rounded-lg h-[36px] flex items-center font-medium justify-center opacity-50 hover:opacity-90 w-[120px]"
|
|
10
|
+
@click="!disabled && memberStore.addMember(whichForm)"
|
|
11
|
+
>
|
|
12
|
+
{{ $dataStore.t('buttons.add') }}
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
5
15
|
<p v-if="!!subtitle" :class="[$libStyles.greyText, $libStyles.textSimple]">{{ subtitle }}</p>
|
|
6
16
|
</div>
|
|
7
|
-
<div
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
<span :class="[$libStyles.textSimple]" class="font-medium">
|
|
12
|
-
<span :class="[$libStyles.textSimple]" class="font-medium
|
|
13
|
-
<span :class="[$libStyles.textSimple]" class="font-medium hidden lg:block"> {{ $t('
|
|
17
|
+
<div
|
|
18
|
+
class="ml-5 mt-6 grid auto-rows-fr items-center"
|
|
19
|
+
:class="[isShort ? 'grid-cols-2 md:gap-5 md:grid-cols-2 lg:grid-cols-2 mb-6' : 'grid-cols-4 md:gap-5 md:grid-cols-4 lg:grid-cols-7 ']"
|
|
20
|
+
>
|
|
21
|
+
<span :class="[$libStyles.textSimple]" class="font-medium">{{ $dataStore.t('form.fullName') }}</span>
|
|
22
|
+
<span :class="[$libStyles.textSimple]" class="font-medium">{{ $dataStore.t('form.iin') }}</span>
|
|
23
|
+
<span v-if="!isShort" :class="[$libStyles.textSimple]" class="font-medium hidden lg:block"> {{ $dataStore.t('form.gender') }}</span>
|
|
24
|
+
<span v-if="!isShort" :class="[$libStyles.textSimple]" class="font-medium"> {{ $dataStore.t('form.birthDate') }} </span>
|
|
25
|
+
<span v-if="!isShort" :class="[$libStyles.textSimple]" class="font-medium hidden lg:block">{{ $dataStore.t('form.Country') }} </span>
|
|
26
|
+
<span v-if="!isShort" :class="[$libStyles.textSimple]" class="font-medium hidden lg:block"> {{ $dataStore.t('code') }}</span>
|
|
14
27
|
</div>
|
|
15
|
-
<div v-if="isMultiple" class="ml-5 flex flex-col">
|
|
16
|
-
<div
|
|
28
|
+
<div v-if="isMultiple && multipleMember !== null" class="ml-5 flex flex-col" :class="[isShort ? 'mb-6' : '']">
|
|
29
|
+
<div
|
|
30
|
+
v-for="(each, index) of multipleMember"
|
|
31
|
+
:key="index"
|
|
32
|
+
class="grid auto-rows-fr items-center relative"
|
|
33
|
+
:class="[isShort ? 'grid-cols-2 md:gap-5 md:grid-cols-2 lg:grid-cols-2' : 'grid-cols-4 md:gap-5 md:grid-cols-4 lg:grid-cols-7']"
|
|
34
|
+
>
|
|
17
35
|
<span :class="[getMemberInfo(each).fullName === null && $libStyles.emptyBlockCol]">{{ getMemberInfo(each).fullName }}</span>
|
|
18
36
|
<span :class="[getMemberInfo(each).iin === null && $libStyles.emptyBlockCol]">{{ getMemberInfo(each).iin }}</span>
|
|
19
|
-
<span :class="[getMemberInfo(each).gender === null && $libStyles.emptyBlockCol]" class="hidden lg:block">{{ getMemberInfo(each).gender }} </span>
|
|
20
|
-
<span :class="[getMemberInfo(each).birthDate === null && $libStyles.emptyBlockCol]"> {{ getMemberInfo(each).birthDate }} </span>
|
|
21
|
-
<span :class="[getMemberInfo(each).birthPlace === null && $libStyles.emptyBlockCol]" class="hidden lg:block"> {{ getMemberInfo(each).birthPlace }} </span>
|
|
22
|
-
<span :class="[getMemberInfo(each).sectorCode === null && $libStyles.emptyBlockCol]" class="hidden lg:block"> {{ getMemberInfo(each).sectorCode }} </span>
|
|
37
|
+
<span v-if="!isShort" :class="[getMemberInfo(each).gender === null && $libStyles.emptyBlockCol]" class="hidden lg:block">{{ getMemberInfo(each).gender }} </span>
|
|
38
|
+
<span v-if="!isShort" :class="[getMemberInfo(each).birthDate === null && $libStyles.emptyBlockCol]"> {{ getMemberInfo(each).birthDate }} </span>
|
|
39
|
+
<span v-if="!isShort" :class="[getMemberInfo(each).birthPlace === null && $libStyles.emptyBlockCol]" class="hidden lg:block"> {{ getMemberInfo(each).birthPlace }} </span>
|
|
40
|
+
<span v-if="!isShort" :class="[getMemberInfo(each).sectorCode === null && $libStyles.emptyBlockCol]" class="hidden lg:block"> {{ getMemberInfo(each).sectorCode }} </span>
|
|
23
41
|
<div
|
|
42
|
+
v-if="!isShort"
|
|
24
43
|
class="rounded-br-lg transition-all h-[70px] w-[60px] place-self-end"
|
|
25
44
|
:class="[$libStyles.blueBgLight, $libStyles.blueBgLightHover, disabled ? $libStyles.disabled : 'cursor-pointer']"
|
|
26
45
|
@click="!disabled && $emit('onMore', { whichForm, index })"
|
|
27
46
|
>
|
|
28
|
-
<i class="mdi mdi-dots-vertical text-xl absolute top-[20px] right-[20px]"
|
|
47
|
+
<i class="mdi mdi-dots-vertical text-xl absolute top-[20px] right-[20px]"></i>
|
|
29
48
|
</div>
|
|
30
49
|
</div>
|
|
31
50
|
</div>
|
|
32
|
-
<div
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
<span :class="[getMemberInfo(
|
|
38
|
-
<span :class="[getMemberInfo(
|
|
51
|
+
<div
|
|
52
|
+
v-if="singleMember !== null"
|
|
53
|
+
class="ml-5 grid auto-rows-fr items-center relative"
|
|
54
|
+
:class="[isShort ? 'grid-cols-2 md:gap-5 md:grid-cols-2 lg:grid-cols-2' : 'grid-cols-4 md:gap-5 md:grid-cols-4 lg:grid-cols-7']"
|
|
55
|
+
>
|
|
56
|
+
<span :class="[getMemberInfo(singleMember).fullName === null && $libStyles.emptyBlockCol]">{{ getMemberInfo(singleMember).fullName }}</span>
|
|
57
|
+
<span :class="[getMemberInfo(singleMember).iin === null && $libStyles.emptyBlockCol]">{{ getMemberInfo(singleMember).iin }}</span>
|
|
58
|
+
<span v-if="!isShort" :class="[getMemberInfo(singleMember).gender === null && $libStyles.emptyBlockCol]" class="hidden lg:block"
|
|
59
|
+
>{{ getMemberInfo(singleMember).gender }}
|
|
60
|
+
</span>
|
|
61
|
+
<span v-if="!isShort" :class="[getMemberInfo(singleMember).birthDate === null && $libStyles.emptyBlockCol]"> {{ getMemberInfo(singleMember).birthDate }} </span>
|
|
62
|
+
<span v-if="!isShort" :class="[getMemberInfo(singleMember).birthPlace === null && $libStyles.emptyBlockCol]" class="hidden lg:block">
|
|
63
|
+
{{ getMemberInfo(singleMember).birthPlace }}
|
|
64
|
+
</span>
|
|
65
|
+
<span v-if="!isShort" :class="[getMemberInfo(singleMember).sectorCode === null && $libStyles.emptyBlockCol]" class="hidden lg:block">
|
|
66
|
+
{{ getMemberInfo(singleMember).sectorCode }}
|
|
67
|
+
</span>
|
|
39
68
|
<div
|
|
69
|
+
v-if="!isShort"
|
|
40
70
|
class="rounded-br-lg transition-all h-[70px] w-[60px] place-self-end"
|
|
41
71
|
:class="[$libStyles.blueBgLight, $libStyles.blueBgLightHover, disabled ? $libStyles.disabled : 'cursor-pointer']"
|
|
42
72
|
@click="!disabled && $emit('onMore', { whichForm })"
|
|
43
73
|
>
|
|
44
|
-
<i class="mdi mdi-dots-vertical text-xl absolute top-[20px] right-[20px]"
|
|
74
|
+
<i class="mdi mdi-dots-vertical text-xl absolute top-[20px] right-[20px]"></i>
|
|
45
75
|
</div>
|
|
46
76
|
</div>
|
|
47
77
|
<div
|
|
48
|
-
v-if="isMultiple && more"
|
|
78
|
+
v-if="isMultiple && more && !isShort && isActionsAvailable"
|
|
49
79
|
:class="[$libStyles.blueBg, $libStyles.whiteText, $libStyles.textSimple, disabled ? $libStyles.disabled : 'cursor-pointer']"
|
|
50
|
-
class="rounded-b-lg h-[36px] flex items-center font-medium justify-center"
|
|
80
|
+
class="lg:hidden transition-all rounded-b-lg h-[36px] flex items-center font-medium justify-center opacity-50 hover:opacity-90"
|
|
51
81
|
@click="!disabled && memberStore.addMember(whichForm)"
|
|
52
82
|
>
|
|
53
|
-
{{ $t('buttons.add') }}
|
|
83
|
+
{{ $dataStore.t('buttons.add') }}
|
|
54
84
|
</div>
|
|
55
85
|
</div>
|
|
56
86
|
</template>
|
|
57
87
|
|
|
58
88
|
<script lang="ts">
|
|
59
|
-
import {
|
|
89
|
+
import { StoreMembers } from '../../types/enum';
|
|
90
|
+
import { Member } from '../../composables/classes';
|
|
60
91
|
|
|
61
92
|
export default defineComponent({
|
|
62
93
|
props: {
|
|
@@ -69,7 +100,7 @@ export default defineComponent({
|
|
|
69
100
|
default: '',
|
|
70
101
|
},
|
|
71
102
|
whichForm: {
|
|
72
|
-
type: String as PropType<
|
|
103
|
+
type: String as PropType<keyof typeof StoreMembers>,
|
|
73
104
|
default: '',
|
|
74
105
|
},
|
|
75
106
|
more: {
|
|
@@ -80,15 +111,25 @@ export default defineComponent({
|
|
|
80
111
|
type: Boolean,
|
|
81
112
|
default: false,
|
|
82
113
|
},
|
|
114
|
+
type: {
|
|
115
|
+
type: String as PropType<'short' | 'default'>,
|
|
116
|
+
default: 'default',
|
|
117
|
+
},
|
|
83
118
|
},
|
|
84
119
|
emits: ['onMore', 'addMember'],
|
|
85
120
|
setup(props) {
|
|
86
|
-
const dataStore = useDataStore();
|
|
87
121
|
const formStore = useFormStore();
|
|
88
122
|
const memberStore = useMemberStore();
|
|
89
|
-
const
|
|
90
|
-
const
|
|
91
|
-
|
|
123
|
+
const isMultiple = computed(() => [StoreMembers.insuredForm, StoreMembers.beneficiaryForm, StoreMembers.beneficialOwnerForm].includes(props.whichForm as StoreMembers));
|
|
124
|
+
const singleMember: Member | null =
|
|
125
|
+
props.whichForm === StoreMembers.policyholderForm || props.whichForm === StoreMembers.policyholdersRepresentativeForm ? formStore[props.whichForm] : null;
|
|
126
|
+
const multipleMember: Member[] | null =
|
|
127
|
+
props.whichForm === StoreMembers.insuredForm || props.whichForm === StoreMembers.beneficiaryForm || props.whichForm === StoreMembers.beneficialOwnerForm
|
|
128
|
+
? formStore[props.whichForm]
|
|
129
|
+
: null;
|
|
130
|
+
|
|
131
|
+
const isShort = computed(() => props.type === 'short');
|
|
132
|
+
const isActionsAvailable = computed(() => memberStore.isStatementEditible(props.whichForm));
|
|
92
133
|
|
|
93
134
|
const getMemberInfo = (memberData: Member) => {
|
|
94
135
|
return {
|
|
@@ -105,10 +146,13 @@ export default defineComponent({
|
|
|
105
146
|
// State
|
|
106
147
|
formStore,
|
|
107
148
|
memberStore,
|
|
108
|
-
|
|
149
|
+
singleMember,
|
|
150
|
+
multipleMember,
|
|
109
151
|
isMultiple,
|
|
110
152
|
|
|
111
153
|
// Computed
|
|
154
|
+
isShort,
|
|
155
|
+
isActionsAvailable,
|
|
112
156
|
|
|
113
157
|
// Functions
|
|
114
158
|
getMemberInfo,
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<section :class="[$libStyles.blueBgLight, $libStyles.rounded]" class="mt-[14px] p-4 flex flex-col gap-[1px]">
|
|
3
|
-
<h2 :class="[$libStyles.textTitle]" class="font-medium text-center w-full mb-4">
|
|
3
|
+
<h2 :class="[$libStyles.textTitle]" class="font-medium text-center w-full mb-4">
|
|
4
|
+
{{ title }}
|
|
5
|
+
<slot name="icon"></slot>
|
|
6
|
+
</h2>
|
|
4
7
|
<slot></slot>
|
|
5
8
|
</section>
|
|
6
9
|
</template>
|
|
@@ -13,10 +13,9 @@
|
|
|
13
13
|
color="#009C73"
|
|
14
14
|
hide-details
|
|
15
15
|
:disabled="disabled"
|
|
16
|
-
|
|
17
|
-
</v-switch>
|
|
16
|
+
/>
|
|
18
17
|
<p :class="[$libStyles.textSimple]">{{ `${title}` }}</p>
|
|
19
|
-
<p class="mr-3" :class="[modelValue ? $libStyles.greenText : '', $libStyles.textSimple]">{{ `${modelValue ? $t('confirm.yes') : $t('confirm.no')}` }}</p>
|
|
18
|
+
<p class="mr-3" :class="[modelValue ? $libStyles.greenText : '', $libStyles.textSimple]">{{ `${modelValue ? $dataStore.t('confirm.yes') : $dataStore.t('confirm.no')}` }}</p>
|
|
20
19
|
</div>
|
|
21
20
|
</template>
|
|
22
21
|
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="rounded-lg border-[1px]" :class="[$libStyles.whiteBg, disabled && $libStyles.disabled]">
|
|
3
|
+
<div class="mt-3 ml-5">
|
|
4
|
+
<p :class="[$libStyles.textTitle, $libStyles.greenText]">{{ $dataStore.t('form.attachManager') }}</p>
|
|
5
|
+
</div>
|
|
6
|
+
<v-form ref="vForm" class="flex flex-col mt-1">
|
|
7
|
+
<base-panel-input
|
|
8
|
+
class="pl-1"
|
|
9
|
+
v-model="formStore.SaleChanellPolicy"
|
|
10
|
+
:value="formStore.SaleChanellPolicy.nameRu"
|
|
11
|
+
:readonly="isReadonly"
|
|
12
|
+
:clearable="!isReadonly"
|
|
13
|
+
:label="$dataStore.t('form.salesChanell')"
|
|
14
|
+
:rules="$rules.objectRequired"
|
|
15
|
+
append-inner-icon="mdi mdi-chevron-right"
|
|
16
|
+
@append="openPanel('SaleChanellPolicy', $dataStore.t('form.salesChanell'))"
|
|
17
|
+
/>
|
|
18
|
+
<base-panel-input
|
|
19
|
+
class="pl-1"
|
|
20
|
+
v-model="formStore.RegionPolicy"
|
|
21
|
+
:value="formStore.RegionPolicy.nameRu"
|
|
22
|
+
:readonly="isReadonly"
|
|
23
|
+
:clearable="!isReadonly"
|
|
24
|
+
:label="$dataStore.t('form.Region')"
|
|
25
|
+
:rules="$rules.objectRequired"
|
|
26
|
+
append-inner-icon="mdi mdi-chevron-right"
|
|
27
|
+
@append="openPanel('RegionPolicy', $dataStore.t('form.Region'))"
|
|
28
|
+
/>
|
|
29
|
+
<base-panel-input
|
|
30
|
+
class="pl-1"
|
|
31
|
+
v-model="formStore.ManagerPolicy"
|
|
32
|
+
:value="formStore.ManagerPolicy.nameRu"
|
|
33
|
+
:readonly="isReadonly"
|
|
34
|
+
:clearable="!isReadonly"
|
|
35
|
+
:label="$dataStore.t('form.manager')"
|
|
36
|
+
:rules="$rules.objectRequired"
|
|
37
|
+
append-inner-icon="mdi mdi-chevron-right"
|
|
38
|
+
@append="openPanel('ManagerPolicy', $dataStore.t('form.manager'))"
|
|
39
|
+
/>
|
|
40
|
+
<base-panel-input
|
|
41
|
+
class="pl-1"
|
|
42
|
+
v-model="formStore.AgentData"
|
|
43
|
+
:value="formStore.AgentData.fullName"
|
|
44
|
+
:readonly="isReadonly"
|
|
45
|
+
:clearable="!isReadonly"
|
|
46
|
+
:label="$dataStore.t('form.agent')"
|
|
47
|
+
:rules="$rules.agentDataRequired"
|
|
48
|
+
append-inner-icon="mdi mdi-chevron-right"
|
|
49
|
+
@append="openPanel('AgentData', $dataStore.t('form.agent'))"
|
|
50
|
+
/>
|
|
51
|
+
</v-form>
|
|
52
|
+
<Teleport v-if="isPanelOpen" to="#panel-actions">
|
|
53
|
+
<div :class="[$libStyles.scrollPage]" class="flex flex-col items-center">
|
|
54
|
+
<base-rounded-input
|
|
55
|
+
v-model.trim="searchQuery"
|
|
56
|
+
:label="$dataStore.t('labels.search')"
|
|
57
|
+
class="w-full p-2"
|
|
58
|
+
:hide-details="true"
|
|
59
|
+
:append-inner-icon="currentDictName === 'AgentData' ? 'mdi mdi-magnify' : ''"
|
|
60
|
+
@append="searchAgent"
|
|
61
|
+
/>
|
|
62
|
+
<div v-if="dictList && isPanelLoading === false" class="w-full flex flex-col gap-2 p-2">
|
|
63
|
+
<div v-for="(item, index) in dictList" :key="item.id">
|
|
64
|
+
<base-panel-select-item
|
|
65
|
+
:key="index"
|
|
66
|
+
:text="currentDictName === 'AgentData' ? item.fullName : (item.nameRu as string)"
|
|
67
|
+
:selected="currentDictName === 'AgentData' ? item.fullName === panelValue.fullName : item.nameRu === panelValue.nameRu"
|
|
68
|
+
@click="pickPanelValue(item)"
|
|
69
|
+
/>
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
<base-loader v-if="isPanelLoading" class="absolute mt-10" :size="50" />
|
|
73
|
+
</div>
|
|
74
|
+
</Teleport>
|
|
75
|
+
</div>
|
|
76
|
+
</template>
|
|
77
|
+
|
|
78
|
+
<script lang="ts">
|
|
79
|
+
import { Value } from '../../composables/classes';
|
|
80
|
+
|
|
81
|
+
export default defineComponent({
|
|
82
|
+
props: {
|
|
83
|
+
title: {
|
|
84
|
+
type: String,
|
|
85
|
+
default: '',
|
|
86
|
+
},
|
|
87
|
+
disabled: {
|
|
88
|
+
type: Boolean,
|
|
89
|
+
default: false,
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
setup(props) {
|
|
93
|
+
const route = useRoute();
|
|
94
|
+
const dataStore = useDataStore();
|
|
95
|
+
const formStore = useFormStore();
|
|
96
|
+
const isPanelOpen = ref<boolean>(false);
|
|
97
|
+
const isPanelLoading = ref<boolean>(false);
|
|
98
|
+
const panelValue = ref<Value & AgentData>(new Value());
|
|
99
|
+
const searchQuery = ref<string>('');
|
|
100
|
+
const currentDictName = ref<string>();
|
|
101
|
+
|
|
102
|
+
const dictList = computed(() => {
|
|
103
|
+
if (!currentDictName.value) {
|
|
104
|
+
return [];
|
|
105
|
+
}
|
|
106
|
+
if (currentDictName.value === 'AgentData') {
|
|
107
|
+
return dataStore[currentDictName.value];
|
|
108
|
+
} else {
|
|
109
|
+
// @ts-ignore
|
|
110
|
+
return dataStore[currentDictName.value].filter((item: Value) => {
|
|
111
|
+
// @ts-ignore
|
|
112
|
+
return item.nameRu ? item.nameRu.toLowerCase().includes(searchQuery.value.toLowerCase()) : item.fullName.toLowerCase().includes(searchQuery.value.toLowerCase());
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
const isReadonly = computed(
|
|
117
|
+
() =>
|
|
118
|
+
props.disabled ||
|
|
119
|
+
route.params.taskId === '0' ||
|
|
120
|
+
!dataStore.isInitiator() ||
|
|
121
|
+
(route.params.taskId !== '0' && (!dataStore.isProcessEditable(formStore.applicationData.statusCode) || !dataStore.isTask())),
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
const openPanel = async (currentDict: string, title: string) => {
|
|
125
|
+
searchQuery.value = '';
|
|
126
|
+
if (dataStore.isTask() && !props.disabled) {
|
|
127
|
+
dataStore.panelAction = null;
|
|
128
|
+
dataStore.panel.open = true;
|
|
129
|
+
dataStore.panel.title = title;
|
|
130
|
+
currentDictName.value = currentDict;
|
|
131
|
+
|
|
132
|
+
if (currentDict === 'ManagerPolicy') {
|
|
133
|
+
isPanelLoading.value = true;
|
|
134
|
+
await dataStore.filterManagerByRegion(String(formStore.RegionPolicy.ids ?? ''));
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
isPanelOpen.value = true;
|
|
138
|
+
panelValue.value = formStore[currentDict as keyof typeof formStore];
|
|
139
|
+
isPanelLoading.value = false;
|
|
140
|
+
} else {
|
|
141
|
+
dataStore.showToaster('error', dataStore.t('toaster.viewErrorText'));
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
const searchAgent = async () => {
|
|
146
|
+
if (searchQuery.value) {
|
|
147
|
+
isPanelLoading.value = true;
|
|
148
|
+
await dataStore.searchAgentByName(searchQuery.value);
|
|
149
|
+
isPanelLoading.value = false;
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
const pickPanelValue = (answer: any) => {
|
|
154
|
+
// @ts-ignore
|
|
155
|
+
formStore[currentDictName.value] = answer;
|
|
156
|
+
isPanelOpen.value = false;
|
|
157
|
+
dataStore.panel.open = false;
|
|
158
|
+
searchQuery.value = '';
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
watch(searchQuery, () => {
|
|
162
|
+
if (searchQuery.value === null) {
|
|
163
|
+
searchQuery.value = '';
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
watch(
|
|
168
|
+
() => formStore.RegionPolicy,
|
|
169
|
+
(val, oldVal) => {
|
|
170
|
+
if (val.ids !== oldVal.ids) {
|
|
171
|
+
formStore.ManagerPolicy = new Value();
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
);
|
|
175
|
+
|
|
176
|
+
return {
|
|
177
|
+
// State
|
|
178
|
+
formStore,
|
|
179
|
+
isPanelOpen,
|
|
180
|
+
isPanelLoading,
|
|
181
|
+
panelValue,
|
|
182
|
+
searchQuery,
|
|
183
|
+
Value,
|
|
184
|
+
currentDictName,
|
|
185
|
+
|
|
186
|
+
// Computed
|
|
187
|
+
dictList,
|
|
188
|
+
isReadonly,
|
|
189
|
+
|
|
190
|
+
// Functions
|
|
191
|
+
openPanel,
|
|
192
|
+
searchAgent,
|
|
193
|
+
pickPanelValue,
|
|
194
|
+
};
|
|
195
|
+
},
|
|
196
|
+
});
|
|
197
|
+
</script>
|
|
@@ -2,21 +2,25 @@
|
|
|
2
2
|
<div class="pt-3 pl-5 rounded-lg border-[1px]" :class="[$libStyles.whiteBg, disabled && $libStyles.disabled]">
|
|
3
3
|
<div>
|
|
4
4
|
<p :class="[$libStyles.textTitle, $libStyles.greenText]">
|
|
5
|
-
{{ $t('productConditions') }}
|
|
5
|
+
{{ $dataStore.t('productConditions') }}
|
|
6
6
|
</p>
|
|
7
7
|
<p v-if="!!subtitle" :class="[$libStyles.greyText, $libStyles.textSimple]">{{ subtitle }}</p>
|
|
8
8
|
</div>
|
|
9
9
|
<div class="mt-6 grid grid-cols-3 lg:grid-cols-5 auto-rows-fr items-center">
|
|
10
|
-
<span :class="[$libStyles.textSimple]" class="font-medium">{{ $t('productConditionsForm.requestedSumInsured') }}</span>
|
|
11
|
-
<span :class="[$libStyles.textSimple]" class="font-medium">{{ $t('productConditionsForm.insurancePremiumPerMonth') }}</span>
|
|
12
|
-
<span :class="[$libStyles.textSimple]" class="font-medium hidden lg:block">{{ $t('
|
|
13
|
-
<span :class="[$libStyles.textSimple]" class="font-medium hidden lg:block">{{ $t('productConditionsForm.
|
|
10
|
+
<span v-if="hasSum" :class="[$libStyles.textSimple]" class="font-medium">{{ $dataStore.t('productConditionsForm.requestedSumInsured') }}</span>
|
|
11
|
+
<span v-if="hasPremium" :class="[$libStyles.textSimple]" class="font-medium">{{ $dataStore.t('productConditionsForm.insurancePremiumPerMonth') }}</span>
|
|
12
|
+
<span v-if="hasPolicyNumber" :class="[$libStyles.textSimple]" class="font-medium hidden lg:block">{{ $dataStore.t('buttons.InsuranceContract') }}</span>
|
|
13
|
+
<span v-if="hasContractDate" :class="[$libStyles.textSimple]" class="font-medium hidden lg:block">{{ $dataStore.t('productConditionsForm.contractDate') }}</span>
|
|
14
|
+
<span v-if="hasCoverPeriod" :class="[$libStyles.textSimple]" class="font-medium hidden lg:block">{{ $dataStore.t('productConditionsForm.coverPeriod') }}</span>
|
|
15
|
+
<span v-if="hasPayPeriod" :class="[$libStyles.textSimple]" class="font-medium hidden lg:block">{{ $dataStore.t('productConditionsForm.payPeriod') }}</span>
|
|
14
16
|
</div>
|
|
15
17
|
<div class="grid grid-cols-3 lg:grid-cols-5 auto-rows-fr items-center">
|
|
16
|
-
<span :class="[amount === null && $libStyles.emptyBlockCol]">{{ amount }} </span>
|
|
17
|
-
<span :class="[premium === null && $libStyles.emptyBlockCol]"> {{ premium }}</span>
|
|
18
|
-
<span :class="[
|
|
19
|
-
<span :class="[
|
|
18
|
+
<span v-if="hasSum" :class="[amount === null && $libStyles.emptyBlockCol]">{{ amount }} </span>
|
|
19
|
+
<span v-if="hasPremium" :class="[premium === null && $libStyles.emptyBlockCol]"> {{ premium }}</span>
|
|
20
|
+
<span v-if="hasPolicyNumber" :class="[policyNumber === null && $libStyles.emptyBlockCol]" class="hidden lg:block"> {{ policyNumber }}</span>
|
|
21
|
+
<span v-if="hasContractDate" :class="[policyNumber === null && $libStyles.emptyBlockCol]" class="hidden lg:block"> {{ contractDate }}</span>
|
|
22
|
+
<span v-if="hasCoverPeriod" :class="[coverPeriod === null && $libStyles.emptyBlockCol]" class="hidden lg:block">{{ coverPeriod }} </span>
|
|
23
|
+
<span v-if="hasPayPeriod" :class="[paymentPeriod === null && $libStyles.emptyBlockCol]" class="hidden lg:block">
|
|
20
24
|
{{ paymentPeriod }}
|
|
21
25
|
</span>
|
|
22
26
|
<div
|
|
@@ -24,7 +28,7 @@
|
|
|
24
28
|
:class="[$libStyles.blueBgLight, $libStyles.blueBgLightHover, disabled ? $libStyles.disabled : 'cursor-pointer']"
|
|
25
29
|
@click="!disabled && $emit('onMore', { whichForm: 'productConditions' })"
|
|
26
30
|
>
|
|
27
|
-
<i class="mdi mdi-dots-vertical text-xl absolute top-[20px] right-[20px]"
|
|
31
|
+
<i class="mdi mdi-dots-vertical text-xl absolute top-[20px] right-[20px]"></i>
|
|
28
32
|
</div>
|
|
29
33
|
</div>
|
|
30
34
|
</div>
|
|
@@ -43,6 +47,7 @@ export default defineComponent({
|
|
|
43
47
|
},
|
|
44
48
|
},
|
|
45
49
|
setup() {
|
|
50
|
+
const dataStore = useDataStore();
|
|
46
51
|
const formStore = useFormStore();
|
|
47
52
|
|
|
48
53
|
const amount = computed(() =>
|
|
@@ -51,12 +56,49 @@ export default defineComponent({
|
|
|
51
56
|
const premium = computed(() =>
|
|
52
57
|
formStore.productConditionsForm && formStore.productConditionsForm.insurancePremiumPerMonth ? formStore.productConditionsForm.insurancePremiumPerMonth : null,
|
|
53
58
|
);
|
|
59
|
+
const policyNumber = computed(() => (formStore.applicationData && formStore.applicationData.policyAppDto ? formStore.applicationData.policyAppDto.policyNumber : null));
|
|
60
|
+
const contractDate = computed(() =>
|
|
61
|
+
formStore.applicationData && formStore.applicationData.policyAppDto && formStore.applicationData.policyAppDto.contractDate
|
|
62
|
+
? reformatDate(formStore.applicationData.policyAppDto.contractDate)
|
|
63
|
+
: null,
|
|
64
|
+
);
|
|
54
65
|
const coverPeriod = computed(() => (formStore.productConditionsForm && formStore.productConditionsForm.coverPeriod ? formStore.productConditionsForm.coverPeriod : null));
|
|
55
66
|
const paymentPeriod = computed(() =>
|
|
56
67
|
formStore.productConditionsForm && formStore.productConditionsForm.paymentPeriod && !!formStore.productConditionsForm.paymentPeriod.nameRu
|
|
57
68
|
? formStore.productConditionsForm.paymentPeriod.nameRu
|
|
58
69
|
: null,
|
|
59
70
|
);
|
|
71
|
+
|
|
72
|
+
const hasSum = computed(() => {
|
|
73
|
+
return true;
|
|
74
|
+
});
|
|
75
|
+
const hasPremium = computed(() => {
|
|
76
|
+
return true;
|
|
77
|
+
});
|
|
78
|
+
const hasPolicyNumber = computed(() => {
|
|
79
|
+
if (dataStore.isFinCenter()) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
return false;
|
|
83
|
+
});
|
|
84
|
+
const hasContractDate = computed(() => {
|
|
85
|
+
if (dataStore.isFinCenter()) {
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
return false;
|
|
89
|
+
});
|
|
90
|
+
const hasCoverPeriod = computed(() => {
|
|
91
|
+
if (dataStore.isFinCenter()) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
return true;
|
|
95
|
+
});
|
|
96
|
+
const hasPayPeriod = computed(() => {
|
|
97
|
+
if (dataStore.isFinCenter()) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
return true;
|
|
101
|
+
});
|
|
60
102
|
return {
|
|
61
103
|
// State
|
|
62
104
|
formStore,
|
|
@@ -64,8 +106,16 @@ export default defineComponent({
|
|
|
64
106
|
// Computed
|
|
65
107
|
amount,
|
|
66
108
|
premium,
|
|
109
|
+
policyNumber,
|
|
110
|
+
contractDate,
|
|
67
111
|
coverPeriod,
|
|
68
112
|
paymentPeriod,
|
|
113
|
+
hasSum,
|
|
114
|
+
hasPremium,
|
|
115
|
+
hasPolicyNumber,
|
|
116
|
+
hasContractDate,
|
|
117
|
+
hasPayPeriod,
|
|
118
|
+
hasCoverPeriod,
|
|
69
119
|
};
|
|
70
120
|
},
|
|
71
121
|
});
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
model-type="dd.MM.yyyy"
|
|
10
10
|
position="left"
|
|
11
11
|
menu-class-name="!left-[30vw] md:!left-[70vw] lg:!left-[75vw]"
|
|
12
|
-
teleport="
|
|
12
|
+
:teleport="teleport"
|
|
13
13
|
:offset="-50"
|
|
14
14
|
:close-on-scroll="true"
|
|
15
15
|
:enable-time-picker="false"
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
select-text="Выбрать"
|
|
18
18
|
>
|
|
19
19
|
<template #trigger>
|
|
20
|
-
<v-icon icon="mdi mdi-calendar-blank-outline cursor-pointer"
|
|
20
|
+
<v-icon icon="mdi mdi-calendar-blank-outline cursor-pointer" />
|
|
21
21
|
</template>
|
|
22
22
|
</vue-date-picker>
|
|
23
23
|
</template>
|
|
@@ -36,6 +36,10 @@ export default defineComponent({
|
|
|
36
36
|
type: Boolean,
|
|
37
37
|
default: false,
|
|
38
38
|
},
|
|
39
|
+
teleport: {
|
|
40
|
+
type: String,
|
|
41
|
+
default: '.v-form',
|
|
42
|
+
},
|
|
39
43
|
},
|
|
40
44
|
});
|
|
41
45
|
</script>
|
|
@@ -20,18 +20,30 @@
|
|
|
20
20
|
:append-icon="appendIcon ? appendIcon : ''"
|
|
21
21
|
:prepend-inner-icon="prependInnerIcon ? prependInnerIcon : ''"
|
|
22
22
|
:bg-color="bgColor ? bgColor : ''"
|
|
23
|
+
:suffix="suffix"
|
|
24
|
+
@input="$emit('input', $event)"
|
|
23
25
|
@keyup.enter.prevent="submitted"
|
|
24
26
|
@click:append="!props.readonly && $emit('append-out')"
|
|
25
27
|
@click:prepend="!props.readonly && $emit('prepend-out')"
|
|
26
28
|
@click:prepend-inner="!props.readonly && $emit('prepend')"
|
|
29
|
+
@click:clear="!props.readonly && $emit('on-clear')"
|
|
27
30
|
@update:modelValue="$emit('update:modelValue', $event)"
|
|
28
31
|
>
|
|
29
32
|
<template v-if="appendInnerIcon && appendInnerIcon.length" v-slot:append-inner>
|
|
30
|
-
<v-icon
|
|
31
|
-
|
|
33
|
+
<v-icon
|
|
34
|
+
v-if="appendInnerIcon.includes('mdi-calendar-blank-outline') === false"
|
|
35
|
+
:icon="appendInnerIcon"
|
|
36
|
+
@click="appendInnerIcon.includes('mdi-magnify') ? $emit('append') : !props.readonly && $emit('append')"
|
|
37
|
+
/>
|
|
38
|
+
<base-datepicker
|
|
39
|
+
v-if="appendInnerIcon.includes('mdi-calendar-blank-outline') && !props.readonly"
|
|
40
|
+
:model-value="modelValue"
|
|
41
|
+
@update:modelValue="$emit('update:modelValue', $event)"
|
|
42
|
+
:teleport="teleport"
|
|
43
|
+
/>
|
|
32
44
|
</template>
|
|
33
45
|
<template v-if="loading" #loader>
|
|
34
|
-
<v-progress-linear :active="loading" :color="color" absolute height="1" indeterminate
|
|
46
|
+
<v-progress-linear :active="loading" :color="color" absolute height="1" indeterminate />
|
|
35
47
|
</template>
|
|
36
48
|
</v-text-field>
|
|
37
49
|
</template>
|
|
@@ -67,6 +79,10 @@ export default defineComponent({
|
|
|
67
79
|
type: String,
|
|
68
80
|
default: '',
|
|
69
81
|
},
|
|
82
|
+
suffix: {
|
|
83
|
+
type: String,
|
|
84
|
+
default: '',
|
|
85
|
+
},
|
|
70
86
|
messages: {
|
|
71
87
|
type: [String, Array<string>],
|
|
72
88
|
},
|
|
@@ -110,11 +126,14 @@ export default defineComponent({
|
|
|
110
126
|
appendInnerIcon: {
|
|
111
127
|
type: String,
|
|
112
128
|
},
|
|
129
|
+
teleport: {
|
|
130
|
+
type: String,
|
|
131
|
+
},
|
|
113
132
|
bgColor: {
|
|
114
133
|
type: String,
|
|
115
134
|
},
|
|
116
135
|
},
|
|
117
|
-
emits: ['update:modelValue', 'submitted', 'prepend', 'append', 'prepend-out', 'append-out'],
|
|
136
|
+
emits: ['update:modelValue', 'submitted', 'prepend', 'append', 'prepend-out', 'append-out', 'input', 'on-clear'],
|
|
118
137
|
|
|
119
138
|
setup(props, { emit }) {
|
|
120
139
|
const submitted = (event: any) => {
|
|
@@ -134,9 +153,9 @@ export default defineComponent({
|
|
|
134
153
|
border: none !important;
|
|
135
154
|
outline: none !important;
|
|
136
155
|
}
|
|
137
|
-
.form-input input {
|
|
156
|
+
/* .form-input input {
|
|
138
157
|
padding-top: 30px;
|
|
139
|
-
}
|
|
158
|
+
} */
|
|
140
159
|
.form-input .v-field {
|
|
141
160
|
box-shadow: none;
|
|
142
161
|
font-size: 14px;
|
|
@@ -145,7 +164,6 @@ export default defineComponent({
|
|
|
145
164
|
top: 20px;
|
|
146
165
|
}
|
|
147
166
|
.form-input .v-field__append-inner {
|
|
148
|
-
padding-top: 18px;
|
|
149
167
|
padding-right: 6px;
|
|
150
168
|
}
|
|
151
169
|
.form-input .v-field__append-inner i {
|
|
@@ -170,4 +188,8 @@ export default defineComponent({
|
|
|
170
188
|
.form-input .v-field--error {
|
|
171
189
|
border-color: #ff5449;
|
|
172
190
|
}
|
|
191
|
+
.form-input .v-text-field__suffix {
|
|
192
|
+
padding-top: 30px;
|
|
193
|
+
font-size: 16px !important;
|
|
194
|
+
}
|
|
173
195
|
</style>
|