You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
fx-uniapp/pages/app/components/sh-collapse-item.vue

152 lines
3.0 KiB

2 years ago
<template>
<view class="sh-collapse-box">
<view class="collapse-head u-flex u-row-between">
<view class="u-flex" @tap="onArrow">
<image class="head-img" :src="avatar" mode=""></image>
<view class="head-info">
<view class="name-box u-flex">
<view class="name-text">{{ name }}</view>
<view class="grade-tag tag-box u-flex" v-if="level">
<image v-show="level.image" class="tag-img" :src="level.image" mode=""></image>
<text class="tag-title">{{ level.name }}</text>
</view>
</view>
<view class="u-flex">
<view class="head-time">{{ $u.timeFormat(dateTime, 'yyyy年mm月dd日') }}</view>
<view class="child-num u-m-l-30">下级成员{{ childNum }}</view>
</view>
</view>
</view>
<button v-if="childNum" class="u-reset-button arrow-btn" :class="{ 'arrow-active': showUnfold }" @tap="onArrow">
<view class="u-iconfont uicon-arrow-down u-m-l-20" style="color: #999;font-size: 26rpx;"></view>
</button>
</view>
<slot v-if="showUnfold" name="collapse-children"></slot>
</view>
</template>
<script>
/**
* 用户列表项
* @property {String} avatar - 头像
* @property {String} name - 昵称
* @property {String} level - 等级
* @property {String | Date} dateTime - 日期
* @event {Function} click - 点击箭头
*/
export default {
name: 'sh-collapse-item',
components: {},
data() {
return {};
},
props: {
avatar: {
type: String,
default: ''
},
name: {
type: String,
default: ''
},
level: {
type: Object,
default: null
},
dateTime: {
type: Number,
default: 0
},
isUnfold: {
type: Boolean,
default: false
},
childNum: {
type: Number,
default: 0
}
},
computed: {
showUnfold: {
get() {
return this.isUnfold;
},
set(val) {
return val;
}
}
},
methods: {
onArrow() {
this.$emit('click');
}
}
};
</script>
<style lang="scss">
.sh-collapse-box {
background-color: #fff;
.collapse-head {
padding: 0rpx 28rpx;
height: 132rpx;
border-bottom: 1rpx solid #eee;
.head-img {
width: 66rpx;
height: 66rpx;
border-radius: 50%;
margin-right: 45rpx;
}
.arrow-btn {
background: none;
padding: 0;
color: #c4c4c4;
transition: all linear 0.3s;
}
.arrow-active {
transform: rotate(180deg);
transform-origin: center center;
transition: all linear 0.3s;
}
.head-info {
.head-time,
.child-num {
font-size: 24rpx;
font-weight: 400;
color: #999999;
}
.name-box {
margin-bottom: 12rpx;
.name-text {
font-size: 26rpx;
font-weight: 500;
color: #111111;
}
.tag-box {
background: rgba(0, 0, 0, 0.2);
border-radius: 21rpx;
line-height: 30rpx;
padding: 5rpx 10rpx;
margin-left: 10rpx;
.tag-img {
width: 34rpx;
height: 34rpx;
margin-right: 6rpx;
border-radius: 50%;
}
.tag-title {
font-size: 18rpx;
font-weight: 500;
color: rgba(255, 255, 255, 1);
line-height: 20rpx;
}
}
}
}
}
}
</style>