2016-09-12 11:59:15 +08:00
|
|
|
<template>
|
|
|
|
<div v-if="!closed" :class="wrapClasses" transition="fade">
|
2016-09-12 14:36:53 +08:00
|
|
|
<span :class="iconClasses" v-if="showIcon">
|
|
|
|
<slot name="icon">
|
2016-09-12 11:59:15 +08:00
|
|
|
<Icon :type="iconType"></Icon>
|
2016-09-12 14:36:53 +08:00
|
|
|
</slot>
|
|
|
|
</span>
|
2016-09-12 11:59:15 +08:00
|
|
|
<span :class="messageClasses"><slot></slot></span>
|
|
|
|
<span :class="descClasses" v-el:desc><slot name="desc"></slot></span>
|
|
|
|
<a :class="closeClasses" v-if="closable" @click="close">
|
|
|
|
<slot name="close">
|
|
|
|
<Icon type="ios-close-empty"></Icon>
|
|
|
|
</slot>
|
|
|
|
</a>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
<script>
|
|
|
|
import Icon from '../icon';
|
|
|
|
import { oneOf } from '../../utils/assist';
|
|
|
|
|
|
|
|
const prefixCls = 'ivu-alert';
|
|
|
|
|
|
|
|
export default {
|
|
|
|
components: { Icon },
|
|
|
|
props: {
|
|
|
|
type: {
|
|
|
|
validator (value) {
|
|
|
|
return oneOf(value, ['success', 'info', 'warning', 'error']);
|
|
|
|
},
|
|
|
|
default: 'info'
|
|
|
|
},
|
|
|
|
closable: {
|
|
|
|
type: Boolean,
|
|
|
|
default: false
|
|
|
|
},
|
|
|
|
showIcon: {
|
|
|
|
type: Boolean,
|
|
|
|
default: false
|
2016-09-12 14:36:53 +08:00
|
|
|
}
|
2016-09-12 11:59:15 +08:00
|
|
|
},
|
|
|
|
data () {
|
|
|
|
return {
|
|
|
|
closed: false,
|
|
|
|
desc: false
|
|
|
|
}
|
|
|
|
},
|
|
|
|
computed: {
|
|
|
|
wrapClasses () {
|
|
|
|
return [
|
|
|
|
`${prefixCls}`,
|
|
|
|
`${prefixCls}-${this.type}`,
|
|
|
|
{
|
|
|
|
[`${prefixCls}-with-icon`]: this.showIcon,
|
|
|
|
[`${prefixCls}-with-desc`]: this.desc
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
messageClasses () {
|
|
|
|
return `${prefixCls}-message`;
|
|
|
|
},
|
|
|
|
descClasses () {
|
|
|
|
return `${prefixCls}-desc`;
|
|
|
|
},
|
|
|
|
closeClasses () {
|
|
|
|
return `${prefixCls}-close`;
|
|
|
|
},
|
|
|
|
iconClasses () {
|
|
|
|
return `${prefixCls}-icon`;
|
|
|
|
},
|
|
|
|
iconType () {
|
|
|
|
let type = '';
|
|
|
|
|
|
|
|
switch (this.type) {
|
|
|
|
case 'success':
|
|
|
|
type = 'checkmark-circled';
|
|
|
|
break;
|
|
|
|
case 'info':
|
|
|
|
type = 'information-circled';
|
|
|
|
break;
|
|
|
|
case 'warning':
|
|
|
|
type = 'android-alert';
|
|
|
|
break;
|
|
|
|
case 'error':
|
|
|
|
type = 'close-circled';
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return type;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
close (e) {
|
|
|
|
this.closed = true;
|
|
|
|
this.$emit('on-close', e);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
compiled () {
|
|
|
|
this.desc = this.$els.desc.innerHTML != '';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</script>
|