aigc-h5/src/components/SvgIcon/index.vue

58 lines
1018 B
Vue

<template>
<svg
:class="[prefixCls, $attrs.class, spin && 'svg-icon-spin']"
aria-hidden="true"
>
<use :xlink:href="symbolId" />
</svg>
</template>
<script>
import { defineComponent, computed } from 'vue'
export default defineComponent({
name: 'SvgIcon',
props: {
prefix: {
type: String,
default: 'icon',
},
name: {
type: String,
required: true,
},
spin: {
type: Boolean,
default: false,
},
},
setup(props) {
const symbolId = computed(() => `#${props.prefix}-${props.name}`)
const prefixCls = computed(() => `svg-icon`)
return { symbolId, prefixCls }
},
})
</script>
<style lang="scss" scoped>
.svg-icon {
width: 1em;
height: 1em;
display: inline-block;
overflow: hidden;
fill: currentcolor;
vertical-align: -0.15em;
}
.svg-icon-spin {
animation: loadingCircle 1s infinite linear;
}
@keyframes loadingCircle {
0% {
transform: rotate(0);
}
100% {
transform: rotate(360deg);
}
}
</style>