vue-dd-ui
Version:
基于 Element UI 二次封装的 Vue.js 组件库,提供17个精心设计的组件和70+工具函数
425 lines (349 loc) • 10.1 kB
Markdown
# 组件详细文档
本文档详细介绍了 Vue DD UI 组件库中所有组件的使用方法。
## 目录
- [基础组件](#基础组件)
- [dd-button 按钮](#dd-button-按钮)
- [dd-icon 图标](#dd-icon-图标)
- [表单组件](#表单组件)
- [dd-form 动态表单](#dd-form-动态表单)
- [dd-debounce 防抖组件](#dd-debounce-防抖组件)
- [dd-select-icon 图标选择器](#dd-select-icon-图标选择器)
- [数据展示](#数据展示)
- [dd-list 增强列表](#dd-list-增强列表)
- [dd-fold-card 折叠卡片](#dd-fold-card-折叠卡片)
- [工具函数](#工具函数)
- [日期工具](#日期工具)
- [数组工具](#数组工具)
- [验证工具](#验证工具)
---
## 基础组件
### dd-button 按钮
基于 Element UI Button 组件增强,支持更多业务场景。
#### 基础用法
```vue
<template>
<div>
<!-- 基础按钮 -->
<dd-button label="默认按钮" @click="handleClick" />
<!-- 不同类型 -->
<dd-button label="主要按钮" type="primary" @click="handleClick" />
<dd-button label="成功按钮" type="success" @click="handleClick" />
<dd-button label="警告按钮" type="warning" @click="handleClick" />
<dd-button label="危险按钮" type="danger" @click="handleClick" />
<!-- 带图标 -->
<dd-button label="搜索" icon="search" type="primary" @click="handleClick" />
<!-- 文件上传按钮 -->
<dd-button
label="导入Excel"
button-mode="import"
accept=".xls,.xlsx"
@click="handleFileUpload"
/>
</div>
</template>
<script>
export default {
methods: {
handleClick(data) {
console.log("按钮点击:", data);
},
handleFileUpload(data) {
console.log("文件上传:", data.file);
},
},
};
</script>
```
#### API
##### Props
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
| ---------- | ---------------------- | ------- | ---------------------------------------- | ---------- |
| label | 按钮文字 | String | — | — |
| type | 按钮类型 | String | primary/success/warning/danger/info/text | default |
| icon | 图标名称 | String | — | — |
| loading | 加载状态 | Boolean | — | false |
| buttonMode | 按钮模式 | String | default/import | default |
| accept | 文件类型(仅upload模式) | String | — | .xls,.xlsx |
##### Events
| 事件名 | 说明 | 参数 |
| ------ | -------- | --------------------- |
| click | 点击事件 | { code, label, file } |
---
### dd-icon 图标
图标组件,基于自定义字体图标。
#### 基础用法
```vue
<template>
<div>
<dd-icon icon="search" :size="16" />
<dd-icon icon="user" :size="20" />
<dd-icon icon="setting" :size="24" />
</div>
</template>
```
#### API
##### Props
| 参数 | 说明 | 类型 | 默认值 |
| ---- | -------- | ------ | ------ |
| icon | 图标编码 | String | — |
| size | 图标大小 | Number | 12 |
---
## 表单组件
### dd-form 动态表单
强大的动态表单组件,支持多种表单控件类型。
#### 基础用法
```vue
<template>
<dd-form
ref="form"
:items="formItems"
:loading="loading"
@click="handleFormClick"
@change="handleFormChange"
/>
</template>
<script>
export default {
data() {
return {
loading: false,
formItems: [
{
type: "input",
key: "name",
label: "姓名",
placeholder: "请输入姓名",
rules: [{ required: true, message: "请输入姓名" }],
},
{
type: "select",
key: "gender",
label: "性别",
options: [
{ key: "1", value: "男" },
{ key: "2", value: "女" },
],
},
{
type: "date",
key: "birthday",
label: "出生日期",
valueFormat: "yyyy-MM-dd",
},
],
};
},
methods: {
handleFormClick(data) {
if (data.code === "BtnSearch") {
const formData = this.$refs.form.getValue();
console.log("表单数据:", formData);
}
},
handleFormChange(key, value) {
console.log("字段变化:", key, value);
},
},
};
</script>
```
#### 支持的表单控件类型
| 类型 | 说明 | 示例 |
| ----------- | -------- | -------- |
| input | 输入框 | 文本输入 |
| number | 数字输入 | 年龄输入 |
| select | 下拉选择 | 状态选择 |
| radio | 单选框 | 性别选择 |
| checkbox | 复选框 | 兴趣选择 |
| date | 日期选择 | 生日选择 |
| datetime | 日期时间 | 预约时间 |
| cascader | 级联选择 | 地区选择 |
| switch | 开关 | 启用状态 |
| slider | 滑块 | 评分 |
| rate | 评分 | 商品评价 |
| upload | 上传 | 文件上传 |
| selecttree | 树选择 | 部门选择 |
| selectpopup | 弹窗选择 | 用户选择 |
---
### dd-debounce 防抖组件
防抖容器组件,防止用户频繁操作。
#### 基础用法
```vue
<template>
<dd-debounce :time="500">
<dd-button label="防抖按钮" @click="handleClick" />
<dd-button label="另一个按钮" @click="handleClick2" />
</dd-debounce>
</template>
<script>
export default {
methods: {
handleClick() {
console.log("防抖点击1");
},
handleClick2() {
console.log("防抖点击2");
},
},
};
</script>
```
---
## 数据展示
### dd-list 增强列表
基于 Element Table 的增强列表组件,集成搜索、分页、操作等功能。
#### 基础用法
```vue
<template>
<dd-list
ref="list"
:search-items="searchItems"
:list-items="listItems"
:list-buttons="listButtons"
:data-load="loadData"
@btnClick="handleBtnClick"
/>
</template>
<script>
export default {
data() {
return {
searchItems: [
{
type: "input",
key: "name",
label: "姓名",
placeholder: "请输入姓名",
},
{
type: "select",
key: "status",
label: "状态",
options: [
{ key: "1", value: "启用" },
{ key: "0", value: "禁用" },
],
},
],
listItems: [
{ prop: "name", label: "姓名", width: 120 },
{ prop: "age", label: "年龄", width: 80 },
{ prop: "email", label: "邮箱", minWidth: 200 },
{
prop: "status",
label: "状态",
width: 100,
options: [
{ key: "1", value: "启用" },
{ key: "0", value: "禁用" },
],
},
],
listButtons: [
{ code: "add", label: "新增", type: "primary", icon: "plus" },
{ code: "edit", label: "编辑", type: "text" },
{ code: "delete", label: "删除", type: "text" },
],
};
},
methods: {
loadData(vue, params) {
// 模拟接口请求
return new Promise(resolve => {
setTimeout(() => {
resolve({
datas: [
{
id: 1,
name: "张三",
age: 25,
email: "zhang@example.com",
status: "1",
},
{
id: 2,
name: "李四",
age: 30,
email: "li@example.com",
status: "0",
},
],
total: 2,
});
}, 1000);
});
},
handleBtnClick(data) {
console.log("按钮点击:", data);
if (data.code === "add") {
// 新增逻辑
} else if (data.code === "edit") {
// 编辑逻辑
console.log("编辑行数据:", data.row);
}
},
},
};
</script>
```
#### 高级功能
##### 虚拟滚动
处理大数据量时启用虚拟滚动:
```vue
<dd-list
:use-virtual="true"
:height="400"
page-type="no"
:data-load="bigDataLoad"
/>
```
##### 树形数据
显示树形结构数据:
```vue
<dd-list
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
:data-load="treeDataLoad"
/>
```
---
## 工具函数
### 日期工具
```javascript
// 格式化日期
this.$ddDateUtil.format(new Date(), "YYYY-MM-DD HH:mm:ss");
// 获取当前日期
this.$ddDateUtil.getNowDay("YYYY-MM-DD");
// 获取本周开始时间
this.$ddDateUtil.getStartDayOfWeek();
// 获取本月开始时间
this.$ddDateUtil.getStartDayOfMonth();
// 获取日期范围
this.$ddDateUtil.getAllDate("2023-01-01", "2023-01-07");
```
### 数组工具
```javascript
// 数组去重
this.$ddUnique([1, 1, 2, 3]); // [1, 2, 3]
// 数组排序
this.$ddOrderBy(users, "age", "desc");
// 数组分组
this.$ddGroupBy(users, user => user.department);
// 集合运算
this.$ddUnion([1, 2], [2, 3]); // 并集: [1, 2, 3]
this.$ddIntersect([1, 2], [2, 3]); // 交集: [2]
this.$ddMinus([1, 2], [2, 3]); // 差集: [1]
```
### 验证工具
```javascript
// 邮箱验证
this.$ddValidate.isEmail("user@example.com"); // true
// 手机号验证
this.$ddValidate.isPhone("13800138000"); // true
// 身份证验证
this.$ddValidate.isIdCard("身份证号"); // true
// 数字验证
this.$ddValidate.isNumber("123"); // true
// 中文验证
this.$ddValidate.isChina("中文"); // true
```
更多组件和工具函数的详细用法,请参考原有文档或查看源代码示例。