From 1b555a0ab0527478cdf2b0c31c0ea8aea70f8adc Mon Sep 17 00:00:00 2001
From: yxh <172933527@qq.com>
Date: 星期四, 15 六月 2023 10:52:39 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into yxh01
---
src/components/SvgIcon/index.vue | 67 +++++++++++++++++++++++++++++++++
1 files changed, 67 insertions(+), 0 deletions(-)
diff --git a/src/components/SvgIcon/index.vue b/src/components/SvgIcon/index.vue
new file mode 100644
index 0000000..97456a4
--- /dev/null
+++ b/src/components/SvgIcon/index.vue
@@ -0,0 +1,67 @@
+<!-- svg灏佽 -->
+<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 :xlink:href="iconName" />
+ </svg>
+</template>
+
+<script>
+import { isExternal } from "@/utils/validate";
+
+export default {
+ name: "SvgIcon",
+ 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>
--
Gitblit v1.9.3