12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- <!--
- * @Author: liuye
- * @LastEditors: fhj
- * @Description:
- -->
- <template>
- <div v-if="isExternal" :style="styleExternalIcon" class="svg-external-icon svg-icon" v-on="$listeners" />
- <svg v-else :class="svgClass" aria-hidden="true" v-on="$listeners">
- <use :href="iconName" />
- </svg>
- </template>
- <script>
- import { isExternal } from '../../utils/validate';
- export default {
- name: 'FIcon',
- props: {
- iconClass: {
- type: String,
- required: true
- },
- className: {
- type: String,
- default: ''
- }
- },
- computed: {
- isExternal() {
- return isExternal(this.iconClass);
- },
- iconName() {
- return `#icon-${this.iconClass}`;
- },
- svgClass() {
- if (this.className) {
- return 'svg-icon ' + this.className;
- } else {
- return 'svg-icon';
- }
- },
- styleExternalIcon() {
- return {
- mask: `url(${this.iconClass}) no-repeat 50% 50%`,
- '-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%`
- };
- }
- }
- };
- </script>
- <style scoped>
- .svg-icon {
- width: 1em;
- height: 1em;
- vertical-align: -0.15em;
- fill: currentColor;
- overflow: hidden;
- }
- .svg-external-icon {
- background-color: currentColor;
- mask-size: cover!important;
- display: inline-block;
- }
- </style>
|