12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- <template>
- <transition name="el-alert-fade">
- <div
- class="el-alert"
- :class="[typeClass, center ? 'is-center' : '', 'is-' + effect]"
- 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>
- <p class="el-alert__description" v-if="$slots.default && !description"><slot></slot></p>
- <p class="el-alert__description" v-if="description && !$slots.default">{{ description }}</p>
- <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,
- effect: {
- type: String,
- default: 'light',
- validator: function(value) {
- return ['light', 'dark'].indexOf(value) !== -1;
- }
- }
- },
- 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>
|