Blame view

node_modules/element-ui/packages/menu/src/menu-item.vue 2.95 KB
2a09d1a4   liuqimichale   添加宜春 天水 宣化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
  <template>
    <li class="el-menu-item"
      role="menuitem"
      tabindex="-1"
      :style="[paddingStyle, itemStyle, { backgroundColor }]"
      :class="{
        'is-active': active,
        'is-disabled': disabled
      }"
      @click="handleClick"
      @mouseenter="onMouseEnter"
      @focus="onMouseEnter"
      @blur="onMouseLeave"
      @mouseleave="onMouseLeave"
    >
      <el-tooltip
        v-if="parentMenu.$options.componentName === 'ElMenu' && rootMenu.collapse && $slots.title"
        effect="dark"
        placement="right">
        <div slot="content"><slot name="title"></slot></div>
        <div style="position: absolute;left: 0;top: 0;height: 100%;width: 100%;display: inline-block;box-sizing: border-box;padding: 0 20px;">
          <slot></slot>
        </div>
      </el-tooltip>
      <template v-else>
        <slot></slot>
        <slot name="title"></slot>
      </template>
    </li>
  </template>
  <script>
    import Menu from './menu-mixin';
    import ElTooltip from 'element-ui/packages/tooltip';
    import Emitter from 'element-ui/src/mixins/emitter';
  
    export default {
      name: 'ElMenuItem',
  
      componentName: 'ElMenuItem',
  
      mixins: [Menu, Emitter],
  
      components: { ElTooltip },
  
      props: {
        index: {
          type: String,
          required: true
        },
        route: [String, Object],
        disabled: Boolean
      },
      computed: {
        active() {
          return this.index === this.rootMenu.activeIndex;
        },
        hoverBackground() {
          return this.rootMenu.hoverBackground;
        },
        backgroundColor() {
          return this.rootMenu.backgroundColor || '';
        },
        activeTextColor() {
          return this.rootMenu.activeTextColor || '';
        },
        textColor() {
          return this.rootMenu.textColor || '';
        },
        mode() {
          return this.rootMenu.mode;
        },
        itemStyle() {
          const style = {
            color: this.active ? this.activeTextColor : this.textColor
          };
          if (this.mode === 'horizontal' && !this.isNested) {
            style.borderBottomColor = this.active
              ? (this.rootMenu.activeTextColor ? this.activeTextColor : '')
              : 'transparent';
          }
          return style;
        },
        isNested() {
          return this.parentMenu !== this.rootMenu;
        }
      },
      methods: {
        onMouseEnter() {
          if (this.mode === 'horizontal' && !this.rootMenu.backgroundColor) return;
          this.$el.style.backgroundColor = this.hoverBackground;
        },
        onMouseLeave() {
          if (this.mode === 'horizontal' && !this.rootMenu.backgroundColor) return;
          this.$el.style.backgroundColor = this.backgroundColor;
        },
        handleClick() {
          if (!this.disabled) {
            this.dispatch('ElMenu', 'item-click', this);
            this.$emit('click', this);
          }
        }
      },
      mounted() {
        this.parentMenu.addItem(this);
        this.rootMenu.addItem(this);
      },
      beforeDestroy() {
        this.parentMenu.removeItem(this);
        this.rootMenu.removeItem(this);
      }
    };
  </script>