hl-core 0.0.8-beta.9 → 0.0.9-beta.1

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 (59) hide show
  1. package/api/index.ts +100 -34
  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 +51 -28
  9. package/components/Form/FormSection.vue +4 -1
  10. package/components/Form/FormToggle.vue +2 -3
  11. package/components/Form/ManagerAttachment.vue +21 -20
  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 +49 -31
  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 +503 -343
  31. package/components/Pages/ProductAgreement.vue +4 -2
  32. package/components/Pages/ProductConditions.vue +494 -95
  33. package/components/Panel/PanelHandler.vue +91 -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 +165 -81
  39. package/composables/constants.ts +25 -52
  40. package/composables/index.ts +80 -2
  41. package/composables/styles.ts +8 -3
  42. package/configs/i18n.ts +2 -4
  43. package/layouts/default.vue +6 -6
  44. package/locales/kz.json +532 -346
  45. package/locales/ru.json +210 -22
  46. package/nuxt.config.ts +1 -1
  47. package/package.json +38 -12
  48. package/pages/500.vue +2 -2
  49. package/pages/Token.vue +51 -0
  50. package/plugins/helperFunctionsPlugins.ts +2 -1
  51. package/plugins/vuetifyPlugin.ts +3 -1
  52. package/store/{data.store.js → data.store.ts} +1116 -752
  53. package/store/form.store.ts +1 -1
  54. package/store/member.store.ts +94 -72
  55. package/store/{rules.js → rules.ts} +54 -26
  56. package/types/enum.ts +83 -0
  57. package/types/env.d.ts +10 -0
  58. package/types/index.ts +197 -7
  59. package/locales/en.json +0 -399
@@ -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
 
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div class="rounded-lg border-[1px]" :class="[$libStyles.whiteBg, disabled && $libStyles.disabled]">
3
3
  <div class="mt-3 ml-5">
4
- <p :class="[$libStyles.textTitle, $libStyles.greenText]">{{ $t('form.attachManager') }}</p>
4
+ <p :class="[$libStyles.textTitle, $libStyles.greenText]">{{ $dataStore.t('form.attachManager') }}</p>
5
5
  </div>
6
6
  <v-form ref="vForm" class="flex flex-col mt-1">
7
7
  <base-panel-input
@@ -10,55 +10,55 @@
10
10
  :value="formStore.SaleChanellPolicy.nameRu"
11
11
  :readonly="isReadonly"
12
12
  :clearable="!isReadonly"
13
- :label="$t('form.salesChanell')"
13
+ :label="$dataStore.t('form.salesChanell')"
14
14
  :rules="$rules.objectRequired"
15
15
  append-inner-icon="mdi mdi-chevron-right"
16
- @append="openPanel('SaleChanellPolicy', $t('form.salesChanell'))"
17
- ></base-panel-input>
16
+ @append="openPanel('SaleChanellPolicy', $dataStore.t('form.salesChanell'))"
17
+ />
18
18
  <base-panel-input
19
19
  class="pl-1"
20
20
  v-model="formStore.RegionPolicy"
21
21
  :value="formStore.RegionPolicy.nameRu"
22
22
  :readonly="isReadonly"
23
23
  :clearable="!isReadonly"
24
- :label="$t('form.Region')"
24
+ :label="$dataStore.t('form.Region')"
25
25
  :rules="$rules.objectRequired"
26
26
  append-inner-icon="mdi mdi-chevron-right"
27
- @append="openPanel('RegionPolicy', $t('form.Region'))"
28
- ></base-panel-input>
27
+ @append="openPanel('RegionPolicy', $dataStore.t('form.Region'))"
28
+ />
29
29
  <base-panel-input
30
30
  class="pl-1"
31
31
  v-model="formStore.ManagerPolicy"
32
32
  :value="formStore.ManagerPolicy.nameRu"
33
33
  :readonly="isReadonly"
34
34
  :clearable="!isReadonly"
35
- :label="$t('form.manager')"
35
+ :label="$dataStore.t('form.manager')"
36
36
  :rules="$rules.objectRequired"
37
37
  append-inner-icon="mdi mdi-chevron-right"
38
- @append="openPanel('ManagerPolicy', $t('form.manager'))"
39
- ></base-panel-input>
38
+ @append="openPanel('ManagerPolicy', $dataStore.t('form.manager'))"
39
+ />
40
40
  <base-panel-input
41
41
  class="pl-1"
42
42
  v-model="formStore.AgentData"
43
43
  :value="formStore.AgentData.fullName"
44
44
  :readonly="isReadonly"
45
45
  :clearable="!isReadonly"
46
- :label="$t('form.agent')"
46
+ :label="$dataStore.t('form.agent')"
47
47
  :rules="$rules.agentDataRequired"
48
48
  append-inner-icon="mdi mdi-chevron-right"
49
- @append="openPanel('AgentData', $t('form.agent'))"
50
- ></base-panel-input>
49
+ @append="openPanel('AgentData', $dataStore.t('form.agent'))"
50
+ />
51
51
  </v-form>
52
52
  <Teleport v-if="isPanelOpen" to="#panel-actions">
53
53
  <div :class="[$libStyles.scrollPage]" class="flex flex-col items-center">
54
54
  <base-rounded-input
55
- v-model="searchQuery"
56
- :label="$t('labels.search')"
55
+ v-model.trim="searchQuery"
56
+ :label="$dataStore.t('labels.search')"
57
57
  class="w-full p-2"
58
58
  :hide-details="true"
59
59
  :append-inner-icon="currentDictName === 'AgentData' ? 'mdi mdi-magnify' : ''"
60
60
  @append="searchAgent"
61
- ></base-rounded-input>
61
+ />
62
62
  <div v-if="dictList && isPanelLoading === false" class="w-full flex flex-col gap-2 p-2">
63
63
  <div v-for="(item, index) in dictList" :key="item.id">
64
64
  <base-panel-select-item
@@ -66,17 +66,17 @@
66
66
  :text="currentDictName === 'AgentData' ? item.fullName : (item.nameRu as string)"
67
67
  :selected="currentDictName === 'AgentData' ? item.fullName === panelValue.fullName : item.nameRu === panelValue.nameRu"
68
68
  @click="pickPanelValue(item)"
69
- ></base-panel-select-item>
69
+ />
70
70
  </div>
71
71
  </div>
72
- <base-loader v-if="isPanelLoading" class="absolute mt-10" :size="50"></base-loader>
72
+ <base-loader v-if="isPanelLoading" class="absolute mt-10" :size="50" />
73
73
  </div>
74
74
  </Teleport>
75
75
  </div>
76
76
  </template>
77
77
 
78
78
  <script lang="ts">
79
- import { Value } from '@/composables/classes';
79
+ import { Value } from '../../composables/classes';
80
80
 
81
81
  export default defineComponent({
82
82
  props: {
@@ -117,6 +117,7 @@ export default defineComponent({
117
117
  () =>
118
118
  props.disabled ||
119
119
  route.params.taskId === '0' ||
120
+ !dataStore.isInitiator() ||
120
121
  (route.params.taskId !== '0' && (!dataStore.isProcessEditable(formStore.applicationData.statusCode) || !dataStore.isTask())),
121
122
  );
122
123
 
@@ -130,7 +131,7 @@ export default defineComponent({
130
131
 
131
132
  if (currentDict === 'ManagerPolicy') {
132
133
  isPanelLoading.value = true;
133
- await dataStore.filterManagerByRegion(formStore.RegionPolicy?.ids);
134
+ await dataStore.filterManagerByRegion(String(formStore.RegionPolicy.ids ?? ''));
134
135
  }
135
136
 
136
137
  isPanelOpen.value = true;
@@ -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>
@@ -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
 
@@ -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
  });
@@ -0,0 +1,137 @@
1
+ <template>
2
+ <v-select
3
+ class="rounded-select"
4
+ :model-value="modelValue"
5
+ :rules="rules"
6
+ :loading="loading"
7
+ :placeholder="placeholder"
8
+ :label="label"
9
+ :variant="variant"
10
+ :clear-icon="clearIcon"
11
+ :color="color"
12
+ :hint="hint"
13
+ :clearable="props.readonly ? false : clearable"
14
+ :disabled="disabled"
15
+ :readonly="props.readonly"
16
+ :prepend-icon="prependIcon ? prependIcon : ''"
17
+ :append-icon="appendIcon ? appendIcon : ''"
18
+ :prepend-inner-icon="prependInnerIcon ? prependInnerIcon : ''"
19
+ :append-inner-icon="appendInnerIcon ? appendInnerIcon : ''"
20
+ :bg-color="bgColor ? bgColor : ''"
21
+ :items="items"
22
+ @click:append="!props.readonly && $emit('append-out')"
23
+ @click:prepend="!props.readonly && $emit('prepend-out')"
24
+ @click:append-inner="!props.readonly && $emit('append')"
25
+ @click:prepend-inner="!props.readonly && $emit('prepend')"
26
+ @update:modelValue="$emit('update:modelValue', $event)"
27
+ >
28
+ <template v-if="loading" #loader>
29
+ <v-progress-linear :active="loading" :color="color" absolute height="1" indeterminate />
30
+ </template>
31
+ </v-select>
32
+ </template>
33
+
34
+ <script lang="ts">
35
+ export default defineComponent({
36
+ name: 'BaseRoundedSelect',
37
+ props: {
38
+ modelValue: {
39
+ required: false,
40
+ },
41
+ loading: {
42
+ type: Boolean,
43
+ default: false,
44
+ },
45
+ items: {
46
+ type: Array<any>,
47
+ default: [],
48
+ },
49
+ clearable: {
50
+ type: Boolean,
51
+ default: true,
52
+ },
53
+ disabled: {
54
+ type: Boolean,
55
+ default: false,
56
+ },
57
+ readonly: {
58
+ type: Boolean,
59
+ default: false,
60
+ },
61
+ placeholder: {
62
+ type: String,
63
+ default: '',
64
+ },
65
+ label: {
66
+ type: String,
67
+ default: '',
68
+ },
69
+ hint: {
70
+ type: String,
71
+ default: '',
72
+ },
73
+ rules: {
74
+ type: Array<any>,
75
+ default: [],
76
+ },
77
+ variant: {
78
+ type: String as PropType<InputVariants>,
79
+ default: 'solo',
80
+ },
81
+ color: {
82
+ type: String,
83
+ default: '#009c73',
84
+ },
85
+ clearIcon: {
86
+ type: String,
87
+ default: 'mdi-close',
88
+ },
89
+ prependIcon: {
90
+ type: String,
91
+ },
92
+ appendIcon: {
93
+ type: String,
94
+ },
95
+ prependInnerIcon: {
96
+ type: String,
97
+ },
98
+ appendInnerIcon: {
99
+ type: String,
100
+ },
101
+ bgColor: {
102
+ type: String,
103
+ },
104
+ },
105
+ emits: ['update:modelValue', 'submitted', 'prepend', 'append', 'prepend-out', 'append-out'],
106
+
107
+ setup(props, { emit }) {
108
+ const submitted = (event: any) => {
109
+ emit('submitted', event);
110
+ };
111
+
112
+ return {
113
+ submitted,
114
+ props,
115
+ };
116
+ },
117
+ });
118
+ </script>
119
+
120
+ <style>
121
+ .rounded-select input:focus {
122
+ border: none !important;
123
+ outline: none !important;
124
+ }
125
+ .rounded-select .v-label.v-field-label {
126
+ top: 20px;
127
+ }
128
+ .rounded-select .v-field {
129
+ border-radius: 8px;
130
+ border: 1px solid #dadada;
131
+ box-shadow: none;
132
+ font-size: 14px;
133
+ }
134
+ .rounded-select .v-field--error {
135
+ border-color: #ff5449;
136
+ }
137
+ </style>
@@ -8,11 +8,12 @@
8
8
  :disable-resize-watcher="true"
9
9
  :disable-route-watcher="true"
10
10
  >
11
- <base-header :title="panelTitle" :has-back="true" back-icon="mdi-close" class="justify-center" @onBack="closePanel"></base-header>
11
+ <base-header :title="panelTitle" :has-back="true" back-icon="mdi-close" class="justify-center" @onBack="closePanel" />
12
12
  <div v-if="$dataStore.panelAction === null" class="flex flex-col" id="panel-actions">
13
13
  <slot></slot>
14
14
  </div>
15
- <base-panel-handler v-else></base-panel-handler>
15
+ <base-panel-handler v-else />
16
+ <slot name="panel"></slot>
16
17
  </v-navigation-drawer>
17
18
  </template>
18
19
 
@@ -1,8 +1,14 @@
1
1
  <template>
2
2
  <header class="relative w-full h-[70px] text-center font-medium align-middle flex items-center border-b-[1px]" :class="[$libStyles.blueBgLight, $libStyles.textSimple]">
3
- <i v-if="hasBack" @click="$emit('onBack')" class="absolute left-5 mdi text-xl cursor-pointer" :class="[backIcon]"></i>
3
+ <i v-if="hasBack" @click="$emit('onBack')" class="absolute left-5 mdi text-xl cursor-pointer transition-all" :class="[backIcon, backIconAnim]"></i>
4
4
  <span class="mx-10">{{ title }}</span>
5
- <i v-if="hasMore" @click="$emit('onMore')" class="mdi absolute right-5 text-xl cursor-pointer" :class="[moreIcon, hideMoreOnLg ? 'lg:!hidden' : '']"> </i>
5
+ <i
6
+ v-if="hasMore"
7
+ @click="$emit('onMore')"
8
+ class="mdi absolute right-5 text-xl cursor-pointer transition-all"
9
+ :class="[moreIcon, hideMoreOnLg ? 'lg:!hidden' : '', moreIconAnim]"
10
+ >
11
+ </i>
6
12
  </header>
7
13
  </template>
8
14
 
@@ -35,14 +41,44 @@ export default defineComponent({
35
41
  },
36
42
  },
37
43
  emits: ['onBack', 'onMore'],
38
- setup() {
44
+ setup(props) {
39
45
  const dataStore = useDataStore();
40
46
 
41
47
  const onClickOutside = () => {
42
48
  dataStore.settings.open = false;
43
49
  };
44
50
 
45
- return { onClickOutside };
51
+ const backIconAnim = computed(() => {
52
+ const icon = props.backIcon;
53
+ switch (icon) {
54
+ case 'mdi-arrow-left':
55
+ case 'mdi-account-arrow-left':
56
+ return 'hover:-translate-x-[2px]';
57
+ case 'mdi-close':
58
+ return 'hover:scale-110';
59
+ default:
60
+ return '';
61
+ }
62
+ });
63
+
64
+ const moreIconAnim = computed(() => {
65
+ const icon = props.moreIcon;
66
+ switch (icon) {
67
+ case 'mdi-cog-outline':
68
+ return 'hover:rotate-[30deg]';
69
+ default:
70
+ return '';
71
+ }
72
+ });
73
+
74
+ return {
75
+ // Computed
76
+ backIconAnim,
77
+ moreIconAnim,
78
+
79
+ // Functions
80
+ onClickOutside,
81
+ };
46
82
  },
47
83
  });
48
84
  </script>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <v-progress-circular :size="size" :width="width" :indeterminate="indeterminate" :color="color" :bg-color="bgColor"></v-progress-circular>
2
+ <v-progress-circular :size="size" :width="width" :indeterminate="indeterminate" :color="color" :bg-color="bgColor" />
3
3
  </template>
4
4
 
5
5
  <script lang="ts">