--- name: dedsi-vue-ui displayName: Dedsi Vue UI 组件库 description: Dedsi-Vue-UI 是一个基于 Vue 3 + TypeScript 的现代化 UI 组件库,提供了 37+ 个高质量组件,涵盖基础、布局、导航、数据展示和反馈等场景。 version: 0.0.9 category: vue-components tags: - vue3 - typescript - ui-components - component-library author: Dedsi repository: https://github.com/Dedsi-Vue-UI license: MIT framework: vue@3.5.26 language: typescript@5.9.3 # 统计信息 stats: totalComponents: 60 implementedComponents: 37 unimplementedComponents: 23 categories: 6 # 支持的组件类别 categories: - name: 基础组件 count: 10 - name: 布局组件 count: 3 - name: 导航组件 count: 3 - name: 数据展示组件 count: 7 - name: 反馈组件 count: 9 - name: 其他组件 count: 5 # 核心特性 features: - Vue 3 Composition API - TypeScript 类型支持 - 组件命名前缀: Dedsi - 响应式设计 - 主题定制 - 国际化支持 --- # Dedsi-Vue-UI 组件库 SKILL 文档 > 帮助 AI 理解和使用 Dedsi-Vue-UI 组件库的详细指南 ## 目录 - [概述](#概述) - [安装使用](#安装使用) - [基础组件](#基础组件) - [布局组件](#布局组件) - [导航组件](#导航组件) - [数据展示组件](#数据展示组件) - [反馈组件](#反馈组件) - [其他组件](#其他组件) --- ## 概述 Dedsi-Vue-UI 是一个基于 Vue 3 的组件库,提供了丰富的 UI 组件。所有组件都使用 `Dedsi` 前缀命名。 ### 核心特性 - **Vue 3 Composition API**:充分利用 Vue 3 的新特性 - **TypeScript 支持**:完整的类型定义和类型推断 - **组件化设计**:高复用性和可组合性 - **响应式布局**:支持多种屏幕尺寸 - **主题定制**:支持自定义主题和样式 ### 组件命名规则 - **单文件组件**:`Dedsi` + 功能名称(如 `DedsiAlert`、`DedsiButton`) - **组合组件**:主组件 + 子组件(如 `DedsiMenu` + `DedsiMenuItem`) ### 组件使用规范 **重要**:在模板中使用组件时,必须使用 `components` 数组中注册的 `name` 值(kebab-case 格式),而不是 PascalCase 的组件类名。 | 组件类名(TypeScript 导入) | 模板中使用(name 值) | |--------------------------|-------------------| | `DedsiTable` | `dedsi-table` | | `DedsiButton` | `dedsi-button` | | `DedsiTag` | `dedsi-tag` | | `DedsiSplit` | `dedsi-split` | | `DedsiSpace` | `dedsi-space` | | `DedsiAlert` | `dedsi-alert` | | `DedsiTooltip` | `dedsi-tooltip` | | `DedsiTabs` | `dedsi-tabs` | | `DedsiTabPane` | `dedsi-tab-pane` | | `DedsiQRCode` | `dedsi-qrcode` | | `DedsiPopconfirm` | `dedsi-popconfirm` | | `DedsiPopover` | `dedsi-popover` | | `DedsiPopper` | `dedsi-popper` | | `DedsiImage` | `dedsi-image` | | `DedsiCard` | `dedsi-card` | | `DedsiBadge` | `dedsi-badge` | | `DedsiAvatar` | `dedsi-avatar` | | `DedsiBreadcrumb` | `dedsi-breadcrumb` | | `DedsiBreadcrumbItem` | `dedsi-breadcrumb-item` | | `DedsiDivider` | `dedsi-divider` | | `DedsiSegmented` | `dedsi-segmented` | | `DedsiStatistic` | `dedsi-statistic` | | `DedsiNumberConverter` | `dedsi-number-converter` | | `DedsiTypography` | `dedsi-typography` | | `DedsiDropdown` | `dedsi-dropdown` | | `DedsiCountdown` | `dedsi-countdown` | | `DedsiEmpty` | `dedsi-empty` | | `DedsiResult` | `dedsi-result` | | `DedsiDialog` | `dedsi-dialog` | | `DedsiModal` | `dedsi-modal` | | `DedsiMarquee` | `dedsi-marquee` | | `DedsiScrollbar` | `dedsi-scrollbar` | | `DedsiSkeleton` | `dedsi-skeleton` | | `DedsiMenu` | `dedsi-menu` | | `DedsiDrawer` | `dedsi-drawer` | | `DedsiMenuItem` | `dedsi-menu-item` | | `DedsiSubMenu` | `dedsi-sub-menu` | | `DedsiRow` | `dedsi-row` | | `DedsiCol` | `dedsi-col` | | `DedsiForm` | `dedsi-form` | | `DedsiFormItem` | `dedsi-form-item` | | `DedsiInput` | `dedsi-input` | | `DedsiInputNumber` | `dedsi-input-number` | | `DedsiTextarea` | `dedsi-textarea` | | `DedsiInputPassword` | `dedsi-input-password` | | `DedsiSelect` | `dedsi-select` | | `DedsiSelectOption` | `dedsi-select-option` | | `DedsiDatePicker` | `dedsi-date-picker` | | `DedsiTimePicker` | `dedsi-time-picker` | | `DedsiTimeRangePicker` | `dedsi-time-range-picker` | | `DedsiMonthPicker` | `dedsi-month-picker` | | `DedsiRangePicker` | `dedsi-range-picker` | | `DedsiRadio` | `dedsi-radio` | | `DedsiRadioGroup` | `dedsi-radio-group` | | `DedsiRadioButton` | `dedsi-radio-button` | | `DedsiCheckbox` | `dedsi-checkbox` | | `DedsiCheckboxGroup` | `dedsi-checkbox-group` | | `DedsiSwitch` | `dedsi-switch` | | `DedsiSlider` | `dedsi-slider` | | `DedsiRate` | `dedsi-rate` | | `DedsiUpload` | `dedsi-upload` | | `DedsiTransfer` | `dedsi-transfer` | | `DedsiAutoComplete` | `dedsi-auto-complete` | | `DedsiCascader` | `dedsi-cascader` | | `DedsiTreeSelect` | `dedsi-tree-select` | | `DedsiMentions` | `dedsi-mentions` | **使用示例**: ```vue ``` ### Props 定义规范 - 使用 Vue 3 Composition API 的 `defineProps` - 支持类型推断和默认值 - 必需参数明确标注(`required: true` 或无默认值) - 类型注解使用 TypeScript 联合类型:`type: 'primary' | 'success' | 'warning'` ### 事件命名规范 - 使用 Vue 3 标准事件:`update:propName` 用于双向绑定 - 事件名使用 kebab-case:`@page-change`、`@update:visible` - 事件回调参数类型明确:`(page: number) => void` ### 插槽使用规范 - 插槽名使用 kebab-case - 支持默认插槽和具名插槽 - 作用域插槽提供参数:`{ row, value }` --- ## 安装使用 ```bash npm install dedsi-vue-ui ``` ```typescript import { DedsiAlert, DedsiButton } from 'dedsi-vue-ui' app.use(DedsiAlert) app.use(DedsiButton) ``` --- ## 基础组件 ### DedsiAlert - 警告提示 **功能**:展现需要关注的信息,支持多种类型和关闭操作 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | title | string | - | 否 | 标题文本 | | description | string | - | 否 | 辅助性文字描述 | | type | 'success' \| 'info' \| 'warning' \| 'error' | 'info' | 否 | 警告类型,影响颜色和图标 | | closable | boolean | false | 否 | 是否显示关闭按钮 | | closeText | string | - | 否 | 关闭按钮的自定义文本 | | showIcon | boolean | false | 否 | 是否显示左侧图标 | | center | boolean | false | 否 | 文字是否居中显示 | **Events**: | 事件名 | 参数 | 说明 | |--------|------|------| | close | (event: MouseEvent) | 点击关闭按钮时触发 | **Slots**: | 插槽名 | 说明 | |--------|------| | default | 默认内容,通常放置描述文字 | | title | 自定义标题内容 | | icon | 自定义图标 | | close | 自定义关闭按钮 | **使用示例**: ```vue

发生错误,请重试

``` --- ### DedsiAvatar - 头像 **功能**:用来代表用户或事物,支持图片、图标或字符 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | src | string | - | 否 | 图片类资源的地址 | | size | 'large' \| 'default' \| 'small' \| number | 'default' | 否 | 头像大小,可预设或自定义像素 | | shape | 'circle' \| 'square' | 'circle' | 否 | 头像形状 | | icon | any | - | 否 | 设置头像的图标组件 | | alt | string | - | 否 | 图片无法显示时的替代文本 | | fit | 'fill' \| 'contain' \| 'cover' \| 'none' \| 'scale-down' | 'cover' | 否 | 图片填充模式 | **Events**: | 事件名 | 参数 | 说明 | |--------|------|------| | error | (event: Event) | 图片加载失败时触发 | **Slots**: | 插槽名 | 说明 | |--------|------| | default | 自定义头像内容(如文字) | | icon | 自定义图标 | **使用示例**: ```vue User ``` --- ### DedsiBadge - 徽标数 **功能**:用于展示通知数量或状态标记 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | value | string \| number | '' | 否 | 显示的数值或文字 | | max | number | 99 | 否 | 最大值,超过显示为 max+ | | isDot | boolean | false | 否 | 是否显示为小红点 | | hidden | boolean | false | 否 | 是否隐藏 Badge | | type | 'primary' \| 'success' \| 'warning' \| 'danger' | 'danger' | 否 | 徽标类型,影响颜色 | **使用示例**: ```vue 消息 通知 状态 ``` --- ### DedsiBreadcrumb - 面包屑 **功能**:显示当前页面在系统层级结构中的位置 **DedsiBreadcrumb Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | separator | string | '/' | 否 | 分隔符自定义 | **DedsiBreadcrumbItem Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | to | string \| object | - | 否 | 路由跳转目标,同 Vue Router | | replace | boolean | false | 否 | 是否使用 replace 模式跳转 | **Slots**: | 插槽名 | 组件 | 说明 | |--------|------|------| | separator | DedsiBreadcrumbItem | 自定义分隔符内容 | | default | DedsiBreadcrumb | 面包屑项列表 | **使用示例**: ```vue 首页 组件 面包屑 ``` --- ### DedsiCard - 卡片 **功能**:通用卡片容器,可包含标题、额外操作、内容和底部 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | title | string | - | 否 | 卡片标题 | | bordered | boolean | true | 否 | 是否有边框 | | hoverable | boolean | false | 否 | 鼠标悬停时是否可浮起 | | noShadow | boolean | true | 否 | 是否无阴影 | | shadow | 'always' \| 'hover' \| 'never' | 'hover' | 否 | 阴影显示时机 | | bodyStyle | Record | - | 否 | 内容区域自定义样式对象 | **Slots**: | 插槽名 | 说明 | |--------|------| | default | 卡片内容 | | title | 自定义标题 | | extra | 标题旁的额外操作区 | | footer | 底部内容 | **使用示例**: ```vue

卡片内容

内容

``` --- ### DedsiDivider - 分割线 **功能**:区隔内容的分割线,可包含文字 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | direction | 'horizontal' \| 'vertical' | 'horizontal' | 否 | 分割线方向 | | contentPosition | 'left' \| 'center' \| 'right' | 'center' | 否 | 文本内容位置(仅水平) | | dashed | boolean | false | 否 | 是否为虚线 | **使用示例**: ```vue 文本 文本1 文本2 ``` --- ### DedsiEmpty - 空状态 **功能**:空状态时的占位展示 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | image | string | - | 否 | 空状态图片地址 | | imageSize | number \| string | 120 | 否 | 图片大小 | | description | string | '暂无数据' | 否 | 描述文本 | **Slots**: | 插槽名 | 说明 | |--------|------| | default | 底部内容 | | image | 自定义图片 | | description | 自定义描述 | **使用示例**: ```vue 创建 ``` --- ### DedsiTag - 标签 **功能**:进行标记和分类 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | type | 'default' \| 'primary' \| 'success' \| 'warning' \| 'danger' | 'default' | 否 | 标签类型 | | size | 'large' \| 'default' \| 'small' | 'default' | 否 | 标签尺寸 | | closable | boolean | false | 否 | 是否可关闭 | | round | boolean | false | 否 | 是否为圆角 | | color | string | - | 否 | 自定义文字颜色 | | backgroundColor | string | - | 否 | 自定义背景色 | | borderColor | string | - | 否 | 自定义边框颜色 | **Events**: | 事件名 | 参数 | 说明 | |--------|------|------| | close | (event: MouseEvent) | 关闭时触发 | **使用示例**: ```vue 成功 可关闭 自定义 ``` --- ### DedsiSpace - 间距 **功能**:设置组件之间的间距 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | direction | 'horizontal' \| 'vertical' | 'horizontal' | 否 | 间距方向 | | size | 'small' \| 'middle' \| 'large' \| number \| [number, number] | 'small' | 否 | 间距大小,支持数组 [水平, 垂直] | | wrap | boolean | false | 否 | 是否自动换行 | | align | 'start' \| 'end' \| 'center' \| 'baseline' | - | 否 | 对齐方式 | **使用示例**: ```vue 按钮1 按钮2
内容1
内容2
``` --- ### DedsiSplit - 分割布局 **功能**:左右分割的布局容器 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | align | 'top' \| 'center' \| 'bottom' \| 'baseline' | 'center' | 否 | 左右内容的对齐方式 | | padding | string \| number | - | 否 | 内边距 | | gap | string \| number | - | 否 | 左右间距 | **Slots**: | 插槽名 | 说明 | |--------|------| | default | 左侧内容(无 right 插槽时使用) | | left | 左侧内容 | | right | 右侧内容 | **使用示例**: ```vue ``` --- ## 布局组件 ### DedsiRow / DedsiCol - 栅格布局 **功能**:24 栅格响应式布局系统 **DedsiRow Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | gutter | number \| [number, number] | - | 否 | 栅格间隔,可设为 [水平间距, 垂直间距] | | justify | 'start' \| 'end' \| 'center' \| 'space-around' \| 'space-between' | - | 否 | 水平排列方式 | | align | 'top' \| 'middle' \| 'bottom' | - | 否 | 垂直对齐方式 | **DedsiCol Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | span | number | 24 | 否 | 栅格占位格数(0-24) | | offset | number | 0 | 否 | 栅格左侧间隔格数 | | xs | number \| object | - | 否 | <576px 响应式栅格 | | sm | number \| object | - | 否 | ≥576px 响应式栅格 | | md | number \| object | - | 否 | ≥768px 响应式栅格 | | lg | number \| object | - | 否 | ≥992px 响应式栅格 | | xl | number \| object | - | 否 | ≥1200px 响应式栅格 | **响应式对象格式**: ```typescript { span: number, // 栅格占位格数 offset: number // 栅格左侧间隔格数 } ``` **使用示例**: ```vue col-12 col-12 col-8 offset-8 响应式 响应式 响应式 ``` --- ### DedsiScrollbar - 滚动条 **功能**:自定义滚动条样式 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | height | string \| number | - | 否 | 容器高度 | | maxHeight | string \| number | - | 否 | 容器最大高度 | | native | boolean | false | 否 | 是否使用原生滚动条 | | wrapStyle | any | - | 否 | 容器的自定义样式 | | viewStyle | any | - | 否 | 视图的自定义样式 | | wrapClass | string | - | 否 | 容器的自定义类名 | | viewClass | string | - | 否 | 视图的自定义类名 | | always | boolean | false | 否 | 是否一直显示滚动条 | | minSize | number | 20 | 否 | 滚动条最小尺寸 | **暴露方法**(通过 ref): | 方法名 | 参数 | 说明 | |--------|------|------| | wrapRef | - | 获取容器 DOM 引用 | | update | () | 手动更新滚动条 | | scrollTo | (options: ScrollToOptions) | 滚动到指定位置 | | setScrollTop | (val: number) | 设置垂直滚动距离 | | setScrollLeft | (val: number) | 设置水平滚动距离 | **使用示例**: ```vue ``` --- ### DedsiSkeleton - 骨架屏 **功能**:在数据加载时展示占位效果 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | loading | boolean | true | 否 | 是否显示骨架屏 | | active | boolean | true | 否 | 是否开启动画效果 | | avatar | boolean | false | 否 | 是否显示头像占位 | | avatarSize | number \| 'small' \| 'large' \| 'default' | 'default' | 否 | 头像大小 | | avatarShape | 'circle' \| 'square' | 'circle' | 否 | 头像形状 | | title | boolean | true | 否 | 是否显示标题占位 | | titleWidth | number \| string | - | 否 | 标题占位宽度 | | paragraph | boolean \| object | true | 否 | 段落配置,true 或 { rows: number, width?: array } | **Slots**: | 插槽名 | 说明 | |--------|------| | default | 加载完成后的实际内容 | | template | 自定义骨架屏模板 | **使用示例**: ```vue
实际内容
``` --- ## 导航组件 ### DedsiMenu - 导航菜单 **功能**:导航菜单,支持多级嵌套和折叠 **DedsiMenu Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | items | MenuItem[] | 是 | - | 菜单项数据数组 | | mode | 'vertical' \| 'horizontal' \| 'inline' | 'inline' | 否 | 菜单模式 | | theme | 'light' \| 'dark' | 'light' | 否 | 菜单主题 | | selectedKeys | string[] | [] | 否 | 当前选中的菜单项 key 数组 | | openKeys | string[] | [] | 否 | 当前展开的子菜单 key 数组 | | collapsed | boolean | false | 否 | 是否收起菜单(仅 inline) | **MenuItem 接口**: ```typescript interface MenuItem { key: string // 唯一标识 label: string // 菜单项标题 icon?: any // 图标组件 disabled?: boolean // 是否禁用 children?: MenuItem[] // 子菜单项 } ``` **Events**: | 事件名 | 参数 | 说明 | |--------|------|------| | update:selectedKeys | (keys: string[]) | 选中项变化 | | update:openKeys | (keys: string[]) | 展开项变化 | | click | (item: MenuItem) | 点击菜单项 | **使用示例**: ```vue ``` --- ### DedsiTabs - 标签页 **功能**:选项卡切换组件 **DedsiTabs Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | modelValue / activeKey | string \| number | - | 否 | 当前激活的标签页 key | | type | 'line' \| 'card' \| 'editable-card' | 'line' | 否 | 标签页类型 | | hideAdd | boolean | false | 否 | 是否隐藏添加按钮(editable-card) | | size | 'default' \| 'small' | 'default' | 否 | 标签页尺寸 | | tabBarGutter | number | - | 否 | 标签之间的间距 | **DedsiTabPane Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | label | string | 是 | - | 标签文本 | | name | string \| number | 是 | - | 标签的唯一标识 | | disabled | boolean | false | 否 | 是否禁用 | | closable | boolean | true | 否 | 是否可关闭(editable-card) | **Events**: | 事件名 | 参数 | 说明 | |--------|------|------| | update:modelValue | (name: string \| number) | 激活标签变化 | | update:activeKey | (name: string \| number) | 激活标签变化 | | tab-click | (name: string \| number) | 点击标签 | | change | (name: string \| number) | 切换标签 | | refresh | (name: string \| number) | 刷新标签(editable-card) | | edit | (targetKey: string \| number, action: 'add' \| 'remove') | 添加/删除标签 | **Slots**: | 插槽名 | 组件 | 说明 | |--------|------|------| | default | DedsiTabs | 标签页内容(DedsiTabPane) | | extra | DedsiTabs | 标签栏右侧额外操作区 | **使用示例**: ```vue 内容1 内容2 内容1 {{ tab.content }} ``` --- ### DedsiDropdown - 下拉菜单 **功能**:下拉菜单,支持点击和悬停触发 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | menu | DropdownMenuItem[] | 是 | - | 菜单项数组 | | trigger | 'hover' \| 'click' | 'hover' | 否 | 触发方式 | | placement | 'bottomLeft' \| 'bottomCenter' \| 'bottomRight' \| 'topLeft' \| ... | 'bottomLeft' | 否 | 菜单位置 | | disabled | boolean | false | 否 | 是否禁用 | **DropdownMenuItem 接口**: ```typescript interface DropdownMenuItem { key: string | number // 唯一标识 label?: string // 菜单项文本 icon?: any // 图标组件 disabled?: boolean // 是否禁用 danger?: boolean // 是否危险操作(红色) type?: 'item' | 'divider' // 类型:菜单项或分割线 } ``` **Events**: | 事件名 | 参数 | 说明 | |--------|------|------| | select | (key: string \| number) | 选择菜单项时触发 | **使用示例**: ```vue ``` --- ## 数据展示组件 ### DedsiStatistic - 统计数值 **功能**:展示统计数值,支持数字动画 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | title | string | - | 否 | 数值的标题 | | value | number | 是 | - | 数值内容 | | precision | number | 0 | 否 | 数值精度(小数位数) | | prefix | string | - | 否 | 前缀 | | suffix | string | - | 否 | 后缀 | | showGroup | boolean | true | 否 | 是否显示千分位分隔符 | | duration | number | 1500 | 否 | 数字动画持续时间(ms) | | animation | boolean | true | 否 | 是否开启动画 | | contentStyle | Record | - | 否 | 数值内容的自定义样式 | **Slots**: | 插槽名 | 说明 | |--------|------| | title | 自定义标题 | | prefix | 自定义前缀 | | suffix | 自定义后缀 | **使用示例**: ```vue ``` --- ### DedsiNumberConverter - 数字转换 **功能**:将数字转换为万/千万/亿单位显示 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | value | number \| string | 是 | - | 要转换的数值 | | targetUnit | 'none' \| 'wan' \| 'qianwan' \| 'yi' \| 'auto' | 'auto' | 否 | 目标单位,auto 自动选择 | | precision | number | 2 | 否 | 保留小数位数 | | suffix | string | '' | 否 | 单位后缀(如"元"、"人") | **使用示例**: ```vue ``` --- ### DedsiCountdown - 倒计时 **功能**:实时倒计时展示 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | title | string | - | 否 | 标题 | | value | number \| string \| Date | 是 | - | 目标时间(时间戳或日期对象) | | format | string | 'HH:mm:ss' | 否 | 时间格式化模板 | | prefix | string | - | 否 | 前缀文本 | | suffix | string | - | 否 | 后缀文本 | | valueStyle | Record | - | 否 | 数值的自定义样式 | **Events**: | 事件名 | 参数 | 说明 | |--------|------|------| | finish | () | 倒计时结束时触发 | | change | (value: number) | 时间变化时触发,返回剩余毫秒数 | **Slots**: | 插槽名 | 说明 | |--------|------| | title | 自定义标题 | | prefix | 自定义前缀 | | suffix | 自定义后缀 | **使用示例**: ```vue ``` --- ### DedsiTable - 表格 **功能**:表格展示,支持分页和自定义列渲染 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | data | Record[] | 是 | - | 表格数据数组 | | columns | Column[] | 是 | - | 列配置数组 | | total | number | 是 | - | 数据总条数 | | pageSize | number | 10 | 否 | 每页显示条数 | | bordered | boolean | false | 否 | 是否显示边框 | | showIndex | boolean | false | 否 | 是否显示序号列 | | indexColumnTitle | string | '序号' | 否 | 序号列的标题 | | pagination | boolean | true | 否 | 是否显示分页器 | **Column 接口**: ```typescript interface Column { key: string // 列的唯一标识,用于插槽匹配 title: string // 列标题 width?: string // 列宽度(CSS 值) align?: 'left' | 'center' | 'right' // 对齐方式 } ``` **Events**: | 事件名 | 参数 | 说明 | |--------|------|------| | page-change | (page: number) | 页码变化 | | page-size-change | (pageSize: number) | 每页条数变化 | **Slots**: | 插槽名 | 参数 | 说明 | |--------|------|------| | [column.key] | { row: any, value: any } | 自定义列内容,插槽名为列的 key | **使用示例**: ```vue ``` --- ### DedsiTypography - 排版 **功能**:文本排版组件,支持复制、编辑、省略等功能 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | tag | string | 'span' | 否 | 渲染的 HTML 标签 | | type | 'secondary' \| 'success' \| 'warning' \| 'danger' | - | 否 | 文字颜色类型 | | disabled | boolean | false | 否 | 是否禁用样式 | | mark | boolean | false | 否 | 是否标记样式(黄色背景) | | code | boolean | false | 否 | 是否行内代码样式 | | delete | boolean | false | 否 | 是否删除线 | | underline | boolean | false | 否 | 是否下划线 | | strong | boolean | false | 否 | 是否加粗 | | copyable | boolean \| string | false | 否 | 是否可复制,可设置复制提示文本 | | editable | boolean | false | 否 | 是否可编辑 | | ellipsis | boolean \| { rows: number } | false | 否 | 是否省略,可设置省略行数 | **Events**: | 事件名 | 参数 | 说明 | |--------|------|------| | update:modelValue | (value: string) | 内容值变化 | | change | (value: string) | 编辑完成时触发 | **使用示例**: ```vue 普通文本 次要文本 这段文字可以复制 {{ text }} 这是一段很长的文字内容,超过两行后会显示省略号... 重要 提示 ``` --- ### DedsiImage - 图片 **功能**:图片预览,支持缩放、旋转、多图切换 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | src | string | 是 | - | 图片地址 | | alt | string | - | 否 | 替代文本 | | width | string \| number | '100%' | 否 | 图片宽度 | | height | string \| number | 'auto' | 否 | 图片高度 | | fit | 'fill' \| 'contain' \| 'cover' \| 'none' \| 'scale-down' | 'cover' | 否 | 图片填充模式 | | preview | boolean | true | 否 | 是否可预览 | | previewSrcList | string[] | [] | 否 | 预览图片列表 | **使用示例**: ```vue ``` --- ### DedsiQRCode - 二维码 **功能**:生成二维码 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | value | string | 是 | - | 二维码内容 | | size | number | 160 | 否 | 二维码尺寸(px) | | color | string | '#000000' | 否 | 前景色 | | backgroundColor | string | '#ffffff' | 否 | 背景色 | | margin | number | 2 | 否 | 边距 | | errorCorrectionLevel | 'L' \| 'M' \| 'Q' \| 'H' | 'M' | 否 | 容错级别 | **Slots**: | 插槽名 | 说明 | |--------|------| | loading | 加载状态内容 | | error | 错误状态内容 | **使用示例**: ```vue ``` --- ## 反馈组件 ### DedsiDialog - 对话框 **功能**:模态对话框,带有确认/取消按钮 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | visible | boolean | false | 是 | 是否可见 | | title | string | - | 否 | 对话框标题 | | width | number \| string | 520 | 否 | 对话框宽度 | | centered | boolean | false | 否 | 是否垂直居中 | | closable | boolean | true | 否 | 是否显示关闭按钮 | | maskClosable | boolean | true | 否 | 点击蒙层是否关闭对话框 | | okText | string | '确定' | 否 | 确认按钮文本 | | cancelText | string | '取消' | 否 | 取消按钮文本 | | confirmLoading | boolean | false | 否 | 确认按钮的 loading 状态 | | footerHidden | boolean | false | 否 | 是否隐藏底部按钮区 | | type | 'info' \| 'success' \| 'warning' \| 'error' | - | 否 | 对话框类型,显示对应图标 | **Events**: | 事件名 | 参数 | 说明 | |--------|------|------| | update:visible | (visible: boolean) | 显示状态变化 | | ok | () | 点击确认按钮 | | cancel | () | 点击取消按钮 | | close | () | 关闭对话框时 | **Slots**: | 插槽名 | 说明 | |--------|------| | default | 对话框内容 | | title | 自定义标题 | | footer | 自定义底部 | **使用示例**: ```vue ``` --- ### DedsiModal - 模态框 **功能**:基础模态框 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | visible | boolean | false | 是 | 是否可见 | | title | string | - | 否 | 标题 | | width | number \| string | 520 | 否 | 宽度 | | centered | boolean | false | 否 | 是否垂直居中 | | closable | boolean | true | 否 | 是否显示关闭按钮 | | mask | boolean | true | 否 | 是否显示遮罩层 | | maskClosable | boolean | true | 否 | 点击遮罩是否关闭 | **Events**: | 事件名 | 参数 | 说明 | |--------|------|------| | update:visible | (visible: boolean) | 显示状态变化 | | cancel | () | 点击取消或关闭 | **Slots**: | 插槽名 | 说明 | |--------|------| | default | 内容 | | title | 自定义标题 | --- ### DedsiDrawer - 抽屉 **功能**:从屏幕边缘滑出的浮层面板 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | visible | boolean | false | 是 | 是否可见 | | title | string | - | 否 | 标题 | | placement | 'left' \| 'right' \| 'top' \| 'bottom' | 'right' | 否 | 位置 | | width | number \| string | 378 | 否 | 宽度(left/right) | | height | number \| string | 378 | 否 | 高度(top/bottom) | | closable | boolean | true | 否 | 是否显示关闭按钮 | | mask | boolean | true | 否 | 是否显示遮罩 | | maskClosable | boolean | true | 否 | 点击遮罩是否关闭 | **Events**: | 事件名 | 参数 | 说明 | |--------|------|------| | update:visible | (visible: boolean) | 显示状态变化 | | close | () | 关闭时触发 | **Slots**: | 插槽名 | 说明 | |--------|------| | default | 内容 | | title | 自定义标题 | | footer | 底部内容 | **使用示例**: ```vue ``` --- ### DedsiMessage - 全局提示 **功能**:全局提示消息,通常命令式调用 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | content | string | 是 | - | 提示内容 | | type | 'info' \| 'success' \| 'warning' \| 'error' \| 'loading' | 'info' | 否 | 提示类型 | | duration | number | 3000 | 否 | 持续时间(ms),0 为不自动关闭 | | onClose | () => void | - | 否 | 关闭回调 | **暴露方法**: | 方法名 | 说明 | |--------|------| | close | 主动关闭提示 | **使用示例**: ```vue ``` --- ### DedsiPopconfirm - 气泡确认框 **功能**:点击元素触发气泡确认框 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | title | string | 是 | - | 确认框标题 | | confirmText | string | '确定' | 否 | 确认按钮文本 | | cancelText | string | '取消' | 否 | 取消按钮文本 | | placement | 'top' \| 'bottom' \| 'left' \| 'right' \| ... | 'top' | 否 | 位置 | | disabled | boolean | false | 否 | 是否禁用 | **Events**: | 事件名 | 参数 | 说明 | |--------|------|------| | confirm | () | 点击确认 | | cancel | () | 点击取消 | **使用示例**: ```vue 删除 ``` --- ### DedsiPopover - 气泡卡片 **功能**:点击或悬停时显示气泡卡片 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | title | string | - | 否 | 标题 | | content | string | - | 否 | 内容 | | placement | 'top' \| 'bottom' \| 'left' \| 'right' \| ... | 'top' | 否 | 位置 | | trigger | 'hover' \| 'click' | 'hover' | 否 | 触发方式 | | disabled | boolean | false | 否 | 是否禁用 | **Slots**: | 插槽名 | 说明 | |--------|------| | default | 触发元素 | | content | 自定义内容 | | title | 自定义标题 | **使用示例**: ```vue 悬停显示 点击显示 ``` --- ### DedsiTooltip - 文字提示 **功能**:简单的文字提示气泡 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | content | string | 是 | - | 提示内容 | | placement | 'top' \| 'bottom' \| 'left' \| 'right' \| ... | 'top' | 否 | 位置 | | disabled | boolean | false | 否 | 是否禁用 | **使用示例**: ```vue 悬停查看提示 ``` --- ### DedsiResult - 结果 **功能**:反馈各类操作结果 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | status | 'success' \| 'error' \| 'info' \| 'warning' \| '404' \| '403' \| '500' | - | 否 | 结果状态 | | title | string | - | 否 | 标题 | | subTitle | string | - | 否 | 副标题 | | icon | string | - | 否 | 自定义图标组件 | **Slots**: | 插槽名 | 说明 | |--------|------| | default | 额外内容 | | icon | 自定义图标 | | title | 自定义标题 | | subTitle | 自定义副标题 | | extra | 底部操作区 | **使用示例**: ```vue ``` --- ### DedsiPopper - 基础气泡 **功能**:基础气泡组件,用于构建其他气泡类组件 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | placement | 'top' \| 'bottom' \| 'left' \| 'right' \| ... | 'top' | 否 | 位置 | | trigger | 'hover' \| 'click' | 'hover' | 否 | 触发方式 | | disabled | boolean | false | 否 | 是否禁用 | | offset | number | 12 | 否 | 偏移量(px) | | transitionName | string | 'dedsi-popper-fade' | 否 | 过渡动画名称 | | popperClass | string | - | 否 | 自定义类名 | | showArrow | boolean | true | 否 | 是否显示箭头 | | background | string | '#fff' | 否 | 背景色 | | color | string | - | 否 | 文字颜色 | | borderRadius | string | '8px' | 否 | 圆角 | | boxShadow | string | - | 否 | 阴影 | | padding | string | '12px' | 否 | 内边距 | **Events**: | 事件名 | 参数 | 说明 | |--------|------|------| | update:visible | (visible: boolean) | 显示状态变化 | **暴露方法**: | 方法名 | 说明 | |--------|------| | close | 关闭气泡 | | updatePosition | 更新位置 | **Slots**: | 插槽名 | 说明 | |--------|------| | default | 触发元素 | | content | 气泡内容 | --- ## 其他组件 ### DedsiSegmented - 分段器 **功能**:分段控制器,用于切换显示不同内容 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | modelValue | string \| number | 是 | - | 当前值 | | options | SegmentedOption[] | 是 | - | 选项数组 | | block | boolean | false | 否 | 是否撑满容器宽度 | | size | 'large' \| 'default' \| 'small' | 'default' | 否 | 尺寸 | | disabled | boolean | false | 否 | 是否禁用 | **SegmentedOption 接口**: ```typescript interface SegmentedOption { label: string // 选项文本 value: string | number // 选项值 icon?: any // 图标 disabled?: boolean // 是否禁用 } ``` **Events**: | 事件名 | 参数 | 说明 | |--------|------|------| | update:modelValue | (value: string \| number) | 值变化 | | change | (value: string \| number) | 选项变化 | **使用示例**: ```vue ``` --- ### DedsiMarquee - 跑马灯 **功能**:文字/内容滚动展示 **Props**: | 属性 | 类型 | 默认值 | 必需 | 说明 | |------|------|--------|------|------| | speed | number | 50 | 否 | 滚动速度(px/s) | | direction | 'ltr' \| 'rtl' | 'rtl' | 否 | 滚动方向:ltr 从左到右,rtl 从右到左 | | pauseOnHover | boolean | true | 否 | 鼠标悬停时是否暂停 | **使用示例**: ```vue 这是一条滚动的公告信息 ``` --- ## 未实现组件 以下组件的目录存在但尚未实现(没有对应的 .vue 文件): ### 表单组件 - **DedsiButton** - 按钮 - **DedsiForm** / **DedsiFormItem** - 表单 - **DedsiInput** / **DedsiInputNumber** / **DedsiInputPassword** / **DedsiTextarea** - 输入框系列 - **DedsiCheckbox** / **DedsiCheckboxGroup** - 复选框 - **DedsiRadio** / **DedsiRadioGroup** - 单选框 - **DedsiSelect** - 选择器 - **DedsiSwitch** - 开关 - **DedsiSlider** - 滑动输入条 - **DedsiRate** - 评分 ### 数据选择组件 - **DedsiAutoComplete** - 自动完成 - **DedsiCascader** - 级联选择 - **DedsiDatePicker** / **DedsiMonthPicker** / **DedsiRangePicker** - 日期选择器系列 - **DedsiTimePicker** / **DedsiTimeRangePicker** - 时间选择器系列 - **DedsiTreeSelect** - 树选择 - **DedsiTransfer** - 穿梭框 - **DedsiMentions** - 提及 ### 其他 - **DedsiUpload** - 上传 --- ## 最佳实践 ### 1. 组件导入 推荐使用按需导入以减小打包体积: ```typescript import { DedsiAlert, DedsiButton, DedsiTable } from 'dedsi-vue-ui' app.use(DedsiAlert) app.use(DedsiButton) app.use(DedsiTable) ``` **避免全量导入**(除非确实需要全部组件): ```typescript // ❌ 不推荐:会导入所有组件 import DedsiVueUI from 'dedsi-vue-ui' app.use(DedsiVueUI) ``` ### 2. 事件处理 所有组件的事件都使用 Vue 3 标准事件命名: ```vue ``` **事件回调类型定义**: ```typescript const handleVisibleChange = (visible: boolean) => { console.log('对话框显示状态:', visible) } const handlePageChange = (page: number) => { console.log('当前页码:', page) } ``` ### 3. 双向绑定 使用 `v-model` 进行双向绑定,遵循 Vue 3 规范: ```vue ``` ### 4. 类型安全 **推荐使用 TypeScript** 以获得完整的类型提示和检查: ```typescript // 导入类型定义 import type { MenuItem, Column, DropdownMenuItem, SegmentedOption } from 'dedsi-vue-ui' // 使用类型定义 const menuItems: MenuItem[] = [ { key: 'home', label: '首页', icon: HomeIcon } ] const columns: Column[] = [ { key: 'name', title: '姓名', width: '200px' } ] ``` ### 5. 插槽使用 **具名插槽**: ```vue

卡片内容

``` **作用域插槽**: ```vue ``` ### 6. 样式定制 **通过 props 修改样式**: ```vue ``` **通过 CSS 覆盖**(谨慎使用): ```vue ``` ### 7. 性能优化 **合理使用 v-once**: ```vue

静态标题

``` **避免不必要的响应式**: ```typescript // ✅ 使用 shallowRef 对于大型对象 const largeData = shallowRef(...) // ✅ 使用 markRaw 跳过组件的响应式转换 import { markRaw } from 'vue' const iconComponent = markRaw(CustomIcon) ``` ### 8. 常见问题 **Q: 组件样式不生效?** A: 检查是否正确导入了组件样式文件,确保 CSS 已被加载。 **Q: TypeScript 报错找不到模块?** A: 确保安装了类型定义,并在 `tsconfig.json` 中正确配置: ```json { "compilerOptions": { "types": ["dedsi-vue-ui"] } } ``` **Q: 组件无法按需导入?** A: 检查是否配置了正确的构建工具(如 Vite、Webpack)以支持按需导入。 **Q: 如何自定义主题?** A: 参考 CSS 变量文档,通过覆盖 CSS 变量来定制主题: ```css :root { --dedsi-primary-color: #1890ff; --dedsi-border-radius: 4px; } ``` --- ## 组件分类索引 ### 基础组件 (10) - DedsiAlert - 警告提示 - DedsiAvatar - 头像 - DedsiBadge - 徽标数 - DedsiBreadcrumb - 面包屑 - DedsiCard - 卡片 - DedsiDivider - 分割线 - DedsiEmpty - 空状态 - DedsiTag - 标签 - DedsiSpace - 间距 - DedsiSplit - 分割布局 ### 布局组件 (3) - DedsiRow/DedsiCol - 栅格布局 - DedsiScrollbar - 滚动条 - DedsiSkeleton - 骨架屏 ### 导航组件 (3) - DedsiMenu - 导航菜单 - DedsiTabs - 标签页 - DedsiDropdown - 下拉菜单 ### 数据展示组件 (7) - DedsiStatistic - 统计数值 - DedsiNumberConverter - 数字转换 - DedsiCountdown - 倒计时 - DedsiTable - 表格 - DedsiTypography - 排版 - DedsiImage - 图片 - DedsiQRCode - 二维码 ### 反馈组件 (9) - DedsiDialog - 对话框 - DedsiModal - 模态框 - DedsiDrawer - 抽屉 - DedsiMessage - 全局提示 - DedsiPopconfirm - 气泡确认框 - DedsiPopover - 气泡卡片 - DedsiTooltip - 文字提示 - DedsiResult - 结果 - DedsiPopper - 基础气泡 ### 其他组件 (2) - DedsiSegmented - 分段器 - DedsiMarquee - 跑马灯 --- ## 统计信息 - **已实现组件**:37 个 - **未实现组件**:23 个 - **总计**:60 个 --- ## 附录 ### TypeScript 类型定义速查 #### 常用接口类型 ```typescript // 菜单项类型(DedsiMenu, DedsiDropdown) interface MenuItem { key: string label: string icon?: any disabled?: boolean children?: MenuItem[] } // 表格列类型(DedsiTable) interface Column { key: string title: string width?: string align?: 'left' | 'center' | 'right' } // 下拉菜单项类型(DedsiDropdown) interface DropdownMenuItem { key: string | number label?: string icon?: any disabled?: boolean danger?: boolean type?: 'item' | 'divider' } // 分段器选项类型(DedsiSegmented) interface SegmentedOption { label: string value: string | number icon?: any disabled?: boolean } // 面包屑路由类型(DedsiBreadcrumbItem) type RouteLocationRaw = string | { path?: string name?: string params?: Record query?: Record } ``` ### Props 类型联合值速查 ```typescript // Alert 类型 type AlertType = 'success' | 'info' | 'warning' | 'error' // Avatar 尺寸 type AvatarSize = 'large' | 'default' | 'small' | number // Avatar 形状 type AvatarShape = 'circle' | 'square' // Badge 类型 type BadgeType = 'primary' | 'success' | 'warning' | 'danger' // Button 尺寸 type ButtonSize = 'large' | 'default' | 'small' // Card 阴影 type CardShadow = 'always' | 'hover' | 'never' // Divider 方向 type DividerDirection = 'horizontal' | 'vertical' // Menu 模式 type MenuMode = 'vertical' | 'horizontal' | 'inline' // Menu 主题 type MenuTheme = 'light' | 'dark' // Space 方向 type SpaceDirection = 'horizontal' | 'vertical' // Space 尺寸 type SpaceSize = 'small' | 'middle' | 'large' | number | [number, number] // Tabs 类型 type TabsType = 'line' | 'card' | 'editable-card' // Tag 类型 type TagType = 'default' | 'primary' | 'success' | 'warning' | 'danger' // Tooltip/Popover 放置位置 type Placement = | 'top' | 'topLeft' | 'topRight' | 'topCenter' | 'bottom' | 'bottomLeft' | 'bottomRight' | 'bottomCenter' | 'left' | 'leftTop' | 'leftBottom' | 'right' | 'rightTop' | 'rightBottom' // Result 状态 type ResultStatus = 'success' | 'error' | 'info' | 'warning' | '404' | '403' | '500' // NumberConverter 单位 type NumberConverterUnit = 'none' | 'wan' | 'qianwan' | 'yi' | 'auto' // Drawer 位置 type DrawerPlacement = 'left' | 'right' | 'top' | 'bottom' // QRCode 容错级别 type QRCodeErrorLevel = 'L' | 'M' | 'Q' | 'H' ``` --- **文档元数据**: | 项目 | 值 | |------|------| | 文档名称 | Dedsi-Vue-UI 组件库 SKILL 文档 | | 文档版本 | 1.0.0 | | 组件库版本 | 0.0.9 | | 创建时间 | 2025-01-20 | | 最后更新 | 2025-01-20 | | 维护者 | Dedsi Team | | 许可证 | MIT | | Vue 版本 | 3.5.26 | | TypeScript 版本 | 5.9.3 | | 文档格式 | Markdown + YAML Front Matter | | 文档规范 | SKILL v1.0 |