hl-core 0.0.10-beta.64 → 0.0.10-beta.65
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/api/base.api.ts +27 -1
- package/api/interceptors.ts +166 -60
- package/components/Form/ManagerAttachment.vue +29 -4
- package/components/Input/TextHint.vue +13 -0
- package/components/Pages/Auth.vue +2 -5
- package/components/Pages/ContragentForm.vue +23 -17
- package/components/Pages/MemberForm.vue +177 -45
- package/components/Pages/ProductConditions.vue +214 -61
- package/composables/classes.ts +17 -0
- package/composables/index.ts +36 -9
- package/layouts/default.vue +1 -1
- package/locales/ru.json +17 -4
- package/package.json +1 -1
- package/store/data.store.ts +52 -15
- package/store/rules.ts +8 -0
- package/types/enum.ts +3 -0
- package/types/index.ts +3 -0
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
v-model="formStore.applicationData.insuredApp.iin"
|
|
36
36
|
:maska="$maska.iin"
|
|
37
37
|
:readonly="isDisabled"
|
|
38
|
-
:clearable="
|
|
38
|
+
:clearable="!isDisabled"
|
|
39
39
|
:label="$dataStore.t('pension.insuredIIN')"
|
|
40
40
|
append-inner-icon="mdi mdi-chevron-right"
|
|
41
41
|
@append="searchMember"
|
|
@@ -75,11 +75,12 @@
|
|
|
75
75
|
@append="searchMember($dataStore.t('form.chooseChild'))"
|
|
76
76
|
/>
|
|
77
77
|
<base-form-input
|
|
78
|
+
:key="String(member.signOfResidency.nameRu)"
|
|
78
79
|
v-model="member.phoneNumber"
|
|
79
80
|
:label="$dataStore.t('form.phoneNumber')"
|
|
80
|
-
:maska="$maska.phone"
|
|
81
|
-
:readonly="!!isDisabled || !!isIinPhoneDisabled
|
|
82
|
-
:clearable="!isDisabled && !isIinPhoneDisabled
|
|
81
|
+
:maska="$dataStore.isPension && member.signOfResidency.nameRu === 'Нерезидент' ? $maska.phoneNonResident : $maska.phone"
|
|
82
|
+
:readonly="!!isDisabled || !!isIinPhoneDisabled"
|
|
83
|
+
:clearable="!isDisabled && !isIinPhoneDisabled"
|
|
83
84
|
:append-inner-icon="otpCondition ? `${$dataStore.isPension ? 'mdi-message-text' : 'mdi mdi-phone-message'}` : ''"
|
|
84
85
|
@append="openCustomPanel('otp')"
|
|
85
86
|
@keyup.enter.prevent="otpCondition ? openCustomPanel('otp') : null"
|
|
@@ -91,8 +92,8 @@
|
|
|
91
92
|
v-model="member.iin"
|
|
92
93
|
:label="$dataStore.t('form.iin')"
|
|
93
94
|
:maska="$maska.iin"
|
|
94
|
-
:readonly="!!isDisabled || !!isIinPhoneDisabled || !!member.parsedDocument?.iin
|
|
95
|
-
:clearable="!isDisabled && !isIinPhoneDisabled && !member.parsedDocument?.iin
|
|
95
|
+
:readonly="!!isDisabled || !!isIinPhoneDisabled || !!member.parsedDocument?.iin"
|
|
96
|
+
:clearable="!isDisabled && !isIinPhoneDisabled && !member.parsedDocument?.iin"
|
|
96
97
|
:append-inner-icon="hasMemberSearch || !isNonResident ? (hasDocumentReader ? 'mdi mdi-credit-card-scan-outline' : 'mdi mdi-magnify') : ''"
|
|
97
98
|
@append="searchMember"
|
|
98
99
|
@input="onIinInput"
|
|
@@ -172,7 +173,7 @@
|
|
|
172
173
|
@append="openPanel($dataStore.t('form.Country'), [], 'birthPlace', $dataStore.getCountries)"
|
|
173
174
|
/>
|
|
174
175
|
</div>
|
|
175
|
-
<base-form-input v-if="!$dataStore.isPension" v-model="member.age" :label="$dataStore.t('form.age')" :readonly="true" :clearable="
|
|
176
|
+
<base-form-input v-if="!$dataStore.isPension" v-model="member.age" :label="$dataStore.t('form.age')" :readonly="true" :clearable="false" :rules="ageRule" />
|
|
176
177
|
<base-panel-input
|
|
177
178
|
v-model="member.gender"
|
|
178
179
|
:value="member.gender?.nameRu"
|
|
@@ -199,7 +200,7 @@
|
|
|
199
200
|
v-model="member.relationDegree"
|
|
200
201
|
:value="member.relationDegree?.nameRu"
|
|
201
202
|
:readonly="isDisabled || !isChooseChild"
|
|
202
|
-
:clearable="!isDisabled
|
|
203
|
+
:clearable="!isDisabled && !!isChooseChild"
|
|
203
204
|
:label="$dataStore.t('form.relations')"
|
|
204
205
|
:rules="$rules.objectRequired"
|
|
205
206
|
append-inner-icon="mdi mdi-chevron-right"
|
|
@@ -820,18 +821,29 @@
|
|
|
820
821
|
<base-list-empty class="w-full" v-else @click="fioChooseDialog = false" />
|
|
821
822
|
</template>
|
|
822
823
|
</base-dialog>
|
|
824
|
+
<base-dialog
|
|
825
|
+
v-model="$dataStore.quitDialog"
|
|
826
|
+
:title="$dataStore.t('dialog.exit')"
|
|
827
|
+
:subtitle="$dataStore.t('dialog.dataWillNotSave')"
|
|
828
|
+
:confirm="$dataStore.t('confirm.yes')"
|
|
829
|
+
:icon="{ mdi: 'delete-outline', color: '#FD2D39' }"
|
|
830
|
+
@yes="discardAndContinue"
|
|
831
|
+
@no="stayHere"
|
|
832
|
+
/>
|
|
823
833
|
</section>
|
|
824
834
|
<base-scroll-buttons @up="scrollForm('up')" @down="scrollForm('down')" />
|
|
825
835
|
</template>
|
|
826
836
|
|
|
827
837
|
<script lang="ts">
|
|
838
|
+
import { onBeforeRouteLeave } from 'vue-router';
|
|
828
839
|
import { Value, DocumentItem, Member } from '../../composables/classes';
|
|
829
840
|
import { uuid } from 'vue-uuid';
|
|
830
841
|
import { StoreMembers, CoreEnums } from '../../types/enum';
|
|
831
842
|
import type { Api, ContragentType, Dicts, ESBDValidationType, FileActions, MultipleMember } from '../../types';
|
|
832
843
|
|
|
833
844
|
export default {
|
|
834
|
-
|
|
845
|
+
emits: ['updateTab'],
|
|
846
|
+
setup(_: any, { emit }: any) {
|
|
835
847
|
const vForm = ref<any>();
|
|
836
848
|
const route = useRoute();
|
|
837
849
|
const router = useRouter();
|
|
@@ -857,7 +869,48 @@ export default {
|
|
|
857
869
|
const isPanelLoading = ref<boolean>(false);
|
|
858
870
|
const isChangingMember = ref<boolean>(false);
|
|
859
871
|
const isNonResident = computed(() => dataStore.isPension && member.value.signOfResidency.ids === '500011.2');
|
|
860
|
-
const
|
|
872
|
+
const initialMember = ref<Member>(new Member());
|
|
873
|
+
const pendingRoute = ref<any>(null);
|
|
874
|
+
const subMemberRoute = ref<any>(null);
|
|
875
|
+
const isReady = ref(false);
|
|
876
|
+
if (member.value.id === 0) {
|
|
877
|
+
setTimeout(() => {
|
|
878
|
+
isReady.value = true;
|
|
879
|
+
}, 1000);
|
|
880
|
+
} else {
|
|
881
|
+
initialMember.value = JSON.parse(JSON.stringify(member.value));
|
|
882
|
+
nextTick(() => {
|
|
883
|
+
isReady.value = true;
|
|
884
|
+
});
|
|
885
|
+
}
|
|
886
|
+
// временное отключение сервиса, соответственно ручной ввод тоже
|
|
887
|
+
// member.value.verifyType === 'GBDFL' || member.value.verifyType === 'ESBD' || !!member.value.gosPersonData
|
|
888
|
+
const isDataFromGov = computed(() => {
|
|
889
|
+
if (dataStore.isAulettiParent) {
|
|
890
|
+
return false;
|
|
891
|
+
}
|
|
892
|
+
if (dataStore.isPension && member.value.signOfResidency.nameRu === 'Нерезидент') {
|
|
893
|
+
return false;
|
|
894
|
+
}
|
|
895
|
+
if (whichForm.value === 'beneficiaryForm') {
|
|
896
|
+
if (Number(member.value.age) < 18) {
|
|
897
|
+
return false;
|
|
898
|
+
}
|
|
899
|
+
}
|
|
900
|
+
if (whichForm.value === 'insuredForm') {
|
|
901
|
+
if (dataStore.isCritical) {
|
|
902
|
+
if (Number(member.value.age) < 18) {
|
|
903
|
+
return false;
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
if (dataStore.isLifetrip) {
|
|
907
|
+
if (member.value.isInsuredUnderage) {
|
|
908
|
+
return false;
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
}
|
|
912
|
+
return true;
|
|
913
|
+
});
|
|
861
914
|
const familyDialog = ref<boolean>(false);
|
|
862
915
|
const deletionDialog = ref<boolean>(false);
|
|
863
916
|
const documentChooseDialog = ref<boolean>(false);
|
|
@@ -950,7 +1003,7 @@ export default {
|
|
|
950
1003
|
return true;
|
|
951
1004
|
}
|
|
952
1005
|
};
|
|
953
|
-
return dataStore.
|
|
1006
|
+
return dataStore.controls.hasGBDFL && perMemberCondition();
|
|
954
1007
|
});
|
|
955
1008
|
const hasGBDFLDocSelection = dataStore.isLifetrip;
|
|
956
1009
|
const hasInsis = computed(() => dataStore.controls.hasInsis);
|
|
@@ -972,7 +1025,7 @@ export default {
|
|
|
972
1025
|
return false;
|
|
973
1026
|
}
|
|
974
1027
|
};
|
|
975
|
-
return dataStore.
|
|
1028
|
+
return dataStore.controls.hasGKB && !!dataStore.isTask() && perMemberCondition();
|
|
976
1029
|
});
|
|
977
1030
|
const hasDocumentReader = computed(() => {
|
|
978
1031
|
return !!member.value.hasAgreement && !!isTask.value && (dataStore.isAULETTI || dataStore.isAulettiParent);
|
|
@@ -1025,7 +1078,12 @@ export default {
|
|
|
1025
1078
|
);
|
|
1026
1079
|
const hasWorkPositionDict = dataStore.isBaiterek;
|
|
1027
1080
|
const hasIssuerOther = computed(() => (useEnv().isProduction ? dataStore.isPension : true) && member.value.documentIssuers && member.value.documentIssuers.nameRu === 'Другое');
|
|
1028
|
-
|
|
1081
|
+
const isCurrentFormMatch = computed(() => {
|
|
1082
|
+
if (dataStore.isPension) {
|
|
1083
|
+
return whichForm.value === formStore.insuredFormKey;
|
|
1084
|
+
}
|
|
1085
|
+
return whichForm.value === formStore.policyholderFormKey;
|
|
1086
|
+
});
|
|
1029
1087
|
const birthDateRule = computed(() => {
|
|
1030
1088
|
const baseDateRule = dataStore.rules.required.concat(dataStore.rules.birthDate);
|
|
1031
1089
|
const byMemberAndProductRule = () => {
|
|
@@ -1082,6 +1140,9 @@ export default {
|
|
|
1082
1140
|
if (member.value.isInsuredUnderage) {
|
|
1083
1141
|
return [];
|
|
1084
1142
|
}
|
|
1143
|
+
if (dataStore.isPension && member.value.signOfResidency.nameRu === 'Нерезидент') {
|
|
1144
|
+
return dataStore.rules.phoneNonResidentFormat;
|
|
1145
|
+
}
|
|
1085
1146
|
return basePhoneRule;
|
|
1086
1147
|
});
|
|
1087
1148
|
|
|
@@ -1606,7 +1667,10 @@ export default {
|
|
|
1606
1667
|
};
|
|
1607
1668
|
|
|
1608
1669
|
const validateESBD = async (docTypeNumber: number) => {
|
|
1609
|
-
|
|
1670
|
+
if (!dataStore.checkWithESBD) {
|
|
1671
|
+
return true;
|
|
1672
|
+
}
|
|
1673
|
+
|
|
1610
1674
|
const data: ESBDValidationType = {
|
|
1611
1675
|
personType: 1,
|
|
1612
1676
|
iin: member.value.iin!.replaceAll('-', ''),
|
|
@@ -1624,7 +1688,21 @@ export default {
|
|
|
1624
1688
|
resident: member.value.signOfResidency.ids === '500011.2' || member.value.signOfResidency.ids === null ? 0 : 1,
|
|
1625
1689
|
countryId: member.value.countryOfTaxResidency.ids !== '500014.3' ? Number(String(member.value.countryOfTaxResidency.ids).at(-1)) : 2,
|
|
1626
1690
|
};
|
|
1627
|
-
|
|
1691
|
+
const ESBDResponse = await dataStore.getValidateClientESBD(data);
|
|
1692
|
+
if (!ESBDResponse) {
|
|
1693
|
+
dataStore.isLoading = false;
|
|
1694
|
+
isSubmittingForm.value = false;
|
|
1695
|
+
return false;
|
|
1696
|
+
}
|
|
1697
|
+
const initialPoint = `${member.value.iin!.replaceAll('-', '')}.`;
|
|
1698
|
+
const RESPONSE = ESBDMessage(ESBDResponse, initialPoint);
|
|
1699
|
+
let errorMessage = RESPONSE !== false ? RESPONSE : 'Что-то произошло не так';
|
|
1700
|
+
if (typeof ESBDResponse !== 'object' || ESBDResponse.errorCode !== 0) {
|
|
1701
|
+
dataStore.isLoading = false;
|
|
1702
|
+
dataStore.showToaster('error', errorMessage, 5000);
|
|
1703
|
+
return false;
|
|
1704
|
+
}
|
|
1705
|
+
return true;
|
|
1628
1706
|
};
|
|
1629
1707
|
|
|
1630
1708
|
const saveMember = async () => {
|
|
@@ -1797,39 +1875,26 @@ export default {
|
|
|
1797
1875
|
SBI: 3,
|
|
1798
1876
|
VNZ: 4,
|
|
1799
1877
|
};
|
|
1800
|
-
const ESBDResponse = await validateESBD(docTypeCodes[docType]);
|
|
1801
|
-
if (!ESBDResponse) {
|
|
1802
|
-
isSubmittingForm.value = false;
|
|
1803
|
-
dataStore.isLoading = false;
|
|
1804
|
-
return;
|
|
1805
|
-
}
|
|
1806
|
-
const initialPoint = `${member.value.iin!.replaceAll('-', '')}.`;
|
|
1807
|
-
const RESPONSE = ESBDMessage(ESBDResponse, initialPoint);
|
|
1808
|
-
let errorMessage = RESPONSE !== false ? RESPONSE : 'Что-то произошло не так';
|
|
1809
|
-
if (typeof ESBDResponse === 'object' && ESBDResponse.errorCode === 0) {
|
|
1810
|
-
member.value.verifyType = 'ESBD';
|
|
1811
|
-
member.value.verifyDate = ESBDResponse.verifiedDate;
|
|
1812
1878
|
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
|
|
1879
|
+
const isESBDValid = await validateESBD(docTypeCodes[docType]);
|
|
1880
|
+
if (isESBDValid === false) return;
|
|
1881
|
+
|
|
1882
|
+
if (member.value.bankInfo.iik.length === useMask().iik.length) {
|
|
1883
|
+
const isValidIik = await dataStore.checkAccountNumber(member.value.bankInfo.iik);
|
|
1884
|
+
if (isValidIik === false) {
|
|
1885
|
+
dataStore.showToaster('error', dataStore.t('error.notValidIik'));
|
|
1886
|
+
member.value.bankInfo.iik = '';
|
|
1887
|
+
isSubmittingForm.value = false;
|
|
1888
|
+
return;
|
|
1889
|
+
}
|
|
1890
|
+
if (formStore.pensionApp && whichForm.value === 'insuredForm') {
|
|
1891
|
+
formStore.pensionApp.account = member.value.bankInfo.iik;
|
|
1892
|
+
formStore.pensionApp.bankBik = member.value.bankInfo.bik;
|
|
1893
|
+
formStore.pensionApp.bankBin = member.value.bankInfo.bin;
|
|
1894
|
+
formStore.pensionApp.bankId = Number(member.value.bankInfo.bankName.id);
|
|
1827
1895
|
}
|
|
1828
|
-
const hasMemberSaved = await saveMember();
|
|
1829
|
-
} else {
|
|
1830
|
-
dataStore.isLoading = false;
|
|
1831
|
-
dataStore.showToaster('error', errorMessage, 5000);
|
|
1832
1896
|
}
|
|
1897
|
+
const hasMemberSaved = await saveMember();
|
|
1833
1898
|
} else if (isNonResident.value) {
|
|
1834
1899
|
if (member.value.bankInfo.iik.length === useMask().iik.length) {
|
|
1835
1900
|
const isValidIik = await dataStore.checkAccountNumber(member.value.bankInfo.iik);
|
|
@@ -1851,6 +1916,7 @@ export default {
|
|
|
1851
1916
|
member.value.gotFromInsis = true;
|
|
1852
1917
|
const hasMemberSaved = await saveMember();
|
|
1853
1918
|
}
|
|
1919
|
+
dataStore.isDirty = false;
|
|
1854
1920
|
isSubmittingForm.value = false;
|
|
1855
1921
|
} else {
|
|
1856
1922
|
const errors = document.querySelector('.v-input--error');
|
|
@@ -1892,6 +1958,15 @@ export default {
|
|
|
1892
1958
|
|
|
1893
1959
|
const sendOtp = async (onInit = false) => {
|
|
1894
1960
|
otpSending.value = true;
|
|
1961
|
+
if (isCurrentFormMatch.value && member.value.iin && member.value.iin.length === useMask().iin.length) {
|
|
1962
|
+
const iin = member.value.iin.replace(/-/g, '');
|
|
1963
|
+
const type = String(route.query.type) === 'joint' ? 25 : 19;
|
|
1964
|
+
const response = await dataStore.checkExistProcess(iin, dataStore.isPension ? type : constants.products[dataStore.product as keyof typeof constants.products]);
|
|
1965
|
+
if (response) {
|
|
1966
|
+
otpSending.value = false;
|
|
1967
|
+
return;
|
|
1968
|
+
}
|
|
1969
|
+
}
|
|
1895
1970
|
const response = await memberStore.sendOtp(member.value, formStore.applicationData.processInstanceId, onInit);
|
|
1896
1971
|
if (response) {
|
|
1897
1972
|
if (member.value.hasAgreement === null) member.value.hasAgreement = response.otpStatus;
|
|
@@ -1965,6 +2040,12 @@ export default {
|
|
|
1965
2040
|
};
|
|
1966
2041
|
|
|
1967
2042
|
const selectMember = async (index: number, update?: boolean) => {
|
|
2043
|
+
if (dataStore.isDirty === true) {
|
|
2044
|
+
dataStore.quitDialog = true;
|
|
2045
|
+
//@ts-ignore
|
|
2046
|
+
subMemberRoute.value = { query: { ...route.query, i: index, id: getMember(route.query.tab, index).id, upd: update } };
|
|
2047
|
+
return;
|
|
2048
|
+
}
|
|
1968
2049
|
dataStore.rightPanel.open = false;
|
|
1969
2050
|
isButtonLoading.value = true;
|
|
1970
2051
|
isChangingMember.value = true;
|
|
@@ -2206,6 +2287,55 @@ export default {
|
|
|
2206
2287
|
},
|
|
2207
2288
|
);
|
|
2208
2289
|
}
|
|
2290
|
+
watch(
|
|
2291
|
+
member.value,
|
|
2292
|
+
() => {
|
|
2293
|
+
if (!isReady.value) return;
|
|
2294
|
+
dataStore.isDirty = true;
|
|
2295
|
+
},
|
|
2296
|
+
{ deep: true },
|
|
2297
|
+
);
|
|
2298
|
+
onBeforeRouteLeave((to, from, next) => {
|
|
2299
|
+
if (dataStore.isDirty) {
|
|
2300
|
+
dataStore.quitDialog = true;
|
|
2301
|
+
pendingRoute.value = to;
|
|
2302
|
+
next(false);
|
|
2303
|
+
} else {
|
|
2304
|
+
next();
|
|
2305
|
+
}
|
|
2306
|
+
});
|
|
2307
|
+
const discardAndContinue = async () => {
|
|
2308
|
+
dataStore.quitDialog = false;
|
|
2309
|
+
dataStore.isDirty = false;
|
|
2310
|
+
|
|
2311
|
+
if (member.value.id === 0) {
|
|
2312
|
+
Object.assign(member.value, JSON.parse(JSON.stringify(initialMember.value)));
|
|
2313
|
+
isReady.value = false;
|
|
2314
|
+
}
|
|
2315
|
+
if (member.value.id !== 0) {
|
|
2316
|
+
Object.assign(member.value, JSON.parse(JSON.stringify(initialMember.value)));
|
|
2317
|
+
initialMember.value = new Member();
|
|
2318
|
+
isReady.value = false;
|
|
2319
|
+
}
|
|
2320
|
+
if (pendingRoute.value) {
|
|
2321
|
+
await router.replace(pendingRoute.value);
|
|
2322
|
+
pendingRoute.value = null;
|
|
2323
|
+
}
|
|
2324
|
+
if (dataStore.pendingTab) {
|
|
2325
|
+
dataStore.menu.selectedItem = dataStore.pendingTab;
|
|
2326
|
+
emit('updateTab', dataStore.pendingTab);
|
|
2327
|
+
dataStore.pendingTab = null;
|
|
2328
|
+
}
|
|
2329
|
+
if (subMemberRoute.value) {
|
|
2330
|
+
await router.replace(subMemberRoute.value);
|
|
2331
|
+
subMemberRoute.value = null;
|
|
2332
|
+
}
|
|
2333
|
+
};
|
|
2334
|
+
const stayHere = () => {
|
|
2335
|
+
dataStore.quitDialog = false;
|
|
2336
|
+
pendingRoute.value = null;
|
|
2337
|
+
dataStore.pendingTab = null;
|
|
2338
|
+
};
|
|
2209
2339
|
|
|
2210
2340
|
return {
|
|
2211
2341
|
// State
|
|
@@ -2304,6 +2434,8 @@ export default {
|
|
|
2304
2434
|
searchPositions,
|
|
2305
2435
|
selectGbdDocument,
|
|
2306
2436
|
pickPosition,
|
|
2437
|
+
stayHere,
|
|
2438
|
+
discardAndContinue,
|
|
2307
2439
|
getContragentClick,
|
|
2308
2440
|
};
|
|
2309
2441
|
},
|