IVIEW组件的render方法在Table组件中的使用
后端项目地址:https://gitee.com/wlovet/table-server
前端项目地址: https://gitee.com/wlovet/table-project
一、Render函数之Table加入IVIEW组件与表格修改
render函数可以在表格中除了可以加入html组件还有iview组件,使用方法是在定义列的时候使用元素构造对象h渲染新元素
1 render:(h,params)=>{ 2 return h('div',{ 3 props:{ 4 }, 5 style:{ 6 } 7 },params.row) 8 }
支持修改则在表格列中加入
1 { 2 title: '操作', 3 key: 'action', 4 width: 200, 5 render: (h, params) => { 6 return h('div', [ 7 h('Button', { 8 props: { 9 type: params.row.$isEdit ? 'warning' : 'info', 10 size: 'small', 11 icon: '' 12 }, 13 style: { 14 marginRight: '5px', 15 }, 16 on: { 17 click: () => { 18 if (params.row.$isEdit) { 19 this.handleSave(params.row); 20 } else { 21 this.handleEdit(params.row); 22 } 23 } 24 } 25 },params.row.$isEdit? '保存':'修改'), 26 h('Poptip', { 27 props: { 28 confirm: true, 29 title: '是否要删除此字段?', 30 transfer: true 31 }, 32 on: { 33 'on-ok': () => { 34 //删除逻辑 35 } 36 }, 37 }, [ 38 h('Button', { 39 props: { 40 type: 'error', 41 size: 'small' 42 }, 43 style: { 44 marginRight: '5px' 45 }, 46 }, '删除') 47 ]), 48 ]) 49 } 50 }
在methods属性中加入两个方法handleEdit、handleSave
1 //点击了修改按钮 2 handleEdit(row) { 3 this.$set(row, "$isEdit", true); 4 }, 5 //点击了保存按钮 6 handleSave(row) { 7 this.$set(row, "$isEdit", false); 8 }
二、Render函数之Table单元格加入EChart图表
在单元格加入Echarts,首先导入加入echars包
1 //使用npm或cnpm下载echarts 2 cnpm install echarts -D 3 //在src/main.js文件中引入 4 import echarts from 'echarts' 5 Vue.prototype.$echarts = echarts
其次,在定义表格的列时
1 { 2 title: '比例图', 3 align: 'center', 4 render: (h, params) => { 5 return h('div', [ 6 h('canvas', { 7 style: { 8 height: '300px', 9 margin: '0', 10 padding: '0' 11 }, 12 on: {}, 13 attrs: { 14 //给单元格设置ID和类型 15 id: params.row.pictureType 16 } 17 }) 18 ]) 19 } 20 }
再次,在updated函数中使用echarts进行绘制。此处不在mounted方法里使用,因为绘制echarts表格是第二次渲染节点
1 updated() { 2 let self = this 3 self.pictureData.forEach((value, index) => { 4 self.paintChart(index, value) 5 }) 6 }
最后在methods中加入方法paintChart
1 //绘制图表 2 paintChart(i, params) { 3 if (params.pictureType === '柱形图') { 4 let chart = this.$echarts.init(document.getElementById(params.pictureType)); 5 let option = { 6 color: ['#3398DB'], 7 tooltip: { 8 trigger: 'axis', 9 axisPointer: { // 坐标轴指示器,坐标轴触发有效 10 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' 11 } 12 }, 13 grid: { 14 top: '4%', 15 left: '1%', 16 right: '1%', 17 bottom: '1%', 18 containLabel: true 19 }, 20 xAxis: [ 21 { 22 type: 'category', 23 data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], 24 axisTick: { 25 alignWithLabel: true 26 } 27 } 28 ], 29 yAxis: [ 30 { 31 type: 'value' 32 } 33 ], 34 series: [ 35 { 36 name: '直接访问', 37 type: 'bar', 38 barWidth: '60%', 39 data: [10, 52, 200, 334, 390, 330, 220] 40 } 41 ] 42 }; 43 chart.setOption(option) 44 } 45 } 46 }