Browse Source

fix: fix the preference problem,close #8, close #9

vince 8 months ago
parent
commit
53d37ee882

+ 1 - 1
apps/web-antd/package.json

@@ -1,5 +1,5 @@
 {
-  "name": "@vben/antd-view",
+  "name": "@vben/web-antd",
   "version": "5.0.0",
   "homepage": "https://github.com/vbenjs/vue-vben-admin",
   "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",

+ 1 - 1
internal/tailwind-config/package.json

@@ -45,7 +45,7 @@
     "tailwindcss": "^3.4.3"
   },
   "dependencies": {
-    "@iconify/json": "^2.2.224",
+    "@iconify/json": "^2.2.225",
     "@iconify/tailwind": "^1.1.1",
     "@tailwindcss/forms": "^0.5.7",
     "@tailwindcss/nesting": "0.0.0-insiders.565cd3e",

+ 1 - 1
package.json

@@ -74,7 +74,7 @@
     "unbuild": "^2.0.0",
     "vite": "^5.3.3",
     "vitest": "^2.0.0-beta.12",
-    "vue-tsc": "^2.0.24"
+    "vue-tsc": "^2.0.26"
   },
   "engines": {
     "node": ">=20",

+ 7 - 40
packages/@core/forward/preferences/src/preferences.ts

@@ -107,29 +107,6 @@ class PreferenceManager {
       return;
     }
 
-    // const debounceWaterState = useDebounceFn(() => {
-    //   const newFlattenedState = flattenObject(this.state);
-    //   for (const k in newFlattenedState) {
-    //     const key = k as FlattenObjectKeys<Preferences>;
-    //     this.flattenedState[key] = newFlattenedState[key];
-    //   }
-    //   this.savePreferences(this.state);
-    // }, 16);
-
-    // const debounceWaterFlattenedState = useDebounceFn(
-    //   (val: Flatten<Preferences>) => {
-    //     this.updateState(val);
-    //     this.savePreferences(this.state);
-    //   },
-    //   16,
-    // );
-
-    // 监听 state 的变化
-    // watch(this.state, debounceWaterState, { deep: true });
-
-    // 监听 flattenedState 的变化并触发 set 方法
-    // watch(this.flattenedState, debounceWaterFlattenedState, { deep: true });
-
     // 监听断点,判断是否移动端
     const breakpoints = useBreakpoints(breakpointsTailwind);
     const isMobile = breakpoints.smaller('md');
@@ -210,16 +187,6 @@ class PreferenceManager {
     updateCSSVariables(colorVariables);
   }
 
-  /**
-   *  更新状态
-   * 将新的扁平对象转换为嵌套对象,并与当前状态合并。
-   * @param {FlattenObject<Preferences>} newValue - 新的扁平对象
-   */
-  // private updateState(newValue: Flatten<Preferences>) {
-  //   const nestObj = nestedObject(newValue, 2);
-  //   Object.assign(this.state, merge(nestObj, this.state));
-  // }
-
   /**
    * 更新主题
    * @param preferences - 当前偏好设置对象,它的主题值将被用来设置文档的主题。
@@ -278,9 +245,11 @@ class PreferenceManager {
     }
   }
 
-  // public getFlatPreferences() {
-  //   return this.flattenedState;
-  // }
+  clearCache() {
+    [STORAGE_KEY, STORAGE_KEY_LOCALE, STORAGE_KEY_THEME].forEach((key) => {
+      this.cache?.removeItem(key);
+    });
+  }
 
   public getInitialPreferences() {
     return this.initialPreferences;
@@ -308,8 +277,8 @@ class PreferenceManager {
     // 加载并合并当前存储的偏好设置
     const mergedPreference = merge(
       {},
-      this.loadCachedPreferences(),
-      this.initialPreferences,
+      overrides,
+      this.loadCachedPreferences() || defaultPreferences,
     );
 
     // 更新偏好设置
@@ -352,8 +321,6 @@ class PreferenceManager {
 
     Object.assign(this.state, mergedState);
 
-    // Object.assign(this.flattenedState, flattenObject(this.state));
-
     // 根据更新的键值执行相应的操作
     this.handleUpdates(updates);
     this.savePreferences(this.state);

+ 0 - 127
packages/@core/forward/request/src/request-client/modules/canceler.test.ts

@@ -1,127 +0,0 @@
-import type { AxiosRequestConfig, InternalAxiosRequestConfig } from 'axios';
-
-import { beforeEach, describe, expect, it, vi } from 'vitest';
-
-import { AxiosCanceler } from './canceler';
-
-describe('axiosCanceler', () => {
-  let axiosCanceler: AxiosCanceler;
-
-  beforeEach(() => {
-    axiosCanceler = new AxiosCanceler();
-  });
-
-  it('should generate a unique request key', () => {
-    const config: AxiosRequestConfig = {
-      data: { name: 'test' },
-      method: 'get',
-      params: { id: 1 },
-      url: '/test',
-    };
-    const requestKey = axiosCanceler.getRequestKey(config);
-    expect(requestKey).toBe('get:/test:{"id":1}:{"name":"test"}');
-  });
-
-  it('should add a request and create an AbortController', () => {
-    const config: InternalAxiosRequestConfig = {
-      data: { name: 'test' },
-      method: 'get',
-      params: { id: 1 },
-      url: '/test',
-    } as InternalAxiosRequestConfig;
-
-    const updatedConfig = axiosCanceler.addRequest(config);
-    expect(updatedConfig.signal).toBeInstanceOf(AbortSignal);
-  });
-
-  it('should cancel an existing request if a duplicate is added', () => {
-    const config: InternalAxiosRequestConfig = {
-      data: { name: 'test' },
-      method: 'get',
-      params: { id: 1 },
-      url: '/test',
-    } as InternalAxiosRequestConfig;
-
-    axiosCanceler.addRequest(config);
-    const controller = axiosCanceler.pending.get(
-      'get:/test:{"id":1}:{"name":"test"}',
-    );
-    expect(controller).toBeDefined();
-
-    if (controller) {
-      const spy = vi.spyOn(controller, 'abort');
-
-      axiosCanceler.addRequest(config);
-      expect(spy).toHaveBeenCalled();
-    }
-  });
-
-  it('should remove a request', () => {
-    const config: AxiosRequestConfig = {
-      data: { name: 'test' },
-      method: 'get',
-      params: { id: 1 },
-      url: '/test',
-    };
-
-    axiosCanceler.addRequest(config as InternalAxiosRequestConfig);
-    axiosCanceler.removeRequest(config);
-    expect(axiosCanceler.pending.size).toBe(0);
-  });
-
-  it('should remove all pending requests', () => {
-    const config1: InternalAxiosRequestConfig = {
-      data: { name: 'test1' },
-      method: 'get',
-      params: { id: 1 },
-      url: '/test1',
-    } as InternalAxiosRequestConfig;
-
-    const config2: InternalAxiosRequestConfig = {
-      data: { name: 'test2' },
-      method: 'get',
-      params: { id: 2 },
-      url: '/test2',
-    } as InternalAxiosRequestConfig;
-
-    axiosCanceler.addRequest(config1);
-    axiosCanceler.addRequest(config2);
-
-    axiosCanceler.removeAllPending();
-    expect(axiosCanceler.pending.size).toBe(0);
-  });
-
-  it('should handle empty config gracefully', () => {
-    const config = {} as InternalAxiosRequestConfig;
-    const updatedConfig = axiosCanceler.addRequest(config);
-    expect(updatedConfig.signal).toBeInstanceOf(AbortSignal);
-  });
-
-  it('should handle undefined params and data gracefully', () => {
-    const config: InternalAxiosRequestConfig = {
-      method: 'get',
-      url: '/test',
-    } as InternalAxiosRequestConfig;
-
-    const requestKey = axiosCanceler.getRequestKey(config);
-    expect(requestKey).toBe('get:/test:{}:{}');
-  });
-
-  it('should not abort if no controller exists for the request key', () => {
-    const config: InternalAxiosRequestConfig = {
-      data: { name: 'test' },
-      method: 'get',
-      params: { id: 1 },
-      url: '/test',
-    } as InternalAxiosRequestConfig;
-
-    const requestKey = axiosCanceler.getRequestKey(config);
-    const spy = vi.spyOn(AbortController.prototype, 'abort');
-
-    axiosCanceler.addRequest(config);
-    axiosCanceler.pending.delete(requestKey);
-    axiosCanceler.addRequest(config);
-
-    expect(spy).not.toHaveBeenCalled();
-  });
-});

+ 0 - 52
packages/@core/forward/request/src/request-client/modules/canceler.ts

@@ -1,52 +0,0 @@
-import type {
-  AxiosRequestConfig,
-  AxiosResponse,
-  InternalAxiosRequestConfig,
-} from 'axios';
-
-class AxiosCanceler {
-  public pending: Map<string, AbortController> = new Map();
-
-  // 添加请求
-  public addRequest(
-    config: InternalAxiosRequestConfig,
-  ): InternalAxiosRequestConfig {
-    const requestKey = this.getRequestKey(config);
-    if (this.pending.has(requestKey)) {
-      // 如果存在相同的请求,取消前一个请求
-      const controller = this.pending.get(requestKey);
-      controller?.abort();
-    }
-
-    // 创建新的AbortController并添加到pending中
-    const controller = new AbortController();
-    config.signal = controller.signal;
-    this.pending.set(requestKey, controller);
-
-    return config;
-  }
-
-  // 生成请求的唯一标识
-  public getRequestKey(config: AxiosRequestConfig): string {
-    const { data = {}, method, params = {}, url } = config;
-    return `${method}:${url}:${JSON.stringify(params)}:${JSON.stringify(data)}`;
-  }
-
-  /**
-   * 清除所有等待中的请求
-   */
-  public removeAllPending(): void {
-    for (const [, abortController] of this.pending) {
-      abortController?.abort();
-    }
-    this.pending.clear();
-  }
-
-  // 移除请求
-  public removeRequest(config: AxiosRequestConfig | AxiosResponse): void {
-    const requestKey = this.getRequestKey(config);
-    this.pending.delete(requestKey);
-  }
-}
-
-export { AxiosCanceler };

+ 0 - 25
packages/@core/forward/request/src/request-client/request-client.ts

@@ -12,7 +12,6 @@ import { merge } from '@vben-core/toolkit';
 
 import axios from 'axios';
 
-import { AxiosCanceler } from './modules/canceler';
 import { FileDownloader } from './modules/downloader';
 import { InterceptorManager } from './modules/interceptor';
 import { FileUploader } from './modules/uploader';
@@ -97,8 +96,6 @@ class RequestClient {
   private setupInterceptors() {
     // 默认拦截器
     this.setupAuthorizationInterceptor();
-    // 设置取消请求的拦截器
-    this.setupCancelerInterceptor();
   }
 
   /**
@@ -168,28 +165,6 @@ class RequestClient {
       throw error.response ? error.response.data : error;
     }
   }
-
-  public setupCancelerInterceptor() {
-    const axiosCanceler = new AxiosCanceler();
-    // 注册取消重复请求的请求拦截器
-    this.addRequestInterceptor((config: InternalAxiosRequestConfig) => {
-      return axiosCanceler.addRequest(config);
-    }, this.errorHandler);
-
-    // 注册移除请求的响应拦截器
-    this.addResponseInterceptor(
-      (response: AxiosResponse) => {
-        axiosCanceler.removeRequest(response);
-        return response;
-      },
-      (error) => {
-        if (error.config) {
-          axiosCanceler.removeRequest(error.config);
-        }
-        return Promise.reject(error);
-      },
-    );
-  }
 }
 
 export { RequestClient };

+ 1 - 1
packages/@core/forward/stores/src/modules/access.test.ts

@@ -22,7 +22,7 @@ describe('useAccessStore', () => {
     expect(store.userInfo).toBeNull();
     expect(store.userRoles).toEqual([]);
 
-    const userInfo: any = { name: 'John Doe', roles: [{ value: 'admin' }] };
+    const userInfo: any = { name: 'John Doe', roles: ['admin'] };
     store.setUserInfo(userInfo);
 
     expect(store.userInfo).toEqual(userInfo);

+ 1 - 1
packages/@core/ui-kit/shadcn-ui/package.json

@@ -49,7 +49,7 @@
     "@vben-core/typings": "workspace:*",
     "@vueuse/core": "^10.11.0",
     "class-variance-authority": "^0.7.0",
-    "radix-vue": "^1.8.5",
+    "radix-vue": "^1.9.0",
     "vue": "^3.4.31",
     "vue-sonner": "^1.1.3"
   }

+ 1 - 1
packages/business/layouts/src/basic/widgets/breadcrumb.vue

@@ -16,7 +16,7 @@ interface Props {
 }
 
 const props = withDefaults(defineProps<Props>(), {
-  showHome: true,
+  showHome: false,
   showIcon: false,
   type: 'normal',
 });

+ 2 - 2
packages/business/widgets/src/preferences/preferences-widget.vue

@@ -16,8 +16,8 @@ import Preferences from './preferences.vue';
     :app-semi-dark-menu="preferences.app.semiDarkMenu"
     :breadcrumb-enable="preferences.breadcrumb.enable"
     :breadcrumb-hide-only-one="preferences.breadcrumb.hideOnlyOne"
-    :breadcrumb-home="preferences.breadcrumb.showHome"
-    :breadcrumb-icon="preferences.breadcrumb.showIcon"
+    :breadcrumb-show-home="preferences.breadcrumb.showHome"
+    :breadcrumb-show-icon="preferences.breadcrumb.showIcon"
     :breadcrumb-style-type="preferences.breadcrumb.styleType"
     :footer-enable="preferences.footer.enable"
     :footer-fixed="preferences.footer.fixed"

+ 1 - 1
packages/locales/src/langs/zh-CN.yaml

@@ -190,7 +190,7 @@ preferences:
     icon: 显示面包屑图标
     home: 显示首页按钮
     style: 面包屑风格
-    hide-only-one: 有一个时隐藏
+    hide-only-one: 有一个时隐藏
     background: 背景
   animation:
     title: 动画

+ 60 - 60
pnpm-lock.yaml

@@ -88,7 +88,7 @@ importers:
         version: 5.5.3
       unbuild:
         specifier: ^2.0.0
-        version: 2.0.0(sass@1.77.6)(typescript@5.5.3)(vue-tsc@2.0.24(typescript@5.5.3))
+        version: 2.0.0(sass@1.77.6)(typescript@5.5.3)(vue-tsc@2.0.26(typescript@5.5.3))
       vite:
         specifier: ^5.3.3
         version: 5.3.3(@types/node@20.14.9)(sass@1.77.6)(terser@5.31.1)
@@ -96,8 +96,8 @@ importers:
         specifier: ^2.0.0-beta.12
         version: 2.0.0-beta.12(@types/node@20.14.9)(jsdom@24.1.0)(sass@1.77.6)(terser@5.31.1)
       vue-tsc:
-        specifier: ^2.0.24
-        version: 2.0.24(typescript@5.5.3)
+        specifier: ^2.0.26
+        version: 2.0.26(typescript@5.5.3)
 
   apps/backend-mock:
     dependencies:
@@ -432,8 +432,8 @@ importers:
   internal/tailwind-config:
     dependencies:
       '@iconify/json':
-        specifier: ^2.2.224
-        version: 2.2.224
+        specifier: ^2.2.225
+        version: 2.2.225
       '@iconify/tailwind':
         specifier: ^1.1.1
         version: 1.1.1
@@ -755,8 +755,8 @@ importers:
         specifier: ^0.7.0
         version: 0.7.0
       radix-vue:
-        specifier: ^1.8.5
-        version: 1.8.5(vue@3.4.31(typescript@5.5.3))
+        specifier: ^1.9.0
+        version: 1.9.0(vue@3.4.31(typescript@5.5.3))
       vue:
         specifier: ^3.4.31
         version: 3.4.31(typescript@5.5.3)
@@ -2951,14 +2951,14 @@ packages:
   '@floating-ui/core@1.6.2':
     resolution: {integrity: sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==}
 
-  '@floating-ui/dom@1.6.5':
-    resolution: {integrity: sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==}
+  '@floating-ui/dom@1.6.7':
+    resolution: {integrity: sha512-wmVfPG5o2xnKDU4jx/m4w5qva9FWHcnZ8BvzEe90D/RpwsJaTAVYPEPdQ8sbr/N8zZTAHlZUTQdqg8ZUbzHmng==}
 
-  '@floating-ui/utils@0.2.2':
-    resolution: {integrity: sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==}
+  '@floating-ui/utils@0.2.4':
+    resolution: {integrity: sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA==}
 
-  '@floating-ui/vue@1.0.6':
-    resolution: {integrity: sha512-EdrOljjkpkkqZnrpqUcPoz9NvHxuTjUtSInh6GMv3+Mcy+giY2cE2pHh9rpacRcZ2eMSCxel9jWkWXTjLmY55w==}
+  '@floating-ui/vue@1.1.1':
+    resolution: {integrity: sha512-cyawjk9etPZPl/RVtMRnWrwtAhWbPVSrRVYARgOzhLIqxr0k2up1APrrFjqP9QwRQ0AwjKSvbWg4YC6jESutow==}
 
   '@gar/promisify@1.1.3':
     resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==}
@@ -2982,8 +2982,8 @@ packages:
     resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
     deprecated: Use @eslint/object-schema instead
 
-  '@iconify/json@2.2.224':
-    resolution: {integrity: sha512-VK7nFjtxUeyp+K311SbbeU8cxlZifiUWh0yYaXks4Sj0DTzubKTDMzRCuTcO/QdEQ/0qwDE8m2nn5+wQjS66gQ==}
+  '@iconify/json@2.2.225':
+    resolution: {integrity: sha512-3MxzXdrxDxItlGxvTmLnbZGlvGcwuBIOofJfyobq097lysZasvsNddFguiWecmKP91nRR4I2ik7enFVQ9Lz3mg==}
 
   '@iconify/tailwind@1.1.1':
     resolution: {integrity: sha512-4mmA//qjZigv7D4KlqcVSYTqfRIJzyts2/lSCAJfCL0rVMIE76+ifJnaE5jxCo1+nYGBF8FsFo0qFOs+sX4EnA==}
@@ -3505,11 +3505,11 @@ packages:
     peerDependencies:
       tailwindcss: '>=3.0.0 || insiders'
 
-  '@tanstack/virtual-core@3.5.1':
-    resolution: {integrity: sha512-046+AUSiDru/V9pajE1du8WayvBKeCvJ2NmKPy/mR8/SbKKrqmSbj7LJBfXE+nSq4f5TBXvnCzu0kcYebI9WdQ==}
+  '@tanstack/virtual-core@3.8.1':
+    resolution: {integrity: sha512-uNtAwenT276M9QYCjTBoHZ8X3MUeCRoGK59zPi92hMIxdfS9AyHjkDWJ94WroDxnv48UE+hIeo21BU84jKc8aQ==}
 
-  '@tanstack/vue-virtual@3.5.1':
-    resolution: {integrity: sha512-6mc4HtDPieDVKD6GqzHiJkdzuqRNdQZuoIbkwE6af939WV+w62YmSF69jN+BOqClqh/ObiW+X1VOQx1Pftrx1A==}
+  '@tanstack/vue-virtual@3.8.1':
+    resolution: {integrity: sha512-uhty1LzUbbcVc5zdMMSUjUt/ECTlMCtK49Ww7dH2m4lNNLGYwkj5SbfrAD8uCZxV1VeV7DRMXqhwUTELyR5rrA==}
     peerDependencies:
       vue: ^3.4.31
 
@@ -3803,20 +3803,20 @@ packages:
   '@volar/language-core@1.11.1':
     resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==}
 
-  '@volar/language-core@2.4.0-alpha.5':
-    resolution: {integrity: sha512-CX+0vrNoCcO3tGZYIn7kNHug/u6+EImfbZe0tI6x/lCZc0MBJ7t9f6AKJT+mHJZ3ePhva6NVNv8mY1tNEURd5A==}
+  '@volar/language-core@2.4.0-alpha.15':
+    resolution: {integrity: sha512-mt8z4Fm2WxfQYoQHPcKVjLQV6PgPqyKLbkCVY2cr5RSaamqCHjhKEpsFX66aL4D/7oYguuaUw9Bx03Vt0TpIIA==}
 
   '@volar/source-map@1.11.1':
     resolution: {integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==}
 
-  '@volar/source-map@2.4.0-alpha.5':
-    resolution: {integrity: sha512-5OxMPGqbxaMuFXfj10k3xWwmJ2nb0b20kNaONAKxwUQxGY6nh6skX5AAFhIAbC8woplsVJpR0tAhgQR4S96VYQ==}
+  '@volar/source-map@2.4.0-alpha.15':
+    resolution: {integrity: sha512-8Htngw5TmBY4L3ClDqBGyfLhsB8EmoEXUH1xydyEtEoK0O6NX5ur4Jw8jgvscTlwzizyl/wsN1vn0cQXVbbXYg==}
 
   '@volar/typescript@1.11.1':
     resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==}
 
-  '@volar/typescript@2.4.0-alpha.5':
-    resolution: {integrity: sha512-D9nzGP09afyLlsXC5rzVeLzEaMLOmW1GGPyOiuXRRGTLshX+/cp+MNsUbwUd3pih0OhRmpUFl4VHpUGA2M4iBw==}
+  '@volar/typescript@2.4.0-alpha.15':
+    resolution: {integrity: sha512-U3StRBbDuxV6Woa4hvGS4kz3XcOzrWUKgFdEFN+ba1x3eaYg7+ytau8ul05xgA+UNGLXXsKur7fTUhDFyISk0w==}
 
   '@vue/babel-helper-vue-transform-on@1.2.2':
     resolution: {integrity: sha512-nOttamHUR3YzdEqdM/XXDyCSdxMA9VizUKoroLX6yTyRtggzQMHXcmwh8a7ZErcJttIBIc9s68a1B8GZ+Dmvsw==}
@@ -3891,8 +3891,8 @@ packages:
       typescript:
         optional: true
 
-  '@vue/language-core@2.0.24':
-    resolution: {integrity: sha512-997YD6Lq/66LXr3ZOLNxDCmyn13z9NP8LU1UZn9hGCDWhzlbXAIP0hOgL3w3x4RKEaWTaaRtsHP9DzHvmduruQ==}
+  '@vue/language-core@2.0.26':
+    resolution: {integrity: sha512-/lt6SfQ3O1yDAhPsnLv9iSUgXd1dMHqUm/t3RctfqjuwQf1LnftZ414X3UBn6aXT4MiwXWtbNJ4Z0NZWwDWgJQ==}
     peerDependencies:
       typescript: '*'
     peerDependenciesMeta:
@@ -7873,8 +7873,8 @@ packages:
     resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
     engines: {node: '>=10'}
 
-  radix-vue@1.8.5:
-    resolution: {integrity: sha512-aWRa/tc5EHS2U4h8YTovRtwSMt+Sbk4QRekNTpkshCWlq353mpGBsp0ME/4seOxWn7JKze8NA3pDx/AQuH2tMw==}
+  radix-vue@1.9.0:
+    resolution: {integrity: sha512-Ds1GpB6IBhSyFePWyxDhnqA7Ymgmcxah3t5qWxamftqX/zFRkkf5RaRxzuGB8QgdbP6Q/t7scIdMEcndhFc+Tg==}
     peerDependencies:
       vue: ^3.4.31
 
@@ -9250,8 +9250,8 @@ packages:
     peerDependencies:
       typescript: '*'
 
-  vue-tsc@2.0.24:
-    resolution: {integrity: sha512-1qi4P8L7yS78A7OJ7CDDxUIZPD6nVxoQEgX3DkRZNi1HI1qOfzOJwQlNpmwkogSVD6S/XcanbW9sktzpSxz6rA==}
+  vue-tsc@2.0.26:
+    resolution: {integrity: sha512-tOhuwy2bIXbMhz82ef37qeiaQHMXKQkD6mOF6CCPl3/uYtST3l6fdNyfMxipudrQTxTfXVPlgJdMENBFfC1CfQ==}
     hasBin: true
     peerDependencies:
       typescript: '>=5.0.0'
@@ -11625,19 +11625,19 @@ snapshots:
 
   '@floating-ui/core@1.6.2':
     dependencies:
-      '@floating-ui/utils': 0.2.2
+      '@floating-ui/utils': 0.2.4
 
-  '@floating-ui/dom@1.6.5':
+  '@floating-ui/dom@1.6.7':
     dependencies:
       '@floating-ui/core': 1.6.2
-      '@floating-ui/utils': 0.2.2
+      '@floating-ui/utils': 0.2.4
 
-  '@floating-ui/utils@0.2.2': {}
+  '@floating-ui/utils@0.2.4': {}
 
-  '@floating-ui/vue@1.0.6(vue@3.4.31(typescript@5.5.3))':
+  '@floating-ui/vue@1.1.1(vue@3.4.31(typescript@5.5.3))':
     dependencies:
-      '@floating-ui/dom': 1.6.5
-      '@floating-ui/utils': 0.2.2
+      '@floating-ui/dom': 1.6.7
+      '@floating-ui/utils': 0.2.4
       vue-demi: 0.14.8(vue@3.4.31(typescript@5.5.3))
     transitivePeerDependencies:
       - '@vue/composition-api'
@@ -11663,7 +11663,7 @@ snapshots:
 
   '@humanwhocodes/object-schema@2.0.3': {}
 
-  '@iconify/json@2.2.224':
+  '@iconify/json@2.2.225':
     dependencies:
       '@iconify/types': 2.0.0
       pathe: 1.1.2
@@ -12287,11 +12287,11 @@ snapshots:
       postcss-selector-parser: 6.0.10
       tailwindcss: 3.4.4(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.5.3))
 
-  '@tanstack/virtual-core@3.5.1': {}
+  '@tanstack/virtual-core@3.8.1': {}
 
-  '@tanstack/vue-virtual@3.5.1(vue@3.4.31(typescript@5.5.3))':
+  '@tanstack/vue-virtual@3.8.1(vue@3.4.31(typescript@5.5.3))':
     dependencies:
-      '@tanstack/virtual-core': 3.5.1
+      '@tanstack/virtual-core': 3.8.1
       vue: 3.4.31(typescript@5.5.3)
 
   '@tootallnate/once@1.1.2': {}
@@ -12644,24 +12644,24 @@ snapshots:
     dependencies:
       '@volar/source-map': 1.11.1
 
-  '@volar/language-core@2.4.0-alpha.5':
+  '@volar/language-core@2.4.0-alpha.15':
     dependencies:
-      '@volar/source-map': 2.4.0-alpha.5
+      '@volar/source-map': 2.4.0-alpha.15
 
   '@volar/source-map@1.11.1':
     dependencies:
       muggle-string: 0.3.1
 
-  '@volar/source-map@2.4.0-alpha.5': {}
+  '@volar/source-map@2.4.0-alpha.15': {}
 
   '@volar/typescript@1.11.1':
     dependencies:
       '@volar/language-core': 1.11.1
       path-browserify: 1.0.1
 
-  '@volar/typescript@2.4.0-alpha.5':
+  '@volar/typescript@2.4.0-alpha.15':
     dependencies:
-      '@volar/language-core': 2.4.0-alpha.5
+      '@volar/language-core': 2.4.0-alpha.15
       path-browserify: 1.0.1
       vscode-uri: 3.0.8
 
@@ -12817,9 +12817,9 @@ snapshots:
     optionalDependencies:
       typescript: 5.5.3
 
-  '@vue/language-core@2.0.24(typescript@5.5.3)':
+  '@vue/language-core@2.0.26(typescript@5.5.3)':
     dependencies:
-      '@volar/language-core': 2.4.0-alpha.5
+      '@volar/language-core': 2.4.0-alpha.15
       '@vue/compiler-dom': 3.4.31
       '@vue/shared': 3.4.31
       computeds: 0.0.1
@@ -16130,7 +16130,7 @@ snapshots:
 
   mkdirp@1.0.4: {}
 
-  mkdist@1.5.1(sass@1.77.6)(typescript@5.5.3)(vue-tsc@2.0.24(typescript@5.5.3)):
+  mkdist@1.5.1(sass@1.77.6)(typescript@5.5.3)(vue-tsc@2.0.26(typescript@5.5.3)):
     dependencies:
       autoprefixer: 10.4.19(postcss@8.4.39)
       citty: 0.1.6
@@ -16150,7 +16150,7 @@ snapshots:
     optionalDependencies:
       sass: 1.77.6
       typescript: 5.5.3
-      vue-tsc: 2.0.24(typescript@5.5.3)
+      vue-tsc: 2.0.26(typescript@5.5.3)
 
   mlly@1.7.1:
     dependencies:
@@ -17117,13 +17117,13 @@ snapshots:
 
   quick-lru@5.1.1: {}
 
-  radix-vue@1.8.5(vue@3.4.31(typescript@5.5.3)):
+  radix-vue@1.9.0(vue@3.4.31(typescript@5.5.3)):
     dependencies:
-      '@floating-ui/dom': 1.6.5
-      '@floating-ui/vue': 1.0.6(vue@3.4.31(typescript@5.5.3))
+      '@floating-ui/dom': 1.6.7
+      '@floating-ui/vue': 1.1.1(vue@3.4.31(typescript@5.5.3))
       '@internationalized/date': 3.5.4
       '@internationalized/number': 3.5.3
-      '@tanstack/vue-virtual': 3.5.1(vue@3.4.31(typescript@5.5.3))
+      '@tanstack/vue-virtual': 3.8.1(vue@3.4.31(typescript@5.5.3))
       '@vueuse/core': 10.11.0(vue@3.4.31(typescript@5.5.3))
       '@vueuse/shared': 10.11.0(vue@3.4.31(typescript@5.5.3))
       aria-hidden: 1.2.4
@@ -18265,7 +18265,7 @@ snapshots:
       has-symbols: 1.0.3
       which-boxed-primitive: 1.0.2
 
-  unbuild@2.0.0(sass@1.77.6)(typescript@5.5.3)(vue-tsc@2.0.24(typescript@5.5.3)):
+  unbuild@2.0.0(sass@1.77.6)(typescript@5.5.3)(vue-tsc@2.0.26(typescript@5.5.3)):
     dependencies:
       '@rollup/plugin-alias': 5.1.0(rollup@3.29.4)
       '@rollup/plugin-commonjs': 25.0.8(rollup@3.29.4)
@@ -18282,7 +18282,7 @@ snapshots:
       hookable: 5.5.3
       jiti: 1.21.6
       magic-string: 0.30.10
-      mkdist: 1.5.1(sass@1.77.6)(typescript@5.5.3)(vue-tsc@2.0.24(typescript@5.5.3))
+      mkdist: 1.5.1(sass@1.77.6)(typescript@5.5.3)(vue-tsc@2.0.26(typescript@5.5.3))
       mlly: 1.7.1
       pathe: 1.1.2
       pkg-types: 1.1.3
@@ -18714,10 +18714,10 @@ snapshots:
       semver: 7.6.2
       typescript: 5.5.3
 
-  vue-tsc@2.0.24(typescript@5.5.3):
+  vue-tsc@2.0.26(typescript@5.5.3):
     dependencies:
-      '@volar/typescript': 2.4.0-alpha.5
-      '@vue/language-core': 2.0.24(typescript@5.5.3)
+      '@volar/typescript': 2.4.0-alpha.15
+      '@vue/language-core': 2.0.26(typescript@5.5.3)
       semver: 7.6.2
       typescript: 5.5.3
 

+ 1 - 1
vben-admin.code-workspace

@@ -5,7 +5,7 @@
       "path": "apps/backend-mock",
     },
     {
-      "name": "@vben/antd-view",
+      "name": "@vben/web-antd",
       "path": "apps/web-antd",
     },
     {