hl-core 0.0.9-beta.3 → 0.0.9-beta.31

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 (72) hide show
  1. package/api/base.api.ts +862 -0
  2. package/api/index.ts +2 -620
  3. package/api/interceptors.ts +58 -14
  4. package/components/Button/Btn.vue +3 -3
  5. package/components/Complex/ContentBlock.vue +1 -1
  6. package/components/Complex/MessageBlock.vue +2 -2
  7. package/components/Complex/Page.vue +8 -2
  8. package/components/Complex/WhiteBlock.vue +7 -0
  9. package/components/Dialog/Dialog.vue +60 -15
  10. package/components/Dialog/FamilyDialog.vue +5 -5
  11. package/components/Form/DynamicForm.vue +99 -0
  12. package/components/Form/FormBlock.vue +36 -29
  13. package/components/Form/FormData.vue +48 -0
  14. package/components/Form/FormSection.vue +2 -2
  15. package/components/Form/FormTextSection.vue +3 -3
  16. package/components/Form/FormToggle.vue +3 -3
  17. package/components/Form/ManagerAttachment.vue +104 -52
  18. package/components/Form/ProductConditionsBlock.vue +73 -20
  19. package/components/Input/DynamicInput.vue +23 -0
  20. package/components/Input/EmptyFormField.vue +1 -1
  21. package/components/Input/FileInput.vue +15 -4
  22. package/components/Input/Monthpicker.vue +33 -0
  23. package/components/Input/PanelInput.vue +5 -1
  24. package/components/Input/RoundedEmptyField.vue +5 -0
  25. package/components/Input/RoundedSelect.vue +13 -0
  26. package/components/Input/SwitchInput.vue +64 -0
  27. package/components/Input/TextInput.vue +161 -0
  28. package/components/Layout/Drawer.vue +17 -4
  29. package/components/Layout/Header.vue +2 -2
  30. package/components/Layout/SettingsPanel.vue +10 -15
  31. package/components/List/ListEmpty.vue +1 -1
  32. package/components/Menu/MenuHover.vue +1 -1
  33. package/components/Menu/MenuNav.vue +3 -3
  34. package/components/Menu/MenuNavItem.vue +4 -4
  35. package/components/Pages/Anketa.vue +144 -65
  36. package/components/Pages/Auth.vue +21 -10
  37. package/components/Pages/ContragentForm.vue +505 -0
  38. package/components/Pages/Documents.vue +57 -11
  39. package/components/Pages/InvoiceInfo.vue +2 -2
  40. package/components/Pages/MemberForm.vue +253 -89
  41. package/components/Pages/ProductAgreement.vue +2 -11
  42. package/components/Pages/ProductConditions.vue +777 -164
  43. package/components/Panel/PanelHandler.vue +297 -54
  44. package/components/Panel/PanelSelectItem.vue +18 -3
  45. package/components/Panel/RightPanelCloser.vue +7 -0
  46. package/components/Utilities/IconBorder.vue +17 -0
  47. package/composables/axios.ts +1 -1
  48. package/composables/classes.ts +405 -9
  49. package/composables/constants.ts +40 -0
  50. package/composables/fields.ts +203 -0
  51. package/composables/index.ts +48 -0
  52. package/composables/styles.ts +22 -10
  53. package/configs/i18n.ts +0 -2
  54. package/layouts/default.vue +46 -4
  55. package/layouts/full.vue +1 -1
  56. package/locales/ru.json +428 -11
  57. package/nuxt.config.ts +1 -1
  58. package/package.json +30 -39
  59. package/pages/500.vue +2 -2
  60. package/pages/Token.vue +1 -0
  61. package/plugins/helperFunctionsPlugins.ts +6 -7
  62. package/plugins/vuetifyPlugin.ts +2 -0
  63. package/store/data.store.ts +936 -217
  64. package/store/extractStore.ts +17 -0
  65. package/store/form.store.ts +13 -1
  66. package/store/member.store.ts +1 -1
  67. package/store/rules.ts +38 -2
  68. package/types/enum.ts +8 -0
  69. package/types/form.ts +94 -0
  70. package/types/index.ts +162 -10
  71. package/components/Button/BtnIcon.vue +0 -47
  72. package/locales/kz.json +0 -590
@@ -0,0 +1,203 @@
1
+ import { i18n } from '../configs/i18n';
2
+ import { FieldTypes } from '../types/form';
3
+
4
+ const t = i18n.t;
5
+
6
+ export const FieldBase = ({
7
+ label = '',
8
+ placeholder = '',
9
+ readonly = false,
10
+ disabled = false,
11
+ modelValue = null,
12
+ iconName = null,
13
+ rules = [],
14
+ maxLength = null,
15
+ clearable = true,
16
+ hint = undefined,
17
+ suffix = null,
18
+ maska = null,
19
+ key = '',
20
+ fetchFrom = null,
21
+ }: InputBase): InputBase =>
22
+ ({
23
+ label,
24
+ placeholder,
25
+ readonly,
26
+ disabled,
27
+ modelValue,
28
+ iconName,
29
+ rules,
30
+ maxLength,
31
+ clearable,
32
+ hint,
33
+ suffix,
34
+ maska,
35
+ key,
36
+ fetchFrom,
37
+ } as InputBase);
38
+
39
+ export const TextInput = ({ ...rest }: Partial<TextInput>): TextInput => {
40
+ return {
41
+ ...FieldBase(rest),
42
+ type: FieldTypes.TEXT,
43
+ };
44
+ };
45
+
46
+ export const SwitchInput = ({ ...rest }: Partial<SwitchInput>): SwitchInput => {
47
+ return {
48
+ ...FieldBase(rest),
49
+ type: FieldTypes.SWITCH,
50
+ direction: 'horizontal',
51
+ trueValue: null,
52
+ falseValue: null,
53
+ labeling: false,
54
+ };
55
+ };
56
+
57
+ export const NumberInput = ({ ...rest }: Partial<NumberInput>): NumberInput => {
58
+ return {
59
+ ...FieldBase(rest),
60
+ type: FieldTypes.NUMBER,
61
+ };
62
+ };
63
+
64
+ export const dynamic = <T>(obj: T, key: keyof T) => {
65
+ return computed({
66
+ get: () => {
67
+ const value = obj[key];
68
+ if (typeof value === 'object' && value) {
69
+ if ('nameRu' in value) return value.nameRu as any;
70
+ }
71
+ return value;
72
+ },
73
+ set: (val: any) => {
74
+ obj[key] = val;
75
+ },
76
+ });
77
+ };
78
+
79
+ type PersonalDataKeys = 'iin' | 'phoneNumber' | 'lastName' | 'firstName' | 'middleName' | 'citizenship' | 'position' | 'email' | 'gender';
80
+ type PersonalData = Record<PersonalDataKeys, InputType>;
81
+
82
+ type AddressesKeys = 'country' | 'province' | 'regionType' | 'city' | 'quarter' | 'microDistrict' | 'street' | 'houseNumber';
83
+ type Address = Record<AddressesKeys, InputType>;
84
+
85
+ type RepeatedFields = {
86
+ personalData: PersonalData;
87
+ address: Address;
88
+ };
89
+
90
+ export const RepeatedFields: RepeatedFields = {
91
+ personalData: {
92
+ iin: TextInput({
93
+ label: t('form.iin'),
94
+ maska: 'iin',
95
+ }),
96
+ phoneNumber: TextInput({
97
+ label: t('form.phoneNumber'),
98
+ maska: 'phone',
99
+ }),
100
+ lastName: TextInput({
101
+ label: t('form.lastName'),
102
+ }),
103
+ firstName: TextInput({
104
+ label: t('form.firstName'),
105
+ }),
106
+ middleName: TextInput({
107
+ label: t('form.middleName'),
108
+ }),
109
+ citizenship: TextInput({
110
+ label: t('clients.form.citizenship'),
111
+ iconName: 'arrowRight',
112
+ fetchFrom: 'getCountries',
113
+ }),
114
+ position: TextInput({
115
+ label: t('clients.form.namePosition'),
116
+ }),
117
+ email: TextInput({
118
+ label: t('form.email'),
119
+ }),
120
+ gender: TextInput({
121
+ label: t('form.gender'),
122
+ }),
123
+ },
124
+ address: {
125
+ country: TextInput({
126
+ label: t('form.Country'),
127
+ iconName: 'arrowRight',
128
+ fetchFrom: 'getCountries',
129
+ }),
130
+ province: TextInput({
131
+ label: t('form.Province'),
132
+ iconName: 'arrowRight',
133
+ fetchFrom: 'getStates',
134
+ }),
135
+ regionType: TextInput({
136
+ label: t('form.RegionType'),
137
+ iconName: 'arrowRight',
138
+ fetchFrom: 'getLocalityTypes',
139
+ }),
140
+ city: TextInput({
141
+ label: t('form.City'),
142
+ iconName: 'arrowRight',
143
+ fetchFrom: 'getCities',
144
+ }),
145
+ quarter: TextInput({
146
+ label: t('form.Quarter'),
147
+ }),
148
+ microDistrict: TextInput({
149
+ label: t('form.MicroDistrict'),
150
+ }),
151
+ street: TextInput({
152
+ label: t('form.Street'),
153
+ }),
154
+ houseNumber: TextInput({
155
+ label: t('form.NumberHouse'),
156
+ }),
157
+ },
158
+ };
159
+
160
+ export class BaseFields {
161
+ public mutatedList: InputType[] = [];
162
+ public fieldsLength: number = 0;
163
+
164
+ init<T extends keyof RepeatedFields>(sectionName: T, fieldsOrder?: (keyof RepeatedFields[T])[] | null, excludeFields?: (keyof RepeatedFields[T])[] | null): InputType[] {
165
+ const inputsWithDefinedKey = Object.entries(RepeatedFields[sectionName]).map(([key, field]: [string, InputType]) => {
166
+ return { ...field, key };
167
+ });
168
+
169
+ const originalFields = Object.values(RepeatedFields[sectionName]);
170
+
171
+ if (fieldsOrder && !excludeFields) {
172
+ this.fieldsLength = fieldsOrder.length;
173
+ return inputsWithDefinedKey
174
+ .filter((field: InputType) => fieldsOrder.includes(field.key))
175
+ .sort((a: InputType, b: InputType) => {
176
+ return fieldsOrder.indexOf(a.key) - fieldsOrder.indexOf(b.key);
177
+ });
178
+ }
179
+
180
+ if (!fieldsOrder && excludeFields) {
181
+ this.fieldsLength = originalFields.length - excludeFields.length;
182
+ return inputsWithDefinedKey.filter((field: InputType) => !excludeFields.includes(field.key));
183
+ }
184
+
185
+ this.fieldsLength = originalFields.length;
186
+ return originalFields;
187
+ }
188
+
189
+ setModels(modelList: any[]) {
190
+ if (modelList.length !== this.fieldsLength) {
191
+ throw new Error('Invalid v-models');
192
+ } else {
193
+ return this.mutatedList.map((field: InputType, index: number) => {
194
+ return { ...field, modelValue: modelList[index] };
195
+ });
196
+ }
197
+ }
198
+
199
+ getFields<T extends keyof RepeatedFields>(sectionName: T, fieldsOrder?: (keyof RepeatedFields[T])[] | null, excludeFields?: (keyof RepeatedFields[T])[] | null): this {
200
+ this.mutatedList = this.init(sectionName, fieldsOrder, excludeFields);
201
+ return this;
202
+ }
203
+ }
@@ -30,6 +30,7 @@ export class Masks {
30
30
  date: string = '##.##.####';
31
31
  post: string = '######';
32
32
  threeDigit: string = '###';
33
+ iik: string = 'KZ################';
33
34
  }
34
35
 
35
36
  export const useMask = () => new Masks();
@@ -254,3 +255,50 @@ export const setAddressBeneficiary = (whichIndex: number, sameAddress: boolean)
254
255
  }
255
256
  }
256
257
  };
258
+
259
+ export const changeBridge = async (toBridge: 'efo' | 'lka', token: string) => {
260
+ const bridgeUrl = ref<string>(import.meta.env[`VITE_${toBridge.toUpperCase()}_URL`] as string);
261
+ if (!toBridge) return;
262
+ if (!bridgeUrl.value || !token) {
263
+ useDataStore().showToaster('error', `${useDataStore().t('toaster.noUrl')} [import.meta.env.VITE_${toBridge.toUpperCase()}_URL]`);
264
+ return;
265
+ }
266
+ const host = window.location.hostname;
267
+ if (toBridge === 'efo') {
268
+ if (host.startsWith('bpmsrv02') && bridgeUrl.value !== 'http://bpmsrv02:88') bridgeUrl.value = 'http://bpmsrv02:88';
269
+ if (host.startsWith('vega') && bridgeUrl.value !== 'http://vega:800') bridgeUrl.value = 'http://vega:800';
270
+ }
271
+ if (toBridge === 'lka') {
272
+ if (host.startsWith('bpmsrv02') && bridgeUrl.value !== 'http://bpmsrv02:890') bridgeUrl.value = 'http://bpmsrv02:890';
273
+ if (host.startsWith('vega') && bridgeUrl.value !== 'http://vega:890') bridgeUrl.value = 'http://vega:890';
274
+ }
275
+ window.open(`${bridgeUrl.value}/#/Token?token=${token}`, '_blank');
276
+ };
277
+
278
+ export const getFirstDayOfMonth = (year: number, month: number) => {
279
+ const date = new Date();
280
+ return new Date(year, month, 1, (date.getTimezoneOffset() / 60) * -1).toISOString();
281
+ };
282
+
283
+ export const getLastDayOfMonth = (year: number, month: number) => {
284
+ const date = new Date();
285
+ return new Date(year, month + 1, 0, (date.getTimezoneOffset() / 60) * -1).toISOString();
286
+ };
287
+
288
+ type WhichValuePerEnv = 'qrGenUrl';
289
+
290
+ export const getValuePerEnv = (which: WhichValuePerEnv) => {
291
+ type Envs = Exclude<EnvModes, 'vercel'>;
292
+ const valuesPerEnv: {
293
+ [key in WhichValuePerEnv]: {
294
+ [key in Envs]: string;
295
+ };
296
+ } = {
297
+ qrGenUrl: {
298
+ production: 'mobileSign:https://test-sign.halyklife.kz/EgovQr',
299
+ development: 'mobileSign:https://test-sign.halyklife.kz/EgovQr',
300
+ test: 'mobileSign:https://test-sign.halyklife.kz/EgovQr',
301
+ },
302
+ };
303
+ return valuesPerEnv[which][useEnv().envMode as Envs];
304
+ };
@@ -1,8 +1,8 @@
1
1
  export class Styles {
2
2
  // Base
3
- whiteBg: string = 'bg-white';
4
- whiteText: string = 'text-white';
5
- blackText: string = 'text-black';
3
+ whiteBg: string = 'bg-[#FFF]';
4
+ whiteText: string = '!text-[#FFF]';
5
+ blackText: string = '!text-[#000]';
6
6
  bodyBg: string = '!bg-[#F5F5F5]';
7
7
 
8
8
  whiteTextHover: string = 'hover:text-[#FFFFFF]';
@@ -11,7 +11,7 @@ export class Styles {
11
11
  blueBgHover: string = 'hover:bg-[#96abd6]';
12
12
  blueBgLight: string = 'bg-[#F3F6FC]';
13
13
  blueBgLightHover: string = 'hover:bg-[#f5f8fd]';
14
- blueText: string = 'text-[#A0B3D8]';
14
+ blueText: string = '!text-[#A0B3D8]';
15
15
  blueTextLight: string = 'text-[#F3F6FC]';
16
16
 
17
17
  // Green
@@ -23,13 +23,13 @@ export class Styles {
23
23
  greenBgLightHover: string = 'hover:bg-[#dbf0e4]';
24
24
 
25
25
  // Yellow
26
- yellowText: string = 'text-[#FAB31C]';
26
+ yellowText: string = '!text-[#FAB31C]';
27
27
  yellowBg: string = 'bg-[#FAB31C]';
28
28
  yellowBgHover: string = 'hover:bg-[#FAB31C]';
29
29
 
30
30
  // Grey
31
31
  greyBg: string = 'bg-[#B8B8B8]';
32
- greyText: string = 'text-[#B8B8B8]';
32
+ greyText: string = '!text-[#B8B8B8]';
33
33
  greyTextLight: string = 'text-[#B8B8B8]';
34
34
  greyIcon: string = 'text-[#DADADA]';
35
35
  greyIconBg: string = 'bg-[#DADADA]';
@@ -39,15 +39,22 @@ export class Styles {
39
39
  greyTextDark: string = 'text-[#9197A1]';
40
40
 
41
41
  // Red
42
- redText: string = 'text-[#FD2D39]';
42
+ redText: string = '!text-[#FD2D39]';
43
43
  redBg: string = 'bg-[#FF897D]';
44
44
  redBgHover: string = 'hover:bg-[#ff9b91]';
45
45
  // Error
46
46
  errorBg: string = 'bg-[#FF5449]';
47
- errorText: string = 'text-[#FF5449]';
47
+ errorText: string = '!text-[#FF5449]';
48
48
 
49
49
  // Border
50
50
  rounded: string = 'rounded-[8px]';
51
+ roundedT: string = 'rounded-t-[8px]';
52
+ roundedB: string = 'rounded-b-[8px]';
53
+ blueBorder: string = 'border-[1px] border-[#A0B3D8]';
54
+ blueLightBorder: string = 'border-[1px] border-[#F3F6FC]';
55
+ greenBorder: string = 'border-[1px] border-[#009C73]';
56
+ redBorder: string = 'border-[1px] border-[#FD2D39]';
57
+ yellowBorder: string = 'border-[1px] border-[#FAB31C]';
51
58
 
52
59
  // Text
53
60
  textSimple: string = 'text-[14px] leading-5';
@@ -63,6 +70,8 @@ export class Styles {
63
70
  redBtn: string;
64
71
  yellowBtn: string;
65
72
  whiteBtn: string;
73
+ whiteBorderBtn: string;
74
+ whiteBtnBlueBr: string;
66
75
  blueLightBtn: string;
67
76
  greenLightBtn: string;
68
77
 
@@ -70,9 +79,10 @@ export class Styles {
70
79
  flexColNav: string;
71
80
  emptyBlockCol: string;
72
81
  scrollPage: string;
82
+ flexCenter: string = 'flex items-center justify-center';
73
83
 
74
84
  // Muted or disabled
75
- mutedText: string = 'text-[#99A3B3]';
85
+ mutedText: string = '!text-[#99A3B3]';
76
86
  disabled: string = 'cursor-not-allowed opacity-50';
77
87
 
78
88
  constructor() {
@@ -81,14 +91,16 @@ export class Styles {
81
91
  this.redBtn = `${this.redBg} ${this.whiteText} ${this.textTitle} ${this.rounded} w-full ${this.redBgHover}`;
82
92
  this.yellowBtn = `${this.yellowBg} ${this.whiteText} ${this.textTitle} ${this.rounded} w-full ${this.yellowBgHover}`;
83
93
  this.blueBtn = `${this.blueBg} ${this.whiteText} ${this.textTitle} ${this.rounded} w-full ${this.blueBgHover}`;
94
+ this.whiteBtnBlueBr = `${this.whiteBg} ${this.blueText} ${this.textTitle} ${this.rounded} w-full ${this.blueBgLightHover} ${this.blueBorder}`;
84
95
  this.whiteBtn = ` ${this.blackText} ${this.textTitle} ${this.rounded} w-full ${this.blueLightBgHover}`;
96
+ this.whiteBorderBtn = ` ${this.blackText} ${this.textTitle} ${this.rounded} w-full ${this.blueLightBgHover} border-[#A0B3D8] border-[1px]`;
85
97
  this.blueLightBtn = `${this.blueBgLight} ${this.greyTextLight} ${this.textTitle} ${this.rounded} w-full ${this.blueBgLightHover}`;
86
98
  this.greenLightBtn = `${this.greenBgLight} ${this.greenText} ${this.textTitle} ${this.rounded} w-full ${this.greenBgLightHover}`;
87
99
 
88
100
  // Complex
89
101
  this.flexColNav = 'flex flex-col gap-[10px] px-2 pt-[14px]';
90
102
  this.emptyBlockCol = 'w-[60px] sm:w-[100px] h-[30%] rounded-[8px] bg-[#f5f5f5]';
91
- this.scrollPage = 'max-h-[90vh] overflow-y-scroll';
103
+ this.scrollPage = 'max-h-[85svh] overflow-y-scroll';
92
104
  }
93
105
  }
94
106
 
package/configs/i18n.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import { createI18n } from 'vue-i18n';
2
2
  import ru from '../locales/ru.json';
3
- import kz from '../locales/kz.json';
4
3
 
5
4
  const instance = createI18n({
6
5
  legacy: false,
@@ -8,7 +7,6 @@ const instance = createI18n({
8
7
  locale: 'ru',
9
8
  messages: {
10
9
  ru,
11
- kz,
12
10
  },
13
11
  });
14
12
 
@@ -1,15 +1,15 @@
1
1
  <template>
2
2
  <div class="h-full z-[1]" :class="[$dataStore.hasLayoutMargins ? 'lg:mx-[22px] lg:my-[33px] lg:shadow-xl' : '']">
3
- <div :class="[$libStyles.greenBg]" class="hidden z-[-1] lg:block absolute left-0 top-0 h-[200px] w-full"></div>
4
- <section class="flex h-full" :class="$libStyles.blueBgLight">
3
+ <div :class="[$styles.greenBg]" class="hidden z-[-1] lg:block absolute left-0 top-0 h-[200px] w-full"></div>
4
+ <section class="flex h-full relative" :class="$styles.blueBgLight">
5
5
  <base-menu-nav
6
6
  v-if="$dataStore.showNav"
7
7
  :selected="$dataStore.menu.selectedItem"
8
8
  :title="$dataStore.menu.title ?? 'Страховые продукты'"
9
9
  :has-back="$dataStore.menu.hasBack ?? false"
10
10
  :back-icon="$dataStore.menu.backIcon ?? 'mdi-arrow-left'"
11
- :more-icon="$dataStore.menu.moreIcon ?? 'mdi-cog-outline'"
12
- :has-more="'hasMore' in $route.meta && $route.meta.hasMore ? !!$route.meta.hasMore : false"
11
+ :more-icon="$dataStore.menu.moreIcon ?? 'mdi-dots-vertical'"
12
+ :has-more="'hasMore' in $route.meta ? !!$route.meta.hasMore : true"
13
13
  :class="{
14
14
  // @ts-ignore
15
15
  '!hidden': !$display().lgAndUp.value && !!$dataStore.menu.selectedItem.title,
@@ -23,6 +23,7 @@
23
23
  </template>
24
24
  </base-menu-nav>
25
25
  <slot></slot>
26
+ <base-drawer which-panel="rightPanel" :panel-title="$dataStore.rightPanel.title" side="right" />
26
27
  <base-settings-panel />
27
28
  </section>
28
29
  </div>
@@ -44,6 +45,44 @@ const onLink = async (item: MenuItem) => {
44
45
  const onBack = async (item: MenuItem) => {
45
46
  if (dataStore.menu.onBack) await dataStore.menu.onBack(item);
46
47
  };
48
+
49
+ watch(
50
+ () => dataStore.settings.open,
51
+ () => {
52
+ if (dataStore.settings.open === true && dataStore.panel.open === true) {
53
+ dataStore.panel.open = false;
54
+ dataStore.panelAction = null;
55
+ }
56
+ if (dataStore.settings.open === true && dataStore.rightPanel.open === true) {
57
+ dataStore.rightPanel.open = false;
58
+ }
59
+ },
60
+ );
61
+
62
+ watch(
63
+ () => dataStore.rightPanel.open,
64
+ () => {
65
+ if (dataStore.rightPanel.open === true && dataStore.panel.open === true) {
66
+ dataStore.panel.open = false;
67
+ dataStore.panelAction = null;
68
+ }
69
+ if (dataStore.rightPanel.open === true && dataStore.settings.open === true) {
70
+ dataStore.settings.open = false;
71
+ }
72
+ },
73
+ );
74
+
75
+ watch(
76
+ () => dataStore.panel.open,
77
+ () => {
78
+ if (dataStore.panel.open === true && dataStore.settings.open === true) {
79
+ dataStore.settings.open = false;
80
+ }
81
+ if (dataStore.panel.open === true && dataStore.rightPanel.open === true) {
82
+ dataStore.rightPanel.open = false;
83
+ }
84
+ },
85
+ );
47
86
  </script>
48
87
  <style>
49
88
  .mainpage,
@@ -72,4 +111,7 @@ label .v-label .v-field-label,
72
111
  /* line-height: v-bind('dataStore.fontSize*1 + "px"') !important; */
73
112
  padding-bottom: 3px;
74
113
  }
114
+ .v-card {
115
+ border-radius: 8px !important;
116
+ }
75
117
  </style>
package/layouts/full.vue CHANGED
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div class="h-full z-[1]" :class="[$dataStore.hasLayoutMargins ? 'lg:mx-[22px] lg:my-[33px] lg:shadow-xl' : '']">
3
- <div :class="[$libStyles.greenBg]" class="hidden lg:block absolute z-[-1] left-0 top-0 h-[200px] w-full"></div>
3
+ <div :class="[$styles.greenBg]" class="hidden lg:block absolute z-[-1] left-0 top-0 h-[200px] w-full"></div>
4
4
  <slot></slot>
5
5
  </div>
6
6
  </template>