hl-core 0.0.8 → 0.0.9-beta.10

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 (73) hide show
  1. package/api/index.ts +202 -161
  2. package/api/interceptors.ts +23 -17
  3. package/components/Button/Btn.vue +4 -4
  4. package/components/Button/ScrollButtons.vue +2 -2
  5. package/components/Complex/ContentBlock.vue +1 -1
  6. package/components/Complex/MessageBlock.vue +26 -0
  7. package/components/Complex/Page.vue +8 -2
  8. package/components/Complex/WhiteBlock.vue +7 -0
  9. package/components/Dialog/Dialog.vue +9 -39
  10. package/components/Dialog/FamilyDialog.vue +10 -7
  11. package/components/Form/FormBlock.vue +91 -45
  12. package/components/Form/FormSection.vue +5 -2
  13. package/components/Form/FormTextSection.vue +3 -3
  14. package/components/Form/FormToggle.vue +4 -5
  15. package/components/Form/ManagerAttachment.vue +210 -0
  16. package/components/Form/ProductConditionsBlock.vue +70 -16
  17. package/components/Input/Datepicker.vue +45 -0
  18. package/components/Input/EmptyFormField.vue +1 -1
  19. package/components/Input/FileInput.vue +2 -3
  20. package/components/Input/FormInput.vue +31 -7
  21. package/components/Input/PanelInput.vue +7 -2
  22. package/components/Input/RoundedEmptyField.vue +5 -0
  23. package/components/Input/RoundedInput.vue +2 -2
  24. package/components/Input/RoundedSelect.vue +150 -0
  25. package/components/Layout/Drawer.vue +5 -2
  26. package/components/Layout/Header.vue +41 -5
  27. package/components/Layout/Loader.vue +1 -1
  28. package/components/Layout/SettingsPanel.vue +47 -13
  29. package/components/List/ListEmpty.vue +1 -1
  30. package/components/Menu/MenuHover.vue +30 -0
  31. package/components/Menu/MenuNav.vue +30 -14
  32. package/components/Menu/MenuNavItem.vue +10 -7
  33. package/components/Pages/Anketa.vue +68 -47
  34. package/components/Pages/Auth.vue +139 -46
  35. package/components/Pages/ContragentForm.vue +505 -0
  36. package/components/Pages/Documents.vue +11 -11
  37. package/components/Pages/InvoiceInfo.vue +30 -0
  38. package/components/Pages/MemberForm.vue +574 -316
  39. package/components/Pages/ProductAgreement.vue +2 -2
  40. package/components/Pages/ProductConditions.vue +671 -78
  41. package/components/Panel/PanelHandler.vue +309 -0
  42. package/components/Panel/PanelSelectItem.vue +3 -3
  43. package/components/Transitions/SlideTransition.vue +5 -0
  44. package/components/Utilities/Chip.vue +27 -0
  45. package/components/Utilities/IconBorder.vue +17 -0
  46. package/components/Utilities/JsonViewer.vue +27 -0
  47. package/composables/axios.ts +2 -2
  48. package/composables/classes.ts +227 -107
  49. package/composables/constants.ts +31 -51
  50. package/composables/index.ts +106 -2
  51. package/composables/styles.ts +33 -11
  52. package/configs/i18n.ts +15 -0
  53. package/layouts/default.vue +11 -8
  54. package/layouts/full.vue +1 -1
  55. package/locales/ru.json +647 -0
  56. package/nuxt.config.ts +14 -2
  57. package/package.json +35 -12
  58. package/pages/500.vue +4 -4
  59. package/pages/Token.vue +52 -0
  60. package/plugins/helperFunctionsPlugins.ts +11 -6
  61. package/plugins/storePlugin.ts +0 -1
  62. package/plugins/vuetifyPlugin.ts +8 -1
  63. package/store/data.store.ts +2666 -0
  64. package/store/form.store.ts +1 -1
  65. package/store/member.store.ts +164 -52
  66. package/store/rules.ts +193 -0
  67. package/types/enum.ts +83 -0
  68. package/types/env.d.ts +10 -0
  69. package/types/index.ts +279 -8
  70. package/components/Button/BtnIcon.vue +0 -47
  71. package/store/data.store.js +0 -2482
  72. package/store/messages.ts +0 -429
  73. package/store/rules.js +0 -153
@@ -0,0 +1,210 @@
1
+ <template>
2
+ <div class="rounded-lg border-[1px]" :class="[$styles.whiteBg, disabled && $styles.disabled]">
3
+ <div class="mt-3 ml-5">
4
+ <p :class="[$styles.textTitle, $styles.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="[$styles.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="isPanelLoading === false" class="w-full">
63
+ <div v-if="currentDictName === 'AgentData'" class="w-full flex flex-col gap-2 p-2">
64
+ <div v-for="(agent, index) of $dataStore[currentDictName]" :key="index">
65
+ <div
66
+ class="flex justify-between p-4 items-center cursor-pointer"
67
+ :class="[$styles.rounded, $styles.blueBgLight, $styles.blueBgLightHover]"
68
+ @click="pickPanelValue(agent)"
69
+ >
70
+ <div class="flex flex-col">
71
+ <span :class="[$styles.textSimple]">{{ $getFullNameShorted(agent.fullName ?? '', 2) }}</span>
72
+ <span :class="[$styles.mutedText]">
73
+ {{ agent.saleChannel ? `${agent.saleChannel} / ${$getFullNameShorted(agent.managerName ?? '', 2)}` : `${agent.managerName}` }}
74
+ </span>
75
+ </div>
76
+ <i
77
+ class="mdi text-xl"
78
+ :class="[agent.agentId === (panelValue as AgentData).agentId ? `mdi-radiobox-marked ${$styles.greenText}` : 'mdi-radiobox-blank text-[#636363]']"
79
+ ></i>
80
+ </div>
81
+ </div>
82
+ </div>
83
+ <div v-if="currentDictName === 'ManagerPolicy' || currentDictName === 'RegionPolicy' || currentDictName === 'SaleChanellPolicy'" class="w-full flex flex-col gap-2 p-2">
84
+ <div v-for="(item, index) in $dataStore[currentDictName].filter(i => (i.nameRu as string).toLowerCase().includes(searchQuery.toLowerCase()))" :key="index">
85
+ <base-panel-select-item :key="index" :text="item.nameRu ?? ''" :selected="item.ids === (panelValue as Value).ids" @click="pickPanelValue(item)" />
86
+ </div>
87
+ </div>
88
+ </div>
89
+
90
+ <base-loader v-if="isPanelLoading" class="absolute mt-10" :size="50" />
91
+ </div>
92
+ </Teleport>
93
+ </div>
94
+ </template>
95
+
96
+ <script lang="ts">
97
+ import { Value } from '../../composables/classes';
98
+ import { watchDebounced } from '@vueuse/core';
99
+
100
+ export default defineComponent({
101
+ props: {
102
+ title: {
103
+ type: String,
104
+ default: '',
105
+ },
106
+ disabled: {
107
+ type: Boolean,
108
+ default: false,
109
+ },
110
+ },
111
+ setup(props) {
112
+ type ManagerAttachmentFiels = 'SaleChanellPolicy' | 'RegionPolicy' | 'ManagerPolicy' | 'AgentData';
113
+ type FieldTypes = Value | AgentData;
114
+ const route = useRoute();
115
+ const dataStore = useDataStore();
116
+ const formStore = useFormStore();
117
+ const isPanelOpen = ref<boolean>(false);
118
+ const isPanelLoading = ref<boolean>(false);
119
+ const panelValue = ref<FieldTypes>(new Value());
120
+ const searchQuery = ref<string>('');
121
+ const currentDictName = ref<ManagerAttachmentFiels>();
122
+
123
+ const isReadonly = computed(
124
+ () =>
125
+ props.disabled ||
126
+ route.params.taskId === '0' ||
127
+ !dataStore.isInitiator() ||
128
+ (route.params.taskId !== '0' && (!dataStore.isProcessEditable(formStore.applicationData.statusCode) || !dataStore.isTask())),
129
+ );
130
+
131
+ const openPanel = async (currentDict: ManagerAttachmentFiels, title: string) => {
132
+ searchQuery.value = '';
133
+ if (dataStore.isTask() && !props.disabled) {
134
+ dataStore.panelAction = null;
135
+ dataStore.panel.open = true;
136
+ dataStore.panel.title = title;
137
+ currentDictName.value = currentDict;
138
+
139
+ if (currentDict === 'ManagerPolicy' && formStore.RegionPolicy.ids) {
140
+ isPanelLoading.value = true;
141
+ await dataStore.filterManagerByRegion(formStore.RegionPolicy.ids as string);
142
+ }
143
+
144
+ isPanelOpen.value = true;
145
+ panelValue.value = formStore[currentDict];
146
+ isPanelLoading.value = false;
147
+ } else {
148
+ dataStore.showToaster('error', dataStore.t('toaster.viewErrorText'));
149
+ }
150
+ };
151
+
152
+ const searchAgent = async () => {
153
+ if (searchQuery.value) {
154
+ isPanelLoading.value = true;
155
+ await dataStore.searchAgentByName(searchQuery.value);
156
+ isPanelLoading.value = false;
157
+ }
158
+ };
159
+
160
+ const pickPanelValue = (answer: FieldTypes) => {
161
+ // @ts-ignore
162
+ formStore[currentDictName.value] = answer;
163
+ isPanelOpen.value = false;
164
+ dataStore.panel.open = false;
165
+ searchQuery.value = '';
166
+ };
167
+
168
+ watchDebounced(
169
+ searchQuery,
170
+ async searchQuery => {
171
+ if (searchQuery === null) {
172
+ searchQuery = '';
173
+ }
174
+ if (!!searchQuery && currentDictName.value === 'AgentData') {
175
+ await searchAgent();
176
+ }
177
+ },
178
+ { debounce: 1000 },
179
+ );
180
+
181
+ watch(
182
+ () => formStore.RegionPolicy,
183
+ (val, oldVal) => {
184
+ if (val.ids !== oldVal.ids) {
185
+ formStore.ManagerPolicy = new Value();
186
+ }
187
+ },
188
+ );
189
+
190
+ return {
191
+ // State
192
+ formStore,
193
+ isPanelOpen,
194
+ isPanelLoading,
195
+ panelValue,
196
+ searchQuery,
197
+ Value,
198
+ currentDictName,
199
+
200
+ // Computed
201
+ isReadonly,
202
+
203
+ // Functions
204
+ openPanel,
205
+ searchAgent,
206
+ pickPanelValue,
207
+ };
208
+ },
209
+ });
210
+ </script>
@@ -1,30 +1,34 @@
1
1
  <template>
2
- <div class="pt-3 pl-5 rounded-lg border-[1px]" :class="[$libStyles.whiteBg]">
2
+ <div class="pt-3 pl-5 rounded-lg border-[1px]" :class="[$styles.whiteBg, disabled && $styles.disabled]">
3
3
  <div>
4
- <p :class="[$libStyles.textTitle, $libStyles.greenText]">
5
- {{ $t('productConditions') }}
4
+ <p :class="[$styles.textTitle, $styles.greenText]">
5
+ {{ $dataStore.t('productConditions') }}
6
6
  </p>
7
- <p v-if="!!subtitle" :class="[$libStyles.greyText, $libStyles.textSimple]">{{ subtitle }}</p>
7
+ <p v-if="!!subtitle" :class="[$styles.greyText, $styles.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="[$styles.textSimple]" class="font-medium">{{ $dataStore.t('productConditionsForm.requestedSumInsured') }}</span>
11
+ <span v-if="hasPremium" :class="[$styles.textSimple]" class="font-medium">{{ $dataStore.t('productConditionsForm.insurancePremiumPerMonth') }}</span>
12
+ <span v-if="hasPolicyNumber" :class="[$styles.textSimple]" class="font-medium hidden lg:block">{{ $dataStore.t('buttons.InsuranceContract') }}</span>
13
+ <span v-if="hasContractDate" :class="[$styles.textSimple]" class="font-medium hidden lg:block">{{ $dataStore.t('productConditionsForm.contractDate') }}</span>
14
+ <span v-if="hasCoverPeriod" :class="[$styles.textSimple]" class="font-medium hidden lg:block">{{ $dataStore.t('productConditionsForm.coverPeriod') }}</span>
15
+ <span v-if="hasPayPeriod" :class="[$styles.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 && $styles.emptyBlockCol]">{{ amount }} </span>
19
+ <span v-if="hasPremium" :class="[premium === null && $styles.emptyBlockCol]"> {{ premium }}</span>
20
+ <span v-if="hasPolicyNumber" :class="[policyNumber === null && $styles.emptyBlockCol]" class="hidden lg:block"> {{ policyNumber }}</span>
21
+ <span v-if="hasContractDate" :class="[policyNumber === null && $styles.emptyBlockCol]" class="hidden lg:block"> {{ contractDate }}</span>
22
+ <span v-if="hasCoverPeriod" :class="[coverPeriod === null && $styles.emptyBlockCol]" class="hidden lg:block">{{ coverPeriod }} </span>
23
+ <span v-if="hasPayPeriod" :class="[paymentPeriod === null && $styles.emptyBlockCol]" class="hidden lg:block">
20
24
  {{ paymentPeriod }}
21
25
  </span>
22
26
  <div
23
- class="rounded-br-lg transition-all h-[70px] w-[60px] relative place-self-end cursor-pointer"
24
- :class="[$libStyles.blueBgLight, $libStyles.blueBgLightHover]"
25
- @click="$emit('onMore', { whichForm: 'productConditions' })"
27
+ class="rounded-br-lg transition-all h-[70px] w-[60px] relative place-self-end"
28
+ :class="[$styles.blueBgLight, $styles.blueBgLightHover, disabled ? $styles.disabled : 'cursor-pointer']"
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>
@@ -37,8 +41,13 @@ export default defineComponent({
37
41
  type: String,
38
42
  default: '',
39
43
  },
44
+ disabled: {
45
+ type: Boolean,
46
+ default: false,
47
+ },
40
48
  },
41
49
  setup() {
50
+ const dataStore = useDataStore();
42
51
  const formStore = useFormStore();
43
52
 
44
53
  const amount = computed(() =>
@@ -47,12 +56,49 @@ export default defineComponent({
47
56
  const premium = computed(() =>
48
57
  formStore.productConditionsForm && formStore.productConditionsForm.insurancePremiumPerMonth ? formStore.productConditionsForm.insurancePremiumPerMonth : null,
49
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
+ );
50
65
  const coverPeriod = computed(() => (formStore.productConditionsForm && formStore.productConditionsForm.coverPeriod ? formStore.productConditionsForm.coverPeriod : null));
51
66
  const paymentPeriod = computed(() =>
52
67
  formStore.productConditionsForm && formStore.productConditionsForm.paymentPeriod && !!formStore.productConditionsForm.paymentPeriod.nameRu
53
68
  ? formStore.productConditionsForm.paymentPeriod.nameRu
54
69
  : null,
55
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
+ });
56
102
  return {
57
103
  // State
58
104
  formStore,
@@ -60,8 +106,16 @@ export default defineComponent({
60
106
  // Computed
61
107
  amount,
62
108
  premium,
109
+ policyNumber,
110
+ contractDate,
63
111
  coverPeriod,
64
112
  paymentPeriod,
113
+ hasSum,
114
+ hasPremium,
115
+ hasPolicyNumber,
116
+ hasContractDate,
117
+ hasPayPeriod,
118
+ hasCoverPeriod,
65
119
  };
66
120
  },
67
121
  });
@@ -0,0 +1,45 @@
1
+ <template>
2
+ <vue-date-picker
3
+ :model-value="modelValue"
4
+ :clearable="false"
5
+ :disabled="disabled"
6
+ :reaonly="readonly"
7
+ @update:modelValue="$emit('update:modelValue', $event)"
8
+ locale="ru"
9
+ model-type="dd.MM.yyyy"
10
+ position="left"
11
+ menu-class-name="!left-[30vw] md:!left-[70vw] lg:!left-[75vw]"
12
+ :teleport="teleport"
13
+ :offset="-50"
14
+ :close-on-scroll="true"
15
+ :enable-time-picker="false"
16
+ cancel-text="Отменить"
17
+ select-text="Выбрать"
18
+ >
19
+ <template #trigger>
20
+ <v-icon icon="mdi mdi-calendar-blank-outline cursor-pointer" />
21
+ </template>
22
+ </vue-date-picker>
23
+ </template>
24
+
25
+ <script lang="ts">
26
+ export default defineComponent({
27
+ props: {
28
+ modelValue: {
29
+ required: false,
30
+ },
31
+ disabled: {
32
+ type: Boolean,
33
+ default: false,
34
+ },
35
+ readonly: {
36
+ type: Boolean,
37
+ default: false,
38
+ },
39
+ teleport: {
40
+ type: String,
41
+ default: '.v-form',
42
+ },
43
+ },
44
+ });
45
+ </script>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="h-[60px] bg-white rounded border-b-[1px] border-b-[#f3f6fc] flex items-center pl-4" :class="[$libStyles.textTitle]">
2
+ <div class="h-[60px] bg-white rounded border-b-[1px] border-b-[#f3f6fc] flex items-center pl-4" :class="[$styles.textTitle]">
3
3
  <slot></slot>
4
4
  </div>
5
5
  </template>
@@ -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">
@@ -43,7 +43,6 @@ export default defineComponent({
43
43
  top: 20px;
44
44
  }
45
45
  .file-input .v-field__append-inner {
46
- padding-top: 18px;
47
46
  padding-right: 6px;
48
47
  }
49
48
  .file-input .v-field__append-inner i {
@@ -19,17 +19,31 @@
19
19
  :prepend-icon="prependIcon ? prependIcon : ''"
20
20
  :append-icon="appendIcon ? appendIcon : ''"
21
21
  :prepend-inner-icon="prependInnerIcon ? prependInnerIcon : ''"
22
- :append-inner-icon="appendInnerIcon ? appendInnerIcon : ''"
23
22
  :bg-color="bgColor ? bgColor : ''"
23
+ :suffix="suffix"
24
+ @input="$emit('input', $event)"
24
25
  @keyup.enter.prevent="submitted"
25
26
  @click:append="!props.readonly && $emit('append-out')"
26
27
  @click:prepend="!props.readonly && $emit('prepend-out')"
27
- @click:append-inner="!props.readonly && $emit('append')"
28
28
  @click:prepend-inner="!props.readonly && $emit('prepend')"
29
+ @click:clear="!props.readonly && $emit('on-clear')"
29
30
  @update:modelValue="$emit('update:modelValue', $event)"
30
31
  >
32
+ <template v-if="appendInnerIcon && appendInnerIcon.length" v-slot:append-inner>
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
+ />
44
+ </template>
31
45
  <template v-if="loading" #loader>
32
- <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 />
33
47
  </template>
34
48
  </v-text-field>
35
49
  </template>
@@ -65,6 +79,10 @@ export default defineComponent({
65
79
  type: String,
66
80
  default: '',
67
81
  },
82
+ suffix: {
83
+ type: String,
84
+ default: '',
85
+ },
68
86
  messages: {
69
87
  type: [String, Array<string>],
70
88
  },
@@ -108,11 +126,14 @@ export default defineComponent({
108
126
  appendInnerIcon: {
109
127
  type: String,
110
128
  },
129
+ teleport: {
130
+ type: String,
131
+ },
111
132
  bgColor: {
112
133
  type: String,
113
134
  },
114
135
  },
115
- emits: ['update:modelValue', 'submitted', 'prepend', 'append', 'prepend-out', 'append-out'],
136
+ emits: ['update:modelValue', 'submitted', 'prepend', 'append', 'prepend-out', 'append-out', 'input', 'on-clear'],
116
137
 
117
138
  setup(props, { emit }) {
118
139
  const submitted = (event: any) => {
@@ -132,9 +153,9 @@ export default defineComponent({
132
153
  border: none !important;
133
154
  outline: none !important;
134
155
  }
135
- .form-input input {
156
+ /* .form-input input {
136
157
  padding-top: 30px;
137
- }
158
+ } */
138
159
  .form-input .v-field {
139
160
  box-shadow: none;
140
161
  font-size: 14px;
@@ -143,7 +164,6 @@ export default defineComponent({
143
164
  top: 20px;
144
165
  }
145
166
  .form-input .v-field__append-inner {
146
- padding-top: 18px;
147
167
  padding-right: 6px;
148
168
  }
149
169
  .form-input .v-field__append-inner i {
@@ -168,4 +188,8 @@ export default defineComponent({
168
188
  .form-input .v-field--error {
169
189
  border-color: #ff5449;
170
190
  }
191
+ .form-input .v-text-field__suffix {
192
+ padding-top: 30px;
193
+ font-size: 16px !important;
194
+ }
171
195
  </style>
@@ -21,6 +21,7 @@
21
21
  :prepend-inner-icon="prependInnerIcon ? prependInnerIcon : ''"
22
22
  :append-inner-icon="appendInnerIcon ? appendInnerIcon : ''"
23
23
  :bg-color="bgColor ? bgColor : ''"
24
+ :suffix="suffix"
24
25
  @keyup.enter.prevent="submitted"
25
26
  @click:control="!props.readonly && $emit('append')"
26
27
  @click:clear="(props.readonly ? false : clearable) && $emit('update:modelValue', new Value())"
@@ -31,13 +32,13 @@
31
32
  @update:modelValue="$emit('update:modelValue', $event)"
32
33
  >
33
34
  <template v-if="loading" #loader>
34
- <v-progress-linear :active="loading" :color="color" absolute height="1" indeterminate></v-progress-linear>
35
+ <v-progress-linear :active="loading" :color="color" absolute height="1" indeterminate />
35
36
  </template>
36
37
  </v-text-field>
37
38
  </template>
38
39
 
39
40
  <script lang="ts">
40
- import { Value } from '@/composables/classes';
41
+ import { Value } from '../../composables/classes';
41
42
 
42
43
  export default defineComponent({
43
44
  name: 'BasePanelInput',
@@ -115,6 +116,10 @@ export default defineComponent({
115
116
  bgColor: {
116
117
  type: String,
117
118
  },
119
+ suffix: {
120
+ type: String,
121
+ default: '',
122
+ },
118
123
  },
119
124
  emits: ['update:modelValue', 'submitted', 'prepend', 'append', 'prepend-out', 'append-out', 'clear'],
120
125
 
@@ -0,0 +1,5 @@
1
+ <template>
2
+ <div class="min-w-[250px] h-[50px] border-[1px] border-[#dadada] bg-[#FFF] pl-4 flex cursor-pointer opacity-[87%]" :class="[$styles.textSimple, $styles.rounded]">
3
+ <slot></slot>
4
+ </div>
5
+ </template>
@@ -28,7 +28,7 @@
28
28
  @update:modelValue="$emit('update:modelValue', $event)"
29
29
  >
30
30
  <template v-if="loading" #loader>
31
- <v-progress-linear :active="loading" :color="color" absolute height="1" indeterminate></v-progress-linear>
31
+ <v-progress-linear :active="loading" :color="color" absolute height="1" indeterminate />
32
32
  </template>
33
33
  </v-text-field>
34
34
  </template>
@@ -117,7 +117,7 @@ export default defineComponent({
117
117
 
118
118
  return {
119
119
  submitted,
120
- props
120
+ props,
121
121
  };
122
122
  },
123
123
  });