From 36b71fe0d55eba005dafcb171afdd77b7cb32757 Mon Sep 17 00:00:00 2001 From: chenjiale Date: Wed, 24 Dec 2025 10:21:33 +0800 Subject: [PATCH 1/3] =?UTF-8?q?```=20feat(vite):=20=E9=85=8D=E7=BD=AEpurge?= =?UTF-8?q?-icons=E6=8F=92=E4=BB=B6=E6=94=AF=E6=8C=81=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E5=9B=BE=E6=A0=87=E5=92=8C=E5=AE=89=E5=85=A8=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 导入iconify安全列表配置 - 配置purgeIcons插件使用本地图标源 - 添加included配置项以包含安全列表中的图标 fix(icon): 优化图标组件错误处理逻辑 - 简化图标加载失败时的DOM创建逻辑 - 统一错误状态下的图标显示方式 chore(icons): 替换项目中的图标为Ant Design图标 - 将模型列表页面的状态图标从Material Symbols替换为Ant Design图标 - 将日历图标从Solar替换为Ant Design图标 - 将通知页面的按钮图标从Solar替换为Ant Design图标 ``` --- build/vite/plugin/index.ts | 6 +++++- src/assets/iconify/safelist.ts | 3 +++ src/components/Icon/src/Icon.vue | 14 +++++++------- src/views/model/list/ModelCard.vue | 4 ++-- src/views/system/notify/my/index.vue | 4 ++-- 5 files changed, 19 insertions(+), 12 deletions(-) create mode 100644 src/assets/iconify/safelist.ts diff --git a/build/vite/plugin/index.ts b/build/vite/plugin/index.ts index 2da4059..bf75bf1 100644 --- a/build/vite/plugin/index.ts +++ b/build/vite/plugin/index.ts @@ -10,6 +10,7 @@ import { configHtmlPlugin } from './html' import { configCompressPlugin } from './compress' import { configVisualizerConfig } from './visualizer' import { configSvgIconsPlugin } from './svgSprite' +import { iconifySafelist } from '../../src/assets/iconify/safelist' export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) { const { VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv @@ -35,7 +36,10 @@ export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) { vitePlugins.push(configSvgIconsPlugin(isBuild)) // vite-plugin-purge-icons - vitePlugins.push(purgeIcons()) + vitePlugins.push(purgeIcons({ + iconSource: 'local', + included: iconifySafelist, + })) // rollup-plugin-visualizer vitePlugins.push(configVisualizerConfig()) diff --git a/src/assets/iconify/safelist.ts b/src/assets/iconify/safelist.ts new file mode 100644 index 0000000..8956900 --- /dev/null +++ b/src/assets/iconify/safelist.ts @@ -0,0 +1,3 @@ +export const iconifySafelist: string[] = [ + // Add backend menu icon names here to keep them in offline builds. +] diff --git a/src/components/Icon/src/Icon.vue b/src/components/Icon/src/Icon.vue index b650884..6bbd134 100644 --- a/src/components/Icon/src/Icon.vue +++ b/src/components/Icon/src/Icon.vue @@ -47,14 +47,14 @@ async function update() { if (svg) { el.textContent = '' el.appendChild(svg) + return } - else { - const span = document.createElement('span') - span.className = 'iconify-missing' - span.title = icon - el.textContent = '' - el.appendChild(span) - } + + const span = document.createElement('span') + span.className = 'iconify-missing' + span.title = icon + el.textContent = '' + el.appendChild(span) } const getWrapStyle = computed((): CSSProperties => { diff --git a/src/views/model/list/ModelCard.vue b/src/views/model/list/ModelCard.vue index e886eef..29ce180 100644 --- a/src/views/model/list/ModelCard.vue +++ b/src/views/model/list/ModelCard.vue @@ -37,7 +37,7 @@ const modelCardList = ref>([]) const lastQuery = ref(null) const colors = ['#8dc63f', '#dbb09e'] const statusStr = ['未下装', '已下装'] -const statusIcons = ['material-symbols:lock-open', 'material-symbols:lock'] +const statusIcons = ['ant-design:unlock-outlined', 'ant-design:lock-outlined'] function buildQuery(value: any): ModelQueryParams { return { @@ -134,7 +134,7 @@ function goCreateModel() { {{ item.creator || '未知' }} - + {{ item.createTime || '--' }} diff --git a/src/views/system/notify/my/index.vue b/src/views/system/notify/my/index.vue index f6a29d0..aa25de3 100644 --- a/src/views/system/notify/my/index.vue +++ b/src/views/system/notify/my/index.vue @@ -91,10 +91,10 @@ function handleInfo(record: any) { From 45f4a72fe246162f1a9ab24a180baabf8875d436 Mon Sep 17 00:00:00 2001 From: chenjiale Date: Wed, 24 Dec 2025 10:23:50 +0800 Subject: [PATCH 2/3] =?UTF-8?q?```=20fix(build):=20=E4=BF=AE=E5=A4=8Dvite?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E4=B8=ADiconify=20safelist=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 路径从 '../../src/assets/iconify/safelist' 修改为 '../../../src/assets/iconify/safelist' 以确保构建时能够正确导入安全列表配置 ``` --- build/vite/plugin/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/vite/plugin/index.ts b/build/vite/plugin/index.ts index bf75bf1..9b17151 100644 --- a/build/vite/plugin/index.ts +++ b/build/vite/plugin/index.ts @@ -10,7 +10,7 @@ import { configHtmlPlugin } from './html' import { configCompressPlugin } from './compress' import { configVisualizerConfig } from './visualizer' import { configSvgIconsPlugin } from './svgSprite' -import { iconifySafelist } from '../../src/assets/iconify/safelist' +import { iconifySafelist } from '../../../src/assets/iconify/safelist' export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) { const { VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv From 66a1d1fbfe65b2a59ef599cff650da6a31b23dc2 Mon Sep 17 00:00:00 2001 From: chenjiale Date: Wed, 24 Dec 2025 10:55:05 +0800 Subject: [PATCH 3/3] =?UTF-8?q?```=20feat(iconify):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=9B=BE=E6=A0=87=E5=AE=89=E5=85=A8=E5=88=97=E8=A1=A8=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加了 Ant Design、Element Plus 和 Font Awesome 图标的安全列表, 用于离线构建时保留必要的图标资源。 ``` --- src/assets/iconify/safelist.ts | 40 +++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/src/assets/iconify/safelist.ts b/src/assets/iconify/safelist.ts index 8956900..e424410 100644 --- a/src/assets/iconify/safelist.ts +++ b/src/assets/iconify/safelist.ts @@ -1,3 +1,41 @@ export const iconifySafelist: string[] = [ - // Add backend menu icon names here to keep them in offline builds. + 'ant-design:account-book-twotone', + 'ant-design:aliyun-outlined', + 'ant-design:android-filled', + 'ant-design:appstore-filled', + 'ant-design:appstore-outlined', + 'ant-design:bar-chart-outlined', + 'ant-design:bell-outlined', + 'ant-design:bug-filled', + 'ant-design:carry-out-filled', + 'ant-design:carry-out-outlined', + 'ant-design:carry-out-twotone', + 'ant-design:control-filled', + 'ant-design:experiment-outlined', + 'ant-design:field-binary-outlined', + 'ant-design:file-pdf-twotone', + 'ant-design:fund-outlined', + 'ant-design:home-filled', + 'ant-design:info-circle-filled', + 'ant-design:insert-row-left-outlined', + 'ant-design:layout-filled', + 'ant-design:radius-bottomleft-outlined', + 'ant-design:verified-outlined', + 'ant-design:windows-outlined', + 'ant-design:yuque-filled', + 'ep:avatar', + 'ep:chat-dot-round', + 'ep:collection', + 'ep:connection', + 'ep:document-copy', + 'ep:menu', + 'ep:message', + 'ep:position', + 'ep:promotion', + 'ep:takeaway-box', + 'ep:tools', + 'ep:user', + 'fa:address-card', + 'fa:edit', + 'fa:stack-exchange', ]