diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2d824eb8..09376041 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -29,6 +29,7 @@
- VxeTable升级V4.10.0
- 移除`@deprecated` `apps/web-antd/src/adapter/vxe-table.ts`的`tableCheckboxEvent`方法
- 移除`由于更新方案弃用的` `apps/web-antd/src/adapter/vxe-table.ts`的`vxeSortEvent`方法
+- 移除apps下的ele和naive目录
# 1.1.3
diff --git a/apps/web-ele/.env b/apps/web-ele/.env
deleted file mode 100644
index 87cb3df1..00000000
--- a/apps/web-ele/.env
+++ /dev/null
@@ -1,5 +0,0 @@
-# 应用标题
-VITE_APP_TITLE=Vben Admin Ele
-
-# 应用命名空间,用于缓存、store等功能的前缀,确保隔离
-VITE_APP_NAMESPACE=vben-web-ele
diff --git a/apps/web-ele/.env.analyze b/apps/web-ele/.env.analyze
deleted file mode 100644
index ffafa8dd..00000000
--- a/apps/web-ele/.env.analyze
+++ /dev/null
@@ -1,7 +0,0 @@
-# public path
-VITE_BASE=/
-
-# Basic interface address SPA
-VITE_GLOB_API_URL=/api
-
-VITE_VISUALIZER=true
diff --git a/apps/web-ele/.env.development b/apps/web-ele/.env.development
deleted file mode 100644
index 8bcb432e..00000000
--- a/apps/web-ele/.env.development
+++ /dev/null
@@ -1,16 +0,0 @@
-# 端口号
-VITE_PORT=5777
-
-VITE_BASE=/
-
-# 接口地址
-VITE_GLOB_API_URL=/api
-
-# 是否开启 Nitro Mock服务,true 为开启,false 为关闭
-VITE_NITRO_MOCK=true
-
-# 是否打开 devtools,true 为打开,false 为关闭
-VITE_DEVTOOLS=false
-
-# 是否注入全局loading
-VITE_INJECT_APP_LOADING=true
diff --git a/apps/web-ele/.env.production b/apps/web-ele/.env.production
deleted file mode 100644
index 5375847a..00000000
--- a/apps/web-ele/.env.production
+++ /dev/null
@@ -1,19 +0,0 @@
-VITE_BASE=/
-
-# 接口地址
-VITE_GLOB_API_URL=https://mock-napi.vben.pro/api
-
-# 是否开启压缩,可以设置为 none, brotli, gzip
-VITE_COMPRESS=none
-
-# 是否开启 PWA
-VITE_PWA=false
-
-# vue-router 的模式
-VITE_ROUTER_HISTORY=hash
-
-# 是否注入全局loading
-VITE_INJECT_APP_LOADING=true
-
-# 打包后是否生成dist.zip
-VITE_ARCHIVER=true
diff --git a/apps/web-ele/index.html b/apps/web-ele/index.html
deleted file mode 100644
index 2b59b8d7..00000000
--- a/apps/web-ele/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- <%= VITE_APP_TITLE %>
-
-
-
-
-
-
-
-
diff --git a/apps/web-ele/package.json b/apps/web-ele/package.json
deleted file mode 100644
index 58769400..00000000
--- a/apps/web-ele/package.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
- "name": "@vben/web-ele",
- "version": "5.5.2",
- "homepage": "https://vben.pro",
- "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
- "repository": {
- "type": "git",
- "url": "git+https://github.com/vbenjs/vue-vben-admin.git",
- "directory": "apps/web-ele"
- },
- "license": "MIT",
- "author": {
- "name": "vben",
- "email": "ann.vben@gmail.com",
- "url": "https://github.com/anncwb"
- },
- "type": "module",
- "scripts": {
- "build": "pnpm vite build --mode production",
- "build:analyze": "pnpm vite build --mode analyze",
- "dev": "pnpm vite --mode development",
- "preview": "vite preview",
- "typecheck": "vue-tsc --noEmit --skipLibCheck"
- },
- "imports": {
- "#/*": "./src/*"
- },
- "dependencies": {
- "@vben/access": "workspace:*",
- "@vben/common-ui": "workspace:*",
- "@vben/constants": "workspace:*",
- "@vben/hooks": "workspace:*",
- "@vben/icons": "workspace:*",
- "@vben/layouts": "workspace:*",
- "@vben/locales": "workspace:*",
- "@vben/plugins": "workspace:*",
- "@vben/preferences": "workspace:*",
- "@vben/request": "workspace:*",
- "@vben/stores": "workspace:*",
- "@vben/styles": "workspace:*",
- "@vben/types": "workspace:*",
- "@vben/utils": "workspace:*",
- "@vueuse/core": "catalog:",
- "dayjs": "catalog:",
- "element-plus": "catalog:",
- "pinia": "catalog:",
- "vue": "catalog:",
- "vue-router": "catalog:"
- },
- "devDependencies": {
- "unplugin-element-plus": "catalog:"
- }
-}
diff --git a/apps/web-ele/postcss.config.mjs b/apps/web-ele/postcss.config.mjs
deleted file mode 100644
index 3d807045..00000000
--- a/apps/web-ele/postcss.config.mjs
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from '@vben/tailwind-config/postcss';
diff --git a/apps/web-ele/public/favicon.ico b/apps/web-ele/public/favicon.ico
deleted file mode 100644
index fcf9818e..00000000
Binary files a/apps/web-ele/public/favicon.ico and /dev/null differ
diff --git a/apps/web-ele/src/adapter/component/index.ts b/apps/web-ele/src/adapter/component/index.ts
deleted file mode 100644
index 02306d76..00000000
--- a/apps/web-ele/src/adapter/component/index.ts
+++ /dev/null
@@ -1,232 +0,0 @@
-/**
- * 通用组件共同的使用的基础组件,原先放在 adapter/form 内部,限制了使用范围,这里提取出来,方便其他地方使用
- * 可用于 vben-form、vben-modal、vben-drawer 等组件使用,
- */
-
-import type { BaseFormComponentType } from '@vben/common-ui';
-import type { Recordable } from '@vben/types';
-import type { Component, SetupContext } from 'vue';
-
-import { ApiComponent, globalShareState, IconPicker } from '@vben/common-ui';
-import { $t } from '@vben/locales';
-import {
- ElButton,
- ElCheckbox,
- ElCheckboxButton,
- ElCheckboxGroup,
- ElDatePicker,
- ElDivider,
- ElInput,
- ElInputNumber,
- ElNotification,
- ElRadio,
- ElRadioButton,
- ElRadioGroup,
- ElSelectV2,
- ElSpace,
- ElSwitch,
- ElTimePicker,
- ElTreeSelect,
- ElUpload,
-} from 'element-plus';
-import { h } from 'vue';
-
-const withDefaultPlaceholder = (
- component: T,
- type: 'input' | 'select',
-) => {
- return (props: any, { attrs, slots }: Omit) => {
- const placeholder = props?.placeholder || $t(`ui.placeholder.${type}`);
- return h(component, { ...props, ...attrs, placeholder }, slots);
- };
-};
-
-// 这里需要自行根据业务组件库进行适配,需要用到的组件都需要在这里类型说明
-export type ComponentType =
- | 'ApiSelect'
- | 'ApiTreeSelect'
- | 'Checkbox'
- | 'CheckboxGroup'
- | 'DatePicker'
- | 'Divider'
- | 'IconPicker'
- | 'Input'
- | 'InputNumber'
- | 'RadioGroup'
- | 'Select'
- | 'Space'
- | 'Switch'
- | 'TimePicker'
- | 'TreeSelect'
- | 'Upload'
- | BaseFormComponentType;
-
-async function initComponentAdapter() {
- const components: Partial> = {
- // 如果你的组件体积比较大,可以使用异步加载
- // Button: () =>
- // import('xxx').then((res) => res.Button),
- ApiSelect: (props, { attrs, slots }) => {
- return h(
- ApiComponent,
- {
- placeholder: $t('ui.placeholder.select'),
- ...props,
- ...attrs,
- component: ElSelectV2,
- loadingSlot: 'loading',
- visibleEvent: 'onVisibleChange',
- },
- slots,
- );
- },
- ApiTreeSelect: (props, { attrs, slots }) => {
- return h(
- ApiComponent,
- {
- placeholder: $t('ui.placeholder.select'),
- ...props,
- ...attrs,
- component: ElTreeSelect,
- props: { label: 'label', children: 'children' },
- nodeKey: 'value',
- loadingSlot: 'loading',
- optionsPropName: 'data',
- visibleEvent: 'onVisibleChange',
- },
- slots,
- );
- },
- Checkbox: ElCheckbox,
- CheckboxGroup: (props, { attrs, slots }) => {
- let defaultSlot;
- if (Reflect.has(slots, 'default')) {
- defaultSlot = slots.default;
- } else {
- const { options, isButton } = attrs;
- if (Array.isArray(options)) {
- defaultSlot = () =>
- options.map((option) =>
- h(isButton ? ElCheckboxButton : ElCheckbox, option),
- );
- }
- }
- return h(
- ElCheckboxGroup,
- { ...props, ...attrs },
- { ...slots, default: defaultSlot },
- );
- },
- // 自定义默认按钮
- DefaultButton: (props, { attrs, slots }) => {
- return h(ElButton, { ...props, attrs, type: 'info' }, slots);
- },
- // 自定义主要按钮
- PrimaryButton: (props, { attrs, slots }) => {
- return h(ElButton, { ...props, attrs, type: 'primary' }, slots);
- },
- Divider: ElDivider,
- IconPicker: (props, { attrs, slots }) => {
- return h(
- IconPicker,
- {
- iconSlot: 'append',
- modelValueProp: 'model-value',
- inputComponent: ElInput,
- ...props,
- ...attrs,
- },
- slots,
- );
- },
- Input: withDefaultPlaceholder(ElInput, 'input'),
- InputNumber: withDefaultPlaceholder(ElInputNumber, 'input'),
- RadioGroup: (props, { attrs, slots }) => {
- let defaultSlot;
- if (Reflect.has(slots, 'default')) {
- defaultSlot = slots.default;
- } else {
- const { options } = attrs;
- if (Array.isArray(options)) {
- defaultSlot = () =>
- options.map((option) =>
- h(attrs.isButton ? ElRadioButton : ElRadio, option),
- );
- }
- }
- return h(
- ElRadioGroup,
- { ...props, ...attrs },
- { ...slots, default: defaultSlot },
- );
- },
- Select: (props, { attrs, slots }) => {
- return h(ElSelectV2, { ...props, attrs }, slots);
- },
- Space: ElSpace,
- Switch: ElSwitch,
- TimePicker: (props, { attrs, slots }) => {
- const { name, id, isRange } = props;
- const extraProps: Recordable = {};
- if (isRange) {
- if (name && !Array.isArray(name)) {
- extraProps.name = [name, `${name}_end`];
- }
- if (id && !Array.isArray(id)) {
- extraProps.id = [id, `${id}_end`];
- }
- }
- return h(
- ElTimePicker,
- {
- ...props,
- ...attrs,
- ...extraProps,
- },
- slots,
- );
- },
- DatePicker: (props, { attrs, slots }) => {
- const { name, id, type } = props;
- const extraProps: Recordable = {};
- if (type && type.includes('range')) {
- if (name && !Array.isArray(name)) {
- extraProps.name = [name, `${name}_end`];
- }
- if (id && !Array.isArray(id)) {
- extraProps.id = [id, `${id}_end`];
- }
- }
- return h(
- ElDatePicker,
- {
- ...props,
- ...attrs,
- ...extraProps,
- },
- slots,
- );
- },
- TreeSelect: withDefaultPlaceholder(ElTreeSelect, 'select'),
- Upload: ElUpload,
- };
-
- // 将组件注册到全局共享状态中
- globalShareState.setComponents(components);
-
- // 定义全局共享状态中的消息提示
- globalShareState.defineMessage({
- // 复制成功消息提示
- copyPreferencesSuccess: (title, content) => {
- ElNotification({
- title,
- message: content,
- position: 'bottom-right',
- duration: 0,
- type: 'success',
- });
- },
- });
-}
-
-export { initComponentAdapter };
diff --git a/apps/web-ele/src/adapter/form.ts b/apps/web-ele/src/adapter/form.ts
deleted file mode 100644
index 13ae9c42..00000000
--- a/apps/web-ele/src/adapter/form.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-import type {
- VbenFormSchema as FormSchema,
- VbenFormProps,
-} from '@vben/common-ui';
-
-import type { ComponentType } from './component';
-
-import { setupVbenForm, useVbenForm as useForm, z } from '@vben/common-ui';
-import { $t } from '@vben/locales';
-
-setupVbenForm({
- config: {
- modelPropNameMap: {
- Upload: 'fileList',
- CheckboxGroup: 'model-value',
- },
- },
- defineRules: {
- required: (value, _params, ctx) => {
- if (value === undefined || value === null || value.length === 0) {
- return $t('ui.formRules.required', [ctx.label]);
- }
- return true;
- },
- selectRequired: (value, _params, ctx) => {
- if (value === undefined || value === null) {
- return $t('ui.formRules.selectRequired', [ctx.label]);
- }
- return true;
- },
- },
-});
-
-const useVbenForm = useForm;
-
-export { useVbenForm, z };
-
-export type VbenFormSchema = FormSchema;
-export type { VbenFormProps };
diff --git a/apps/web-ele/src/adapter/vxe-table.ts b/apps/web-ele/src/adapter/vxe-table.ts
deleted file mode 100644
index 44b31eae..00000000
--- a/apps/web-ele/src/adapter/vxe-table.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-import { h } from 'vue';
-
-import { setupVbenVxeTable, useVbenVxeGrid } from '@vben/plugins/vxe-table';
-
-import { ElButton, ElImage } from 'element-plus';
-
-import { useVbenForm } from './form';
-
-setupVbenVxeTable({
- configVxeTable: (vxeUI) => {
- vxeUI.setConfig({
- grid: {
- align: 'center',
- border: false,
- columnConfig: {
- resizable: true,
- },
- minHeight: 180,
- formConfig: {
- // 全局禁用vxe-table的表单配置,使用formOptions
- enabled: false,
- },
- proxyConfig: {
- autoLoad: true,
- response: {
- result: 'items',
- total: 'total',
- list: 'items',
- },
- showActiveMsg: true,
- showResponseMsg: false,
- },
- round: true,
- showOverflow: true,
- size: 'small',
- },
- });
-
- // 表格配置项可以用 cellRender: { name: 'CellImage' },
- vxeUI.renderer.add('CellImage', {
- renderTableDefault(_renderOpts, params) {
- const { column, row } = params;
- const src = row[column.field];
- return h(ElImage, { src, previewSrcList: [src] });
- },
- });
-
- // 表格配置项可以用 cellRender: { name: 'CellLink' },
- vxeUI.renderer.add('CellLink', {
- renderTableDefault(renderOpts) {
- const { props } = renderOpts;
- return h(
- ElButton,
- { size: 'small', link: true },
- { default: () => props?.text },
- );
- },
- });
-
- // 这里可以自行扩展 vxe-table 的全局配置,比如自定义格式化
- // vxeUI.formats.add
- },
- useVbenForm,
-});
-
-export { useVbenVxeGrid };
-
-export type * from '@vben/plugins/vxe-table';
diff --git a/apps/web-ele/src/api/core/auth.ts b/apps/web-ele/src/api/core/auth.ts
deleted file mode 100644
index 71d9f994..00000000
--- a/apps/web-ele/src/api/core/auth.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import { baseRequestClient, requestClient } from '#/api/request';
-
-export namespace AuthApi {
- /** 登录接口参数 */
- export interface LoginParams {
- password?: string;
- username?: string;
- }
-
- /** 登录接口返回值 */
- export interface LoginResult {
- accessToken: string;
- }
-
- export interface RefreshTokenResult {
- data: string;
- status: number;
- }
-}
-
-/**
- * 登录
- */
-export async function loginApi(data: AuthApi.LoginParams) {
- return requestClient.post('/auth/login', data);
-}
-
-/**
- * 刷新accessToken
- */
-export async function refreshTokenApi() {
- return baseRequestClient.post('/auth/refresh', {
- withCredentials: true,
- });
-}
-
-/**
- * 退出登录
- */
-export async function logoutApi() {
- return baseRequestClient.post('/auth/logout', {
- withCredentials: true,
- });
-}
-
-/**
- * 获取用户权限码
- */
-export async function getAccessCodesApi() {
- return requestClient.get('/auth/codes');
-}
diff --git a/apps/web-ele/src/api/core/index.ts b/apps/web-ele/src/api/core/index.ts
deleted file mode 100644
index 28a5aef4..00000000
--- a/apps/web-ele/src/api/core/index.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export * from './auth';
-export * from './menu';
-export * from './user';
diff --git a/apps/web-ele/src/api/core/menu.ts b/apps/web-ele/src/api/core/menu.ts
deleted file mode 100644
index 9ef60b11..00000000
--- a/apps/web-ele/src/api/core/menu.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import type { RouteRecordStringComponent } from '@vben/types';
-
-import { requestClient } from '#/api/request';
-
-/**
- * 获取用户所有菜单
- */
-export async function getAllMenusApi() {
- return requestClient.get('/menu/all');
-}
diff --git a/apps/web-ele/src/api/core/user.ts b/apps/web-ele/src/api/core/user.ts
deleted file mode 100644
index 7e28ea84..00000000
--- a/apps/web-ele/src/api/core/user.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import type { UserInfo } from '@vben/types';
-
-import { requestClient } from '#/api/request';
-
-/**
- * 获取用户信息
- */
-export async function getUserInfoApi() {
- return requestClient.get('/user/info');
-}
diff --git a/apps/web-ele/src/api/index.ts b/apps/web-ele/src/api/index.ts
deleted file mode 100644
index 4b0e0413..00000000
--- a/apps/web-ele/src/api/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './core';
diff --git a/apps/web-ele/src/api/request.ts b/apps/web-ele/src/api/request.ts
deleted file mode 100644
index 21223a4b..00000000
--- a/apps/web-ele/src/api/request.ts
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * 该文件可自行根据业务逻辑进行调整
- */
-import type { RequestClientOptions } from '@vben/request';
-
-import { useAppConfig } from '@vben/hooks';
-import { preferences } from '@vben/preferences';
-import {
- authenticateResponseInterceptor,
- errorMessageResponseInterceptor,
- RequestClient,
-} from '@vben/request';
-import { useAccessStore } from '@vben/stores';
-
-import { ElMessage } from 'element-plus';
-
-import { useAuthStore } from '#/store';
-
-import { refreshTokenApi } from './core';
-
-const { apiURL } = useAppConfig(import.meta.env, import.meta.env.PROD);
-
-function createRequestClient(baseURL: string, options?: RequestClientOptions) {
- const client = new RequestClient({
- ...options,
- baseURL,
- });
-
- /**
- * 重新认证逻辑
- */
- async function doReAuthenticate() {
- console.warn('Access token or refresh token is invalid or expired. ');
- const accessStore = useAccessStore();
- const authStore = useAuthStore();
- accessStore.setAccessToken(null);
- if (
- preferences.app.loginExpiredMode === 'modal' &&
- accessStore.isAccessChecked
- ) {
- accessStore.setLoginExpired(true);
- } else {
- await authStore.logout();
- }
- }
-
- /**
- * 刷新token逻辑
- */
- async function doRefreshToken() {
- const accessStore = useAccessStore();
- const resp = await refreshTokenApi();
- const newToken = resp.data;
- accessStore.setAccessToken(newToken);
- return newToken;
- }
-
- function formatToken(token: null | string) {
- return token ? `Bearer ${token}` : null;
- }
-
- // 请求头处理
- client.addRequestInterceptor({
- fulfilled: async (config) => {
- const accessStore = useAccessStore();
-
- config.headers.Authorization = formatToken(accessStore.accessToken);
- config.headers['Accept-Language'] = preferences.app.locale;
- return config;
- },
- });
-
- // token过期的处理
- client.addResponseInterceptor(
- authenticateResponseInterceptor({
- client,
- doReAuthenticate,
- doRefreshToken,
- enableRefreshToken: preferences.app.enableRefreshToken,
- formatToken,
- }),
- );
-
- // 通用的错误处理,如果没有进入上面的错误处理逻辑,就会进入这里
- client.addResponseInterceptor(
- errorMessageResponseInterceptor((msg: string, error) => {
- // 这里可以根据业务进行定制,你可以拿到 error 内的信息进行定制化处理,根据不同的 code 做不同的提示,而不是直接使用 message.error 提示 msg
- // 当前mock接口返回的错误字段是 error 或者 message
- const responseData = error?.response?.data ?? {};
- const errorMessage = responseData?.error ?? responseData?.message ?? '';
- // 如果没有错误信息,则会根据状态码进行提示
- ElMessage.error(errorMessage || msg);
- }),
- );
-
- return client;
-}
-
-export const requestClient = createRequestClient(apiURL, {
- responseReturn: 'data',
-});
-
-export const baseRequestClient = new RequestClient({ baseURL: apiURL });
diff --git a/apps/web-ele/src/app.vue b/apps/web-ele/src/app.vue
deleted file mode 100644
index 1217658d..00000000
--- a/apps/web-ele/src/app.vue
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
diff --git a/apps/web-ele/src/bootstrap.ts b/apps/web-ele/src/bootstrap.ts
deleted file mode 100644
index b62094f2..00000000
--- a/apps/web-ele/src/bootstrap.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-import { createApp, watchEffect } from 'vue';
-
-import { registerAccessDirective } from '@vben/access';
-import { initTippy } from '@vben/common-ui';
-import { preferences } from '@vben/preferences';
-import { initStores } from '@vben/stores';
-import '@vben/styles';
-import '@vben/styles/ele';
-
-import { useTitle } from '@vueuse/core';
-import { ElLoading } from 'element-plus';
-
-import { $t, setupI18n } from '#/locales';
-
-import { initComponentAdapter } from './adapter/component';
-import App from './app.vue';
-import { router } from './router';
-
-async function bootstrap(namespace: string) {
- // 初始化组件适配器
- await initComponentAdapter();
- // // 设置弹窗的默认配置
- // setDefaultModalProps({
- // fullscreenButton: false,
- // });
- // // 设置抽屉的默认配置
- // setDefaultDrawerProps({
- // zIndex: 2000,
- // });
- const app = createApp(App);
-
- // 注册Element Plus提供的v-loading指令
- app.directive('loading', ElLoading.directive);
-
- // 国际化 i18n 配置
- await setupI18n(app);
-
- // 配置 pinia-tore
- await initStores(app, { namespace });
-
- // 安装权限指令
- registerAccessDirective(app);
-
- // 初始化 tippy
- initTippy(app);
-
- // 配置路由及路由守卫
- app.use(router);
-
- // 动态更新标题
- watchEffect(() => {
- if (preferences.app.dynamicTitle) {
- const routeTitle = router.currentRoute.value.meta?.title;
- const pageTitle =
- (routeTitle ? `${$t(routeTitle)} - ` : '') + preferences.app.name;
- useTitle(pageTitle);
- }
- });
-
- app.mount('#app');
-}
-
-export { bootstrap };
diff --git a/apps/web-ele/src/layouts/auth.vue b/apps/web-ele/src/layouts/auth.vue
deleted file mode 100644
index 18d415bc..00000000
--- a/apps/web-ele/src/layouts/auth.vue
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/apps/web-ele/src/layouts/basic.vue b/apps/web-ele/src/layouts/basic.vue
deleted file mode 100644
index 51412956..00000000
--- a/apps/web-ele/src/layouts/basic.vue
+++ /dev/null
@@ -1,157 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/apps/web-ele/src/layouts/index.ts b/apps/web-ele/src/layouts/index.ts
deleted file mode 100644
index a4320780..00000000
--- a/apps/web-ele/src/layouts/index.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-const BasicLayout = () => import('./basic.vue');
-const AuthPageLayout = () => import('./auth.vue');
-
-const IFrameView = () => import('@vben/layouts').then((m) => m.IFrameView);
-
-export { AuthPageLayout, BasicLayout, IFrameView };
diff --git a/apps/web-ele/src/locales/README.md b/apps/web-ele/src/locales/README.md
deleted file mode 100644
index 7b451032..00000000
--- a/apps/web-ele/src/locales/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# locale
-
-每个app使用的国际化可能不同,这里用于扩展国际化的功能,例如扩展 dayjs、antd组件库的多语言切换,以及app本身的国际化文件。
diff --git a/apps/web-ele/src/locales/index.ts b/apps/web-ele/src/locales/index.ts
deleted file mode 100644
index 6766532c..00000000
--- a/apps/web-ele/src/locales/index.ts
+++ /dev/null
@@ -1,98 +0,0 @@
-import type { LocaleSetupOptions, SupportedLanguagesType } from '@vben/locales';
-import type { Language } from 'element-plus/es/locale';
-import type { App } from 'vue';
-
-import {
- $t,
- setupI18n as coreSetup,
- loadLocalesMapFromDir,
-} from '@vben/locales';
-import { preferences } from '@vben/preferences';
-import dayjs from 'dayjs';
-import enLocale from 'element-plus/es/locale/lang/en';
-import defaultLocale from 'element-plus/es/locale/lang/zh-cn';
-import { ref } from 'vue';
-
-const elementLocale = ref(defaultLocale);
-
-const modules = import.meta.glob('./langs/**/*.json');
-
-const localesMap = loadLocalesMapFromDir(
- /\.\/langs\/([^/]+)\/(.*)\.json$/,
- modules,
-);
-/**
- * 加载应用特有的语言包
- * 这里也可以改造为从服务端获取翻译数据
- * @param lang
- */
-async function loadMessages(lang: SupportedLanguagesType) {
- const [appLocaleMessages] = await Promise.all([
- localesMap[lang]?.(),
- loadThirdPartyMessage(lang),
- ]);
- return appLocaleMessages?.default;
-}
-
-/**
- * 加载第三方组件库的语言包
- * @param lang
- */
-async function loadThirdPartyMessage(lang: SupportedLanguagesType) {
- await Promise.all([loadElementLocale(lang), loadDayjsLocale(lang)]);
-}
-
-/**
- * 加载dayjs的语言包
- * @param lang
- */
-async function loadDayjsLocale(lang: SupportedLanguagesType) {
- let locale;
- switch (lang) {
- case 'en-US': {
- locale = await import('dayjs/locale/en');
- break;
- }
- case 'zh-CN': {
- locale = await import('dayjs/locale/zh-cn');
- break;
- }
- // 默认使用英语
- default: {
- locale = await import('dayjs/locale/en');
- }
- }
- if (locale) {
- dayjs.locale(locale);
- } else {
- console.error(`Failed to load dayjs locale for ${lang}`);
- }
-}
-
-/**
- * 加载element-plus的语言包
- * @param lang
- */
-async function loadElementLocale(lang: SupportedLanguagesType) {
- switch (lang) {
- case 'en-US': {
- elementLocale.value = enLocale;
- break;
- }
- case 'zh-CN': {
- elementLocale.value = defaultLocale;
- break;
- }
- }
-}
-
-async function setupI18n(app: App, options: LocaleSetupOptions = {}) {
- await coreSetup(app, {
- defaultLocale: preferences.app.locale,
- loadMessages,
- missingWarn: !import.meta.env.PROD,
- ...options,
- });
-}
-
-export { $t, elementLocale, setupI18n };
diff --git a/apps/web-ele/src/locales/langs/en-US/demos.json b/apps/web-ele/src/locales/langs/en-US/demos.json
deleted file mode 100644
index 6eddebb5..00000000
--- a/apps/web-ele/src/locales/langs/en-US/demos.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "title": "Demos",
- "elementPlus": "Element Plus",
- "form": "Form",
- "vben": {
- "title": "Project",
- "about": "About",
- "document": "Document",
- "antdv": "Ant Design Vue Version",
- "naive-ui": "Naive UI Version",
- "element-plus": "Element Plus Version"
- }
-}
diff --git a/apps/web-ele/src/locales/langs/en-US/page.json b/apps/web-ele/src/locales/langs/en-US/page.json
deleted file mode 100644
index 618a258c..00000000
--- a/apps/web-ele/src/locales/langs/en-US/page.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "auth": {
- "login": "Login",
- "register": "Register",
- "codeLogin": "Code Login",
- "qrcodeLogin": "Qr Code Login",
- "forgetPassword": "Forget Password"
- },
- "dashboard": {
- "title": "Dashboard",
- "analytics": "Analytics",
- "workspace": "Workspace"
- }
-}
diff --git a/apps/web-ele/src/locales/langs/zh-CN/demos.json b/apps/web-ele/src/locales/langs/zh-CN/demos.json
deleted file mode 100644
index ba6d6ccd..00000000
--- a/apps/web-ele/src/locales/langs/zh-CN/demos.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "title": "演示",
- "elementPlus": "Element Plus",
- "form": "表单演示",
- "vben": {
- "title": "项目",
- "about": "关于",
- "document": "文档",
- "antdv": "Ant Design Vue 版本",
- "naive-ui": "Naive UI 版本",
- "element-plus": "Element Plus 版本"
- }
-}
diff --git a/apps/web-ele/src/locales/langs/zh-CN/page.json b/apps/web-ele/src/locales/langs/zh-CN/page.json
deleted file mode 100644
index 4cb67081..00000000
--- a/apps/web-ele/src/locales/langs/zh-CN/page.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "auth": {
- "login": "登录",
- "register": "注册",
- "codeLogin": "验证码登录",
- "qrcodeLogin": "二维码登录",
- "forgetPassword": "忘记密码"
- },
- "dashboard": {
- "title": "概览",
- "analytics": "分析页",
- "workspace": "工作台"
- }
-}
diff --git a/apps/web-ele/src/main.ts b/apps/web-ele/src/main.ts
deleted file mode 100644
index 5d728a02..00000000
--- a/apps/web-ele/src/main.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import { initPreferences } from '@vben/preferences';
-import { unmountGlobalLoading } from '@vben/utils';
-
-import { overridesPreferences } from './preferences';
-
-/**
- * 应用初始化完成之后再进行页面加载渲染
- */
-async function initApplication() {
- // name用于指定项目唯一标识
- // 用于区分不同项目的偏好设置以及存储数据的key前缀以及其他一些需要隔离的数据
- const env = import.meta.env.PROD ? 'prod' : 'dev';
- const appVersion = import.meta.env.VITE_APP_VERSION;
- const namespace = `${import.meta.env.VITE_APP_NAMESPACE}-${appVersion}-${env}`;
-
- // app偏好设置初始化
- await initPreferences({
- namespace,
- overrides: overridesPreferences,
- });
-
- // 启动应用并挂载
- // vue应用主要逻辑及视图
- const { bootstrap } = await import('./bootstrap');
- await bootstrap(namespace);
-
- // 移除并销毁loading
- unmountGlobalLoading();
-}
-
-initApplication();
diff --git a/apps/web-ele/src/preferences.ts b/apps/web-ele/src/preferences.ts
deleted file mode 100644
index b2e9ace4..00000000
--- a/apps/web-ele/src/preferences.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { defineOverridesPreferences } from '@vben/preferences';
-
-/**
- * @description 项目配置文件
- * 只需要覆盖项目中的一部分配置,不需要的配置不用覆盖,会自动使用默认配置
- * !!! 更改配置后请清空缓存,否则可能不生效
- */
-export const overridesPreferences = defineOverridesPreferences({
- // overrides
- app: {
- name: import.meta.env.VITE_APP_TITLE,
- },
-});
diff --git a/apps/web-ele/src/router/access.ts b/apps/web-ele/src/router/access.ts
deleted file mode 100644
index 2d07c892..00000000
--- a/apps/web-ele/src/router/access.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import type {
- ComponentRecordType,
- GenerateMenuAndRoutesOptions,
-} from '@vben/types';
-
-import { generateAccessible } from '@vben/access';
-import { preferences } from '@vben/preferences';
-
-import { ElMessage } from 'element-plus';
-
-import { getAllMenusApi } from '#/api';
-import { BasicLayout, IFrameView } from '#/layouts';
-import { $t } from '#/locales';
-
-const forbiddenComponent = () => import('#/views/_core/fallback/forbidden.vue');
-
-async function generateAccess(options: GenerateMenuAndRoutesOptions) {
- const pageMap: ComponentRecordType = import.meta.glob('../views/**/*.vue');
-
- const layoutMap: ComponentRecordType = {
- BasicLayout,
- IFrameView,
- };
-
- return await generateAccessible(preferences.app.accessMode, {
- ...options,
- fetchMenuListAsync: async () => {
- ElMessage({
- duration: 1500,
- message: `${$t('common.loadingMenu')}...`,
- });
- return await getAllMenusApi();
- },
- // 可以指定没有权限跳转403页面
- forbiddenComponent,
- // 如果 route.meta.menuVisibleWithForbidden = true
- layoutMap,
- pageMap,
- });
-}
-
-export { generateAccess };
diff --git a/apps/web-ele/src/router/guard.ts b/apps/web-ele/src/router/guard.ts
deleted file mode 100644
index cbb5235e..00000000
--- a/apps/web-ele/src/router/guard.ts
+++ /dev/null
@@ -1,133 +0,0 @@
-import type { Router } from 'vue-router';
-
-import { DEFAULT_HOME_PATH, LOGIN_PATH } from '@vben/constants';
-import { preferences } from '@vben/preferences';
-import { useAccessStore, useUserStore } from '@vben/stores';
-import { startProgress, stopProgress } from '@vben/utils';
-
-import { accessRoutes, coreRouteNames } from '#/router/routes';
-import { useAuthStore } from '#/store';
-
-import { generateAccess } from './access';
-
-/**
- * 通用守卫配置
- * @param router
- */
-function setupCommonGuard(router: Router) {
- // 记录已经加载的页面
- const loadedPaths = new Set();
-
- router.beforeEach(async (to) => {
- to.meta.loaded = loadedPaths.has(to.path);
-
- // 页面加载进度条
- if (!to.meta.loaded && preferences.transition.progress) {
- startProgress();
- }
- return true;
- });
-
- router.afterEach((to) => {
- // 记录页面是否加载,如果已经加载,后续的页面切换动画等效果不在重复执行
-
- loadedPaths.add(to.path);
-
- // 关闭页面加载进度条
- if (preferences.transition.progress) {
- stopProgress();
- }
- });
-}
-
-/**
- * 权限访问守卫配置
- * @param router
- */
-function setupAccessGuard(router: Router) {
- router.beforeEach(async (to, from) => {
- const accessStore = useAccessStore();
- const userStore = useUserStore();
- const authStore = useAuthStore();
-
- // 基本路由,这些路由不需要进入权限拦截
- if (coreRouteNames.includes(to.name as string)) {
- if (to.path === LOGIN_PATH && accessStore.accessToken) {
- return decodeURIComponent(
- (to.query?.redirect as string) ||
- userStore.userInfo?.homePath ||
- DEFAULT_HOME_PATH,
- );
- }
- return true;
- }
-
- // accessToken 检查
- if (!accessStore.accessToken) {
- // 明确声明忽略权限访问权限,则可以访问
- if (to.meta.ignoreAccess) {
- return true;
- }
-
- // 没有访问权限,跳转登录页面
- if (to.fullPath !== LOGIN_PATH) {
- return {
- path: LOGIN_PATH,
- // 如不需要,直接删除 query
- query:
- to.fullPath === DEFAULT_HOME_PATH
- ? {}
- : { redirect: encodeURIComponent(to.fullPath) },
- // 携带当前跳转的页面,登录后重新跳转该页面
- replace: true,
- };
- }
- return to;
- }
-
- // 是否已经生成过动态路由
- if (accessStore.isAccessChecked) {
- return true;
- }
-
- // 生成路由表
- // 当前登录用户拥有的角色标识列表
- const userInfo = userStore.userInfo || (await authStore.fetchUserInfo());
- const userRoles = userInfo.roles ?? [];
-
- // 生成菜单和路由
- const { accessibleMenus, accessibleRoutes } = await generateAccess({
- roles: userRoles,
- router,
- // 则会在菜单中显示,但是访问会被重定向到403
- routes: accessRoutes,
- });
-
- // 保存菜单信息和路由信息
- accessStore.setAccessMenus(accessibleMenus);
- accessStore.setAccessRoutes(accessibleRoutes);
- accessStore.setIsAccessChecked(true);
- const redirectPath = (from.query.redirect ??
- (to.path === DEFAULT_HOME_PATH
- ? userInfo.homePath || DEFAULT_HOME_PATH
- : to.fullPath)) as string;
-
- return {
- ...router.resolve(decodeURIComponent(redirectPath)),
- replace: true,
- };
- });
-}
-
-/**
- * 项目守卫配置
- * @param router
- */
-function createRouterGuard(router: Router) {
- /** 通用 */
- setupCommonGuard(router);
- /** 权限访问 */
- setupAccessGuard(router);
-}
-
-export { createRouterGuard };
diff --git a/apps/web-ele/src/router/index.ts b/apps/web-ele/src/router/index.ts
deleted file mode 100644
index 48402303..00000000
--- a/apps/web-ele/src/router/index.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import {
- createRouter,
- createWebHashHistory,
- createWebHistory,
-} from 'vue-router';
-
-import { resetStaticRoutes } from '@vben/utils';
-
-import { createRouterGuard } from './guard';
-import { routes } from './routes';
-
-/**
- * @zh_CN 创建vue-router实例
- */
-const router = createRouter({
- history:
- import.meta.env.VITE_ROUTER_HISTORY === 'hash'
- ? createWebHashHistory(import.meta.env.VITE_BASE)
- : createWebHistory(import.meta.env.VITE_BASE),
- // 应该添加到路由的初始路由列表。
- routes,
- scrollBehavior: (to, _from, savedPosition) => {
- if (savedPosition) {
- return savedPosition;
- }
- return to.hash ? { behavior: 'smooth', el: to.hash } : { left: 0, top: 0 };
- },
- // 是否应该禁止尾部斜杠。
- // strict: true,
-});
-
-const resetRoutes = () => resetStaticRoutes(router, routes);
-
-// 创建路由守卫
-createRouterGuard(router);
-
-export { resetRoutes, router };
diff --git a/apps/web-ele/src/router/routes/core.ts b/apps/web-ele/src/router/routes/core.ts
deleted file mode 100644
index 7218da22..00000000
--- a/apps/web-ele/src/router/routes/core.ts
+++ /dev/null
@@ -1,96 +0,0 @@
-import type { RouteRecordRaw } from 'vue-router';
-
-import { DEFAULT_HOME_PATH, LOGIN_PATH } from '@vben/constants';
-
-import { AuthPageLayout, BasicLayout } from '#/layouts';
-import { $t } from '#/locales';
-import Login from '#/views/_core/authentication/login.vue';
-
-/** 全局404页面 */
-const fallbackNotFoundRoute: RouteRecordRaw = {
- component: () => import('#/views/_core/fallback/not-found.vue'),
- meta: {
- hideInBreadcrumb: true,
- hideInMenu: true,
- hideInTab: true,
- title: '404',
- },
- name: 'FallbackNotFound',
- path: '/:path(.*)*',
-};
-
-/** 基本路由,这些路由是必须存在的 */
-const coreRoutes: RouteRecordRaw[] = [
- /**
- * 根路由
- * 使用基础布局,作为所有页面的父级容器,子级就不必配置BasicLayout。
- * 此路由必须存在,且不应修改
- */
- {
- component: BasicLayout,
- meta: {
- hideInBreadcrumb: true,
- title: 'Root',
- },
- name: 'Root',
- path: '/',
- redirect: DEFAULT_HOME_PATH,
- children: [],
- },
- {
- component: AuthPageLayout,
- meta: {
- hideInTab: true,
- title: 'Authentication',
- },
- name: 'Authentication',
- path: '/auth',
- redirect: LOGIN_PATH,
- children: [
- {
- name: 'Login',
- path: 'login',
- component: Login,
- meta: {
- title: $t('page.auth.login'),
- },
- },
- {
- name: 'CodeLogin',
- path: 'code-login',
- component: () => import('#/views/_core/authentication/code-login.vue'),
- meta: {
- title: $t('page.auth.codeLogin'),
- },
- },
- {
- name: 'QrCodeLogin',
- path: 'qrcode-login',
- component: () =>
- import('#/views/_core/authentication/qrcode-login.vue'),
- meta: {
- title: $t('page.auth.qrcodeLogin'),
- },
- },
- {
- name: 'ForgetPassword',
- path: 'forget-password',
- component: () =>
- import('#/views/_core/authentication/forget-password.vue'),
- meta: {
- title: $t('page.auth.forgetPassword'),
- },
- },
- {
- name: 'Register',
- path: 'register',
- component: () => import('#/views/_core/authentication/register.vue'),
- meta: {
- title: $t('page.auth.register'),
- },
- },
- ],
- },
-];
-
-export { coreRoutes, fallbackNotFoundRoute };
diff --git a/apps/web-ele/src/router/routes/index.ts b/apps/web-ele/src/router/routes/index.ts
deleted file mode 100644
index e6fb1440..00000000
--- a/apps/web-ele/src/router/routes/index.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import type { RouteRecordRaw } from 'vue-router';
-
-import { mergeRouteModules, traverseTreeValues } from '@vben/utils';
-
-import { coreRoutes, fallbackNotFoundRoute } from './core';
-
-const dynamicRouteFiles = import.meta.glob('./modules/**/*.ts', {
- eager: true,
-});
-
-// 有需要可以自行打开注释,并创建文件夹
-// const externalRouteFiles = import.meta.glob('./external/**/*.ts', { eager: true });
-// const staticRouteFiles = import.meta.glob('./static/**/*.ts', { eager: true });
-
-/** 动态路由 */
-const dynamicRoutes: RouteRecordRaw[] = mergeRouteModules(dynamicRouteFiles);
-
-/** 外部路由列表,访问这些页面可以不需要Layout,可能用于内嵌在别的系统(不会显示在菜单中) */
-// const externalRoutes: RouteRecordRaw[] = mergeRouteModules(externalRouteFiles);
-// const staticRoutes: RouteRecordRaw[] = mergeRouteModules(staticRouteFiles);
-const staticRoutes: RouteRecordRaw[] = [];
-const externalRoutes: RouteRecordRaw[] = [];
-
-/** 路由列表,由基本路由、外部路由和404兜底路由组成
- * 无需走权限验证(会一直显示在菜单中) */
-const routes: RouteRecordRaw[] = [
- ...coreRoutes,
- ...externalRoutes,
- fallbackNotFoundRoute,
-];
-
-/** 基本路由列表,这些路由不需要进入权限拦截 */
-const coreRouteNames = traverseTreeValues(coreRoutes, (route) => route.name);
-
-/** 有权限校验的路由列表,包含动态路由和静态路由 */
-const accessRoutes = [...dynamicRoutes, ...staticRoutes];
-export { accessRoutes, coreRouteNames, routes };
diff --git a/apps/web-ele/src/router/routes/modules/dashboard.ts b/apps/web-ele/src/router/routes/modules/dashboard.ts
deleted file mode 100644
index 5254dc65..00000000
--- a/apps/web-ele/src/router/routes/modules/dashboard.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import type { RouteRecordRaw } from 'vue-router';
-
-import { $t } from '#/locales';
-
-const routes: RouteRecordRaw[] = [
- {
- meta: {
- icon: 'lucide:layout-dashboard',
- order: -1,
- title: $t('page.dashboard.title'),
- },
- name: 'Dashboard',
- path: '/dashboard',
- children: [
- {
- name: 'Analytics',
- path: '/analytics',
- component: () => import('#/views/dashboard/analytics/index.vue'),
- meta: {
- affixTab: true,
- icon: 'lucide:area-chart',
- title: $t('page.dashboard.analytics'),
- },
- },
- {
- name: 'Workspace',
- path: '/workspace',
- component: () => import('#/views/dashboard/workspace/index.vue'),
- meta: {
- icon: 'carbon:workspace',
- title: $t('page.dashboard.workspace'),
- },
- },
- ],
- },
-];
-
-export default routes;
diff --git a/apps/web-ele/src/router/routes/modules/demos.ts b/apps/web-ele/src/router/routes/modules/demos.ts
deleted file mode 100644
index 907ea3f4..00000000
--- a/apps/web-ele/src/router/routes/modules/demos.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import type { RouteRecordRaw } from 'vue-router';
-
-import { $t } from '#/locales';
-
-const routes: RouteRecordRaw[] = [
- {
- meta: {
- icon: 'ic:baseline-view-in-ar',
- keepAlive: true,
- order: 1000,
- title: $t('demos.title'),
- },
- name: 'Demos',
- path: '/demos',
- children: [
- {
- meta: {
- title: $t('demos.elementPlus'),
- },
- name: 'NaiveDemos',
- path: '/demos/element',
- component: () => import('#/views/demos/element/index.vue'),
- },
- {
- meta: {
- title: $t('demos.form'),
- },
- name: 'BasicForm',
- path: '/demos/form',
- component: () => import('#/views/demos/form/basic.vue'),
- },
- ],
- },
-];
-
-export default routes;
diff --git a/apps/web-ele/src/router/routes/modules/vben.ts b/apps/web-ele/src/router/routes/modules/vben.ts
deleted file mode 100644
index 20fbc96c..00000000
--- a/apps/web-ele/src/router/routes/modules/vben.ts
+++ /dev/null
@@ -1,82 +0,0 @@
-import type { RouteRecordRaw } from 'vue-router';
-
-import {
- VBEN_ANT_PREVIEW_URL,
- VBEN_DOC_URL,
- VBEN_GITHUB_URL,
- VBEN_LOGO_URL,
- VBEN_NAIVE_PREVIEW_URL,
-} from '@vben/constants';
-import { SvgAntdvLogoIcon } from '@vben/icons';
-
-import { IFrameView } from '#/layouts';
-import { $t } from '#/locales';
-
-const routes: RouteRecordRaw[] = [
- {
- meta: {
- badgeType: 'dot',
- icon: VBEN_LOGO_URL,
- order: 9998,
- title: $t('demos.vben.title'),
- },
- name: 'VbenProject',
- path: '/vben-admin',
- children: [
- {
- name: 'VbenDocument',
- path: '/vben-admin/document',
- component: IFrameView,
- meta: {
- icon: 'lucide:book-open-text',
- link: VBEN_DOC_URL,
- title: $t('demos.vben.document'),
- },
- },
- {
- name: 'VbenGithub',
- path: '/vben-admin/github',
- component: IFrameView,
- meta: {
- icon: 'mdi:github',
- link: VBEN_GITHUB_URL,
- title: 'Github',
- },
- },
- {
- name: 'VbenNaive',
- path: '/vben-admin/naive',
- component: IFrameView,
- meta: {
- badgeType: 'dot',
- icon: 'logos:naiveui',
- link: VBEN_NAIVE_PREVIEW_URL,
- title: $t('demos.vben.naive-ui'),
- },
- },
- {
- name: 'VbenAntd',
- path: '/vben-admin/antd',
- component: IFrameView,
- meta: {
- badgeType: 'dot',
- icon: SvgAntdvLogoIcon,
- link: VBEN_ANT_PREVIEW_URL,
- title: $t('demos.vben.antdv'),
- },
- },
- ],
- },
- {
- name: 'VbenAbout',
- path: '/vben-admin/about',
- component: () => import('#/views/_core/about/index.vue'),
- meta: {
- icon: 'lucide:copyright',
- title: $t('demos.vben.about'),
- order: 9999,
- },
- },
-];
-
-export default routes;
diff --git a/apps/web-ele/src/store/auth.ts b/apps/web-ele/src/store/auth.ts
deleted file mode 100644
index 639fb037..00000000
--- a/apps/web-ele/src/store/auth.ts
+++ /dev/null
@@ -1,116 +0,0 @@
-import type { Recordable, UserInfo } from '@vben/types';
-
-import { ref } from 'vue';
-import { useRouter } from 'vue-router';
-
-import { DEFAULT_HOME_PATH, LOGIN_PATH } from '@vben/constants';
-import { resetAllStores, useAccessStore, useUserStore } from '@vben/stores';
-
-import { ElNotification } from 'element-plus';
-import { defineStore } from 'pinia';
-
-import { getAccessCodesApi, getUserInfoApi, loginApi, logoutApi } from '#/api';
-import { $t } from '#/locales';
-
-export const useAuthStore = defineStore('auth', () => {
- const accessStore = useAccessStore();
- const userStore = useUserStore();
- const router = useRouter();
-
- const loginLoading = ref(false);
-
- /**
- * 异步处理登录操作
- * Asynchronously handle the login process
- * @param params 登录表单数据
- */
- async function authLogin(
- params: Recordable,
- onSuccess?: () => Promise | void,
- ) {
- // 异步处理用户登录操作并获取 accessToken
- let userInfo: null | UserInfo = null;
- try {
- loginLoading.value = true;
- const { accessToken } = await loginApi(params);
-
- // 如果成功获取到 accessToken
- if (accessToken) {
- // 将 accessToken 存储到 accessStore 中
- accessStore.setAccessToken(accessToken);
-
- // 获取用户信息并存储到 accessStore 中
- const [fetchUserInfoResult, accessCodes] = await Promise.all([
- fetchUserInfo(),
- getAccessCodesApi(),
- ]);
-
- userInfo = fetchUserInfoResult;
-
- userStore.setUserInfo(userInfo);
- accessStore.setAccessCodes(accessCodes);
-
- if (accessStore.loginExpired) {
- accessStore.setLoginExpired(false);
- } else {
- onSuccess
- ? await onSuccess?.()
- : await router.push(userInfo.homePath || DEFAULT_HOME_PATH);
- }
-
- if (userInfo?.realName) {
- ElNotification({
- message: `${$t('authentication.loginSuccessDesc')}:${userInfo?.realName}`,
- title: $t('authentication.loginSuccess'),
- type: 'success',
- });
- }
- }
- } finally {
- loginLoading.value = false;
- }
-
- return {
- userInfo,
- };
- }
-
- async function logout(redirect: boolean = true) {
- try {
- await logoutApi();
- } catch {
- // 不做任何处理
- }
- resetAllStores();
- accessStore.setLoginExpired(false);
-
- // 回登录页带上当前路由地址
- await router.replace({
- path: LOGIN_PATH,
- query: redirect
- ? {
- redirect: encodeURIComponent(router.currentRoute.value.fullPath),
- }
- : {},
- });
- }
-
- async function fetchUserInfo() {
- let userInfo: null | UserInfo = null;
- userInfo = await getUserInfoApi();
- userStore.setUserInfo(userInfo);
- return userInfo;
- }
-
- function $reset() {
- loginLoading.value = false;
- }
-
- return {
- $reset,
- authLogin,
- fetchUserInfo,
- loginLoading,
- logout,
- };
-});
diff --git a/apps/web-ele/src/store/index.ts b/apps/web-ele/src/store/index.ts
deleted file mode 100644
index 269586ee..00000000
--- a/apps/web-ele/src/store/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './auth';
diff --git a/apps/web-ele/src/views/_core/README.md b/apps/web-ele/src/views/_core/README.md
deleted file mode 100644
index 8248afe6..00000000
--- a/apps/web-ele/src/views/_core/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# \_core
-
-此目录包含应用程序正常运行所需的基本视图。这些视图是应用程序布局中使用的视图。
diff --git a/apps/web-ele/src/views/_core/about/index.vue b/apps/web-ele/src/views/_core/about/index.vue
deleted file mode 100644
index 0ee52433..00000000
--- a/apps/web-ele/src/views/_core/about/index.vue
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-ele/src/views/_core/authentication/code-login.vue b/apps/web-ele/src/views/_core/authentication/code-login.vue
deleted file mode 100644
index b65f9623..00000000
--- a/apps/web-ele/src/views/_core/authentication/code-login.vue
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-ele/src/views/_core/authentication/forget-password.vue b/apps/web-ele/src/views/_core/authentication/forget-password.vue
deleted file mode 100644
index 0958e89b..00000000
--- a/apps/web-ele/src/views/_core/authentication/forget-password.vue
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-ele/src/views/_core/authentication/login.vue b/apps/web-ele/src/views/_core/authentication/login.vue
deleted file mode 100644
index 099e4c8c..00000000
--- a/apps/web-ele/src/views/_core/authentication/login.vue
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-ele/src/views/_core/authentication/qrcode-login.vue b/apps/web-ele/src/views/_core/authentication/qrcode-login.vue
deleted file mode 100644
index 23f5f2da..00000000
--- a/apps/web-ele/src/views/_core/authentication/qrcode-login.vue
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-ele/src/views/_core/authentication/register.vue b/apps/web-ele/src/views/_core/authentication/register.vue
deleted file mode 100644
index f264c467..00000000
--- a/apps/web-ele/src/views/_core/authentication/register.vue
+++ /dev/null
@@ -1,95 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-ele/src/views/_core/fallback/coming-soon.vue b/apps/web-ele/src/views/_core/fallback/coming-soon.vue
deleted file mode 100644
index f394930f..00000000
--- a/apps/web-ele/src/views/_core/fallback/coming-soon.vue
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-ele/src/views/_core/fallback/forbidden.vue b/apps/web-ele/src/views/_core/fallback/forbidden.vue
deleted file mode 100644
index 8ea65fed..00000000
--- a/apps/web-ele/src/views/_core/fallback/forbidden.vue
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-ele/src/views/_core/fallback/internal-error.vue b/apps/web-ele/src/views/_core/fallback/internal-error.vue
deleted file mode 100644
index 819a47d5..00000000
--- a/apps/web-ele/src/views/_core/fallback/internal-error.vue
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-ele/src/views/_core/fallback/not-found.vue b/apps/web-ele/src/views/_core/fallback/not-found.vue
deleted file mode 100644
index 4d178e9c..00000000
--- a/apps/web-ele/src/views/_core/fallback/not-found.vue
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-ele/src/views/_core/fallback/offline.vue b/apps/web-ele/src/views/_core/fallback/offline.vue
deleted file mode 100644
index 5de4a88d..00000000
--- a/apps/web-ele/src/views/_core/fallback/offline.vue
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-ele/src/views/dashboard/analytics/analytics-trends.vue b/apps/web-ele/src/views/dashboard/analytics/analytics-trends.vue
deleted file mode 100644
index 9bd90fc8..00000000
--- a/apps/web-ele/src/views/dashboard/analytics/analytics-trends.vue
+++ /dev/null
@@ -1,97 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-ele/src/views/dashboard/analytics/analytics-visits-data.vue b/apps/web-ele/src/views/dashboard/analytics/analytics-visits-data.vue
deleted file mode 100644
index 651abbc1..00000000
--- a/apps/web-ele/src/views/dashboard/analytics/analytics-visits-data.vue
+++ /dev/null
@@ -1,81 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-ele/src/views/dashboard/analytics/analytics-visits-sales.vue b/apps/web-ele/src/views/dashboard/analytics/analytics-visits-sales.vue
deleted file mode 100644
index f38b5c03..00000000
--- a/apps/web-ele/src/views/dashboard/analytics/analytics-visits-sales.vue
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-ele/src/views/dashboard/analytics/analytics-visits-source.vue b/apps/web-ele/src/views/dashboard/analytics/analytics-visits-source.vue
deleted file mode 100644
index d97c3c0f..00000000
--- a/apps/web-ele/src/views/dashboard/analytics/analytics-visits-source.vue
+++ /dev/null
@@ -1,64 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-ele/src/views/dashboard/analytics/analytics-visits.vue b/apps/web-ele/src/views/dashboard/analytics/analytics-visits.vue
deleted file mode 100644
index fc961c83..00000000
--- a/apps/web-ele/src/views/dashboard/analytics/analytics-visits.vue
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-ele/src/views/dashboard/analytics/index.vue b/apps/web-ele/src/views/dashboard/analytics/index.vue
deleted file mode 100644
index 00b34df1..00000000
--- a/apps/web-ele/src/views/dashboard/analytics/index.vue
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-ele/src/views/dashboard/workspace/index.vue b/apps/web-ele/src/views/dashboard/workspace/index.vue
deleted file mode 100644
index b95d6138..00000000
--- a/apps/web-ele/src/views/dashboard/workspace/index.vue
+++ /dev/null
@@ -1,266 +0,0 @@
-
-
-
-
-
-
- 早安, {{ userStore.userInfo?.realName }}, 开始您一天的工作吧!
-
- 今日晴,20℃ - 32℃!
-
-
-
-
-
diff --git a/apps/web-ele/src/views/demos/element/index.vue b/apps/web-ele/src/views/demos/element/index.vue
deleted file mode 100644
index 0a7012d6..00000000
--- a/apps/web-ele/src/views/demos/element/index.vue
+++ /dev/null
@@ -1,117 +0,0 @@
-
-
-
-
-
-
- 按钮
-
- Text
- Default
- Primary
- Info
- Success
- Warning
- Error
-
-
-
- Message
-
- 信息
- 错误
- 警告
- 成功
-
-
-
- Notification
-
- 信息
- 错误
- 警告
- 成功
-
-
-
- Segmented
-
-
-
- V-Loading
-
- 一些演示的内容
-
-
-
-
-
-
-
-
-
-
-
diff --git a/apps/web-ele/src/views/demos/form/basic.vue b/apps/web-ele/src/views/demos/form/basic.vue
deleted file mode 100644
index 771665a6..00000000
--- a/apps/web-ele/src/views/demos/form/basic.vue
+++ /dev/null
@@ -1,181 +0,0 @@
-
-
-
-
-
-
- 基础表单演示
- 设置表单值
-
-
-
-
-
-
diff --git a/apps/web-ele/tailwind.config.mjs b/apps/web-ele/tailwind.config.mjs
deleted file mode 100644
index f17f556f..00000000
--- a/apps/web-ele/tailwind.config.mjs
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from '@vben/tailwind-config';
diff --git a/apps/web-ele/tsconfig.json b/apps/web-ele/tsconfig.json
deleted file mode 100644
index 02c287fe..00000000
--- a/apps/web-ele/tsconfig.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "$schema": "https://json.schemastore.org/tsconfig",
- "extends": "@vben/tsconfig/web-app.json",
- "compilerOptions": {
- "baseUrl": ".",
- "paths": {
- "#/*": ["./src/*"]
- }
- },
- "references": [{ "path": "./tsconfig.node.json" }],
- "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"]
-}
diff --git a/apps/web-ele/tsconfig.node.json b/apps/web-ele/tsconfig.node.json
deleted file mode 100644
index c2f0d86c..00000000
--- a/apps/web-ele/tsconfig.node.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "$schema": "https://json.schemastore.org/tsconfig",
- "extends": "@vben/tsconfig/node.json",
- "compilerOptions": {
- "composite": true,
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
- "noEmit": false
- },
- "include": ["vite.config.mts"]
-}
diff --git a/apps/web-ele/vite.config.mts b/apps/web-ele/vite.config.mts
deleted file mode 100644
index 9f1e7235..00000000
--- a/apps/web-ele/vite.config.mts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { defineConfig } from '@vben/vite-config';
-
-import ElementPlus from 'unplugin-element-plus/vite';
-
-export default defineConfig(async () => {
- return {
- application: {},
- vite: {
- plugins: [
- ElementPlus({
- format: 'esm',
- }),
- ],
- server: {
- proxy: {
- '/api': {
- changeOrigin: true,
- rewrite: (path) => path.replace(/^\/api/, ''),
- // mock代理目标地址
- target: 'http://localhost:5320/api',
- ws: true,
- },
- },
- },
- },
- };
-});
diff --git a/apps/web-naive/.env b/apps/web-naive/.env
deleted file mode 100644
index 350660c0..00000000
--- a/apps/web-naive/.env
+++ /dev/null
@@ -1,5 +0,0 @@
-# 应用标题
-VITE_APP_TITLE=Vben Admin Naive
-
-# 应用命名空间,用于缓存、store等功能的前缀,确保隔离
-VITE_APP_NAMESPACE=vben-web-naive
diff --git a/apps/web-naive/.env.analyze b/apps/web-naive/.env.analyze
deleted file mode 100644
index ffafa8dd..00000000
--- a/apps/web-naive/.env.analyze
+++ /dev/null
@@ -1,7 +0,0 @@
-# public path
-VITE_BASE=/
-
-# Basic interface address SPA
-VITE_GLOB_API_URL=/api
-
-VITE_VISUALIZER=true
diff --git a/apps/web-naive/.env.development b/apps/web-naive/.env.development
deleted file mode 100644
index 11c5254a..00000000
--- a/apps/web-naive/.env.development
+++ /dev/null
@@ -1,16 +0,0 @@
-# 端口号
-VITE_PORT=5888
-
-VITE_BASE=/
-
-# 接口地址
-VITE_GLOB_API_URL=/api
-
-# 是否开启 Nitro Mock服务,true 为开启,false 为关闭
-VITE_NITRO_MOCK=true
-
-# 是否打开 devtools,true 为打开,false 为关闭
-VITE_DEVTOOLS=false
-
-# 是否注入全局loading
-VITE_INJECT_APP_LOADING=true
diff --git a/apps/web-naive/.env.production b/apps/web-naive/.env.production
deleted file mode 100644
index 5375847a..00000000
--- a/apps/web-naive/.env.production
+++ /dev/null
@@ -1,19 +0,0 @@
-VITE_BASE=/
-
-# 接口地址
-VITE_GLOB_API_URL=https://mock-napi.vben.pro/api
-
-# 是否开启压缩,可以设置为 none, brotli, gzip
-VITE_COMPRESS=none
-
-# 是否开启 PWA
-VITE_PWA=false
-
-# vue-router 的模式
-VITE_ROUTER_HISTORY=hash
-
-# 是否注入全局loading
-VITE_INJECT_APP_LOADING=true
-
-# 打包后是否生成dist.zip
-VITE_ARCHIVER=true
diff --git a/apps/web-naive/index.html b/apps/web-naive/index.html
deleted file mode 100644
index 7ea63841..00000000
--- a/apps/web-naive/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- <%= VITE_APP_TITLE %>
-
-
-
-
-
-
-
-
diff --git a/apps/web-naive/package.json b/apps/web-naive/package.json
deleted file mode 100644
index 57857c89..00000000
--- a/apps/web-naive/package.json
+++ /dev/null
@@ -1,49 +0,0 @@
-{
- "name": "@vben/web-naive",
- "version": "5.5.2",
- "homepage": "https://vben.pro",
- "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
- "repository": {
- "type": "git",
- "url": "git+https://github.com/vbenjs/vue-vben-admin.git",
- "directory": "apps/web-naive"
- },
- "license": "MIT",
- "author": {
- "name": "vben",
- "email": "ann.vben@gmail.com",
- "url": "https://github.com/anncwb"
- },
- "type": "module",
- "scripts": {
- "build": "pnpm vite build --mode production",
- "build:analyze": "pnpm vite build --mode analyze",
- "dev": "pnpm vite --mode development",
- "preview": "vite preview",
- "typecheck": "vue-tsc --noEmit --skipLibCheck"
- },
- "imports": {
- "#/*": "./src/*"
- },
- "dependencies": {
- "@vben/access": "workspace:*",
- "@vben/common-ui": "workspace:*",
- "@vben/constants": "workspace:*",
- "@vben/hooks": "workspace:*",
- "@vben/icons": "workspace:*",
- "@vben/layouts": "workspace:*",
- "@vben/locales": "workspace:*",
- "@vben/plugins": "workspace:*",
- "@vben/preferences": "workspace:*",
- "@vben/request": "workspace:*",
- "@vben/stores": "workspace:*",
- "@vben/styles": "workspace:*",
- "@vben/types": "workspace:*",
- "@vben/utils": "workspace:*",
- "@vueuse/core": "catalog:",
- "naive-ui": "catalog:",
- "pinia": "catalog:",
- "vue": "catalog:",
- "vue-router": "catalog:"
- }
-}
diff --git a/apps/web-naive/postcss.config.mjs b/apps/web-naive/postcss.config.mjs
deleted file mode 100644
index 3d807045..00000000
--- a/apps/web-naive/postcss.config.mjs
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from '@vben/tailwind-config/postcss';
diff --git a/apps/web-naive/public/favicon.ico b/apps/web-naive/public/favicon.ico
deleted file mode 100644
index fcf9818e..00000000
Binary files a/apps/web-naive/public/favicon.ico and /dev/null differ
diff --git a/apps/web-naive/src/adapter/component/index.ts b/apps/web-naive/src/adapter/component/index.ts
deleted file mode 100644
index 70037005..00000000
--- a/apps/web-naive/src/adapter/component/index.ts
+++ /dev/null
@@ -1,179 +0,0 @@
-/**
- * 通用组件共同的使用的基础组件,原先放在 adapter/form 内部,限制了使用范围,这里提取出来,方便其他地方使用
- * 可用于 vben-form、vben-modal、vben-drawer 等组件使用,
- */
-
-import type { BaseFormComponentType } from '@vben/common-ui';
-import type { Component, SetupContext } from 'vue';
-
-import { message } from '#/adapter/naive';
-import { ApiComponent, globalShareState, IconPicker } from '@vben/common-ui';
-import { $t } from '@vben/locales';
-import {
- NButton,
- NCheckbox,
- NCheckboxGroup,
- NDatePicker,
- NDivider,
- NInput,
- NInputNumber,
- NRadio,
- NRadioButton,
- NRadioGroup,
- NSelect,
- NSpace,
- NSwitch,
- NTimePicker,
- NTreeSelect,
- NUpload,
-} from 'naive-ui';
-import { h } from 'vue';
-
-const withDefaultPlaceholder = (
- component: T,
- type: 'input' | 'select',
-) => {
- return (props: any, { attrs, slots }: Omit) => {
- const placeholder = props?.placeholder || $t(`ui.placeholder.${type}`);
- return h(component, { ...props, ...attrs, placeholder }, slots);
- };
-};
-
-// 这里需要自行根据业务组件库进行适配,需要用到的组件都需要在这里类型说明
-export type ComponentType =
- | 'ApiSelect'
- | 'ApiTreeSelect'
- | 'Checkbox'
- | 'CheckboxGroup'
- | 'DatePicker'
- | 'Divider'
- | 'IconPicker'
- | 'Input'
- | 'InputNumber'
- | 'RadioGroup'
- | 'Select'
- | 'Space'
- | 'Switch'
- | 'TimePicker'
- | 'TreeSelect'
- | 'Upload'
- | BaseFormComponentType;
-
-async function initComponentAdapter() {
- const components: Partial> = {
- // 如果你的组件体积比较大,可以使用异步加载
- // Button: () =>
- // import('xxx').then((res) => res.Button),
-
- ApiSelect: (props, { attrs, slots }) => {
- return h(
- ApiComponent,
- {
- placeholder: $t('ui.placeholder.select'),
- ...props,
- ...attrs,
- component: NSelect,
- modelPropName: 'value',
- },
- slots,
- );
- },
- ApiTreeSelect: (props, { attrs, slots }) => {
- return h(
- ApiComponent,
- {
- placeholder: $t('ui.placeholder.select'),
- ...props,
- ...attrs,
- component: NTreeSelect,
- nodeKey: 'value',
- loadingSlot: 'arrow',
- keyField: 'value',
- modelPropName: 'value',
- optionsPropName: 'options',
- visibleEvent: 'onVisibleChange',
- },
- slots,
- );
- },
- Checkbox: NCheckbox,
- CheckboxGroup: (props, { attrs, slots }) => {
- let defaultSlot;
- if (Reflect.has(slots, 'default')) {
- defaultSlot = slots.default;
- } else {
- const { options } = attrs;
- if (Array.isArray(options)) {
- defaultSlot = () => options.map((option) => h(NCheckbox, option));
- }
- }
- return h(
- NCheckboxGroup,
- { ...props, ...attrs },
- { default: defaultSlot },
- );
- },
- DatePicker: NDatePicker,
- // 自定义默认按钮
- DefaultButton: (props, { attrs, slots }) => {
- return h(NButton, { ...props, attrs, type: 'default' }, slots);
- },
- // 自定义主要按钮
- PrimaryButton: (props, { attrs, slots }) => {
- return h(NButton, { ...props, attrs, type: 'primary' }, slots);
- },
- Divider: NDivider,
- IconPicker: (props, { attrs, slots }) => {
- return h(
- IconPicker,
- { iconSlot: 'suffix', inputComponent: NInput, ...props, ...attrs },
- slots,
- );
- },
- Input: withDefaultPlaceholder(NInput, 'input'),
- InputNumber: withDefaultPlaceholder(NInputNumber, 'input'),
- RadioGroup: (props, { attrs, slots }) => {
- let defaultSlot;
- if (Reflect.has(slots, 'default')) {
- defaultSlot = slots.default;
- } else {
- const { options } = attrs;
- if (Array.isArray(options)) {
- defaultSlot = () =>
- options.map((option) =>
- h(attrs.isButton ? NRadioButton : NRadio, option),
- );
- }
- }
- const groupRender = h(
- NRadioGroup,
- { ...props, ...attrs },
- { default: defaultSlot },
- );
- return attrs.isButton
- ? h(NSpace, { vertical: true }, () => groupRender)
- : groupRender;
- },
- Select: withDefaultPlaceholder(NSelect, 'select'),
- Space: NSpace,
- Switch: NSwitch,
- TimePicker: NTimePicker,
- TreeSelect: withDefaultPlaceholder(NTreeSelect, 'select'),
- Upload: NUpload,
- };
-
- // 将组件注册到全局共享状态中
- globalShareState.setComponents(components);
-
- // 定义全局共享状态中的消息提示
- globalShareState.defineMessage({
- // 复制成功消息提示
- copyPreferencesSuccess: (title, content) => {
- message.success(content || title, {
- duration: 0,
- });
- },
- });
-}
-
-export { initComponentAdapter };
diff --git a/apps/web-naive/src/adapter/form.ts b/apps/web-naive/src/adapter/form.ts
deleted file mode 100644
index 2f2ed2ab..00000000
--- a/apps/web-naive/src/adapter/form.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import type {
- VbenFormSchema as FormSchema,
- VbenFormProps,
-} from '@vben/common-ui';
-
-import type { ComponentType } from './component';
-
-import { setupVbenForm, useVbenForm as useForm, z } from '@vben/common-ui';
-import { $t } from '@vben/locales';
-
-setupVbenForm({
- config: {
- // naive-ui组件的空值为null,不能是undefined,否则重置表单时不生效
- emptyStateValue: null,
- baseModelPropName: 'value',
- modelPropNameMap: {
- Checkbox: 'checked',
- Radio: 'checked',
- Upload: 'fileList',
- },
- },
- defineRules: {
- required: (value, _params, ctx) => {
- if (value === undefined || value === null || value.length === 0) {
- return $t('ui.formRules.required', [ctx.label]);
- }
- return true;
- },
- selectRequired: (value, _params, ctx) => {
- if (value === undefined || value === null) {
- return $t('ui.formRules.selectRequired', [ctx.label]);
- }
- return true;
- },
- },
-});
-
-const useVbenForm = useForm;
-
-export { useVbenForm, z };
-
-export type VbenFormSchema = FormSchema;
-export type { VbenFormProps };
diff --git a/apps/web-naive/src/adapter/naive.ts b/apps/web-naive/src/adapter/naive.ts
deleted file mode 100644
index 1eb7b7b6..00000000
--- a/apps/web-naive/src/adapter/naive.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { computed } from 'vue';
-
-import { preferences } from '@vben/preferences';
-import '@vben/styles';
-
-import { createDiscreteApi, darkTheme, lightTheme } from 'naive-ui';
-
-const themeOverridesProviderProps = computed(() => ({
- themeOverrides: preferences.theme.mode === 'light' ? lightTheme : darkTheme,
-}));
-
-const themeProviderProps = computed(() => ({
- theme: preferences.theme.mode === 'light' ? lightTheme : darkTheme,
-}));
-
-export const { dialog, loadingBar, message, modal, notification } =
- createDiscreteApi(
- ['message', 'dialog', 'notification', 'loadingBar', 'modal'],
- {
- configProviderProps: themeProviderProps,
- loadingBarProviderProps: themeOverridesProviderProps,
- messageProviderProps: themeOverridesProviderProps,
- notificationProviderProps: themeOverridesProviderProps,
- },
- );
diff --git a/apps/web-naive/src/adapter/vxe-table.ts b/apps/web-naive/src/adapter/vxe-table.ts
deleted file mode 100644
index 081cfb29..00000000
--- a/apps/web-naive/src/adapter/vxe-table.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-import { h } from 'vue';
-
-import { setupVbenVxeTable, useVbenVxeGrid } from '@vben/plugins/vxe-table';
-
-import { NButton, NImage } from 'naive-ui';
-
-import { useVbenForm } from './form';
-
-setupVbenVxeTable({
- configVxeTable: (vxeUI) => {
- vxeUI.setConfig({
- grid: {
- align: 'center',
- border: false,
- columnConfig: {
- resizable: true,
- },
- minHeight: 180,
- formConfig: {
- // 全局禁用vxe-table的表单配置,使用formOptions
- enabled: false,
- },
- proxyConfig: {
- autoLoad: true,
- response: {
- result: 'items',
- total: 'total',
- list: 'items',
- },
- showActiveMsg: true,
- showResponseMsg: false,
- },
- round: true,
- showOverflow: true,
- size: 'small',
- },
- });
-
- // 表格配置项可以用 cellRender: { name: 'CellImage' },
- vxeUI.renderer.add('CellImage', {
- renderTableDefault(_renderOpts, params) {
- const { column, row } = params;
- return h(NImage, { src: row[column.field] });
- },
- });
-
- // 表格配置项可以用 cellRender: { name: 'CellLink' },
- vxeUI.renderer.add('CellLink', {
- renderTableDefault(renderOpts) {
- const { props } = renderOpts;
- return h(
- NButton,
- { size: 'small', type: 'primary', quaternary: true },
- { default: () => props?.text },
- );
- },
- });
-
- // 这里可以自行扩展 vxe-table 的全局配置,比如自定义格式化
- // vxeUI.formats.add
- },
- useVbenForm,
-});
-
-export { useVbenVxeGrid };
-
-export type * from '@vben/plugins/vxe-table';
diff --git a/apps/web-naive/src/api/core/auth.ts b/apps/web-naive/src/api/core/auth.ts
deleted file mode 100644
index 71d9f994..00000000
--- a/apps/web-naive/src/api/core/auth.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import { baseRequestClient, requestClient } from '#/api/request';
-
-export namespace AuthApi {
- /** 登录接口参数 */
- export interface LoginParams {
- password?: string;
- username?: string;
- }
-
- /** 登录接口返回值 */
- export interface LoginResult {
- accessToken: string;
- }
-
- export interface RefreshTokenResult {
- data: string;
- status: number;
- }
-}
-
-/**
- * 登录
- */
-export async function loginApi(data: AuthApi.LoginParams) {
- return requestClient.post('/auth/login', data);
-}
-
-/**
- * 刷新accessToken
- */
-export async function refreshTokenApi() {
- return baseRequestClient.post('/auth/refresh', {
- withCredentials: true,
- });
-}
-
-/**
- * 退出登录
- */
-export async function logoutApi() {
- return baseRequestClient.post('/auth/logout', {
- withCredentials: true,
- });
-}
-
-/**
- * 获取用户权限码
- */
-export async function getAccessCodesApi() {
- return requestClient.get('/auth/codes');
-}
diff --git a/apps/web-naive/src/api/core/index.ts b/apps/web-naive/src/api/core/index.ts
deleted file mode 100644
index 28a5aef4..00000000
--- a/apps/web-naive/src/api/core/index.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export * from './auth';
-export * from './menu';
-export * from './user';
diff --git a/apps/web-naive/src/api/core/menu.ts b/apps/web-naive/src/api/core/menu.ts
deleted file mode 100644
index 9ef60b11..00000000
--- a/apps/web-naive/src/api/core/menu.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import type { RouteRecordStringComponent } from '@vben/types';
-
-import { requestClient } from '#/api/request';
-
-/**
- * 获取用户所有菜单
- */
-export async function getAllMenusApi() {
- return requestClient.get('/menu/all');
-}
diff --git a/apps/web-naive/src/api/core/user.ts b/apps/web-naive/src/api/core/user.ts
deleted file mode 100644
index 7e28ea84..00000000
--- a/apps/web-naive/src/api/core/user.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import type { UserInfo } from '@vben/types';
-
-import { requestClient } from '#/api/request';
-
-/**
- * 获取用户信息
- */
-export async function getUserInfoApi() {
- return requestClient.get('/user/info');
-}
diff --git a/apps/web-naive/src/api/index.ts b/apps/web-naive/src/api/index.ts
deleted file mode 100644
index 4b0e0413..00000000
--- a/apps/web-naive/src/api/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './core';
diff --git a/apps/web-naive/src/api/request.ts b/apps/web-naive/src/api/request.ts
deleted file mode 100644
index b09c3396..00000000
--- a/apps/web-naive/src/api/request.ts
+++ /dev/null
@@ -1,102 +0,0 @@
-/**
- * 该文件可自行根据业务逻辑进行调整
- */
-import type { RequestClientOptions } from '@vben/request';
-
-import { useAppConfig } from '@vben/hooks';
-import { preferences } from '@vben/preferences';
-import {
- authenticateResponseInterceptor,
- errorMessageResponseInterceptor,
- RequestClient,
-} from '@vben/request';
-import { useAccessStore } from '@vben/stores';
-
-import { message } from '#/adapter/naive';
-import { useAuthStore } from '#/store';
-
-import { refreshTokenApi } from './core';
-
-const { apiURL } = useAppConfig(import.meta.env, import.meta.env.PROD);
-
-function createRequestClient(baseURL: string, options?: RequestClientOptions) {
- const client = new RequestClient({
- ...options,
- baseURL,
- });
-
- /**
- * 重新认证逻辑
- */
- async function doReAuthenticate() {
- console.warn('Access token or refresh token is invalid or expired. ');
- const accessStore = useAccessStore();
- const authStore = useAuthStore();
- accessStore.setAccessToken(null);
- if (
- preferences.app.loginExpiredMode === 'modal' &&
- accessStore.isAccessChecked
- ) {
- accessStore.setLoginExpired(true);
- } else {
- await authStore.logout();
- }
- }
-
- /**
- * 刷新token逻辑
- */
- async function doRefreshToken() {
- const accessStore = useAccessStore();
- const resp = await refreshTokenApi();
- const newToken = resp.data;
- accessStore.setAccessToken(newToken);
- return newToken;
- }
-
- function formatToken(token: null | string) {
- return token ? `Bearer ${token}` : null;
- }
-
- // 请求头处理
- client.addRequestInterceptor({
- fulfilled: async (config) => {
- const accessStore = useAccessStore();
-
- config.headers.Authorization = formatToken(accessStore.accessToken);
- config.headers['Accept-Language'] = preferences.app.locale;
- return config;
- },
- });
-
- // token过期的处理
- client.addResponseInterceptor(
- authenticateResponseInterceptor({
- client,
- doReAuthenticate,
- doRefreshToken,
- enableRefreshToken: preferences.app.enableRefreshToken,
- formatToken,
- }),
- );
-
- // 通用的错误处理,如果没有进入上面的错误处理逻辑,就会进入这里
- client.addResponseInterceptor(
- errorMessageResponseInterceptor((msg: string, error) => {
- // 这里可以根据业务进行定制,你可以拿到 error 内的信息进行定制化处理,根据不同的 code 做不同的提示,而不是直接使用 message.error 提示 msg
- // 当前mock接口返回的错误字段是 error 或者 message
- const responseData = error?.response?.data ?? {};
- const errorMessage = responseData?.error ?? responseData?.message ?? '';
- // 如果没有错误信息,则会根据状态码进行提示
- message.error(errorMessage || msg);
- }),
- );
-
- return client;
-}
-
-export const requestClient = createRequestClient(apiURL, {
- responseReturn: 'data',
-});
-
-export const baseRequestClient = new RequestClient({ baseURL: apiURL });
diff --git a/apps/web-naive/src/app.vue b/apps/web-naive/src/app.vue
deleted file mode 100644
index 23983c55..00000000
--- a/apps/web-naive/src/app.vue
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/apps/web-naive/src/bootstrap.ts b/apps/web-naive/src/bootstrap.ts
deleted file mode 100644
index a423bff4..00000000
--- a/apps/web-naive/src/bootstrap.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-import { createApp, watchEffect } from 'vue';
-
-import { registerAccessDirective } from '@vben/access';
-import { initTippy } from '@vben/common-ui';
-import { preferences } from '@vben/preferences';
-import { initStores } from '@vben/stores';
-import '@vben/styles';
-import '@vben/styles/naive';
-
-import { useTitle } from '@vueuse/core';
-
-import { $t, setupI18n } from '#/locales';
-
-import { initComponentAdapter } from './adapter/component';
-import App from './app.vue';
-import { router } from './router';
-
-async function bootstrap(namespace: string) {
- // 初始化组件适配器
- initComponentAdapter();
-
- // // 设置弹窗的默认配置
- // setDefaultModalProps({
- // fullscreenButton: false,
- // });
- // // 设置抽屉的默认配置
- // setDefaultDrawerProps({
- // // zIndex: 2000,
- // });
-
- const app = createApp(App);
-
- // 国际化 i18n 配置
- await setupI18n(app);
-
- // 配置 pinia-tore
- await initStores(app, { namespace });
-
- // 安装权限指令
- registerAccessDirective(app);
-
- // 初始化 tippy
- initTippy(app);
-
- // 配置路由及路由守卫
- app.use(router);
-
- // 动态更新标题
- watchEffect(() => {
- if (preferences.app.dynamicTitle) {
- const routeTitle = router.currentRoute.value.meta?.title;
- const pageTitle =
- (routeTitle ? `${$t(routeTitle)} - ` : '') + preferences.app.name;
- useTitle(pageTitle);
- }
- });
-
- app.mount('#app');
-}
-
-export { bootstrap };
diff --git a/apps/web-naive/src/layouts/auth.vue b/apps/web-naive/src/layouts/auth.vue
deleted file mode 100644
index 18d415bc..00000000
--- a/apps/web-naive/src/layouts/auth.vue
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/apps/web-naive/src/layouts/basic.vue b/apps/web-naive/src/layouts/basic.vue
deleted file mode 100644
index f75b3ddc..00000000
--- a/apps/web-naive/src/layouts/basic.vue
+++ /dev/null
@@ -1,158 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/apps/web-naive/src/layouts/index.ts b/apps/web-naive/src/layouts/index.ts
deleted file mode 100644
index a4320780..00000000
--- a/apps/web-naive/src/layouts/index.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-const BasicLayout = () => import('./basic.vue');
-const AuthPageLayout = () => import('./auth.vue');
-
-const IFrameView = () => import('@vben/layouts').then((m) => m.IFrameView);
-
-export { AuthPageLayout, BasicLayout, IFrameView };
diff --git a/apps/web-naive/src/locales/README.md b/apps/web-naive/src/locales/README.md
deleted file mode 100644
index 7b451032..00000000
--- a/apps/web-naive/src/locales/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# locale
-
-每个app使用的国际化可能不同,这里用于扩展国际化的功能,例如扩展 dayjs、antd组件库的多语言切换,以及app本身的国际化文件。
diff --git a/apps/web-naive/src/locales/index.ts b/apps/web-naive/src/locales/index.ts
deleted file mode 100644
index c53f6632..00000000
--- a/apps/web-naive/src/locales/index.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import type { LocaleSetupOptions, SupportedLanguagesType } from '@vben/locales';
-import type { App } from 'vue';
-
-import {
- $t,
- setupI18n as coreSetup,
- loadLocalesMapFromDir,
-} from '@vben/locales';
-import { preferences } from '@vben/preferences';
-
-const modules = import.meta.glob('./langs/**/*.json');
-
-const localesMap = loadLocalesMapFromDir(
- /\.\/langs\/([^/]+)\/(.*)\.json$/,
- modules,
-);
-
-/**
- * 加载应用特有的语言包
- * 这里也可以改造为从服务端获取翻译数据
- * @param lang
- */
-async function loadMessages(lang: SupportedLanguagesType) {
- const appLocaleMessages = await localesMap[lang]?.();
- return appLocaleMessages?.default;
-}
-
-async function setupI18n(app: App, options: LocaleSetupOptions = {}) {
- await coreSetup(app, {
- defaultLocale: preferences.app.locale,
- loadMessages,
- missingWarn: !import.meta.env.PROD,
- ...options,
- });
-}
-
-export { $t, setupI18n };
diff --git a/apps/web-naive/src/locales/langs/en-US/demos.json b/apps/web-naive/src/locales/langs/en-US/demos.json
deleted file mode 100644
index 839fc2e6..00000000
--- a/apps/web-naive/src/locales/langs/en-US/demos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "title": "Demos",
- "naive": "Naive UI",
- "table": "Table",
- "form": "Form",
- "vben": {
- "title": "Project",
- "about": "About",
- "document": "Document",
- "antdv": "Ant Design Vue Version",
- "naive-ui": "Naive UI Version",
- "element-plus": "Element Plus Version"
- }
-}
diff --git a/apps/web-naive/src/locales/langs/en-US/page.json b/apps/web-naive/src/locales/langs/en-US/page.json
deleted file mode 100644
index f021341a..00000000
--- a/apps/web-naive/src/locales/langs/en-US/page.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "auth": {
- "login": "Login",
- "register": "Register",
- "codeLogin": "Code Login",
- "qrcodeLogin": "Qr Code Login",
- "forgetPassword": "Forget Password",
- "oauthLogin": "OAuth Login"
- },
- "dashboard": {
- "title": "Dashboard",
- "analytics": "Analytics",
- "workspace": "Workspace"
- }
-}
diff --git a/apps/web-naive/src/locales/langs/zh-CN/demos.json b/apps/web-naive/src/locales/langs/zh-CN/demos.json
deleted file mode 100644
index e0d7e616..00000000
--- a/apps/web-naive/src/locales/langs/zh-CN/demos.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "title": "演示",
- "naive": "Naive UI",
- "table": "Table",
- "form": "表单",
- "vben": {
- "title": "项目",
- "about": "关于",
- "document": "文档",
- "antdv": "Ant Design Vue 版本",
- "naive-ui": "Naive UI 版本",
- "element-plus": "Element Plus 版本"
- }
-}
diff --git a/apps/web-naive/src/locales/langs/zh-CN/page.json b/apps/web-naive/src/locales/langs/zh-CN/page.json
deleted file mode 100644
index 6fa681ee..00000000
--- a/apps/web-naive/src/locales/langs/zh-CN/page.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "auth": {
- "login": "登录",
- "register": "注册",
- "codeLogin": "验证码登陆",
- "qrcodeLogin": "二维码登陆",
- "forgetPassword": "忘记密码",
- "oauthLogin": "第三方登录"
- },
- "dashboard": {
- "title": "概览",
- "analytics": "分析页",
- "workspace": "工作台"
- }
-}
diff --git a/apps/web-naive/src/main.ts b/apps/web-naive/src/main.ts
deleted file mode 100644
index 5d728a02..00000000
--- a/apps/web-naive/src/main.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import { initPreferences } from '@vben/preferences';
-import { unmountGlobalLoading } from '@vben/utils';
-
-import { overridesPreferences } from './preferences';
-
-/**
- * 应用初始化完成之后再进行页面加载渲染
- */
-async function initApplication() {
- // name用于指定项目唯一标识
- // 用于区分不同项目的偏好设置以及存储数据的key前缀以及其他一些需要隔离的数据
- const env = import.meta.env.PROD ? 'prod' : 'dev';
- const appVersion = import.meta.env.VITE_APP_VERSION;
- const namespace = `${import.meta.env.VITE_APP_NAMESPACE}-${appVersion}-${env}`;
-
- // app偏好设置初始化
- await initPreferences({
- namespace,
- overrides: overridesPreferences,
- });
-
- // 启动应用并挂载
- // vue应用主要逻辑及视图
- const { bootstrap } = await import('./bootstrap');
- await bootstrap(namespace);
-
- // 移除并销毁loading
- unmountGlobalLoading();
-}
-
-initApplication();
diff --git a/apps/web-naive/src/preferences.ts b/apps/web-naive/src/preferences.ts
deleted file mode 100644
index b2e9ace4..00000000
--- a/apps/web-naive/src/preferences.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { defineOverridesPreferences } from '@vben/preferences';
-
-/**
- * @description 项目配置文件
- * 只需要覆盖项目中的一部分配置,不需要的配置不用覆盖,会自动使用默认配置
- * !!! 更改配置后请清空缓存,否则可能不生效
- */
-export const overridesPreferences = defineOverridesPreferences({
- // overrides
- app: {
- name: import.meta.env.VITE_APP_TITLE,
- },
-});
diff --git a/apps/web-naive/src/router/access.ts b/apps/web-naive/src/router/access.ts
deleted file mode 100644
index 7a80bac0..00000000
--- a/apps/web-naive/src/router/access.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import type {
- ComponentRecordType,
- GenerateMenuAndRoutesOptions,
-} from '@vben/types';
-
-import { generateAccessible } from '@vben/access';
-import { preferences } from '@vben/preferences';
-
-import { message } from '#/adapter/naive';
-import { getAllMenusApi } from '#/api';
-import { BasicLayout, IFrameView } from '#/layouts';
-import { $t } from '#/locales';
-
-const forbiddenComponent = () => import('#/views/_core/fallback/forbidden.vue');
-
-async function generateAccess(options: GenerateMenuAndRoutesOptions) {
- const pageMap: ComponentRecordType = import.meta.glob('../views/**/*.vue');
-
- const layoutMap: ComponentRecordType = {
- BasicLayout,
- IFrameView,
- };
-
- return await generateAccessible(preferences.app.accessMode, {
- ...options,
- fetchMenuListAsync: async () => {
- message.loading(`${$t('common.loadingMenu')}...`, {
- duration: 1.5,
- });
- return await getAllMenusApi();
- },
- // 可以指定没有权限跳转403页面
- forbiddenComponent,
- // 如果 route.meta.menuVisibleWithForbidden = true
- layoutMap,
- pageMap,
- });
-}
-
-export { generateAccess };
diff --git a/apps/web-naive/src/router/guard.ts b/apps/web-naive/src/router/guard.ts
deleted file mode 100644
index 281ea31a..00000000
--- a/apps/web-naive/src/router/guard.ts
+++ /dev/null
@@ -1,132 +0,0 @@
-import type { Router } from 'vue-router';
-
-import { DEFAULT_HOME_PATH, LOGIN_PATH } from '@vben/constants';
-import { preferences } from '@vben/preferences';
-import { useAccessStore, useUserStore } from '@vben/stores';
-import { startProgress, stopProgress } from '@vben/utils';
-
-import { accessRoutes, coreRouteNames } from '#/router/routes';
-import { useAuthStore } from '#/store';
-
-import { generateAccess } from './access';
-
-/**
- * 通用守卫配置
- * @param router
- */
-function setupCommonGuard(router: Router) {
- // 记录已经加载的页面
- const loadedPaths = new Set();
-
- router.beforeEach(async (to) => {
- to.meta.loaded = loadedPaths.has(to.path);
-
- // 页面加载进度条
- if (!to.meta.loaded && preferences.transition.progress) {
- startProgress();
- }
- return true;
- });
-
- router.afterEach((to) => {
- // 记录页面是否加载,如果已经加载,后续的页面切换动画等效果不在重复执行
-
- loadedPaths.add(to.path);
-
- // 关闭页面加载进度条
- if (preferences.transition.progress) {
- stopProgress();
- }
- });
-}
-
-/**
- * 权限访问守卫配置
- * @param router
- */
-function setupAccessGuard(router: Router) {
- router.beforeEach(async (to, from) => {
- const accessStore = useAccessStore();
- const userStore = useUserStore();
- const authStore = useAuthStore();
-
- // 基本路由,这些路由不需要进入权限拦截
- if (coreRouteNames.includes(to.name as string)) {
- if (to.path === LOGIN_PATH && accessStore.accessToken) {
- return decodeURIComponent(
- (to.query?.redirect as string) ||
- userStore.userInfo?.homePath ||
- DEFAULT_HOME_PATH,
- );
- }
- return true;
- }
-
- // accessToken 检查
- if (!accessStore.accessToken) {
- // 明确声明忽略权限访问权限,则可以访问
- if (to.meta.ignoreAccess) {
- return true;
- }
-
- // 没有访问权限,跳转登录页面
- if (to.fullPath !== LOGIN_PATH) {
- return {
- path: LOGIN_PATH,
- // 如不需要,直接删除 query
- query:
- to.fullPath === DEFAULT_HOME_PATH
- ? {}
- : { redirect: encodeURIComponent(to.fullPath) },
- // 携带当前跳转的页面,登录后重新跳转该页面
- replace: true,
- };
- }
- return to;
- }
-
- // 是否已经生成过动态路由
- if (accessStore.isAccessChecked) {
- return true;
- }
- // 生成路由表
- // 当前登录用户拥有的角色标识列表
- const userInfo = userStore.userInfo || (await authStore.fetchUserInfo());
- const userRoles = userInfo.roles ?? [];
-
- // 生成菜单和路由
- const { accessibleMenus, accessibleRoutes } = await generateAccess({
- roles: userRoles,
- router,
- // 则会在菜单中显示,但是访问会被重定向到403
- routes: accessRoutes,
- });
-
- // 保存菜单信息和路由信息
- accessStore.setAccessMenus(accessibleMenus);
- accessStore.setAccessRoutes(accessibleRoutes);
- accessStore.setIsAccessChecked(true);
- const redirectPath = (from.query.redirect ??
- (to.path === DEFAULT_HOME_PATH
- ? userInfo.homePath || DEFAULT_HOME_PATH
- : to.fullPath)) as string;
-
- return {
- ...router.resolve(decodeURIComponent(redirectPath)),
- replace: true,
- };
- });
-}
-
-/**
- * 项目守卫配置
- * @param router
- */
-function createRouterGuard(router: Router) {
- /** 通用 */
- setupCommonGuard(router);
- /** 权限访问 */
- setupAccessGuard(router);
-}
-
-export { createRouterGuard };
diff --git a/apps/web-naive/src/router/index.ts b/apps/web-naive/src/router/index.ts
deleted file mode 100644
index 48402303..00000000
--- a/apps/web-naive/src/router/index.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import {
- createRouter,
- createWebHashHistory,
- createWebHistory,
-} from 'vue-router';
-
-import { resetStaticRoutes } from '@vben/utils';
-
-import { createRouterGuard } from './guard';
-import { routes } from './routes';
-
-/**
- * @zh_CN 创建vue-router实例
- */
-const router = createRouter({
- history:
- import.meta.env.VITE_ROUTER_HISTORY === 'hash'
- ? createWebHashHistory(import.meta.env.VITE_BASE)
- : createWebHistory(import.meta.env.VITE_BASE),
- // 应该添加到路由的初始路由列表。
- routes,
- scrollBehavior: (to, _from, savedPosition) => {
- if (savedPosition) {
- return savedPosition;
- }
- return to.hash ? { behavior: 'smooth', el: to.hash } : { left: 0, top: 0 };
- },
- // 是否应该禁止尾部斜杠。
- // strict: true,
-});
-
-const resetRoutes = () => resetStaticRoutes(router, routes);
-
-// 创建路由守卫
-createRouterGuard(router);
-
-export { resetRoutes, router };
diff --git a/apps/web-naive/src/router/routes/core.ts b/apps/web-naive/src/router/routes/core.ts
deleted file mode 100644
index 7218da22..00000000
--- a/apps/web-naive/src/router/routes/core.ts
+++ /dev/null
@@ -1,96 +0,0 @@
-import type { RouteRecordRaw } from 'vue-router';
-
-import { DEFAULT_HOME_PATH, LOGIN_PATH } from '@vben/constants';
-
-import { AuthPageLayout, BasicLayout } from '#/layouts';
-import { $t } from '#/locales';
-import Login from '#/views/_core/authentication/login.vue';
-
-/** 全局404页面 */
-const fallbackNotFoundRoute: RouteRecordRaw = {
- component: () => import('#/views/_core/fallback/not-found.vue'),
- meta: {
- hideInBreadcrumb: true,
- hideInMenu: true,
- hideInTab: true,
- title: '404',
- },
- name: 'FallbackNotFound',
- path: '/:path(.*)*',
-};
-
-/** 基本路由,这些路由是必须存在的 */
-const coreRoutes: RouteRecordRaw[] = [
- /**
- * 根路由
- * 使用基础布局,作为所有页面的父级容器,子级就不必配置BasicLayout。
- * 此路由必须存在,且不应修改
- */
- {
- component: BasicLayout,
- meta: {
- hideInBreadcrumb: true,
- title: 'Root',
- },
- name: 'Root',
- path: '/',
- redirect: DEFAULT_HOME_PATH,
- children: [],
- },
- {
- component: AuthPageLayout,
- meta: {
- hideInTab: true,
- title: 'Authentication',
- },
- name: 'Authentication',
- path: '/auth',
- redirect: LOGIN_PATH,
- children: [
- {
- name: 'Login',
- path: 'login',
- component: Login,
- meta: {
- title: $t('page.auth.login'),
- },
- },
- {
- name: 'CodeLogin',
- path: 'code-login',
- component: () => import('#/views/_core/authentication/code-login.vue'),
- meta: {
- title: $t('page.auth.codeLogin'),
- },
- },
- {
- name: 'QrCodeLogin',
- path: 'qrcode-login',
- component: () =>
- import('#/views/_core/authentication/qrcode-login.vue'),
- meta: {
- title: $t('page.auth.qrcodeLogin'),
- },
- },
- {
- name: 'ForgetPassword',
- path: 'forget-password',
- component: () =>
- import('#/views/_core/authentication/forget-password.vue'),
- meta: {
- title: $t('page.auth.forgetPassword'),
- },
- },
- {
- name: 'Register',
- path: 'register',
- component: () => import('#/views/_core/authentication/register.vue'),
- meta: {
- title: $t('page.auth.register'),
- },
- },
- ],
- },
-];
-
-export { coreRoutes, fallbackNotFoundRoute };
diff --git a/apps/web-naive/src/router/routes/index.ts b/apps/web-naive/src/router/routes/index.ts
deleted file mode 100644
index e6fb1440..00000000
--- a/apps/web-naive/src/router/routes/index.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import type { RouteRecordRaw } from 'vue-router';
-
-import { mergeRouteModules, traverseTreeValues } from '@vben/utils';
-
-import { coreRoutes, fallbackNotFoundRoute } from './core';
-
-const dynamicRouteFiles = import.meta.glob('./modules/**/*.ts', {
- eager: true,
-});
-
-// 有需要可以自行打开注释,并创建文件夹
-// const externalRouteFiles = import.meta.glob('./external/**/*.ts', { eager: true });
-// const staticRouteFiles = import.meta.glob('./static/**/*.ts', { eager: true });
-
-/** 动态路由 */
-const dynamicRoutes: RouteRecordRaw[] = mergeRouteModules(dynamicRouteFiles);
-
-/** 外部路由列表,访问这些页面可以不需要Layout,可能用于内嵌在别的系统(不会显示在菜单中) */
-// const externalRoutes: RouteRecordRaw[] = mergeRouteModules(externalRouteFiles);
-// const staticRoutes: RouteRecordRaw[] = mergeRouteModules(staticRouteFiles);
-const staticRoutes: RouteRecordRaw[] = [];
-const externalRoutes: RouteRecordRaw[] = [];
-
-/** 路由列表,由基本路由、外部路由和404兜底路由组成
- * 无需走权限验证(会一直显示在菜单中) */
-const routes: RouteRecordRaw[] = [
- ...coreRoutes,
- ...externalRoutes,
- fallbackNotFoundRoute,
-];
-
-/** 基本路由列表,这些路由不需要进入权限拦截 */
-const coreRouteNames = traverseTreeValues(coreRoutes, (route) => route.name);
-
-/** 有权限校验的路由列表,包含动态路由和静态路由 */
-const accessRoutes = [...dynamicRoutes, ...staticRoutes];
-export { accessRoutes, coreRouteNames, routes };
diff --git a/apps/web-naive/src/router/routes/modules/dashboard.ts b/apps/web-naive/src/router/routes/modules/dashboard.ts
deleted file mode 100644
index 5254dc65..00000000
--- a/apps/web-naive/src/router/routes/modules/dashboard.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import type { RouteRecordRaw } from 'vue-router';
-
-import { $t } from '#/locales';
-
-const routes: RouteRecordRaw[] = [
- {
- meta: {
- icon: 'lucide:layout-dashboard',
- order: -1,
- title: $t('page.dashboard.title'),
- },
- name: 'Dashboard',
- path: '/dashboard',
- children: [
- {
- name: 'Analytics',
- path: '/analytics',
- component: () => import('#/views/dashboard/analytics/index.vue'),
- meta: {
- affixTab: true,
- icon: 'lucide:area-chart',
- title: $t('page.dashboard.analytics'),
- },
- },
- {
- name: 'Workspace',
- path: '/workspace',
- component: () => import('#/views/dashboard/workspace/index.vue'),
- meta: {
- icon: 'carbon:workspace',
- title: $t('page.dashboard.workspace'),
- },
- },
- ],
- },
-];
-
-export default routes;
diff --git a/apps/web-naive/src/router/routes/modules/demos.ts b/apps/web-naive/src/router/routes/modules/demos.ts
deleted file mode 100644
index 5e49ffa0..00000000
--- a/apps/web-naive/src/router/routes/modules/demos.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import type { RouteRecordRaw } from 'vue-router';
-
-import { $t } from '#/locales';
-
-const routes: RouteRecordRaw[] = [
- {
- meta: {
- icon: 'ic:baseline-view-in-ar',
- keepAlive: true,
- order: 1000,
- title: $t('demos.title'),
- },
- name: 'Demos',
- path: '/demos',
- children: [
- {
- meta: {
- title: $t('demos.naive'),
- },
- name: 'NaiveDemos',
- path: '/demos/naive',
- component: () => import('#/views/demos/naive/index.vue'),
- },
- {
- meta: {
- title: $t('demos.table'),
- },
- name: 'Table',
- path: '/demos/table',
- component: () => import('#/views/demos/table/index.vue'),
- },
- {
- meta: {
- title: $t('demos.form'),
- },
- name: 'Form',
- path: '/demos/form',
- component: () => import('#/views/demos/form/basic.vue'),
- },
- ],
- },
-];
-
-export default routes;
diff --git a/apps/web-naive/src/router/routes/modules/vben.ts b/apps/web-naive/src/router/routes/modules/vben.ts
deleted file mode 100644
index 169de855..00000000
--- a/apps/web-naive/src/router/routes/modules/vben.ts
+++ /dev/null
@@ -1,82 +0,0 @@
-import type { RouteRecordRaw } from 'vue-router';
-
-import {
- VBEN_ANT_PREVIEW_URL,
- VBEN_DOC_URL,
- VBEN_ELE_PREVIEW_URL,
- VBEN_GITHUB_URL,
- VBEN_LOGO_URL,
-} from '@vben/constants';
-import { SvgAntdvLogoIcon } from '@vben/icons';
-
-import { IFrameView } from '#/layouts';
-import { $t } from '#/locales';
-
-const routes: RouteRecordRaw[] = [
- {
- meta: {
- badgeType: 'dot',
- icon: VBEN_LOGO_URL,
- order: 9998,
- title: $t('demos.vben.title'),
- },
- name: 'VbenProject',
- path: '/vben-admin',
- children: [
- {
- name: 'VbenDocument',
- path: '/vben-admin/document',
- component: IFrameView,
- meta: {
- icon: 'lucide:book-open-text',
- link: VBEN_DOC_URL,
- title: $t('demos.vben.document'),
- },
- },
- {
- name: 'VbenGithub',
- path: '/vben-admin/github',
- component: IFrameView,
- meta: {
- icon: 'mdi:github',
- link: VBEN_GITHUB_URL,
- title: 'Github',
- },
- },
- {
- name: 'VbenAntd',
- path: '/vben-admin/antd',
- component: IFrameView,
- meta: {
- badgeType: 'dot',
- icon: SvgAntdvLogoIcon,
- link: VBEN_ANT_PREVIEW_URL,
- title: $t('demos.vben.antdv'),
- },
- },
- {
- name: 'VbenElementPlus',
- path: '/vben-admin/ele',
- component: IFrameView,
- meta: {
- badgeType: 'dot',
- icon: 'logos:element',
- link: VBEN_ELE_PREVIEW_URL,
- title: $t('demos.vben.element-plus'),
- },
- },
- ],
- },
- {
- name: 'VbenAbout',
- path: '/vben-admin/about',
- component: () => import('#/views/_core/about/index.vue'),
- meta: {
- icon: 'lucide:copyright',
- title: $t('demos.vben.about'),
- order: 9999,
- },
- },
-];
-
-export default routes;
diff --git a/apps/web-naive/src/store/auth.ts b/apps/web-naive/src/store/auth.ts
deleted file mode 100644
index 20aac562..00000000
--- a/apps/web-naive/src/store/auth.ts
+++ /dev/null
@@ -1,116 +0,0 @@
-import type { Recordable, UserInfo } from '@vben/types';
-
-import { ref } from 'vue';
-import { useRouter } from 'vue-router';
-
-import { DEFAULT_HOME_PATH, LOGIN_PATH } from '@vben/constants';
-import { resetAllStores, useAccessStore, useUserStore } from '@vben/stores';
-
-import { defineStore } from 'pinia';
-
-import { notification } from '#/adapter/naive';
-import { getAccessCodesApi, getUserInfoApi, loginApi, logoutApi } from '#/api';
-import { $t } from '#/locales';
-
-export const useAuthStore = defineStore('auth', () => {
- const accessStore = useAccessStore();
- const userStore = useUserStore();
- const router = useRouter();
-
- const loginLoading = ref(false);
-
- /**
- * 异步处理登录操作
- * Asynchronously handle the login process
- * @param params 登录表单数据
- */
- async function authLogin(
- params: Recordable,
- onSuccess?: () => Promise | void,
- ) {
- // 异步处理用户登录操作并获取 accessToken
- let userInfo: null | UserInfo = null;
- try {
- loginLoading.value = true;
- const { accessToken } = await loginApi(params);
-
- // 如果成功获取到 accessToken
- if (accessToken) {
- // 将 accessToken 存储到 accessStore 中
- accessStore.setAccessToken(accessToken);
-
- // 获取用户信息并存储到 accessStore 中
- const [fetchUserInfoResult, accessCodes] = await Promise.all([
- fetchUserInfo(),
- getAccessCodesApi(),
- ]);
-
- userInfo = fetchUserInfoResult;
-
- userStore.setUserInfo(userInfo);
- accessStore.setAccessCodes(accessCodes);
-
- if (accessStore.loginExpired) {
- accessStore.setLoginExpired(false);
- } else {
- onSuccess
- ? await onSuccess?.()
- : await router.push(userInfo.homePath || DEFAULT_HOME_PATH);
- }
-
- if (userInfo?.realName) {
- notification.success({
- content: $t('authentication.loginSuccess'),
- description: `${$t('authentication.loginSuccessDesc')}:${userInfo?.realName}`,
- duration: 3000,
- });
- }
- }
- } finally {
- loginLoading.value = false;
- }
-
- return {
- userInfo,
- };
- }
-
- async function logout(redirect: boolean = true) {
- try {
- await logoutApi();
- } catch {
- // 不做任何处理
- }
- resetAllStores();
- accessStore.setLoginExpired(false);
-
- // 回登录页带上当前路由地址
- await router.replace({
- path: LOGIN_PATH,
- query: redirect
- ? {
- redirect: encodeURIComponent(router.currentRoute.value.fullPath),
- }
- : {},
- });
- }
-
- async function fetchUserInfo() {
- let userInfo: null | UserInfo = null;
- userInfo = await getUserInfoApi();
- userStore.setUserInfo(userInfo);
- return userInfo;
- }
-
- function $reset() {
- loginLoading.value = false;
- }
-
- return {
- $reset,
- authLogin,
- fetchUserInfo,
- loginLoading,
- logout,
- };
-});
diff --git a/apps/web-naive/src/store/index.ts b/apps/web-naive/src/store/index.ts
deleted file mode 100644
index 269586ee..00000000
--- a/apps/web-naive/src/store/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './auth';
diff --git a/apps/web-naive/src/views/_core/README.md b/apps/web-naive/src/views/_core/README.md
deleted file mode 100644
index 8248afe6..00000000
--- a/apps/web-naive/src/views/_core/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# \_core
-
-此目录包含应用程序正常运行所需的基本视图。这些视图是应用程序布局中使用的视图。
diff --git a/apps/web-naive/src/views/_core/about/index.vue b/apps/web-naive/src/views/_core/about/index.vue
deleted file mode 100644
index 0ee52433..00000000
--- a/apps/web-naive/src/views/_core/about/index.vue
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-naive/src/views/_core/authentication/code-login.vue b/apps/web-naive/src/views/_core/authentication/code-login.vue
deleted file mode 100644
index b65f9623..00000000
--- a/apps/web-naive/src/views/_core/authentication/code-login.vue
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-naive/src/views/_core/authentication/forget-password.vue b/apps/web-naive/src/views/_core/authentication/forget-password.vue
deleted file mode 100644
index 0958e89b..00000000
--- a/apps/web-naive/src/views/_core/authentication/forget-password.vue
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-naive/src/views/_core/authentication/login.vue b/apps/web-naive/src/views/_core/authentication/login.vue
deleted file mode 100644
index 099e4c8c..00000000
--- a/apps/web-naive/src/views/_core/authentication/login.vue
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-naive/src/views/_core/authentication/qrcode-login.vue b/apps/web-naive/src/views/_core/authentication/qrcode-login.vue
deleted file mode 100644
index 23f5f2da..00000000
--- a/apps/web-naive/src/views/_core/authentication/qrcode-login.vue
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-naive/src/views/_core/authentication/register.vue b/apps/web-naive/src/views/_core/authentication/register.vue
deleted file mode 100644
index e68a88f3..00000000
--- a/apps/web-naive/src/views/_core/authentication/register.vue
+++ /dev/null
@@ -1,95 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-naive/src/views/_core/fallback/coming-soon.vue b/apps/web-naive/src/views/_core/fallback/coming-soon.vue
deleted file mode 100644
index f394930f..00000000
--- a/apps/web-naive/src/views/_core/fallback/coming-soon.vue
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-naive/src/views/_core/fallback/forbidden.vue b/apps/web-naive/src/views/_core/fallback/forbidden.vue
deleted file mode 100644
index 8ea65fed..00000000
--- a/apps/web-naive/src/views/_core/fallback/forbidden.vue
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-naive/src/views/_core/fallback/internal-error.vue b/apps/web-naive/src/views/_core/fallback/internal-error.vue
deleted file mode 100644
index 819a47d5..00000000
--- a/apps/web-naive/src/views/_core/fallback/internal-error.vue
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-naive/src/views/_core/fallback/not-found.vue b/apps/web-naive/src/views/_core/fallback/not-found.vue
deleted file mode 100644
index 4d178e9c..00000000
--- a/apps/web-naive/src/views/_core/fallback/not-found.vue
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-naive/src/views/_core/fallback/offline.vue b/apps/web-naive/src/views/_core/fallback/offline.vue
deleted file mode 100644
index 5de4a88d..00000000
--- a/apps/web-naive/src/views/_core/fallback/offline.vue
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-naive/src/views/dashboard/analytics/analytics-trends.vue b/apps/web-naive/src/views/dashboard/analytics/analytics-trends.vue
deleted file mode 100644
index 9bd90fc8..00000000
--- a/apps/web-naive/src/views/dashboard/analytics/analytics-trends.vue
+++ /dev/null
@@ -1,97 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-naive/src/views/dashboard/analytics/analytics-visits-data.vue b/apps/web-naive/src/views/dashboard/analytics/analytics-visits-data.vue
deleted file mode 100644
index 651abbc1..00000000
--- a/apps/web-naive/src/views/dashboard/analytics/analytics-visits-data.vue
+++ /dev/null
@@ -1,81 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-naive/src/views/dashboard/analytics/analytics-visits-sales.vue b/apps/web-naive/src/views/dashboard/analytics/analytics-visits-sales.vue
deleted file mode 100644
index f38b5c03..00000000
--- a/apps/web-naive/src/views/dashboard/analytics/analytics-visits-sales.vue
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-naive/src/views/dashboard/analytics/analytics-visits-source.vue b/apps/web-naive/src/views/dashboard/analytics/analytics-visits-source.vue
deleted file mode 100644
index d97c3c0f..00000000
--- a/apps/web-naive/src/views/dashboard/analytics/analytics-visits-source.vue
+++ /dev/null
@@ -1,64 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-naive/src/views/dashboard/analytics/analytics-visits.vue b/apps/web-naive/src/views/dashboard/analytics/analytics-visits.vue
deleted file mode 100644
index fc961c83..00000000
--- a/apps/web-naive/src/views/dashboard/analytics/analytics-visits.vue
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-naive/src/views/dashboard/analytics/index.vue b/apps/web-naive/src/views/dashboard/analytics/index.vue
deleted file mode 100644
index 00b34df1..00000000
--- a/apps/web-naive/src/views/dashboard/analytics/index.vue
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
-
-
-
diff --git a/apps/web-naive/src/views/dashboard/workspace/index.vue b/apps/web-naive/src/views/dashboard/workspace/index.vue
deleted file mode 100644
index b95d6138..00000000
--- a/apps/web-naive/src/views/dashboard/workspace/index.vue
+++ /dev/null
@@ -1,266 +0,0 @@
-
-
-
-
-
-
- 早安, {{ userStore.userInfo?.realName }}, 开始您一天的工作吧!
-
- 今日晴,20℃ - 32℃!
-
-
-
-
-
diff --git a/apps/web-naive/src/views/demos/form/basic.vue b/apps/web-naive/src/views/demos/form/basic.vue
deleted file mode 100644
index fe26624c..00000000
--- a/apps/web-naive/src/views/demos/form/basic.vue
+++ /dev/null
@@ -1,159 +0,0 @@
-
-
-
-
-
- 设置表单值
-
-
-
-
-
diff --git a/apps/web-naive/src/views/demos/naive/index.vue b/apps/web-naive/src/views/demos/naive/index.vue
deleted file mode 100644
index b78cc585..00000000
--- a/apps/web-naive/src/views/demos/naive/index.vue
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-
-
-
-
- Default
- Tertiary
- Primary
- Info
- Success
- Warning
- Error
-
-
-
-
-
- 错误
- 警告
- 成功
- 加载中
-
-
-
-
-
- 错误
- 警告
- 成功
- 加载中
-
-
-
-
diff --git a/apps/web-naive/src/views/demos/table/index.vue b/apps/web-naive/src/views/demos/table/index.vue
deleted file mode 100644
index ddc958bc..00000000
--- a/apps/web-naive/src/views/demos/table/index.vue
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/apps/web-naive/tailwind.config.mjs b/apps/web-naive/tailwind.config.mjs
deleted file mode 100644
index f17f556f..00000000
--- a/apps/web-naive/tailwind.config.mjs
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from '@vben/tailwind-config';
diff --git a/apps/web-naive/tsconfig.json b/apps/web-naive/tsconfig.json
deleted file mode 100644
index 02c287fe..00000000
--- a/apps/web-naive/tsconfig.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "$schema": "https://json.schemastore.org/tsconfig",
- "extends": "@vben/tsconfig/web-app.json",
- "compilerOptions": {
- "baseUrl": ".",
- "paths": {
- "#/*": ["./src/*"]
- }
- },
- "references": [{ "path": "./tsconfig.node.json" }],
- "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"]
-}
diff --git a/apps/web-naive/tsconfig.node.json b/apps/web-naive/tsconfig.node.json
deleted file mode 100644
index c2f0d86c..00000000
--- a/apps/web-naive/tsconfig.node.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "$schema": "https://json.schemastore.org/tsconfig",
- "extends": "@vben/tsconfig/node.json",
- "compilerOptions": {
- "composite": true,
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
- "noEmit": false
- },
- "include": ["vite.config.mts"]
-}
diff --git a/apps/web-naive/vite.config.mts b/apps/web-naive/vite.config.mts
deleted file mode 100644
index b6360f1d..00000000
--- a/apps/web-naive/vite.config.mts
+++ /dev/null
@@ -1,20 +0,0 @@
-import { defineConfig } from '@vben/vite-config';
-
-export default defineConfig(async () => {
- return {
- application: {},
- vite: {
- server: {
- proxy: {
- '/api': {
- changeOrigin: true,
- rewrite: (path) => path.replace(/^\/api/, ''),
- // mock代理目标地址
- target: 'http://localhost:5320/api',
- ws: true,
- },
- },
- },
- },
- };
-});
diff --git a/package.json b/package.json
index b944d5db..f7213e33 100644
--- a/package.json
+++ b/package.json
@@ -30,8 +30,6 @@
"build:antd": "pnpm run build --filter=@vben/web-antd",
"build:docker": "./scripts/deploy/build-local-docker-image.sh",
"build:docs": "pnpm run build --filter=@vben/docs",
- "build:ele": "pnpm run build --filter=@vben/web-ele",
- "build:naive": "pnpm run build --filter=@vben/web-naive",
"build:play": "pnpm run build --filter=@vben/playground",
"changeset": "pnpm exec changeset",
"check": "pnpm run check:circular && pnpm run check:dep && pnpm run check:type && pnpm check:cspell",
@@ -44,8 +42,6 @@
"dev": "turbo-run dev",
"dev:antd": "pnpm -F @vben/web-antd run dev",
"dev:docs": "pnpm -F @vben/docs run dev",
- "dev:ele": "pnpm -F @vben/web-ele run dev",
- "dev:naive": "pnpm -F @vben/web-naive run dev",
"dev:play": "pnpm -F @vben/playground run dev",
"format": "vsh lint --format",
"lint": "vsh lint",
diff --git a/vben-admin.code-workspace b/vben-admin.code-workspace
index aa8205bd..5ad3c40a 100644
--- a/vben-admin.code-workspace
+++ b/vben-admin.code-workspace
@@ -8,14 +8,6 @@
"name": "@vben/web-antd",
"path": "apps/web-antd",
},
- {
- "name": "@vben/web-ele",
- "path": "apps/web-ele",
- },
- {
- "name": "@vben/web-naive",
- "path": "apps/web-naive",
- },
{
"name": "@vben/docs",
"path": "docs",