绩效考核手机版
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.
 
 
 
 

70 lines
1.9 KiB

<template>
<view class="s-collapse" :class="c_class" :style="custom_style">
<slot />
</view>
</template>
<script>
import componentMixin from '../../mixins/componentMixin';
/**
* s-collapse 折叠面板
* @description 将一组内容放置在多个折叠面板中,点击面板的标题可以展开或收缩其内容。
* @property {String|Number|Array} value 当前展开面板的 name,手风琴模式:number | string 非手风琴模式:(number | string)[]
* @property {Boolean} border 是否显示外边框
* @property {Boolean} accordion 是否开启手风琴模式
* @event {Function} change (value) 切换面板时触发,value类型与 v-model 绑定的值一致
* @example <s-collapse></s-collapse>
*/
export default {
name: 'SCollapse',
mixins: [componentMixin],
props: {
value: {
type: [String, Number, Array],
default: '',
},
border: {
type: Boolean,
default: true,
},
accordion: Boolean,
},
computed: {
c_class() {
return this.$mergeClass({
's-hairline--top-bottom': this.border,
}, this.custom_class);
},
matchValue() {
const { accordion, value } = this;
return accordion ? value : this.$getType(value) === 'array' ? value : [];
},
},
created() {
this.collapseItems = [];
},
methods: {
updateValue(value) {
this.$emit('input', value);
this.$emit('change', value);
},
toggle(name, expanded) {
const { accordion, matchValue } = this;
if (accordion) {
this.updateValue(name === matchValue ? '' : name);
} else if (expanded) {
this.updateValue(matchValue.concat(name));
} else {
this.updateValue(matchValue.filter(value => value !== name));
}
},
isExpanded(name) {
const { accordion, matchValue } = this;
return accordion ? matchValue === name : matchValue.includes(name);
},
},
};
</script>
<style lang="scss" src="./index.scss"></style>