<script lang="ts" setup name="DetailBlock"> defineProps({ title: { type: String, required: true, }, }) const slots = useSlots() </script> <template> <div class="detail-main"> <div v-if="title" class="header"> <div class="title"> {{ title }} </div> <div class="btns"> <slot name="btns" /> </div> </div> <div v-if="slots.default" :class="title ? 'content' : 'special-content'"> <slot /> </div> </div> </template> <style lang="scss" scoped> .detail-main { background-color: #fff; border-radius: 8px; margin-top: 10px; padding-top: 10px; box-sizing: border-box; .header { position: relative; height: 40px; // align-items: center; padding-left: 20px; flex-direction: column; justify-content: center; display: flex; .title { font-weight: 500; } .btns { position: absolute; right: 10px; top: 50%; transform: translateY(-50%); } } .content { background-color: #fff; padding: 0 10px 20px; margin-top: 10px; } .special-content { background-color: #fff; padding: 0 10px; padding-right: 20px; padding-bottom: 10px; margin-top: 10px; border-radius: 8px; } } </style>