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.
Files changed (61) hide show
  1. package/api/index.ts +117 -44
  2. package/api/interceptors.ts +17 -13
  3. package/components/Button/Btn.vue +1 -1
  4. package/components/Button/ScrollButtons.vue +2 -2
  5. package/components/Complex/Page.vue +1 -1
  6. package/components/Dialog/Dialog.vue +9 -39
  7. package/components/Dialog/FamilyDialog.vue +7 -4
  8. package/components/Form/FormBlock.vue +77 -33
  9. package/components/Form/FormSection.vue +4 -1
  10. package/components/Form/FormToggle.vue +2 -3
  11. package/components/Form/ManagerAttachment.vue +197 -0
  12. package/components/Form/ProductConditionsBlock.vue +60 -10
  13. package/components/Input/Datepicker.vue +6 -2
  14. package/components/Input/FileInput.vue +2 -2
  15. package/components/Input/FormInput.vue +29 -7
  16. package/components/Input/PanelInput.vue +7 -2
  17. package/components/Input/RoundedInput.vue +2 -2
  18. package/components/Input/RoundedSelect.vue +137 -0
  19. package/components/Layout/Drawer.vue +3 -2
  20. package/components/Layout/Header.vue +40 -4
  21. package/components/Layout/Loader.vue +1 -1
  22. package/components/Layout/SettingsPanel.vue +51 -13
  23. package/components/Menu/MenuHover.vue +30 -0
  24. package/components/Menu/MenuNav.vue +29 -13
  25. package/components/Menu/MenuNavItem.vue +6 -3
  26. package/components/Pages/Anketa.vue +51 -33
  27. package/components/Pages/Auth.vue +139 -46
  28. package/components/Pages/Documents.vue +6 -6
  29. package/components/Pages/InvoiceInfo.vue +30 -0
  30. package/components/Pages/MemberForm.vue +533 -292
  31. package/components/Pages/ProductAgreement.vue +4 -2
  32. package/components/Pages/ProductConditions.vue +509 -99
  33. package/components/Panel/PanelHandler.vue +93 -20
  34. package/components/Panel/PanelSelectItem.vue +1 -1
  35. package/components/Utilities/Chip.vue +27 -0
  36. package/components/Utilities/JsonViewer.vue +27 -0
  37. package/composables/axios.ts +1 -1
  38. package/composables/classes.ts +217 -97
  39. package/composables/constants.ts +26 -52
  40. package/composables/index.ts +80 -2
  41. package/composables/styles.ts +8 -3
  42. package/configs/i18n.ts +17 -0
  43. package/layouts/default.vue +6 -6
  44. package/locales/kz.json +585 -0
  45. package/locales/ru.json +587 -0
  46. package/nuxt.config.ts +9 -1
  47. package/package.json +41 -11
  48. package/pages/500.vue +2 -2
  49. package/pages/Token.vue +51 -0
  50. package/plugins/helperFunctionsPlugins.ts +3 -0
  51. package/plugins/storePlugin.ts +0 -1
  52. package/plugins/vuetifyPlugin.ts +8 -1
  53. package/store/data.store.ts +2649 -0
  54. package/store/form.store.ts +1 -1
  55. package/store/member.store.ts +164 -52
  56. package/store/{rules.js → rules.ts} +63 -25
  57. package/types/enum.ts +83 -0
  58. package/types/env.d.ts +10 -0
  59. package/types/index.ts +211 -7
  60. package/store/data.store.js +0 -2508
  61. 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
- <p :class="[$libStyles.textTitle, $libStyles.greenText]">{{ title }}</p>
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 class="ml-5 mt-6 grid grid-cols-4 md:gap-5 md:grid-cols-4 lg:grid-cols-7 auto-rows-fr items-center">
8
- <span :class="[$libStyles.textSimple]" class="font-medium">{{ $t('form.fullName') }}</span>
9
- <span :class="[$libStyles.textSimple]" class="font-medium">{{ $t('form.iin') }}</span>
10
- <span :class="[$libStyles.textSimple]" class="font-medium hidden lg:block"> {{ $t('form.gender') }}</span>
11
- <span :class="[$libStyles.textSimple]" class="font-medium"> {{ $t('form.birthDate') }} </span>
12
- <span :class="[$libStyles.textSimple]" class="font-medium hidden lg:block">{{ $t('form.Country') }} </span>
13
- <span :class="[$libStyles.textSimple]" class="font-medium hidden lg:block"> {{ $t('code') }}</span>
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 v-for="(each, index) of member" :key="index" class="grid grid-cols-4 md:gap-5 md:grid-cols-4 lg:grid-cols-7 auto-rows-fr items-center relative">
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]"> </i>
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 v-else class="ml-5 grid grid-cols-4 md:gap-5 md:grid-cols-4 lg:grid-cols-7 auto-rows-fr items-center relative">
33
- <span :class="[getMemberInfo(member).fullName === null && $libStyles.emptyBlockCol]">{{ getMemberInfo(member).fullName }}</span>
34
- <span :class="[getMemberInfo(member).iin === null && $libStyles.emptyBlockCol]">{{ getMemberInfo(member).iin }}</span>
35
- <span :class="[getMemberInfo(member).gender === null && $libStyles.emptyBlockCol]" class="hidden lg:block">{{ getMemberInfo(member).gender }} </span>
36
- <span :class="[getMemberInfo(member).birthDate === null && $libStyles.emptyBlockCol]"> {{ getMemberInfo(member).birthDate }} </span>
37
- <span :class="[getMemberInfo(member).birthPlace === null && $libStyles.emptyBlockCol]" class="hidden lg:block"> {{ getMemberInfo(member).birthPlace }} </span>
38
- <span :class="[getMemberInfo(member).sectorCode === null && $libStyles.emptyBlockCol]" class="hidden lg:block"> {{ getMemberInfo(member).sectorCode }} </span>
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]"> </i>
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 { Member } from '@/composables/classes';
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<MemberFormTypes>,
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 multipleMembers = ['insuredForm', 'beneficiaryForm', 'beneficialOwnerForm'];
90
- const isMultiple = ref(multipleMembers.includes(props.whichForm));
91
- const member: Member = formStore[props.whichForm as MemberKeys];
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
- member,
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">{{ title }}</h2>
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('productConditionsForm.coverPeriod') }}</span>
13
- <span :class="[$libStyles.textSimple]" class="font-medium hidden lg:block">{{ $t('productConditionsForm.payPeriod') }}</span>
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="[coverPeriod === null && $libStyles.emptyBlockCol]" class="hidden lg:block">{{ coverPeriod }} </span>
19
- <span :class="[paymentPeriod === null && $libStyles.emptyBlockCol]" class="hidden lg:block">
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]"> </i>
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=".v-form"
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"></v-icon>
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>
@@ -12,8 +12,8 @@
12
12
  accept=".pdf,.doc,.jpeg,.jpg,.jpg"
13
13
  truncate-length="15"
14
14
  clear-icon="mdi mdi-close"
15
- :label="$t('labels.chooseDoc')"
16
- ></v-file-input>
15
+ :label="$dataStore.t('labels.chooseDoc')"
16
+ />
17
17
  </template>
18
18
 
19
19
  <script lang="ts">
@@ -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 v-if="appendInnerIcon !== 'mdi mdi-calendar-blank-outline'" :icon="appendInnerIcon" @click="!props.readonly && $emit('append')"></v-icon>
31
- <base-datepicker v-else :model-value="modelValue" @update:modelValue="$emit('update:modelValue', $event)"></base-datepicker>
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></v-progress-linear>
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>