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.
59 lines
1.5 KiB
59 lines
1.5 KiB
import { VantComponent } from '../common/component'; |
|
import { useParent } from '../common/relation'; |
|
import { setContentAnimate } from './animate'; |
|
VantComponent({ |
|
classes: ['title-class', 'content-class'], |
|
relation: useParent('collapse'), |
|
props: { |
|
name: null, |
|
title: null, |
|
value: null, |
|
icon: String, |
|
label: String, |
|
disabled: Boolean, |
|
clickable: Boolean, |
|
border: { |
|
type: Boolean, |
|
value: true, |
|
}, |
|
isLink: { |
|
type: Boolean, |
|
value: true, |
|
}, |
|
}, |
|
data: { |
|
expanded: false, |
|
}, |
|
mounted() { |
|
this.updateExpanded(); |
|
this.mounted = true; |
|
}, |
|
methods: { |
|
updateExpanded() { |
|
if (!this.parent) { |
|
return; |
|
} |
|
const { value, accordion } = this.parent.data; |
|
const { children = [] } = this.parent; |
|
const { name } = this.data; |
|
const index = children.indexOf(this); |
|
const currentName = name == null ? index : name; |
|
const expanded = accordion |
|
? value === currentName |
|
: (value || []).some((name) => name === currentName); |
|
if (expanded !== this.data.expanded) { |
|
setContentAnimate(this, expanded, this.mounted); |
|
} |
|
this.setData({ index, expanded }); |
|
}, |
|
onClick() { |
|
if (this.data.disabled) { |
|
return; |
|
} |
|
const { name, expanded } = this.data; |
|
const index = this.parent.children.indexOf(this); |
|
const currentName = name == null ? index : name; |
|
this.parent.switch(currentName, !expanded); |
|
}, |
|
}, |
|
});
|
|
|