1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- <script lang="ts" setup>
- defineProps({
- header: {
- type: String,
- default: '',
- },
- bodyStyle: {
- type: Object,
- default: () => {
- return {}
- },
- },
- shadow: {
- type: String,
- default: '',
- },
- skeleton: {
- type: Boolean,
- default: false,
- },
- skeletonRows: {
- type: Number,
- default: 4, //显示的数量会比传入的数量多 1
- },
- })
- let timer: any = null
- const skeletonShow = ref(true)
- timer = setTimeout(() => {
- skeletonShow.value = false
- }, 500)
- onBeforeRouteLeave((to, from, next) => {
- clearInterval(timer)
- next()
- })
- </script>
- <template>
- <el-card :body-style="bodyStyle" class="vab-card" :shadow="shadow">
- <template v-if="$slots.header || header" #header>
- <slot name="header">{{ header }}</slot>
- </template>
- <el-skeleton
- v-if="skeleton"
- animated
- :loading="skeletonShow"
- :rows="skeletonRows"
- >
- <template #default>
- <slot class="vab-card-transition" />
- </template>
- </el-skeleton>
- <slot v-else class="vab-card-transition" />
- </el-card>
- </template>
- <style lang="scss" scoped>
- .vab-card {
- &-transition {
- transition: $base-transition;
- }
- }
- </style>
|