iview表格批量复制粘贴
- 页面引入jq,vue cli项目先npm install jquery --save,再在页面中引入jq
- 表格盒子外设置id(方便jq绑定盒子内部的粘贴事件),页面初始化给盒子绑定粘贴调用事件。
注意要在mounted初始化粘贴事件,否则粘贴事件会绑定不了
mounted(){
$("#tablebox").bind({paste: this.onPaste})
},
- 表格尽量用slot渲染,方便进行事件而截断,浏览器中能够进行粘贴事件的一般都是输入框,所以表格输入框进行粘贴操作时,进行粘贴截断,onpaste = "return false"阻止复制内容粘贴进入输入框
<template slot-scope="{ row, index }" slot="NAME">
<span v-if="!row.editBox">{{row.NAME}}</span>
<span v-else>
<i-input v-model="row.NAME" placeholder="请输入名称" onpaste = "return false"></i-input>
</span>
</template>
- 阻止复制内容粘贴后,进入获取复制内容,并处理该内容
onPaste(e){
let data = null;
let clipboardData = window.clipboardData;
if (!clipboardData) {
clipboardData = e.originalEvent.clipboardData
}
data = clipboardData.getData('Text');
let code = data.split(/[(\r\n)\r\n\s]+/);
let list = [];
let len = code.length;
let n = 10;
let lineNum = len % 10 === 0 ? len / 10 : Math.floor( (len / 10) + 1 );
for (let i = 0; i < lineNum; i++) {
let temp = code.slice(i*n, i*n+n);
if(temp[0]!=''){
list.push(temp);
}
}
this.pasteInfo(list)
},
pasteInfo(list){
if(list){
for(var i= list.length-1;i>=0;i--){
var data = {
ID:'',
TYPE:list[i][0] ? list[i][0]:"",
CODE:"",
NAME:list[i][1] ? list[i][1] :"",
CORP_ID:'',
CORP_CODE:"",
CORP_NAME: list[i][2] ? list[i][2] :"",
DEPT_ID:'',
DEPT_CODE:'',
DEPT_NAME: list[i][3] ? list[i][3] :"",
deptList: list[i][2] ? this.changeCrop(list[i][2]):[],
POST_ID:'',
POST_NAME: list[i][4] ? list[i][4] :"",
POST:'',
START_TIME: list[i][5] ? list[i][5] :"",
END_TIME: list[i][6] ? list[i][6] :"",
PRO_TYPE:'',
IMPORT_LEVEL:list[i][7] ? list[i][7] :"",
SCORP: list[i][8] ? Number(list[i][8]) :"",
SCORP_DATE:"",
LEADER_ID:'',
LEADER_NAME:"",
LEAD_SCORP: "",
APPENDIX_ID:'',
DESCRIPTION:list[i][9] ? list[i][9] :"",
editBox:true,
_checked:true,
}
this.TXJSData.unshift(data);
}
}
},