99 lines
2.1 KiB
Vue
99 lines
2.1 KiB
Vue
<template>
|
||
<view class="tn-collapse-class tn-collapse">
|
||
<slot></slot>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
export default {
|
||
name: 'tn-collapse',
|
||
props: {
|
||
// 是否为手风琴
|
||
accordion: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
// 头部样式
|
||
headStyle: {
|
||
type: Object,
|
||
default() {
|
||
return {}
|
||
}
|
||
},
|
||
// 主题样式
|
||
bodyStyle: {
|
||
type: Object,
|
||
default() {
|
||
return {}
|
||
}
|
||
},
|
||
// 每一个item的样式
|
||
itemStyle: {
|
||
type: Object,
|
||
default() {
|
||
return {}
|
||
}
|
||
},
|
||
// 显示箭头
|
||
arrow: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
// 箭头颜色
|
||
arrowColor: {
|
||
type: String,
|
||
default: '#AAAAAA'
|
||
},
|
||
// 点击标题栏时的按压样式
|
||
hoverClass: {
|
||
type: String,
|
||
default: 'tn-hover'
|
||
}
|
||
},
|
||
computed: {
|
||
parentData() {
|
||
return [this.headStyle, this.bodyStyle, this.itemStyle, this.arrow, this.arrowColor, this.hoverClass]
|
||
}
|
||
},
|
||
data() {
|
||
return {
|
||
|
||
}
|
||
},
|
||
watch: {
|
||
parentData() {
|
||
// 如果父组件的参数发生变化重新初始化子组件的信息
|
||
if (this.childrens.length > 0) {
|
||
this.init()
|
||
}
|
||
}
|
||
},
|
||
created() {
|
||
this.childrens = []
|
||
},
|
||
methods: {
|
||
// 重新初始化内部所有子元素计算高度,异步获取数据时重新渲染
|
||
init() {
|
||
this.childrens.forEach((child, index) => {
|
||
child.init()
|
||
})
|
||
},
|
||
// collapseItem被点击时由collapseItem调用父组件
|
||
onChange() {
|
||
let activeItem = []
|
||
this.childrens.forEach((child, index) => {
|
||
if (child.isShow) {
|
||
activeItem.push(child.nameSync)
|
||
}
|
||
})
|
||
// 如果时手风琴模式,只有一个匹配结果,即activeItem长度为1
|
||
if (this.accordion) activeItem = activeItem.join(',')
|
||
this.$emit('change', activeItem)
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
</style>
|