fix: use BasicModal with v-model:visible instead of a-modal open prop for Ant Design Vue 3 in RequiredKycModal

This commit is contained in:
2026-11-10 15:12:32 +03:30
parent 76bd8c0666
commit cec78883a2
2 changed files with 54 additions and 14 deletions
+23
View File
@@ -7,7 +7,27 @@ export {}
declare module 'vue' { declare module 'vue' {
export interface GlobalComponents { export interface GlobalComponents {
ABadge: typeof import('ant-design-vue/es')['Badge']
AButton: typeof import('ant-design-vue/es')['Button']
ADivider: typeof import('ant-design-vue/es')['Divider']
AForm: typeof import('ant-design-vue/es')['Form']
AFormItem: typeof import('ant-design-vue/es')['FormItem']
AImage: typeof import('ant-design-vue/es')['Image']
AInput: typeof import('ant-design-vue/es')['Input']
AInputPassword: typeof import('ant-design-vue/es')['InputPassword']
AModal: typeof import('ant-design-vue/es')['Modal']
AppCreditLink: typeof import('./src/components/AppCreditLink.vue')['default'] AppCreditLink: typeof import('./src/components/AppCreditLink.vue')['default']
ARadio: typeof import('ant-design-vue/es')['Radio']
ARadioButton: typeof import('ant-design-vue/es')['RadioButton']
ARadioGroup: typeof import('ant-design-vue/es')['RadioGroup']
ASelect: typeof import('ant-design-vue/es')['Select']
ASelectOption: typeof import('ant-design-vue/es')['SelectOption']
ASlider: typeof import('ant-design-vue/es')['Slider']
ASpin: typeof import('ant-design-vue/es')['Spin']
ASwitch: typeof import('ant-design-vue/es')['Switch']
ATag: typeof import('ant-design-vue/es')['Tag']
ATextarea: typeof import('ant-design-vue/es')['Textarea']
ATooltip: typeof import('ant-design-vue/es')['Tooltip']
BaseDatePicker: typeof import('./src/components/BasicPacks/BaseDatePicker/src/BaseDatePicker.vue')['default'] BaseDatePicker: typeof import('./src/components/BasicPacks/BaseDatePicker/src/BaseDatePicker.vue')['default']
Basic: typeof import('./src/components/BasicPacks/BaseDatePicker/src/datePick/demo/basic.vue')['default'] Basic: typeof import('./src/components/BasicPacks/BaseDatePicker/src/datePick/demo/basic.vue')['default']
BasicActionSheet: typeof import('./src/components/BasicPacks/BasicActionSheet.vue')['default'] BasicActionSheet: typeof import('./src/components/BasicPacks/BasicActionSheet.vue')['default']
@@ -64,5 +84,8 @@ declare module 'vue' {
Time: typeof import('./src/components/BasicPacks/BaseDatePicker/src/datePick/demo/time.vue')['default'] Time: typeof import('./src/components/BasicPacks/BaseDatePicker/src/datePick/demo/time.vue')['default']
TradeFeeConfirmSummary: typeof import('./src/components/TradeFeeConfirmSummary.vue')['default'] TradeFeeConfirmSummary: typeof import('./src/components/TradeFeeConfirmSummary.vue')['default']
TransactionSkeleton: typeof import('./src/components/TransactionSkeleton.vue')['default'] TransactionSkeleton: typeof import('./src/components/TransactionSkeleton.vue')['default']
VanActionSheet: typeof import('vant/es')['ActionSheet']
VanDialog: typeof import('vant/es')['Dialog']
VanField: typeof import('vant/es')['Field']
} }
} }
+31 -14
View File
@@ -1,16 +1,11 @@
<template> <template>
<a-modal <BasicModal
:open="requiresKyc" v-model:visible="visible"
custom-footer
:closable="false" :closable="false"
:mask-closable="false"
:keyboard="false"
:footer="null"
:centered="true"
:z-index="APP_Z_MODAL"
:width="modalWidth" :width="modalWidth"
:get-container="getModalContainer"
class="required-kyc-modal"
wrap-class-name="required-kyc-modal-wrap" wrap-class-name="required-kyc-modal-wrap"
:z-index="99999"
> >
<div class="kyc-modal-content text-center py-2" dir="rtl"> <div class="kyc-modal-content text-center py-2" dir="rtl">
<!-- Icon with soft glowing background --> <!-- Icon with soft glowing background -->
@@ -61,12 +56,13 @@
</button> </button>
</div> </div>
</div> </div>
</a-modal> </BasicModal>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { computed } from 'vue' import { computed, onMounted, ref, watch } from 'vue'
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from 'vue-router'
import BasicModal from '@/components/BasicPacks/BasicModal.vue'
import BasicButton from '@/components/BasicPacks/BasicButton.vue' import BasicButton from '@/components/BasicPacks/BasicButton.vue'
import BasicIcon from '@/components/BasicPacks/BasicIcon.vue' import BasicIcon from '@/components/BasicPacks/BasicIcon.vue'
import { useUserStore } from '@/store/userStore' import { useUserStore } from '@/store/userStore'
@@ -74,7 +70,6 @@ import { getToken } from '@/utils'
import { performUserLogout } from '@/utils/authSession' import { performUserLogout } from '@/utils/authSession'
import { useDesktopBreakpoint } from '@/layouts/composables/useAppLayout' import { useDesktopBreakpoint } from '@/layouts/composables/useAppLayout'
import { isCustomerIdentityVerified } from '@/utils/customerIdentity' import { isCustomerIdentityVerified } from '@/utils/customerIdentity'
import { APP_Z_MODAL, getModalContainer } from '@/utils/zIndex'
const route = useRoute() const route = useRoute()
const router = useRouter() const router = useRouter()
@@ -83,7 +78,7 @@ const isDesktop = useDesktopBreakpoint()
const modalWidth = computed(() => (isDesktop.value ? '420px' : '90vw')) const modalWidth = computed(() => (isDesktop.value ? '420px' : '90vw'))
const requiresKyc = computed(() => { const isKycRequired = computed(() => {
if (!getToken()) return false if (!getToken()) return false
if ( if (
route.name === 'login' || route.name === 'login' ||
@@ -98,11 +93,34 @@ const requiresKyc = computed(() => {
return !isCustomerIdentityVerified(info.is_legal) return !isCustomerIdentityVerified(info.is_legal)
}) })
const visible = ref(false)
watch(
isKycRequired,
(val) => {
visible.value = Boolean(val)
},
{ immediate: true },
)
onMounted(async () => {
if (getToken() && !userStore.userInfo) {
try {
await userStore.getMyInfo()
} catch {
// ignore
}
}
visible.value = Boolean(isKycRequired.value)
})
function goToKyc() { function goToKyc() {
visible.value = false
void router.push({ name: 'user', query: { showEdit: 'true' } }) void router.push({ name: 'user', query: { showEdit: 'true' } })
} }
async function onLogout() { async function onLogout() {
visible.value = false
await performUserLogout() await performUserLogout()
} }
</script> </script>
@@ -111,7 +129,6 @@ async function onLogout() {
.required-kyc-modal-wrap { .required-kyc-modal-wrap {
.ant-modal-content { .ant-modal-content {
border-radius: 20px; border-radius: 20px;
padding: 24px 20px;
} }
} }
</style> </style>