| <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> |