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.
212 lines
4.9 KiB
212 lines
4.9 KiB
<template> |
|
<view :class="{ 'uni-collapse-cell--disabled': disabled,'uni-collapse-cell--notdisabled': !disabled, 'uni-collapse-cell--open': isOpen,'uni-collapse-cell--hide':!isOpen }" class="uni-collapse-cell"> |
|
<view :class="{ 'uni-collapse-cell--disabled': disabled}" class="uni-collapse-cell__title" @click="onClick"> |
|
<image v-if="thumb" :src="thumb" class="uni-collapse-cell__title-img" /> |
|
<text class="uni-collapse-cell__title-text">{{ title }}</text> |
|
<!-- #ifdef MP-ALIPAY --> |
|
<view :class="{ 'uni-collapse-cell__title-arrow-active': isOpen, 'uni-collapse-cell--animation': showAnimation === true }" class="uni-collapse-cell__title-arrow"> |
|
<uni-icons color="#bbb" size="20" type="arrowdown" /> |
|
</view> |
|
<!-- #endif --> |
|
<!-- #ifndef MP-ALIPAY --> |
|
<uni-icons :class="{ 'uni-collapse-cell__title-arrow-active': isOpen, 'uni-collapse-cell--animation': showAnimation === true }" class="uni-collapse-cell__title-arrow" color="#bbb" size="20" type="arrowdown" /> |
|
<!-- #endif --> |
|
</view> |
|
<view :class="{'uni-collapse-cell__content--hide':!isOpen}" class="uni-collapse-cell__content"> |
|
<view :class="{ 'uni-collapse-cell--animation': showAnimation === true }" class="uni-collapse-cell__wrapper" :style="{'transform':isOpen?'translateY(0)':'translateY(-50%)','-webkit-transform':isOpen?'translateY(0)':'translateY(-50%)'}"> |
|
<slot /> |
|
</view> |
|
</view> |
|
</view> |
|
</template> |
|
|
|
<script> |
|
/** |
|
* CollapseItem 折叠面板子组件 |
|
* @description 折叠面板子组件 |
|
* @property {String} title 标题文字 |
|
* @property {String} thumb 标题左侧缩略图 |
|
* @property {Boolean} disabled = [true|false] 是否展开面板 |
|
* @property {Boolean} showAnimation = [true|false] 开启动画 |
|
*/ |
|
export default { |
|
name: 'UniCollapseItem', |
|
props: { |
|
title: { |
|
// 列表标题 |
|
type: String, |
|
default: '' |
|
}, |
|
name: { |
|
// 唯一标识符 |
|
type: [Number, String], |
|
default: 0 |
|
}, |
|
disabled: { |
|
// 是否禁用 |
|
type: Boolean, |
|
default: false |
|
}, |
|
showAnimation: { |
|
// 是否显示动画 |
|
type: Boolean, |
|
default: false |
|
}, |
|
open: { |
|
// 是否展开 |
|
type: Boolean, |
|
default: false |
|
}, |
|
thumb: { |
|
// 缩略图 |
|
type: String, |
|
default: '' |
|
} |
|
}, |
|
data() { |
|
return { |
|
isOpen: false |
|
} |
|
}, |
|
watch: { |
|
open(val) { |
|
this.isOpen = val |
|
} |
|
}, |
|
inject: ['collapse'], |
|
created() { |
|
this.isOpen = this.open |
|
this.nameSync = this.name ? this.name : this.collapse.childrens.length |
|
this.collapse.childrens.push(this) |
|
if (String(this.collapse.accordion) === 'true') { |
|
if (this.isOpen) { |
|
let lastEl = this.collapse.childrens[this.collapse.childrens.length - 2] |
|
if (lastEl) { |
|
this.collapse.childrens[this.collapse.childrens.length - 2].isOpen = false |
|
} |
|
} |
|
} |
|
}, |
|
methods: { |
|
onClick() { |
|
if (this.disabled) { |
|
return |
|
} |
|
if (String(this.collapse.accordion) === 'true') { |
|
this.collapse.childrens.forEach(vm => { |
|
if (vm === this) { |
|
return |
|
} |
|
vm.isOpen = false |
|
}) |
|
} |
|
this.isOpen = !this.isOpen |
|
this.collapse.onChange && this.collapse.onChange() |
|
this.$forceUpdate() |
|
} |
|
} |
|
} |
|
</script> |
|
|
|
<style scoped> |
|
.uni-collapse-cell { |
|
flex-direction: column; |
|
border-color: #e5e5e5; |
|
border-bottom-width: 1px; |
|
border-bottom-style: solid; |
|
} |
|
|
|
.uni-collapse-cell--hover { |
|
background-color: #f1f1f1; |
|
} |
|
|
|
.uni-collapse-cell--open { |
|
background-color: #f1f1f1; |
|
} |
|
|
|
.uni-collapse-cell--disabled { |
|
background-color: #f1f1f1; |
|
/* #ifdef H5 */ |
|
cursor: not-allowed !important; |
|
/* #endif */ |
|
} |
|
|
|
.uni-collapse-cell--hide { |
|
height: 48px; |
|
} |
|
|
|
.uni-collapse-cell--animation { |
|
transition-property: transform; |
|
transition-duration: 0.3s; |
|
transition-timing-function: ease; |
|
} |
|
|
|
.uni-collapse-cell__title { |
|
padding: 12px 12px; |
|
position: relative; |
|
/* #ifndef APP-NVUE */ |
|
display: flex; |
|
width: 100%; |
|
box-sizing: border-box; |
|
/* #endif */ |
|
height: 48px; |
|
line-height: 24px; |
|
flex-direction: row; |
|
justify-content: space-between; |
|
align-items: center; |
|
/* #ifdef H5 */ |
|
cursor: pointer; |
|
/* #endif */ |
|
} |
|
|
|
.uni-collapse-cell__title:active { |
|
background-color: #f1f1f1; |
|
} |
|
|
|
.uni-collapse-cell__title-img { |
|
height: 26px; |
|
width: 26px; |
|
margin-right: 10px; |
|
} |
|
|
|
.uni-collapse-cell__title-arrow { |
|
width: 20px; |
|
height: 20px; |
|
transform: rotate(0deg); |
|
transform-origin: center center; |
|
} |
|
|
|
.uni-collapse-cell__title-arrow-active { |
|
transform: rotate(180deg); |
|
} |
|
|
|
.uni-collapse-cell__title-text { |
|
flex: 1; |
|
font-size: 14px; |
|
/* #ifndef APP-NVUE */ |
|
white-space: nowrap; |
|
color: inherit; |
|
/* #endif */ |
|
/* #ifdef APP-NVUE */ |
|
lines: 1; |
|
/* #endif */ |
|
overflow: hidden; |
|
text-overflow: ellipsis; |
|
} |
|
|
|
.uni-collapse-cell__content { |
|
overflow: hidden; |
|
} |
|
|
|
.uni-collapse-cell__wrapper { |
|
/* #ifndef APP-NVUE */ |
|
display: flex; |
|
/* #endif */ |
|
flex-direction: column; |
|
} |
|
|
|
.uni-collapse-cell__content--hide { |
|
height: 0px; |
|
line-height: 0px; |
|
} |
|
</style> |