hl-core 0.0.7-beta.2 → 0.0.7-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 (53) hide show
  1. package/.prettierrc +2 -1
  2. package/api/index.ts +295 -20
  3. package/api/interceptors.ts +10 -1
  4. package/components/Button/Btn.vue +7 -2
  5. package/components/Button/BtnIcon.vue +47 -0
  6. package/components/Complex/Content.vue +1 -1
  7. package/components/Complex/ContentBlock.vue +5 -0
  8. package/components/Complex/Page.vue +13 -2
  9. package/components/{Layout → Dialog}/Dialog.vue +7 -11
  10. package/components/Dialog/FamilyDialog.vue +39 -0
  11. package/components/Form/Documents.vue +107 -0
  12. package/components/Form/FormBlock.vue +114 -0
  13. package/components/Form/FormSection.vue +18 -0
  14. package/components/Form/FormTextSection.vue +20 -0
  15. package/components/Form/FormToggle.vue +41 -0
  16. package/components/Form/MemberForm.vue +1132 -0
  17. package/components/Form/ProductConditions.vue +343 -0
  18. package/components/Form/ProductConditionsBlock.vue +68 -0
  19. package/components/Input/EmptyFormField.vue +5 -0
  20. package/components/Input/FileInput.vue +71 -0
  21. package/components/Input/FormInput.vue +170 -0
  22. package/components/Input/PanelInput.vue +132 -0
  23. package/components/Input/RoundedInput.vue +39 -36
  24. package/components/Layout/Drawer.vue +42 -0
  25. package/components/Layout/Header.vue +25 -11
  26. package/components/Layout/Loader.vue +9 -6
  27. package/components/Layout/SettingsPanel.vue +48 -0
  28. package/components/List/ListEmpty.vue +22 -0
  29. package/components/Menu/MenuNav.vue +70 -30
  30. package/components/Menu/MenuNavItem.vue +8 -1
  31. package/components/Panel/PanelItem.vue +5 -0
  32. package/components/Panel/PanelSelectItem.vue +20 -0
  33. package/components/Transitions/FadeTransition.vue +5 -0
  34. package/composables/classes.ts +401 -201
  35. package/composables/constants.ts +27 -12
  36. package/composables/index.ts +72 -35
  37. package/composables/styles.ts +31 -7
  38. package/layouts/clear.vue +1 -1
  39. package/layouts/default.vue +72 -6
  40. package/layouts/full.vue +6 -0
  41. package/nuxt.config.ts +5 -2
  42. package/package.json +17 -11
  43. package/pages/500.vue +85 -0
  44. package/plugins/helperFunctionsPlugins.ts +10 -2
  45. package/plugins/storePlugin.ts +6 -5
  46. package/store/data.store.js +1871 -526
  47. package/store/member.store.ts +291 -0
  48. package/store/messages.ts +152 -34
  49. package/store/rules.js +26 -28
  50. package/tailwind.config.js +10 -0
  51. package/types/index.ts +120 -0
  52. package/models/index.ts +0 -23
  53. /package/store/{form.store.js → form.store.ts} +0 -0
@@ -0,0 +1,107 @@
1
+ <template>
2
+ <section class="w-full px-[10px] pt-[14px] flex flex-col gap-2" :class="[$libStyles.scrollPage]" v-if="$dataStore.signedDocumentList && $dataStore.signedDocumentList.length">
3
+ <base-content-block v-for="document of $dataStore.signedDocumentList as DocumentItem[]" :key="document.id" :class="[$libStyles.textSimple]">
4
+ <h5 class="text-center font-medium mb-4">
5
+ {{ document.fileTypeName }}
6
+ </h5>
7
+ <div :class="[$libStyles.whiteBg, $libStyles.rounded]" class="p-2 h-12 flex items-center relative">
8
+ <span class="ml-2">{{ document.fileName }}</span>
9
+ <i
10
+ class="transition-all cursor-pointer mdi mdi-dots-vertical pl-2 mr-3 border-l-[1px] text-xl absolute right-0"
11
+ :class="[$libStyles.greenTextHover]"
12
+ @click="openPanel(document)"
13
+ ></i>
14
+ </div>
15
+ </base-content-block>
16
+ </section>
17
+ <base-list-empty v-else></base-list-empty>
18
+ <Teleport v-if="$dataStore.panelAction === null" to="#panel-actions">
19
+ <base-fade-transition>
20
+ <div :class="[$libStyles.flexColNav]">
21
+ <base-btn :disabled="documentLoading" :loading="documentLoading" text="Открыть" @click="getFile('view')"></base-btn>
22
+ <base-btn :disabled="documentLoading" :loading="documentLoading" text="Скачать" @click="getFile('download')"></base-btn>
23
+ </div>
24
+ </base-fade-transition>
25
+ </Teleport>
26
+ </template>
27
+
28
+ <script lang="ts">
29
+ import { DocumentItem } from '@/composables/classes';
30
+
31
+ export default defineComponent({
32
+ setup() {
33
+ const dataStore = useDataStore();
34
+ const formStore = useFormStore();
35
+ const currentDocument = ref<DocumentItem>(new DocumentItem());
36
+ const documentLoading = ref<boolean>(false);
37
+
38
+ const currentState = reactive<{ action: string; text: string }>({
39
+ action: '',
40
+ text: '',
41
+ });
42
+ const object_list = computed(() => Object.values(dataStore.signedDocumentList));
43
+ const unSignedList = computed(() => document_list.value.filter(doc => doc.signed === false || doc.signed === null));
44
+ const document_list = computed(() =>
45
+ object_list.value.filter(obj => {
46
+ if (obj.fileTypeCode === '19' || obj.fileTypeCode === '5') {
47
+ return obj;
48
+ }
49
+ }),
50
+ );
51
+
52
+ const openPanel = async (document: DocumentItem) => {
53
+ dataStore.panelAction = null;
54
+ dataStore.panel.title = document.fileTypeName!;
55
+ currentDocument.value = document;
56
+ dataStore.panel.open = true;
57
+ };
58
+
59
+ watch(
60
+ () => document_list.value,
61
+ () => {
62
+ if (document_list.value.length > 1 && unSignedList.value.length) {
63
+ currentState.action = 'submit';
64
+ currentState.text = 'Все документы подписаны';
65
+ } else {
66
+ currentState.action = 'upload';
67
+ currentState.text = 'Сохранить';
68
+ }
69
+ },
70
+ {
71
+ immediate: true,
72
+ },
73
+ );
74
+
75
+ const getFile = async (type: FileActions) => {
76
+ if (currentDocument.value) {
77
+ documentLoading.value = true;
78
+ const fileExtension = currentDocument.value.fileName!.match(/\.([0-9a-z]+)(?:[\?#]|$)/i)![1];
79
+ await dataStore.getFile(currentDocument.value, type, fileExtension);
80
+ documentLoading.value = false;
81
+ }
82
+ };
83
+
84
+ const onInit = async () => {
85
+ await dataStore.getDicFileTypeList();
86
+ await dataStore.getSignedDocList(formStore.applicationData.processInstanceId);
87
+ };
88
+
89
+ onInit();
90
+
91
+ onUnmounted(() => {
92
+ dataStore.panel.open = false;
93
+ dataStore.panelAction = null;
94
+ });
95
+
96
+ return {
97
+ // State
98
+ documentLoading,
99
+ DocumentItem,
100
+
101
+ // Functions
102
+ openPanel,
103
+ getFile,
104
+ };
105
+ },
106
+ });
107
+ </script>
@@ -0,0 +1,114 @@
1
+ <template>
2
+ <div class="pt-3 rounded-lg border-[1px]" :class="[$libStyles.whiteBg]">
3
+ <div class="ml-5">
4
+ <p :class="[$libStyles.textTitle, $libStyles.greenText]">{{ title }}</p>
5
+ <p v-if="!!subtitle" :class="[$libStyles.greyText, $libStyles.textSimple]">{{ subtitle }}</p>
6
+ </div>
7
+ <div class="ml-5 mt-6 grid grid-cols-4 md:gap-5 md:grid-cols-4 lg:grid-cols-7 auto-rows-fr items-center">
8
+ <span :class="[$libStyles.textSimple]" class="font-medium">{{ $t('form.fullName') }}</span>
9
+ <span :class="[$libStyles.textSimple]" class="font-medium">{{ $t('form.iin') }}</span>
10
+ <span :class="[$libStyles.textSimple]" class="font-medium hidden lg:block"> {{ $t('form.gender') }}</span>
11
+ <span :class="[$libStyles.textSimple]" class="font-medium"> {{ $t('form.birthDate') }} </span>
12
+ <span :class="[$libStyles.textSimple]" class="font-medium hidden lg:block">{{ $t('form.Country') }} </span>
13
+ <span :class="[$libStyles.textSimple]" class="font-medium hidden lg:block"> {{ $t('code') }}</span>
14
+ </div>
15
+ <div v-if="isMultiple" class="ml-5 flex flex-col">
16
+ <div v-for="(each, index) of member" :key="index" class="grid grid-cols-4 md:gap-5 md:grid-cols-4 lg:grid-cols-7 auto-rows-fr items-center relative">
17
+ <span :class="[getMemberInfo(each).fullName === null && $libStyles.emptyBlockCol]">{{ getMemberInfo(each).fullName }}</span>
18
+ <span :class="[getMemberInfo(each).iin === null && $libStyles.emptyBlockCol]">{{ getMemberInfo(each).iin }}</span>
19
+ <span :class="[getMemberInfo(each).gender === null && $libStyles.emptyBlockCol]" class="hidden lg:block">{{ getMemberInfo(each).gender }} </span>
20
+ <span :class="[getMemberInfo(each).birthDate === null && $libStyles.emptyBlockCol]"> {{ getMemberInfo(each).birthDate }} </span>
21
+ <span :class="[getMemberInfo(each).birthPlace === null && $libStyles.emptyBlockCol]" class="hidden lg:block"> {{ getMemberInfo(each).birthPlace }} </span>
22
+ <span :class="[getMemberInfo(each).sectorCode === null && $libStyles.emptyBlockCol]" class="hidden lg:block"> {{ getMemberInfo(each).sectorCode }} </span>
23
+ <div
24
+ class="rounded-br-lg transition-all h-[70px] w-[60px] place-self-end cursor-pointer"
25
+ :class="[$libStyles.blueBgLight, $libStyles.blueBgLightHover]"
26
+ @click="$emit('onMore', { whichForm, index })"
27
+ >
28
+ <i class="mdi mdi-dots-vertical text-xl absolute top-[20px] right-[20px]"> </i>
29
+ </div>
30
+ </div>
31
+ </div>
32
+ <div v-else class="ml-5 grid grid-cols-4 md:gap-5 md:grid-cols-4 lg:grid-cols-7 auto-rows-fr items-center relative">
33
+ <span :class="[getMemberInfo(member).fullName === null && $libStyles.emptyBlockCol]">{{ getMemberInfo(member).fullName }}</span>
34
+ <span :class="[getMemberInfo(member).iin === null && $libStyles.emptyBlockCol]">{{ getMemberInfo(member).iin }}</span>
35
+ <span :class="[getMemberInfo(member).gender === null && $libStyles.emptyBlockCol]" class="hidden lg:block">{{ getMemberInfo(member).gender }} </span>
36
+ <span :class="[getMemberInfo(member).birthDate === null && $libStyles.emptyBlockCol]"> {{ getMemberInfo(member).birthDate }} </span>
37
+ <span :class="[getMemberInfo(member).birthPlace === null && $libStyles.emptyBlockCol]" class="hidden lg:block"> {{ getMemberInfo(member).birthPlace }} </span>
38
+ <span :class="[getMemberInfo(member).sectorCode === null && $libStyles.emptyBlockCol]" class="hidden lg:block"> {{ getMemberInfo(member).sectorCode }} </span>
39
+ <div
40
+ class="rounded-br-lg transition-all h-[70px] w-[60px] place-self-end cursor-pointer"
41
+ :class="[$libStyles.blueBgLight, $libStyles.blueBgLightHover]"
42
+ @click="$emit('onMore', { whichForm })"
43
+ >
44
+ <i class="mdi mdi-dots-vertical text-xl absolute top-[20px] right-[20px]"> </i>
45
+ </div>
46
+ </div>
47
+ <div
48
+ v-if="isMultiple && more"
49
+ :class="[$libStyles.blueBg, $libStyles.whiteText, $libStyles.textSimple]"
50
+ class="cursor-pointer rounded-b-lg h-[36px] flex items-center font-medium justify-center"
51
+ @click="memberStore.addMember(whichForm)"
52
+ >
53
+ {{ $t('buttons.add') }}
54
+ </div>
55
+ </div>
56
+ </template>
57
+
58
+ <script lang="ts">
59
+ import { Member } from '@/composables/classes';
60
+
61
+ export default defineComponent({
62
+ props: {
63
+ title: {
64
+ type: String,
65
+ default: '',
66
+ },
67
+ subtitle: {
68
+ type: String,
69
+ default: '',
70
+ },
71
+ whichForm: {
72
+ type: String as PropType<MemberFormTypes>,
73
+ default: '',
74
+ },
75
+ more: {
76
+ type: Boolean,
77
+ default: false,
78
+ },
79
+ },
80
+ emits: ['onMore', 'addMember'],
81
+ setup(props) {
82
+ const dataStore = useDataStore();
83
+ const formStore = useFormStore();
84
+ const memberStore = useMemberStore();
85
+ const multipleMembers = ['insuredForm', 'beneficiaryForm', 'beneficialOwnerForm'];
86
+ const isMultiple = ref(multipleMembers.includes(props.whichForm));
87
+ const member: Member = formStore[props.whichForm as MemberKeys];
88
+
89
+ const getMemberInfo = (memberData: Member) => {
90
+ return {
91
+ fullName: computed(() => (memberData && memberData.getFullNameShorted() ? memberData.getFullNameShorted() : null)).value,
92
+ iin: computed(() => (memberData && memberData.iin ? memberData.iin : null)).value,
93
+ gender: computed(() => (memberData && memberData.gender.nameRu ? (memberData.gender.nameRu as string).charAt(0) : null)).value,
94
+ birthDate: computed(() => (memberData && memberData.birthDate ? memberData.birthDate : null)).value,
95
+ birthPlace: computed(() => (memberData && memberData.birthPlace.nameRu ? (memberData.birthPlace.nameRu as string).substring(0, 3) : null)).value,
96
+ sectorCode: computed(() => (memberData && memberData.economySectorCode.ids ? (memberData.economySectorCode.ids as string).slice(-1) : null)).value,
97
+ };
98
+ };
99
+
100
+ return {
101
+ // State
102
+ formStore,
103
+ memberStore,
104
+ member,
105
+ isMultiple,
106
+
107
+ // Computed
108
+
109
+ // Functions
110
+ getMemberInfo,
111
+ };
112
+ },
113
+ });
114
+ </script>
@@ -0,0 +1,18 @@
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">{{ title }}</h2>
4
+ <slot></slot>
5
+ </section>
6
+ </template>
7
+
8
+ <script lang="ts">
9
+ export default defineComponent({
10
+ props: {
11
+ title: {
12
+ type: String,
13
+ default: 'Заголовок',
14
+ required: true,
15
+ },
16
+ },
17
+ });
18
+ </script>
@@ -0,0 +1,20 @@
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>
5
+ <slot></slot>
6
+ </div>
7
+ </template>
8
+
9
+ <script lang="ts">
10
+ export default defineComponent({
11
+ props: {
12
+ title: {
13
+ type: String,
14
+ },
15
+ subtitle: {
16
+ type: String,
17
+ },
18
+ },
19
+ });
20
+ </script>
@@ -0,0 +1,41 @@
1
+ <template>
2
+ <div
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']"
5
+ >
6
+ <v-switch class="base-toggle" :model-value="modelValue" @update:modelValue="$emit('update:modelValue', $event)" color="#009C73" hide-details :disabled="disabled"> </v-switch>
7
+ <p :class="[$libStyles.textSimple]">{{ `${title}` }}</p>
8
+ <p class="mr-3" :class="[modelValue ? $libStyles.greenText : '', $libStyles.textSimple]">{{ `${modelValue ? $dataStore.t('confirm.yes') : $dataStore.t('confirm.no')}` }}</p>
9
+ </div>
10
+ </template>
11
+
12
+ <script lang="ts">
13
+ export default defineComponent({
14
+ props: {
15
+ modelValue: {
16
+ type: Boolean,
17
+ default: '',
18
+ },
19
+ title: {
20
+ type: String,
21
+ default: '',
22
+ },
23
+ disabled: {
24
+ type: Boolean,
25
+ default: false,
26
+ },
27
+ hasBorder: {
28
+ type: Boolean,
29
+ default: true,
30
+ },
31
+ },
32
+ emits: ['update:modelValue'],
33
+ });
34
+ </script>
35
+
36
+ <style>
37
+ .v-input.base-toggle {
38
+ width: fit-content;
39
+ flex: unset !important;
40
+ }
41
+ </style>