看板
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
import type { ExtractPropTypes, PropType } from 'vue';
|
||||
import { baseProps } from '../common/props';
|
||||
|
||||
/**
|
||||
* u-empty 组件 Props 类型定义
|
||||
*/
|
||||
export const EmptyProps = {
|
||||
...baseProps,
|
||||
/** 图标路径 */
|
||||
src: { type: String, default: '' },
|
||||
/** 提示文字 */
|
||||
text: { type: String, default: '' },
|
||||
/** 文字颜色 */
|
||||
color: { type: String, default: 'var(--u-light-color)' },
|
||||
/** 图标的颜色 */
|
||||
iconColor: { type: String, default: 'var(--u-light-color)' },
|
||||
/** 图标的大小 */
|
||||
iconSize: { type: [String, Number] as PropType<string | number>, default: 120 },
|
||||
/** 文字大小,单位rpx */
|
||||
fontSize: { type: [String, Number] as PropType<string | number>, default: 26 },
|
||||
/** 选择预置的图标类型 */
|
||||
mode: { type: String, default: 'data' },
|
||||
/** 图标宽度,单位rpx */
|
||||
imgWidth: { type: [String, Number] as PropType<string | number>, default: 120 },
|
||||
/** 图标高度,单位rpx */
|
||||
imgHeight: { type: [String, Number] as PropType<string | number>, default: 'auto' },
|
||||
/** 是否显示组件 */
|
||||
show: { type: Boolean, default: true },
|
||||
/** 组件距离上一个元素之间的距离 */
|
||||
marginTop: { type: [String, Number] as PropType<string | number>, default: 0 },
|
||||
/** 图标自定义样式 */
|
||||
iconStyle: { type: Object as PropType<Record<string, any>>, default: () => ({}) }
|
||||
};
|
||||
|
||||
/**
|
||||
* u-empty 组件 Props 类型
|
||||
*/
|
||||
export type EmptyProps = ExtractPropTypes<typeof EmptyProps>;
|
||||
@@ -0,0 +1,108 @@
|
||||
<template>
|
||||
<view
|
||||
v-if="show"
|
||||
class="u-empty"
|
||||
:class="customClass"
|
||||
:style="$u.toStyle({ marginTop: marginTop + 'rpx' }, customStyle)"
|
||||
>
|
||||
<u-icon
|
||||
:name="src ? src : 'empty-' + mode"
|
||||
:custom-style="iconStyle"
|
||||
:label="text ? text : (icons as any)[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 lang="ts">
|
||||
export default {
|
||||
name: 'u-empty',
|
||||
options: {
|
||||
addGlobalClass: true,
|
||||
// #ifndef MP-TOUTIAO
|
||||
virtualHost: true,
|
||||
// #endif
|
||||
styleIsolation: 'shared'
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { EmptyProps } from './types';
|
||||
import { $u, useLocale } from '../../';
|
||||
import { computed } from 'vue';
|
||||
|
||||
const { t } = useLocale();
|
||||
|
||||
/**
|
||||
* empty 内容为空
|
||||
* @description 该组件用于需要加载内容,但是加载的第一页数据就为空,提示一个"没有内容"的场景, 我们精心挑选了十几个场景的图标,方便您使用。
|
||||
* @tutorial https://uviewpro.cn/zh/components/empty.html
|
||||
* @property {String} color 文字颜色(默认var(--u-light-color))
|
||||
* @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>
|
||||
*/
|
||||
const props = defineProps(EmptyProps);
|
||||
|
||||
/**
|
||||
* 预置图标对应的提示文字
|
||||
*/
|
||||
const icons = computed(() => {
|
||||
return {
|
||||
car: t('uEmpty.car'),
|
||||
page: t('uEmpty.page'),
|
||||
search: t('uEmpty.search'),
|
||||
address: t('uEmpty.address'),
|
||||
wifi: t('uEmpty.wifi'),
|
||||
order: t('uEmpty.order'),
|
||||
coupon: t('uEmpty.coupon'),
|
||||
favor: t('uEmpty.favor'),
|
||||
permission: t('uEmpty.permission'),
|
||||
history: t('uEmpty.history'),
|
||||
news: t('uEmpty.news'),
|
||||
message: t('uEmpty.message'),
|
||||
list: t('uEmpty.list'),
|
||||
data: t('uEmpty.data')
|
||||
};
|
||||
});
|
||||
</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>
|
||||
Reference in New Issue
Block a user