组件文档
1.FormItem
引用方式
import FormItem from "@/components/FormItem";
参数列表
参数名 | 说明 | 类型 | 可选值 | 默认值 | |
---|---|---|---|---|---|
type | 表单元素类型 | string | |||
prop | 表单字段名称 | String | – | ||
value | 表单双向绑定的值 | String, Number, Boolean, Array, Object | |||
label | 表单lebel | String | |||
placeholder | 表单元素中的提示语 | String | |||
disabled | 表单元素是否禁用 | Boolean | false | ||
options | 表单元素type类型是select时需要传入该字段 | Array | |||
width | 表单元素宽度,注意要带上px单位 | String | |||
suffix | 输入框尾部内容,输入框尾部内容,只对 type=”text” 有效 | ||||
clearable | 表单元素是否可以清空 | Boolean | true | ||
filterable | select 是否可搜索 | Boolean | false | ||
activeText | switch 打开时的文字描述 | String | 是 | ||
inactiveText | switch 关闭时的文字描述 | String | 否 | ||
size | 输入框尺寸,只在 type!=”textarea” 时有效 | String | medium / small / mini |
支持渲染的标签
- Input
- InputNumber
- Select
- DatePicker (date,month,daterange)
- Switch
代码示例见FilterForm
2.FilterForm 过滤表单
引用方式
import FilterForm from "@/components/FilterForm";
参数列表
参数名 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
formConfig | 过滤条件表单项配置 | Array | [] | |
formData | 表单双向绑定的数据 | Object | {} | |
inline | 行内表单模式 | Boolean | false | |
labelWidth | 表单域标签的宽度,例如 ’50px’。作为 Form 直接子元素的 form-item 会继承该值。支持 auto。 | String | – | “80px” |
方法
方法名 | 说明 | 参数 |
---|---|---|
handleSubmit | 点击查询按钮调用该方法,触发父组件身上的submit事件,把formData传出去 | – |
handleReset | 点击重置按钮调用该方法 ,实际调用el-form自身的resetFields对整个表单进行重置,将所有字段值重置为初始值并移除校验结果 。,触发父组件身上的submit事件,把formData传出去 | – |
代码示例见FilterTablePagination
3.BasicTable 基于el-table对表格组件进行二次封装
参数列表
参数名 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
tableData | 表格显示的数据 | Array | [] | |
columns | 表格的列数据 | Array | [] | |
loading | 表格数据加载中的loading效果 | Boolean | false | |
multipleSelection | 表格多选时需要传入此参数,会存放表格多选时选中的row | Array | – | [] |
showOverflowTooltip | 当内容过长被隐藏时显示 tooltip | Boolean | – | false |
方法
方法名 | 说明 | 参数 |
---|---|---|
handleSelectionChange | 表格的events selection-change上绑定该方法 ,当选择项发生变化时会触发该事件。实际会触发父上的selectionChange把selection参数传出去 | selection。 |
clearAll | 点击清空时调用 ,实际调用el-table自身的clearSelection清空多选表格用户的选择,父要调用直接使用ref调用子组件身上的方法 | – |
注意
1.如果需要对表格单元格内容进行格式化时需要给el-table-column添加formatter方法,此方法不能直接封装在slot插槽中。所以在封装中设置了2个列,根据column配置中是否传入custom字段进行区分。如果custom为true则使用自定义列,比如可以设置可编辑的单元格之类的。如果不传custom则使用普通列,列上配置formatter属性。代码如下:
<el-table :data="tableData" ref="basicTableRef" style="width: 100%" border @selection-change="handleSelectionChange" v-loading="loading" :header-cell-class-name="getHeaderCellClassName || ''">
<template v-for="(item,index) in columns">
<el-table-column v-if="['index','selection'].includes(item.type)" :type="item.type" :key="index" :label="item.label" :align="item.align || 'center'" v-bind="item.attrs || {}" width="55" :selectable="item.selectable">
</el-table-column>
<!-- 自定义列模板 columns数组中item需要定义custom字段 -->
<el-table-column v-else-if="item.custom" :width="item.width" v-bind="item.attrs || {}" :key="item.prop+'custom'" :show-overflow-tooltip='item.showOverflowTooltip || false'>
<template slot="header" slot-scope="{$index,column}">
<slot :name='item.prop +"_header"' :$index='$index' :column="column" :label="item.label">{{item.label}}</slot>
</template>
<template slot-scope="{$index,row,column}">
<slot :name="item.prop" :$index='$index' :row="row" :column="{...column,...item}">
{{row[item.prop]}}
</slot>
</template>
</el-table-column>
<el-table-column v-else :prop="item.prop" :label="item.label" :formatter="item.formatter" :width="item.width" v-bind="item.attrs || {}" :key="item.prop">
<template slot="header" slot-scope="{$index,row,column}">
<slot :name='item.prop +"_header"' :$index='$index' :column="column" :label="item.label">{{item.label}}</slot>
</template>
</el-table-column>
</template>
</el-table>
类似这样的column项会报错
{
prop: 'status',
label: '项目估值状态',
attrs: {'min-width': 96},
formatter: (row, column, cellValue, index) => {
return this.$createElement('el-tag', {
props: {
type: this.calculateByValueStatus(cellValue).statusType,
hit: true
}
}, this.calculateByValueStatus(cellValue).statusText)
}
},
代码示例见FilterTablePagination
4.Pagination 基于el-pagination 对分页组件进行二次封装
参数名 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
currentPage | 当前页 | Number | 1 | |
pageSize | 每页条数 | Number | 10 | |
total | 列表总数 | Number | 0 |
像其他的一些配置比如pageSizes,layout属性维护在组件的data中,方便统一维护
方法
方法名 | 说明 | 参数 |
---|---|---|
onSizeChange | 当切换每页显示条数时触发,每次切换会把currentPage置为1。并且会直接改变父组件的pageSize。此处会触发父组件的page-change事件 | – |
onCurrentChange | 当切换页码时触发;并且会直接改变父组件的currentPage。此处会触发父组件的page-change事件 | – |
注意:由于FilterTablePagination中使用该组件的方式是.sync。所以已经实现了双向绑定
<Pagination :currentPage.sync='paginationProps.currentPage' :pageSize.sync='paginationProps.pageSize' :total='paginationProps.total'/>
至此,一个页面的三个部分:过滤条件查询,表格展示,分页就已经完成封装了,分别对应FilterForm,BasicTable,Pagination。
这里我们还进行了一个组合式的封装,可以针对大部分普通的表格展示页面,如果有一些复杂的表格,比如表格单元格可编辑,表格行可编辑,这里还没有封装,可以后期根据业务需求扩展。
4.FilterTablePagination
基于FilterForm,BasicTable,Pagination三个组件组合合成的。
参数列表
参数名 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
formProps | 过滤表格组件需要传递的props集合 | Object | – | – |
tableProps | 表格组件需要传递的props集合 | Object | – | – |
paginationProps | 分页组件需要传递的props集合 | Object – | – |
Events (传递给子组件的方法)
方法名 | 说明 | 参数 |
---|---|---|
submit | 该事件是FilterForm组件会触发的。此处因为是组合组件,实际也是会进行转发,会再触发父组件传过来的loadData方法,进行数据请求 | – |
reset | 该事件是FilterForm组件会触发的。此处因为是组合组件,实际也是会进行转发,会再触发父组件传过来的loadData方法,进行数据请求 | – |
page-change | 该事件是Pagination组件会触发的。此处因为是组合组件,实际也是会进行转发,会再触发父组件传过来的loadData方法,进行数据请求 | – |
使用方式
见页面 filterTablePaginationPage
业务中需要关注的地方
1.传入表单,表格,分页需要的相关配置项
2.传入请求列表的参数
3.传入请求列表的方法loadData
4.如果表格有操作项,比如新增,编辑,删除,导出等操作,
所以上面业务中一些通用的数据和方法可以封装在一个mixin中进行逻辑复用。见QueryTablePaginationMixin.js中
© 版权声明
文章版权归作者所有,未经允许请勿转载,侵权请联系 admin@trc20.tw 删除。
THE END