<script setup> import error from '../images/error.png' import success from '../images/success.png' import warning from '../images/warning.png' import info from '../images/info.png' const props = defineProps({ type: { type: String, default: 'success' }, message: { type: String, default: '' }, title: { type: Object, default: () => ({ text: '', color: '', align: 'left' }) }, subTitle: { type: Object, default: () => ({ text: '', color: '', align: 'left' }) }, showIcon: { type: Boolean, default: true }, style: { type: Object, default: () => ({}) } }) const typeConfig = { info: { imgSrc: info, borderColor: '#C6DFFB', bgColor: '#ECF5FE', }, success: { imgSrc: success, borderColor: '#C5E7D5', bgColor: '#EDF7F2', }, error: { imgSrc: error, borderColor: '#FFD4D4', bgColor: '#FFF0F0', }, warning: { imgSrc: warning, borderColor: '#FFE2BA', bgColor: '#FFF7EC', } } // 修正计算属性,使用 props.style const finalStyle = computed(() => { return { borderColor: props.style?.borderColor || typeConfig[props.type].borderColor, backgroundColor: props.style?.backgroundColor || typeConfig[props.type].bgColor, width: props.style?.width || '343px', height: props.style?.height || 'auto', minHeight: '46px', ...props.style } }) </script> <template> <div :class="`box-border flex items-center border rounded-[4px] px-[15px] shadow-sm py-8px ${!message?'justify-center':''}`" :style="finalStyle" > <div v-if="showIcon" class="mr-[12px]"> <img :src="typeConfig[type].imgSrc" class="w-20px h-20px" style="object-fit: contain" alt="" > </div> <div class="flex flex-col justify-center"> <!-- 如果是简单文本模式 --> <div v-if="message" class="text-[14px] line-height-none"> {{ message }} </div> <!-- 如果是标题+副标题模式 --> <template v-else> <div v-if="title.text" class="text-[14px] line-height-20px" :style="{ color: title.color || 'inherit', textAlign: title.align || 'left' }" > {{ title.text }} </div> <div v-if="subTitle.text" class="text-[12px] leading-normal mt-1 line-height-17px" :style="{ color: subTitle.color || '#939393', textAlign: subTitle.align || 'left' }" > {{ subTitle.text }} </div> </template> </div> </div> </template>