123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- <template>
- <div class="el-collapse-item"
- :class="{'is-active': isActive, 'is-disabled': disabled }">
- <div
- role="tab"
- :aria-expanded="isActive"
- :aria-controls="`el-collapse-content-${id}`"
- :aria-describedby ="`el-collapse-content-${id}`"
- >
- <div
- class="el-collapse-item__header"
- @click="handleHeaderClick"
- role="button"
- :id="`el-collapse-head-${id}`"
- :tabindex="disabled ? undefined : 0"
- @keyup.space.enter.stop="handleEnterClick"
- :class="{
- 'focusing': focusing,
- 'is-active': isActive
- }"
- @focus="handleFocus"
- @blur="focusing = false"
- >
- <slot name="title">{{title}}</slot>
- <i
- class="el-collapse-item__arrow el-icon-arrow-right"
- :class="{'is-active': isActive}">
- </i>
- </div>
- </div>
- <el-collapse-transition>
- <div
- class="el-collapse-item__wrap"
- v-show="isActive"
- role="tabpanel"
- :aria-hidden="!isActive"
- :aria-labelledby="`el-collapse-head-${id}`"
- :id="`el-collapse-content-${id}`"
- >
- <div class="el-collapse-item__content">
- <slot></slot>
- </div>
- </div>
- </el-collapse-transition>
- </div>
- </template>
- <script>
- import ElCollapseTransition from 'element-ui/src/transitions/collapse-transition';
- import Emitter from 'element-ui/src/mixins/emitter';
- import { generateId } from 'element-ui/src/utils/util';
- export default {
- name: 'ElCollapseItem',
- componentName: 'ElCollapseItem',
- mixins: [Emitter],
- components: { ElCollapseTransition },
- data() {
- return {
- contentWrapStyle: {
- height: 'auto',
- display: 'block'
- },
- contentHeight: 0,
- focusing: false,
- isClick: false,
- id: generateId()
- };
- },
- inject: ['collapse'],
- props: {
- title: String,
- name: {
- type: [String, Number],
- default() {
- return this._uid;
- }
- },
- disabled: Boolean
- },
- computed: {
- isActive() {
- return this.collapse.activeNames.indexOf(this.name) > -1;
- }
- },
- methods: {
- handleFocus() {
- setTimeout(() => {
- if (!this.isClick) {
- this.focusing = true;
- } else {
- this.isClick = false;
- }
- }, 50);
- },
- handleHeaderClick() {
- if (this.disabled) return;
- this.dispatch('ElCollapse', 'item-click', this);
- this.focusing = false;
- this.isClick = true;
- },
- handleEnterClick() {
- this.dispatch('ElCollapse', 'item-click', this);
- }
- }
- };
- </script>
|