| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 | <template>	<view class="uni-card" :class="{ 'uni-card--full': isFull, 'uni-card--shadow': isShadow,'uni-card--border':border}"		:style="{'margin':isFull?0:margin,'padding':spacing,'box-shadow':isShadow?shadow:''}">		<!-- 封面 -->		<slot name="cover">			<view v-if="cover" class="uni-card__cover">				<image class="uni-card__cover-image" mode="widthFix" @click="onClick('cover')" :src="cover"></image>			</view>		</slot>		<slot name="title">			<view v-if="title || extra" class="uni-card__header">				<!-- 卡片标题 -->				<view class="uni-card__header-box" @click="onClick('title')">					<view v-if="thumbnail" class="uni-card__header-avatar">						<image class="uni-card__header-avatar-image" :src="thumbnail" mode="aspectFit" />					</view>					<view class="uni-card__header-content">						<text class="uni-card__header-content-title uni-ellipsis">{{ title }}</text>						<text v-if="title&&subTitle"							class="uni-card__header-content-subtitle uni-ellipsis">{{ subTitle }}</text>					</view>				</view>				<view class="uni-card__header-extra" @click="onClick('extra')">					<text class="uni-card__header-extra-text">{{ extra }}</text>				</view>			</view>		</slot>		<!-- 卡片内容 -->		<view class="uni-card__content" :style="{padding:padding}" @click="onClick('content')">			<slot></slot>		</view>		<view class="uni-card__actions" @click="onClick('actions')">			<slot name="actions"></slot>		</view>	</view></template><script>	/**	 * Card 卡片	 * @description 卡片视图组件	 * @tutorial https://ext.dcloud.net.cn/plugin?id=22	 * @property {String} title 标题文字	 * @property {String} subTitle 副标题	 * @property {Number} padding 内容内边距	 * @property {Number} margin 卡片外边距	 * @property {Number} spacing 卡片内边距	 * @property {String} extra 标题额外信息	 * @property {String} cover 封面图(本地路径需要引入)	 * @property {String} thumbnail 标题左侧缩略图	 * @property {Boolean} is-full = [true | false] 卡片内容是否通栏,为 true 时将去除padding值	 * @property {Boolean} is-shadow = [true | false] 卡片内容是否开启阴影	 * @property {String} shadow 卡片阴影	 * @property {Boolean} border 卡片边框	 * @event {Function} click 点击 Card 触发事件	 */	export default {		name: 'UniCard',		emits: ['click'],		props: {			title: {				type: String,				default: ''			},			subTitle: {				type: String,				default: ''			},			padding: {				type: String,				default: '10px'			},			margin: {				type: String,				default: '15px'			},			spacing: {				type: String,				default: '0 10px'			},			extra: {				type: String,				default: ''			},			cover: {				type: String,				default: ''			},			thumbnail: {				type: String,				default: ''			},			isFull: {				// 内容区域是否通栏				type: Boolean,				default: false			},			isShadow: {				// 是否开启阴影				type: Boolean,				default: true			},			shadow: {				type: String,				default: '0px 0px 3px 1px rgba(0, 0, 0, 0.08)'			},			border: {				type: Boolean,				default: true			}		},		methods: {			onClick(type) {				this.$emit('click', type)			}		}	}</script><style lang="scss">	$uni-border-3: #EBEEF5 !default;	$uni-shadow-base:0 0px 6px 1px rgba($color: #a5a5a5, $alpha: 0.2) !default;	$uni-main-color: #3a3a3a !default;	$uni-base-color: #6a6a6a !default;	$uni-secondary-color: #909399 !default;	$uni-spacing-sm: 8px !default;	$uni-border-color:$uni-border-3;	$uni-shadow: $uni-shadow-base;	$uni-card-title: 15px;	$uni-cart-title-color:$uni-main-color;	$uni-card-subtitle: 12px;	$uni-cart-subtitle-color:$uni-secondary-color;	$uni-card-spacing: 10px;	$uni-card-content-color: $uni-base-color;	.uni-card {		margin: $uni-card-spacing;		padding: 0 $uni-spacing-sm;		border-radius: 4px;		overflow: hidden;		font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, SimSun, sans-serif;		background-color: #fff;		flex: 1;		.uni-card__cover {			position: relative;			margin-top: $uni-card-spacing;			flex-direction: row;			overflow: hidden;			border-radius: 4px;			.uni-card__cover-image {				flex: 1;				// width: 100%;				/* #ifndef APP-PLUS */				vertical-align: middle;				/* #endif */			}		}		.uni-card__header {			display: flex;			border-bottom: 1px $uni-border-color solid;			flex-direction: row;			align-items: center;			padding: $uni-card-spacing;			overflow: hidden;			.uni-card__header-box {				/* #ifndef APP-NVUE */				display: flex;				/* #endif */				flex: 1;				flex-direction: row;				align-items: center;				overflow: hidden;			}			.uni-card__header-avatar {				width: 40px;				height: 40px;				overflow: hidden;				border-radius: 5px;				margin-right: $uni-card-spacing;				.uni-card__header-avatar-image {					flex: 1;					width: 40px;					height: 40px;				}			}			.uni-card__header-content {				/* #ifndef APP-NVUE */				display: flex;				/* #endif */				flex-direction: column;				justify-content: center;				flex: 1;				// height: 40px;				overflow: hidden;				.uni-card__header-content-title {					font-size: $uni-card-title;					color: $uni-cart-title-color;					// line-height: 22px;				}				.uni-card__header-content-subtitle {					font-size: $uni-card-subtitle;					margin-top: 5px;					color: $uni-cart-subtitle-color;				}			}			.uni-card__header-extra {				line-height: 12px;				.uni-card__header-extra-text {					font-size: 12px;					color: $uni-cart-subtitle-color;				}			}		}		.uni-card__content {			padding: $uni-card-spacing;			font-size: 14px;			color: $uni-card-content-color;			line-height: 22px;		}		.uni-card__actions {			font-size: 12px;		}	}	.uni-card--border {		border: 1px solid $uni-border-color;	}	.uni-card--shadow {		position: relative;		/* #ifndef APP-NVUE */		box-shadow: $uni-shadow;		/* #endif */	}	.uni-card--full {		margin: 0;		border-left-width: 0;		border-left-width: 0;		border-radius: 0;	}	/* #ifndef APP-NVUE */	.uni-card--full:after {		border-radius: 0;	}	/* #endif */	.uni-ellipsis {		/* #ifndef APP-NVUE */		overflow: hidden;		white-space: nowrap;		text-overflow: ellipsis;		/* #endif */		/* #ifdef APP-NVUE */		lines: 1;		/* #endif */	}</style>
 |