榆山数据端小程序
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.
 
 

112 lines
3.0 KiB

import baseComponent from '../helpers/baseComponent'
baseComponent({
relations: {
'../accordion/index': {
type: 'child',
observer() {
this.debounce(this.updated)
},
},
},
properties: {
prefixCls: {
type: String,
value: 'wux-accordion-group',
},
cellGroupPrefixCls: {
type: String,
value: 'wux-cell-group',
},
defaultCurrent: {
type: Array,
value: [],
},
current: {
type: Array,
value: [],
observer(newVal) {
if (this.data.controlled) {
this.updated(newVal)
}
},
},
controlled: {
type: Boolean,
value: false,
},
accordion: {
type: Boolean,
value: false,
},
title: {
type: String,
value: '',
},
label: {
type: String,
value: '',
},
},
data: {
activeKey: '',
keys: [],
},
methods: {
updated(activeKey = this.data.activeKey) {
if (this.data.activeKey !== activeKey) {
this.setData({ activeKey })
}
this.changeCurrent(activeKey)
},
changeCurrent(activeKey) {
const elements = this.getRelationNodes('../accordion/index')
if (elements.length > 0) {
elements.forEach((element, index) => {
const key = element.data.key || String(index)
const current = this.data.accordion ? activeKey[0] === key : activeKey.indexOf(key) !== -1
element.changeCurrent(current, key)
})
}
if (this.data.keys.length !== elements.length) {
this.setData({
keys: elements.map((element) => element.data),
})
}
},
emitEvent(key) {
this.triggerEvent('change', {
key,
keys: this.data.keys,
})
},
setActiveKey(activeKey) {
if (!this.data.controlled) {
this.updated(activeKey)
}
this.emitEvent(this.data.accordion ? activeKey[0] : activeKey)
},
onClickItem(key) {
let activeKey = [...this.data.activeKey]
if (this.data.accordion) {
activeKey = activeKey[0] === key ? [] : [key]
} else {
activeKey = activeKey.indexOf(key) !== -1 ? activeKey.filter((n) => n !== key) : [...activeKey, key]
}
this.setActiveKey(activeKey)
},
},
ready() {
const { defaultCurrent, current, controlled } = this.data
const activeKey = controlled ? current : defaultCurrent
this.updated(activeKey)
},
})