New file |
| | |
| | | <template> |
| | | <view |
| | | class="u-empty" |
| | | :style="[emptyStyle]" |
| | | v-if="show" |
| | | > |
| | | <u-icon |
| | | v-if="!isSrc" |
| | | :name="mode === 'message' ? 'chat' : `empty-${mode}`" |
| | | :size="iconSize" |
| | | :color="iconColor" |
| | | margin-top="14" |
| | | ></u-icon> |
| | | <image |
| | | v-else |
| | | :style="{ |
| | | width: $u.addUnit(width), |
| | | height: $u.addUnit(height), |
| | | }" |
| | | :src="icon" |
| | | mode="widthFix" |
| | | ></image> |
| | | <text |
| | | class="u-empty__text" |
| | | :style="[textStyle]" |
| | | >{{text ? text : icons[mode]}}</text> |
| | | <view class="u-empty__wrap" v-if="$slots.default || $slots.$default"> |
| | | <slot /> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import props from './props.js'; |
| | | |
| | | /** |
| | | * empty 内容为空 |
| | | * @description 该组件用于需要加载内容,但是加载的第一页数据就为空,提示一个"没有内容"的场景, 我们精心挑选了十几个场景的图标,方便您使用。 |
| | | * @tutorial https://www.uviewui.com/components/empty.html |
| | | * @property {String} icon 内置图标名称,或图片路径,建议绝对路径 |
| | | * @property {String} text 提示文字 |
| | | * @property {String} textColor 文字颜色 (默认 '#c0c4cc' ) |
| | | * @property {String | Number} textSize 文字大小 (默认 14 ) |
| | | * @property {String} iconColor 图标的颜色 (默认 '#c0c4cc' ) |
| | | * @property {String | Number} iconSize 图标的大小 (默认 90 ) |
| | | * @property {String} mode 选择预置的图标类型 (默认 'data' ) |
| | | * @property {String | Number} width 图标宽度,单位px (默认 160 ) |
| | | * @property {String | Number} height 图标高度,单位px (默认 160 ) |
| | | * @property {Boolean} show 是否显示组件 (默认 true ) |
| | | * @property {String | Number} marginTop 组件距离上一个元素之间的距离,默认px单位 (默认 0 ) |
| | | * @property {Object} customStyle 定义需要用到的外部样式 |
| | | * |
| | | * @event {Function} click 点击组件时触发 |
| | | * @event {Function} close 点击关闭按钮时触发 |
| | | * @example <u-empty text="所谓伊人,在水一方" mode="list"></u-empty> |
| | | */ |
| | | export default { |
| | | name: "u-empty", |
| | | mixins: [uni.$u.mpMixin, uni.$u.mixin, props], |
| | | data() { |
| | | return { |
| | | icons: { |
| | | car: '购物车为空', |
| | | page: '页面不存在', |
| | | search: '没有搜索结果', |
| | | address: '没有收货地址', |
| | | wifi: '没有WiFi', |
| | | order: '订单为空', |
| | | coupon: '没有优惠券', |
| | | favor: '暂无收藏', |
| | | permission: '无权限', |
| | | history: '无历史记录', |
| | | news: '无新闻列表', |
| | | message: '消息列表为空', |
| | | list: '列表为空', |
| | | data: '数据为空', |
| | | comment: '暂无评论', |
| | | } |
| | | } |
| | | }, |
| | | computed: { |
| | | // 组件样式 |
| | | emptyStyle() { |
| | | const style = {} |
| | | style.marginTop = uni.$u.addUnit(this.marginTop) |
| | | // 合并customStyle样式,此参数通过mixin中的props传递 |
| | | return uni.$u.deepMerge(uni.$u.addStyle(this.customStyle), style) |
| | | }, |
| | | // 文本样式 |
| | | textStyle() { |
| | | const style = {} |
| | | style.color = this.textColor |
| | | style.fontSize = uni.$u.addUnit(this.textSize) |
| | | return style |
| | | }, |
| | | // 判断icon是否图片路径 |
| | | isSrc() { |
| | | return this.icon.indexOf('/') >= 0 |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import '../../libs/css/components.scss'; |
| | | $u-empty-text-margin-top:20rpx !default; |
| | | $u-empty-slot-margin-top:20rpx !default; |
| | | |
| | | .u-empty { |
| | | @include flex; |
| | | flex-direction: column; |
| | | justify-content: center; |
| | | align-items: center; |
| | | |
| | | &__text { |
| | | @include flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | margin-top: $u-empty-text-margin-top; |
| | | } |
| | | } |
| | | .u-slot-wrap { |
| | | @include flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | margin-top:$u-empty-slot-margin-top; |
| | | } |
| | | </style> |