diff --git a/.github/actions/setup-node/action.yml b/.github/actions/setup-node/action.yml
index d208b000a..445f30bec 100644
--- a/.github/actions/setup-node/action.yml
+++ b/.github/actions/setup-node/action.yml
@@ -6,7 +6,7 @@ runs:
using: 'composite'
steps:
- name: Install pnpm
- uses: pnpm/action-setup@v4
+ uses: pnpm/action-setup@v6
- name: Install Node.js
uses: actions/setup-node@v6
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 339e5fd8f..c1bc01c1c 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -33,7 +33,7 @@ jobs:
fetch-depth: 0
- name: Install pnpm
- uses: pnpm/action-setup@v4
+ uses: pnpm/action-setup@v6
with:
run_install: false
diff --git a/.github/workflows/draft.yml b/.github/workflows/draft.yml
index 20b4148a7..babca2d38 100644
--- a/.github/workflows/draft.yml
+++ b/.github/workflows/draft.yml
@@ -20,6 +20,6 @@ jobs:
if: github.repository == 'vbenjs/vue-vben-admin'
runs-on: ubuntu-latest
steps:
- - uses: release-drafter/release-drafter@v6
+ - uses: release-drafter/release-drafter@v7
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/release-tag.yml b/.github/workflows/release-tag.yml
index 5684990a7..7258c11ff 100644
--- a/.github/workflows/release-tag.yml
+++ b/.github/workflows/release-tag.yml
@@ -58,7 +58,7 @@ jobs:
echo "version=${version}" >> $GITHUB_OUTPUT
echo "major=${major}" >> $GITHUB_OUTPUT
- - uses: release-drafter/release-drafter@v6
+ - uses: release-drafter/release-drafter@v7
with:
version: ${{ steps.version.outputs.version }}
publish: true
diff --git a/.gitignore b/.gitignore
index 3399f39c0..86d1f1f8a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,7 +22,7 @@ yarn.lock
package-lock.json
.VSCodeCounter
**/backend-mock/data
-
+.omx
# local env files
.env.local
.env.*.local
@@ -50,3 +50,10 @@ vite.config.ts.*
*.sw?
.history
.cursor
+
+# AI
+.agent
+.agents
+.claude
+.codex
+skills-lock.json
diff --git a/.npmrc b/.npmrc
index aeac1ae91..6d28fabf4 100644
--- a/.npmrc
+++ b/.npmrc
@@ -1,8 +1,8 @@
registry=https://registry.npmmirror.com
public-hoist-pattern[]=lefthook
public-hoist-pattern[]=eslint
-public-hoist-pattern[]=prettier
-public-hoist-pattern[]=prettier-plugin-tailwindcss
+public-hoist-pattern[]=oxfmt
+public-hoist-pattern[]=oxlint
public-hoist-pattern[]=stylelint
public-hoist-pattern[]=*postcss*
public-hoist-pattern[]=@commitlint/*
diff --git a/.prettierignore b/.prettierignore
deleted file mode 100644
index d0b0ca133..000000000
--- a/.prettierignore
+++ /dev/null
@@ -1,18 +0,0 @@
-dist
-dev-dist
-.local
-.output.js
-node_modules
-.nvmrc
-coverage
-CODEOWNERS
-.nitro
-.output
-
-
-**/*.svg
-**/*.sh
-
-public
-.npmrc
-*-lock.yaml
diff --git a/.prettierrc.mjs b/.prettierrc.mjs
deleted file mode 100644
index 3e25d2cfa..000000000
--- a/.prettierrc.mjs
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from '@vben/prettier-config';
diff --git a/.stylelintignore b/.stylelintignore
index f4b2db2c1..3adb33b22 100644
--- a/.stylelintignore
+++ b/.stylelintignore
@@ -2,3 +2,7 @@ dist
public
__tests__
coverage
+.codex
+.claude
+.agent
+.agents
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index e8dc9ed9b..d4e28662b 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -2,14 +2,18 @@
"recommendations": [
// Vue 3 的语言支持
"Vue.volar",
- // 将 ESLint JavaScript 集成到 VS Code 中。
+ // 将 eslint 集成到 VS Code 中。
"dbaeumer.vscode-eslint",
+ // 将 oxlint 集成到 VS Code 中。
+ "oxc.oxc-vscode",
// Visual Studio Code 的官方 Stylelint 扩展
"stylelint.vscode-stylelint",
- // 使用 Prettier 的代码格式化程序
- "esbenp.prettier-vscode",
+ // 使用 oxfmt 的代码格式化程序
+ "oxc.oxc-vscode",
// 支持 dotenv 文件语法
"mikestead.dotenv",
+ // YAML 语言支持,供 ESLint 校验 pnpm-workspace.yaml 等文件
+ "redhat.vscode-yaml",
// 源代码的拼写检查器
"streetsidesoftware.code-spell-checker",
// Tailwind CSS 的官方 VS Code 插件
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 8da37dc96..993b52039 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,5 +1,6 @@
{
- "tailwindCSS.experimental.configFile": "internal/tailwind-config/src/index.ts",
+ "tailwindCSS.experimental.configFile": "internal/tailwind-config/src/theme.css",
+ "tailwindCSS.lint.suggestCanonicalClasses": "ignore",
// workbench
"workbench.list.smoothScrolling": true,
"workbench.startupEditor": "newUntitledFile",
@@ -31,39 +32,51 @@
"editor.autoClosingOvertype": "always",
"editor.autoClosingQuotes": "beforeWhitespace",
"editor.wordSeparators": "`~!@#%^&*()=+[{]}\\|;:'\",.<>/?",
+ "editor.quickSuggestions": {
+ "strings": "on"
+ },
+
+ // lint && format
+ "oxc.enable": true,
+ "oxc.typeAware": true,
+ "oxc.configPath": "oxlint.config.ts",
+ "oxc.fmt.configPath": "oxfmt.config.ts",
+ "eslint.useFlatConfig": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit",
+ "source.fixAll.oxc": "explicit",
"source.fixAll.stylelint": "explicit",
"source.organizeImports": "never"
},
- "editor.defaultFormatter": "esbenp.prettier-vscode",
+ "editor.defaultFormatter": "oxc.oxc-vscode",
"[html]": {
- "editor.defaultFormatter": "esbenp.prettier-vscode"
+ "editor.defaultFormatter": "oxc.oxc-vscode"
},
"[css]": {
- "editor.defaultFormatter": "esbenp.prettier-vscode"
+ "editor.defaultFormatter": "oxc.oxc-vscode"
},
"[scss]": {
- "editor.defaultFormatter": "esbenp.prettier-vscode"
+ "editor.defaultFormatter": "oxc.oxc-vscode"
},
"[javascript]": {
- "editor.defaultFormatter": "esbenp.prettier-vscode"
+ "editor.defaultFormatter": "oxc.oxc-vscode"
},
"[typescript]": {
- "editor.defaultFormatter": "esbenp.prettier-vscode"
+ "editor.defaultFormatter": "oxc.oxc-vscode"
},
"[json]": {
- "editor.defaultFormatter": "esbenp.prettier-vscode"
+ "editor.defaultFormatter": "oxc.oxc-vscode"
},
"[markdown]": {
- "editor.defaultFormatter": "esbenp.prettier-vscode"
+ "editor.defaultFormatter": "oxc.oxc-vscode"
},
"[jsonc]": {
- "editor.defaultFormatter": "esbenp.prettier-vscode"
+ "editor.defaultFormatter": "oxc.oxc-vscode"
},
"[vue]": {
- "editor.defaultFormatter": "esbenp.prettier-vscode"
+ "editor.defaultFormatter": "oxc.oxc-vscode"
},
+
// extensions
"extensions.ignoreRecommendations": true,
@@ -79,6 +92,7 @@
"files.insertFinalNewline": true,
"files.simpleDialog.enable": true,
"files.associations": {
+ "*.css": "tailwindcss",
"*.ejs": "html",
"*.art": "html",
"**/tsconfig.json": "jsonc",
@@ -118,7 +132,7 @@
// search
"search.searchEditor.singleClickBehaviour": "peekDefinition",
"search.followSymlinks": false,
- // 在使用搜索功能时,将这些文件夹/文件排除在外
+ // 使用搜索功能时,将这些文件和文件夹排除在外
"search.exclude": {
"**/node_modules": true,
"**/*.log": true,
@@ -158,7 +172,7 @@
"emmet.triggerExpansionOnTab": false,
"errorLens.enabledDiagnosticLevels": ["warning", "error"],
- "errorLens.excludeBySource": ["cSpell", "Grammarly", "eslint"],
+ "errorLens.excludeBySource": ["cSpell", "Grammarly"],
"stylelint.enable": true,
"stylelint.packageManager": "pnpm",
@@ -166,9 +180,10 @@
"stylelint.customSyntax": "postcss-html",
"stylelint.snippet": ["css", "less", "postcss", "scss", "vue"],
- "typescript.inlayHints.enumMemberValues.enabled": true,
- "typescript.preferences.preferTypeOnlyAutoImports": true,
- "typescript.preferences.includePackageJsonAutoImports": "on",
+ "js/ts.tsdk.path": "node_modules/typescript/lib",
+ "js/ts.inlayHints.enumMemberValues.enabled": true,
+ "js/ts.preferences.preferTypeOnlyAutoImports": true,
+ "js/ts.preferences.includePackageJsonAutoImports": "on",
"eslint.validate": [
"javascript",
@@ -195,7 +210,7 @@
"yaml": false
},
- "cssVariables.lookupFiles": ["packages/core/base/design/src/**/*.css"],
+ "cssVariables.lookupFiles": ["packages/@core/base/design/src/**/*.css"],
"i18n-ally.localesPaths": [
"packages/locales/src/langs",
@@ -220,12 +235,9 @@
"*.env": "$(capture).env.*",
"README.md": "README*,CHANGELOG*,LICENSE,CNAME",
"package.json": "pnpm-lock.yaml,pnpm-workspace.yaml,.gitattributes,.gitignore,.gitpod.yml,.npmrc,.browserslistrc,.node-version,.git*,.tazerc.json",
- "eslint.config.mjs": ".eslintignore,.prettierignore,.stylelintignore,.commitlintrc.*,.prettierrc.*,stylelint.config.*,.lintstagedrc.mjs,cspell.json,lefthook.yml",
- "tailwind.config.mjs": "postcss.*"
+ "oxlint.config.ts": ".eslintignore,.stylelintignore,.commitlintrc.*,stylelint.config.*,.lintstagedrc.mjs,cspell.json,lefthook.yml,oxfmt.config.*,eslint.config.*"
},
"commentTranslate.hover.enabled": false,
"commentTranslate.multiLineMerge": true,
- "vue.server.hybridMode": true,
- "typescript.tsdk": "node_modules/typescript/lib",
- "oxc.enable": false
+ "vue.server.hybridMode": true
}
diff --git a/apps/backend-mock/api/table/list.ts b/apps/backend-mock/api/table/list.ts
index 6664b583e..f81571e3b 100644
--- a/apps/backend-mock/api/table/list.ts
+++ b/apps/backend-mock/api/table/list.ts
@@ -79,7 +79,7 @@ export default eventHandler(async (event) => {
const aValue = a[sortKey] as unknown;
const bValue = b[sortKey] as unknown;
- let result = 0;
+ let result: number;
if (typeof aValue === 'number' && typeof bValue === 'number') {
result = aValue - bValue;
diff --git a/apps/backend-mock/package.json b/apps/backend-mock/package.json
index f62aac12c..66961d4da 100644
--- a/apps/backend-mock/package.json
+++ b/apps/backend-mock/package.json
@@ -1,6 +1,6 @@
{
"name": "@vben/backend-mock",
- "version": "5.6.0",
+ "version": "5.7.0",
"description": "",
"private": true,
"license": "MIT",
diff --git a/apps/web-antd/index.html b/apps/web-antd/index.html
index 480eb84de..e3b9ae5c5 100644
--- a/apps/web-antd/index.html
+++ b/apps/web-antd/index.html
@@ -12,7 +12,7 @@
content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0"
/>
-
<%= VITE_APP_TITLE %>
+ %VITE_APP_TITLE%
diff --git a/apps/web-antd/src/views/_core/authentication/forget-password.vue b/apps/web-antd/src/views/_core/authentication/forget-password.vue
index fef0d4279..10444d0ae 100644
--- a/apps/web-antd/src/views/_core/authentication/forget-password.vue
+++ b/apps/web-antd/src/views/_core/authentication/forget-password.vue
@@ -29,8 +29,7 @@ const formSchema = computed((): VbenFormSchema[] => {
});
function handleSubmit(value: Recordable) {
- // eslint-disable-next-line no-console
- console.log('reset email:', value);
+ void value;
}
diff --git a/apps/web-antd/src/views/_core/authentication/register.vue b/apps/web-antd/src/views/_core/authentication/register.vue
index b1a5de726..8c4295310 100644
--- a/apps/web-antd/src/views/_core/authentication/register.vue
+++ b/apps/web-antd/src/views/_core/authentication/register.vue
@@ -82,8 +82,7 @@ const formSchema = computed((): VbenFormSchema[] => {
});
function handleSubmit(value: Recordable) {
- // eslint-disable-next-line no-console
- console.log('register submit:', value);
+ void value;
}
diff --git a/apps/web-antd/src/views/dashboard/analytics/index.vue b/apps/web-antd/src/views/dashboard/analytics/index.vue
index 5e3d6d285..e794c99a9 100644
--- a/apps/web-antd/src/views/dashboard/analytics/index.vue
+++ b/apps/web-antd/src/views/dashboard/analytics/index.vue
@@ -76,10 +76,10 @@ const chartTabs: TabOption[] = [
-
+
-
+
diff --git a/apps/web-antd/tailwind.config.mjs b/apps/web-antd/tailwind.config.mjs
deleted file mode 100644
index f17f556fa..000000000
--- a/apps/web-antd/tailwind.config.mjs
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from '@vben/tailwind-config';
diff --git a/apps/web-antd/tsconfig.json b/apps/web-antd/tsconfig.json
index 02c287fe6..858a0ec08 100644
--- a/apps/web-antd/tsconfig.json
+++ b/apps/web-antd/tsconfig.json
@@ -2,7 +2,6 @@
"$schema": "https://json.schemastore.org/tsconfig",
"extends": "@vben/tsconfig/web-app.json",
"compilerOptions": {
- "baseUrl": ".",
"paths": {
"#/*": ["./src/*"]
}
diff --git a/apps/web-antd/tsconfig.node.json b/apps/web-antd/tsconfig.node.json
index c2f0d86cc..36e9fb5fb 100644
--- a/apps/web-antd/tsconfig.node.json
+++ b/apps/web-antd/tsconfig.node.json
@@ -6,5 +6,5 @@
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
"noEmit": false
},
- "include": ["vite.config.mts"]
+ "include": ["vite.config.ts"]
}
diff --git a/apps/web-antd/vite.config.mts b/apps/web-antd/vite.config.ts
similarity index 100%
rename from apps/web-antd/vite.config.mts
rename to apps/web-antd/vite.config.ts
diff --git a/apps/web-antdv-next/index.html b/apps/web-antdv-next/index.html
index 480eb84de..e3b9ae5c5 100644
--- a/apps/web-antdv-next/index.html
+++ b/apps/web-antdv-next/index.html
@@ -12,7 +12,7 @@
content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0"
/>
- <%= VITE_APP_TITLE %>
+ %VITE_APP_TITLE%
diff --git a/apps/web-antdv-next/src/layouts/basic.vue b/apps/web-antdv-next/src/layouts/basic.vue
index 2226c68a2..211ee7be3 100644
--- a/apps/web-antdv-next/src/layouts/basic.vue
+++ b/apps/web-antdv-next/src/layouts/basic.vue
@@ -147,6 +147,34 @@ function remove(id: number | string) {
function handleMakeAll() {
notifications.value.forEach((item) => (item.isRead = true));
}
+
+const viewAll = () => {};
+
+const handleClick = (item: NotificationItem) => {
+ // 如果通知项有链接,点击时跳转
+ if (item.link) {
+ navigateTo(item.link, item.query, item.state);
+ }
+};
+
+function navigateTo(
+ link: string,
+ query?: Record,
+ state?: Record,
+) {
+ if (link.startsWith('http://') || link.startsWith('https://')) {
+ // 外部链接,在新标签页打开
+ window.open(link, '_blank');
+ } else {
+ // 内部路由链接,支持 query 参数和 state
+ router.push({
+ path: link,
+ query: query || {},
+ state,
+ });
+ }
+}
+
watch(
() => ({
enable: preferences.app.watermark,
@@ -189,6 +217,8 @@ watch(
@read="(item) => item.id && markRead(item.id)"
@remove="(item) => item.id && remove(item.id)"
@make-all="handleMakeAll"
+ @on-click="handleClick"
+ @view-all="viewAll"
/>
diff --git a/apps/web-antdv-next/src/store/auth.ts b/apps/web-antdv-next/src/store/auth.ts
index 6f7a3750c..90af35c8d 100644
--- a/apps/web-antdv-next/src/store/auth.ts
+++ b/apps/web-antdv-next/src/store/auth.ts
@@ -98,8 +98,7 @@ export const useAuthStore = defineStore('auth', () => {
}
async function fetchUserInfo() {
- let userInfo: null | UserInfo = null;
- userInfo = await getUserInfoApi();
+ const userInfo = await getUserInfoApi();
userStore.setUserInfo(userInfo);
return userInfo;
}
diff --git a/apps/web-antdv-next/src/views/_core/authentication/code-login.vue b/apps/web-antdv-next/src/views/_core/authentication/code-login.vue
index acfd1fd78..02370f7dc 100644
--- a/apps/web-antdv-next/src/views/_core/authentication/code-login.vue
+++ b/apps/web-antdv-next/src/views/_core/authentication/code-login.vue
@@ -55,8 +55,7 @@ const formSchema = computed((): VbenFormSchema[] => {
* @param values 登录表单数据
*/
async function handleLogin(values: Recordable) {
- // eslint-disable-next-line no-console
- console.log(values);
+ void values;
}
diff --git a/apps/web-antdv-next/src/views/_core/authentication/forget-password.vue b/apps/web-antdv-next/src/views/_core/authentication/forget-password.vue
index fef0d4279..10444d0ae 100644
--- a/apps/web-antdv-next/src/views/_core/authentication/forget-password.vue
+++ b/apps/web-antdv-next/src/views/_core/authentication/forget-password.vue
@@ -29,8 +29,7 @@ const formSchema = computed((): VbenFormSchema[] => {
});
function handleSubmit(value: Recordable) {
- // eslint-disable-next-line no-console
- console.log('reset email:', value);
+ void value;
}
diff --git a/apps/web-antdv-next/src/views/_core/authentication/register.vue b/apps/web-antdv-next/src/views/_core/authentication/register.vue
index b1a5de726..8c4295310 100644
--- a/apps/web-antdv-next/src/views/_core/authentication/register.vue
+++ b/apps/web-antdv-next/src/views/_core/authentication/register.vue
@@ -82,8 +82,7 @@ const formSchema = computed((): VbenFormSchema[] => {
});
function handleSubmit(value: Recordable) {
- // eslint-disable-next-line no-console
- console.log('register submit:', value);
+ void value;
}
diff --git a/apps/web-antdv-next/src/views/dashboard/analytics/index.vue b/apps/web-antdv-next/src/views/dashboard/analytics/index.vue
index 5e3d6d285..e794c99a9 100644
--- a/apps/web-antdv-next/src/views/dashboard/analytics/index.vue
+++ b/apps/web-antdv-next/src/views/dashboard/analytics/index.vue
@@ -76,10 +76,10 @@ const chartTabs: TabOption[] = [
-
+
-
+
diff --git a/apps/web-antdv-next/tailwind.config.mjs b/apps/web-antdv-next/tailwind.config.mjs
deleted file mode 100644
index f17f556fa..000000000
--- a/apps/web-antdv-next/tailwind.config.mjs
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from '@vben/tailwind-config';
diff --git a/apps/web-antdv-next/tsconfig.json b/apps/web-antdv-next/tsconfig.json
index 02c287fe6..858a0ec08 100644
--- a/apps/web-antdv-next/tsconfig.json
+++ b/apps/web-antdv-next/tsconfig.json
@@ -2,7 +2,6 @@
"$schema": "https://json.schemastore.org/tsconfig",
"extends": "@vben/tsconfig/web-app.json",
"compilerOptions": {
- "baseUrl": ".",
"paths": {
"#/*": ["./src/*"]
}
diff --git a/apps/web-antdv-next/tsconfig.node.json b/apps/web-antdv-next/tsconfig.node.json
index c2f0d86cc..36e9fb5fb 100644
--- a/apps/web-antdv-next/tsconfig.node.json
+++ b/apps/web-antdv-next/tsconfig.node.json
@@ -6,5 +6,5 @@
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
"noEmit": false
},
- "include": ["vite.config.mts"]
+ "include": ["vite.config.ts"]
}
diff --git a/apps/web-antdv-next/vite.config.mts b/apps/web-antdv-next/vite.config.ts
similarity index 100%
rename from apps/web-antdv-next/vite.config.mts
rename to apps/web-antdv-next/vite.config.ts
diff --git a/apps/web-ele/index.html b/apps/web-ele/index.html
index 2b59b8d75..eed06f6bd 100644
--- a/apps/web-ele/index.html
+++ b/apps/web-ele/index.html
@@ -12,7 +12,7 @@
content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0"
/>
- <%= VITE_APP_TITLE %>
+ %VITE_APP_TITLE%
diff --git a/apps/web-ele/src/views/_core/authentication/forget-password.vue b/apps/web-ele/src/views/_core/authentication/forget-password.vue
index fef0d4279..10444d0ae 100644
--- a/apps/web-ele/src/views/_core/authentication/forget-password.vue
+++ b/apps/web-ele/src/views/_core/authentication/forget-password.vue
@@ -29,8 +29,7 @@ const formSchema = computed((): VbenFormSchema[] => {
});
function handleSubmit(value: Recordable) {
- // eslint-disable-next-line no-console
- console.log('reset email:', value);
+ void value;
}
diff --git a/apps/web-ele/src/views/_core/authentication/register.vue b/apps/web-ele/src/views/_core/authentication/register.vue
index b1a5de726..8c4295310 100644
--- a/apps/web-ele/src/views/_core/authentication/register.vue
+++ b/apps/web-ele/src/views/_core/authentication/register.vue
@@ -82,8 +82,7 @@ const formSchema = computed((): VbenFormSchema[] => {
});
function handleSubmit(value: Recordable) {
- // eslint-disable-next-line no-console
- console.log('register submit:', value);
+ void value;
}
diff --git a/apps/web-ele/src/views/dashboard/analytics/index.vue b/apps/web-ele/src/views/dashboard/analytics/index.vue
index 5e3d6d285..e794c99a9 100644
--- a/apps/web-ele/src/views/dashboard/analytics/index.vue
+++ b/apps/web-ele/src/views/dashboard/analytics/index.vue
@@ -76,10 +76,10 @@ const chartTabs: TabOption[] = [
-
+
-
+
diff --git a/apps/web-ele/src/views/demos/element/index.vue b/apps/web-ele/src/views/demos/element/index.vue
index 0a7012d63..8d391700f 100644
--- a/apps/web-ele/src/views/demos/element/index.vue
+++ b/apps/web-ele/src/views/demos/element/index.vue
@@ -102,9 +102,7 @@ const segmentedOptions = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];
V-Loading
-
- 一些演示的内容
-
+ 一些演示的内容
diff --git a/apps/web-ele/src/views/demos/form/basic.vue b/apps/web-ele/src/views/demos/form/basic.vue
index 0ecab5864..0d936f17f 100644
--- a/apps/web-ele/src/views/demos/form/basic.vue
+++ b/apps/web-ele/src/views/demos/form/basic.vue
@@ -175,7 +175,7 @@ function setFormValues() {
description="我们重新包装了CheckboxGroup、RadioGroup、Select,可以通过options属性传入选项属性数组以自动生成选项"
title="表单演示"
>
-
+
diff --git a/apps/web-ele/tailwind.config.mjs b/apps/web-ele/tailwind.config.mjs
deleted file mode 100644
index f17f556fa..000000000
--- 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
index 02c287fe6..858a0ec08 100644
--- a/apps/web-ele/tsconfig.json
+++ b/apps/web-ele/tsconfig.json
@@ -2,7 +2,6 @@
"$schema": "https://json.schemastore.org/tsconfig",
"extends": "@vben/tsconfig/web-app.json",
"compilerOptions": {
- "baseUrl": ".",
"paths": {
"#/*": ["./src/*"]
}
diff --git a/apps/web-ele/tsconfig.node.json b/apps/web-ele/tsconfig.node.json
index c2f0d86cc..36e9fb5fb 100644
--- a/apps/web-ele/tsconfig.node.json
+++ b/apps/web-ele/tsconfig.node.json
@@ -6,5 +6,5 @@
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
"noEmit": false
},
- "include": ["vite.config.mts"]
+ "include": ["vite.config.ts"]
}
diff --git a/apps/web-ele/vite.config.mts b/apps/web-ele/vite.config.ts
similarity index 100%
rename from apps/web-ele/vite.config.mts
rename to apps/web-ele/vite.config.ts
diff --git a/apps/web-naive/index.html b/apps/web-naive/index.html
index 7ea638418..ec2c919e5 100644
--- a/apps/web-naive/index.html
+++ b/apps/web-naive/index.html
@@ -12,7 +12,7 @@
content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0"
/>
- <%= VITE_APP_TITLE %>
+ %VITE_APP_TITLE%
diff --git a/apps/web-naive/src/views/_core/authentication/forget-password.vue b/apps/web-naive/src/views/_core/authentication/forget-password.vue
index fef0d4279..10444d0ae 100644
--- a/apps/web-naive/src/views/_core/authentication/forget-password.vue
+++ b/apps/web-naive/src/views/_core/authentication/forget-password.vue
@@ -29,8 +29,7 @@ const formSchema = computed((): VbenFormSchema[] => {
});
function handleSubmit(value: Recordable) {
- // eslint-disable-next-line no-console
- console.log('reset email:', value);
+ void value;
}
diff --git a/apps/web-naive/src/views/_core/authentication/register.vue b/apps/web-naive/src/views/_core/authentication/register.vue
index daf89c447..fac327008 100644
--- a/apps/web-naive/src/views/_core/authentication/register.vue
+++ b/apps/web-naive/src/views/_core/authentication/register.vue
@@ -82,8 +82,7 @@ const formSchema = computed((): VbenFormSchema[] => {
});
function handleSubmit(value: Recordable) {
- // eslint-disable-next-line no-console
- console.log('register submit:', value);
+ void value;
}
diff --git a/apps/web-naive/src/views/dashboard/analytics/index.vue b/apps/web-naive/src/views/dashboard/analytics/index.vue
index 5e3d6d285..e794c99a9 100644
--- a/apps/web-naive/src/views/dashboard/analytics/index.vue
+++ b/apps/web-naive/src/views/dashboard/analytics/index.vue
@@ -76,10 +76,10 @@ const chartTabs: TabOption[] = [
-
+
-
+
diff --git a/apps/web-naive/src/views/demos/form/basic.vue b/apps/web-naive/src/views/demos/form/basic.vue
index 60702a11e..d23a7b6e6 100644
--- a/apps/web-naive/src/views/demos/form/basic.vue
+++ b/apps/web-naive/src/views/demos/form/basic.vue
@@ -9,6 +9,7 @@ import { getAllMenusApi } from '#/api';
import modalDemo from './modal.vue';
const message = useMessage();
+
const [Form, formApi] = useVbenForm({
commonConfig: {
// 所有表单项
@@ -16,7 +17,7 @@ const [Form, formApi] = useVbenForm({
class: 'w-full',
},
},
- layout: 'horizontal',
+ layout: 'vertical',
// 大屏一行显示3个,中屏一行显示2个,小屏一行显示1个
wrapperClass: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3',
handleSubmit: (values) => {
@@ -133,8 +134,18 @@ const [Form, formApi] = useVbenForm({
},
rules: 'required',
},
+ {
+ component: 'Input',
+ fieldName: 'collapsibleTextArea',
+ label: 'vertical时可折叠',
+ componentProps: {
+ type: 'textarea',
+ },
+ collapsible: true,
+ },
],
});
+
function setFormValues() {
formApi.setValues({
string: 'string',
@@ -155,7 +166,7 @@ const [Modal, modalApi] = useVbenModal({
description="表单适配器重新包装了CheckboxGroup和RadioGroup,可以通过options属性传递选项数据(选项数据将作为子组件的属性)"
title="表单演示"
>
-
+
设置表单值
diff --git a/apps/web-naive/tailwind.config.mjs b/apps/web-naive/tailwind.config.mjs
deleted file mode 100644
index f17f556fa..000000000
--- 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
index 02c287fe6..858a0ec08 100644
--- a/apps/web-naive/tsconfig.json
+++ b/apps/web-naive/tsconfig.json
@@ -2,7 +2,6 @@
"$schema": "https://json.schemastore.org/tsconfig",
"extends": "@vben/tsconfig/web-app.json",
"compilerOptions": {
- "baseUrl": ".",
"paths": {
"#/*": ["./src/*"]
}
diff --git a/apps/web-naive/tsconfig.node.json b/apps/web-naive/tsconfig.node.json
index c2f0d86cc..36e9fb5fb 100644
--- a/apps/web-naive/tsconfig.node.json
+++ b/apps/web-naive/tsconfig.node.json
@@ -6,5 +6,5 @@
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
"noEmit": false
},
- "include": ["vite.config.mts"]
+ "include": ["vite.config.ts"]
}
diff --git a/apps/web-naive/vite.config.mts b/apps/web-naive/vite.config.ts
similarity index 100%
rename from apps/web-naive/vite.config.mts
rename to apps/web-naive/vite.config.ts
diff --git a/apps/web-tdesign/index.html b/apps/web-tdesign/index.html
index 480eb84de..e3b9ae5c5 100644
--- a/apps/web-tdesign/index.html
+++ b/apps/web-tdesign/index.html
@@ -12,7 +12,7 @@
content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0"
/>
- <%= VITE_APP_TITLE %>
+ %VITE_APP_TITLE%
diff --git a/apps/web-tdesign/src/views/_core/authentication/forget-password.vue b/apps/web-tdesign/src/views/_core/authentication/forget-password.vue
index fef0d4279..10444d0ae 100644
--- a/apps/web-tdesign/src/views/_core/authentication/forget-password.vue
+++ b/apps/web-tdesign/src/views/_core/authentication/forget-password.vue
@@ -29,8 +29,7 @@ const formSchema = computed((): VbenFormSchema[] => {
});
function handleSubmit(value: Recordable) {
- // eslint-disable-next-line no-console
- console.log('reset email:', value);
+ void value;
}
diff --git a/apps/web-tdesign/src/views/_core/authentication/register.vue b/apps/web-tdesign/src/views/_core/authentication/register.vue
index 1a80ff51a..4489bcd19 100644
--- a/apps/web-tdesign/src/views/_core/authentication/register.vue
+++ b/apps/web-tdesign/src/views/_core/authentication/register.vue
@@ -82,8 +82,7 @@ const formSchema = computed((): VbenFormSchema[] => {
});
async function handleSubmit(value: Recordable) {
- // eslint-disable-next-line no-console
- console.log('register submit:', value);
+ void value;
}
diff --git a/apps/web-tdesign/src/views/dashboard/analytics/index.vue b/apps/web-tdesign/src/views/dashboard/analytics/index.vue
index 5e3d6d285..e794c99a9 100644
--- a/apps/web-tdesign/src/views/dashboard/analytics/index.vue
+++ b/apps/web-tdesign/src/views/dashboard/analytics/index.vue
@@ -76,10 +76,10 @@ const chartTabs: TabOption[] = [
-
+
-
+
diff --git a/apps/web-tdesign/src/views/demos/tdesign/index.vue b/apps/web-tdesign/src/views/demos/tdesign/index.vue
index 27299dea5..f6342ae32 100644
--- a/apps/web-tdesign/src/views/demos/tdesign/index.vue
+++ b/apps/web-tdesign/src/views/demos/tdesign/index.vue
@@ -38,7 +38,7 @@ function notify(type: NotificationType) {
description="支持多语言,主题功能集成切换等"
title="TDesign Vue组件使用演示"
>
-
+
@@ -46,7 +46,7 @@ function notify(type: NotificationType) {
-
+
@@ -55,7 +55,7 @@ function notify(type: NotificationType) {
-
+
diff --git a/apps/web-tdesign/tailwind.config.mjs b/apps/web-tdesign/tailwind.config.mjs
deleted file mode 100644
index f17f556fa..000000000
--- a/apps/web-tdesign/tailwind.config.mjs
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from '@vben/tailwind-config';
diff --git a/apps/web-tdesign/tsconfig.json b/apps/web-tdesign/tsconfig.json
index 02c287fe6..858a0ec08 100644
--- a/apps/web-tdesign/tsconfig.json
+++ b/apps/web-tdesign/tsconfig.json
@@ -2,7 +2,6 @@
"$schema": "https://json.schemastore.org/tsconfig",
"extends": "@vben/tsconfig/web-app.json",
"compilerOptions": {
- "baseUrl": ".",
"paths": {
"#/*": ["./src/*"]
}
diff --git a/apps/web-tdesign/tsconfig.node.json b/apps/web-tdesign/tsconfig.node.json
index c2f0d86cc..36e9fb5fb 100644
--- a/apps/web-tdesign/tsconfig.node.json
+++ b/apps/web-tdesign/tsconfig.node.json
@@ -6,5 +6,5 @@
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
"noEmit": false
},
- "include": ["vite.config.mts"]
+ "include": ["vite.config.ts"]
}
diff --git a/apps/web-tdesign/vite.config.mts b/apps/web-tdesign/vite.config.ts
similarity index 100%
rename from apps/web-tdesign/vite.config.mts
rename to apps/web-tdesign/vite.config.ts
diff --git a/cspell.json b/cspell.json
index 0c05c512d..c53d1cc51 100644
--- a/cspell.json
+++ b/cspell.json
@@ -12,10 +12,13 @@
"axios",
"brotli",
"cascader",
+ "chatcmpl",
"clsx",
+ "dedup",
"defu",
"demi",
"dotenv",
+ "echart",
"echarts",
"ependencies",
"esbuild",
@@ -41,6 +44,9 @@
"noreferrer",
"nprogress",
"nuxt",
+ "organisation",
+ "oxfmt",
+ "oxlint",
"pinia",
"prefixs",
"publint",
@@ -51,8 +57,12 @@
"sonner",
"sortablejs",
"styl",
+ "tabler",
"taze",
"tdesign",
+ "tsdown",
+ "tsgolint",
+ "turborepo",
"ui-kit",
"uicons",
"unplugin",
diff --git a/docs/.vitepress/components/demo-preview.vue b/docs/.vitepress/components/demo-preview.vue
index 983a95062..cca9c749d 100644
--- a/docs/.vitepress/components/demo-preview.vue
+++ b/docs/.vitepress/components/demo-preview.vue
@@ -27,7 +27,7 @@ const parsedFiles = computed(() => {
-
+
ERROR:
The preview directory does not exist. Please check the 'dir'
diff --git a/docs/.vitepress/components/preview-group.vue b/docs/.vitepress/components/preview-group.vue
index e08e921aa..ccf1f7e87 100644
--- a/docs/.vitepress/components/preview-group.vue
+++ b/docs/.vitepress/components/preview-group.vue
@@ -56,15 +56,15 @@ const toggleOpen = () => {
-
+
{{ tab.label }}
@@ -92,7 +92,7 @@ const toggleOpen = () => {