<template>
|
<div class="panel-card">
|
<div class="panel-card__header">
|
<div class="panel-card__title">
|
<span>{{ title }}</span>
|
<el-tag v-if="demo" class="panel-card__badge" type="info" effect="plain" size="small">演示</el-tag>
|
<span v-if="sub" class="panel-card__sub">{{ sub }}</span>
|
</div>
|
<div class="panel-card__extra">
|
<slot name="extra" />
|
</div>
|
</div>
|
<div class="panel-card__body">
|
<slot />
|
</div>
|
</div>
|
</template>
|
|
<script lang="ts" setup>
|
defineProps<{
|
title: string;
|
sub?: string;
|
demo?: boolean;
|
}>();
|
</script>
|
|
<style lang="scss" scoped>
|
.panel-card {
|
display: flex;
|
flex-direction: column;
|
height: 100%;
|
min-height: 280px;
|
border-radius: 12px;
|
border: 1px solid var(--el-border-color-extra-light);
|
background: var(--el-bg-color);
|
color: var(--el-text-color-primary);
|
|
&__header {
|
display: flex;
|
align-items: center;
|
justify-content: space-between;
|
gap: 12px;
|
padding: 12px 16px 0;
|
min-height: 48px;
|
}
|
|
&__title {
|
display: flex;
|
align-items: baseline;
|
gap: 8px;
|
font-size: 15px;
|
font-weight: 600;
|
color: var(--el-text-color-primary);
|
|
> span:first-child {
|
color: var(--el-text-color-primary);
|
}
|
}
|
|
&__sub {
|
font-size: 12px;
|
font-weight: 400;
|
color: var(--el-text-color-secondary);
|
}
|
|
&__badge {
|
transform: translateY(-1px);
|
}
|
|
&__body {
|
flex: 1;
|
min-height: 0;
|
padding: 8px 8px 12px;
|
}
|
}
|
</style>
|