<template>
	<view :class="['u-theme-' + cTheme, '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"
			:size="iconSize"
			:color="iconColor"
			margin-top="14"
		></u-icon> -->
		<view :style="{width: imgWidth, height: imgHeight }">
			<u-image :showLoading="false" :fade="false" :custom-style="iconStyle" width="100%" height="100%" class="img" :src="src ? src : getImageUrl(mode)" :alt="text ? text : icons[mode]"></u-image>
		</view>
		<!-- <img :custom-style="iconStyle" class="img" :src="src ? src : getImageUrl(mode)" :alt="text ? text : icons[mode]"> -->
		<view class="u-empty-tips">{{ text ? text : icons[mode] }}</view>
		<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: '280px'
			},
			// 图标高度，单位rpx
			imgHeight: {
				type: [String, Number],
				default: '165px'
			},
			// 是否显示组件
			show: {
				type: Boolean,
				default: true
			},
			// 组件距离上一个元素之间的距离
			marginTop: {
				type: [String, Number],
				default: 0
			},
			iconStyle: {
				type: Object,
				default() {
					return {}
				}
			},
			// 关怀模式: normal, care(fpi新增)
			theme: {
				type: String,
				default: ''
			},
		},
		data() {
			return {
				icons: {
					data: '暂无数据',
					site: '暂无站点 ',
					message: '暂无消息',
					search: '暂无搜索结果',
					server: '抱歉，服务器出错了！',
					page: '抱歉，你访问的页面不存在！',
					network: '网络出错了！',
					load: '页面加载失败！',
					video: '该点位无视频监控',
					alarm: '暂无预警',
					permission: '该账号暂无权限',
					target: '暂未制定目标',
					exceedStandard: '暂无超标企业',
					archive: '正在归档，请稍后…',
				}
			}
		},
		computed: {
			cTheme() {
				return this.theme || (uni.$u || {}).theme;
			},
		},
		methods: {
			getImageUrl(name) {
			/* #ifdef VUE3*/
				return new URL(`../../assets/${name}.svg`, import.meta.url).href
			/* #endif */
			/* #ifndef VUE3*/
				return require('../../assets/'+ name + '.svg')
			/* #endif */
			}
		},
	}
</script>

<style scoped lang="scss">
	@import "../../libs/css/style.components.scss";
@include themify($themes) {

	&.u-empty {
		@include vue-flex;
		flex-direction: column;
		justify-content: center;
		align-items: center;
		height: 100%;
	}
	.u-empty {
		.img {
			width: 560rpx;
			height: 330rpx;
		}
		.u-empty-tips {
			color: themed('u-tips-color');
			font-size: themed('font-size-14');
		}
	}

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

	.u-slot-wrap {
		@include vue-flex;
		justify-content: center;
		align-items: center;
		margin-top: 20rpx;
	}
	::v-deep .u-icon__label {
		font-size: themed('font-size-14') !important;
		color: themed('u-tips-color') !important;
	}
}
</style>
