diff --git a/diboot-docs/.vuepress/config.js b/diboot-docs/.vuepress/config.js
index b1d1970..056a416 100644
--- a/diboot-docs/.vuepress/config.js
+++ b/diboot-docs/.vuepress/config.js
@@ -63,6 +63,7 @@ module.exports = {
['/guide/diboot-antd-admin/添加页面', '添加页面'],
['/guide/diboot-antd-admin/权限控制', '权限控制'],
['/guide/diboot-antd-admin/接口请求', '接口请求'],
+ ['/guide/diboot-antd-admin/组件', '组件'],
['/guide/diboot-antd-admin/CRUD快速集成', 'CRUD快速集成'],
]
}
@@ -78,6 +79,7 @@ module.exports = {
['/guide/diboot-element-admin/添加页面', '添加页面'],
['/guide/diboot-element-admin/权限控制', '权限控制'],
['/guide/diboot-element-admin/接口请求', '接口请求'],
+ ['/guide/diboot-element-admin/组件', '组件'],
['/guide/diboot-element-admin/CRUD快速集成', 'CRUD快速集成'],
]
}
diff --git a/diboot-docs/guide/diboot-antd-admin/CRUD快速集成.md b/diboot-docs/guide/diboot-antd-admin/CRUD快速集成.md
index 2d7f006..923e4f4 100644
--- a/diboot-docs/guide/diboot-antd-admin/CRUD快速集成.md
+++ b/diboot-docs/guide/diboot-antd-admin/CRUD快速集成.md
@@ -2,9 +2,11 @@
## 开始之前
-* 在diboot-antd-admin中,我们对CRUD等常用功能进行了一些抽象,将常用的列表、详情、新建、更新、删除等功能需要的相关属性与方法都抽象成了vue的mixins文件,这些文件在**src/components/diboot/mixins**文件夹下,强烈建议您先阅览以下他们。
+* 在diboot-antd-admin中,我们对CRUD等常用功能进行了一些抽象,将常用的列表、详情、新建、更新、删除等功能需要的相关属性与方法都抽象成了vue的mixins文件,这些文件在**src/components/diboot/mixins**文件夹下。
* 也可以对已有的一些页面组件代码进行阅读,比如**src/views/system/iamUser**文件夹下的相关组件代码。
-
+::: tip
+在阅读文档之前,建议您准备好[diboot-antd-admin 最新版的环境](https://github.com/dibo-software/diboot-antd-admin/releases)源码环境,搭配代码使用更佳。
+:::
## 列表页
1. 引入列表的mixins文件,如下:
@@ -41,23 +43,51 @@ export default {
}
}
```
-5. 删除数据:直接在删除按钮上调用remove函数即可,传入需要删除的当前id。
-6. 导出数据:直接在导出按钮上调用exportData函数即可,将会传入当前查询参数,并异步下载文件。
-7. 自定义查询参数处理方法:重写rebuildQuery方法,接收mixins中已经定义的customQueryParam与queryParam的合并值,返回处理后的值,该方法将会在获取列表数据前或导出数据前被调用。
-8. 钩子函数:afterLoadList,在列表加载完毕将会执行该操作,另外,删除函数返回的是 Promise对象,所以可以使用.then在删除完毕时执行某些操作。
-9. 相关配置:
- * customQueryParam: 不会被搜索栏改变的初始查询参数对象,一般用于页面固定的查询参数
- * queryParam:与查询条件绑定的查询参数对象
- * advanced:用于构建可收缩/展开的查询框的状态参数
- * more:当前对象的关联数据对象
- * getMore:是否在该页面初始化时加载当前对象的关联数据对象,加载的关联数据对象存储在more中,默认为false
- * getListFromMixin:是否在页面初始化时自动加载列表数据,默认为true
- * loadingData:标记页面加载数据状态
- * pagination:分页配置
- * baseApi:接口前缀(必须配置)
- * listApi:列表数据接口,默认为 /list
- * deleteApiPrefix:删除接口前缀,默认为 /
- * exportApi: 导出接口,默认为 /export
+5. 属性配置
+
+| 属性 | 说明 | 类型 |默认值 | 版本|
+| ------------- |:-------------| -----| -----| -----|
+| baseApi | 请求接口基础路径(必须配置)|String | / | - |
+| listApi | 列表数据接口| String | /list |- |
+| deleteApiPrefix | 删除接口前缀 | String | / | - |
+| exportApi | 导出接口| String |~~/export~~ /excel/export|~~2.0.5~~ **2.1.0**|
+| customQueryParam| 自定义参数(不被查询表单重置和改变的参数) | object | {} | - |
+| queryParam | 与查询条件绑定的参数(会被查询表单重置和改变的参数) | object | {} | - |
+| dateRangeQuery | 日期区间选择配置
**时间区间字段请放在这个对象中,会自动构建参与查询** | object | {} | **2.1.0** |
+| advanced | 高级搜索 展开/关闭 | boolean | false | **2.1.0** |
+| data | 存储列表数据 | array | [] |-|
+| getMore | 是否使mixin在当前业务的attachMore接口中自动获取关联数据
**:point_right:业务对象关联详解**| boolean | false | - |
+| attachMoreList | 获取关联数据列表的配置列表
**:point_right:业务对象关联详解** | array | [] | **2.1.0** |
+| more | 存储当前对象的关联数据对象
**:point_right:业务对象关联详解**| object | {} | - |
+| getListFromMixin| 是否在页面初始化时自动加载列表数据 | boolean | true | - |
+| loadingData | 标记页面加载数据状态 | boolean | false | - |
+| pagination | 分页配置 | object | {pageSize: 10,current: 1,total: 0,showSizeChanger: true,pageSizeOptions: ['10', '20', '30', '50', '100'],showTotal: (total, range) => `当前显示 ${range[0]} - ${range[1]} 条/共 ${total} 条` } | - |
+
+6. 功能函数
+
+| 名称 | 说明 | 参数 | 版本|
+| ------------- |:-------------| -----| -----|
+| handleTableChange | 分页、排序、筛选变化时触发 |function(pagination, filters, sorter) | - |
+| appendSorterParam | 构建排序 handleTableChange调用|function(sorter) | **2.1.0** |
+| toggleAdvanced | 切换展示更多搜索框(绑定**advanced**属性)| - | **2.1.0** |
+| onSearch | 搜索,查询第一页(默认查询按钮触发)| - | - |
+| postList | post请求的获取列表(可以传递更长、更复杂参数) | - | - |
+| getList | get请求获取列表 | - | - |
+| attachMore | 加载当前页面关联的对象或者字典,参考属性:getMore、attachMoreList、more | - | - |
+| reset | 重置查询 | - | - |
+| remove | 根据id删除 | function(id) | - |
+| exportData | 导出数据至excel | - | **2.1.0** |
+| downloadFile | 下载文件 | function(res) | **2.1.0** |
+| getPopupContainer | 解决带有下拉框组件在滚动时下拉框不随之滚动的问题 | function(trigger) |-|
+| contentTransform | 处理查询参数中的moment数据 默认转化为YYYY-MM-DD | function(content, transform = {}) | **2.1.0** |
+| dateRange2queryParam | 构建区间查询参数,(转化dateRangeQuery属性内容) | - | **2.1.0** |
+
+7. 钩子函数
+
+| 名称 | 说明 | 参数 | 版本|
+| ------------- |:-------------| -----| -----|
+| afterLoadList | 加载数据之后操作 |function(list) | - |
+| rebuildQuery | 重新构建查询条件 (接收已经定义的customQueryParam与queryParam的合并值)|function(query) | - |
## 新建与更新
@@ -69,36 +99,52 @@ export default {
mixins: [form]
}
```
-2. 相同业务对象的新建与更新使用同一个表单组件,默认以抽屉形式打开,可在引入地方,直接调用该组件的open方法进行打开。
-3. 使用以上引入列表mixins的方式引入form的mixins文件,将会具有mixins中的所有能力。
-4. 已有功能:
- * open函数,可直接调用打开该表单
- * 提供根据open中参数情况自动切换新建与更新操作
- * 提供打开与关闭完成的钩子函数
- * 提供表单提交函数 onSubmit
- * 对form下校验规则的自动校验
- * 提供对校验的自定义操作
- * 提供校验完成后的enhance钩子函数,可对需要提交的数据进行再处理
- * 可以对新建数据或更新数据的方法重写
- * 提供提交成功与提交失败的钩子函数
- * 提供表单默认布局参数
- * 提供对关联数据的自动加载
- * 提供各项配置支持自定义接口等
-5. 相关配置:
- * baseApi:与列表页相同
- * createApi:新建接口,将自动拼接在baseApi之后,默认为 /
- * updateApiPrefix: 更新接口前缀,将自动拼接在baseApi之后,默认为 /
- * model: 更新时加载的原数据
- * title:页面标题,默认为新建或更新
- * reloadMore:加载的关联数据对象,默认为{},如果list页面以及由more数据,且不与自身关联,可通过传参方式直接使用list中的more参数
- * getMore:初始化时是否加载reloadMore数据,默认为false
- * state:当前组件状态对象,默认为:{visible: false, confirmSubmit: false}
-6. 钩子函数:
- * afterOpen:在组件打开后,或者更新时数据加载完毕后,执行该函数
- * afterClose: 在组件关闭后,执行该函数
- * enhance:在校验完成后,对提交数据进行处理的函数
- * submitSuccess: 提交成功后,执行该函数,默认关闭该组件,并发送complete和changeKey事件
- * submitFailed: 提交失败后,执行该函数,默认提示错误消息
+2. 属性配置:
+
+| 属性 | 说明 | 类型 |默认值 | 版本|
+| ------------- |:-------------| -----| -----| -----|
+| primaryKey | 主键字段名 | string | id | **2.1.0** |
+| baseApi | 请求接口基础路径(必须配置)|String | / | - |
+| createApi | 新建接口,自动拼接在*baseApi*之后| String | / |- |
+| updateApiPrefix | 更新接口前缀,自动拼接在*baseApi*之后 | String | / | - |
+| labelCol | label 默认布局样式 | object |{xs: {span: 24}, sm: {span: 5}}|-|
+| wrapperCol | form控件默认布局样式 | object |{xs: {span: 24}, sm: {span: 16}}|-|
+| model| 存放form数据 | object | {} | - |
+| title | 标题 | String |新建/更新|-|
+| more | 存储当前对象的关联数据对象
**:point_right:业务对象关联详解** | object | {} | - |
+| attachMoreList | 获取关联数据列表的配置列表
**:point_right:业务对象关联详解** | array | [] | **2.1.0** |
+| getMore | 是否使mixin在当前业务的attachMore接口中自动获取关联数据
**:point_right:业务对象关联详解**| boolean | false | - |
+| state | 当前组件状态对象 | object | {visible: false, confirmSubmit: false} | - |
+| isUpload | 当前form是否包含上传
**:point_right:文件上传详解** | boolean | false | **2.1.0** |
+| fileWrapper | 文件包装容器
**:point_right:文件上传详解** | object | {} | **2.1.0** |
+| fileUuidList | 文件存储服务器后返回的唯一标识集合
**:point_right:文件上传详解** | array | [] | **2.1.0** |
+
+3. 功能函数
+
+| 名称 | 说明 | 参数 | 版本|
+| ------------- |:-------------| -----| -----|
+| moment | moment时间相关操作 |- | - |
+| open | 打开表单 (根据参数id存在与否,设置为更新or新建操作) |function(id) | - |
+| close | 关闭表单 |- | - |
+| validate | 提交前的验证流程 |- | - |
+| add | 新建记录的提交 |function(values) | - |
+| update | 更新记录的提交 |function(values) | - |
+| onSubmit | 表单提交事件 |- | - |
+| getPopupContainer | 解决带有下拉框组件在滚动时下拉框不随之滚动的问题 |function(trigger) | - |
+| attachMore | 加载当前页面关联的对象或者字典,参考属性:getMore、attachMoreList、more |- | - |
+| filterOption | select选择框启用search功能后的过滤器 |- | - |
+| clearForm | 清除form内容(关闭的时候自动调用) |- | - |
+| __setFileUuidList__ | 设置文件uuid,参考属性:isUpload、fileWrapper、fileUuidList |- | - |
+| __defaultFileWrapperKeys__ | 初始化fileWrapper(关闭时候自动调用) |- | - |
+4. 钩子函数
+
+| 名称 | 说明 | 参数 | 版本|
+| ------------- |:-------------| -----| -----|
+| afterOpen | 在组件打开后,或者更新时数据加载完毕后,执行该函数 |function(id) | - |
+| afterClose | 在组件关闭后,执行该函数 |- | - |
+| enhance | 在校验完成后,对提交数据进行处理的函数 |function(values) | - |
+| submitSuccess | 提交成功后,执行该函数,默认关闭该组件,并发送complete和changeKey事件 |function(result) | - |
+| submitFailed | 提交失败后,执行该函数,默认提示错误消息 |function(result) | - |
## 查看详情
@@ -110,16 +156,125 @@ export default {
mixins: [detail]
}
```
-2. 已有功能:
- * 自动加载当前记录数据
- * 关闭弹窗或者抽屉
- * 可通过父组件传入width参数,控制抽屉的宽度
-3. 相关配置:
- * baseApi:与列表页相同
- * visible:当前组件显示状态,默认为false
- * model:当前详情框详情数据
- * title:当前详情框标题
-4. 钩子函数:
- * afterOpen: 打开详情之后执行的函数
- * afterClose:关闭之后执行的函数
-
\ No newline at end of file
+
+2. 属性配置
+
+| 属性 | 说明 | 类型 |默认值 | 版本|
+| ------------- |:-------------| -----| -----| -----|
+| baseApi | 请求接口基础路径(必须配置)|String | / | - |
+| visible | 当前组件显示状态 | String | / | - |
+| model | 当前详情框详情数据 | object |{}|-|
+| title | 标题 | String |详情|-|
+| spinning | loading状态 | boolean | false | - |
+
+3.功能函数
+
+| 名称 | 说明 | 参数 | 版本|
+| ------------- |:-------------| -----| -----|
+| open | 打开详情(加载服务端数据)|function(id) | - |
+| close | 关闭详情 | - | - |
+| downloadFile | 下载文件(传入接口地址)| function(path) | **2.1.0** |
+
+4. 钩子函数
+
+| 属性 | 说明 | 参数 |
+| ------------- |:-------------| -----|
+| afterOpen | 打开之后的操作|function(id) |
+| afterClose| 关闭之后操作 | - |
+
+## 详解
+- 业务对象关联详解
+ - more: 值来源于*getMore*或*attachMoreList* 配置请求接口后返回的结果;
+ - getMore: 开启关联数据会从当前业务的/attachMore接口中读取,开启后优于attachMoreList使用;
+ - attachMoreList: **2.1.0 新增** 实现关联数据从/common/attachMore接口统一读取,配置如下:
+ ```javascript
+ // type:D(字典数据)/T(关联业务对象)
+ attattachMoreList: [
+ {
+ type: 'D', // 查询字典
+ target: 'GENDER' // 指向字典的 type = GENDER字段值
+ },
+ {
+ type: 'D', //查询字典
+ target: 'USER_STATUS' // 指向字典的 type = USER_STATUS字段值
+ },
+ {
+ type: 'T', // 查询对象
+ target: 'iamRole', // 指向IamRole对象
+ key: 'name', // 指向IamRole#name字段,需要查询作为key的字段名称
+ value: 'id' // 指向IamRole#id字段,需要查询作为value的字段名称
+ }
+ ]
+ ```
+ - attachMoreList 返回值会自动绑定至more属性中,上述配置样例返回值为(⚠️data的key规则是上述target的小驼峰命名 + KvList):
+ ```json
+ {
+ "code":0,
+ "data":{
+ "userStatusKvList":[
+ {
+ "k":"有效",
+ "v":"A"
+ }
+ ],
+ "iamRoleKvList":[
+ {
+ "k":"超级管理员",
+ "v":10000
+ }
+ ],
+ "genderKvList":[
+ {
+ "k":"女",
+ "v":"F"
+ },
+ {
+ "k":"男",
+ "v":"M"
+ }
+ ]
+ },
+ "msg":"操作成功"
+ }
+ ```
+ - 如非特殊,建议使用attachMoreList配置用以简化代码
+- 文件上传详解 (2.1.0新增)
+
+ **以下属性讲解,基于Upload组件** :point_right: [Upload.vue组件概述](/guide/diboot-antd-admin/组件.html#upload组件)
+ - isUpload: 标记当前form表单中是否包含上传属性,使用如:图片、文件,默认不包含,如果引入组件,请手动开启:
+ ```javascript
+ data() {
+ return {
+ isUpload: true
+ }
+ }
+ ```
+ - fileWrapper: 所有文件的集合都放置与fileWrapper对象中,提交的时候会自动遍历,然后提交至服务端进行数据处理:
+ - template内容
+ ```html{5}
+
+ ```
+ - script内容
+ ```javascript
+ data() {
+ return {
+ // 包含属性
+ fileWrapper: {
+ //存储form.slideshowImgs属性对应的文件集合
+ slideshowImgsList: []
+ }
+ }
+ }
+ ```
+ - fileUuidList: 如果包含上传,那么会自动构建文件的提交数据用于绑定当前对象
\ No newline at end of file
diff --git a/diboot-docs/guide/diboot-antd-admin/介绍.md b/diboot-docs/guide/diboot-antd-admin/介绍.md
index d8271ad..f1f93a3 100644
--- a/diboot-docs/guide/diboot-antd-admin/介绍.md
+++ b/diboot-docs/guide/diboot-antd-admin/介绍.md
@@ -28,4 +28,5 @@ diboot-antd-admin前端基础项目,是一个与diboot其他后端组件构成
* 登录人员管理界面;
* 角色与权限管理功能;
* 权限管理功能;
-* 登录日志管理功能。
+* 登录日志管理功能;
+* 预置上传、富文本、导入组件 **(2.1.0 新增)**
diff --git a/diboot-docs/guide/diboot-antd-admin/添加页面.md b/diboot-docs/guide/diboot-antd-admin/添加页面.md
index 9c47473..33b56f9 100644
--- a/diboot-docs/guide/diboot-antd-admin/添加页面.md
+++ b/diboot-docs/guide/diboot-antd-admin/添加页面.md
@@ -7,11 +7,25 @@
* 在**src/views**文件夹下创建页面对应的文件夹以及对应的页面组件文件
## 添加路由配置
+### 自动添加路由配置
+:point_right: [devtools 2.1.0 自动化生成您的前端页面](/guide/diboot-devtools/介绍)
+:::tip
+devtools 2.1.0为您提供了前端页面和后端接口的快速构建,赶快点击体验吧!!!
+:::
-* 后台菜单是根据路由配置自动生成的,具体可参考[路由与菜单](https://pro.loacg.com/docs/router-and-nav)
+### 手动添加路由配置
+* 后台菜单是根据路由配置自动生成的,具体可参考[路由与菜单](https://pro.antdv.com/docs/router-and-nav)
* 在**src/config/router.config.js**文件中,可以配置需要新增页面的路由。
-* 对于需要进行权限控制的菜单,需要放到asyncRouterMap中进行配置,其他不需要进行权限控制或所有人可用的菜单,可以放到constantRouterMap中。
-* 路由配置方式,可参考已有配置,如下:
+* 对于需要进行权限控制的菜单,~~需要放到asyncRouterMap中进行配置~~,其他不需要进行权限控制或所有人可用的菜单,可以放到constantRouterMap中。
+> 2.1.0版本之后devtools具有前端生成能力,因此手动添加路由不建议直接放在asyncRoutes路由中,而是交给**generateRouterMap**处理,由devtools生成的路由会自动写入generateRouterMap集合
+
+```javascript
+export const asyncRouterMap = []
+// 在router.config.js 末尾添加如下内容
+const generateRouterMap = []
+asyncRouterMap[0].children.splice(1, 0, ...generateRouterMap)
+````
+* 手动路由配置方式,可参考已有配置,如下:
```javascript
// 系统管理
diff --git a/diboot-docs/guide/diboot-antd-admin/组件.md b/diboot-docs/guide/diboot-antd-admin/组件.md
new file mode 100644
index 0000000..c863baf
--- /dev/null
+++ b/diboot-docs/guide/diboot-antd-admin/组件.md
@@ -0,0 +1,276 @@
+# 组件
+> diboot组件基于Ant Design Vue进行二次封装和业务调整,搭配devtools后端接口服务,**一键生成交互代码**,减少您的学习成本。
+::: tip
+以下内容为组件概述,实际开发时,建议直接使用devtools生成前端代码。
+:::
+## import组件
+> 路径:src/components/diboot/components/import/**.vue
+>
+> 功能:提供excel导入、示例下载、数据预览等功能
+
+- 属性
+
+| 名称 | 说明 | 类型 |默认值 | 必填|
+| ------------- |:-------------| -----| -----| -----|
+| exampleUrl |示例文件地址| string| -| Y|
+| uploadUrl |上传地址| string| -| Y|
+| previewUrl |预览地址| string| -| Y|
+| previewSaveUrl |预览后保存地址| string| -| Y|
+| fieldsRequired |提交时候必须的参数| object| {}| N|
+- 事件
+
+| 名称 | 说明 |
+| ------------- |:-------------|
+| finishedUpload |数据上传至数据库成功后触发|
+
+- 示例
+```vue
+
+
+
+
+
+
+```
+
+## richText组件
+> 概述:富文本组件基于quill封装,提供简单的富文本功能
+>
+> 路径:src/components/diboot/components/richText/**.vue
+>
+> 功能:**QuillEditor.vue(富文本组件)** 和 **QuillHtmlRender.vue(渲染富文本组件)**
+
+- QuillEditor.vue属性
+
+| 名称 | 说明 | 类型 |
+| ------------- |:-------------| -----|
+| value |v-decorator绑定的值| string|
+| placeholder |富文本框的提示| string|
+
+- QuillEditor.vue事件
+
+| 名称 | 说明 |
+| ------------- |:-------------|
+| change |直接使用v-decorator绑定属性值即可|
+
+- QuillEditor.vue示例
+```html
+
+
+```
+- QuillHtmlRender.vue属性
+
+| 名称 | 说明 | 类型 |
+| ------------- |:-------------| -----|
+| content |富文本内容| string|
+
+- QuillEditor.vue示例
+```html
+
+```
+## upload组件
+> 概述:基于Ant Design Vue的upload组件封装,更加贴合diboot接口服务
+>
+> 路径:src/components/diboot/components/upload/Upload.vue
+>
+> 功能:增加图片form校验、增强与后端接口交互,简化代码流程
+
+- 属性
+
+| 名称 | 说明 | 类型 |默认值 | 必填|
+| ------------- |:-------------| -----| -----| -----|
+| prefix |地址前缀(axios的baseUrl),用于图片回显| string| -| N|
+| action |向后端发送的请求地址| string| -| Y|
+| relObjType |绑定的业务对象类名| string| -| Y|
+| relObjField |绑定业务对象的属性| string| -| Y|
+| fileList |文件存储位置| array| -| Y|
+| listType |上传列表的内建样式,支持text/picture-card| string| text(isImage为true时,使用picture-card)| N|
+| limitCount |上传数量限制)| number| 1| N|
+| limitType |上传类型限制,不传默认所有文件,限制多个使用','分割| string| -| N|
+| limitSize |单个文件上传大小(M)| number| 2| N|
+| isImage |是否是图片,默认不是图片类型(主要用户上传后构建值)| boolean| false| N|
+| uploadText |上传框里面的文本| string| 上传| N|
+| value |v-decorator绑定的值| string| -| Y|
+
+
+- 事件
+
+| 名称 | 说明 |
+| ------------- |:-------------|
+| change |直接使用v-decorator绑定属性值即可|
+
+- 示例
+```vue
+
+
+
+
+
+
+
+
+```
\ No newline at end of file
diff --git a/diboot-docs/guide/diboot-element-admin/CRUD快速集成.md b/diboot-docs/guide/diboot-element-admin/CRUD快速集成.md
index cd441a5..3d0930e 100644
--- a/diboot-docs/guide/diboot-element-admin/CRUD快速集成.md
+++ b/diboot-docs/guide/diboot-element-admin/CRUD快速集成.md
@@ -2,9 +2,11 @@
## 开始之前
-* 在diboot-element-admin中,我们对CRUD等常用功能进行了一些抽象,将常用的列表、详情、新建、更新、删除等功能需要的相关属性与方法都抽象成了vue的mixins文件,这些文件在**src/components/diboot/mixins**文件夹下,强烈建议您先阅览以下他们。
+* 在diboot-element-admin中,我们对CRUD等常用功能进行了一些抽象,将常用的列表、详情、新建、更新、删除等功能需要的相关属性与方法都抽象成了vue的mixins文件,这些文件在**src/components/diboot/mixins**文件夹下。
* 也可以对已有的一些页面组件代码进行阅读,比如**src/views/system/iamUser**文件夹下的相关组件代码。
-
+::: tip
+在阅读文档之前,建议您准备好[diboot-element-admin 最新版的环境](https://github.com/dibo-software/diboot-element-admin/releases)源码环境,搭配代码使用更佳。
+:::
## 列表页
1. 引入列表的mixins文件,如下:
@@ -26,22 +28,56 @@ export default {
}
}
```
-4. 删除数据:直接在删除按钮上调用remove函数即可,传入需要删除的当前id。
-5. 导出数据:直接在导出按钮上调用exportData函数即可,将会传入当前查询参数,并异步下载文件。
-6. 自定义查询参数处理方法:重写rebuildQuery方法,接收mixins中已经定义的customQueryParam与queryParam的合并值,返回处理后的值,该方法将会在获取列表数据前或导出数据前被调用。
-7. 钩子函数:afterLoadList,在列表加载完毕将会执行该操作,另外,删除函数返回的是 Promise对象,所以可以使用.then在删除完毕时执行某些操作。
-8. 相关配置:
- * customQueryParam: 不会被搜索栏改变的初始查询参数对象,一般用于页面固定的查询参数
- * queryParam:与查询条件绑定的查询参数对象
- * more:当前对象的关联数据对象
- * getMore:是否在该页面初始化时加载当前对象的关联数据对象,加载的关联数据对象存储在more中,默认为false
- * getListFromMixin:是否在页面初始化时自动加载列表数据,默认为true
- * loadingData:标记页面加载数据状态
- * pagination:分页配置
- * baseApi:接口前缀(必须配置)
- * listApi:列表数据接口,默认为 /list
- * deleteApiPrefix:删除接口前缀,默认为 /
- * exportApi: 导出接口,默认为 /export
+4. 属性配置:
+
+| 属性 | 说明 | 类型 |默认值 | 版本|
+| ------------- |:-------------| -----| -----| -----|
+| primaryKey | 主键字段名 | string | id | **2.1.0** |
+| baseApi | 请求接口基础路径(必须配置)|String | / | - |
+| listApi | 列表数据接口| String | /list |- |
+| deleteApiPrefix | 删除接口前缀 | String | / | - |
+| exportApi | 导出接口| String |~~/export~~ /excel/export|~~2.0.5~~ **2.1.0**|
+| customQueryParam| 自定义参数(不被查询表单重置和改变的参数) | object | {} | - |
+| queryParam | 与查询条件绑定的参数(会被查询表单重置和改变的参数) | object | {} | - |
+| dateRangeQuery | 日期区间选择配置
**时间区间字段请放在这个对象中,会自动构建参与查询** | object | {} | **2.1.0** |
+| advanced | 高级搜索 展开/关闭 | boolean | false | **2.1.0** |
+| list | 存储列表数据 | array | [] |-|
+| getMore | 是否使mixin在当前业务的attachMore接口中自动获取关联数据
**:point_right:业务对象关联详解**| boolean | false | - |
+| attachMoreList | 获取关联数据列表的配置列表
**:point_right:业务对象关联详解** | array | [] | **2.1.0** |
+| more | 存储当前对象的关联数据对象
**:point_right:业务对象关联详解**| object | {} | - |
+| listFormatter| 是否将children转化为_children | boolean | true | - |
+| getListFromMixin| 是否在页面初始化时自动加载列表数据 | boolean | true | - |
+| loadingData | 标记页面加载数据状态 | boolean | false | - |
+| exportLoadingData| 标记导出文件时加载状态 | boolean | false | **2.1.0** |
+| pagination | 分页配置 | object | {pageSize: 10,current: 1,total: 0,showSizeChanger: true,pageSizeOptions: ['10', '20', '30', '50', '100']} | - |
+
+5. 功能函数
+
+| 名称 | 说明 | 参数 | 版本|
+| ------------- |:-------------| -----| -----|
+| handlePaginationChanged | 分页触发 |- | - |
+| appendSorterParam | 构建排序(绑定table的@sort-change)
**:point_right:列表排序详解**| - | **2.1.0** |
+| onSearch | 搜索,查询第一页(默认查询按钮触发)| - | - |
+| toggleAdvanced | 切换展示更多搜索框(绑定**advanced**属性)| - | **2.1.0** |
+| postList | post请求的获取列表(可以传递更长、更复杂参数) | - | - |
+| getList | get请求获取列表 | - | - |
+| menuCommand | 更新或者删除 | function(command, row) | - |
+| filterListData | 处理list中含有children字段的问题 | function(list) | - |
+| attachMore | 加载当前页面关联的对象或者字典,参考属性:getMore、attachMoreList、more | - | - |
+| reset | 重置查询 | - | - |
+| remove | 根据id删除 | function(id) | - |
+| exportData | 导出数据至excel | - | **2.1.0** |
+| downloadFile | 下载文件 | function(res) | **2.1.0** |
+| contentTransform | 处理查询参数中的moment数据 默认转化为YYYY-MM-DD | function(content, transform = {}) | **2.1.0** |
+| dateRange2queryParam | 构建区间查询参数,(转化dateRangeQuery属性内容) | - | **2.1.0** |
+
+6. 钩子函数
+
+| 名称 | 说明 | 参数 | 版本|
+| ------------- |:-------------| -----| -----|
+| afterLoadList | 加载数据之后操作 |function(list) | - |
+| rebuildQuery | 重新构建查询条件 (接收已经定义的customQueryParam与queryParam的合并值)|function(query) | - |
+
## 新建与更新
@@ -53,37 +89,50 @@ export default {
mixins: [form]
}
```
-2. 相同业务对象的新建与更新使用同一个表单组件,默认以抽屉形式打开,可在引入地方,直接调用该组件的open方法进行打开。
-3. 使用以上引入列表mixins的方式引入form的mixins文件,将会具有mixins中的所有能力。
-4. 已有功能:
- * open函数,可直接调用打开该表单
- * 提供根据open中参数情况自动切换新建与更新操作
- * 提供打开与关闭完成的钩子函数
- * 提供表单提交函数 onSubmit
- * 对form下校验规则的自动校验
- * 提供对校验的自定义操作
- * 提供校验完成后的enhance钩子函数,可对需要提交的数据进行再处理
- * 可以对新建数据或更新数据的方法重写
- * 提供提交成功与提交失败的钩子函数
- * 提供表单默认布局参数
- * 提供对关联数据的自动加载
- * 提供各项配置支持自定义接口等
-5. 相关配置:
- * baseApi:与列表页相同
- * createApi:新建接口,将自动拼接在baseApi之后,默认为 /
- * updateApiPrefix: 更新接口前缀,将自动拼接在baseApi之后,默认为 /
- * initFormData:表单初始数据(表示表单数据结构)
- * form: 更新时装载加载的原数据,新建时为上述initFormData数据的克隆
- * title:页面标题,默认为新建或更新
- * reloadMore:加载的关联数据对象,默认为{},如果list页面以及由more数据,且不与自身关联,可通过传参方式直接使用list中的more参数
- * getMore:初始化时是否加载reloadMore数据,默认为false
- * state:当前组件状态对象,默认为:{visible: false, confirmSubmit: false}
-6. 钩子函数:
- * afterOpen:在组件打开后,或者更新时数据加载完毕后,执行该函数
- * afterClose: 在组件关闭后,执行该函数
- * enhance:在校验完成后,对提交数据进行处理的函数
- * submitSuccess: 提交成功后,执行该函数,默认关闭该组件,并发送complete和changeKey事件
- * submitFailed: 提交失败后,执行该函数,默认提示错误消息
+2. 属性配置:
+
+| 属性 | 说明 | 类型 |默认值 | 版本|
+| ------------- |:-------------| -----| -----| -----|
+| primaryKey | 主键字段名 | string | id | **2.1.0** |
+| baseApi | 请求接口基础路径(必须配置)|String | / | - |
+| createApi | 新建接口,自动拼接在*baseApi*之后| String | / |- |
+| updateApiPrefix | 更新接口前缀,自动拼接在*baseApi*之后 | String | / | - |
+| title | 标题 | String |新建/更新|-|
+| initFormData| 表单初始数据(表示表单数据结构) | object | {} | - |
+| form| 更新时装载加载的原数据,新建时为上述initFormData数据的克隆 | object | {} | - |
+| getMore | 是否使mixin在当前业务的attachMore接口中自动获取关联数据
**:point_right:业务对象关联详解**| boolean | false | - |
+| attachMoreList | 获取关联数据列表的配置列表
**:point_right:业务对象关联详解** | array | [] | **2.1.0** |
+| more | 存储当前对象的关联数据对象
**:point_right:业务对象关联详解** | object | {} | - |
+| fullscreen | 当前组件全屏控制 | boolean | false | **2.1.0** |
+| state | 当前组件状态对象 | object | {visible: false, confirmSubmit: false} | - |
+| isUpload | 当前form是否包含上传
**:point_right:文件上传详解** | boolean | false | **2.1.0** |
+| fileWrapper | 文件包装容器
**:point_right:文件上传详解** | object | {} | **2.1.0** |
+| fileUuidList | 文件存储服务器后返回的唯一标识集合
**:point_right:文件上传详解** | array | [] | **2.1.0** |
+
+3. 功能函数
+
+| 名称 | 说明 | 参数 | 版本|
+| ------------- |:-------------| -----| -----|
+| open | 打开表单 (根据参数id存在与否,设置为更新or新建操作) |function(id) | - |
+| close | 关闭表单 |- | - |
+| validate | 提交前的验证流程 |- | - |
+| add | 新建记录的提交 |function(values) | - |
+| update | 更新记录的提交 |function(values) | - |
+| onSubmit | 表单提交事件 |- | - |
+| attachMore | 加载当前页面关联的对象或者字典,参考属性:getMore、attachMoreList、more |- | - |
+| filterOption | select选择框启用search功能后的过滤器 |- | - |
+| clearForm | 清除form内容(关闭的时候自动调用) |- | - |
+| __setFileUuidList__ | 设置文件uuid,参考属性:isUpload、fileWrapper、fileUuidList |- | - |
+| __defaultFileWrapperKeys__ | 初始化fileWrapper(关闭时候自动调用) |- | - |
+4. 钩子函数
+
+| 名称 | 说明 | 参数 | 版本|
+| ------------- |:-------------| -----| -----|
+| afterOpen | 在组件打开后,或者更新时数据加载完毕后,执行该函数 |function(id) | - |
+| afterClose | 在组件关闭后,执行该函数 |- | - |
+| enhance | 在校验完成后,对提交数据进行处理的函数 |function(values) | - |
+| submitSuccess | 提交成功后,执行该函数,默认关闭该组件,并发送complete和changeKey事件 |function(result) | - |
+| submitFailed | 提交失败后,执行该函数,默认提示错误消息 |function(result) | - |
## 查看详情
@@ -95,16 +144,147 @@ export default {
mixins: [detail]
}
```
-2. 已有功能:
- * 自动加载当前记录数据
- * 关闭弹窗或者抽屉
- * 可通过父组件传入width参数,控制抽屉的宽度
-3. 相关配置:
- * baseApi:与列表页相同
- * visible:当前组件显示状态,默认为false
- * model:当前详情框详情数据
- * title:当前详情框标题
-4. 钩子函数:
- * afterOpen: 打开详情之后执行的函数
- * afterClose:关闭之后执行的函数
-
\ No newline at end of file
+2. 属性配置
+
+| 属性 | 说明 | 类型 |默认值 | 版本|
+| ------------- |:-------------| -----| -----| -----|
+| baseApi | 请求接口基础路径(必须配置)|String | / | - |
+| visible | 当前组件显示状态 | String | / | - |
+| model | 当前详情框详情数据 | object |{}|-|
+| title | 标题 | String |详情|-|
+| fullscreen | 当前组件全屏控制 | boolean | false | **2.1.0** |
+
+3.功能函数
+
+| 名称 | 说明 | 参数 | 版本|
+| ------------- |:-------------| -----| -----|
+| open | 打开详情(加载服务端数据)|function(id) | - |
+| close | 关闭详情 | - | - |
+| downloadFile | 下载文件(传入接口地址)| function(path) | **2.1.0** |
+
+4. 钩子函数
+
+| 属性 | 说明 | 参数 |
+| ------------- |:-------------| -----|
+| afterOpen | 打开之后的操作|function(id) |
+| afterClose| 关闭之后操作 | - |
+
+## 详解
+- 列表排序详解
+ - 排序前端依赖element-ui的table组件中 **@sort-change** 事件,使用排序请设置 **@sort-change="appendSorterParam"**
+ - 点击排序后会自动排序当前查询的列表数据,不会调用接口查询,但会构建排序的规则,当点击查询时,会自动对相关字段进行排序查询
+ - 示例:
+ ```html {7,11-12}
+
+
+
+
+ {{ scope.row.createTime }}
+
+
+
+ ```
+- 业务对象关联详解
+ - more: 值来源于*getMore*或*attachMoreList* 配置请求接口后返回的结果;
+ - getMore: 开启关联数据会从当前业务的/attachMore接口中读取,开启后优于attachMoreList使用;
+ - attachMoreList: **2.1.0 新增** 实现关联数据从/common/attachMore接口统一读取,配置如下:
+ ```javascript
+ // type:D(字典数据)/T(关联业务对象)
+ attattachMoreList: [
+ {
+ type: 'D', // 查询字典
+ target: 'GENDER' // 指向字典的 type = GENDER字段值
+ },
+ {
+ type: 'D', //查询字典
+ target: 'USER_STATUS' // 指向字典的 type = USER_STATUS字段值
+ },
+ {
+ type: 'T', // 查询对象
+ target: 'iamRole', // 指向IamRole对象
+ key: 'name', // 指向IamRole#name字段,需要查询作为key的字段名称
+ value: 'id' // 指向IamRole#id字段,需要查询作为value的字段名称
+ }
+ ]
+ ```
+ - attachMoreList 返回值会自动绑定至more属性中,上述配置样例返回值为(⚠️data的key规则是上述target的小驼峰命名 + KvList):
+ ```json
+ {
+ "code":0,
+ "data":{
+ "userStatusKvList":[
+ {
+ "k":"有效",
+ "v":"A"
+ }
+ ],
+ "iamRoleKvList":[
+ {
+ "k":"超级管理员",
+ "v":10000
+ }
+ ],
+ "genderKvList":[
+ {
+ "k":"女",
+ "v":"F"
+ },
+ {
+ "k":"男",
+ "v":"M"
+ }
+ ]
+ },
+ "msg":"操作成功"
+ }
+ ```
+ - 如非特殊,建议使用attachMoreList配置用以简化代码
+- 文件上传详解 (2.1.0新增)
+
+ **以下属性讲解,基于Upload组件** :point_right: [Upload.vue组件概述](/guide/diboot-element-admin/组件.html#upload组件)
+ - isUpload: 标记当前form表单中是否包含上传属性,使用如:图片、文件,默认不包含,如果引入组件,请手动开启:
+ ```javascript
+ data() {
+ return {
+ isUpload: true
+ }
+ }
+ ```
+ - fileWrapper: 所有文件的集合都放置与fileWrapper对象中,提交的时候会自动遍历,然后提交至服务端进行数据处理:
+ - template内容
+ ```html{5}
+
+ ```
+ - script内容
+ ```javascript
+ data() {
+ return {
+ // 包含属性
+ fileWrapper: {
+ //存储form.slideshowImgs属性对应的文件集合
+ slideshowImgsList: []
+ }
+ }
+ }
+ ```
+ - fileUuidList: 如果包含上传,那么会自动构建文件的提交数据用于绑定当前对象
\ No newline at end of file
diff --git a/diboot-docs/guide/diboot-element-admin/介绍.md b/diboot-docs/guide/diboot-element-admin/介绍.md
index d1d1920..e2ef447 100644
--- a/diboot-docs/guide/diboot-element-admin/介绍.md
+++ b/diboot-docs/guide/diboot-element-admin/介绍.md
@@ -28,4 +28,5 @@ diboot-element-admin前端基础项目,是一个与diboot其他后端组件构
* 登录人员管理界面;
* 角色与权限管理功能;
* 权限管理功能;
-* 登录日志管理功能。
+* 登录日志管理功能
+* 预置上传、富文本、导入组件 **(2.1.0 新增)**
diff --git a/diboot-docs/guide/diboot-element-admin/添加页面.md b/diboot-docs/guide/diboot-element-admin/添加页面.md
index 67a1840..1d31c75 100644
--- a/diboot-docs/guide/diboot-element-admin/添加页面.md
+++ b/diboot-docs/guide/diboot-element-admin/添加页面.md
@@ -7,11 +7,25 @@
* 在**src/views**文件夹下创建页面对应的文件夹以及对应的页面组件文件
## 添加路由配置
-
+### 自动添加路由配置
+:point_right: [devtools 2.1.0 自动化生成您的前端页面](/guide/diboot-devtools/介绍)
+:::tip
+devtools 2.1.0为您提供了前端页面和后端接口的快速构建,赶快点击体验吧!!!
+:::
+### 手动添加路由配置
* 后台菜单是根据路由配置自动生成的,具体可参考[路由和侧边栏](https://panjiachen.github.io/vue-element-admin-site/zh/guide/essentials/router-and-nav.html)
* 在**src/router/index.js**文件中,可以配置需要新增页面的路由。
-* 对于需要进行权限控制的菜单,需要放到asyncRoutes中进行配置,其他不需要进行权限控制或所有人可用的菜单,可以放到constantRoutes中。
-* 路由配置方式,可参考已有配置,如下:
+* 对于需要进行权限控制的菜单,~~**需要放到asyncRoutes中进行配置**~~,其他不需要进行权限控制或所有人可用的菜单,可以放到constantRoutes中。
+> 2.1.0版本之后devtools具有前端生成能力,因此手动添加路由不建议直接放在asyncRoutes路由中,而是交给**generateRouterMap**处理,由devtools生成的路由会自动写入generateRouterMap集合
+
+```javascript
+export const asyncRoutes = []
+// 在src/router/index.js 末尾添加如下内容
+const generateRouterMap = []
+asyncRoutes.splice(0, 0, ...generateRouterMap)
+````
+
+* 手动路由配置方式,可参考已有配置,如下:
```javascript
// 系统管理
@@ -59,3 +73,5 @@
* permission:为显示该菜单所需要该用户具有的权限码,这个码会在稍后配置系统权限的时候自动代入。
* 如果不配置permission,将不会对该菜单进行权限验证,所有用户都可以访问该页面,如果permission的列表中配置了多个权限码,那么具有其中一个就将会具有当前菜单的访问权限。
* 配置完成后,就可以对这些页面进行访问了(如果配置了权限码,可以先使用具有管理员权限的账号访问到)。
+
+
diff --git a/diboot-docs/guide/diboot-element-admin/组件.md b/diboot-docs/guide/diboot-element-admin/组件.md
new file mode 100644
index 0000000..62fbcf9
--- /dev/null
+++ b/diboot-docs/guide/diboot-element-admin/组件.md
@@ -0,0 +1,253 @@
+# 组件
+> diboot组件基于element-ui进行二次封装和业务调整,搭配devtools后端接口服务,**一键生成交互代码**,减少您的学习成本。
+::: tip
+以下内容为组件概述,实际开发时,建议直接使用devtools生成前端代码。
+:::
+## import组件
+> 路径:src/components/diboot/components/import/**.vue
+>
+> 功能:提供excel导入、示例下载、数据预览等功能
+
+- 属性
+
+| 名称 | 说明 | 类型 |默认值 | 必填|
+| ------------- |:-------------| -----| -----| -----|
+| exampleUrl |示例文件地址| string| -| Y|
+| uploadUrl |上传地址| string| -| Y|
+| previewUrl |预览地址| string| -| Y|
+| previewSaveUrl |预览后保存地址| string| -| Y|
+| fieldsRequired |提交时候必须的参数| object| {}| N|
+- 事件
+
+| 名称 | 说明 |
+| ------------- |:-------------|
+| finishedUpload |数据上传至数据库成功后触发|
+
+- 示例
+```vue
+
+
+
+
+
+
+```
+
+## richText组件
+> 概述:富文本组件基于quill封装,提供简单的富文本功能
+>
+> 路径:src/components/diboot/components/richText/**.vue
+>
+> 功能:**QuillEditor.vue(富文本组件)** 和 **QuillHtmlRender.vue(渲染富文本组件)**
+
+- QuillEditor.vue属性
+
+| 名称 | 说明 | 类型 |
+| ------------- |:-------------| -----|
+| value |v-model绑定的值| string|
+| placeholder |富文本框的提示| string|
+
+- QuillEditor.vue事件
+
+| 名称 | 说明 |
+| ------------- |:-------------|
+| input |直接使用v-model绑定属性值即可|
+
+- QuillEditor.vue示例
+```html
+
+
+```
+- QuillHtmlRender.vue属性
+
+| 名称 | 说明 | 类型 |
+| ------------- |:-------------| -----|
+| content |富文本内容| string|
+
+- QuillEditor.vue示例
+```html
+
+```
+## upload组件
+> 概述:基于element-ui的upload组件封装,更加贴合diboot接口服务
+>
+> 路径:src/components/diboot/components/upload/Upload.vue
+>
+> 功能:增加图片form校验、增强与后端接口交互,简化代码流程
+
+- 属性
+
+| 名称 | 说明 | 类型 |默认值 | 必填|
+| ------------- |:-------------| -----| -----| -----|
+| prefix |地址前缀(axios的baseUrl),用于图片回显| string| -| N|
+| action |向后端发送的请求地址| string| -| Y|
+| relObjType |绑定的业务对象类名| string| -| Y|
+| relObjField |绑定业务对象的属性| string| -| Y|
+| fileList |文件存储位置| array| -| Y|
+| listType |上传列表的内建样式,支持text/picture-card| string| text(isImage为true时,使用picture-card)| N|
+| limitCount |上传数量限制)| number| 1| N|
+| limitType |上传类型限制,不传默认所有文件,限制多个使用','分割| string| -| N|
+| limitSize |单个文件上传大小(M)| number| 2| N|
+| isImage |是否是图片,默认不是图片类型(主要用户上传后构建值)| boolean| false| N|
+| uploadText |上传框里面的文本| string| 上传| N|
+| value |v-model绑定的值| string| -| Y|
+
+
+- 事件
+
+| 名称 | 说明 |
+| ------------- |:-------------|
+| input |直接使用v-model绑定属性值即可|
+
+- 示例
+```vue
+
+
+
+
+
+
+
+
+```
\ No newline at end of file