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