@ -7,6 +7,7 @@ import type {
} from '@vben/common-ui' ;
import { ref } from 'vue' ;
import { useRouter } from 'vue-router' ;
import {
AnalysisChartCard ,
@ -18,11 +19,15 @@ import {
} from '@vben/common-ui' ;
import { preferences } from '@vben/preferences' ;
import { useUserStore } from '@vben/stores' ;
import { openWindow } from '@vben/utils' ;
import AnalyticsVisitsSource from '../analytics/analytics-visits-source.vue' ;
const userStore = useUserStore ( ) ;
/ / 这 是 一 个 示 例 数 据 , 实 际 项 目 中 需 要 根 据 实 际 情 况 进 行 调 整
/ / u r l 也 可 以 是 内 部 路 由 , 在 n a v T o 方 法 中 识 别 处 理 , 进 行 内 部 跳 转
/ / 例 如 : u r l : / d a s h b o a r d / w o r k s p a c e
const projectItems : WorkbenchProjectItem [ ] = [
{
color : '' ,
@ -31,6 +36,7 @@ const projectItems: WorkbenchProjectItem[] = [
group : '开源组' ,
icon : 'carbon:logo-github' ,
title : 'Github' ,
url : 'https://github.com' ,
} ,
{
color : '#3fb27f' ,
@ -39,6 +45,7 @@ const projectItems: WorkbenchProjectItem[] = [
group : '算法组' ,
icon : 'ion:logo-vue' ,
title : 'Vue' ,
url : 'https://vuejs.org' ,
} ,
{
color : '#e18525' ,
@ -47,6 +54,7 @@ const projectItems: WorkbenchProjectItem[] = [
group : '上班摸鱼' ,
icon : 'ion:logo-html5' ,
title : 'Html5' ,
url : 'https://developer.mozilla.org/zh-CN/docs/Web/HTML' ,
} ,
{
color : '#bf0c2c' ,
@ -55,6 +63,7 @@ const projectItems: WorkbenchProjectItem[] = [
group : 'UI' ,
icon : 'ion:logo-angular' ,
title : 'Angular' ,
url : 'https://angular.io' ,
} ,
{
color : '#00d8ff' ,
@ -63,6 +72,7 @@ const projectItems: WorkbenchProjectItem[] = [
group : '技术牛' ,
icon : 'bx:bxl-react' ,
title : 'React' ,
url : 'https://reactjs.org' ,
} ,
{
color : '#EBD94E' ,
@ -71,39 +81,47 @@ const projectItems: WorkbenchProjectItem[] = [
group : '架构组' ,
icon : 'ion:logo-javascript' ,
title : 'Js' ,
url : 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript' ,
} ,
] ;
/ / 同 样 , 这 里 的 u r l 也 可 以 使 用 以 h t t p 开 头 的 外 部 链 接
const quickNavItems : WorkbenchQuickNavItem [ ] = [
{
color : '#1fdaca' ,
icon : 'ion:home-outline' ,
title : '首页' ,
url : '/' ,
} ,
{
color : '#bf0c2c' ,
icon : 'ion:grid-outline' ,
title : '仪表盘' ,
url : '/dashboard' ,
} ,
{
color : '#e18525' ,
icon : 'ion:layers-outline' ,
title : '组件' ,
url : '/demos/features/icons' ,
} ,
{
color : '#3fb27f' ,
icon : 'ion:settings-outline' ,
title : '系统管理' ,
url : '/demos/features/login-expired' , / / 这 里 的 U R L 是 示 例 , 实 际 项 目 中 需 要 根 据 实 际 情 况 进 行 调 整
} ,
{
color : '#4daf1bc9' ,
icon : 'ion:key-outline' ,
title : '权限管理' ,
url : '/demos/access/page-control' ,
} ,
{
color : '#00d8ff' ,
icon : 'ion:bar-chart-outline' ,
title : '图表' ,
url : '/analytics' ,
} ,
] ;
@ -195,6 +213,24 @@ const trendItems: WorkbenchTrendItem[] = [
title : 'Vben' ,
} ,
] ;
const router = useRouter ( ) ;
/ / 这 是 一 个 示 例 方 法 , 实 际 项 目 中 需 要 根 据 实 际 情 况 进 行 调 整
/ / T h i s i s a s a m p l e m e t h o d , a d j u s t a c c o r d i n g t o t h e a c t u a l p r o j e c t r e q u i r e m e n t s
function navTo ( nav : WorkbenchProjectItem | WorkbenchQuickNavItem ) {
if ( nav . url ? . startsWith ( 'http' ) ) {
openWindow ( nav . url ) ;
return ;
}
if ( nav . url ? . startsWith ( '/' ) ) {
router . push ( nav . url ) . catch ( ( error ) => {
console . error ( 'Navigation failed:' , error ) ;
} ) ;
} else {
console . warn ( ` Unknown URL for navigation item: ${ nav . title } -> ${ nav . url } ` ) ;
}
}
< / script >
< template >
@ -210,7 +246,7 @@ const trendItems: WorkbenchTrendItem[] = [
< div class = "mt-5 flex flex-col lg:flex-row" >
< div class = "mr-4 w-full lg:w-3/5" >
< WorkbenchProject :items ="projectItems" title = "项目" / >
< WorkbenchProject :items ="projectItems" title = "项目" @click ="navTo" / >
< WorkbenchTrends :items ="trendItems" class = "mt-5" title = "最新动态" / >
< / div >
< div class = "w-full lg:w-2/5" >
@ -218,6 +254,7 @@ const trendItems: WorkbenchTrendItem[] = [
: items = "quickNavItems"
class = "mt-5 lg:mt-0"
title = "快捷导航"
@ click = "navTo"
/ >
< WorkbenchTodo :items ="todoItems" class = "mt-5" title = "待办事项" / >
< AnalysisChartCard class = "mt-5" title = "访问来源" >