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.
60 lines
1.5 KiB
60 lines
1.5 KiB
3 years ago
|
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);
|
||
|
},
|
||
|
},
|
||
|
});
|