hl-core 0.0.7-beta.14 → 0.0.7-beta.16
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.
- package/components/Form/Documents.vue +109 -0
- package/components/Form/FormBlock.vue +22 -8
- package/components/Form/FormSection.vue +18 -0
- package/components/Form/FormToggle.vue +8 -1
- package/components/Form/MemberForm.vue +983 -0
- package/components/Form/ProductConditions.vue +43 -0
- package/components/Form/ProductConditionsBlock.vue +2 -2
- package/components/Input/EmptyFormField.vue +5 -0
- package/components/Input/FileInput.vue +71 -0
- package/components/Input/FormInput.vue +65 -15
- package/components/Input/PanelInput.vue +133 -0
- package/components/Input/RoundedInput.vue +31 -8
- package/components/Layout/Drawer.vue +1 -1
- package/components/Layout/SettingsPanel.vue +6 -1
- package/components/List/ListEmpty.vue +22 -0
- package/components/Menu/MenuNav.vue +8 -26
- package/components/Panel/PanelSelectItem.vue +20 -0
- package/composables/classes.ts +126 -110
- package/composables/constants.ts +2 -0
- package/composables/index.ts +7 -6
- package/layouts/default.vue +14 -4
- package/package.json +8 -6
- package/pages/500.vue +38 -1
- package/plugins/storePlugin.ts +1 -0
- package/store/data.store.js +255 -503
- package/store/member.store.ts +169 -18
- package/store/messages.ts +17 -7
- package/store/rules.js +1 -0
|
@@ -0,0 +1,109 @@
|
|
|
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
|
+
type FileActions = 'view' | 'download';
|
|
34
|
+
|
|
35
|
+
const dataStore = useDataStore();
|
|
36
|
+
const formStore = useFormStore();
|
|
37
|
+
const currentDocument = ref<DocumentItem>(new DocumentItem());
|
|
38
|
+
const documentLoading = ref<boolean>(false);
|
|
39
|
+
|
|
40
|
+
const currentState = reactive<{ action: string; text: string }>({
|
|
41
|
+
action: '',
|
|
42
|
+
text: '',
|
|
43
|
+
});
|
|
44
|
+
const object_list = computed(() => Object.values(dataStore.signedDocumentList));
|
|
45
|
+
const unSignedList = computed(() => document_list.value.filter(doc => doc.signed === false || doc.signed === null));
|
|
46
|
+
const document_list = computed(() =>
|
|
47
|
+
object_list.value.filter(obj => {
|
|
48
|
+
if (obj.fileTypeCode === '19' || obj.fileTypeCode === '5') {
|
|
49
|
+
return obj;
|
|
50
|
+
}
|
|
51
|
+
}),
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
const openPanel = async (document: DocumentItem) => {
|
|
55
|
+
dataStore.panelAction = null;
|
|
56
|
+
dataStore.panel.title = document.fileTypeName!;
|
|
57
|
+
currentDocument.value = document;
|
|
58
|
+
dataStore.panel.open = true;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
watch(
|
|
62
|
+
() => document_list.value,
|
|
63
|
+
() => {
|
|
64
|
+
if (document_list.value.length > 1 && unSignedList.value.length) {
|
|
65
|
+
currentState.action = 'submit';
|
|
66
|
+
currentState.text = 'Все документы подписаны';
|
|
67
|
+
} else {
|
|
68
|
+
currentState.action = 'upload';
|
|
69
|
+
currentState.text = 'Сохранить';
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
immediate: true,
|
|
74
|
+
},
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
const getFile = async (type: FileActions) => {
|
|
78
|
+
if (currentDocument.value) {
|
|
79
|
+
documentLoading.value = true;
|
|
80
|
+
const fileExtension = currentDocument.value.fileName!.match(/\.([0-9a-z]+)(?:[\?#]|$)/i)![1];
|
|
81
|
+
await dataStore.getFile(currentDocument.value, type, fileExtension);
|
|
82
|
+
documentLoading.value = false;
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const onInit = async () => {
|
|
87
|
+
await dataStore.getDicFileTypeList();
|
|
88
|
+
await dataStore.getSignedDocList(formStore.applicationData.processInstanceId);
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
onInit();
|
|
92
|
+
|
|
93
|
+
onUnmounted(() => {
|
|
94
|
+
dataStore.panel.open = false;
|
|
95
|
+
dataStore.panelAction = null;
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
return {
|
|
99
|
+
// State
|
|
100
|
+
documentLoading,
|
|
101
|
+
DocumentItem,
|
|
102
|
+
|
|
103
|
+
// Functions
|
|
104
|
+
openPanel,
|
|
105
|
+
getFile,
|
|
106
|
+
};
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
</script>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="pt-3
|
|
3
|
-
<div>
|
|
2
|
+
<div class="pt-3 rounded-lg border-[1px]" :class="[$libStyles.whiteBg]">
|
|
3
|
+
<div class="ml-5">
|
|
4
4
|
<p :class="[$libStyles.textTitle, $libStyles.greenText]">{{ title }}</p>
|
|
5
5
|
<p v-if="!!subtitle" :class="[$libStyles.greyText, $libStyles.textSimple]">{{ subtitle }}</p>
|
|
6
6
|
</div>
|
|
7
|
-
<div class="mt-6 grid grid-cols-4 md:gap-5 md:grid-cols-4 lg:grid-cols-7 auto-rows-fr items-center">
|
|
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
8
|
<span :class="[$libStyles.textSimple]" class="font-medium">{{ $t('form.fullName') }}</span>
|
|
9
9
|
<span :class="[$libStyles.textSimple]" class="font-medium">{{ $t('form.iin') }}</span>
|
|
10
10
|
<span :class="[$libStyles.textSimple]" class="font-medium hidden lg:block"> {{ $t('form.gender') }}</span>
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
<span :class="[$libStyles.textSimple]" class="font-medium hidden lg:block">{{ $t('form.Country') }} </span>
|
|
13
13
|
<span :class="[$libStyles.textSimple]" class="font-medium hidden lg:block"> {{ $t('code') }}</span>
|
|
14
14
|
</div>
|
|
15
|
-
<div v-if="isMultiple" class="flex flex-col">
|
|
15
|
+
<div v-if="isMultiple" class="ml-5 flex flex-col">
|
|
16
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
17
|
<span :class="[getMemberInfo(each).fullName === null && $libStyles.emptyBlockCol]">{{ getMemberInfo(each).fullName }}</span>
|
|
18
18
|
<span :class="[getMemberInfo(each).iin === null && $libStyles.emptyBlockCol]">{{ getMemberInfo(each).iin }}</span>
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
<span :class="[getMemberInfo(each).birthPlace === null && $libStyles.emptyBlockCol]" class="hidden lg:block"> {{ getMemberInfo(each).birthPlace }} </span>
|
|
22
22
|
<span :class="[getMemberInfo(each).sectorCode === null && $libStyles.emptyBlockCol]" class="hidden lg:block"> {{ getMemberInfo(each).sectorCode }} </span>
|
|
23
23
|
<div
|
|
24
|
-
class="transition-all h-[70px] w-[60px] place-self-end cursor-pointer"
|
|
24
|
+
class="rounded-br-lg transition-all h-[70px] w-[60px] place-self-end cursor-pointer"
|
|
25
25
|
:class="[$libStyles.blueBgLight, $libStyles.blueBgLightHover]"
|
|
26
26
|
@click="$emit('onMore', { whichForm, index })"
|
|
27
27
|
>
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
</div>
|
|
30
30
|
</div>
|
|
31
31
|
</div>
|
|
32
|
-
<div v-else class="grid grid-cols-4 md:gap-5 md:grid-cols-4 lg:grid-cols-7 auto-rows-fr items-center relative">
|
|
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
33
|
<span :class="[getMemberInfo(member).fullName === null && $libStyles.emptyBlockCol]">{{ getMemberInfo(member).fullName }}</span>
|
|
34
34
|
<span :class="[getMemberInfo(member).iin === null && $libStyles.emptyBlockCol]">{{ getMemberInfo(member).iin }}</span>
|
|
35
35
|
<span :class="[getMemberInfo(member).gender === null && $libStyles.emptyBlockCol]" class="hidden lg:block">{{ getMemberInfo(member).gender }} </span>
|
|
@@ -37,13 +37,21 @@
|
|
|
37
37
|
<span :class="[getMemberInfo(member).birthPlace === null && $libStyles.emptyBlockCol]" class="hidden lg:block"> {{ getMemberInfo(member).birthPlace }} </span>
|
|
38
38
|
<span :class="[getMemberInfo(member).sectorCode === null && $libStyles.emptyBlockCol]" class="hidden lg:block"> {{ getMemberInfo(member).sectorCode }} </span>
|
|
39
39
|
<div
|
|
40
|
-
class="transition-all h-[70px] w-[60px] place-self-end cursor-pointer"
|
|
40
|
+
class="rounded-br-lg transition-all h-[70px] w-[60px] place-self-end cursor-pointer"
|
|
41
41
|
:class="[$libStyles.blueBgLight, $libStyles.blueBgLightHover]"
|
|
42
42
|
@click="$emit('onMore', { whichForm })"
|
|
43
43
|
>
|
|
44
44
|
<i class="mdi mdi-dots-vertical text-xl absolute top-[20px] right-[20px]"> </i>
|
|
45
45
|
</div>
|
|
46
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>
|
|
47
55
|
</div>
|
|
48
56
|
</template>
|
|
49
57
|
|
|
@@ -62,11 +70,16 @@ export default defineComponent({
|
|
|
62
70
|
type: String as PropType<'policyholderForm' | 'insuredForm' | 'beneficiaryForm' | 'beneficialOwnerForm' | 'policyholdersRepresentativeForm' | 'productConditionsForm'>,
|
|
63
71
|
default: '',
|
|
64
72
|
},
|
|
73
|
+
more: {
|
|
74
|
+
type: Boolean,
|
|
75
|
+
default: false,
|
|
76
|
+
},
|
|
65
77
|
},
|
|
66
|
-
emits: ['onMore'],
|
|
78
|
+
emits: ['onMore', 'addMember'],
|
|
67
79
|
setup(props) {
|
|
68
80
|
const dataStore = useDataStore();
|
|
69
81
|
const formStore = useFormStore();
|
|
82
|
+
const memberStore = useMemberStore();
|
|
70
83
|
const multipleMembers = ['insuredForm', 'beneficiaryForm', 'beneficialOwnerForm'];
|
|
71
84
|
const isMultiple = ref(multipleMembers.includes(props.whichForm));
|
|
72
85
|
const member = formStore[props.whichForm as keyof typeof formStore];
|
|
@@ -85,6 +98,7 @@ export default defineComponent({
|
|
|
85
98
|
return {
|
|
86
99
|
// State
|
|
87
100
|
formStore,
|
|
101
|
+
memberStore,
|
|
88
102
|
member,
|
|
89
103
|
isMultiple,
|
|
90
104
|
|
|
@@ -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>
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div
|
|
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
|
+
>
|
|
3
6
|
<v-switch class="base-toggle" :model-value="modelValue" @update:modelValue="$emit('update:modelValue', $event)" color="#009C73" hide-details :disabled="disabled"> </v-switch>
|
|
4
7
|
<p :class="[$libStyles.textSimple]">{{ `${title}` }}</p>
|
|
5
8
|
<p class="mr-3" :class="[modelValue ? $libStyles.greenText : '', $libStyles.textSimple]">{{ `${modelValue ? $dataStore.t('confirm.yes') : $dataStore.t('confirm.no')}` }}</p>
|
|
@@ -21,6 +24,10 @@ export default defineComponent({
|
|
|
21
24
|
type: Boolean,
|
|
22
25
|
default: false,
|
|
23
26
|
},
|
|
27
|
+
hasBorder: {
|
|
28
|
+
type: Boolean,
|
|
29
|
+
default: true,
|
|
30
|
+
},
|
|
24
31
|
},
|
|
25
32
|
emits: ['update:modelValue'],
|
|
26
33
|
});
|