v3.9.2 前端按需加载核心修改

This commit is contained in:
JEECG 2026-04-28 15:39:31 +08:00
parent c32e59cf64
commit a092f4fc69
14 changed files with 813 additions and 379 deletions

View File

@ -2,8 +2,11 @@ import { PluginOption } from 'vite';
import vue from '@vitejs/plugin-vue'; import vue from '@vitejs/plugin-vue';
import vueJsx from '@vitejs/plugin-vue-jsx'; import vueJsx from '@vitejs/plugin-vue-jsx';
import purgeIcons from 'vite-plugin-purge-icons'; import purgeIcons from 'vite-plugin-purge-icons';
// unplugin-icons ESM-only import CJS require
import UnoCSS from 'unocss/vite'; import UnoCSS from 'unocss/vite';
import { presetTypography, presetUno } from 'unocss'; import { presetTypography, presetUno } from 'unocss';
import Components from 'unplugin-vue-components/vite';
import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers';
// https // https
import VitePluginCertificate from 'vite-plugin-mkcert'; import VitePluginCertificate from 'vite-plugin-mkcert';
@ -29,9 +32,23 @@ import { configPwaPlugin } from './pwa';
* @param isBuild * @param isBuild
* @param isQiankunMicro 是否JEECG作为乾坤子应用 * @param isQiankunMicro 是否JEECG作为乾坤子应用
*/ */
export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean, isQiankunMicro: boolean) { export async function createVitePlugins(
viteEnv: ViteEnv,
isBuild: boolean,
isQiankunMicro: boolean,
) {
const { VITE_USE_MOCK, VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv; const { VITE_USE_MOCK, VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv;
// update-begin--author:liaozhiyang---date:20260306---for:QQYUN-14833unplugin-icons 使esm
// import ESM-only CJS require ERR_REQUIRE_ESM node 20
const [
{ default: Icons },
{ default: IconsResolver },
] = await Promise.all([
import('unplugin-icons/vite'),
import('unplugin-icons/resolver'),
]);
// update-end--author:liaozhiyang---date:20260306---for:QQYUN-14833unplugin-icons 使esm
const vitePlugins: (PluginOption | PluginOption[])[] = [ const vitePlugins: (PluginOption | PluginOption[])[] = [
// have to // have to
vue(), vue(),
@ -46,6 +63,26 @@ export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean, isQiankunM
]; ];
vitePlugins.push(UnoCSS({ presets: [presetUno(), presetTypography()] })); vitePlugins.push(UnoCSS({ presets: [presetUno(), presetTypography()] }));
// update-begin--author:liaozhiyang---date:20260302---for:QQYUN-14806antdunplugin-vue-components
// unplugin-vue-components: ant-design-vue
vitePlugins.push(
Components({
resolvers: [
AntDesignVueResolver({
importStyle: false,
// antdButtona-buttonBasicButton
// AButtonButton
exclude: ['AButton', 'Button'],
}),
IconsResolver({
prefix: 'iconify',
}),
],
dirs: [],
dts: false,
})
);
// update-end--author:liaozhiyang---date:20260302---for:QQYUN-14806antdunplugin-vue-components
// vite-plugin-html // vite-plugin-html
vitePlugins.push(configHtmlPlugin(viteEnv, isBuild, isQiankunMicro)); vitePlugins.push(configHtmlPlugin(viteEnv, isBuild, isQiankunMicro));
@ -56,8 +93,21 @@ export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean, isQiankunM
// vite-plugin-mock // vite-plugin-mock
VITE_USE_MOCK && vitePlugins.push(configMockPlugin(isBuild)); VITE_USE_MOCK && vitePlugins.push(configMockPlugin(isBuild));
// vite-plugin-purge-icons // update-begin--author:liaozhiyang---date:20260304---for:QQYUN-14802unplugin-iconsicononlinelocal
if (viteEnv.VITE_GLOB_ICONIFY_USE_TYPE === 'local') {
vitePlugins.push(purgeIcons());
}
vitePlugins.push(
Icons({
compiler: 'vue3',
//
autoInstall: false,
scale: 1,
defaultClass: 'app-iconify anticon',
})
);
vitePlugins.push(purgeIcons()); vitePlugins.push(purgeIcons());
// update-end--author:liaozhiyang---date:20260304---for:QQYUN-14802unplugin-iconsicononlinelocal
// rollup-plugin-visualizer // rollup-plugin-visualizer
vitePlugins.push(configVisualizerConfig()); vitePlugins.push(configVisualizerConfig());

View File

@ -23,11 +23,10 @@
"husky:install": "husky install" "husky:install": "husky install"
}, },
"dependencies": { "dependencies": {
"@jeecg/online": "3.9.1-RC", "@jeecg/aiflow":"3.9.2-beta",
"@jeecg/aiflow":"3.9.1-beta", "@logicflow/core": "^2.1.2",
"@logicflow/core": "^2.0.10", "@logicflow/extension": "^2.1.4",
"@logicflow/extension": "^2.0.14", "@logicflow/vue-node-registry": "^1.1.3",
"@logicflow/vue-node-registry": "^1.0.12",
"@iconify/iconify": "^3.1.1", "@iconify/iconify": "^3.1.1",
"@ant-design/colors": "^7.2.1", "@ant-design/colors": "^7.2.1",
"@ant-design/icons-vue": "^7.0.1", "@ant-design/icons-vue": "^7.0.1",
@ -37,7 +36,6 @@
"@zxcvbn-ts/core": "^3.0.4", "@zxcvbn-ts/core": "^3.0.4",
"ant-design-vue": "^4.2.6", "ant-design-vue": "^4.2.6",
"axios": "^1.12.2", "axios": "^1.12.2",
"china-area-data": "^5.0.1",
"@vant/area-data": "^1.5.2", "@vant/area-data": "^1.5.2",
"clipboard": "^2.0.11", "clipboard": "^2.0.11",
"codemirror": "^5.65.20", "codemirror": "^5.65.20",
@ -85,13 +83,18 @@
"vxe-pc-ui": "4.6.12", "vxe-pc-ui": "4.6.12",
"vxe-table-plugin-antd": "4.0.8", "vxe-table-plugin-antd": "4.0.8",
"xe-utils": "3.5.26", "xe-utils": "3.5.26",
"xss": "^1.0.15" "xss": "^1.0.15",
"vue-grid-layout-v3": "^3.1.2",
"lunar-javascript": "^1.7.5",
"perfect-scrollbar": "^1.5.6",
"vue-color": "^3.3.3"
}, },
"devDependencies": { "devDependencies": {
"@commitlint/cli": "^18.6.1", "@commitlint/cli": "^18.6.1",
"@commitlint/config-conventional": "^18.6.3", "@commitlint/config-conventional": "^18.6.3",
"@iconify/json": "^2.2.394", "@iconify/json": "^2.2.394",
"@purge-icons/generated": "^0.10.0", "@purge-icons/generated": "^0.10.0",
"unplugin-icons": "^0.22.0",
"@types/codemirror": "^5.60.16", "@types/codemirror": "^5.60.16",
"@types/crypto-js": "^4.2.2", "@types/crypto-js": "^4.2.2",
"@types/fs-extra": "^11.0.4", "@types/fs-extra": "^11.0.4",
@ -154,6 +157,7 @@
"ts-jest": "^29.4.4", "ts-jest": "^29.4.4",
"ts-node": "^10.9.2", "ts-node": "^10.9.2",
"typescript": "^5.9.3", "typescript": "^5.9.3",
"unplugin-vue-components": "~0.24.1",
"vite": "^6.3.6", "vite": "^6.3.6",
"vite-plugin-compression": "^0.5.1", "vite-plugin-compression": "^0.5.1",
"vite-plugin-html": "^3.2.2", "vite-plugin-html": "^3.2.2",

View File

@ -20,17 +20,14 @@ importers:
'@jeecg/aiflow': '@jeecg/aiflow':
specifier: 3.9.1-beta specifier: 3.9.1-beta
version: 3.9.1-beta version: 3.9.1-beta
'@jeecg/online':
specifier: 3.9.1-beta
version: 3.9.1-beta
'@logicflow/core': '@logicflow/core':
specifier: ^2.0.10 specifier: ^2.1.2
version: 2.1.9 version: 2.1.9
'@logicflow/extension': '@logicflow/extension':
specifier: ^2.0.14 specifier: ^2.1.4
version: 2.1.11(@logicflow/core@2.1.9)(@logicflow/vue-node-registry@1.1.10(@logicflow/core@2.1.9)(vue@3.5.27(typescript@5.9.3))) version: 2.1.11(@logicflow/core@2.1.9)(@logicflow/vue-node-registry@1.1.10(@logicflow/core@2.1.9)(vue@3.5.27(typescript@5.9.3)))
'@logicflow/vue-node-registry': '@logicflow/vue-node-registry':
specifier: ^1.0.12 specifier: ^1.1.3
version: 1.1.10(@logicflow/core@2.1.9)(vue@3.5.27(typescript@5.9.3)) version: 1.1.10(@logicflow/core@2.1.9)(vue@3.5.27(typescript@5.9.3))
'@tinymce/tinymce-vue': '@tinymce/tinymce-vue':
specifier: 4.0.7 specifier: 4.0.7
@ -56,9 +53,6 @@ importers:
axios: axios:
specifier: ^1.12.2 specifier: ^1.12.2
version: 1.13.2(debug@4.4.3) version: 1.13.2(debug@4.4.3)
china-area-data:
specifier: ^5.0.1
version: 5.0.1
clipboard: clipboard:
specifier: ^2.0.11 specifier: ^2.0.11
version: 2.0.11 version: 2.0.11
@ -104,6 +98,9 @@ importers:
lodash.get: lodash.get:
specifier: ^4.4.2 specifier: ^4.4.2
version: 4.4.2 version: 4.4.2
lunar-javascript:
specifier: ^1.7.5
version: 1.7.7
markdown-it: markdown-it:
specifier: ^14.1.0 specifier: ^14.1.0
version: 14.1.0 version: 14.1.0
@ -122,6 +119,9 @@ importers:
path-to-regexp: path-to-regexp:
specifier: ^6.3.0 specifier: ^6.3.0
version: 6.3.0 version: 6.3.0
perfect-scrollbar:
specifier: ^1.5.6
version: 1.5.6
pinia: pinia:
specifier: 2.1.7 specifier: 2.1.7
version: 2.1.7(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3)) version: 2.1.7(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3))
@ -158,12 +158,18 @@ importers:
vue: vue:
specifier: ^3.5.22 specifier: ^3.5.22
version: 3.5.27(typescript@5.9.3) version: 3.5.27(typescript@5.9.3)
vue-color:
specifier: ^3.3.3
version: 3.3.3(vue@3.5.27(typescript@5.9.3))
vue-cropper: vue-cropper:
specifier: ^0.6.5 specifier: ^0.6.5
version: 0.6.5 version: 0.6.5
vue-cropperjs: vue-cropperjs:
specifier: ^5.0.0 specifier: ^5.0.0
version: 5.0.0(vue@3.5.27(typescript@5.9.3)) version: 5.0.0(vue@3.5.27(typescript@5.9.3))
vue-grid-layout-v3:
specifier: ^3.1.2
version: 3.1.2(@interactjs/core@1.10.27(@interactjs/utils@1.10.27))(@interactjs/utils@1.10.27)(typescript@5.9.3)
vue-i18n: vue-i18n:
specifier: ^9.14.5 specifier: ^9.14.5
version: 9.14.5(vue@3.5.27(typescript@5.9.3)) version: 9.14.5(vue@3.5.27(typescript@5.9.3))
@ -408,6 +414,12 @@ importers:
unocss: unocss:
specifier: ^0.58.9 specifier: ^0.58.9
version: 0.58.9(postcss@8.5.6)(rollup@4.52.5)(vite@6.4.1(@types/node@20.19.30)(jiti@2.6.1)(less@4.5.1)(terser@5.46.0)(tsx@4.21.0)) version: 0.58.9(postcss@8.5.6)(rollup@4.52.5)(vite@6.4.1(@types/node@20.19.30)(jiti@2.6.1)(less@4.5.1)(terser@5.46.0)(tsx@4.21.0))
unplugin-icons:
specifier: ^0.22.0
version: 0.22.0(@vue/compiler-sfc@3.5.27)(vue-template-compiler@2.7.16)
unplugin-vue-components:
specifier: ~0.24.1
version: 0.24.1(@babel/parser@7.28.6)(rollup@4.52.5)(vue@3.5.27(typescript@5.9.3))
vite: vite:
specifier: ^6.3.6 specifier: ^6.3.6
version: 6.4.1(@types/node@20.19.30)(jiti@2.6.1)(less@4.5.1)(terser@5.46.0)(tsx@4.21.0) version: 6.4.1(@types/node@20.19.30)(jiti@2.6.1)(less@4.5.1)(terser@5.46.0)(tsx@4.21.0)
@ -478,6 +490,9 @@ packages:
peerDependencies: peerDependencies:
vue: '>=3.0.3' vue: '>=3.0.3'
'@antfu/install-pkg@0.5.0':
resolution: {integrity: sha512-dKnk2xlAyC7rvTkpkHmu+Qy/2Zc3Vm/l8PtNyIOGDBtXPY3kThfU4ORNEp3V7SXw5XSOb+tOJaUYpfquPzL/Tg==}
'@antfu/install-pkg@1.1.0': '@antfu/install-pkg@1.1.0':
resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
@ -1613,6 +1628,51 @@ packages:
resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==}
engines: {node: '>=18'} engines: {node: '>=18'}
'@interactjs/actions@1.10.27':
resolution: {integrity: sha512-FCRg5KwB+stkPcAMx/Cn0fgGP6p4LyMX9S/Upcn/W+hpYme31bPi54PCqmOebzz6myTthN6zFf9jMyLOqtI/gg==}
peerDependencies:
'@interactjs/core': 1.10.27
'@interactjs/utils': 1.10.27
'@interactjs/auto-scroll@1.10.27':
resolution: {integrity: sha512-zPg5TnVsZv+9Hnt4qnbxLvBMf+rIWHkoJVoSETEbLNaj90C8hIyr0pVwukSUySSgDhCgQ7np0f3pg4INLq9beQ==}
peerDependencies:
'@interactjs/utils': 1.10.27
'@interactjs/auto-start@1.10.27':
resolution: {integrity: sha512-ECLBO/nxmaF1knncJKIE5F7la3KKRgEkn0Cu2JTPOYj9xy/LpfYElo3wkRHsodgOqF651nR70GK2/IzPR2lO9A==}
peerDependencies:
'@interactjs/core': 1.10.27
'@interactjs/utils': 1.10.27
'@interactjs/core@1.10.27':
resolution: {integrity: sha512-SliUr/3ZbLAdED8LokzYzWHWMdCB5Cq+UnpXuRy+BIod1j97m4IUFf/D1iIKUBBjBcucgXbz28z96WnenVCB7Q==}
peerDependencies:
'@interactjs/utils': 1.10.27
'@interactjs/dev-tools@1.10.27':
resolution: {integrity: sha512-YolmBwRaKH1gWbvyLeV3m5QSwtD38lOZnCBA87PCAlcd9PQAC2gb03fEPeEyD336bE20oLB8f0WZt4Wre+afiw==}
peerDependencies:
'@interactjs/modifiers': 1.10.27
'@interactjs/utils': 1.10.27
'@interactjs/interact@1.10.27':
resolution: {integrity: sha512-XdH3A2UUzjEFGGJgFuJlhiz99tE8jB8xNh/DmnoMuL6uOQPxNA+sWRnzEVjG0+zY2P3/dbhEpi4Cn3FLPzydwA==}
'@interactjs/modifiers@1.10.27':
resolution: {integrity: sha512-ei/qfoQ+9/8k6WzNzdNqHI6cWkIV576N4Ap16r5CoqOWwhA6Xzj3OMHf1g0t1O4eSq2HdJsVJn3eLNfw9HsbeQ==}
peerDependencies:
'@interactjs/core': 1.10.27
'@interactjs/utils': 1.10.27
'@interactjs/snappers@1.10.27':
resolution: {integrity: sha512-HZLZ0XSi6HI08OmTv/HKG6AltQoaKAALLQ+KDW92utj3XSgw7oren0KsWUKPhaPg3Av7R1jFQd08s+uafqIlLw==}
peerDependencies:
'@interactjs/utils': 1.10.27
'@interactjs/utils@1.10.27':
resolution: {integrity: sha512-+qfLOio2OxQqg1cXSnRaCl+N8MQDQLDS9w+aOGxH8YLAhIMyt7Asxx/46//sT8orgsi16pmlBPtngPHT9s8zKw==}
'@intlify/core-base@9.14.5': '@intlify/core-base@9.14.5':
resolution: {integrity: sha512-5ah5FqZG4pOoHjkvs8mjtv+gPKYU0zCISaYNjBNNqYiaITxW8ZtVih3GS/oTOqN8d9/mDLyrjD46GBApNxmlsA==} resolution: {integrity: sha512-5ah5FqZG4pOoHjkvs8mjtv+gPKYU0zCISaYNjBNNqYiaITxW8ZtVih3GS/oTOqN8d9/mDLyrjD46GBApNxmlsA==}
engines: {node: '>= 16'} engines: {node: '>= 16'}
@ -1648,9 +1708,6 @@ packages:
'@jeecg/aiflow@3.9.1-beta': '@jeecg/aiflow@3.9.1-beta':
resolution: {integrity: sha512-RwYobjK95Kb23rXIPOuL7+MgSTry8QxHs6l88vJRliZSY55aACHqy6YyyDybugSEsbGuckFAfaSOGlb6kN1/iQ==} resolution: {integrity: sha512-RwYobjK95Kb23rXIPOuL7+MgSTry8QxHs6l88vJRliZSY55aACHqy6YyyDybugSEsbGuckFAfaSOGlb6kN1/iQ==}
'@jeecg/online@3.9.1-beta':
resolution: {integrity: sha512-PecK5QCazXpmCjdG0Y2Oa2+10M3hxCvfxy7gP1WDNDqDguN2Zl30rEN1ziOaqiv7on5/wp1XyLYOFid9n3egLA==}
'@jest/console@29.7.0': '@jest/console@29.7.0':
resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@ -1886,56 +1943,67 @@ packages:
resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-arm-musleabihf@4.52.5': '@rollup/rollup-linux-arm-musleabihf@4.52.5':
resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
libc: [musl]
'@rollup/rollup-linux-arm64-gnu@4.52.5': '@rollup/rollup-linux-arm64-gnu@4.52.5':
resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-arm64-musl@4.52.5': '@rollup/rollup-linux-arm64-musl@4.52.5':
resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [musl]
'@rollup/rollup-linux-loong64-gnu@4.52.5': '@rollup/rollup-linux-loong64-gnu@4.52.5':
resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==}
cpu: [loong64] cpu: [loong64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-ppc64-gnu@4.52.5': '@rollup/rollup-linux-ppc64-gnu@4.52.5':
resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-riscv64-gnu@4.52.5': '@rollup/rollup-linux-riscv64-gnu@4.52.5':
resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-riscv64-musl@4.52.5': '@rollup/rollup-linux-riscv64-musl@4.52.5':
resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
libc: [musl]
'@rollup/rollup-linux-s390x-gnu@4.52.5': '@rollup/rollup-linux-s390x-gnu@4.52.5':
resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-x64-gnu@4.52.5': '@rollup/rollup-linux-x64-gnu@4.52.5':
resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [glibc]
'@rollup/rollup-linux-x64-musl@4.52.5': '@rollup/rollup-linux-x64-musl@4.52.5':
resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [musl]
'@rollup/rollup-openharmony-arm64@4.52.5': '@rollup/rollup-openharmony-arm64@4.52.5':
resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==}
@ -2659,6 +2727,9 @@ packages:
resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==}
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
batch-processor@1.0.0:
resolution: {integrity: sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA==}
big.js@5.2.2: big.js@5.2.2:
resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
@ -2799,9 +2870,6 @@ packages:
resolution: {integrity: sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==} resolution: {integrity: sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==}
engines: {node: '>=20.18.1'} engines: {node: '>=20.18.1'}
china-area-data@5.0.1:
resolution: {integrity: sha512-BQDPpiv5Nn+018ekcJK2oSD9PAD+E1bvXB0wgabc//dFVS/KvRqCgg0QOEUt3vBkx9XzB5a9BmkJCEZDBxVjVw==}
chokidar@3.6.0: chokidar@3.6.0:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'} engines: {node: '>= 8.10.0'}
@ -3452,6 +3520,9 @@ packages:
electron-to-chromium@1.5.267: electron-to-chromium@1.5.267:
resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==}
element-resize-detector@1.2.4:
resolution: {integrity: sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==}
emittery@0.13.1: emittery@0.13.1:
resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
@ -4968,6 +5039,14 @@ packages:
resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==} resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==}
engines: {node: '>=4.0.0'} engines: {node: '>=4.0.0'}
local-pkg@0.4.3:
resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
engines: {node: '>=14'}
local-pkg@0.5.1:
resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==}
engines: {node: '>=14'}
local-pkg@1.1.2: local-pkg@1.1.2:
resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==}
engines: {node: '>=14'} engines: {node: '>=14'}
@ -5072,6 +5151,9 @@ packages:
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
engines: {node: '>=10'} engines: {node: '>=10'}
lunar-javascript@1.7.7:
resolution: {integrity: sha512-u/KYiwPIBo/0bT+WWfU7qO1d+aqeB90Tuy4ErXenr2Gam0QcWeezUvtiOIyXR7HbVnW2I1DKfU0NBvzMZhbVQw==}
luxon@3.7.2: luxon@3.7.2:
resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==} resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==}
engines: {node: '>=12'} engines: {node: '>=12'}
@ -5119,6 +5201,9 @@ packages:
resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==}
hasBin: true hasBin: true
material-colors@1.2.6:
resolution: {integrity: sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==}
math-intrinsics@1.1.0: math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@ -5226,6 +5311,10 @@ packages:
resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
engines: {node: '>=10'} engines: {node: '>=10'}
minimatch@7.4.9:
resolution: {integrity: sha512-Brg/fp/iAVDOQoHxkuN5bEYhyQlZhxddI78yWsCbeEwTHXQjlNLtiJDUsp1GIptVqMI7/gkJMz4vVAc01mpoBw==}
engines: {node: '>=10'}
minimatch@9.0.1: minimatch@9.0.1:
resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==}
engines: {node: '>=16 || 14 >=14.17'} engines: {node: '>=16 || 14 >=14.17'}
@ -5252,6 +5341,9 @@ packages:
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
engines: {node: '>=16 || 14 >=14.17'} engines: {node: '>=16 || 14 >=14.17'}
mitt@3.0.1:
resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
mixin-deep@1.3.2: mixin-deep@1.3.2:
resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@ -5501,6 +5593,9 @@ packages:
package-json-from-dist@1.0.1: package-json-from-dist@1.0.1:
resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
package-manager-detector@0.2.11:
resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==}
package-manager-detector@1.6.0: package-manager-detector@1.6.0:
resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==}
@ -5612,6 +5707,9 @@ packages:
perfect-debounce@1.0.0: perfect-debounce@1.0.0:
resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
perfect-scrollbar@1.5.6:
resolution: {integrity: sha512-rixgxw3SxyJbCaSpo1n35A/fwI1r2rdwMKOTCg/AcG+xOEyZcE8UHVjpZMFCVImzsFoCZeJTT+M/rdEIQYO2nw==}
picocolors@1.1.1: picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@ -6811,6 +6909,50 @@ packages:
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
unplugin-icons@0.22.0:
resolution: {integrity: sha512-CP+iZq5U7doOifer5bcM0jQ9t3Is7EGybIYt3myVxceI8Zuk8EZEpe1NPtJvh7iqMs1VdbK0L41t9+um9VuuLw==}
peerDependencies:
'@svgr/core': '>=7.0.0'
'@svgx/core': ^1.0.1
'@vue/compiler-sfc': ^3.0.2 || ^2.7.0
svelte: ^3.0.0 || ^4.0.0 || ^5.0.0
vue-template-compiler: ^2.6.12
vue-template-es2015-compiler: ^1.9.0
peerDependenciesMeta:
'@svgr/core':
optional: true
'@svgx/core':
optional: true
'@vue/compiler-sfc':
optional: true
svelte:
optional: true
vue-template-compiler:
optional: true
vue-template-es2015-compiler:
optional: true
unplugin-vue-components@0.24.1:
resolution: {integrity: sha512-T3A8HkZoIE1Cja95xNqolwza0yD5IVlgZZ1PVAGvVCx8xthmjsv38xWRCtHtwl+rvZyL9uif42SRkDGw9aCfMA==}
engines: {node: '>=14'}
peerDependencies:
'@babel/parser': ^7.15.8
'@nuxt/kit': ^3.2.2
vue: 2 || 3
peerDependenciesMeta:
'@babel/parser':
optional: true
'@nuxt/kit':
optional: true
unplugin@1.16.1:
resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==}
engines: {node: '>=14.0.0'}
unplugin@2.3.11:
resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==}
engines: {node: '>=18.12.0'}
unset-value@1.0.0: unset-value@1.0.0:
resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@ -6976,6 +7118,11 @@ packages:
yaml: yaml:
optional: true optional: true
vue-color@3.3.3:
resolution: {integrity: sha512-FW/9JXFbCHfFEGv6SFUuK/SE+K61pHoL7lxJMQXcU+Zt7s36Ui1/tMDc3vzGXPrxxRBB+NSzFt+71nEaUJ29dQ==}
peerDependencies:
vue: '>=2.7.0 <4.0.0'
vue-component-type-helpers@2.2.12: vue-component-type-helpers@2.2.12:
resolution: {integrity: sha512-YbGqHZ5/eW4SnkPNR44mKVc6ZKQoRs/Rux1sxC6rdwXb4qpbOSYfDr9DsTHolOTGmIKgM9j141mZbBeg05R1pw==} resolution: {integrity: sha512-YbGqHZ5/eW4SnkPNR44mKVc6ZKQoRs/Rux1sxC6rdwXb4qpbOSYfDr9DsTHolOTGmIKgM9j141mZbBeg05R1pw==}
@ -7004,6 +7151,9 @@ packages:
peerDependencies: peerDependencies:
eslint: '>=6.0.0' eslint: '>=6.0.0'
vue-grid-layout-v3@3.1.2:
resolution: {integrity: sha512-4VB6pel2OklFNnFSUVg4wXwx/fKuKKvnhleLyscwk5ay7aEFk+HghcVKbComg+EgMvjuPzZ7hgIES3FlxuVK6w==}
vue-i18n@9.14.5: vue-i18n@9.14.5:
resolution: {integrity: sha512-0jQ9Em3ymWngyiIkj0+c/k7WgaPO+TNzjKSNq9BvBQaKJECqn9cd9fL4tkDhB5G1QBskGl9YxxbDAhgbFtpe2g==} resolution: {integrity: sha512-0jQ9Em3ymWngyiIkj0+c/k7WgaPO+TNzjKSNq9BvBQaKJECqn9cd9fL4tkDhB5G1QBskGl9YxxbDAhgbFtpe2g==}
engines: {node: '>= 16'} engines: {node: '>= 16'}
@ -7085,6 +7235,9 @@ packages:
webidl-conversions@4.0.2: webidl-conversions@4.0.2:
resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
webpack-virtual-modules@0.6.2:
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
whatwg-encoding@2.0.0: whatwg-encoding@2.0.0:
resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==}
engines: {node: '>=12'} engines: {node: '>=12'}
@ -7312,6 +7465,11 @@ snapshots:
'@ant-design/icons-svg': 4.4.2 '@ant-design/icons-svg': 4.4.2
vue: 3.5.27(typescript@5.9.3) vue: 3.5.27(typescript@5.9.3)
'@antfu/install-pkg@0.5.0':
dependencies:
package-manager-detector: 0.2.11
tinyexec: 0.3.2
'@antfu/install-pkg@1.1.0': '@antfu/install-pkg@1.1.0':
dependencies: dependencies:
package-manager-detector: 1.6.0 package-manager-detector: 1.6.0
@ -8519,6 +8677,61 @@ snapshots:
'@inquirer/figures@1.0.15': {} '@inquirer/figures@1.0.15': {}
'@interactjs/actions@1.10.27(@interactjs/core@1.10.27(@interactjs/utils@1.10.27))(@interactjs/utils@1.10.27)':
dependencies:
'@interactjs/core': 1.10.27(@interactjs/utils@1.10.27)
'@interactjs/utils': 1.10.27
optionalDependencies:
'@interactjs/interact': 1.10.27
'@interactjs/auto-scroll@1.10.27(@interactjs/utils@1.10.27)':
dependencies:
'@interactjs/utils': 1.10.27
optionalDependencies:
'@interactjs/interact': 1.10.27
'@interactjs/auto-start@1.10.27(@interactjs/core@1.10.27(@interactjs/utils@1.10.27))(@interactjs/utils@1.10.27)':
dependencies:
'@interactjs/core': 1.10.27(@interactjs/utils@1.10.27)
'@interactjs/utils': 1.10.27
optionalDependencies:
'@interactjs/interact': 1.10.27
'@interactjs/core@1.10.27(@interactjs/utils@1.10.27)':
dependencies:
'@interactjs/utils': 1.10.27
'@interactjs/dev-tools@1.10.27(@interactjs/modifiers@1.10.27(@interactjs/core@1.10.27(@interactjs/utils@1.10.27))(@interactjs/utils@1.10.27))(@interactjs/utils@1.10.27)(typescript@5.9.3)':
dependencies:
'@interactjs/modifiers': 1.10.27(@interactjs/core@1.10.27(@interactjs/utils@1.10.27))(@interactjs/utils@1.10.27)
'@interactjs/utils': 1.10.27
optionalDependencies:
'@interactjs/interact': 1.10.27
vue: 3.5.27(typescript@5.9.3)
transitivePeerDependencies:
- typescript
'@interactjs/interact@1.10.27':
dependencies:
'@interactjs/core': 1.10.27(@interactjs/utils@1.10.27)
'@interactjs/utils': 1.10.27
'@interactjs/modifiers@1.10.27(@interactjs/core@1.10.27(@interactjs/utils@1.10.27))(@interactjs/utils@1.10.27)':
dependencies:
'@interactjs/core': 1.10.27(@interactjs/utils@1.10.27)
'@interactjs/snappers': 1.10.27(@interactjs/utils@1.10.27)
'@interactjs/utils': 1.10.27
optionalDependencies:
'@interactjs/interact': 1.10.27
'@interactjs/snappers@1.10.27(@interactjs/utils@1.10.27)':
dependencies:
'@interactjs/utils': 1.10.27
optionalDependencies:
'@interactjs/interact': 1.10.27
'@interactjs/utils@1.10.27': {}
'@intlify/core-base@9.14.5': '@intlify/core-base@9.14.5':
dependencies: dependencies:
'@intlify/message-compiler': 9.14.5 '@intlify/message-compiler': 9.14.5
@ -8558,8 +8771,6 @@ snapshots:
'@jeecg/aiflow@3.9.1-beta': {} '@jeecg/aiflow@3.9.1-beta': {}
'@jeecg/online@3.9.1-beta': {}
'@jest/console@29.7.0': '@jest/console@29.7.0':
dependencies: dependencies:
'@jest/types': 29.6.3 '@jest/types': 29.6.3
@ -9878,6 +10089,8 @@ snapshots:
dependencies: dependencies:
safe-buffer: 5.1.2 safe-buffer: 5.1.2
batch-processor@1.0.0: {}
big.js@5.2.2: {} big.js@5.2.2: {}
big.js@6.2.2: {} big.js@6.2.2: {}
@ -10060,8 +10273,6 @@ snapshots:
undici: 7.18.2 undici: 7.18.2
whatwg-mimetype: 4.0.0 whatwg-mimetype: 4.0.0
china-area-data@5.0.1: {}
chokidar@3.6.0: chokidar@3.6.0:
dependencies: dependencies:
anymatch: 3.1.3 anymatch: 3.1.3
@ -10707,6 +10918,10 @@ snapshots:
electron-to-chromium@1.5.267: {} electron-to-chromium@1.5.267: {}
element-resize-detector@1.2.4:
dependencies:
batch-processor: 1.0.0
emittery@0.13.1: {} emittery@0.13.1: {}
emoji-mart-vue-fast@15.0.5(vue@3.5.27(typescript@5.9.3)): emoji-mart-vue-fast@15.0.5(vue@3.5.27(typescript@5.9.3)):
@ -12549,6 +12764,13 @@ snapshots:
emojis-list: 3.0.0 emojis-list: 3.0.0
json5: 1.0.2 json5: 1.0.2
local-pkg@0.4.3: {}
local-pkg@0.5.1:
dependencies:
mlly: 1.8.0
pkg-types: 1.3.1
local-pkg@1.1.2: local-pkg@1.1.2:
dependencies: dependencies:
mlly: 1.8.0 mlly: 1.8.0
@ -12638,6 +12860,8 @@ snapshots:
dependencies: dependencies:
yallist: 4.0.0 yallist: 4.0.0
lunar-javascript@1.7.7: {}
luxon@3.7.2: {} luxon@3.7.2: {}
magic-string@0.25.9: magic-string@0.25.9:
@ -12685,6 +12909,8 @@ snapshots:
punycode.js: 2.3.1 punycode.js: 2.3.1
uc.micro: 2.1.0 uc.micro: 2.1.0
material-colors@1.2.6: {}
math-intrinsics@1.1.0: {} math-intrinsics@1.1.0: {}
mathml-tag-names@2.1.3: {} mathml-tag-names@2.1.3: {}
@ -12791,6 +13017,10 @@ snapshots:
dependencies: dependencies:
brace-expansion: 2.0.2 brace-expansion: 2.0.2
minimatch@7.4.9:
dependencies:
brace-expansion: 2.0.2
minimatch@9.0.1: minimatch@9.0.1:
dependencies: dependencies:
brace-expansion: 2.0.2 brace-expansion: 2.0.2
@ -12815,6 +13045,8 @@ snapshots:
minipass@7.1.2: {} minipass@7.1.2: {}
mitt@3.0.1: {}
mixin-deep@1.3.2: mixin-deep@1.3.2:
dependencies: dependencies:
for-in: 1.0.2 for-in: 1.0.2
@ -13085,6 +13317,10 @@ snapshots:
package-json-from-dist@1.0.1: {} package-json-from-dist@1.0.1: {}
package-manager-detector@0.2.11:
dependencies:
quansync: 0.2.11
package-manager-detector@1.6.0: {} package-manager-detector@1.6.0: {}
param-case@3.0.4: param-case@3.0.4:
@ -13184,6 +13420,8 @@ snapshots:
perfect-debounce@1.0.0: {} perfect-debounce@1.0.0: {}
perfect-scrollbar@1.5.6: {}
picocolors@1.1.1: {} picocolors@1.1.1: {}
picomatch@2.3.1: {} picomatch@2.3.1: {}
@ -14469,6 +14707,52 @@ snapshots:
unpipe@1.0.0: {} unpipe@1.0.0: {}
unplugin-icons@0.22.0(@vue/compiler-sfc@3.5.27)(vue-template-compiler@2.7.16):
dependencies:
'@antfu/install-pkg': 0.5.0
'@antfu/utils': 0.7.10
'@iconify/utils': 2.3.0
debug: 4.4.3
kolorist: 1.8.0
local-pkg: 0.5.1
unplugin: 2.3.11
optionalDependencies:
'@vue/compiler-sfc': 3.5.27
vue-template-compiler: 2.7.16
transitivePeerDependencies:
- supports-color
unplugin-vue-components@0.24.1(@babel/parser@7.28.6)(rollup@4.52.5)(vue@3.5.27(typescript@5.9.3)):
dependencies:
'@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.3.0(rollup@4.52.5)
chokidar: 3.6.0
debug: 4.4.3
fast-glob: 3.3.3
local-pkg: 0.4.3
magic-string: 0.30.21
minimatch: 7.4.9
resolve: 1.22.11
unplugin: 1.16.1
vue: 3.5.27(typescript@5.9.3)
optionalDependencies:
'@babel/parser': 7.28.6
transitivePeerDependencies:
- rollup
- supports-color
unplugin@1.16.1:
dependencies:
acorn: 8.15.0
webpack-virtual-modules: 0.6.2
unplugin@2.3.11:
dependencies:
'@jridgewell/remapping': 2.3.5
acorn: 8.15.0
picomatch: 4.0.3
webpack-virtual-modules: 0.6.2
unset-value@1.0.0: unset-value@1.0.0:
dependencies: dependencies:
has-value: 0.3.1 has-value: 0.3.1
@ -14645,6 +14929,12 @@ snapshots:
terser: 5.46.0 terser: 5.46.0
tsx: 4.21.0 tsx: 4.21.0
vue-color@3.3.3(vue@3.5.27(typescript@5.9.3)):
dependencies:
material-colors: 1.2.6
tinycolor2: 1.6.0
vue: 3.5.27(typescript@5.9.3)
vue-component-type-helpers@2.2.12: {} vue-component-type-helpers@2.2.12: {}
vue-cropper@0.6.5: {} vue-cropper@0.6.5: {}
@ -14671,6 +14961,21 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
vue-grid-layout-v3@3.1.2(@interactjs/core@1.10.27(@interactjs/utils@1.10.27))(@interactjs/utils@1.10.27)(typescript@5.9.3):
dependencies:
'@interactjs/actions': 1.10.27(@interactjs/core@1.10.27(@interactjs/utils@1.10.27))(@interactjs/utils@1.10.27)
'@interactjs/auto-scroll': 1.10.27(@interactjs/utils@1.10.27)
'@interactjs/auto-start': 1.10.27(@interactjs/core@1.10.27(@interactjs/utils@1.10.27))(@interactjs/utils@1.10.27)
'@interactjs/dev-tools': 1.10.27(@interactjs/modifiers@1.10.27(@interactjs/core@1.10.27(@interactjs/utils@1.10.27))(@interactjs/utils@1.10.27))(@interactjs/utils@1.10.27)(typescript@5.9.3)
'@interactjs/interact': 1.10.27
'@interactjs/modifiers': 1.10.27(@interactjs/core@1.10.27(@interactjs/utils@1.10.27))(@interactjs/utils@1.10.27)
element-resize-detector: 1.2.4
mitt: 3.0.1
transitivePeerDependencies:
- '@interactjs/core'
- '@interactjs/utils'
- typescript
vue-i18n@9.14.5(vue@3.5.27(typescript@5.9.3)): vue-i18n@9.14.5(vue@3.5.27(typescript@5.9.3)):
dependencies: dependencies:
'@intlify/core-base': 9.14.5 '@intlify/core-base': 9.14.5
@ -14759,6 +15064,8 @@ snapshots:
webidl-conversions@4.0.2: {} webidl-conversions@4.0.2: {}
webpack-virtual-modules@0.6.2: {}
whatwg-encoding@2.0.0: whatwg-encoding@2.0.0:
dependencies: dependencies:
iconv-lite: 0.6.3 iconv-lite: 0.6.3

View File

@ -1,38 +1,43 @@
import BasicForm from './src/BasicForm.vue'; import BasicForm from './src/BasicForm.vue';
import { defineAsyncComponent } from 'vue';
export * from './src/types/form'; export * from './src/types/form';
export * from './src/types/formItem'; export * from './src/types/formItem';
export { useComponentRegister } from './src/hooks/useComponentRegister'; export { useComponentRegister } from './src/hooks/useComponentRegister';
export { useForm } from './src/hooks/useForm'; export { useForm } from './src/hooks/useForm';
export { default as ApiSelect } from './src/components/ApiSelect.vue'; export const ApiSelect = defineAsyncComponent(() => import('./src/components/ApiSelect.vue'));
export { default as RadioButtonGroup } from './src/components/RadioButtonGroup.vue'; export const RadioButtonGroup = defineAsyncComponent(() => import('./src/components/RadioButtonGroup.vue'));
export { default as ApiTreeSelect } from './src/components/ApiTreeSelect.vue'; export const ApiTreeSelect = defineAsyncComponent(() => import('./src/components/ApiTreeSelect.vue'));
export { default as ApiRadioGroup } from './src/components/ApiRadioGroup.vue'; export const ApiRadioGroup = defineAsyncComponent(() => import('./src/components/ApiRadioGroup.vue'));
//Jeecg //Jeecg
export { default as JAreaLinkage } from './src/jeecg/components/JAreaLinkage.vue'; export const JAreaLinkage = defineAsyncComponent(() => import('./src/jeecg/components/JAreaLinkage.vue'));
export { default as JSelectUser } from './src/jeecg/components/JSelectUser.vue'; export const JSelectUser = defineAsyncComponent(() => import('./src/jeecg/components/JSelectUser.vue'));
export { default as JSelectDept } from './src/jeecg/components/JSelectDept.vue'; export const JSelectDept = defineAsyncComponent(() => import('./src/jeecg/components/JSelectDept.vue'));
export { default as JSelectDepartPost } from './src/jeecg/components/JSelectDepartPost.vue'; export const JSelectDepartPost = defineAsyncComponent(() => import('./src/jeecg/components/JSelectDepartPost.vue'));
export { default as JSelectUserByDeptPost } from './src/jeecg/components/JSelectUserByDeptPost.vue'; export const JSelectUserByDeptPost = defineAsyncComponent(() => import('./src/jeecg/components/JSelectUserByDeptPost.vue'));
export { default as JCodeEditor } from './src/jeecg/components/JCodeEditor.vue'; export const JCodeEditor = defineAsyncComponent(() => import('./src/jeecg/components/JCodeEditor.vue'));
export { default as JCategorySelect } from './src/jeecg/components/JCategorySelect.vue'; export const JCategorySelect = defineAsyncComponent(() => import('./src/jeecg/components/JCategorySelect.vue'));
export { default as JSelectMultiple } from './src/jeecg/components/JSelectMultiple.vue'; export const JSelectMultiple = defineAsyncComponent(() => import('./src/jeecg/components/JSelectMultiple.vue'));
export { default as JPopup } from './src/jeecg/components/JPopup.vue'; export const JPopup = defineAsyncComponent(() => import('./src/jeecg/components/JPopup.vue'));
export { default as JAreaSelect } from './src/jeecg/components/JAreaSelect.vue'; export const JAreaSelect = defineAsyncComponent(() => import('./src/jeecg/components/JAreaSelect.vue'));
export { JEasyCron, JEasyCronInner, JEasyCronModal } from '/@/components/Form/src/jeecg/components/JEasyCron'; export const JEasyCron = defineAsyncComponent(() => import('./src/jeecg/components/JEasyCron/EasyCronInput.vue'));
export { default as JCheckbox } from './src/jeecg/components/JCheckbox.vue'; export const JEasyCronInner = defineAsyncComponent(() => import('./src/jeecg/components/JEasyCron/EasyCronInner.vue'));
export { default as JInput } from './src/jeecg/components/JInput.vue'; export const JEasyCronModal = defineAsyncComponent(() => import('./src/jeecg/components/JEasyCron/EasyCronModal.vue'));
export { default as JEllipsis } from './src/jeecg/components/JEllipsis.vue'; export const JCheckbox = defineAsyncComponent(() => import('./src/jeecg/components/JCheckbox.vue'));
export { default as JDictSelectTag } from './src/jeecg/components/JDictSelectTag.vue'; export const JInput = defineAsyncComponent(() => import('./src/jeecg/components/JInput.vue'));
export { default as JTreeSelect } from './src/jeecg/components/JTreeSelect.vue'; export const JEllipsis = defineAsyncComponent(() => import('./src/jeecg/components/JEllipsis.vue'));
export { default as JSearchSelect } from './src/jeecg/components/JSearchSelect.vue'; export const JDictSelectTag = defineAsyncComponent(() => import('./src/jeecg/components/JDictSelectTag.vue'));
export { default as JSelectUserByDept } from './src/jeecg/components/JSelectUserByDept.vue'; export const JTreeSelect = defineAsyncComponent(() => import('./src/jeecg/components/JTreeSelect.vue'));
export { default as JSelectUserByDepartment } from './src/jeecg/components/JSelectUserByDepartment.vue'; export const JSearchSelect = defineAsyncComponent(() => import('./src/jeecg/components/JSearchSelect.vue'));
export { default as JEditor } from './src/jeecg/components/JEditor.vue'; export const JSelectUserByDept = defineAsyncComponent(() => import('./src/jeecg/components/JSelectUserByDept.vue'));
export { default as JImageUpload } from './src/jeecg/components/JImageUpload.vue'; export const JSelectUserByDepartment = defineAsyncComponent(() => import('./src/jeecg/components/JSelectUserByDepartment.vue'));
// update-begin--author:liaozhiyang---date:20260227---for:QQYUN-14751tinymceJEasyCronJLinkTableCard
export const JEditor = defineAsyncComponent(() => import('./src/jeecg/components/JEditor.vue'));
// update-end--author:liaozhiyang---date:20260227---for:QQYUN-14751tinymceJEasyCronJLinkTableCard
export const JImageUpload = defineAsyncComponent(() => import('./src/jeecg/components/JImageUpload.vue'));
// Jeecg // Jeecg
export { JCronValidator } from '/@/components/Form/src/jeecg/components/JEasyCron'; // update-begin--author:liaozhiyang---date:20260303---for:QQYUN-14815JCronValidatorForm
// export { default as JCronValidator } from '/@/components/Form/src/jeecg/components/JEasyCron/validator';
// update-end--author:liaozhiyang---date:20260303---for:QQYUN-14815JCronValidatorForm
export { BasicForm }; export { BasicForm };

View File

@ -1,10 +1,5 @@
/** /**
* 目前实现了异步加载的组件清单 * 目前实现了异步加载的组件清单antd 组件已改为 createAsyncComponent 异步加载
* JAreaLinkage
* JEditor
* JMarkdownEditor
* JCodeEditor
* JEasyCron
*/ */
import type { Component } from 'vue'; import type { Component } from 'vue';
import type { ComponentType } from './types/index'; import type { ComponentType } from './types/index';
@ -12,182 +7,93 @@ import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
/** /**
* Component list, register here to setting it in the form * Component list, register here to setting it in the form
*/ */
import {
Input,
Select,
Radio,
Checkbox,
AutoComplete,
Cascader,
DatePicker,
InputNumber,
Switch,
TimePicker,
TreeSelect,
Slider,
Rate,
Divider,
} from 'ant-design-vue';
import ApiRadioGroup from './components/ApiRadioGroup.vue';
import RadioButtonGroup from './components/RadioButtonGroup.vue';
import ApiSelect from './components/ApiSelect.vue';
import ApiTreeSelect from './components/ApiTreeSelect.vue';
import { BasicUpload } from '/@/components/Upload';
import { StrengthMeter } from '/@/components/StrengthMeter';
import { IconPicker } from '/@/components/Icon';
import { CountdownInput } from '/@/components/CountDown';
//
// import JAreaLinkage from './jeecg/components/JAreaLinkage.vue';
import JSelectUser from './jeecg/components/JSelectUser.vue';
import JSelectPosition from './jeecg/components/JSelectPosition.vue';
import JSelectRole from './jeecg/components/JSelectRole.vue';
import JImageUpload from './jeecg/components/JImageUpload.vue';
import JDictSelectTag from './jeecg/components/JDictSelectTag.vue';
import JSelectDept from './jeecg/components/JSelectDept.vue';
import JSelectDepartPost from './jeecg/components/JSelectDepartPost.vue';
import JAreaSelect from './jeecg/components/JAreaSelect.vue';
import JEditor from './jeecg/components/JEditor.vue';
// import JMarkdownEditor from './jeecg/components/JMarkdownEditor.vue';
import JSelectInput from './jeecg/components/JSelectInput.vue';
// import JCodeEditor from './jeecg/components/JCodeEditor.vue';
import JCategorySelect from './jeecg/components/JCategorySelect.vue';
import JSelectMultiple from './jeecg/components/JSelectMultiple.vue';
import JPopup from './jeecg/components/JPopup.vue';
// : QQYUN-7961popupDict
import JPopupDict from './jeecg/components/JPopupDict.vue';
import JSwitch from './jeecg/components/JSwitch.vue';
import JTreeDict from './jeecg/components/JTreeDict.vue';
import JInputPop from './jeecg/components/JInputPop.vue';
// import { JEasyCron } from './jeecg/components/JEasyCron';
import JCheckbox from './jeecg/components/JCheckbox.vue';
import JInput from './jeecg/components/JInput.vue';
import JTreeSelect from './jeecg/components/JTreeSelect.vue';
import JEllipsis from './jeecg/components/JEllipsis.vue';
import JSelectUserByDept from './jeecg/components/JSelectUserByDept.vue';
import JSelectUserByDepartment from './jeecg/components/JSelectUserByDepartment.vue';
import JLinkTableCard from './jeecg/components/JLinkTableCard/JLinkTableCard.vue';
import JUpload from './jeecg/components/JUpload/JUpload.vue';
import JSearchSelect from './jeecg/components/JSearchSelect.vue';
import JAddInput from './jeecg/components/JAddInput.vue';
import { Time } from '/@/components/Time';
import JRangeNumber from './jeecg/components/JRangeNumber.vue';
import UserSelect from './jeecg/components/userSelect/index.vue';
import JRangeDate from './jeecg/components/JRangeDate.vue'
import JRangeTime from './jeecg/components/JRangeTime.vue'
import JInputSelect from './jeecg/components/JInputSelect.vue'
import RoleSelectInput from './jeecg/components/roleSelect/RoleSelectInput.vue';
import JSelectUserByDeptPost from './jeecg/components/JSelectUserByDeptPost.vue';
import JDatePickerMultiple from './jeecg/components/JDatePickerMultiple.vue';
import {DatePickerInFilter, CascaderPcaInFilter} from "@/components/InFilter";
const componentMap = new Map<ComponentType, Component>(); const componentMap = new Map<ComponentType, Component>();
componentMap.set('Time', Time); componentMap.set('Time', createAsyncComponent(() => import('/@/components/Time/src/Time.vue')));
componentMap.set('Input', Input); componentMap.set('Input', createAsyncComponent(() => import('ant-design-vue/es/input')));
componentMap.set('InputGroup', Input.Group); componentMap.set('InputGroup', createAsyncComponent(() => import('ant-design-vue/es/input/Group')));
componentMap.set('InputPassword', Input.Password); componentMap.set('InputPassword', createAsyncComponent(() => import('ant-design-vue/es/input/Password')));
componentMap.set('InputSearch', Input.Search); componentMap.set('InputSearch', createAsyncComponent(() => import('ant-design-vue/es/input/Search')));
componentMap.set('InputTextArea', Input.TextArea); componentMap.set('InputTextArea', createAsyncComponent(() => import('ant-design-vue/es/input/TextArea')));
componentMap.set('InputNumber', InputNumber); componentMap.set('InputNumber', createAsyncComponent(() => import('ant-design-vue/es/input-number')));
componentMap.set('AutoComplete', AutoComplete); componentMap.set('AutoComplete', createAsyncComponent(() => import('ant-design-vue/es/auto-complete')));
componentMap.set('Select', Select); componentMap.set('Select', createAsyncComponent(() => import('ant-design-vue/es/select')));
componentMap.set('ApiSelect', ApiSelect); componentMap.set('ApiSelect', createAsyncComponent(() => import('./components/ApiSelect.vue')));
componentMap.set('TreeSelect', TreeSelect); componentMap.set('JTabsSelectUser', createAsyncComponent(() => import('@/components/jeecg/JTabsSelectUser/index.vue')));
componentMap.set('ApiTreeSelect', ApiTreeSelect); componentMap.set('TreeSelect', createAsyncComponent(() => import('ant-design-vue/es/tree-select')));
componentMap.set('ApiRadioGroup', ApiRadioGroup); componentMap.set('ApiTreeSelect', createAsyncComponent(() => import('./components/ApiTreeSelect.vue')));
componentMap.set('Switch', Switch); componentMap.set('ApiRadioGroup', createAsyncComponent(() => import('./components/ApiRadioGroup.vue')));
componentMap.set('RadioButtonGroup', RadioButtonGroup); componentMap.set('Switch', createAsyncComponent(() => import('ant-design-vue/es/switch')));
componentMap.set('RadioGroup', Radio.Group); componentMap.set('RadioButtonGroup', createAsyncComponent(() => import('./components/RadioButtonGroup.vue')));
componentMap.set('Checkbox', Checkbox); componentMap.set('RadioGroup', createAsyncComponent(() => import('ant-design-vue/es/radio/Group')));
componentMap.set('CheckboxGroup', Checkbox.Group); componentMap.set('Checkbox', createAsyncComponent(() => import('ant-design-vue/es/checkbox')));
componentMap.set('Cascader', Cascader); componentMap.set('CheckboxGroup', createAsyncComponent(() => import('ant-design-vue/es/checkbox/Group')));
componentMap.set('Slider', Slider); componentMap.set('Cascader', createAsyncComponent(() => import('ant-design-vue/es/cascader')));
componentMap.set('Rate', Rate); componentMap.set('Slider', createAsyncComponent(() => import('ant-design-vue/es/slider')));
componentMap.set('Rate', createAsyncComponent(() => import('ant-design-vue/es/rate')));
componentMap.set('DatePicker', DatePicker); componentMap.set('DatePicker', createAsyncComponent(() => import('ant-design-vue/es/date-picker')));
componentMap.set('MonthPicker', DatePicker.MonthPicker); componentMap.set('MonthPicker', createAsyncComponent(() => import('ant-design-vue/es/date-picker').then((m) => m.default.MonthPicker)));
componentMap.set('RangePicker', DatePicker.RangePicker); componentMap.set('RangePicker', createAsyncComponent(() => import('ant-design-vue/es/date-picker').then((m) => m.default.RangePicker)));
componentMap.set('WeekPicker', DatePicker.WeekPicker); componentMap.set('WeekPicker', createAsyncComponent(() => import('ant-design-vue/es/date-picker').then((m) => m.default.WeekPicker)));
componentMap.set('TimePicker', TimePicker); componentMap.set('TimePicker', createAsyncComponent(() => import('ant-design-vue/es/time-picker')));
componentMap.set('DatePickerInFilter', DatePickerInFilter); componentMap.set('DatePickerInFilter', createAsyncComponent(() => import('@/components/InFilter/DatePickerInFilter.vue')));
componentMap.set('JDatePickerMultiple', JDatePickerMultiple); componentMap.set('JDatePickerMultiple', createAsyncComponent(() => import('./jeecg/components/JDatePickerMultiple.vue')));
componentMap.set('StrengthMeter', StrengthMeter); componentMap.set('StrengthMeter', createAsyncComponent(() => import('/@/components/StrengthMeter/src/StrengthMeter.vue')));
componentMap.set('IconPicker', IconPicker); componentMap.set('IconPicker', createAsyncComponent(() => import('/@/components/Icon/src/IconPicker.vue')));
componentMap.set('InputCountDown', CountdownInput); componentMap.set('InputCountDown', createAsyncComponent(() => import('/@/components/CountDown/src/CountdownInput.vue')));
componentMap.set('Upload', BasicUpload); componentMap.set('Upload', createAsyncComponent(() => import('/@/components/Upload/src/BasicUpload.vue')));
componentMap.set('Divider', Divider); componentMap.set('Divider', createAsyncComponent(() => import('ant-design-vue/es/divider')));
// //
componentMap.set( componentMap.set('JAreaLinkage', createAsyncComponent(() => import('./jeecg/components/JAreaLinkage.vue')));
'JAreaLinkage', componentMap.set('JSelectPosition', createAsyncComponent(() => import('./jeecg/components/JSelectPosition.vue')));
createAsyncComponent(() => import('./jeecg/components/JAreaLinkage.vue')) componentMap.set('JSelectUser', createAsyncComponent(() => import('./jeecg/components/JSelectUser.vue')));
); componentMap.set('JSelectRole', createAsyncComponent(() => import('./jeecg/components/JSelectRole.vue')));
componentMap.set('JSelectPosition', JSelectPosition); componentMap.set('JImageUpload', createAsyncComponent(() => import('./jeecg/components/JImageUpload.vue')));
componentMap.set('JSelectUser', JSelectUser); componentMap.set('JDictSelectTag', createAsyncComponent(() => import('./jeecg/components/JDictSelectTag.vue')));
componentMap.set('JSelectRole', JSelectRole); componentMap.set('JSelectDept', createAsyncComponent(() => import('./jeecg/components/JSelectDept.vue')));
componentMap.set('JImageUpload', JImageUpload); componentMap.set('JAreaSelect', createAsyncComponent(() => import('./jeecg/components/JAreaSelect.vue')));
componentMap.set('JDictSelectTag', JDictSelectTag); // update-begin--author:liaozhiyang---date:20260227---for:QQYUN-14751tinymceJEasyCronJLinkTableCard
componentMap.set('JSelectDept', JSelectDept); componentMap.set('JLinkTableCard', createAsyncComponent(() => import('./jeecg/components/JLinkTableCard/JLinkTableCard.vue'), { loading: true }));
componentMap.set('JAreaSelect', JAreaSelect); componentMap.set('JEditor', createAsyncComponent(() => import('./jeecg/components/JEditor.vue')));
componentMap.set('JLinkTableCard', JLinkTableCard); // update-end--author:liaozhiyang---date:20260227---for:QQYUN-14751tinymceJEasyCronJLinkTableCard
// componentMap.set( componentMap.set('JMarkdownEditor', createAsyncComponent(() => import('./jeecg/components/JMarkdownEditor.vue')));
// 'JEditor', componentMap.set('JSelectInput', createAsyncComponent(() => import('./jeecg/components/JSelectInput.vue')));
// createAsyncComponent(() => import('./jeecg/components/JEditor.vue')) componentMap.set('JCodeEditor', createAsyncComponent(() => import('./jeecg/components/JCodeEditor.vue')));
// ); componentMap.set('JCategorySelect', createAsyncComponent(() => import('./jeecg/components/JCategorySelect.vue')));
componentMap.set('JEditor', JEditor); componentMap.set('JSelectMultiple', createAsyncComponent(() => import('./jeecg/components/JSelectMultiple.vue')));
componentMap.set( componentMap.set('JSelectSingle', createAsyncComponent(() => import('./jeecg/components/JSelectSingle.vue')));
'JMarkdownEditor', componentMap.set('JPopup', createAsyncComponent(() => import('./jeecg/components/JPopup.vue')));
createAsyncComponent(() => import('./jeecg/components/JMarkdownEditor.vue'))
);
componentMap.set('JSelectInput', JSelectInput);
componentMap.set(
'JCodeEditor',
createAsyncComponent(() => import('./jeecg/components/JCodeEditor.vue'))
);
componentMap.set('JCategorySelect', JCategorySelect);
componentMap.set('JSelectMultiple', JSelectMultiple);
componentMap.set('JPopup', JPopup);
// : QQYUN-7961popupDict // : QQYUN-7961popupDict
componentMap.set('JPopupDict', JPopupDict); componentMap.set('JPopupDict', createAsyncComponent(() => import('./jeecg/components/JPopupDict.vue')));
componentMap.set('JSwitch', JSwitch); componentMap.set('JSwitch', createAsyncComponent(() => import('./jeecg/components/JSwitch.vue')));
componentMap.set('JTreeDict', JTreeDict); componentMap.set('JTreeDict', createAsyncComponent(() => import('./jeecg/components/JTreeDict.vue')));
componentMap.set('JInputPop', JInputPop); componentMap.set('JInputPop', createAsyncComponent(() => import('./jeecg/components/JInputPop.vue')));
componentMap.set( componentMap.set('JEasyCron', createAsyncComponent(() => import('./jeecg/components/JEasyCron/EasyCronInput.vue')));
'JEasyCron', componentMap.set('JCheckbox', createAsyncComponent(() => import('./jeecg/components/JCheckbox.vue')));
createAsyncComponent(() => import('./jeecg/components/JEasyCron/EasyCronInput.vue')) componentMap.set('JInput', createAsyncComponent(() => import('./jeecg/components/JInput.vue')));
); componentMap.set('JTreeSelect', createAsyncComponent(() => import('./jeecg/components/JTreeSelect.vue')));
componentMap.set('JCheckbox', JCheckbox); componentMap.set('JEllipsis', createAsyncComponent(() => import('./jeecg/components/JEllipsis.vue')));
componentMap.set('JInput', JInput); componentMap.set('JSelectUserByDept', createAsyncComponent(() => import('./jeecg/components/JSelectUserByDept.vue')));
componentMap.set('JTreeSelect', JTreeSelect); componentMap.set('JSelectUserByDepartment', createAsyncComponent(() => import('./jeecg/components/JSelectUserByDepartment.vue')));
componentMap.set('JEllipsis', JEllipsis); componentMap.set('JUpload', createAsyncComponent(() => import('./jeecg/components/JUpload/JUpload.vue')));
componentMap.set('JSelectUserByDept', JSelectUserByDept); componentMap.set('JSearchSelect', createAsyncComponent(() => import('./jeecg/components/JSearchSelect.vue')));
componentMap.set('JSelectUserByDepartment', JSelectUserByDepartment); componentMap.set('JAddInput', createAsyncComponent(() => import('./jeecg/components/JAddInput.vue')));
componentMap.set('JUpload', JUpload); componentMap.set('JRangeNumber', createAsyncComponent(() => import('./jeecg/components/JRangeNumber.vue')));
componentMap.set('JSearchSelect', JSearchSelect); componentMap.set('CascaderPcaInFilter', createAsyncComponent(() => import('@/components/InFilter/CascaderPcaInFilter.vue')));
componentMap.set('JAddInput', JAddInput); componentMap.set('UserSelect', createAsyncComponent(() => import('./jeecg/components/userSelect/index.vue')));
componentMap.set('JRangeNumber', JRangeNumber); componentMap.set('RangeDate', createAsyncComponent(() => import('./jeecg/components/JRangeDate.vue')));
componentMap.set('CascaderPcaInFilter', CascaderPcaInFilter); componentMap.set('RangeTime', createAsyncComponent(() => import('./jeecg/components/JRangeTime.vue')));
componentMap.set('UserSelect', UserSelect); componentMap.set('RoleSelect', createAsyncComponent(() => import('./jeecg/components/roleSelect/RoleSelectInput.vue')));
componentMap.set('RangeDate', JRangeDate); componentMap.set('JInputSelect', createAsyncComponent(() => import('./jeecg/components/JInputSelect.vue')));
componentMap.set('RangeTime', JRangeTime); componentMap.set('JSelectDepartPost', createAsyncComponent(() => import('./jeecg/components/JSelectDepartPost.vue')));
componentMap.set('RoleSelect', RoleSelectInput); componentMap.set('JSelectUserByDeptPost', createAsyncComponent(() => import('./jeecg/components/JSelectUserByDeptPost.vue')));
componentMap.set('JInputSelect', JInputSelect);
componentMap.set('JSelectDepartPost', JSelectDepartPost);
componentMap.set('JSelectUserByDeptPost', JSelectUserByDeptPost);
componentMap.set('OnlineSelectCascade', createAsyncComponent(() => {
return import('@jeecg/online').then(mod => mod.OnlineSelectCascade);
}));
componentMap.set('LinkTableCard', createAsyncComponent(() => {
return import('@jeecg/online').then(mod => mod.LinkTableCard);
}));
componentMap.set('LinkTableSelect', createAsyncComponent(() => {
return import('@jeecg/online').then(mod => mod.LinkTableSelect);
}));
export function add(compName: ComponentType, component: Component) { export function add(compName: ComponentType, component: Component) {
componentMap.set(compName, component); componentMap.set(compName, component);

View File

@ -6,10 +6,8 @@
import type { PropType } from 'vue'; import type { PropType } from 'vue';
import { defineComponent, ref, watch, onMounted, nextTick, unref, computed, CSSProperties } from 'vue'; import { defineComponent, ref, watch, onMounted, nextTick, unref, computed, CSSProperties } from 'vue';
import SvgIcon from './SvgIcon.vue'; import SvgIcon from './SvgIcon.vue';
import Iconify from '@purge-icons/generated';
import { isString } from '/@/utils/is'; import { isString } from '/@/utils/is';
import { propTypes } from '/@/utils/propTypes'; import { propTypes } from '/@/utils/propTypes';
const SVG_END_WITH_FLAG = '|svg'; const SVG_END_WITH_FLAG = '|svg';
export default defineComponent({ export default defineComponent({
name: 'Icon', name: 'Icon',
@ -43,18 +41,35 @@
await nextTick(); await nextTick();
const icon = unref(getIconRef); const icon = unref(getIconRef);
if (!icon) return; if (!icon) return;
// update-begin--author:liaozhiyang---date:20260304---for:QQYUN-14802unplugin-iconsicononlinelocal
const svg = Iconify.renderSVG(icon, {}); try {
if (svg) { let svg: SVGElement | null = null;
el.textContent = ''; if (import.meta.env.VITE_GLOB_ICONIFY_USE_TYPE === 'local') {
el.appendChild(svg); // 使 purge-icons 线
} else { const iconifyModule = await import('@purge-icons/generated');
const span = document.createElement('span'); const Iconify = iconifyModule.default;
span.className = 'iconify'; svg = Iconify.renderSVG(icon, {});
span.dataset.icon = icon; } else {
el.textContent = ''; // 使 @iconify/iconify 线
el.appendChild(span); const iconifyModule = await import('@iconify/iconify');
const Iconify = iconifyModule.default;
svg = Iconify.renderSVG(icon, {});
}
if (svg) {
el.textContent = '';
el.appendChild(svg);
} else {
//
const span = document.createElement('span');
span.className = 'iconify';
span.dataset.icon = icon;
el.textContent = '';
el.appendChild(span);
}
} catch (err) {
console.error('Failed to render icon:', icon, err);
} }
// update-end--author:liaozhiyang---date:20260304---for:QQYUN-14802unplugin-iconsicononlinelocal
}; };
const getWrapStyle = computed((): CSSProperties => { const getWrapStyle = computed((): CSSProperties => {

View File

@ -1,4 +1,21 @@
export { default as JVxeTable } from './src/JVxeTable'; import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
// update-begin--author:liaozhiyang---date:20260318---for:QQYUN-14948vxetable
// vxe-table
export const JVxeTable = createAsyncComponent(
async () => {
const app = window['JAppRootInstance'];
if (app && !app._context.components['VxeTable']) {
const { registerJVxeTable } = await import('./src/install');
await registerJVxeTable(app);
const { registerJVxeCustom } = await import('/@/components/JVxeCustom');
await registerJVxeCustom();
}
const m = await import('./src/JVxeTable');
return m.default;
},
{ loading: true }
);
// update-end--author:liaozhiyang---date:20260318---for:QQYUN-14948vxetable
export { registerJVxeTable } from './src/install'; export { registerJVxeTable } from './src/install';
export { deleteComponent } from './src/componentMap'; export { deleteComponent } from './src/componentMap';
export { registerComponent, registerAsyncComponent, registerASyncComponentReal } from './src/utils/registerUtils'; export { registerComponent, registerAsyncComponent, registerASyncComponentReal } from './src/utils/registerUtils';

View File

@ -0,0 +1,12 @@
// 使vxe-tablevxe-table
export const useVxeTableRegister = async () => {
const app = window['JAppRootInstance'];
if (app._context.components.VxeTable) {
//
} else {
const { registerJVxeTable } = await import('/@/components/jeecg/JVxeTable');
await registerJVxeTable(app);
const { registerJVxeCustom } = await import('/@/components/JVxeCustom');
await registerJVxeCustom();
}
}

View File

@ -2,128 +2,38 @@ import type { App } from 'vue';
import { Icon } from './Icon'; import { Icon } from './Icon';
import AIcon from '/@/components/jeecg/AIcon.vue'; import AIcon from '/@/components/jeecg/AIcon.vue';
//Tinymce //Tinymce
import Editor from '/@/components/Tinymce/src/Editor.vue' // import Editor from '/@/components/Tinymce/src/Editor.vue'
import { Button, JUploadButton } from './Button'; import { Button, JUploadButton } from './Button';
import { Space } from 'ant-design-vue';
// antd // ant-design-vue unplugin-vue-components + AntDesignVueResolver
import { const compList = [Icon, AIcon, JUploadButton];
// Need //online
Button as AntButton, import { registerOnlineComp } from '/@/views/super/online/cgform/auto/comp/index';
Select, import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
Alert,
Checkbox,
DatePicker,
TimePicker,
Calendar,
Radio,
Switch,
Card,
List,
Tabs,
Descriptions,
Tree,
Table,
Divider,
Modal,
Drawer,
TreeSelect,
Dropdown,
Tag,
Tooltip,
Badge,
Popover,
Upload,
Transfer,
Steps,
PageHeader,
Result,
Empty,
Avatar,
Menu,
Breadcrumb,
Form,
Input,
Row,
Col,
Spin,
Space,
Layout,
Collapse,
Slider,
InputNumber,
Carousel,
Popconfirm,
Skeleton,
Cascader,
Rate,
Progress
} from 'ant-design-vue';
const compList = [AntButton.Group, Icon, AIcon, JUploadButton];
export function registerGlobComp(app: App) { export function registerGlobComp(app: App) {
compList.forEach((comp) => { compList.forEach((comp) => {
app.component(comp.name || comp.displayName, comp); app.component(comp.name || comp.displayName, comp);
}); });
// Space.Compact AntDesignVueResolver
app.component('ASpaceCompact', Space.Compact);
//Tinymce //Tinymce
app.component(Editor.name, Editor); // app.component(Editor.name, Editor);
// : Tinymce // : Tinymce
// app.component( // update-begin--author:liaozhiyang---date:20260227---for:QQYUN-14751tinymceJEasyCronJLinkTableCard
// 'Tinymce', app.component(
// createAsyncComponent(() => import('./Tinymce/src/Editor.vue'), { 'Tinymce',
// loading: true, createAsyncComponent(() => import('./Tinymce/src/Editor.vue'), {
// }) loading: true,
// ); })
app.use(Select) );
.use(Alert) // update-end--author:liaozhiyang---date:20260227---for:QQYUN-14751tinymceJEasyCronJLinkTableCard
app
.use(registerOnlineComp)
.use(Button) .use(Button)
.use(Breadcrumb) console.log("---初始化--- 全局注册Antd、仪表盘、流程设计器、online、流程等组件--------------")
.use(Checkbox)
.use(DatePicker)
.use(TimePicker)
.use(Calendar)
.use(Radio)
.use(Switch)
.use(Card)
.use(List)
.use(Descriptions)
.use(Tree)
.use(TreeSelect)
.use(Table)
.use(Divider)
.use(Modal)
.use(Drawer)
.use(Dropdown)
.use(Tag)
.use(Tooltip)
.use(Badge)
.use(Popover)
.use(Upload)
.use(Transfer)
.use(Steps)
.use(PageHeader)
.use(Result)
.use(Empty)
.use(Avatar)
.use(Menu)
.use(Tabs)
.use(Form)
.use(Input)
.use(Row)
.use(Col)
.use(Spin)
.use(Space)
.use(Layout)
.use(Collapse)
.use(Slider)
.use(InputNumber)
.use(Carousel)
.use(Popconfirm)
.use(Skeleton)
.use(Cascader)
.use(Rate)
.use(Progress);
console.log("---初始化--- 全局注册Antd、仪表盘、流程设计器、online、流程等组件--------------")
} }

View File

@ -10,6 +10,7 @@ import { URL_HASH_TAB, _eval } from '/@/utils';
//online lib //online lib
import { packageViews } from '/@/utils/monorepo/dynamicRouter'; import { packageViews } from '/@/utils/monorepo/dynamicRouter';
import { loadPackageComponent } from '/@/utils/monorepo/registerPackages'; import { loadPackageComponent } from '/@/utils/monorepo/registerPackages';
import { dynamicPages } from '/@/utils/dynamicPages';
import {useI18n} from "/@/hooks/web/useI18n"; import {useI18n} from "/@/hooks/web/useI18n";
export type LayoutMapKey = 'LAYOUT'; export type LayoutMapKey = 'LAYOUT';
@ -28,7 +29,9 @@ let dynamicViewsModules: Record<string, () => Promise<Recordable>>;
// Dynamic introduction // Dynamic introduction
function asyncImportRoute(routes: AppRouteRecordRaw[] | undefined) { function asyncImportRoute(routes: AppRouteRecordRaw[] | undefined) {
if (!dynamicViewsModules) { if (!dynamicViewsModules) {
dynamicViewsModules = import.meta.glob('../../views/**/*.{vue,tsx}'); // update-begin--author:liaozhiyang---date:20260302---for:QQYUN-14799components
dynamicViewsModules = dynamicPages as Record<string, () => Promise<Recordable>>;
// update-end--author:liaozhiyang---date:20260302---for:QQYUN-14799components
//online lib //online lib
dynamicViewsModules = Object.assign({}, dynamicViewsModules, packageViews); dynamicViewsModules = Object.assign({}, dynamicViewsModules, packageViews);
} }
@ -105,7 +108,10 @@ function asyncImportRoute(routes: AppRouteRecordRaw[] | undefined) {
function dynamicImport(dynamicViewsModules: Record<string, () => Promise<Recordable>>, component: string) { function dynamicImport(dynamicViewsModules: Record<string, () => Promise<Recordable>>, component: string) {
const keys = Object.keys(dynamicViewsModules); const keys = Object.keys(dynamicViewsModules);
const matchKeys = keys.filter((key) => { const matchKeys = keys.filter((key) => {
const k = key.replace('../../views', ''); // update-begin--author:liaozhiyang---date:20260302---for:QQYUN-14799components
// dynamicPages ../views packageViews ../../views
const k = key.replace(/^(\.\.\/)+views/, '');
// update-end--author:liaozhiyang---date:20260302---for:QQYUN-14799components
const startFlag = component.startsWith('/'); const startFlag = component.startsWith('/');
const endFlag = component.endsWith('.vue') || component.endsWith('.tsx'); const endFlag = component.endsWith('.vue') || component.endsWith('.tsx');
const startIndex = startFlag ? 0 : 1; const startIndex = startFlag ? 0 : 1;
@ -122,7 +128,7 @@ function dynamicImport(dynamicViewsModules: Record<string, () => Promise<Recorda
return; return;
} }
// online/aiflow // online/aiflow
if (component.startsWith('/super/online') || component.startsWith('/super/airag')) { if (component.startsWith('/super/airag/aiflow')) {
return () => { return () => {
return loadPackageComponent(component).then((factory) => (factory ? factory() : Promise.reject(`组件 ${component} 未找到`))); return loadPackageComponent(component).then((factory) => (factory ? factory() : Promise.reject(`组件 ${component} 未找到`)));
}; };

View File

@ -0,0 +1,10 @@
// (viewsvuetsx)
const allFiles = import.meta.glob(
[
'../views/**/*.{vue,tsx}',// vuetsx
//
'!../views/system/approvalrole/compoments/**',
]
);
//
export const dynamicPages = { ...allFiles };

View File

@ -4,6 +4,7 @@ import type { FormSchema, FormActionType } from "@/components/Form";
import { unref } from 'vue'; import { unref } from 'vue';
import { isObject, isFunction, isString } from '/@/utils/is'; import { isObject, isFunction, isString } from '/@/utils/is';
import { dynamicPages } from './dynamicPages';
import Big from 'big.js'; import Big from 'big.js';
import dayjs from "dayjs"; import dayjs from "dayjs";
// : VUEN-656# // : VUEN-656#
@ -348,7 +349,6 @@ export function numToUpper(value) {
} }
// : vue2 vite // : vue2 vite
const allModules = import.meta.glob('../views/**/*.vue');
export function importViewsFile(path): Promise<any> { export function importViewsFile(path): Promise<any> {
if (path.startsWith('/')) { if (path.startsWith('/')) {
path = path.substring(1); path = path.substring(1);
@ -361,10 +361,10 @@ export function importViewsFile(path): Promise<any> {
} }
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let flag = true; let flag = true;
for (const path in allModules) { for (const path in dynamicPages) {
if (path == page) { if (path == page) {
flag = false; flag = false;
allModules[path]().then((mod) => { dynamicPages[path]().then((mod) => {
console.log(path, mod); console.log(path, mod);
resolve(mod); resolve(mod);
}); });
@ -669,3 +669,171 @@ export const split = (str) => {
} }
return str; return str;
}; };
/**
* 处理word文档中的o:p标签
* @param html
*/
export const removeSpecialTags = (html: string): string => {
if (!html) return '';
try {
const BORDER = '1px solid #8c8c8c';
// ===================================================================
// Office
// ===================================================================
// o:p
html = html.replace(/&lt;o:p[^&]*?&gt;.*?&lt;\/o:p&gt;/gis, '');
html = html.replace(/&lt;o:p[^&]*?\/?&gt;/gis, '');
html = html.replace(/&lt;\/o:p&gt;/gis, '');
html = html.replace(/<o:p[^>]*>.*?<\/o:p>/gis, '');
html = html.replace(/<o:p[^>]*\/?>/gis, '');
html = html.replace(/<\/o:p>/gis, '');
// style
html = html.replace(/&lt;style[^&]*?&gt;.*?&lt;\/style&gt;/gis, '');
html = html.replace(/&lt;style[^&]*?\/?&gt;/gis, '');
html = html.replace(/&lt;\/style&gt;/gis, '');
html = html.replace(/<style[^>]*>.*?<\/style>/gis, '');
// Office
html = html.replace(/<!--\[if[^>]*>.*?<!\[endif\]-->/gis, '');
html = html.replace(/<\/?w:[^>]*>/gis, '');
html = html.replace(/<\/?xml[^>]*>/gis, '');
html = html.replace(/<\/?v:[^>]*>/gis, '');
// ===================================================================
// DOM
// DOM !important
// ===================================================================
try {
const DOMParserCtor: any =
typeof DOMParser !== 'undefined' ? DOMParser : (globalThis as any).DOMParser;
if (DOMParserCtor) {
const parser = new DOMParserCtor() as DOMParser;
const doc = parser.parseFromString(html, 'text/html') as Document;
// <p>
const cells = doc.querySelectorAll('td,th');
for (let ci = 0; ci < cells.length; ci++) {
const cell = cells[ci] as HTMLElement;
if (!cell) continue;
const ps = cell.querySelectorAll('p');
for (let pi = ps.length - 1; pi >= 0; pi--) {
const p = ps[pi] as HTMLParagraphElement;
if (!p) continue;
const content = (p.innerHTML || '').replace(/&nbsp;|\u00A0/g, '').trim();
if (content === '') {
p.remove();
} else {
const frag = doc.createDocumentFragment();
while (p.firstChild) frag.appendChild(p.firstChild);
if (p.parentNode) p.parentNode.replaceChild(frag, p);
}
}
}
html = doc.body.innerHTML;
}
} catch (_) {
// DOM
}
// ===================================================================
// <style>
// DOM <style> DOM
// ===================================================================
const globalCSS = `<style>
table{border-collapse:collapse!important;border-spacing:0!important;width:100%!important;max-width:100%!important;}
table td,table th{border-top:${BORDER}!important;border-right:${BORDER}!important;border-bottom:${BORDER}!important;border-left:${BORDER}!important;padding:6px 8px!important;vertical-align:middle!important;box-sizing:border-box!important;empty-cells:show!important;}
table td p,table th p{margin:0!important;padding:0!important;line-height:1.4!important;}
img{max-width:100%!important;height:auto!important;display:block!important;}
</style>`;
if (/<head[^>]*>/i.test(html)) {
html = html.replace(/(<head[^>]*>)/i, `$1${globalCSS}`);
} else if (/<html[^>]*>/i.test(html)) {
html = html.replace(/(<html[^>]*>)/i, `$1<head>${globalCSS}</head>`);
} else {
html = globalCSS + html;
}
// ===================================================================
//
// HTML !important
//
// style
// border* mso-*
// !important
// ===================================================================
/**
* CSS style 字符串中移除所有 border* mso-* 声明
* 保留其余布局相关属性width, height, padding, text-align
*/
function stripBorderAndMso(styleStr: string): string {
return styleStr
.split(';')
.filter(function (decl) {
const trimmed = decl.trim();
if (!trimmed) return false;
const colonIdx = trimmed.indexOf(':');
if (colonIdx === -1) return true; //
const prop = trimmed.substring(0, colonIdx).trim().toLowerCase();
// border mso-
if (prop.startsWith('border') || prop.startsWith('mso-')) return false;
return true;
})
.join(';');
}
// 4a. <table> border="0" HTML
html = html.replace(/(<table\b[^>]*?)\sborder\s*=\s*['"]?0['"]?/gi, '$1');
// 4b. <table>
html = html.replace(/<table(\s[^>]*)>/gi, function (fullMatch, attrs) {
try {
const sm = attrs.match(/\sstyle\s*=\s*(["'])([\s\S]*?)\1/i);
if (sm) {
const q = sm[1];
const cleaned = stripBorderAndMso(sm[2]);
const newStyle = cleaned
+ ';border-collapse:collapse!important'
+ ';border-spacing:0!important'
+ ';width:100%!important';
return '<table' + attrs.replace(sm[0], ` style=${q}${newStyle}${q}`) + '>';
}
return '<table' + attrs
+ ' style="border-collapse:collapse!important;border-spacing:0!important;width:100%!important">';
} catch (_) { return fullMatch; }
});
// 4c. <td>/<th>
const cellBorderCSS =
`border-top:${BORDER}!important;` +
`border-right:${BORDER}!important;` +
`border-bottom:${BORDER}!important;` +
`border-left:${BORDER}!important;` +
'padding:6px 8px!important;' +
'vertical-align:middle!important;' +
'box-sizing:border-box!important';
html = html.replace(/<(td|th)(\s[^>]*)>/gi, function (fullMatch, tag, attrs) {
try {
const sm = attrs.match(/\sstyle\s*=\s*(["'])([\s\S]*?)\1/i);
if (sm) {
const q = sm[1];
const cleaned = stripBorderAndMso(sm[2]);
const newStyle = (cleaned ? cleaned + ';' : '') + cellBorderCSS;
return '<' + tag + attrs.replace(sm[0], ` style=${q}${newStyle}${q}`) + '>';
}
return '<' + tag + attrs + ` style="${cellBorderCSS}">`;
} catch (_) { return fullMatch; }
});
return html;
} catch (_) {
return html;
}
};

View File

@ -1,11 +1,9 @@
import type { App } from 'vue'; import type { App } from 'vue';
import { warn } from '/@/utils/log'; import { warn } from '/@/utils/log';
import { registerDynamicRouter } from '/@/utils/monorepo/dynamicRouter'; import { registerDynamicRouter } from '/@/utils/monorepo/dynamicRouter';
import { createAsyncComponent } from "@/utils/factory/createAsyncComponent";
// 访 // 访
const lazyPackages = [ const lazyPackages = [
{ name: '@jeecg/online', importer: () => import('@jeecg/online') },
{ name: '@jeecg/aiflow', importer: () => import('@jeecg/aiflow') }, { name: '@jeecg/aiflow', importer: () => import('@jeecg/aiflow') },
]; ];
@ -19,14 +17,14 @@ const installOptions = {
export function registerPackages(app: App) { export function registerPackages(app: App) {
// app // app
appInstance = app; appInstance = app;
app.component( // app.component(
'SuperQuery', // 'SuperQuery',
createAsyncComponent(() => import('@jeecg/online').then(mod => mod.SuperQuery)) // createAsyncComponent(() => import('@jeecg/online').then(mod => mod.SuperQuery))
); // );
app.component( // app.component(
'JOnlineSearchSelect', // 'JOnlineSearchSelect',
createAsyncComponent(() => import('@jeecg/online').then(mod => mod.JOnlineSearchSelect)) // createAsyncComponent(() => import('@jeecg/online').then(mod => mod.JOnlineSearchSelect))
); // );
} }
/** 已加载的包缓存 */ /** 已加载的包缓存 */

View File

@ -19,7 +19,7 @@ const __APP_INFO__ = {
lastBuildTime: dayjs().format('YYYY-MM-DD HH:mm:ss'), lastBuildTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
}; };
export default ({ command, mode }: ConfigEnv): UserConfig => { export default async ({ command, mode }: ConfigEnv): Promise<UserConfig> => {
const root = process.cwd(); const root = process.cwd();
const env = loadEnv(mode, root); const env = loadEnv(mode, root);
@ -86,6 +86,17 @@ export default ({ command, mode }: ConfigEnv): UserConfig => {
proxy: createProxy(VITE_PROXY), proxy: createProxy(VITE_PROXY),
// server // server
...serverOptions, ...serverOptions,
// update-begin--author:liaozhiyang---date:20260306---for:QQYUN-14801vite访
//
warmup: {
clientFiles: [
'./src/main.ts',
'./src/App.vue',
'./src/views/system/loginmini/MiniLogin.vue',
'src/layouts/default/index.vue'
],
},
// update-end--author:liaozhiyang---date:20260306---for:QQYUN-14801vite访
}, },
build: { build: {
minify: 'esbuild', minify: 'esbuild',
@ -94,7 +105,7 @@ export default ({ command, mode }: ConfigEnv): UserConfig => {
outDir: OUTPUT_DIR, outDir: OUTPUT_DIR,
rollupOptions: { rollupOptions: {
// //
treeshake: false, // treeshake: false,
output: { output: {
chunkFileNames: 'js/[name]-[hash].js', // chunkFileNames: 'js/[name]-[hash].js', //
entryFileNames: 'js/[name]-[hash].js', // entryFileNames: 'js/[name]-[hash].js', //
@ -102,10 +113,7 @@ export default ({ command, mode }: ConfigEnv): UserConfig => {
manualChunks: { manualChunks: {
// vue vue-router // vue vue-router
'vue-vendor': ['vue', 'vue-router'], 'vue-vendor': ['vue', 'vue-router'],
'antd-vue-vendor': ['ant-design-vue','@ant-design/icons-vue','@ant-design/colors'],
'vxe-table-vendor': ['vxe-table','vxe-table-plugin-antd','xe-utils'],
'emoji-mart-vue-fast': ['emoji-mart-vue-fast'], 'emoji-mart-vue-fast': ['emoji-mart-vue-fast'],
'china-area-data-vendor': ['china-area-data']
}, },
}, },
}, },
@ -134,19 +142,37 @@ export default ({ command, mode }: ConfigEnv): UserConfig => {
}, },
// The vite plugin used by the project. The quantity is large, so it is separately extracted and managed // The vite plugin used by the project. The quantity is large, so it is separately extracted and managed
// ) plugins: await createVitePlugins(viteEnv, isBuild, isQiankunMicro),
plugins: createVitePlugins(viteEnv, isBuild, isQiankunMicro),
optimizeDeps: { optimizeDeps: {
esbuildOptions: { esbuildOptions: {
target: 'es2020', target: 'es2020',
}, },
// @iconify/iconify: The dependency is dynamically and virtually loaded by @purge-icons/generated, so it needs to be specified explicitly
include: [
// clipboardVite6CommonJS
'clipboard',
'@vue/shared',
'@iconify/iconify',
'ant-design-vue/es/locale/zh_CN',
'ant-design-vue/es/locale/en_US',
// update-begin--author:scott---date:20260427---for: @jeecg/aiflow lib node_modules
// Vite node_modules mjs ant-design-vue/es/vc-picker/generate/dayjs.js
// dayjs UMD/CJS "does not provide an export named 'default'"
// vc-picker dayjs esbuild ESM
'dayjs/plugin/advancedFormat',
'dayjs/plugin/customParseFormat',
'dayjs/plugin/weekday',
'dayjs/plugin/localeData',
'dayjs/plugin/weekOfYear',
'dayjs/plugin/weekYear',
'dayjs/plugin/quarterOfYear',
// update-end--author:scott---date:20260427---for: @jeecg/aiflow dayjs default
],
exclude: [ exclude: [
//vite4online //vite4onlineaiflow
'@jeecg/online',
'@jeecg/aiflow', '@jeecg/aiflow',
], ],
// clipboardVite6CommonJS
include: ['clipboard']
}, },
}; };
}; };