From d2ceb6e35e70d398be044158e43d8c4236094544 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=98=89=E4=BC=9F?= <8473136@qq.com> Date: Fri, 16 Aug 2024 16:23:20 +0800 Subject: [PATCH] =?UTF-8?q?:zap:=20=E5=9B=BE=E6=A0=87=E7=A6=BB=E7=BA=BF?= =?UTF-8?q?=E3=80=81=E4=BC=98=E5=8C=96=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + src/components/IconifyIcon/index.ts | 9 +++ .../IconifyIcon/src/iconifyIconOffline.ts | 30 ++++++++++ .../IconifyIcon/src/iconifyIconOnline.ts | 30 ++++++++++ src/components/IconifyIcon/src/offlineIcon.ts | 54 +++++++++++++++++ src/layout/compoenets/Breadcrumb.vue | 10 ++-- src/layout/compoenets/LeftMenu.vue | 4 +- src/layout/index.vue | 1 + src/main.ts | 24 +++++--- src/router/index.ts | 12 ++-- src/views/about/index.vue | 11 +--- src/views/config/index.vue | 58 ++++++++----------- src/views/download/index.vue | 16 +---- src/views/home/index.vue | 15 +++-- src/views/proxy/index.vue | 40 ++++++------- 15 files changed, 212 insertions(+), 103 deletions(-) create mode 100644 src/components/IconifyIcon/index.ts create mode 100644 src/components/IconifyIcon/src/iconifyIconOffline.ts create mode 100644 src/components/IconifyIcon/src/iconifyIconOnline.ts create mode 100644 src/components/IconifyIcon/src/offlineIcon.ts diff --git a/package.json b/package.json index e4e0416..75e4212 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "electron:generate-icons": "electron-icon-builder --input=./public/logo.png --output=build --flatten" }, "devDependencies": { + "@iconify-icons/material-symbols": "^1.2.58", "@iconify/vue": "^4.1.1", "@types/nedb": "^1.8.16", "@vitejs/plugin-vue": "^4.3.3", diff --git a/src/components/IconifyIcon/index.ts b/src/components/IconifyIcon/index.ts new file mode 100644 index 0000000..1dfa8df --- /dev/null +++ b/src/components/IconifyIcon/index.ts @@ -0,0 +1,9 @@ +import iconifyIconOffline from "./src/iconifyIconOffline"; +import iconifyIconOnline from "./src/iconifyIconOnline"; + +/** 本地图标组件 */ +const IconifyIconOffline = iconifyIconOffline; +/** 在线图标组件 */ +const IconifyIconOnline = iconifyIconOnline; + +export {IconifyIconOffline, IconifyIconOnline}; diff --git a/src/components/IconifyIcon/src/iconifyIconOffline.ts b/src/components/IconifyIcon/src/iconifyIconOffline.ts new file mode 100644 index 0000000..06a2a7c --- /dev/null +++ b/src/components/IconifyIcon/src/iconifyIconOffline.ts @@ -0,0 +1,30 @@ +import { h, defineComponent } from "vue"; +import { Icon as IconifyIcon, addIcon } from "@iconify/vue/dist/offline"; + +// Iconify Icon在Vue里本地使用(用于内网环境)https://docs.iconify.design/icon-components/vue/offline.html +export default defineComponent({ + name: "IconifyIconOffline", + components: { IconifyIcon }, + props: { + icon: { + default: null + } + }, + render() { + if (typeof this.icon === "object") addIcon(this.icon, this.icon); + const attrs = this.$attrs; + return h( + IconifyIcon, + { + icon: this.icon, + style: attrs?.style + ? Object.assign(attrs.style, { outline: "none" }) + : { outline: "none" }, + ...attrs + }, + { + default: () => [] + } + ); + } +}); diff --git a/src/components/IconifyIcon/src/iconifyIconOnline.ts b/src/components/IconifyIcon/src/iconifyIconOnline.ts new file mode 100644 index 0000000..a5f5822 --- /dev/null +++ b/src/components/IconifyIcon/src/iconifyIconOnline.ts @@ -0,0 +1,30 @@ +import { h, defineComponent } from "vue"; +import { Icon as IconifyIcon } from "@iconify/vue"; + +// Iconify Icon在Vue里在线使用(用于外网环境) +export default defineComponent({ + name: "IconifyIconOnline", + components: { IconifyIcon }, + props: { + icon: { + type: String, + default: "" + } + }, + render() { + const attrs = this.$attrs; + return h( + IconifyIcon, + { + icon: `${this.icon}`, + style: attrs?.style + ? Object.assign(attrs.style, { outline: "none" }) + : { outline: "none" }, + ...attrs + }, + { + default: () => [] + } + ); + } +}); diff --git a/src/components/IconifyIcon/src/offlineIcon.ts b/src/components/IconifyIcon/src/offlineIcon.ts new file mode 100644 index 0000000..fda725e --- /dev/null +++ b/src/components/IconifyIcon/src/offlineIcon.ts @@ -0,0 +1,54 @@ +import {addIcon} from "@iconify/vue/dist/offline"; + +/** + * 这里存放本地图标,在 src/layout/index.vue 文件中加载,避免在首启动加载 + */ + +// 本地菜单图标,后端在路由的icon中返回对应的图标字符串并且前端在此处使用addIcon添加即可渲染菜单图标 +import Cloud from "@iconify-icons/material-symbols/cloud"; +import RocketLaunchRounded from "@iconify-icons/material-symbols/rocket-launch-rounded"; +import Download from "@iconify-icons/material-symbols/download-2"; +import Settings from "@iconify-icons/material-symbols/settings"; +import FileCopySharp from "@iconify-icons/material-symbols/file-copy-sharp"; +import InfoSharp from "@iconify-icons/material-symbols/info-sharp"; +import refreshRounded from "@iconify-icons/material-symbols/refresh-rounded"; + +import MoreVert from "@iconify-icons/material-symbols/more-vert"; +import Add from "@iconify-icons/material-symbols/add"; +import BringYourOwnIpRounded from "@iconify-icons/material-symbols/bring-your-own-ip-rounded"; +import DeleteRounded from "@iconify-icons/material-symbols/delete-rounded"; +import RefreshRounded from "@iconify-icons/material-symbols/refresh-rounded"; +import CancelPresentation from "@iconify-icons/material-symbols/cancel-presentation"; +import GestureSelect from "@iconify-icons/material-symbols/gesture-select"; +import SaveRounded from "@iconify-icons/material-symbols/save-rounded"; +import Info from "@iconify-icons/material-symbols/info"; +import QuestionMark from "@iconify-icons/material-symbols/question-mark"; +import CheckCircleRounded from "@iconify-icons/material-symbols/check-circle-rounded"; +import Error from "@iconify-icons/material-symbols/error"; +import ContentCopy from "@iconify-icons/material-symbols/content-copy"; +import ContentPasteGo from "@iconify-icons/material-symbols/content-paste-go"; +import Edit from "@iconify-icons/material-symbols/edit"; + +addIcon("cloud", Cloud); +addIcon("rocket-launch-rounded", RocketLaunchRounded); +addIcon("download", Download); +addIcon("settings", Settings); +addIcon("file-copy-sharp", FileCopySharp); +addIcon("info-sharp", InfoSharp); +addIcon("refresh-rounded", refreshRounded); +addIcon("more-vert", MoreVert); +addIcon("add", Add); +addIcon("bring-your-own-ip-rounded", BringYourOwnIpRounded); +addIcon("delete-rounded", DeleteRounded); +addIcon("cancel-presentation", CancelPresentation); +addIcon("gesture-select", GestureSelect); +addIcon("save-rounded", SaveRounded); +addIcon("refresh-rounded", RefreshRounded); +addIcon("info", Info); +addIcon("question-mark", QuestionMark); +addIcon("check-circle-rounded", CheckCircleRounded); +addIcon("error", Error); +addIcon("content-copy", ContentCopy); +addIcon("content-paste-go", ContentPasteGo); +addIcon("edit", Edit); + diff --git a/src/layout/compoenets/Breadcrumb.vue b/src/layout/compoenets/Breadcrumb.vue index 48091e8..8497f00 100644 --- a/src/layout/compoenets/Breadcrumb.vue +++ b/src/layout/compoenets/Breadcrumb.vue @@ -3,6 +3,7 @@ import { Icon } from "@iconify/vue"; import { computed, defineComponent } from "vue"; import router from "@/router"; + defineComponent({ name: "Breadcrumb" }); @@ -15,10 +16,11 @@ const currentRoute = computed(() => {