|
|
|
@ -1,21 +1,23 @@ |
|
|
|
<script setup lang="ts"> |
|
|
|
import type { AuthenticationProps } from './types'; |
|
|
|
|
|
|
|
import { watch } from 'vue'; |
|
|
|
import { computed, watch } from 'vue'; |
|
|
|
|
|
|
|
import { useVbenModal } from '@vben-core/popup-ui'; |
|
|
|
import { Slot, VbenAvatar } from '@vben-core/shadcn-ui'; |
|
|
|
|
|
|
|
interface Props extends AuthenticationProps { |
|
|
|
avatar?: string; |
|
|
|
zIndex?: number; |
|
|
|
} |
|
|
|
|
|
|
|
defineOptions({ |
|
|
|
name: 'LoginExpiredModal', |
|
|
|
}); |
|
|
|
|
|
|
|
withDefaults(defineProps<Props>(), { |
|
|
|
const props = withDefaults(defineProps<Props>(), { |
|
|
|
avatar: '', |
|
|
|
zIndex: 0, |
|
|
|
}); |
|
|
|
|
|
|
|
const open = defineModel<boolean>('open'); |
|
|
|
@ -28,6 +30,26 @@ watch( |
|
|
|
modalApi.setState({ isOpen: val }); |
|
|
|
}, |
|
|
|
); |
|
|
|
|
|
|
|
const getZIndex = computed(() => { |
|
|
|
return props.zIndex || calcZIndex(); |
|
|
|
}); |
|
|
|
|
|
|
|
/** |
|
|
|
* 获取最大的zIndex值 |
|
|
|
*/ |
|
|
|
function calcZIndex() { |
|
|
|
let maxZ = 0; |
|
|
|
const elements = document.querySelectorAll('*'); |
|
|
|
[...elements].forEach((element) => { |
|
|
|
const style = window.getComputedStyle(element); |
|
|
|
const zIndex = style.getPropertyValue('z-index'); |
|
|
|
if (zIndex && !Number.isNaN(Number.parseInt(zIndex))) { |
|
|
|
maxZ = Math.max(maxZ, Number.parseInt(zIndex)); |
|
|
|
} |
|
|
|
}); |
|
|
|
return maxZ + 1; |
|
|
|
} |
|
|
|
</script> |
|
|
|
|
|
|
|
<template> |
|
|
|
@ -39,6 +61,7 @@ watch( |
|
|
|
:footer="false" |
|
|
|
:fullscreen-button="false" |
|
|
|
:header="false" |
|
|
|
:z-index="getZIndex" |
|
|
|
class="border-none px-10 py-6 text-center shadow-xl sm:w-[600px] sm:rounded-2xl md:h-[unset]" |
|
|
|
> |
|
|
|
<VbenAvatar :src="avatar" class="mx-auto mb-6 size-20" /> |
|
|
|
|