This commit is contained in:
dap 2024-09-01 13:07:06 +08:00
commit 13083e6545
77 changed files with 384 additions and 214 deletions

View File

@ -1,28 +0,0 @@
ls:
.js: kebab-case | pointcase
.vue: kebab-case | pointcase
.ts: kebab-case | pointcase
.tsx: kebab-case | pointcase
.jsx: kebab-case | pointcase
.css: kebab-case | pointcase
.d.ts: kebab-case | pointcase
# shadcn 自动生成文件为 PascalCase 格式
packages/@core/ui-kit/shadcn-ui/src/components/ui:
.vue: PascalCase
ignore:
- "**/*.png"
- "**/*.jpg"
- "**/*.jpeg"
- "**/*.jpeg"
- "**/*.gif"
- "**/_util.ts"
- "**/deps/**"
- "**/dist/**"
- "**/node_modules/**"
- "**/.turbo/**"
- .git
- .vscode
- .idea
- node_modules
- .cache

View File

@ -213,7 +213,7 @@
"README.md": "README*,CHANGELOG*,LICENSE,CNAME", "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", "package.json": "pnpm-lock.yaml,pnpm-workspace.yaml,.gitattributes,.gitignore,.gitpod.yml,.npmrc,.browserslistrc,.node-version,.git*,.tazerc.json",
"Dockerfile": "Dockerfile,.docker*,docker-entrypoint.sh,build-local-docker*,nginx.conf", "Dockerfile": "Dockerfile,.docker*,docker-entrypoint.sh,build-local-docker*,nginx.conf",
"eslint.config.mjs": ".eslintignore,.prettierignore,.stylelintignore,.commitlintrc.*,.prettierrc.*,stylelint.config.*,.lintstagedrc.mjs,.ls-lint*,cspell.json", "eslint.config.mjs": ".eslintignore,.prettierignore,.stylelintignore,.commitlintrc.*,.prettierrc.*,stylelint.config.*,.lintstagedrc.mjs,cspell.json",
"tailwind.config.mjs": "postcss.*" "tailwind.config.mjs": "postcss.*"
}, },
"commentTranslate.hover.enabled": false, "commentTranslate.hover.enabled": false,

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/web-antd", "name": "@vben/web-antd",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://vben.pro", "homepage": "https://vben.pro",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -0,0 +1,23 @@
<script lang="ts" setup>
import { computed } from 'vue';
import { AuthPageLayout } from '@vben/layouts';
import { preferences } from '@vben/preferences';
import { $t } from '#/locales';
const appName = computed(() => preferences.app.name);
const logo = computed(() => preferences.logo.source);
</script>
<template>
<AuthPageLayout
:app-name="appName"
:logo="logo"
:page-description="$t('authentication.pageDesc')"
:page-title="$t('authentication.pageTitle')"
>
<!-- 自定义工具栏 -->
<!-- <template #toolbar></template> -->
</AuthPageLayout>
</template>

View File

@ -1,8 +1,6 @@
const BasicLayout = () => import('./basic.vue'); const BasicLayout = () => import('./basic.vue');
const AuthPageLayout = () => import('./auth.vue');
const IFrameView = () => import('@vben/layouts').then((m) => m.IFrameView); const IFrameView = () => import('@vben/layouts').then((m) => m.IFrameView);
const AuthPageLayout = () =>
import('@vben/layouts').then((m) => m.AuthPageLayout);
export { AuthPageLayout, BasicLayout, IFrameView }; export { AuthPageLayout, BasicLayout, IFrameView };

View File

@ -55,12 +55,27 @@ onMounted(() => {
}, },
trigger: 'axis', trigger: 'axis',
}, },
// xAxis: {
// axisTick: {
// show: false,
// },
// boundaryGap: false,
// data: Array.from({ length: 18 }).map((_item, index) => `${index + 6}:00`),
// type: 'category',
// },
xAxis: { xAxis: {
axisTick: { axisTick: {
show: false, show: false,
}, },
boundaryGap: false, boundaryGap: false,
data: Array.from({ length: 18 }).map((_item, index) => `${index + 6}:00`), data: Array.from({ length: 18 }).map((_item, index) => `${index + 6}:00`),
splitLine: {
lineStyle: {
type: 'solid',
width: 1,
},
show: true,
},
type: 'category', type: 'category',
}, },
yAxis: [ yAxis: [
@ -69,7 +84,10 @@ onMounted(() => {
show: false, show: false,
}, },
max: 80_000, max: 80_000,
splitArea: {
show: true,
},
splitNumber: 4,
type: 'value', type: 'value',
}, },
], ],

View File

@ -37,7 +37,7 @@ function notify(type: NotificationType) {
description="支持多语言,主题功能集成切换等" description="支持多语言,主题功能集成切换等"
title="Ant Design Vue组件使用演示" title="Ant Design Vue组件使用演示"
> >
<Card title="按钮"> <Card class="mb-5" title="按钮">
<Space> <Space>
<Button>Default</Button> <Button>Default</Button>
<Button type="primary"> Primary </Button> <Button type="primary"> Primary </Button>

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/web-ele", "name": "@vben/web-ele",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://vben.pro", "homepage": "https://vben.pro",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -0,0 +1,23 @@
<script lang="ts" setup>
import { computed } from 'vue';
import { AuthPageLayout } from '@vben/layouts';
import { preferences } from '@vben/preferences';
import { $t } from '#/locales';
const appName = computed(() => preferences.app.name);
const logo = computed(() => preferences.logo.source);
</script>
<template>
<AuthPageLayout
:app-name="appName"
:logo="logo"
:page-description="$t('authentication.pageDesc')"
:page-title="$t('authentication.pageTitle')"
>
<!-- 自定义工具栏 -->
<!-- <template #toolbar></template> -->
</AuthPageLayout>
</template>

View File

@ -1,8 +1,6 @@
const BasicLayout = () => import('./basic.vue'); const BasicLayout = () => import('./basic.vue');
const AuthPageLayout = () => import('./auth.vue');
const IFrameView = () => import('@vben/layouts').then((m) => m.IFrameView); const IFrameView = () => import('@vben/layouts').then((m) => m.IFrameView);
const AuthPageLayout = () =>
import('@vben/layouts').then((m) => m.AuthPageLayout);
export { AuthPageLayout, BasicLayout, IFrameView }; export { AuthPageLayout, BasicLayout, IFrameView };

View File

@ -55,12 +55,27 @@ onMounted(() => {
}, },
trigger: 'axis', trigger: 'axis',
}, },
// xAxis: {
// axisTick: {
// show: false,
// },
// boundaryGap: false,
// data: Array.from({ length: 18 }).map((_item, index) => `${index + 6}:00`),
// type: 'category',
// },
xAxis: { xAxis: {
axisTick: { axisTick: {
show: false, show: false,
}, },
boundaryGap: false, boundaryGap: false,
data: Array.from({ length: 18 }).map((_item, index) => `${index + 6}:00`), data: Array.from({ length: 18 }).map((_item, index) => `${index + 6}:00`),
splitLine: {
lineStyle: {
type: 'solid',
width: 1,
},
show: true,
},
type: 'category', type: 'category',
}, },
yAxis: [ yAxis: [
@ -69,7 +84,10 @@ onMounted(() => {
show: false, show: false,
}, },
max: 80_000, max: 80_000,
splitArea: {
show: true,
},
splitNumber: 4,
type: 'value', type: 'value',
}, },
], ],

View File

@ -214,7 +214,11 @@ const trendItems: WorkbenchTrendItem[] = [
<WorkbenchTrends :items="trendItems" class="mt-5" title="最新动态" /> <WorkbenchTrends :items="trendItems" class="mt-5" title="最新动态" />
</div> </div>
<div class="w-full lg:w-2/5"> <div class="w-full lg:w-2/5">
<WorkbenchQuickNav :items="quickNavItems" title="快捷导航" /> <WorkbenchQuickNav
:items="quickNavItems"
class="mt-5 lg:mt-0"
title="快捷导航"
/>
<WorkbenchTodo :items="todoItems" class="mt-5" title="待办事项" /> <WorkbenchTodo :items="todoItems" class="mt-5" title="待办事项" />
<AnalysisChartCard class="mt-5" title="访问来源"> <AnalysisChartCard class="mt-5" title="访问来源">
<AnalyticsVisitsSource /> <AnalyticsVisitsSource />

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/web-naive", "name": "@vben/web-naive",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://vben.pro", "homepage": "https://vben.pro",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -0,0 +1,23 @@
<script lang="ts" setup>
import { computed } from 'vue';
import { AuthPageLayout } from '@vben/layouts';
import { preferences } from '@vben/preferences';
import { $t } from '#/locales';
const appName = computed(() => preferences.app.name);
const logo = computed(() => preferences.logo.source);
</script>
<template>
<AuthPageLayout
:app-name="appName"
:logo="logo"
:page-description="$t('authentication.pageDesc')"
:page-title="$t('authentication.pageTitle')"
>
<!-- 自定义工具栏 -->
<!-- <template #toolbar></template> -->
</AuthPageLayout>
</template>

View File

@ -1,8 +1,6 @@
const BasicLayout = () => import('./basic.vue'); const BasicLayout = () => import('./basic.vue');
const AuthPageLayout = () => import('./auth.vue');
const IFrameView = () => import('@vben/layouts').then((m) => m.IFrameView); const IFrameView = () => import('@vben/layouts').then((m) => m.IFrameView);
const AuthPageLayout = () =>
import('@vben/layouts').then((m) => m.AuthPageLayout);
export { AuthPageLayout, BasicLayout, IFrameView }; export { AuthPageLayout, BasicLayout, IFrameView };

View File

@ -55,12 +55,27 @@ onMounted(() => {
}, },
trigger: 'axis', trigger: 'axis',
}, },
// xAxis: {
// axisTick: {
// show: false,
// },
// boundaryGap: false,
// data: Array.from({ length: 18 }).map((_item, index) => `${index + 6}:00`),
// type: 'category',
// },
xAxis: { xAxis: {
axisTick: { axisTick: {
show: false, show: false,
}, },
boundaryGap: false, boundaryGap: false,
data: Array.from({ length: 18 }).map((_item, index) => `${index + 6}:00`), data: Array.from({ length: 18 }).map((_item, index) => `${index + 6}:00`),
splitLine: {
lineStyle: {
type: 'solid',
width: 1,
},
show: true,
},
type: 'category', type: 'category',
}, },
yAxis: [ yAxis: [
@ -69,7 +84,10 @@ onMounted(() => {
show: false, show: false,
}, },
max: 80_000, max: 80_000,
splitArea: {
show: true,
},
splitNumber: 4,
type: 'value', type: 'value',
}, },
], ],

View File

@ -214,7 +214,11 @@ const trendItems: WorkbenchTrendItem[] = [
<WorkbenchTrends :items="trendItems" class="mt-5" title="最新动态" /> <WorkbenchTrends :items="trendItems" class="mt-5" title="最新动态" />
</div> </div>
<div class="w-full lg:w-2/5"> <div class="w-full lg:w-2/5">
<WorkbenchQuickNav :items="quickNavItems" title="快捷导航" /> <WorkbenchQuickNav
:items="quickNavItems"
class="mt-5 lg:mt-0"
title="快捷导航"
/>
<WorkbenchTodo :items="todoItems" class="mt-5" title="待办事项" /> <WorkbenchTodo :items="todoItems" class="mt-5" title="待办事项" />
<AnalysisChartCard class="mt-5" title="访问来源"> <AnalysisChartCard class="mt-5" title="访问来源">
<AnalyticsVisitsSource /> <AnalyticsVisitsSource />

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/docs", "name": "@vben/docs",
"version": "5.2.0", "version": "5.2.1",
"private": true, "private": true,
"scripts": { "scripts": {
"build": "vitepress build", "build": "vitepress build",

View File

@ -240,7 +240,7 @@ const defaultPreferences: Preferences = {
theme: { theme: {
builtinType: 'default', builtinType: 'default',
colorDestructive: 'hsl(348 100% 61%)', colorDestructive: 'hsl(348 100% 61%)',
colorPrimary: 'hsl(231 98% 65%)', colorPrimary: 'hsl(212 100% 45%)',
colorSuccess: 'hsl(144 57% 58%)', colorSuccess: 'hsl(144 57% 58%)',
colorWarning: 'hsl(42 84% 61%)', colorWarning: 'hsl(42 84% 61%)',
mode: 'dark', mode: 'dark',

View File

@ -18,7 +18,7 @@ You just need to configure the `props` parameter of `AuthPageLayout` in `src/rou
pageTitle: "开箱即用的大型中后台管理系统", pageTitle: "开箱即用的大型中后台管理系统",
pageDescription: "工程化、高性能、跨组件库的前端模版", pageDescription: "工程化、高性能、跨组件库的前端模版",
toolbar: true, toolbar: true,
toolbarList: () => ['color', 'language', 'layout', 'theme'], toolbarList: ['color', 'language', 'layout', 'theme'],
} }
// ... // ...
}, },

View File

@ -53,7 +53,7 @@ You can check the list below to understand all the available variables.
/* Theme Colors */ /* Theme Colors */
--primary: 231 98% 65%; --primary: 212 100% 45%;
--primary-foreground: 0 0% 98%; --primary-foreground: 0 0% 98%;
/* Used for destructive actions such as <Button variant="destructive"> */ /* Used for destructive actions such as <Button variant="destructive"> */
@ -264,7 +264,7 @@ export const overridesPreferences = defineOverridesPreferences({
// Error color // Error color
colorDestructive: 'hsl(348 100% 61%)', colorDestructive: 'hsl(348 100% 61%)',
// Primary color // Primary color
colorPrimary: 'hsl(231 98% 65%)', colorPrimary: 'hsl(212 100% 45%)',
// Success color // Success color
colorSuccess: 'hsl(144 57% 58%)', colorSuccess: 'hsl(144 57% 58%)',
// Warning color // Warning color
@ -351,7 +351,7 @@ type BuiltinThemeType =
/* Theme Colors */ /* Theme Colors */
--primary: 231 98% 65%; --primary: 212 100% 45%;
--primary-foreground: 0 0% 98%; --primary-foreground: 0 0% 98%;
/* Used for destructive actions such as <Button variant="destructive"> */ /* Used for destructive actions such as <Button variant="destructive"> */

View File

@ -262,7 +262,7 @@ const defaultPreferences: Preferences = {
theme: { theme: {
builtinType: 'default', builtinType: 'default',
colorDestructive: 'hsl(348 100% 61%)', colorDestructive: 'hsl(348 100% 61%)',
colorPrimary: 'hsl(231 98% 65%)', colorPrimary: 'hsl(212 100% 45%)',
colorSuccess: 'hsl(144 57% 58%)', colorSuccess: 'hsl(144 57% 58%)',
colorWarning: 'hsl(42 84% 61%)', colorWarning: 'hsl(42 84% 61%)',
mode: 'dark', mode: 'dark',

View File

@ -8,28 +8,21 @@
![login](/guide/login.png) ![login](/guide/login.png)
只需要在应用下的 `src/router/routes/core.ts` 内,配置`AuthPageLayout`的 `props`参数即可: 只需要在应用下的 `src/layouts/auth.vue` 内,配置`AuthPageLayout`的 `props`参数即可:
```ts {4-8} ```vue {2-7}
{ <AuthPageLayout
component: AuthPageLayout, :copyright="true"
props: { :toolbar="true"
sloganImage: "xxx/xxx.png", :toolbarList="['color', 'language', 'layout', 'theme']"
pageTitle: "开箱即用的大型中后台管理系统", :app-name="appName"
pageDescription: "工程化、高性能、跨组件库的前端模版", :logo="logo"
toolbar: true, :page-description="$t('authentication.pageDesc')"
toolbarList: () => ['color', 'language', 'layout', 'theme'], :page-title="$t('authentication.pageTitle')"
} >
// ... </AuthPageLayout>
},
``` ```
::: tip
如果这些配置不能满足你的需求,你可以自行实现登录页面。直接实现自己的 `AuthPageLayout`即可。
:::
## 登录表单调整 ## 登录表单调整
如果你想调整登录表单的相关内容,你可以在应用下的 `src/views/_core/authentication/login.vue` 内,配置`AuthenticationLogin` 组件参数即可: 如果你想调整登录表单的相关内容,你可以在应用下的 `src/views/_core/authentication/login.vue` 内,配置`AuthenticationLogin` 组件参数即可:

View File

@ -53,7 +53,7 @@ css 变量内的颜色,必须使用 `hsl` 格式,如 `0 0% 100%`,不需要
/* 主题颜色 */ /* 主题颜色 */
--primary: 231 98% 65%; --primary: 212 100% 45%;
--primary-foreground: 0 0% 98%; --primary-foreground: 0 0% 98%;
/* Used for destructive actions such as <Button variant="destructive"> */ /* Used for destructive actions such as <Button variant="destructive"> */
@ -264,7 +264,7 @@ export const overridesPreferences = defineOverridesPreferences({
// 错误色 // 错误色
colorDestructive: 'hsl(348 100% 61%)', colorDestructive: 'hsl(348 100% 61%)',
// 主题色 // 主题色
colorPrimary: 'hsl(231 98% 65%)', colorPrimary: 'hsl(212 100% 45%)',
// 成功色 // 成功色
colorSuccess: 'hsl(144 57% 58%)', colorSuccess: 'hsl(144 57% 58%)',
// 警告色 // 警告色
@ -351,7 +351,7 @@ type BuiltinThemeType =
/* 主题颜色 */ /* 主题颜色 */
--primary: 231 98% 65%; --primary: 212 100% 45%;
--primary-foreground: 0 0% 98%; --primary-foreground: 0 0% 98%;
/* Used for destructive actions such as <Button variant="destructive"> */ /* Used for destructive actions such as <Button variant="destructive"> */

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/commitlint-config", "name": "@vben/commitlint-config",
"version": "5.2.0", "version": "5.2.1",
"private": true, "private": true,
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/stylelint-config", "name": "@vben/stylelint-config",
"version": "5.2.0", "version": "5.2.1",
"private": true, "private": true,
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/node-utils", "name": "@vben/node-utils",
"version": "5.2.0", "version": "5.2.1",
"private": true, "private": true,
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/tailwind-config", "name": "@vben/tailwind-config",
"version": "5.2.0", "version": "5.2.1",
"private": true, "private": true,
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/tsconfig", "name": "@vben/tsconfig",
"version": "5.2.0", "version": "5.2.1",
"private": true, "private": true,
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/vite-config", "name": "@vben/vite-config",
"version": "5.2.0", "version": "5.2.1",
"private": true, "private": true,
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",

View File

@ -1,6 +1,6 @@
{ {
"name": "vben-admin-pro", "name": "vben-admin-pro",
"version": "5.2.0", "version": "5.2.1",
"private": true, "private": true,
"keywords": [ "keywords": [
"monorepo", "monorepo",
@ -63,7 +63,6 @@
"devDependencies": { "devDependencies": {
"@changesets/changelog-github": "^0.5.0", "@changesets/changelog-github": "^0.5.0",
"@changesets/cli": "^2.27.7", "@changesets/cli": "^2.27.7",
"@ls-lint/ls-lint": "^2.2.3",
"@types/jsdom": "^21.1.7", "@types/jsdom": "^21.1.7",
"@types/node": "^22.5.1", "@types/node": "^22.5.1",
"@vben/commitlint-config": "workspace:*", "@vben/commitlint-config": "workspace:*",

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben-core/design", "name": "@vben-core/design",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -28,7 +28,7 @@
/* 主题颜色 */ /* 主题颜色 */
--primary: 231 98% 65%; --primary: 212 100% 45%;
--primary-foreground: 0 0% 98%; --primary-foreground: 0 0% 98%;
/* Used for destructive actions such as <Button variant="destructive"> */ /* Used for destructive actions such as <Button variant="destructive"> */
@ -78,6 +78,7 @@
/* 遮罩颜色 */ /* 遮罩颜色 */
--overlay: 0 0% 0% / 45%; --overlay: 0 0% 0% / 45%;
--overlay-light: 0 0% 95% / 45%;
/* 基本文字大小 */ /* 基本文字大小 */
--font-size-base: 16px; --font-size-base: 16px;

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben-core/icons", "name": "@vben-core/icons",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben-core/shared", "name": "@vben-core/shared",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben-core/typings", "name": "@vben-core/typings",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben-core/composables", "name": "@vben-core/composables",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben-core/preferences", "name": "@vben-core/preferences",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -87,7 +87,7 @@ const defaultPreferences: Preferences = {
theme: { theme: {
builtinType: 'default', builtinType: 'default',
colorDestructive: 'hsl(348 100% 61%)', colorDestructive: 'hsl(348 100% 61%)',
colorPrimary: 'hsl(231 98% 65%)', colorPrimary: 'hsl(212 100% 45%)',
colorSuccess: 'hsl(144 57% 58%)', colorSuccess: 'hsl(144 57% 58%)',
colorWarning: 'hsl(42 84% 61%)', colorWarning: 'hsl(42 84% 61%)',
mode: 'auto', mode: 'auto',

View File

@ -9,7 +9,7 @@ interface BuiltinThemePreset {
const BUILT_IN_THEME_PRESETS: BuiltinThemePreset[] = [ const BUILT_IN_THEME_PRESETS: BuiltinThemePreset[] = [
{ {
color: 'hsl(231 98% 65%)', color: 'hsl(212 100% 45%)',
type: 'default', type: 'default',
}, },
{ {
@ -25,7 +25,7 @@ const BUILT_IN_THEME_PRESETS: BuiltinThemePreset[] = [
type: 'yellow', type: 'yellow',
}, },
{ {
color: 'hsl(212 100% 45%)', color: 'hsl(231 98% 65%)',
type: 'sky-blue', type: 'sky-blue',
}, },
{ {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben-core/layout-ui", "name": "@vben-core/layout-ui",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben-core/menu-ui", "name": "@vben-core/menu-ui",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -159,7 +159,7 @@ function pointerDownOutside(e: Event) {
) )
" "
:show-close="closable" :show-close="closable"
close-class="top-4" close-class="top-3"
@escape-key-down="escapeKeyDown" @escape-key-down="escapeKeyDown"
@interact-outside="interactOutside" @interact-outside="interactOutside"
@pointer-down-outside="pointerDownOutside" @pointer-down-outside="pointerDownOutside"
@ -219,7 +219,7 @@ function pointerDownOutside(e: Event) {
<VbenIconButton <VbenIconButton
v-if="fullscreenButton" v-if="fullscreenButton"
class="hover:bg-accent hover:text-accent-foreground text-foreground/80 flex-center absolute right-10 top-4 hidden size-6 rounded-full px-1 text-lg opacity-70 transition-opacity hover:opacity-100 focus:outline-none disabled:pointer-events-none sm:block" class="hover:bg-accent hover:text-accent-foreground text-foreground/80 flex-center absolute right-10 top-3 hidden size-6 rounded-full px-1 text-lg opacity-70 transition-opacity hover:opacity-100 focus:outline-none disabled:pointer-events-none sm:block"
@click="handleFullscreen" @click="handleFullscreen"
> >
<Shrink v-if="fullscreen" class="size-3.5" /> <Shrink v-if="fullscreen" class="size-3.5" />

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben-core/shadcn-ui", "name": "@vben-core/shadcn-ui",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -25,7 +25,7 @@ const show = ref(false);
</script> </script>
<template> <template>
<form class="relative"> <div class="relative">
<VbenInput <VbenInput
v-model="modelValue" v-model="modelValue"
v-bind="{ ...forward, ...$attrs }" v-bind="{ ...forward, ...$attrs }"
@ -48,5 +48,5 @@ const show = ref(false);
<Eye v-if="show" class="size-4" /> <Eye v-if="show" class="size-4" />
<EyeOff v-else class="size-4" /> <EyeOff v-else class="size-4" />
</div> </div>
</form> </div>
</template> </template>

View File

@ -69,7 +69,7 @@ function onTransitionEnd() {
<div <div
:class=" :class="
cn( cn(
'bg-overlay z-100 pointer-events-none absolute left-0 top-0 flex size-full flex-col items-center justify-center transition-all duration-500', 'z-100 dark:bg-overlay pointer-events-none absolute left-0 top-0 flex size-full flex-col items-center justify-center bg-[hsl(var(--overlay-light))] transition-all duration-500',
{ {
'invisible opacity-0': !showSpinner, 'invisible opacity-0': !showSpinner,
}, },

View File

@ -63,7 +63,7 @@ function onTransitionEnd() {
<div <div
:class=" :class="
cn( cn(
'flex-center bg-overlay z-100 absolute left-0 top-0 size-full backdrop-blur-sm transition-all duration-500', 'flex-center z-100 dark:bg-overlay absolute left-0 top-0 size-full bg-[hsl(var(--overlay-light))] backdrop-blur-sm transition-all duration-500',
{ {
'invisible opacity-0': !showSpinner, 'invisible opacity-0': !showSpinner,
}, },

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben-core/tabs-ui", "name": "@vben-core/tabs-ui",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/constants", "name": "@vben/constants",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/access", "name": "@vben/access",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/common-ui", "name": "@vben/common-ui",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -162,6 +162,7 @@ defineExpose({ resetCaptcha });
<template> <template>
<div @keydown.enter.prevent="handleSubmit"> <div @keydown.enter.prevent="handleSubmit">
<slot name="title">
<Title> <Title>
{{ title || `${$t('authentication.welcomeBack')} 👋🏻` }} {{ title || `${$t('authentication.welcomeBack')} 👋🏻` }}
<template #desc> <template #desc>
@ -170,6 +171,7 @@ defineExpose({ resetCaptcha });
</span> </span>
</template> </template>
</Title> </Title>
</slot>
<!-- 租户 --> <!-- 租户 -->
<div v-if="useTenant" class="tenant-picker mb-6"> <div v-if="useTenant" class="tenant-picker mb-6">
@ -234,8 +236,11 @@ defineExpose({ resetCaptcha });
/> />
</div> </div>
<div class="mb-6 mt-4 flex justify-between"> <div
<div v-if="showRememberMe" class="flex-center"> v-if="showRememberMe || showForgetPassword"
class="mb-6 mt-4 flex justify-between"
>
<div class="flex-center">
<VbenCheckbox v-model:checked="formState.rememberMe" name="rememberMe"> <VbenCheckbox v-model:checked="formState.rememberMe" name="rememberMe">
{{ $t('authentication.rememberMe') }} {{ $t('authentication.rememberMe') }}
</VbenCheckbox> </VbenCheckbox>
@ -253,7 +258,10 @@ defineExpose({ resetCaptcha });
{{ $t('common.login') }} {{ $t('common.login') }}
</VbenButton> </VbenButton>
<div class="mb-2 mt-4 flex items-center justify-between"> <div
v-if="showCodeLogin || showQrcodeLogin"
class="mb-2 mt-4 flex items-center justify-between"
>
<VbenButton <VbenButton
v-if="showCodeLogin" v-if="showCodeLogin"
class="w-1/2" class="w-1/2"
@ -273,12 +281,15 @@ defineExpose({ resetCaptcha });
</div> </div>
<!-- 第三方登录 --> <!-- 第三方登录 -->
<slot name="third-party-login">
<ThirdPartyLogin <ThirdPartyLogin
v-if="showThirdPartyLogin" v-if="showThirdPartyLogin"
@oauth-login="(e) => emit('oauthLogin', e)" @oauth-login="(e) => emit('oauthLogin', e)"
/> />
</slot>
<div v-if="showRegister" class="text-center text-sm"> <slot name="to-register">
<div v-if="showRegister" class="mt-3 text-center text-sm">
{{ $t('authentication.accountTip') }} {{ $t('authentication.accountTip') }}
<span <span
class="text-primary hover:text-primary-hover active:text-primary-active cursor-pointer text-sm font-normal" class="text-primary hover:text-primary-hover active:text-primary-active cursor-pointer text-sm font-normal"
@ -287,6 +298,7 @@ defineExpose({ resetCaptcha });
{{ $t('authentication.createAccount') }} {{ $t('authentication.createAccount') }}
</span> </span>
</div> </div>
</slot>
</div> </div>
</template> </template>

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/hooks", "name": "@vben/hooks",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/layouts", "name": "@vben/layouts",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,24 +1,28 @@
<script setup lang="ts"> <script setup lang="ts">
import { computed } from 'vue'; import type { ToolbarType } from './types';
import { $t } from '@vben/locales';
import { preferences, usePreferences } from '@vben/preferences'; import { preferences, usePreferences } from '@vben/preferences';
import { Copyright } from '../basic/copyright';
import AuthenticationFormView from './form.vue'; import AuthenticationFormView from './form.vue';
import SloganIcon from './icons/slogan.vue'; import SloganIcon from './icons/slogan.vue';
import Toolbar from './toolbar.vue'; import Toolbar from './toolbar.vue';
interface Props { interface Props {
appName?: string;
logo?: string;
pageTitle?: string; pageTitle?: string;
pageDescription?: string; pageDescription?: string;
sloganImage?: string; sloganImage?: string;
toolbar?: boolean; toolbar?: boolean;
toolbarList?: ('color' | 'language' | 'layout' | 'theme')[]; copyright?: boolean;
toolbarList?: ToolbarType[];
} }
defineOptions({ name: 'Authentication' });
withDefaults(defineProps<Props>(), { withDefaults(defineProps<Props>(), {
appName: '',
copyright: true,
logo: '',
pageDescription: '', pageDescription: '',
pageTitle: '', pageTitle: '',
sloganImage: '', sloganImage: '',
@ -26,31 +30,42 @@ withDefaults(defineProps<Props>(), {
toolbarList: () => ['color', 'language', 'layout', 'theme'], toolbarList: () => ['color', 'language', 'layout', 'theme'],
}); });
const { authPanelCenter, authPanelLeft, authPanelRight } = usePreferences(); const { authPanelCenter, authPanelLeft, authPanelRight, isDark } =
const appName = computed(() => preferences.app.name); usePreferences();
const logoSource = computed(() => preferences.logo.source);
</script> </script>
<template> <template>
<div class="flex min-h-full flex-1 select-none overflow-x-hidden"> <div
:class="[isDark]"
class="flex min-h-full flex-1 select-none overflow-x-hidden"
>
<template v-if="toolbar">
<slot name="toolbar">
<Toolbar :toolbar-list="toolbarList" />
</slot>
</template>
<!-- 左侧认证面板 --> <!-- 左侧认证面板 -->
<AuthenticationFormView <AuthenticationFormView
v-if="authPanelLeft" v-if="authPanelLeft"
class="min-h-full w-2/5 flex-1" class="min-h-full w-2/5 flex-1"
transition-name="slide-left" transition-name="slide-left"
> >
<template v-if="toolbar" #toolbar> <template v-if="copyright" #copyright>
<Toolbar :toolbar-list="toolbarList" /> <slot name="copyright">
<Copyright
v-if="preferences.copyright.enable"
v-bind="preferences.copyright"
/>
</slot>
</template> </template>
</AuthenticationFormView> </AuthenticationFormView>
<!-- 头部 Logo 和应用名称 --> <!-- 头部 Logo 和应用名称 -->
<div class="absolute left-0 top-0 z-10 flex flex-1"> <div class="absolute left-0 top-0 z-10 flex flex-1">
<div <div
:class="authPanelRight ? 'lg:text-white' : 'lg:text-foreground'" class="text-foreground lg:text-foreground ml-4 mt-4 flex flex-1 items-center sm:left-6 sm:top-6"
class="text-foreground ml-4 mt-4 flex flex-1 items-center sm:left-6 sm:top-6"
> >
<img :alt="appName" :src="logoSource" class="mr-2" width="42" /> <img :alt="appName" :src="logo" class="mr-2" width="42" />
<p class="text-xl font-medium"> <p class="text-xl font-medium">
{{ appName }} {{ appName }}
</p> </p>
@ -59,7 +74,9 @@ const logoSource = computed(() => preferences.logo.source);
<!-- 系统介绍 --> <!-- 系统介绍 -->
<div v-if="!authPanelCenter" class="relative hidden w-0 flex-1 lg:block"> <div v-if="!authPanelCenter" class="relative hidden w-0 flex-1 lg:block">
<div class="absolute inset-0 h-full w-full bg-[#070709]"> <div
class="bg-background-deep absolute inset-0 h-full w-full dark:bg-[#070709]"
>
<div class="login-background absolute left-0 top-0 size-full"></div> <div class="login-background absolute left-0 top-0 size-full"></div>
<div class="flex-col-center -enter-x mr-20 h-full"> <div class="flex-col-center -enter-x mr-20 h-full">
<template v-if="sloganImage"> <template v-if="sloganImage">
@ -70,11 +87,11 @@ const logoSource = computed(() => preferences.logo.source);
/> />
</template> </template>
<SloganIcon v-else :alt="appName" class="animate-float h-64 w-2/5" /> <SloganIcon v-else :alt="appName" class="animate-float h-64 w-2/5" />
<div class="text-1xl mt-6 font-sans text-white lg:text-2xl"> <div class="text-1xl text-foreground mt-6 font-sans lg:text-2xl">
{{ pageTitle || $t('authentication.pageTitle') }} {{ pageTitle }}
</div> </div>
<div class="dark:text-muted-foreground mt-2 text-white/60"> <div class="dark:text-muted-foreground mt-2">
{{ pageDescription || $t('authentication.pageDesc') }} {{ pageDescription }}
</div> </div>
</div> </div>
</div> </div>
@ -84,10 +101,15 @@ const logoSource = computed(() => preferences.logo.source);
<div v-if="authPanelCenter" class="flex-center relative w-full"> <div v-if="authPanelCenter" class="flex-center relative w-full">
<div class="login-background absolute left-0 top-0 size-full"></div> <div class="login-background absolute left-0 top-0 size-full"></div>
<AuthenticationFormView <AuthenticationFormView
class="md:bg-background shadow-primary/10 w-full rounded-3xl pb-20 shadow-2xl md:w-2/3 lg:w-1/2 xl:w-[36%]" class="md:bg-background shadow-primary/5 shadow-float w-full rounded-3xl pb-20 md:w-2/3 lg:w-1/2 xl:w-[36%]"
> >
<template v-if="toolbar" #toolbar> <template v-if="copyright" #copyright>
<Toolbar :toolbar-list="toolbarList" /> <slot name="copyright">
<Copyright
v-if="preferences.copyright.enable"
v-bind="preferences.copyright"
/>
</slot>
</template> </template>
</AuthenticationFormView> </AuthenticationFormView>
</div> </div>
@ -95,10 +117,15 @@ const logoSource = computed(() => preferences.logo.source);
<!-- 右侧认证面板 --> <!-- 右侧认证面板 -->
<AuthenticationFormView <AuthenticationFormView
v-if="authPanelRight" v-if="authPanelRight"
class="min-h-full w-2/5 flex-1" class="min-h-full w-[34%] flex-1"
> >
<template v-if="toolbar" #toolbar> <template v-if="copyright" #copyright>
<Toolbar :toolbar-list="toolbarList" /> <slot name="copyright">
<Copyright
v-if="preferences.copyright.enable"
v-bind="preferences.copyright"
/>
</slot>
</template> </template>
</AuthenticationFormView> </AuthenticationFormView>
</div> </div>
@ -109,9 +136,21 @@ const logoSource = computed(() => preferences.logo.source);
background: linear-gradient( background: linear-gradient(
154deg, 154deg,
#07070915 30%, #07070915 30%,
hsl(var(--primary) / 15%) 48%, hsl(var(--primary) / 30%) 48%,
#07070915 64% #07070915 64%
); );
filter: blur(100px); filter: blur(100px);
} }
.dark {
.login-background {
background: linear-gradient(
154deg,
#07070915 30%,
hsl(var(--primary) / 20%) 48%,
#07070915 64%
);
filter: blur(100px);
}
}
</style> </style>

View File

@ -1,8 +1,4 @@
<script setup lang="ts"> <script setup lang="ts">
import { preferences } from '@vben/preferences';
import { Copyright } from '../basic/copyright';
defineOptions({ defineOptions({
name: 'AuthenticationFormView', name: 'AuthenticationFormView',
}); });
@ -10,11 +6,9 @@ defineOptions({
<template> <template>
<div <div
class="flex-col-center bg-background-deep relative px-6 py-10 lg:flex-initial lg:px-8" class="flex-col-center dark:bg-background-deep bg-background relative px-6 py-10 lg:flex-initial lg:px-8"
> >
<!-- Toolbar Slot --> <slot></slot>
<slot name="toolbar"> </slot>
<!-- Router View with Transition and KeepAlive --> <!-- Router View with Transition and KeepAlive -->
<RouterView v-slot="{ Component, route }"> <RouterView v-slot="{ Component, route }">
<Transition appear mode="out-in" name="slide-right"> <Transition appear mode="out-in" name="slide-right">
@ -29,13 +23,11 @@ defineOptions({
</RouterView> </RouterView>
<!-- Footer Copyright --> <!-- Footer Copyright -->
<div <div
class="text-muted-foreground absolute bottom-3 flex text-center text-xs" class="text-muted-foreground absolute bottom-3 flex text-center text-xs"
> >
<Copyright <slot name="copyright"> </slot>
v-if="preferences.copyright.enable"
v-bind="preferences.copyright"
/>
</div> </div>
</div> </div>
</template> </template>

View File

@ -1,4 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import type { ToolbarType } from './types';
import { computed } from 'vue'; import { computed } from 'vue';
import { import {
@ -9,7 +11,7 @@ import {
} from '../widgets'; } from '../widgets';
interface Props { interface Props {
toolbarList?: ('color' | 'language' | 'layout' | 'theme')[]; toolbarList?: ToolbarType[];
} }
defineOptions({ defineOptions({
@ -29,8 +31,7 @@ const showTheme = computed(() => props.toolbarList.includes('theme'));
<template> <template>
<div <div
:class="{ :class="{
'bg-background dark:bg-accent rounded-3xl px-3 py-1': 'bg-accent z-10 rounded-3xl px-3 py-1': toolbarList.length > 1,
toolbarList.length > 1,
}" }"
class="flex-center absolute right-2 top-4" class="flex-center absolute right-2 top-4"
> >

View File

@ -0,0 +1 @@
export type ToolbarType = 'color' | 'language' | 'layout' | 'theme';

View File

@ -95,6 +95,10 @@ function handleNotice(versionTag: string) {
} }
function start() { function start() {
if (props.checkUpdatesInterval <= 0) {
return;
}
// checkUpdatesInterval(1) // checkUpdatesInterval(1)
timer.value = setInterval( timer.value = setInterval(
checkForUpdates, checkForUpdates,

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/plugins", "name": "@vben/plugins",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/request", "name": "@vben/request",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/icons", "name": "@vben/icons",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/locales", "name": "@vben/locales",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/preferences", "name": "@vben/preferences",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/stores", "name": "@vben/stores",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/styles", "name": "@vben/styles",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/types", "name": "@vben/types",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/utils", "name": "@vben/utils",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://github.com/vbenjs/vue-vben-admin", "homepage": "https://github.com/vbenjs/vue-vben-admin",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/playground", "name": "@vben/playground",
"version": "5.2.0", "version": "5.2.1",
"homepage": "https://vben.pro", "homepage": "https://vben.pro",
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues", "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
"repository": { "repository": {

View File

@ -0,0 +1,23 @@
<script lang="ts" setup>
import { computed } from 'vue';
import { AuthPageLayout } from '@vben/layouts';
import { preferences } from '@vben/preferences';
import { $t } from '#/locales';
const appName = computed(() => preferences.app.name);
const logo = computed(() => preferences.logo.source);
</script>
<template>
<AuthPageLayout
:app-name="appName"
:logo="logo"
:page-description="$t('authentication.pageDesc')"
:page-title="$t('authentication.pageTitle')"
>
<!-- 自定义工具栏 -->
<!-- <template #toolbar></template> -->
</AuthPageLayout>
</template>

View File

@ -1,8 +1,6 @@
const BasicLayout = () => import('./basic.vue'); const BasicLayout = () => import('./basic.vue');
const AuthPageLayout = () => import('./auth.vue');
const IFrameView = () => import('@vben/layouts').then((m) => m.IFrameView); const IFrameView = () => import('@vben/layouts').then((m) => m.IFrameView);
const AuthPageLayout = () =>
import('@vben/layouts').then((m) => m.AuthPageLayout);
export { AuthPageLayout, BasicLayout, IFrameView }; export { AuthPageLayout, BasicLayout, IFrameView };

View File

@ -55,12 +55,27 @@ onMounted(() => {
}, },
trigger: 'axis', trigger: 'axis',
}, },
// xAxis: {
// axisTick: {
// show: false,
// },
// boundaryGap: false,
// data: Array.from({ length: 18 }).map((_item, index) => `${index + 6}:00`),
// type: 'category',
// },
xAxis: { xAxis: {
axisTick: { axisTick: {
show: false, show: false,
}, },
boundaryGap: false, boundaryGap: false,
data: Array.from({ length: 18 }).map((_item, index) => `${index + 6}:00`), data: Array.from({ length: 18 }).map((_item, index) => `${index + 6}:00`),
splitLine: {
lineStyle: {
type: 'solid',
width: 1,
},
show: true,
},
type: 'category', type: 'category',
}, },
yAxis: [ yAxis: [
@ -69,7 +84,10 @@ onMounted(() => {
show: false, show: false,
}, },
max: 80_000, max: 80_000,
splitArea: {
show: true,
},
splitNumber: 4,
type: 'value', type: 'value',
}, },
], ],

View File

@ -214,7 +214,11 @@ const trendItems: WorkbenchTrendItem[] = [
<WorkbenchTrends :items="trendItems" class="mt-5" title="最新动态" /> <WorkbenchTrends :items="trendItems" class="mt-5" title="最新动态" />
</div> </div>
<div class="w-full lg:w-2/5"> <div class="w-full lg:w-2/5">
<WorkbenchQuickNav :items="quickNavItems" title="快捷导航" /> <WorkbenchQuickNav
:items="quickNavItems"
class="mt-5 lg:mt-0"
title="快捷导航"
/>
<WorkbenchTodo :items="todoItems" class="mt-5" title="待办事项" /> <WorkbenchTodo :items="todoItems" class="mt-5" title="待办事项" />
<AnalysisChartCard class="mt-5" title="访问来源"> <AnalysisChartCard class="mt-5" title="访问来源">
<AnalyticsVisitsSource /> <AnalyticsVisitsSource />

View File

@ -20,9 +20,6 @@ importers:
'@changesets/cli': '@changesets/cli':
specifier: ^2.27.7 specifier: ^2.27.7
version: 2.27.7 version: 2.27.7
'@ls-lint/ls-lint':
specifier: ^2.2.3
version: 2.2.3
'@types/jsdom': '@types/jsdom':
specifier: ^21.1.7 specifier: ^21.1.7
version: 21.1.7 version: 21.1.7
@ -3497,12 +3494,6 @@ packages:
'@juggle/resize-observer@3.4.0': '@juggle/resize-observer@3.4.0':
resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==}
'@ls-lint/ls-lint@2.2.3':
resolution: {integrity: sha512-ekM12jNm/7O2I/hsRv9HvYkRdfrHpiV1epVuI2NP+eTIcEgdIdKkKCs9KgQydu/8R5YXTov9aHdOgplmCHLupw==}
cpu: [x64, arm64, s390x]
os: [darwin, linux, win32]
hasBin: true
'@manypkg/find-root@1.1.0': '@manypkg/find-root@1.1.0':
resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==}
@ -11169,7 +11160,7 @@ snapshots:
'@changesets/apply-release-plan@7.0.4': '@changesets/apply-release-plan@7.0.4':
dependencies: dependencies:
'@babel/runtime': 7.25.0 '@babel/runtime': 7.25.6
'@changesets/config': 3.0.2 '@changesets/config': 3.0.2
'@changesets/get-version-range-type': 0.4.0 '@changesets/get-version-range-type': 0.4.0
'@changesets/git': 3.0.0 '@changesets/git': 3.0.0
@ -11186,7 +11177,7 @@ snapshots:
'@changesets/assemble-release-plan@6.0.3': '@changesets/assemble-release-plan@6.0.3':
dependencies: dependencies:
'@babel/runtime': 7.25.0 '@babel/runtime': 7.25.6
'@changesets/errors': 0.2.0 '@changesets/errors': 0.2.0
'@changesets/get-dependents-graph': 2.1.1 '@changesets/get-dependents-graph': 2.1.1
'@changesets/should-skip-package': 0.1.0 '@changesets/should-skip-package': 0.1.0
@ -11272,7 +11263,7 @@ snapshots:
'@changesets/get-release-plan@4.0.3': '@changesets/get-release-plan@4.0.3':
dependencies: dependencies:
'@babel/runtime': 7.25.0 '@babel/runtime': 7.25.6
'@changesets/assemble-release-plan': 6.0.3 '@changesets/assemble-release-plan': 6.0.3
'@changesets/config': 3.0.2 '@changesets/config': 3.0.2
'@changesets/pre': 2.0.0 '@changesets/pre': 2.0.0
@ -11284,12 +11275,12 @@ snapshots:
'@changesets/git@3.0.0': '@changesets/git@3.0.0':
dependencies: dependencies:
'@babel/runtime': 7.25.0 '@babel/runtime': 7.25.6
'@changesets/errors': 0.2.0 '@changesets/errors': 0.2.0
'@changesets/types': 6.0.0 '@changesets/types': 6.0.0
'@manypkg/get-packages': 1.1.3 '@manypkg/get-packages': 1.1.3
is-subdir: 1.2.0 is-subdir: 1.2.0
micromatch: 4.0.7 micromatch: 4.0.8
spawndamnit: 2.0.0 spawndamnit: 2.0.0
'@changesets/logger@0.1.0': '@changesets/logger@0.1.0':
@ -11303,7 +11294,7 @@ snapshots:
'@changesets/pre@2.0.0': '@changesets/pre@2.0.0':
dependencies: dependencies:
'@babel/runtime': 7.25.0 '@babel/runtime': 7.25.6
'@changesets/errors': 0.2.0 '@changesets/errors': 0.2.0
'@changesets/types': 6.0.0 '@changesets/types': 6.0.0
'@manypkg/get-packages': 1.1.3 '@manypkg/get-packages': 1.1.3
@ -11311,7 +11302,7 @@ snapshots:
'@changesets/read@0.6.0': '@changesets/read@0.6.0':
dependencies: dependencies:
'@babel/runtime': 7.25.0 '@babel/runtime': 7.25.6
'@changesets/git': 3.0.0 '@changesets/git': 3.0.0
'@changesets/logger': 0.1.0 '@changesets/logger': 0.1.0
'@changesets/parse': 0.4.0 '@changesets/parse': 0.4.0
@ -11322,7 +11313,7 @@ snapshots:
'@changesets/should-skip-package@0.1.0': '@changesets/should-skip-package@0.1.0':
dependencies: dependencies:
'@babel/runtime': 7.25.0 '@babel/runtime': 7.25.6
'@changesets/types': 6.0.0 '@changesets/types': 6.0.0
'@manypkg/get-packages': 1.1.3 '@manypkg/get-packages': 1.1.3
@ -11332,7 +11323,7 @@ snapshots:
'@changesets/write@0.3.1': '@changesets/write@0.3.1':
dependencies: dependencies:
'@babel/runtime': 7.25.0 '@babel/runtime': 7.25.6
'@changesets/types': 6.0.0 '@changesets/types': 6.0.0
fs-extra: 7.0.1 fs-extra: 7.0.1
human-id: 1.0.2 human-id: 1.0.2
@ -12414,11 +12405,9 @@ snapshots:
'@juggle/resize-observer@3.4.0': {} '@juggle/resize-observer@3.4.0': {}
'@ls-lint/ls-lint@2.2.3': {}
'@manypkg/find-root@1.1.0': '@manypkg/find-root@1.1.0':
dependencies: dependencies:
'@babel/runtime': 7.25.0 '@babel/runtime': 7.25.6
'@types/node': 12.20.55 '@types/node': 12.20.55
find-up: 4.1.0 find-up: 4.1.0
fs-extra: 8.1.0 fs-extra: 8.1.0
@ -12429,7 +12418,7 @@ snapshots:
'@manypkg/get-packages@1.1.3': '@manypkg/get-packages@1.1.3':
dependencies: dependencies:
'@babel/runtime': 7.25.0 '@babel/runtime': 7.25.6
'@changesets/types': 4.1.0 '@changesets/types': 4.1.0
'@manypkg/find-root': 1.1.0 '@manypkg/find-root': 1.1.0
fs-extra: 8.1.0 fs-extra: 8.1.0

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/turbo-run", "name": "@vben/turbo-run",
"version": "5.2.0", "version": "5.2.1",
"private": true, "private": true,
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",

View File

@ -1,6 +1,6 @@
{ {
"name": "@vben/vsh", "name": "@vben/vsh",
"version": "5.2.0", "version": "5.2.1",
"private": true, "private": true,
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",

View File

@ -28,7 +28,6 @@ async function runLint({ format }: LintCommandOptions) {
execaCommand(`eslint . --cache`, { execaCommand(`eslint . --cache`, {
stdio: 'inherit', stdio: 'inherit',
}), }),
// $`ls-lint`,
execaCommand(`prettier . --ignore-unknown --check --cache`, { execaCommand(`prettier . --ignore-unknown --check --cache`, {
stdio: 'inherit', stdio: 'inherit',
}), }),