Skip to content

Commit 474b51b

Browse files
committed
feat: 更新 Bubble 和 BubbleList 组件以支持插槽内容的更灵活引用
1 parent ecc05ba commit 474b51b

File tree

2 files changed

+22
-18
lines changed

2 files changed

+22
-18
lines changed

packages/element-x-ui/src/components/Bubble/main.vue

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -179,27 +179,27 @@ export default {
179179
0 1px 6px -1px rgba(0, 0, 0, 0.02),
180180
0 2px 4px 0 rgba(0, 0, 0, 0.02)`,
181181
'--bubble-content-max-width': `${maxWidth}`,
182-
'--el-x-bubble-avatar-placeholder-width': `${$scopedSlots.avatar ? '' : avatarSize}`,
183-
'--el-x-bubble-avatar-placeholder-height': `${$scopedSlots.avatar ? '' : avatarSize}`,
182+
'--el-x-bubble-avatar-placeholder-width': `${$scopedSlots.avatar || $slots.avatar ? '' : avatarSize}`,
183+
'--el-x-bubble-avatar-placeholder-height': `${$scopedSlots.avatar || $slots.avatar ? '' : avatarSize}`,
184184
'--el-x-bubble-avatar-placeholder-gap': `${avatarGap}`,
185185
}"
186186
>
187187
<!-- 头像 -->
188-
<div v-if="!$scopedSlots.avatar && avatar" class="el-x-bubble-avatar el-x-bubble-avatar-size">
188+
<div v-if="!($scopedSlots.avatar || $slots.avatar) && avatar" class="el-x-bubble-avatar el-x-bubble-avatar-size">
189189
<el-avatar :size="0" :src="avatar" :shape="avatarShape" :icon="avatarIcon" :src-set="avatarSrcSet" :alt="avatarFit" @error="avatarError" />
190190
</div>
191191

192192
<!-- 头像属性进行占位 -->
193-
<div v-if="!$scopedSlots.avatar && !avatar && avatarSize" class="el-x-bubble-avatar-placeholder" />
193+
<div v-if="!($scopedSlots.avatar || $slots.avatar) && !avatar && avatarSize" class="el-x-bubble-avatar-placeholder" />
194194

195-
<div v-if="$scopedSlots.avatar" class="el-x-bubble-avatar">
195+
<div v-if="$scopedSlots.avatar || $slots.avatar" class="el-x-bubble-avatar">
196196
<slot name="avatar" />
197197
</div>
198198

199199
<!-- 内容 -->
200200
<div class="el-x-bubble-content-wrapper">
201201
<!-- 头部内容 -->
202-
<div v-if="$scopedSlots.header" class="el-x-bubble-header">
202+
<div v-if="$scopedSlots.header || $slots.header" class="el-x-bubble-header">
203203
<slot name="header" />
204204
</div>
205205

@@ -219,7 +219,7 @@ export default {
219219
'no-content': !content,
220220
}">
221221
<Typewriter
222-
v-if="!$scopedSlots.content && content"
222+
v-if="!($scopedSlots.content || $slots.content) && content"
223223
ref="typewriterRef"
224224
:typing="_typing"
225225
:content="content"
@@ -232,20 +232,20 @@ export default {
232232
</div>
233233

234234
<!-- 内容-自定义 -->
235-
<slot v-if="!internalDestroyed && $scopedSlots.content && !loading" name="content" />
235+
<slot v-if="!internalDestroyed && ($scopedSlots.content || $slots.content) && !loading" name="content" />
236236

237237
<!-- 加载中-默认 -->
238-
<div v-if="loading && !$scopedSlots.loading" class="el-x-bubble-loading-wrap">
238+
<div v-if="loading && !($scopedSlots.loading || $slots.loading)" class="el-x-bubble-loading-wrap">
239239
<div v-for="(_, index) in dots" :key="index" class="dot" :style="{ animationDelay: `${index * 0.2}s` }" />
240240
</div>
241241

242242
<!-- 加载中-自定义 -->
243-
<div v-if="loading && $scopedSlots.loading" class="el-x-bubble-loading-wrap">
243+
<div v-if="loading && ($scopedSlots.loading || $slots.loading)" class="el-x-bubble-loading-wrap">
244244
<slot name="loading" />
245245
</div>
246246
</div>
247247

248-
<div v-if="$scopedSlots.footer" class="el-x-bubble-footer">
248+
<div v-if="$scopedSlots.footer || $slots.footer" class="el-x-bubble-footer">
249249
<slot name="footer" />
250250
</div>
251251
</div>

packages/element-x-ui/src/components/BubbleList/main.vue

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,23 @@
3232
:no-style="item.noStyle"
3333
@finish="(instance) => handleBubbleComplete(index, instance)"
3434
>
35-
<template v-if="$scopedSlots.avatar" slot="avatar">
36-
<slot name="avatar" :item="item" />
35+
<template slot="avatar">
36+
<slot name="avatar" :item="item">
37+
<template v-if="item.avatar">
38+
<el-avatar :size="item.avatarSize || ''" :src="item.avatar" :shape="item.avatarShape || 'circle'" :icon="item.avatarIcon" :src-set="item.avatarSrcSet" :alt="item.avatarAlt" :fit="item.avatarFit || 'cover'" />
39+
</template>
40+
</slot>
3741
</template>
38-
<template v-if="$scopedSlots.header" slot="header">
42+
<template v-if="$scopedSlots.header || $slots.header" slot="header">
3943
<slot name="header" :item="item" />
4044
</template>
41-
<template v-if="$scopedSlots.content" slot="content">
45+
<template v-if="$scopedSlots.content || $slots.content" slot="content">
4246
<slot name="content" :item="item" />
4347
</template>
44-
<template v-if="$scopedSlots.footer" slot="footer">
48+
<template v-if="$scopedSlots.footer || $slots.footer" slot="footer">
4549
<slot name="footer" :item="item" />
4650
</template>
47-
<template v-if="$scopedSlots.loading" slot="loading">
51+
<template v-if="$scopedSlots.loading || $slots.loading" slot="loading">
4852
<slot name="loading" :item="item" />
4953
</template>
5054
</Bubble>
@@ -53,7 +57,7 @@
5357
v-if="showBackToBottom && hasVertical"
5458
class="el-x-bubble-list-default-back-button"
5559
:class="{
56-
'el-x-bubble-list-back-to-bottom-solt': $scopedSlots.backToBottom,
60+
'el-x-bubble-list-back-to-bottom-solt': $scopedSlots.backToBottom || $slots.backToBottom,
5761
}"
5862
:style="{
5963
bottom: backButtonPosition.bottom,

0 commit comments

Comments
 (0)