Files
FirstUI-vue/components/firstui/fui-card/fui-card.vue
2023-08-17 21:28:49 +08:00

326 lines
7.0 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!--本文件由FirstUI授权予新疆天衡创新研究院有限公司手机号1 8 6 140 7 254 9身份证尾号5A07X5专用请尊重知识产权勿私下传播违者追究法律责任-->
<template>
<view class="fui-card__wrap"
:class="{'fui-card__full':full,'fui-card__border':showBorder,'fui-card__border-radius':showBorder && !isNvue && !full}"
:style="{marginTop:margin[0] || 0,marginRight:full?0: (margin[1] || 0),marginBottom:margin[2] || margin[0] || 0,marginLeft:full?0:(margin[3] || margin[1] || 0),background:background,borderRadius:full?0:radius,'box-shadow':showBorder?'none':shadow,borderColor:isNvue?borderColor:'transparent'}"
@tap="handleClick">
<view class="fui-card__header" v-if="tag || title || src" :class="{'fui-card__header-line':headerLine}"
:style="{'border-top-left-radius':full?0:radius,'border-top-right-radius':full?0:radius,'border-bottom-color':isNvue && headerLine?lineColor:'transparent',paddingTop:padding[0] || 0,paddingRight:padding[1]||0,paddingBottom:padding[2] || padding[0] || 0,paddingLeft:padding[3] || padding[1] || 0,background:headerBackground}">
<view class="fui-card__header-left">
<image :src="src" class="fui-card__header-thumb" v-if="src"
:style="{height:height+'rpx',width:width+'rpx',borderRadius:imageRadius}"></image>
<text class="fui-card__header-title" :style="{fontSize:size+'rpx',color:color}"
v-if="title">{{title}}</text>
</view>
<view class="fui-card__header-right" v-if="tag">
<text :style="{fontSize:tagSize+'rpx',color:tagColor}">{{tag}}</text>
</view>
</view>
<view class="fui-card__body" :class="{'fui-card__header-line':footerLine}">
<slot></slot>
</view>
<view class="fui-card__footer"
:style="{'border-bottom-left-radius':full?0:radius,'border-bottom-right-radius':full?0:radius}">
<slot name="footer"></slot>
</view>
</view>
</template>
<script>
export default {
name: "fui-card",
emits: ['click'],
props: {
//card margin值[上、右、下、左]
margin: {
type: Array,
default () {
return ['0', '32rpx']
}
},
//是否通栏为true时margin-leftmargin-right失效
full: {
type: Boolean,
default: false
},
//card 背景色
background: {
type: String,
default: '#fff'
},
//card 圆角非nvue下showBorder为false时生效
radius: {
type: String,
default: '16rpx'
},
//阴影nvue下
shadow: {
type: String,
default: '0 2rpx 4rpx 0 rgba(2, 4, 38, 0.05)'
},
//是否显示card 边框为true时box-shadow失效
showBorder: {
type: Boolean,
default: false
},
//边框颜色仅nvue下生效
borderColor: {
type: String,
default: 'red'
},
headerBackground: {
type: String,
default: '#fff'
},
//是否需要header底部线条
headerLine: {
type: Boolean,
default: true
},
//是否需要内容与footer之间线条
footerLine: {
type: Boolean,
default: false
},
//header 底部线条颜色仅nvue有效非nvue改变颜色使用css变量
lineColor: {
type: String,
default: '#EEEEEE'
},
//header padding值[上、右、下、左]
padding: {
type: Array,
default () {
return ['20rpx', '20rpx']
}
},
//头像,图标图片地址
src: {
type: String,
default: ''
},
//图片宽度单位rpx
width: {
type: [Number, String],
default: 64
},
//图片高度单位rpx
height: {
type: [Number, String],
default: 64
},
//图片圆角
imageRadius: {
type: String,
default: '8rpx'
},
title: {
type: String,
default: ''
},
size: {
type: [Number, String],
default: 30
},
color: {
type: String,
default: '#7F7F7F'
},
tag: {
type: String,
default: ''
},
tagSize: {
type: [Number, String],
default: 24
},
tagColor: {
type: String,
default: '#b2b2b2'
},
index: {
type: Number,
default: 0
}
},
data() {
let isNvue = false;
// #ifdef APP-NVUE
isNvue = true;
// #endif
return {
isNvue
};
},
methods: {
handleClick() {
this.$emit('click', {
index: this.index
})
}
}
}
</script>
<style scoped>
.fui-card__wrap {
/* #ifndef APP-NVUE */
flex: 1;
box-sizing: border-box;
/* #endif */
overflow: hidden;
}
/* #ifndef APP-NVUE */
.fui-card__full {
margin-left: 0 !important;
margin-right: 0 !important;
border-radius: 0 !important;
}
/* #endif */
/* #ifndef APP-NVUE */
.fui-card__full::after {
border-radius: 0 !important;
}
/* #endif */
.fui-card__border {
position: relative;
box-shadow: none !important;
/* #ifdef APP-NVUE */
border-width: 0.5px;
border-style: solid;
/* #endif */
}
/* #ifndef APP-NVUE */
.fui-card__border-radius {
border-radius: 16rpx !important;
}
.fui-card__border::after {
content: ' ';
position: absolute;
height: 200%;
width: 200%;
border: 1px solid var(--fui-color-border, #EEEEEE);
transform-origin: 0 0;
-webkit-transform-origin: 0 0;
-webkit-transform: scale(0.5);
transform: scale(0.5);
left: 0;
top: 0;
border-radius: 32rpx;
box-sizing: border-box;
pointer-events: none;
}
/* #endif */
.fui-card__header {
/* #ifndef APP-NVUE */
width: 100%;
display: flex;
box-sizing: border-box;
overflow: hidden;
/* #endif */
/* #ifdef APP-NVUE */
flex: 1;
/* #endif */
flex-direction: row;
align-items: center;
justify-content: space-between;
position: relative;
}
.fui-card__header-left {
/* #ifndef APP-NVUE */
display: flex;
white-space: nowrap;
/* #endif */
flex-direction: row;
align-items: center;
}
.fui-card__header-line {
position: relative;
/* #ifdef APP-NVUE */
border-bottom-width: 0.5px;
border-bottom-style: solid;
border-bottom-color: #EEEEEE;
/* #endif */
}
/* #ifndef APP-NVUE */
.fui-card__header-line::after {
content: '';
position: absolute;
border-bottom: 1px solid var(--fui-color-border, #EEEEEE);
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
transform-origin: 0 100%;
bottom: 0;
right: 0;
left: 0;
pointer-events: none;
}
/* #endif */
.fui-card__header-thumb {
/* #ifndef APP-NVUE */
vertical-align: middle;
/* #endif */
margin-right: 20rpx;
/* #ifndef APP-NVUE */
flex-shrink: 0;
/* #endif */
}
.fui-card__header-title {
/* #ifndef APP-NVUE */
display: inline-block;
vertical-align: middle;
max-width: 380rpx;
/* #endif */
/* #ifndef APP-NVUE */
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
/* #endif */
/* #ifdef APP-NVUE */
lines: 1;
/* #endif */
}
.fui-card__header-right {
text-align: right;
/* #ifndef APP-NVUE */
flex-shrink: 0;
/* #endif */
}
.fui-card__body {
/* #ifdef APP-NVUE */
flex: 1;
/* #endif */
/* #ifndef APP-NVUE */
width: 100%;
box-sizing: border-box;
/* #endif */
}
.fui-card__footer {
/* #ifdef APP-NVUE */
flex: 1;
/* #endif */
/* #ifndef APP-NVUE */
width: 100%;
box-sizing: border-box;
/* #endif */
}
</style>