Skip to content

仪表盘组件

仪表盘组件提供了首页仪表盘常用的组件,包括欢迎横幅、快捷功能等。

导入

typescript
import {
  DuxDashboardHello,
  DuxDashboardHelloBig,
  DuxDashboardQuick
} from '@duxweb/dvha-pro'

组件总览

DVHA Pro 提供以下仪表盘组件:

  • DuxDashboardHello - 欢迎横幅组件
  • DuxDashboardHelloBig - 大型欢迎横幅组件
  • DuxDashboardQuick - 快捷功能组件

DuxDashboardHello 欢迎横幅组件

紧凑型欢迎横幅组件,适用于显示简要的欢迎信息和关键数据统计。

属性

属性名类型默认值说明
titlestring-主标题
descstring-描述文本
dataArray<DuxDashboardHelloData>-统计数据数组

数据类型

typescript
interface DuxDashboardHelloData {
  label: string // 数据标签
  value?: string // 数据值
  onClick?: () => void // 点击事件
}

基础用法

vue
<script setup>
import { DuxDashboardHello } from '@duxweb/dvha-pro'
import { ref } from 'vue'

const statsData = ref([
  {
    label: '今日订单',
    value: '128',
    onClick: () => {
      console.log('查看今日订单')
    }
  },
  {
    label: '总用户',
    value: '1,234',
    onClick: () => {
      console.log('查看用户列表')
    }
  },
  {
    label: '总收入',
    value: '¥45,678',
    onClick: () => {
      console.log('查看收入报表')
    }
  }
])
</script>

<template>
  <DuxDashboardHello
    title="欢迎回来!"
    desc="今天也要加油工作哦"
    :data="statsData"
  />
</template>

电商仪表盘示例

vue
<script setup>
import { DuxDashboardHello } from '@duxweb/dvha-pro'
import { ref } from 'vue'
import { useRouter } from 'vue-router'

const router = useRouter()

const ecommerceStats = ref([
  {
    label: '待处理订单',
    value: '23',
    onClick: () => {
      router.push('/orders?status=pending')
    }
  },
  {
    label: '库存预警',
    value: '5',
    onClick: () => {
      router.push('/inventory/alerts')
    }
  },
  {
    label: '今日销售额',
    value: '¥12,345',
    onClick: () => {
      router.push('/reports/sales')
    }
  }
])
</script>

<template>
  <DuxDashboardHello
    title="店长,早上好!"
    desc="您的店铺运营概况"
    :data="ecommerceStats"
  />
</template>

DuxDashboardHelloBig 大型欢迎横幅组件

大型欢迎横幅组件,提供更丰富的视觉效果和更多的信息展示空间,支持诗词API集成。

属性

属性名类型默认值说明
titlestring-主标题
descstring-描述文本(为空时自动获取诗词)
dataArray<DuxDashboardHelloBigData>-统计数据数组

数据类型

typescript
interface DuxDashboardHelloBigData {
  label: string // 数据标签
  value?: string // 数据值
  icon?: string // 图标类名
  color?: ButtonProps['type'] // 颜色类型
  onClick?: () => void // 点击事件
}

基础用法

vue
<script setup>
import { DuxDashboardHelloBig } from '@duxweb/dvha-pro'
import { ref } from 'vue'

const bigStatsData = ref([
  {
    label: '总订单',
    value: '2,345',
    icon: 'i-tabler:shopping-cart',
    color: 'primary',
    onClick: () => {
      console.log('查看所有订单')
    }
  },
  {
    label: '活跃用户',
    value: '1,567',
    icon: 'i-tabler:users',
    color: 'success',
    onClick: () => {
      console.log('查看用户统计')
    }
  },
  {
    label: '月收入',
    value: '¥89,012',
    icon: 'i-tabler:currency-dollar',
    color: 'warning',
    onClick: () => {
      console.log('查看收入报表')
    }
  }
])
</script>

<template>
  <DuxDashboardHelloBig
    title="HELLO,管理员"
    desc="愿你的每一天都充满阳光与希望"
    :data="bigStatsData"
  />
</template>

自动诗词横幅

vue
<script setup>
import { DuxDashboardHelloBig } from '@duxweb/dvha-pro'
import { ref } from 'vue'

const systemStats = ref([
  {
    label: '系统状态',
    value: '正常',
    icon: 'i-tabler:check',
    color: 'success'
  },
  {
    label: '在线用户',
    value: '234',
    icon: 'i-tabler:user-check',
    color: 'info'
  },
  {
    label: '今日访问',
    value: '5,678',
    icon: 'i-tabler:eye',
    color: 'primary'
  }
])
</script>

<template>
  <!-- 不传入 desc 属性,组件会自动获取诗词 -->
  <DuxDashboardHelloBig
    title="欢迎使用管理系统"
    :data="systemStats"
  />
</template>

项目概览横幅

vue
<script setup>
import { DuxDashboardHelloBig } from '@duxweb/dvha-pro'
import { ref } from 'vue'

const projectStats = ref([
  {
    label: '进行中项目',
    value: '12',
    icon: 'i-tabler:briefcase',
    color: 'primary',
    onClick: () => {
      console.log('查看进行中项目')
    }
  },
  {
    label: '已完成',
    value: '45',
    icon: 'i-tabler:check-circle',
    color: 'success',
    onClick: () => {
      console.log('查看已完成项目')
    }
  },
  {
    label: '团队成员',
    value: '23',
    icon: 'i-tabler:users-group',
    color: 'info',
    onClick: () => {
      console.log('查看团队成员')
    }
  },
  {
    label: '待办任务',
    value: '67',
    icon: 'i-tabler:list-check',
    color: 'warning',
    onClick: () => {
      console.log('查看待办任务')
    }
  }
])
</script>

<template>
  <DuxDashboardHelloBig
    title="项目管理中心"
    desc="高效协作,成就卓越团队"
    :data="projectStats"
  />
</template>

DuxDashboardQuick 快捷功能组件

快捷功能组件,用于展示常用功能的快速入口,支持自定义列数和颜色。

属性

属性名类型默认值说明
dataArray<DuxDashboardQuickItemProps>-快捷功能数据数组
colnumber6列数(响应式自动调整)

数据类型

typescript
interface DuxDashboardQuickItemProps {
  icon?: string // 图标类名
  title?: string // 功能标题
  color?: 'primary' | 'info' | 'success' | 'warning' | 'error' // 颜色类型
  onClick?: () => void // 点击事件
}

基础用法

vue
<script setup>
import { DuxDashboardQuick } from '@duxweb/dvha-pro'
import { ref } from 'vue'
import { useRouter } from 'vue-router'

const router = useRouter()

const quickActions = ref([
  {
    icon: 'i-tabler:plus',
    title: '新增用户',
    onClick: () => {
      router.push('/users/create')
    }
  },
  {
    icon: 'i-tabler:file-text',
    title: '订单管理',
    onClick: () => {
      router.push('/orders')
    }
  },
  {
    icon: 'i-tabler:package',
    title: '商品管理',
    onClick: () => {
      router.push('/products')
    }
  },
  {
    icon: 'i-tabler:chart-bar',
    title: '数据统计',
    onClick: () => {
      router.push('/analytics')
    }
  },
  {
    icon: 'i-tabler:settings',
    title: '系统设置',
    onClick: () => {
      router.push('/settings')
    }
  },
  {
    icon: 'i-tabler:help',
    title: '帮助中心',
    onClick: () => {
      router.push('/help')
    }
  }
])
</script>

<template>
  <DuxDashboardQuick
    :data="quickActions"
    :col="6"
  />
</template>

电商快捷功能

vue
<script setup>
import { DuxDashboardQuick } from '@duxweb/dvha-pro'
import { ref } from 'vue'
import { useRouter } from 'vue-router'

const router = useRouter()

const ecommerceFeatures = ref([
  {
    icon: 'i-tabler:shopping-cart-plus',
    title: '新增商品',
    onClick: () => {
      router.push('/products/create')
    }
  },
  {
    icon: 'i-tabler:truck-delivery',
    title: '订单发货',
    onClick: () => {
      router.push('/orders/shipping')
    }
  },
  {
    icon: 'i-tabler:discount-2',
    title: '优惠券',
    onClick: () => {
      router.push('/coupons')
    }
  },
  {
    icon: 'i-tabler:speakerphone',
    title: '营销活动',
    onClick: () => {
      router.push('/marketing')
    }
  }
])
</script>

<template>
  <DuxDashboardQuick
    :data="ecommerceFeatures"
    :col="4"
  />
</template>

管理系统快捷功能

vue
<script setup>
import { DuxDashboardQuick } from '@duxweb/dvha-pro'
import { ref } from 'vue'

const adminFeatures = ref([
  {
    icon: 'i-tabler:user-plus',
    title: '添加用户',
    onClick: () => {
      console.log('添加用户')
    }
  },
  {
    icon: 'i-tabler:folder-plus',
    title: '创建项目',
    onClick: () => {
      console.log('创建项目')
    }
  },
  {
    icon: 'i-tabler:mail',
    title: '发送通知',
    onClick: () => {
      console.log('发送通知')
    }
  },
  {
    icon: 'i-tabler:database',
    title: '数据备份',
    onClick: () => {
      console.log('数据备份')
    }
  },
  {
    icon: 'i-tabler:shield-check',
    title: '权限管理',
    onClick: () => {
      console.log('权限管理')
    }
  },
  {
    icon: 'i-tabler:report',
    title: '生成报表',
    onClick: () => {
      console.log('生成报表')
    }
  },
  {
    icon: 'i-tabler:bell',
    title: '系统通知',
    onClick: () => {
      console.log('系统通知')
    }
  },
  {
    icon: 'i-tabler:tools',
    title: '系统维护',
    onClick: () => {
      console.log('系统维护')
    }
  }
])
</script>

<template>
  <DuxDashboardQuick
    :data="adminFeatures"
    :col="8"
  />
</template>

完整仪表盘示例

vue
<script setup>
import {
  DuxCard,
  DuxDashboardHello,
  DuxDashboardHelloBig,
  DuxDashboardQuick
} from '@duxweb/dvha-pro'
import { ref } from 'vue'
import { useRouter } from 'vue-router'

const router = useRouter()

// 顶部统计数据
const topStats = ref([
  {
    label: '今日订单',
    value: '156',
    onClick: () => router.push('/orders?date=today')
  },
  {
    label: '待处理',
    value: '23',
    onClick: () => router.push('/orders?status=pending')
  },
  {
    label: '今日销售额',
    value: '¥15,678',
    onClick: () => router.push('/sales/today')
  }
])

// 大横幅统计数据
const bigStats = ref([
  {
    label: '总订单',
    value: '12,345',
    icon: 'i-tabler:shopping-cart',
    color: 'primary'
  },
  {
    label: '总用户',
    value: '8,901',
    icon: 'i-tabler:users',
    color: 'success'
  },
  {
    label: '月收入',
    value: '¥234,567',
    icon: 'i-tabler:currency-dollar',
    color: 'warning'
  }
])

// 快捷功能
const quickFeatures = ref([
  {
    icon: 'i-tabler:plus',
    title: '新增商品',
    onClick: () => router.push('/products/create')
  },
  {
    icon: 'i-tabler:truck',
    title: '订单管理',
    onClick: () => router.push('/orders')
  },
  {
    icon: 'i-tabler:users',
    title: '用户管理',
    onClick: () => router.push('/users')
  },
  {
    icon: 'i-tabler:chart-bar',
    title: '销售报表',
    onClick: () => router.push('/reports')
  },
  {
    icon: 'i-tabler:discount',
    title: '优惠活动',
    onClick: () => router.push('/promotions')
  },
  {
    icon: 'i-tabler:settings',
    title: '系统设置',
    onClick: () => router.push('/settings')
  }
])
</script>

<template>
  <div class="space-y-4">
    <!-- 紧凑型欢迎横幅 -->
    <DuxDashboardHello
      title="欢迎回来!"
      desc="今天也要努力工作哦"
      :data="topStats"
    />

    <!-- 大型欢迎横幅 -->
    <DuxDashboardHelloBig
      title="电商管理中心"
      desc="专业、高效、可靠的电商管理平台"
      :data="bigStats"
    />

    <!-- 快捷功能卡片 -->
    <DuxCard title="常用功能" divide>
      <DuxDashboardQuick
        :data="quickFeatures"
        :col="6"
      />
    </DuxCard>
  </div>
</template>

设计特性

视觉层次

  • 渐变背景 - 使用主题色渐变创建视觉焦点
  • 装饰元素 - 添加圆形装饰元素增强设计感
  • 图标系统 - 统一的图标风格和颜色体系
  • 响应式布局 - 自适应不同屏幕尺寸

交互体验

  • 点击反馈 - 所有可交互元素提供明确的点击反馈
  • 悬停效果 - 鼠标悬停时的视觉变化
  • 色彩编码 - 使用不同颜色表示不同类型的数据
  • 快速导航 - 一键跳转到相关功能页面

数据展示

  • 实时更新 - 支持数据的实时刷新和更新
  • 格式化显示 - 自动格式化数字、货币等数据
  • 状态指示 - 通过颜色和图标表示不同状态
  • 趋势展示 - 可配合图表组件显示数据趋势

最佳实践

内容组织

  • 信息优先级 - 重要信息放在显眼位置
  • 功能分组 - 相关功能放在一起便于查找
  • 简洁文案 - 使用简短清晰的标题和描述

数据展示

  • 关键指标 - 选择最重要的业务指标展示
  • 实时性 - 确保数据的及时性和准确性
  • 可操作性 - 为数据提供相应的操作入口

用户体验

  • 加载状态 - 为数据加载提供适当的状态指示
  • 错误处理 - 优雅处理数据获取失败的情况
  • 个性化 - 支持用户自定义仪表盘内容

常见问题

Q: 如何自定义快捷功能的颜色?

A: DuxDashboardQuick 组件会自动循环使用预设的颜色方案,也可以在数据中指定 color 属性。

Q: 诗词API获取失败怎么办?

A: DuxDashboardHelloBig 组件在诗词API获取失败时会显示传入的 desc 属性,建议总是提供备用描述文本。

Q: 如何实现数据的实时更新?

A: 可以使用定时器或WebSocket等方式定期更新数据,组件会自动响应数据变化。

Q: 如何调整快捷功能的布局?

A: 通过 col 属性控制列数,组件会自动处理响应式布局,在小屏幕上会减少列数。