You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
917 B
50 lines
917 B
<template>
|
|
<i :title="title" :class="classes"
|
|
@click="handleClick">
|
|
</i>
|
|
</template>
|
|
<script>
|
|
export default {
|
|
name: 'Icon',
|
|
props: {
|
|
prefixCls: {
|
|
default: 'anticon',
|
|
type: String,
|
|
},
|
|
type: String,
|
|
title: String,
|
|
spin: Boolean,
|
|
},
|
|
data () {
|
|
return {
|
|
}
|
|
},
|
|
computed: {
|
|
classes () {
|
|
const { prefixCls, type, spin } = this
|
|
return {
|
|
[`${prefixCls}`]: true,
|
|
[`${prefixCls}-${type}`]: type,
|
|
[`${prefixCls}-spin`]: !!spin || type === 'loading',
|
|
}
|
|
},
|
|
},
|
|
methods: {
|
|
handleClick (event) {
|
|
if (this.clicked) {
|
|
return
|
|
}
|
|
this.clicked = true
|
|
clearTimeout(this.timeout)
|
|
this.timeout = setTimeout(() => (this.clicked = false), 500)
|
|
this.$emit('click', event)
|
|
},
|
|
},
|
|
beforeDestroy () {
|
|
if (this.timeout) {
|
|
clearTimeout(this.timeout)
|
|
}
|
|
},
|
|
}
|
|
</script>
|