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(() => {