u-empty.vue 4.4 KB
<template>
	<view class="u-empty" v-if="show" :style="{
		marginTop: marginTop + 'rpx'
	}">
		<u-icon
			:name="src ? src : 'empty-' + mode"
			:custom-style="iconStyle"
			:label="text ? text : icons[mode]"
			label-pos="bottom"
			:label-color="color"
			:label-size="fontSize"
			:size="iconSize"
			:color="iconColor"
			margin-top="14"
		></u-icon>
		<view class="u-slot-wrap">
			<slot name="bottom"></slot>
		</view>
	</view>
</template>

<script>
	/**
	 * empty 内容为空
	 * @description 该组件用于需要加载内容,但是加载的第一页数据就为空,提示一个"没有内容"的场景, 我们精心挑选了十几个场景的图标,方便您使用。
	 * @tutorial https://www.uviewui.com/components/empty.html
	 * @property {String} color 文字颜色(默认#c0c4cc)
	 * @property {String} text 文字提示(默认“无内容”)
	 * @property {String} src 自定义图标路径,如定义,mode参数会失效
	 * @property {String Number} font-size 提示文字的大小,单位rpx(默认28)
	 * @property {String} mode 内置的图标,见官网说明(默认data)
	 * @property {String Number} img-width 图标的宽度,单位rpx(默认240)
	 * @property {String} img-height 图标的高度,单位rpx(默认auto)
	 * @property {String Number} margin-top 组件距离上一个元素之间的距离(默认0)
	 * @property {Boolean} show 是否显示组件(默认true)
	 * @event {Function} click 点击组件时触发
	 * @event {Function} close 点击关闭按钮时触发
	 * @example <u-empty text="所谓伊人,在水一方" mode="list"></u-empty>
	 */
	export default {
		name: "u-empty",
		props: {
			// 图标路径
			src: {
				type: String,
				default: ''
			},
			// 提示文字
			text: {
				type: String,
				default: ''
			},
			// 文字颜色
			color: {
				type: String,
				default: '#c0c4cc'
			},
			// 图标的颜色
			iconColor: {
				type: String,
				default: '#c0c4cc'
			},
			// 图标的大小
			iconSize: {
				type: [String, Number],
				default: 120
			},
			// 文字大小,单位rpx
			fontSize: {
				type: [String, Number],
				default: 26
			},
			// 选择预置的图标类型
			mode: {
				type: String,
				default: 'data'
			},
			//  图标宽度,单位rpx
			imgWidth: {
				type: [String, Number],
				default: 120
			},
			// 图标高度,单位rpx
			imgHeight: {
				type: [String, Number],
				default: 'auto'
			},
			// 是否显示组件
			show: {
				type: Boolean,
				default: true
			},
			// 组件距离上一个元素之间的距离
			marginTop: {
				type: [String, Number],
				default: 0
			},
			iconStyle: {
				type: Object,
				default() {
					return {}
				}
			}
		},
		data() {
			return {
				icons: {
					car: '购物车为空',
					page: '页面不存在',
					search: '没有搜索结果',
					address: '没有收货地址',
					wifi: '没有WiFi',
					order: '订单为空',
					coupon: '没有优惠券',
					favor: '暂无收藏',
					permission: '无权限',
					history: '无历史记录',
					news: '无新闻列表',
					message: '消息列表为空',
					list: '列表为空',
					data: '数据为空'
				},
				// icons: [{
				// 	icon: 'car',
				// 	text: '购物车为空'
				// },{
				// 	icon: 'page',
				// 	text: '页面不存在'
				// },{
				// 	icon: 'search',
				// 	text: '没有搜索结果'
				// },{
				// 	icon: 'address',
				// 	text: '没有收货地址'
				// },{
				// 	icon: 'wifi',
				// 	text: '没有WiFi'
				// },{
				// 	icon: 'order',
				// 	text: '订单为空'
				// },{
				// 	icon: 'coupon',
				// 	text: '没有优惠券'
				// },{
				// 	icon: 'favor',
				// 	text: '暂无收藏'
				// },{
				// 	icon: 'permission',
				// 	text: '无权限'
				// },{
				// 	icon: 'history',
				// 	text: '无历史记录'
				// },{
				// 	icon: 'news',
				// 	text: '无新闻列表'
				// },{
				// 	icon: 'message',
				// 	text: '消息列表为空'
				// },{
				// 	icon: 'list',
				// 	text: '列表为空'
				// },{
				// 	icon: 'data',
				// 	text: '数据为空'
				// }],

			}
		}
	}
</script>

<style scoped lang="scss">
	@import "../../libs/css/style.components.scss";

	.u-empty {
		@include vue-flex;
		flex-direction: column;
		justify-content: center;
		align-items: center;
		height: 100%;
	}

	.u-image {
		margin-bottom: 20rpx;
	}

	.u-slot-wrap {
		@include vue-flex;
		justify-content: center;
		align-items: center;
		margin-top: 20rpx;
	}
</style>