使用之前先介绍一下静态变量ConstantsParam
静态变量ConstantsParam
- 1、引入 import { ConstantParams } from 'ele-plus'
- 2、变量内容
const constantParams = {
name:'ConstantsParam',
TABLECOLUMNSTYPE : {
IMAGE: {
key: 'img',
label: '图标',
style: 'width:30px;height:30px'
},
BUTTON: {
key: 'button',
label: '操作',
type: 'primary',
styleType: 'plain'
},
DATA: {
key: 'data'
}
},
FILTERTYPE : {
INPUT: {
key: 'input',
description: '输入框'
},
SELECT: {
key: 'select',
description: '选择框'
},
DATEPICKERRANGE: {
key: 'datepickerrange',
description: '日期范围',
format: 'yyyy-MM-dd'
},
DATEPICKER: {
key: 'datepicker',
description: '日期',
format: 'yyyy-MM-dd'
},
HIDDEN: {
key: 'hidden',
description: '隐藏输入框'
}
}
}
elp-table组件
1、引入指令
import {ElpTable} from 'ele-plus'
2、局部注册
components: {
ElpTable
}
3、全局注册
Vue.use(ElpTable)
4、属性
| 参数 |
说明 |
类型 |
是否必填 |
默认值 |
| tableData |
显示的数据 |
Array |
true |
|
| tableColumns |
表头和数据类型等 |
Array |
true |
|
| showRowNumber |
显示序号 |
Boolean |
false |
false |
| border |
竖线 |
Boolean |
false |
false |
| loading |
是否显示加载中 |
Boolean |
false |
false |
| rowClick |
是否触发行点击事件 |
Boolean |
false |
false |
| authority |
是否有多选操作权限 |
Boolean |
false |
false |
| clearSelectStatus |
清空多选框(监控该值发生改变会触发) |
Number |
false |
0 |
| fit |
列的宽度是否自撑开 |
Boolean |
false |
true |
5、事件
| 事件名 |
说明 |
参数 |
| handleClick |
若rowClick设置为true,则触发,或rowClick设置为false,tableColumns中设置handleClick事件触发 |
row |
| tableColumns设置的回调函数名 |
tableColumns设置的回调函数名 |
row |
| handleSelectionChange |
多选框触发选择 |
多选框选中列表 |
6、tableColumns说明
js文件模板
import { ConstantParams } from 'ele-plus'
const contractColumns = [
{
authority: true,
valueType: ConstantParams.TABLECOLUMNSTYPE.IMAGE.key,
label: ConstantParams.TABLECOLUMNSTYPE.IMAGE.label,
name: '',
value: [{
src: 'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=3300305952,1328708913&fm=27&gp=0.jpg',
callBackFunName: 'show1',
alt: '图片1',
style: ConstantParams.TABLECOLUMNSTYPE.IMAGE.style
},
{
src: 'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=3300305952,1328708913&fm=27&gp=0.jpg',
callBackFunName: 'show2',
alt: '图片2',
style: ConstantParams.TABLECOLUMNSTYPE.IMAGE.style
}],
fixed: 'left',
width: 50
},
{ label: '编号', name: 'number', fixed: 'left',formater:formaterIconV },
{ label: '名称', name: 'title', fixed: 'left', minWidth: 155 },
{ label: '使用名', name: 'name', fixed: 'left' },
{ label: 'ID', name: 'mechNo' },
{ label: '账号', name: 'account' },
{ label: '省份', name: 'province' },
{ label: '类型', name: 'signTypeVal' },
{ label: '金额', name: 'amount' },
{ label: '对应名', name: 'opptyName', minWidth: 155 },
{ label: '开始日期', name: 'startTime', formater, width: 140 },
{ label: '结束日期', name: 'endTime', formater, width: 140 },
{ label: '当前阶段', name: 'stateVal' },
{ label: '创建人', name: 'creator' },
{ label: '创建时间', name: 'createTime', formater, width: 140 },
{ label: '驳回原因', name: 'rejectReason' },
{
authority: true,
valueType: ConstantParams.TABLECOLUMNSTYPE.BUTTON.key,
label: ConstantParams.TABLECOLUMNSTYPE.BUTTON.label,
name: '',
value: [{
label: '编辑',
entity: ConstantParams.TABLECOLUMNSTYPE.BUTTON,
callBackFunName: 'show3'
},
{ label: '查看',
entity: ConstantParams.TABLECOLUMNSTYPE.BUTTON,
callBackFunName: 'show4'
}
],
fixed: 'right',
width: 50
},
{
authority: true,
valueType: ConstantParams.TABLECOLUMNSTYPE.BUTTON.key,
label: ConstantParams.TABLECOLUMNSTYPE.BUTTON.label,
name: '',
value: [{
label: '查看',
entity: ConstantParams.TABLECOLUMNSTYPE.BUTTON,
callBackFunName: 'handleClick'
}
],
fixed: 'right',
width: 100
}
]
function formater(v) {
const cFormat = '{y}-{m}-{d} {h}:{i}'
const val = v === null || v === 'null' ? '------' : parseTimeMilliSecond(v, cFormat)
return val
}
function formaterByDay(v) {
const cFormat = '{y}-{m}-{d}'
return v === null || v === 'null' ? '------' : parseTimeMilliSecond(v, cFormat)
}
function formaterIconV(v){
return {value:v,icon:'edit'}
}
结构说明:
| 参数 |
说明 |
类型 |
是否必填 |
| valueType |
ConstantsParam.TABLECOLUMNSTYPE的数据key值 |
String |
false(不添加默认为data) |
| authority |
是否有权限查看 |
Boolean |
false(不添加默认有权限) |
| label |
列标题名称 |
String |
true |
| name |
字段名 |
String |
false(按钮或图标内容不需要) |
| width |
列宽 |
Number |
false(默认为50) |
| minWidth |
最小列宽(若超过了宽度显示'...',并有Popover提示全部内容) |
Number |
false |
| fixed |
固定列 |
'left'或'right' |
|
| formater |
转换数据的回调函数 |
Function |
false |
formater回调函数
- 1、参数:第一个参数为name对应的值,第二个参数为row
- 2、普通数据
function formater(v){
return v+'test'
}
function formaterNewname(v,row){
return v + row.name
}
function formaterIconV(v){
return {value:v,icon:'edit'}
}
图标
- 1、valueType: ConstantsParam.TABLECOLUMNSTYPE.IMAGE.key(不可变)
- 2、label: ConstantsParam.TABLECOLUMNSTYPE.IMAGE.label(列标题可修改)
- 3、value:数组(可以设置多个图片),数据结构
| 列名 |
说明 |
| src |
图片地址 |
| callBackFunName |
回调函数名称(会抛出该事件) |
| alt |
图片说明 |
| style |
图片样式(可修改)默认是:'width:30px;height:30px' |
按钮
- 1、valueType: ConstantsParam.TABLECOLUMNSTYPE.BUTTON.key(不可变)
- 2、label: ConstantsParam.TABLECOLUMNSTYPE.BUTTON.label(列标题可修改)
- 3、value:数组(可以设置多个按钮),数据结构
| 列名 |
说明 |
| label |
名称 |
| entity |
按钮样式默认ConstantsParam.TABLECOLUMNSTYPE.BUTTON |
| callBackFunName |
回调函数名称(会抛出该事件) |
- 4、ConstantsParam.TABLECOLUMNSTYPE.BUTTON
| 列名 |
说明 |
默认值 |
可选项 |
| key |
不可修改 |
'button' |
|
| label |
可修改、显示名称 |
'操作' |
|
| type |
可修改对应el-button中的type |
'primary' |
|
| styleType |
可修改 |
'plain' |
plain/round/disabled |
| icon |
可修改 |
|
对应elementUI中的icon名称 |
<template>
<elp-table
:loading="listLoading"
:table-data="dataTable"
:table-columns="dataColumns"
:border="true"
:fit="true"
/>
</template>
<script>
import {ElpTable} from 'ele-plus'
import {
Interface
} from '@/interface/interface.js'
export default {
components:{
ElpTable,
},
data(){
return {
listLoading: false,
dataColumns: [
{ label: '日期', name: 'date'},
{ label: '值', name: 'value'},
]
,
dataTable:[],
total:0,
pageSize:10,
pageNum:1,
pageSizes:[10,20,50,100]
}
},
created(){
this.$nextTick(()=>{
this.getTableDataList()
})
},
methods:{
getTableDataList(){
this.listLoading = true
const params = {}
Interface(params).then(rest=>{
this.listLoading = false
const {list,pageNum,pageSize,pages,total} = rest.result
this.total = total
this.pageSize = pageSize
this.pages = pages
this.dataTable = list
})
},
query(v){
console.log('query',v)
},
exportReport(formItems){
console.log('export',formItems)
}
}
}
</script>
elp-filter-operator组件
1、引入
import {ElpFilterOperator} from 'ele-plus'
2、局部注册
components: {
ElpFilterOperator
}
3、全局注册
Vue.use(ElpFilterOperator)
4、属性
| 参数 |
说明 |
类型 |
是否必填 |
默认值 |
| items |
内容 |
Array |
true |
|
5、事件
| 事件名 |
说明 |
参数 |
| query |
点击回调和查询触发事件(已增加防抖) |
查询条件已对象形式返回如:{name:'logmei',sex:'0'} |
6、items的数据结构
| 字段名 |
类型 |
说明 |
| name |
String |
字段名称(用于后端交互) |
| type |
ConstantParams.FILTERTYPE的key值 |
INPUT/SELECT/DATEPICKERRANGE/DATEPICKER/HIDDEN |
| label |
String |
说明label |
| value |
String/Array |
默认值(type为datepickerrange时['2019-09-01','2019-09-06']) |
| placeholder |
String |
|
| style |
Object |
样式 |
| className |
String |
类名 |
| list |
Array |
type为select时的列表[{key:'0',label:'女'},{key:'1',label:'男'}] |
| format |
String |
日期控件格式转换 |
| valueFormat |
String |
设置返回值的格式 |
| clearable |
Boolean |
是否显示清除按钮 |
| pickerOptions |
Object |
日期控件配置的pickerOptions |
| inchain |
Object |
联动下拉框例如:{Selectinchain:true,child:1,interface}其中Selectinchain代表需要触发change事件调用interface为下个联动下来框赋值 |
searchParams:[
{name:'name',type:'input',label:'姓名',value:'',placeholder:'姓名1',style:{width:'200px'}},
{name:'sex',type:'select',label:'性别',value:'0',list:[{key:'0',label:'女'},{key:'1',label:'男'}],className:'selectSex'},
{name:'province',type:'select',label:'省',value:'',inchain:{Selectinchain:true},list:[{key:'',label:'全部'},{key:'110000',label:'北京'},{key:'120000',label:'天津'}]},
{name:'city',type:'select',label:'市',value:'',inchain:{Selectinchain:true,child:1},interface:city,list:[{key:'',label:'全部'}]},
{name:'area',type:'select',label:'区',value:'',inchain:{child:2},interface:area,list:[{key:'',label:'全部'}]},
{name:'province1',type:'select',label:'省1',value:'',inchain:{Selectinchain:true},list:[{key:'',label:'全部'},{key:'110000',label:'北京'},{key:'120000',label:'天津'}]},
{name:'city1',type:'select',label:'市1',value:'',inchain:{Selectinchain:true,child:1},interface:city,list:[{key:'',label:'全部'}]},
{name:'area1',type:'select',label:'区1',value:'',inchain:{child:2},interface:area,list:[{key:'',label:'全部'}]},
{
name:'daterange'
,type:'datepickerrange'
,label:'选择日期范围'
,value:undefined
,format:'yyyy-MM-dd'
,clearable:false
, pickerOptions:{
onPick:({minDate})=>{
this.selectDate = minDate
},
disabledDate:(time) => {
let currentTime = new Date(this.selectDate)
const thirtyOne = 31*24*60*60*1000
const start = currentTime-thirtyOne
const end = start+62*24*60*60*1000
return time.getTime() > end || time.getTime() < start
}
}
},
{name:'date'
,type:'datepicker'
,label:'选择日期'
,value:undefined
,format:'yyyy-MM-dd'
,valueFormat:'yyyy-MM-dd'
,clearable:false
, pickerOptions:{
disabledDate:(time) => {
return time.getTime() > Date.now()
}
}
},
{name:'guid',type:'hidden',label:'',value:count}
],
7、slot
| name |
说明 |
参数 |
| buttons |
按钮默认是重置和查询 |
查询参数值 |
| otherButtons |
可以添加新的按钮 |
查询参数值 |
const formItems = [
{name: "name",value: "logmei"},
{name: "sex",value: "女"},
{name: "daterange",value: ["2019-09-01" , "2019-09-06"]},
{name: "date",value: "2019-09-01"},
{name: "guid",value: 0},
]
<elp-filter-operator
ref="filterOperatorRef"
:items.sync="searchParams"
@query="query"
>
<template v-slot:buttons="formItems">
<el-button type="primary" @click="query(formItems)">查询</el-button>
</template>
<template v-slot:otherButtons="formItems">
<el-button type="primary" @click="exportFile(formItems)">导出</el-button>
</template>
</elp-filter-operator>
elp-controller-table组件
elp-filter-operator、elp-table、elp-pagination、elp-dialog组合组件,通过tableColumns和searchParams来显示查询条件和列表,以提供的tableDataInterface接口来查询条件,重置、查询、分页自动绑定查询接口,行操作默认支持弹出框显示详情,弹出框保留slot来渲染内容;也可以通过设置dialogDefault来设置是否自己做具体的内容显示。(详细使用说明请往下看)
1、引入指令
import {ElpControllerTable} from 'ele-plus'
2、局部注册
components: {
ElpControllerTable
}
3、全局注册
Vue.use(ElpControllerTable)
4、属性
| 参数 |
说明 |
类型 |
是否必填 |
默认值 |
| tableDataInterface |
查询数据接口 |
Function |
true |
|
| searchParams |
elp-filter-operator组件的items |
Array |
true |
|
| tableColumns |
elp-table组件的tableColumns |
Array |
true |
|
| fit |
列的宽度是否自撑开 |
Boolean |
false |
true |
| showRowNumber |
是否显示序号 |
Boolean |
false |
false |
| border |
是否显示竖线 |
Boolena |
false |
false |
| dialogTitle |
elp-dialog需要的title |
String |
false |
'' |
| slideType |
elp-dialog弹出效果 |
String |
false |
'center' |
| dialogDefault |
查看详情是否使用默认弹出框true(使用默认弹出框)、false(使用detail插槽) |
Boolean |
false |
true |
| authority |
elp-table使用的是否有多选操作权限 |
Object |
false |
{operator:false} |
| reload |
是否重新加载数据 |
Boolean |
false |
false |
| prevText |
分页上一页显示的text |
String |
false |
'' |
| nextText |
分页下一页显示的test |
String |
false |
'' |
| pageSizes |
每页显示个数选择器的选项设置 |
Array |
false |
[5, 10, 20, 30, 50] |
5、事件
| 事件名 |
说明 |
参数 |
| handleClick |
若rowClick设置为true,则触发,或rowClick设置为false,tableColumns中设置handleClick事件触发 |
row |
| handleSelectionChange |
多选框触发选择 |
多选框选中列表 |
| dialogOpened |
弹出框弹出事件 |
|
| dialogClosed |
弹出框弹出事件 |
|
| dialogDrag |
弹出框弹出事件 |
|
| dialogClose |
弹出框弹出事件 |
|
6、slot
| name |
说明 |
参数 |
| default |
默认弹出框内容 |
row |
| detail |
自定义内容 |
row |
| filterButtons |
按钮默认是重置和查询 |
查询参数值 |
| filterOtherButtons |
可以添加新的按钮 |
查询参数值 |
const formItems = [
{name: "name",value: "logmei"},
{name: "sex",value: "女"},
{name: "daterange",value: ["2019-09-01" , "2019-09-06"]},
{name: "date",value: "2019-09-01"},
{name: "guid",value: 0},
]
<template v-slot:filterButtons="formItems">
<el-button type="primary" @click="query(formItems)">查询</el-button>
</template>
<template v-slot:filterOtherButtons="formItems">
<el-button type="primary" @click="exportFile(formItems)">导出</el-button>
</template>
<template v-slot:detail="row">
<elp-dialog
:visible.sync="dialogVisible"
>
first--------- {{row}}
</elp-dialog>
</template>
7、示例
- 1、elp-controller-table使用示例
<template>
<elp-controller-table
dialog-title="内容"
border
:table-data-interface="tableDataInterface"
:search-params="searchParams"
:table-columns="contractColumns"
:show-row-number="true"
:prevText="'上一页'"
:nextText="'下一页'"
:dialogDefault="false"
@handleClick="dialogVisible=true"
>
<template v-slot:detail="row">
<elp-dialog
:visible.sync="dialogVisible"
>
{{row}}
</elp-dialog>
</template>
</elp-controller-table>
</template>
<script>
import TableList from './interface.js'
import contractColumns from './tableColumns.js'
export default {
data(){
return {
dialogVisible:false,
tableDataInterface:TableList,
contractColumns:contractColumns,
searchParams:[
{name:'name',type:'INPUT',label:'姓名',value:'',placeholder:'姓名1',style:{width:'200px'}},
{name:'sex',type:'SELECT',label:'性别',value:'0',list:[{key:'0',label:'女'},{key:'1',label:'男'}],className:'selectSex'},
{name:'daterange',type:'DATEPICKERRANGE',label:'选择日期范围',value:['2019-09-01','2019-09-06'],format:'yyyy-MM-dd'},
{name:'date',type:'DATEPICKER',label:'选择日期',value:'2019-09-01',format:'yyyy-MM-dd',valueFormat:'yyyy-MM-dd'},
{name:'guid',type:'HIDDEN',label:'',value:'1'}
],
}
},
methods:{
}
}
</script>
import { parseTimeMilliSecond } from '@/utils/index.js'
import { ConstantParams } from 'ele-plus'
const contractColumns = [
{ label: '合同名称', name: 'title', fixed: 'left', minWidth: 155 ,formater: formaterIconV},
{ label: '客户名称', name: 'name', fixed: 'left' },
{ label: '机构ID', name: 'mechNo' },
{ label: '智慧脸账号', name: 'account' },
{ label: '省份', name: 'province' },
{ label: '签约类型', name: 'signTypeVal' },
{ label: '合同金额', name: 'amount' },
{ label: '对应商机', name: 'opptyName', minWidth: 155 },
{ label: '合同开始日期', name: 'startTime', formater: formaterByDay, width: 140 },
{ label: '合同截止日期', name: 'endTime', formater: formaterByDay, width: 140 },
{ label: '审批状态', name: 'approvalStateVal' },
{ label: '一级审批人', name: 'firApprPer', width: 100 },
{ label: '二级审批人', name: 'secApprPer', width: 100 },
{ label: '当前阶段', name: 'stateVal' },
{ label: '创建人', name: 'creator' },
{ label: '创建时间', name: 'createTime', formater, width: 140 },
{ label: '驳回原因', name: 'rejectReason' },
{
authority: true,
valueType: ConstantParams.TABLECOLUMNSTYPE.BUTTON.key,
label: ConstantParams.TABLECOLUMNSTYPE.BUTTON.label,
name: '',
value: [{
label: '查看',
entity: ConstantParams.TABLECOLUMNSTYPE.BUTTON,
callBackFunName: 'handleClick'
}
],
fixed: 'right',
width: 100
}
]
function formater(v) {
const cFormat = '{y}-{m}-{d} {h}:{i}'
const val = v === null || v === 'null' ? '------' : parseTimeMilliSecond(v, cFormat)
return val
}
function formaterByDay(v) {
const cFormat = '{y}-{m}-{d}'
return v === null || v === 'null' ? '------' : parseTimeMilliSecond(v, cFormat)
}
function formaterIconV(v){
return {value:v,icon:'edit'}
}
export default contractColumns
export default function(params){
console.log('params',params)
return new Promise(resolve => {
resolve(
{
'code': 0,
'msg': 'success',
'result': {
'pageNum': 0,
'pageSize': 5,
'size': 2,
'startRow': 1,
'endRow': 1,
'total': 20,
'pages': 2,
'list': [
{
'guid': '122749434e7e414d87ebbe6e1fd4c62d',
'busGuid': '196749434e7e414d87ebbe6e1fd4c62d',
'apprProGuid': 'ef86b64853354551ae9a363e7723a8bd',
'number': '1000001',
'title': null,
'name': null,
'mechNo': null,
'account': null,
'province': '北京',
'signType': '1',
'signTypeVal': '软件收费版',
'amount': 1000,
'opptyName': '渐酒空金榼 花困蓬瀛',
'startTime': 1560156009000,
'endTime': 1560156013000,
'approvalState': 0,
'approvalStateVal': '待审批',
'firstLevelApprPer': null,
'secondLevelApprPer': null,
'state': 1,
'stateVal': '签约',
'creator': '于希德2',
'createTime': 1560156002000,
'rejectReason': null
},
{
'guid': '196749434e72344d87ebbe6e1fd4c62d',
'busGuid': '196749434e7e414d87ebbe6e1fd4c62d',
'apprProGuid': 'ef86b64853354551ae9a363e7723a8bd',
'number': '1000001',
'title': 'title',
'name': 'name',
'mechNo': 'mechNo',
'account': 'account',
'province': '北京',
'signType': '1',
'signTypeVal': '软件收费版',
'amount': 1000,
'opptyName': '渐酒空金榼 花困蓬瀛',
'startTime': 1560156009000,
'endTime': 1560156013000,
'approvalState': 0,
'approvalStateVal': '待审批',
'firstLevelApprPer': null,
'secondLevelApprPer': null,
'state': 1,
'stateVal': '签约',
'creator': '于希德2',
'createTime': 1560156002000,
'rejectReason': 'reason'
}
],
'prePage': 0,
'nextPage': 1,
'isFirstPage': false,
'isLastPage': false,
'hasPreviousPage': false,
'hasNextPage': true,
'navigatePages': 8,
'navigatepageNums': [
1
],
'navigateFirstPage': 1,
'navigateLastPage': 1,
'lastPage': 1,
'firstPage': 1
}
}
)
})
}