Reduce web ele bootstrap dependencies

This commit is contained in:
2026-06-09 10:35:05 +08:00
parent 429ceb0a28
commit e5faa6e061
7 changed files with 111 additions and 75 deletions
+1 -1
View File
@@ -15,7 +15,7 @@ import { useAppContextStore } from '#/store/app-context';
import { initComponentAdapter } from './adapter/component';
import { initSetupVbenForm, useVbenForm } from './adapter/form';
import App from './app.vue';
import { setupZqTable } from './components/zq-table';
import { setupZqTable } from './components/zq-table/init';
import { setupElementPlus } from './plugins/element-plus';
import { router } from './router';
@@ -37,7 +37,6 @@
"dependencies": {
"@vben-core/shared": "workspace:*",
"@vueuse/core": "catalog:",
"radix-vue": "catalog:",
"sortablejs": "catalog:",
"vue": "catalog:"
},
+1 -6
View File
@@ -1,13 +1,8 @@
export * from './use-is-mobile';
export * from './use-forward-props';
export * from './use-layout-style';
export * from './use-namespace';
export * from './use-priority-value';
export * from './use-scroll-lock';
export * from './use-simple-locale';
export * from './use-sortable';
export {
useEmitAsProps,
useForwardExpose,
useForwardProps,
useForwardPropsEmits,
} from 'radix-vue';
@@ -0,0 +1,89 @@
import type { EmitsOptions, MaybeRefOrGetter } from 'vue';
import {
camelize,
computed,
getCurrentInstance,
toHandlerKey,
toValue,
} from 'vue';
function getEmitKeys(emits?: EmitsOptions | null) {
if (Array.isArray(emits)) {
return emits;
}
if (emits && typeof emits === 'object') {
return Object.keys(emits);
}
return [];
}
function useEmitAsProps<Name extends string>(
emit: (name: Name, ...args: any[]) => void,
) {
const vm = getCurrentInstance();
const emitKeys = getEmitKeys(vm?.type.emits);
const emitProps: Record<string, any> = {};
for (const key of emitKeys) {
emitProps[toHandlerKey(camelize(key))] = (...args: any[]) =>
emit(key as Name, ...args);
}
return emitProps;
}
function useForwardProps<T extends Record<string, any>>(
props: MaybeRefOrGetter<T>,
) {
const vm = getCurrentInstance();
const defaultProps = Object.keys(vm?.type.props ?? {}).reduce(
(defaults, key) => {
const defaultValue = (vm?.type.props as Record<string, any>)[key]?.default;
if (defaultValue !== undefined) {
defaults[key] = defaultValue;
}
return defaults;
},
{} as Record<string, any>,
);
return computed(() => {
const forwardedProps: Record<string, any> = {};
const vnodeProps = Object.keys(vm?.vnode.props ?? {}).reduce(
(normalizedProps, key) => {
normalizedProps[camelize(key)] = vm?.vnode.props?.[key];
return normalizedProps;
},
{} as Record<string, any>,
);
const currentProps = toValue(props);
for (const key of Object.keys({ ...defaultProps, ...vnodeProps })) {
const value = currentProps[key];
if (value !== undefined) {
forwardedProps[key] = value;
}
}
return forwardedProps as T;
});
}
function useForwardPropsEmits<
T extends Record<string, any>,
Name extends string,
>(
props: MaybeRefOrGetter<T>,
emit?: (name: Name, ...args: any[]) => void,
) {
const forwardedProps = useForwardProps(props);
const emitProps = emit ? useEmitAsProps(emit) : {};
return computed(() => ({
...forwardedProps.value,
...emitProps,
}));
}
export { useEmitAsProps, useForwardProps, useForwardPropsEmits };
-1
View File
@@ -25,7 +25,6 @@
"@vben-core/typings": "workspace:*",
"pinia": "catalog:",
"pinia-plugin-persistedstate": "catalog:",
"secure-ls": "catalog:",
"vue": "catalog:",
"vue-router": "catalog:"
}
+1 -18
View File
@@ -3,7 +3,6 @@ import type { Pinia } from 'pinia';
import type { App } from 'vue';
import { createPinia } from 'pinia';
import SecureLS from 'secure-ls';
let pinia: Pinia;
@@ -21,27 +20,11 @@ export async function initStores(app: App, options: InitStoreOptions) {
const { createPersistedState } = await import('pinia-plugin-persistedstate');
pinia = createPinia();
const { namespace } = options;
const ls = new SecureLS({
encodingType: 'aes',
encryptionSecret: import.meta.env.VITE_APP_STORE_SECURE_KEY,
isCompression: true,
// @ts-ignore secure-ls does not have a type definition for this
metaKey: `${namespace}-secure-meta`,
});
pinia.use(
createPersistedState({
// key $appName-$store.id
key: (storeKey) => `${namespace}-${storeKey}`,
storage: import.meta.env.DEV
? localStorage
: {
getItem(key) {
return ls.get(key);
},
setItem(key, value) {
ls.set(key, value);
},
},
storage: localStorage,
}),
);
app.use(pinia);
+19 -48
View File
@@ -375,9 +375,6 @@ catalogs:
sass:
specifier: ^1.89.2
version: 1.94.2
secure-ls:
specifier: ^2.0.0
version: 2.0.0
sortablejs:
specifier: 1.15.6
version: 1.15.6
@@ -589,10 +586,10 @@ importers:
version: link:scripts/vsh
'@vitejs/plugin-vue':
specifier: 'catalog:'
version: 6.0.2(vite@7.2.6(@types/node@22.19.1)(jiti@1.21.7)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))
version: 6.0.2(vite@7.2.6(@types/node@22.19.1)(jiti@2.6.1)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))
'@vitejs/plugin-vue-jsx':
specifier: 'catalog:'
version: 5.1.2(vite@7.2.6(@types/node@22.19.1)(jiti@1.21.7)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))
version: 5.1.2(vite@7.2.6(@types/node@22.19.1)(jiti@2.6.1)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))
'@vue/test-utils':
specifier: 'catalog:'
version: 2.4.6
@@ -634,10 +631,10 @@ importers:
version: 3.6.1(sass@1.94.2)(typescript@5.9.3)(vue-tsc@2.2.10(typescript@5.9.3))(vue@3.5.25(typescript@5.9.3))
vite:
specifier: 'catalog:'
version: 7.2.6(@types/node@22.19.1)(jiti@1.21.7)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2)
version: 7.2.6(@types/node@22.19.1)(jiti@2.6.1)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2)
vitest:
specifier: 'catalog:'
version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.1)(happy-dom@17.6.3)(jiti@1.21.7)(jsdom@26.1.0(canvas@3.2.2))(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2)
version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.1)(happy-dom@17.6.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@3.2.2))(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2)
vue:
specifier: ^3.5.17
version: 3.5.25(typescript@5.9.3)
@@ -1247,9 +1244,6 @@ importers:
'@vueuse/core':
specifier: 'catalog:'
version: 13.4.0(vue@3.5.25(typescript@5.9.3))
radix-vue:
specifier: 'catalog:'
version: 1.9.17(vue@3.5.25(typescript@5.9.3))
sortablejs:
specifier: 'catalog:'
version: 1.15.6
@@ -1733,9 +1727,6 @@ importers:
pinia-plugin-persistedstate:
specifier: 'catalog:'
version: 4.7.1(@nuxt/kit@3.20.1(magicast@0.5.1))(pinia@3.0.4(typescript@5.9.3)(vue@3.5.25(typescript@5.9.3)))
secure-ls:
specifier: 'catalog:'
version: 2.0.0
vue:
specifier: ^3.5.17
version: 3.5.25(typescript@5.9.3)
@@ -5768,9 +5759,6 @@ packages:
crossws@0.3.5:
resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==}
crypto-js@4.2.0:
resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==}
crypto-random-string@2.0.0:
resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==}
engines: {node: '>=8'}
@@ -7843,10 +7831,6 @@ packages:
resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==}
engines: {node: '>=12'}
lz-string@1.5.0:
resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
hasBin: true
magic-string@0.25.9:
resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
@@ -9423,10 +9407,6 @@ packages:
resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
engines: {node: '>=4'}
secure-ls@2.0.0:
resolution: {integrity: sha512-Wgtnw0QSm0v7gVKv11nOoeyGS65EThGXnBB7jfd4IhZd2eq3B4AMPcXAL5qJ1h55+Qolun7TONTwX7H5m6e2pQ==}
engines: {node: '>=8.0'}
select@1.1.2:
resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==}
@@ -14345,14 +14325,14 @@ snapshots:
dependencies:
vite: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2)
'@vitejs/plugin-vue-jsx@5.1.2(vite@7.2.6(@types/node@22.19.1)(jiti@1.21.7)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))':
'@vitejs/plugin-vue-jsx@5.1.2(vite@7.2.6(@types/node@22.19.1)(jiti@2.6.1)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))':
dependencies:
'@babel/core': 7.28.5
'@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5)
'@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.5)
'@rolldown/pluginutils': 1.0.0-beta.52
'@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.28.5)
vite: 7.2.6(@types/node@22.19.1)(jiti@1.21.7)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2)
vite: 7.2.6(@types/node@22.19.1)(jiti@2.6.1)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2)
vue: 3.5.25(typescript@5.9.3)
transitivePeerDependencies:
- supports-color
@@ -14374,10 +14354,10 @@ snapshots:
vite: 5.4.21(@types/node@24.10.1)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)
vue: 3.5.25(typescript@5.9.3)
'@vitejs/plugin-vue@6.0.2(vite@7.2.6(@types/node@22.19.1)(jiti@1.21.7)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))':
'@vitejs/plugin-vue@6.0.2(vite@7.2.6(@types/node@22.19.1)(jiti@2.6.1)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))':
dependencies:
'@rolldown/pluginutils': 1.0.0-beta.50
vite: 7.2.6(@types/node@22.19.1)(jiti@1.21.7)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2)
vite: 7.2.6(@types/node@22.19.1)(jiti@2.6.1)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2)
vue: 3.5.25(typescript@5.9.3)
'@vitejs/plugin-vue@6.0.2(vite@7.2.6(@types/node@24.10.1)(jiti@2.6.1)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))':
@@ -14394,13 +14374,13 @@ snapshots:
chai: 5.3.3
tinyrainbow: 2.0.0
'@vitest/mocker@3.2.4(vite@7.2.6(@types/node@22.19.1)(jiti@1.21.7)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2))':
'@vitest/mocker@3.2.4(vite@7.2.6(@types/node@22.19.1)(jiti@2.6.1)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2))':
dependencies:
'@vitest/spy': 3.2.4
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
vite: 7.2.6(@types/node@22.19.1)(jiti@1.21.7)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2)
vite: 7.2.6(@types/node@22.19.1)(jiti@2.6.1)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2)
'@vitest/pretty-format@3.2.4':
dependencies:
@@ -15579,8 +15559,6 @@ snapshots:
dependencies:
uncrypto: 0.1.3
crypto-js@4.2.0: {}
crypto-random-string@2.0.0: {}
cspell-config-lib@8.19.4:
@@ -17823,8 +17801,6 @@ snapshots:
luxon@3.7.2: {}
lz-string@1.5.0: {}
magic-string@0.25.9:
dependencies:
sourcemap-codec: 1.4.8
@@ -19464,11 +19440,6 @@ snapshots:
extend-shallow: 2.0.1
kind-of: 6.0.3
secure-ls@2.0.0:
dependencies:
crypto-js: 4.2.0
lz-string: 1.5.0
select@1.1.2: {}
semver-compare@1.0.0: {}
@@ -20579,13 +20550,13 @@ snapshots:
dependencies:
vite: 7.2.6(@types/node@24.10.1)(jiti@2.6.1)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2)
vite-node@3.2.4(@types/node@22.19.1)(jiti@1.21.7)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2):
vite-node@3.2.4(@types/node@22.19.1)(jiti@2.6.1)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2):
dependencies:
cac: 6.7.14
debug: 4.4.3
es-module-lexer: 1.7.0
pathe: 2.0.3
vite: 7.2.6(@types/node@22.19.1)(jiti@1.21.7)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2)
vite: 7.2.6(@types/node@22.19.1)(jiti@2.6.1)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2)
transitivePeerDependencies:
- '@types/node'
- jiti
@@ -20754,7 +20725,7 @@ snapshots:
sass: 1.94.2
terser: 5.44.1
vite@7.2.6(@types/node@22.19.1)(jiti@1.21.7)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2):
vite@7.2.6(@types/node@22.19.1)(jiti@2.6.1)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2):
dependencies:
esbuild: 0.25.3
fdir: 6.5.0(picomatch@4.0.3)
@@ -20765,7 +20736,7 @@ snapshots:
optionalDependencies:
'@types/node': 22.19.1
fsevents: 2.3.3
jiti: 1.21.7
jiti: 2.6.1
less: 4.4.2
sass: 1.94.2
terser: 5.44.1
@@ -20845,11 +20816,11 @@ snapshots:
- typescript
- universal-cookie
vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.1)(happy-dom@17.6.3)(jiti@1.21.7)(jsdom@26.1.0(canvas@3.2.2))(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2):
vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.1)(happy-dom@17.6.3)(jiti@2.6.1)(jsdom@26.1.0(canvas@3.2.2))(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2):
dependencies:
'@types/chai': 5.2.3
'@vitest/expect': 3.2.4
'@vitest/mocker': 3.2.4(vite@7.2.6(@types/node@22.19.1)(jiti@1.21.7)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2))
'@vitest/mocker': 3.2.4(vite@7.2.6(@types/node@22.19.1)(jiti@2.6.1)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2))
'@vitest/pretty-format': 3.2.4
'@vitest/runner': 3.2.4
'@vitest/snapshot': 3.2.4
@@ -20867,8 +20838,8 @@ snapshots:
tinyglobby: 0.2.15
tinypool: 1.1.1
tinyrainbow: 2.0.0
vite: 7.2.6(@types/node@22.19.1)(jiti@1.21.7)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2)
vite-node: 3.2.4(@types/node@22.19.1)(jiti@1.21.7)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2)
vite: 7.2.6(@types/node@22.19.1)(jiti@2.6.1)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2)
vite-node: 3.2.4(@types/node@22.19.1)(jiti@2.6.1)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/debug': 4.1.13
@@ -20893,7 +20864,7 @@ snapshots:
dependencies:
'@types/chai': 5.2.3
'@vitest/expect': 3.2.4
'@vitest/mocker': 3.2.4(vite@7.2.6(@types/node@22.19.1)(jiti@1.21.7)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2))
'@vitest/mocker': 3.2.4(vite@7.2.6(@types/node@22.19.1)(jiti@2.6.1)(less@4.4.2)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2))
'@vitest/pretty-format': 3.2.4
'@vitest/runner': 3.2.4
'@vitest/snapshot': 3.2.4