Skip to content

组件概览

Vben Admin 提供了 10 个开箱即用的前端组件,覆盖常见的业务场景。

组件列表

上传组件

组件说明特性
ImageUpload图片上传组件支持裁剪、预览、多图上传
FileUpload文件上传组件支持拖拽、多文件、进度显示

编辑器组件

组件说明特性
RichEditor富文本编辑器基于 Quill,支持图片、视频
MarkdownEditorMarkdown 编辑器实时预览、语法高亮
CodeEditor代码编辑器基于 Monaco Editor,多语言支持

选择器组件

组件说明特性
IconPicker图标选择器支持搜索、分类
RegionPicker地区选择器省市区三级联动

可视化组件

组件说明特性
VbenChart图表组件基于 ECharts,响应式
VbenImagePreview图片预览组件缩放、旋转、切换
VbenPdfPreviewPDF 预览组件翻页、缩放、下载

快速使用

安装依赖

bash
# 编辑器组件依赖
pnpm add -w quill marked monaco-editor

# 可视化组件依赖
pnpm add -w echarts viewerjs pdfjs-dist

# 其他依赖
pnpm add -w @types/marked

全局注册

src/main.ts 中注册:

typescript
import { createApp } from 'vue'
import App from './app.vue'

// 导入组件
import {
  ImageUpload,
  FileUpload,
  RichEditor,
  MarkdownEditor,
  CodeEditor,
  IconPicker,
  RegionPicker,
  VbenChart,
  VbenImagePreview,
  VbenPdfPreview,
} from '@vben/common-ui'

const app = createApp(App)

// 注册组件
app.component('ImageUpload', ImageUpload)
app.component('FileUpload', FileUpload)
app.component('RichEditor', RichEditor)
app.component('MarkdownEditor', MarkdownEditor)
app.component('CodeEditor', CodeEditor)
app.component('IconPicker', IconPicker)
app.component('RegionPicker', RegionPicker)
app.component('VbenChart', VbenChart)
app.component('VbenImagePreview', VbenImagePreview)
app.component('VbenPdfPreview', VbenPdfPreview)

app.mount('#app')

按需引入

在组件中按需引入:

vue
<script setup lang="ts">
import { ImageUpload } from '@vben/common-ui'
import { ref } from 'vue'

const imageUrl = ref('')
</script>

<template>
  <ImageUpload v-model="imageUrl" />
</template>

组件特性

🎨 统一设计

所有组件遵循统一的设计规范,保证视觉一致性。

📱 响应式

完美适配移动端和桌面端,提供一致的用户体验。

🔧 可配置

提供丰富的配置选项,满足不同场景需求。

🌍 国际化

内置国际化支持,支持多语言切换。

♿ 无障碍

遵循 WCAG 2.1 标准,提供良好的无障碍体验。

📦 TypeScript

完整的 TypeScript 类型定义,提供更好的开发体验。

组件分类

表单组件

用于数据输入和编辑:

  • ImageUpload - 图片上传
  • FileUpload - 文件上传
  • IconPicker - 图标选择
  • RegionPicker - 地区选择
  • RichEditor - 富文本编辑
  • MarkdownEditor - Markdown 编辑
  • CodeEditor - 代码编辑

展示组件

用于数据展示和可视化:

  • VbenChart - 图表展示
  • VbenImagePreview - 图片预览
  • VbenPdfPreview - PDF 预览

使用示例

基础示例

vue
<script setup lang="ts">
import { ref } from 'vue'
import { ImageUpload, RichEditor, VbenChart } from '@vben/common-ui'
import type { EChartsOption } from 'echarts'

const imageUrl = ref('')
const content = ref('')
const chartOption: EChartsOption = {
  xAxis: { data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'] },
  yAxis: {},
  series: [{ type: 'line', data: [150, 230, 224, 218, 135] }]
}
</script>

<template>
  <div>
    <!-- 图片上传 -->
    <ImageUpload v-model="imageUrl" :limit="1" />
    
    <!-- 富文本编辑器 -->
    <RichEditor v-model="content" height="400px" />
    
    <!-- 图表 -->
    <VbenChart :option="chartOption" height="400px" />
  </div>
</template>

表单集成

vue
<script setup lang="ts">
import { ref } from 'vue'
import { Form, FormItem, Button } from 'ant-design-vue'
import { ImageUpload, RegionPicker } from '@vben/common-ui'

const formData = ref({
  avatar: '',
  region: '',
})

const handleSubmit = () => {
  console.log('提交数据:', formData.value)
}
</script>

<template>
  <Form :model="formData" @submit="handleSubmit">
    <FormItem label="头像">
      <ImageUpload v-model="formData.avatar" />
    </FormItem>
    
    <FormItem label="地区">
      <RegionPicker v-model="formData.region" :level="3" />
    </FormItem>
    
    <FormItem>
      <Button type="primary" html-type="submit">提交</Button>
    </FormItem>
  </Form>
</template>

主题定制

所有组件支持主题定制:

typescript
// 在 preferences.ts 中配置
export const preferences = {
  theme: {
    primaryColor: '#1890ff',
    borderRadius: '4px',
    // ...
  }
}

性能优化

按需加载

使用动态导入减少初始加载时间:

typescript
const RichEditor = defineAsyncComponent(() => 
  import('@vben/common-ui').then(m => m.RichEditor)
)

懒加载

对于大型组件,使用懒加载:

vue
<script setup lang="ts">
import { defineAsyncComponent } from 'vue'

const CodeEditor = defineAsyncComponent(() =>
  import('@vben/common-ui').then(m => m.CodeEditor)
)
</script>

浏览器兼容性

浏览器版本
Chrome>= 80
Firefox>= 78
Safari>= 13
Edge>= 80

下一步

相关链接

MIT License