tangning 13 часов назад
Родитель
Сommit
3cc91f70db
6 измененных файлов с 67 добавлено и 10 удалено
  1. 3 1
      package.json
  2. 2 1
      src/main.ts
  3. 42 0
      src/utils/iconify.ts
  4. 1 1
      src/views/sys/login/Login.vue
  5. 3 0
      vite.config.ts
  6. 16 7
      yarn.lock

+ 3 - 1
package.json

@@ -39,7 +39,9 @@
   "dependencies": {
     "@ant-design/colors": "^6.0.0",
     "@ant-design/icons-vue": "^6.0.1",
-    "@iconify/iconify": "^2.0.4",
+    "@iconify-json/ant-design": "^1.2.5",
+    "@iconify/iconify": "^3.1.1",
+    "@iconify/vue": "^5.0.0",
     "@vueuse/core": "^6.7.4",
     "@vueuse/shared": "^6.7.4",
     "@zxcvbn-ts/core": "^1.0.0-beta.0",

+ 2 - 1
src/main.ts

@@ -18,13 +18,14 @@ import dayjs from 'dayjs';
 import moment from 'moment';
 import 'moment/locale/zh-cn';
 import 'dayjs/locale/zh-cn';
+// 引入并执行 Iconify 本地初始化
+import './utils/iconify';
 // Importing on demand in local development will increase the number of browser requests by around 20%.
 // This may slow down the browser refresh speed.
 // Therefore, only enable on-demand importing in production environments .
 if (import.meta.env.DEV) {
   import('ant-design-vue/dist/antd.less');
 }
-
 async function bootstrap() {
   const app = createApp(App);
   dayjs.locale('zh-cn');

+ 42 - 0
src/utils/iconify.ts

@@ -0,0 +1,42 @@
+// 仅引入 Iconify 核心,不解构任何导出(核心:避免导出报错)
+import '@iconify/iconify';
+// 导入本地 Ant Design 图标集
+import antDesignIcons from '@iconify-json/ant-design/icons.json';
+
+// 等待 Iconify 全局对象加载完成(必须等 load 事件)
+window.addEventListener('load', () => {
+  // 1. 注册本地 AntD 图标集(全局对象调用)
+  if (window.Iconify) {
+    window.Iconify.addCollection(antDesignIcons);
+
+    // 2. 禁用远程加载(兼容所有 v4 版本的写法)
+    // 方案1:直接修改 API 配置(v4.0.0+ 通用)
+    if (window.Iconify._api) {
+      window.Iconify._api.resources = []; // 关闭 CDN 请求
+      window.Iconify._api.useCache = false;
+    }
+    // 方案2:兼容极早期 v4 版本
+    window.Iconify.setConfig?.('api', {
+      resources: [],
+      useCache: false,
+    });
+
+    // 3. 手动渲染 iconify 元素(通用方案)
+    const renderIconify = () => {
+      const icons = document.querySelectorAll('.iconify');
+      icons.forEach((el) => {
+        // 强制更新属性触发渲染
+        const iconName = el.getAttribute('data-icon');
+        el.setAttribute('data-icon', '');
+        el.setAttribute('data-icon', iconName);
+        // 调用全局 refresh 方法
+        window.Iconify.refresh?.(el);
+      });
+    };
+
+    // DOM 加载完成后渲染
+    document.addEventListener('DOMContentLoaded', renderIconify);
+    // SPA 路由切换后重新渲染(Vue 示例)
+    window.addEventListener('popstate', renderIconify);
+  }
+});

+ 1 - 1
src/views/sys/login/Login.vue

@@ -16,7 +16,7 @@
       </div>
     </div>
     <div class="suoyuan"
-      >公安部鉴定中心 & 四维时代 | 公安部科技强警基础工作计划(2022JC13)</div
+      >公安部鉴定中心 & {{mytitle != '江门公安'?'四维时代':'五邑大学'}} | 公安部科技强警基础工作计划(2022JC13)</div
     >
     <div class="container relative h-full py-2 mx-auto sm:px-10">
       <div class="flex h-full">

+ 3 - 0
vite.config.ts

@@ -73,6 +73,9 @@ export default ({ command, mode }: ConfigEnv): UserConfig => {
       // Turning off brotliSize display can slightly reduce packaging time
       brotliSize: false,
       chunkSizeWarningLimit: 2000,
+      rollupOptions: {
+        external: [], // 确保 @iconify 相关包被打包进项目,不外部依赖
+      },
     },
     define: {
       // setting vue-i18-next

+ 16 - 7
yarn.lock

@@ -1252,6 +1252,13 @@
   resolved "https://registry.npmmirror.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340"
   integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==
 
+"@iconify-json/ant-design@^1.2.5":
+  version "1.2.5"
+  resolved "https://registry.npmmirror.com/@iconify-json/ant-design/-/ant-design-1.2.5.tgz#ae6d59a36eb19e19299eaa3f8377a8f3854c38c2"
+  integrity sha512-SYxhrx1AFq2MBcXk77AERYz2mPhLQes1F0vtvG64+dJZWyge9studXo7MiR8PPeLjRjZdWRrReRbxiwdRMf70Q==
+  dependencies:
+    "@iconify/types" "*"
+
 "@iconify/iconify@2.0.0-rc.6":
   version "2.0.0-rc.6"
   resolved "https://registry.npmmirror.com/@iconify/iconify/-/iconify-2.0.0-rc.6.tgz#e3f5376b63b441dcb3696317784b98e2e678cf46"
@@ -1259,28 +1266,30 @@
   dependencies:
     cross-fetch "^3.0.6"
 
-"@iconify/iconify@>=2.0.0-rc.6":
+"@iconify/iconify@>=2.0.0-rc.6", "@iconify/iconify@^3.1.1":
   version "3.1.1"
   resolved "https://registry.npmmirror.com/@iconify/iconify/-/iconify-3.1.1.tgz#aa0f3807be2eab53e86228f7bb1ad3bd59bcec1a"
   integrity sha512-1nemfyD/OJzh9ALepH7YfuuP8BdEB24Skhd8DXWh0hzcOxImbb1ZizSZkpCzAwSZSGcJFmscIBaBQu+yLyWaxQ==
   dependencies:
     "@iconify/types" "^2.0.0"
 
-"@iconify/iconify@^2.0.4":
-  version "2.2.1"
-  resolved "https://registry.npmmirror.com/@iconify/iconify/-/iconify-2.2.1.tgz#03ad4d8554c6f2d7741d3b9440115efa0c707b37"
-  integrity sha512-WJzw+3iicrF/tbjbxxRinSgy5FHdJoz/egTqwi3xCDkNRJPq482RX1iyaWrjNuY2vMNSPkQMuqHvZDXgA+WnwQ==
-
 "@iconify/json@^1.1.422":
   version "1.1.461"
   resolved "https://registry.npmmirror.com/@iconify/json/-/json-1.1.461.tgz#9e76f2339292e1a89855f93e497439afeb642f11"
   integrity sha512-9Y41Tk9s3LDt4WI20XySNhNX6qTJ/WOBeE3O2iyoV9LJ6gFEDjp0uTPzfRU9NUx7D6VkvQ/htJEuRe9LmyMqUA==
 
-"@iconify/types@^2.0.0":
+"@iconify/types@*", "@iconify/types@^2.0.0":
   version "2.0.0"
   resolved "https://registry.npmmirror.com/@iconify/types/-/types-2.0.0.tgz#ab0e9ea681d6c8a1214f30cd741fe3a20cc57f57"
   integrity sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==
 
+"@iconify/vue@^5.0.0":
+  version "5.0.0"
+  resolved "https://registry.npmmirror.com/@iconify/vue/-/vue-5.0.0.tgz#c47e4b3a225a64bbf28dce924934f23e54b061a4"
+  integrity sha512-C+KuEWIF5nSBrobFJhT//JS87OZ++QDORB6f2q2Wm6fl2mueSTpFBeBsveK0KW9hWiZ4mNiPjsh6Zs4jjdROSg==
+  dependencies:
+    "@iconify/types" "^2.0.0"
+
 "@inquirer/external-editor@^1.0.0":
   version "1.0.3"
   resolved "https://registry.npmmirror.com/@inquirer/external-editor/-/external-editor-1.0.3.tgz#c23988291ee676290fdab3fd306e64010a6d13b8"