hl-core 0.0.9-beta.2 → 0.0.9-beta.20

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 (63) hide show
  1. package/api/base.api.ts +684 -0
  2. package/api/index.ts +2 -620
  3. package/api/interceptors.ts +52 -14
  4. package/components/Button/Btn.vue +3 -3
  5. package/components/Complex/ContentBlock.vue +1 -1
  6. package/components/Complex/MessageBlock.vue +1 -1
  7. package/components/Complex/Page.vue +7 -1
  8. package/components/Complex/WhiteBlock.vue +7 -0
  9. package/components/Dialog/Dialog.vue +2 -2
  10. package/components/Dialog/FamilyDialog.vue +5 -5
  11. package/components/Form/FormBlock.vue +36 -29
  12. package/components/Form/FormSection.vue +2 -2
  13. package/components/Form/FormTextSection.vue +3 -3
  14. package/components/Form/FormToggle.vue +3 -3
  15. package/components/Form/ManagerAttachment.vue +55 -42
  16. package/components/Form/ProductConditionsBlock.vue +73 -20
  17. package/components/Input/EmptyFormField.vue +1 -1
  18. package/components/Input/FileInput.vue +8 -3
  19. package/components/Input/Monthpicker.vue +33 -0
  20. package/components/Input/PanelInput.vue +5 -1
  21. package/components/Input/RoundedEmptyField.vue +5 -0
  22. package/components/Input/RoundedSelect.vue +13 -0
  23. package/components/Layout/Drawer.vue +2 -1
  24. package/components/Layout/Header.vue +1 -1
  25. package/components/Layout/SettingsPanel.vue +5 -9
  26. package/components/List/ListEmpty.vue +1 -1
  27. package/components/Menu/MenuHover.vue +1 -1
  28. package/components/Menu/MenuNav.vue +1 -1
  29. package/components/Menu/MenuNavItem.vue +4 -4
  30. package/components/Pages/Anketa.vue +88 -47
  31. package/components/Pages/Auth.vue +9 -9
  32. package/components/Pages/ContragentForm.vue +505 -0
  33. package/components/Pages/Documents.vue +5 -5
  34. package/components/Pages/InvoiceInfo.vue +2 -2
  35. package/components/Pages/MemberForm.vue +215 -59
  36. package/components/Pages/ProductAgreement.vue +1 -3
  37. package/components/Pages/ProductConditions.vue +677 -151
  38. package/components/Panel/PanelHandler.vue +86 -21
  39. package/components/Panel/PanelSelectItem.vue +18 -3
  40. package/components/Utilities/IconBorder.vue +17 -0
  41. package/composables/axios.ts +1 -1
  42. package/composables/classes.ts +276 -11
  43. package/composables/constants.ts +43 -0
  44. package/composables/index.ts +40 -4
  45. package/composables/styles.ts +20 -10
  46. package/configs/i18n.ts +0 -2
  47. package/layouts/default.vue +5 -2
  48. package/layouts/full.vue +1 -1
  49. package/locales/ru.json +202 -6
  50. package/nuxt.config.ts +1 -1
  51. package/package.json +30 -39
  52. package/pages/500.vue +2 -2
  53. package/pages/Token.vue +1 -0
  54. package/plugins/helperFunctionsPlugins.ts +6 -7
  55. package/plugins/vuetifyPlugin.ts +2 -0
  56. package/store/data.store.ts +541 -211
  57. package/store/form.store.ts +11 -1
  58. package/store/member.store.ts +1 -1
  59. package/store/rules.ts +37 -2
  60. package/types/enum.ts +6 -0
  61. package/types/index.ts +145 -31
  62. package/components/Button/BtnIcon.vue +0 -47
  63. package/locales/kz.json +0 -585
@@ -1,18 +1,18 @@
1
1
  <template>
2
2
  <button
3
3
  type="button"
4
- class="transition-all"
4
+ class="transition-all border-solid"
5
5
  @click="$emit('clicked')"
6
6
  :disabled="disabled || loading"
7
7
  :class="[
8
8
  disabled ? 'disabled' : '',
9
9
  classes,
10
10
  btn,
11
- $libStyles[`btnH${$capitalize(size)}` as keyof typeof $libStyles],
11
+ $styles[`btnH${$capitalize(size)}` as keyof typeof $styles],
12
12
  ]"
13
13
  >
14
14
  <base-loader v-if="loading" :size="24" color="#FFF" bg-color="" :width="2" />
15
- <span v-if="!loading">{{ text }}</span>
15
+ <span class="!text-inherit" v-if="!loading">{{ text }}</span>
16
16
  </button>
17
17
  </template>
18
18
 
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="w-full p-4" :class="[$libStyles.blueBgLight, $libStyles.rounded]">
2
+ <div class="w-full p-4" :class="[$styles.blueBgLight, $styles.rounded]">
3
3
  <slot></slot>
4
4
  </div>
5
5
  </template>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="text-left p-6 mb-4" :class="[color, $libStyles.rounded]">
2
+ <div class="text-left p-6" :class="[color, $styles.rounded, $styles.textTitle]">
3
3
  <v-icon :icon="icon" class="mr-4"></v-icon>
4
4
  {{ text }}
5
5
  </div>
@@ -1,6 +1,7 @@
1
1
  <template>
2
- <base-content class="flex-col" :class="[$libStyles.whiteBg]">
2
+ <base-content class="flex-col" :class="[$styles.whiteBg]">
3
3
  <base-header
4
+ v-if="customHeader === false"
4
5
  class="justify-center lg:pl-14"
5
6
  :has-back="hasBack"
6
7
  :back-icon="backIcon"
@@ -10,6 +11,7 @@
10
11
  @onBack="$emit('onBack')"
11
12
  @onMore="$emit('onMore')"
12
13
  />
14
+ <slot name="header"></slot>
13
15
  <slot></slot>
14
16
  </base-content>
15
17
  </template>
@@ -37,6 +39,10 @@ export default defineComponent({
37
39
  type: String,
38
40
  default: '',
39
41
  },
42
+ customHeader: {
43
+ type: Boolean,
44
+ default: false,
45
+ },
40
46
  },
41
47
  emits: ['onBack', 'onMore'],
42
48
  });
@@ -0,0 +1,7 @@
1
+ <template>
2
+ <div :class="[$styles.rounded, $styles.whiteBg]" class="p-4 shadow">
3
+ <slot></slot>
4
+ </div>
5
+ </template>
6
+
7
+ <script setup lang="ts"></script>
@@ -11,8 +11,8 @@
11
11
  {{ subtitle }}
12
12
  </v-card-subtitle>
13
13
  <v-card-actions class="gap-[16px] m-2">
14
- <base-btn v-if="actions === 'default'" class="!w-fit px-6" size="sm" :text="$dataStore.t('confirm.yes')" :btn="$libStyles.blueBtn" @click="$emit('yes')" />
15
- <base-btn v-if="actions === 'default'" class="!w-fit px-6" size="sm" :text="$dataStore.t('confirm.no')" :btn="$libStyles.blueBtn" @click="$emit('no')" />
14
+ <base-btn v-if="actions === 'default'" class="!w-fit px-6" size="sm" :text="$dataStore.t('confirm.yes')" :btn="$styles.blueBtn" @click="$emit('yes')" />
15
+ <base-btn v-if="actions === 'default'" class="!w-fit px-6" size="sm" :text="$dataStore.t('confirm.no')" :btn="$styles.blueBtn" @click="$emit('no')" />
16
16
  <slot v-if="actions !== 'default'" name="actions"></slot>
17
17
  </v-card-actions>
18
18
  </v-card>
@@ -2,20 +2,20 @@
2
2
  <v-list lines="two" v-if="formStore.birthInfos && formStore.birthInfos.length" class="w-full !py-0">
3
3
  <v-list-item
4
4
  @click="$emit('reset')"
5
- :append-icon="selected && Object.keys(selected).length === 0 ? `mdi-radiobox-marked ${$libStyles.greenText}` : 'mdi-radiobox-blank text-[#636363]'"
5
+ :append-icon="selected && Object.keys(selected).length === 0 ? `mdi-radiobox-marked ${$styles.greenText}` : 'mdi-radiobox-blank text-[#636363]'"
6
6
  >
7
- <v-list-item-title :class="[$libStyles.greenText, $libStyles.textTitle]">{{ $dataStore.t('form.notChosen') }}</v-list-item-title>
7
+ <v-list-item-title :class="[$styles.greenText, $styles.textTitle]">{{ $dataStore.t('form.notChosen') }}</v-list-item-title>
8
8
  </v-list-item>
9
9
  <v-list-item
10
10
  v-for="familyMember of formStore.birthInfos"
11
11
  :key="familyMember.childIIN"
12
12
  @click="$emit('selectFamilyMember', familyMember)"
13
- :append-icon="familyMember && selected && selected.childIIN === familyMember.childIIN ? `mdi-radiobox-marked ${$libStyles.greenText}` : 'mdi-radiobox-blank text-[#636363]'"
13
+ :append-icon="familyMember && selected && selected.childIIN === familyMember.childIIN ? `mdi-radiobox-marked ${$styles.greenText}` : 'mdi-radiobox-blank text-[#636363]'"
14
14
  >
15
- <v-list-item-title :class="[$libStyles.greenText, $libStyles.textTitle]">{{
15
+ <v-list-item-title :class="[$styles.greenText, $styles.textTitle]">{{
16
16
  `${familyMember.childSurName} ${familyMember.childName} ${familyMember.childPatronymic ? familyMember.childPatronymic : ''}`
17
17
  }}</v-list-item-title>
18
- <v-list-item-subtitle :class="[$libStyles.textSimple]"
18
+ <v-list-item-subtitle :class="[$styles.textSimple]"
19
19
  ><span>{{ `${$dataStore.t('form.iin')}:` }}</span
20
20
  >{{ ` ${$reformatIin(familyMember.childIIN!)}` }}</v-list-item-subtitle
21
21
  >
@@ -1,29 +1,29 @@
1
1
  <template>
2
- <div class="pt-3 rounded-lg border-[1px]" :class="[$libStyles.whiteBg, disabled && $libStyles.disabled]">
2
+ <div class="pt-3 rounded-lg border-[1px]" :class="[$styles.whiteBg, disabled && $styles.disabled]">
3
3
  <div class="ml-5">
4
4
  <div class="flex justify-between mr-5">
5
- <p :class="[$libStyles.textTitle, $libStyles.greenText]">{{ title }}</p>
5
+ <p :class="[$styles.textTitle, $styles.greenText]">{{ title }}</p>
6
6
  <div
7
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]"
8
+ :class="[$styles.blueBg, $styles.whiteText, $styles.textSimple, disabled ? $styles.disabled : 'cursor-pointer']"
9
+ class="hidden lg:flex transition-all rounded-lg h-[36px] items-center font-medium justify-center opacity-50 hover:opacity-90 w-[120px]"
10
10
  @click="!disabled && memberStore.addMember(whichForm)"
11
11
  >
12
12
  {{ $dataStore.t('buttons.add') }}
13
13
  </div>
14
14
  </div>
15
- <p v-if="!!subtitle" :class="[$libStyles.greyText, $libStyles.textSimple]">{{ subtitle }}</p>
15
+ <p v-if="!!subtitle" :class="[$styles.greyText, $styles.textSimple]">{{ subtitle }}</p>
16
16
  </div>
17
17
  <div
18
18
  class="ml-5 mt-6 grid auto-rows-fr items-center"
19
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
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>
21
+ <span :class="[$styles.textSimple]" class="font-medium">{{ $dataStore.t('form.fullName') }}</span>
22
+ <span :class="[$styles.textSimple]" class="font-medium">{{ $dataStore.t('form.iin') }}</span>
23
+ <span v-if="!isShort" :class="[$styles.textSimple]" class="font-medium hidden lg:block"> {{ $dataStore.t('form.gender') }}</span>
24
+ <span v-if="!isShort" :class="[$styles.textSimple]" class="font-medium"> {{ $dataStore.t('form.birthDate') }} </span>
25
+ <span v-if="!isShort" :class="[$styles.textSimple]" class="font-medium hidden lg:block">{{ $dataStore.t('form.Country') }} </span>
26
+ <span v-if="!isShort" :class="[$styles.textSimple]" class="font-medium hidden lg:block"> {{ $dataStore.t('code') }}</span>
27
27
  </div>
28
28
  <div v-if="isMultiple && multipleMember !== null" class="ml-5 flex flex-col" :class="[isShort ? 'mb-6' : '']">
29
29
  <div
@@ -32,16 +32,16 @@
32
32
  class="grid auto-rows-fr items-center relative"
33
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
34
  >
35
- <span :class="[getMemberInfo(each).fullName === null && $libStyles.emptyBlockCol]">{{ getMemberInfo(each).fullName }}</span>
36
- <span :class="[getMemberInfo(each).iin === null && $libStyles.emptyBlockCol]">{{ getMemberInfo(each).iin }}</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>
35
+ <span :class="[getMemberInfo(each).fullName === null && $styles.emptyBlockCol]">{{ getMemberInfo(each).fullName }}</span>
36
+ <span :class="[getMemberInfo(each).iin === null && $styles.emptyBlockCol]">{{ getMemberIIN(each) }}</span>
37
+ <span v-if="!isShort" :class="[getMemberInfo(each).gender === null && $styles.emptyBlockCol]" class="hidden lg:block">{{ getMemberInfo(each).gender }} </span>
38
+ <span v-if="!isShort" :class="[getMemberInfo(each).birthDate === null && $styles.emptyBlockCol]"> {{ getMemberInfo(each).birthDate }} </span>
39
+ <span v-if="!isShort" :class="[getMemberInfo(each).birthPlace === null && $styles.emptyBlockCol]" class="hidden lg:block"> {{ getMemberInfo(each).birthPlace }} </span>
40
+ <span v-if="!isShort" :class="[getMemberInfo(each).sectorCode === null && $styles.emptyBlockCol]" class="hidden lg:block"> {{ getMemberInfo(each).sectorCode }} </span>
41
41
  <div
42
42
  v-if="!isShort"
43
43
  class="rounded-br-lg transition-all h-[70px] w-[60px] place-self-end"
44
- :class="[$libStyles.blueBgLight, $libStyles.blueBgLightHover, disabled ? $libStyles.disabled : 'cursor-pointer']"
44
+ :class="[$styles.blueBgLight, $styles.blueBgLightHover, disabled ? $styles.disabled : 'cursor-pointer']"
45
45
  @click="!disabled && $emit('onMore', { whichForm, index })"
46
46
  >
47
47
  <i class="mdi mdi-dots-vertical text-xl absolute top-[20px] right-[20px]"></i>
@@ -53,22 +53,20 @@
53
53
  class="ml-5 grid auto-rows-fr items-center relative"
54
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
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">
56
+ <span :class="[getMemberInfo(singleMember).fullName === null && $styles.emptyBlockCol]">{{ getMemberInfo(singleMember).fullName }}</span>
57
+ <span :class="[getMemberInfo(singleMember).iin === null && $styles.emptyBlockCol]">{{ getMemberInfo(singleMember).iin }}</span>
58
+ <span v-if="!isShort" :class="[getMemberInfo(singleMember).gender === null && $styles.emptyBlockCol]" class="hidden lg:block">{{ getMemberInfo(singleMember).gender }} </span>
59
+ <span v-if="!isShort" :class="[getMemberInfo(singleMember).birthDate === null && $styles.emptyBlockCol]"> {{ getMemberInfo(singleMember).birthDate }} </span>
60
+ <span v-if="!isShort" :class="[getMemberInfo(singleMember).birthPlace === null && $styles.emptyBlockCol]" class="hidden lg:block">
63
61
  {{ getMemberInfo(singleMember).birthPlace }}
64
62
  </span>
65
- <span v-if="!isShort" :class="[getMemberInfo(singleMember).sectorCode === null && $libStyles.emptyBlockCol]" class="hidden lg:block">
63
+ <span v-if="!isShort" :class="[getMemberInfo(singleMember).sectorCode === null && $styles.emptyBlockCol]" class="hidden lg:block">
66
64
  {{ getMemberInfo(singleMember).sectorCode }}
67
65
  </span>
68
66
  <div
69
67
  v-if="!isShort"
70
68
  class="rounded-br-lg transition-all h-[70px] w-[60px] place-self-end"
71
- :class="[$libStyles.blueBgLight, $libStyles.blueBgLightHover, disabled ? $libStyles.disabled : 'cursor-pointer']"
69
+ :class="[$styles.blueBgLight, $styles.blueBgLightHover, disabled ? $styles.disabled : 'cursor-pointer']"
72
70
  @click="!disabled && $emit('onMore', { whichForm })"
73
71
  >
74
72
  <i class="mdi mdi-dots-vertical text-xl absolute top-[20px] right-[20px]"></i>
@@ -76,8 +74,8 @@
76
74
  </div>
77
75
  <div
78
76
  v-if="isMultiple && more && !isShort && isActionsAvailable"
79
- :class="[$libStyles.blueBg, $libStyles.whiteText, $libStyles.textSimple, disabled ? $libStyles.disabled : 'cursor-pointer']"
80
- class="lg:hidden transition-all rounded-b-lg h-[36px] flex items-center font-medium justify-center opacity-50 hover:opacity-90"
77
+ :class="[$styles.blueBg, $styles.whiteText, $styles.textSimple, disabled ? $styles.disabled : 'cursor-pointer']"
78
+ class="flex lg:hidden transition-all rounded-b-lg h-[36px] items-center font-medium justify-center opacity-50 hover:opacity-90"
81
79
  @click="!disabled && memberStore.addMember(whichForm)"
82
80
  >
83
81
  {{ $dataStore.t('buttons.add') }}
@@ -118,6 +116,7 @@ export default defineComponent({
118
116
  },
119
117
  emits: ['onMore', 'addMember'],
120
118
  setup(props) {
119
+ const dataStore = useDataStore();
121
120
  const formStore = useFormStore();
122
121
  const memberStore = useMemberStore();
123
122
  const isMultiple = computed(() => [StoreMembers.insuredForm, StoreMembers.beneficiaryForm, StoreMembers.beneficialOwnerForm].includes(props.whichForm as StoreMembers));
@@ -130,6 +129,13 @@ export default defineComponent({
130
129
 
131
130
  const isShort = computed(() => props.type === 'short');
132
131
  const isActionsAvailable = computed(() => memberStore.isStatementEditible(props.whichForm));
132
+ const getMemberIIN = (each: Member) => {
133
+ const iin = getMemberInfo(each).iin;
134
+ if (dataStore.isFinCenter() && iin) {
135
+ return iin.replaceAll('-', '');
136
+ }
137
+ return iin;
138
+ };
133
139
 
134
140
  const getMemberInfo = (memberData: Member) => {
135
141
  return {
@@ -155,6 +161,7 @@ export default defineComponent({
155
161
  isActionsAvailable,
156
162
 
157
163
  // Functions
164
+ getMemberIIN,
158
165
  getMemberInfo,
159
166
  };
160
167
  },
@@ -1,6 +1,6 @@
1
1
  <template>
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">
2
+ <section :class="[$styles.blueBgLight, $styles.rounded]" class="mt-[14px] p-4 flex flex-col gap-[1px]">
3
+ <h2 :class="[$styles.textTitle]" class="font-medium text-center w-full mb-4">
4
4
  {{ title }}
5
5
  <slot name="icon"></slot>
6
6
  </h2>
@@ -1,7 +1,7 @@
1
1
  <template>
2
- <div class="flex flex-col justify-between rounded-lg" :class="[$libStyles.whiteBg]">
3
- <span v-if="title" class="p-4" :class="[$libStyles.textTitle]">{{ title }}</span>
4
- <span v-if="subtitle" class="p-4 text-[#99A3B3] border-t-[1px]" :class="[$libStyles.textSimple]">{{ subtitle }}</span>
2
+ <div class="flex flex-col justify-between rounded-lg" :class="[$styles.whiteBg]">
3
+ <span v-if="title" class="p-4" :class="[$styles.textTitle]">{{ title }}</span>
4
+ <span v-if="subtitle" class="p-4 text-[#99A3B3] border-t-[1px]" :class="[$styles.textSimple]">{{ subtitle }}</span>
5
5
  <slot></slot>
6
6
  </div>
7
7
  </template>
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div
3
3
  class="h-[74px] !pl-2 md:!pl-5 flex items-center justify-start gap-4"
4
- :class="[$libStyles.whiteBg, hasBorder ? 'border-[1px] rounded-lg' : 'border-b-[1px] border-b-[#f3f6fc] rounded']"
4
+ :class="[$styles.whiteBg, hasBorder ? 'border-[1px] rounded-lg' : 'border-b-[1px] border-b-[#f3f6fc] rounded']"
5
5
  >
6
6
  <v-switch
7
7
  class="base-toggle"
@@ -14,8 +14,8 @@
14
14
  hide-details
15
15
  :disabled="disabled"
16
16
  />
17
- <p :class="[$libStyles.textSimple]">{{ `${title}` }}</p>
18
- <p class="mr-3" :class="[modelValue ? $libStyles.greenText : '', $libStyles.textSimple]">{{ `${modelValue ? $dataStore.t('confirm.yes') : $dataStore.t('confirm.no')}` }}</p>
17
+ <p :class="[$styles.textSimple]">{{ `${title}` }}</p>
18
+ <p class="mr-3" :class="[modelValue ? $styles.greenText : '', $styles.textSimple]">{{ `${modelValue ? $dataStore.t('confirm.yes') : $dataStore.t('confirm.no')}` }}</p>
19
19
  </div>
20
20
  </template>
21
21
 
@@ -1,13 +1,13 @@
1
1
  <template>
2
- <div class="rounded-lg border-[1px]" :class="[$libStyles.whiteBg, disabled && $libStyles.disabled]">
2
+ <div class="rounded-lg border-[1px]" :class="[$styles.whiteBg, disabled && $styles.disabled]">
3
3
  <div class="mt-3 ml-5">
4
- <p :class="[$libStyles.textTitle, $libStyles.greenText]">{{ $dataStore.t('form.attachManager') }}</p>
4
+ <p :class="[$styles.textTitle, $styles.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
8
8
  class="pl-1"
9
9
  v-model="formStore.SaleChanellPolicy"
10
- :value="formStore.SaleChanellPolicy.nameRu"
10
+ :value="formStore.SaleChanellPolicy?.nameRu"
11
11
  :readonly="isReadonly"
12
12
  :clearable="!isReadonly"
13
13
  :label="$dataStore.t('form.salesChanell')"
@@ -18,7 +18,7 @@
18
18
  <base-panel-input
19
19
  class="pl-1"
20
20
  v-model="formStore.RegionPolicy"
21
- :value="formStore.RegionPolicy.nameRu"
21
+ :value="formStore.RegionPolicy?.nameRu"
22
22
  :readonly="isReadonly"
23
23
  :clearable="!isReadonly"
24
24
  :label="$dataStore.t('form.Region')"
@@ -29,7 +29,7 @@
29
29
  <base-panel-input
30
30
  class="pl-1"
31
31
  v-model="formStore.ManagerPolicy"
32
- :value="formStore.ManagerPolicy.nameRu"
32
+ :value="formStore.ManagerPolicy?.nameRu"
33
33
  :readonly="isReadonly"
34
34
  :clearable="!isReadonly"
35
35
  :label="$dataStore.t('form.manager')"
@@ -40,7 +40,7 @@
40
40
  <base-panel-input
41
41
  class="pl-1"
42
42
  v-model="formStore.AgentData"
43
- :value="formStore.AgentData.fullName"
43
+ :value="formStore.AgentData?.fullName"
44
44
  :readonly="isReadonly"
45
45
  :clearable="!isReadonly"
46
46
  :label="$dataStore.t('form.agent')"
@@ -50,7 +50,7 @@
50
50
  />
51
51
  </v-form>
52
52
  <Teleport v-if="isPanelOpen" to="#panel-actions">
53
- <div :class="[$libStyles.scrollPage]" class="flex flex-col items-center">
53
+ <div :class="[$styles.scrollPage]" class="flex flex-col items-center">
54
54
  <base-rounded-input
55
55
  v-model.trim="searchQuery"
56
56
  :label="$dataStore.t('labels.search')"
@@ -59,16 +59,34 @@
59
59
  :append-inner-icon="currentDictName === 'AgentData' ? 'mdi mdi-magnify' : ''"
60
60
  @append="searchAgent"
61
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
- />
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>
70
87
  </div>
71
88
  </div>
89
+
72
90
  <base-loader v-if="isPanelLoading" class="absolute mt-10" :size="50" />
73
91
  </div>
74
92
  </Teleport>
@@ -77,6 +95,7 @@
77
95
 
78
96
  <script lang="ts">
79
97
  import { Value } from '../../composables/classes';
98
+ import { watchDebounced } from '@vueuse/core';
80
99
 
81
100
  export default defineComponent({
82
101
  props: {
@@ -90,29 +109,17 @@ export default defineComponent({
90
109
  },
91
110
  },
92
111
  setup(props) {
112
+ type ManagerAttachmentFiels = 'SaleChanellPolicy' | 'RegionPolicy' | 'ManagerPolicy' | 'AgentData';
113
+ type FieldTypes = Value | AgentData;
93
114
  const route = useRoute();
94
115
  const dataStore = useDataStore();
95
116
  const formStore = useFormStore();
96
117
  const isPanelOpen = ref<boolean>(false);
97
118
  const isPanelLoading = ref<boolean>(false);
98
- const panelValue = ref<Value & AgentData>(new Value());
119
+ const panelValue = ref<FieldTypes>(new Value());
99
120
  const searchQuery = ref<string>('');
100
- const currentDictName = ref<string>();
121
+ const currentDictName = ref<ManagerAttachmentFiels>();
101
122
 
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
123
  const isReadonly = computed(
117
124
  () =>
118
125
  props.disabled ||
@@ -121,7 +128,7 @@ export default defineComponent({
121
128
  (route.params.taskId !== '0' && (!dataStore.isProcessEditable(formStore.applicationData.statusCode) || !dataStore.isTask())),
122
129
  );
123
130
 
124
- const openPanel = async (currentDict: string, title: string) => {
131
+ const openPanel = async (currentDict: ManagerAttachmentFiels, title: string) => {
125
132
  searchQuery.value = '';
126
133
  if (dataStore.isTask() && !props.disabled) {
127
134
  dataStore.panelAction = null;
@@ -129,13 +136,13 @@ export default defineComponent({
129
136
  dataStore.panel.title = title;
130
137
  currentDictName.value = currentDict;
131
138
 
132
- if (currentDict === 'ManagerPolicy') {
139
+ if (currentDict === 'ManagerPolicy' && formStore.RegionPolicy.ids) {
133
140
  isPanelLoading.value = true;
134
- await dataStore.filterManagerByRegion(String(formStore.RegionPolicy.ids ?? ''));
141
+ await dataStore.filterManagerByRegion(formStore.RegionPolicy.ids as string);
135
142
  }
136
143
 
137
144
  isPanelOpen.value = true;
138
- panelValue.value = formStore[currentDict as keyof typeof formStore];
145
+ panelValue.value = formStore[currentDict];
139
146
  isPanelLoading.value = false;
140
147
  } else {
141
148
  dataStore.showToaster('error', dataStore.t('toaster.viewErrorText'));
@@ -150,7 +157,7 @@ export default defineComponent({
150
157
  }
151
158
  };
152
159
 
153
- const pickPanelValue = (answer: any) => {
160
+ const pickPanelValue = (answer: FieldTypes) => {
154
161
  // @ts-ignore
155
162
  formStore[currentDictName.value] = answer;
156
163
  isPanelOpen.value = false;
@@ -158,11 +165,18 @@ export default defineComponent({
158
165
  searchQuery.value = '';
159
166
  };
160
167
 
161
- watch(searchQuery, () => {
162
- if (searchQuery.value === null) {
163
- searchQuery.value = '';
164
- }
165
- });
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
+ );
166
180
 
167
181
  watch(
168
182
  () => formStore.RegionPolicy,
@@ -184,7 +198,6 @@ export default defineComponent({
184
198
  currentDictName,
185
199
 
186
200
  // Computed
187
- dictList,
188
201
  isReadonly,
189
202
 
190
203
  // Functions