Blame view

node_modules/element-ui/packages/alert/src/main.vue 1.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
  <template>
    <transition name="el-alert-fade">
      <div
        class="el-alert"
        :class="[typeClass, center ? 'is-center' : '']"
        v-show="visible"
        role="alert"
      >
        <i class="el-alert__icon" :class="[ iconClass, isBigIcon ]" v-if="showIcon"></i>
        <div class="el-alert__content">
          <span class="el-alert__title" :class="[ isBoldTitle ]" v-if="title || $slots.title">
            <slot name="title">{{ title }}</slot>
          </span>
          <slot>
            <p class="el-alert__description" v-if="description">{{ description }}</p>
          </slot>
          <i class="el-alert__closebtn" :class="{ 'is-customed': closeText !== '', 'el-icon-close': closeText === '' }" v-show="closable" @click="close()">{{closeText}}</i>
        </div>
      </div>
    </transition>
  </template>
  
  <script type="text/babel">
    const TYPE_CLASSES_MAP = {
      'success': 'el-icon-success',
      'warning': 'el-icon-warning',
      'error': 'el-icon-error'
    };
    export default {
      name: 'ElAlert',
  
      props: {
        title: {
          type: String,
          default: ''
        },
        description: {
          type: String,
          default: ''
        },
        type: {
          type: String,
          default: 'info'
        },
        closable: {
          type: Boolean,
          default: true
        },
        closeText: {
          type: String,
          default: ''
        },
        showIcon: Boolean,
        center: Boolean
      },
  
      data() {
        return {
          visible: true
        };
      },
  
      methods: {
        close() {
          this.visible = false;
          this.$emit('close');
        }
      },
  
      computed: {
        typeClass() {
          return `el-alert--${ this.type }`;
        },
  
        iconClass() {
          return TYPE_CLASSES_MAP[this.type] || 'el-icon-info';
        },
  
        isBigIcon() {
          return this.description || this.$slots.default ? 'is-big' : '';
        },
  
        isBoldTitle() {
          return this.description || this.$slots.default ? 'is-bold' : '';
        }
      }
    };
  </script>