This commit is contained in:
linfso 2024-07-03 06:32:03 +08:00
parent b2fd5a9a9a
commit ef5f6d3041
2 changed files with 73 additions and 53 deletions

View File

@ -111,7 +111,7 @@
</slot>
</div>
<div>
<orig-table ref="table" :config="config" v-dragSelect class="xd-tb-wrapper" />
<orig-table ref="table" :key="refreshKeyId" :config="config" v-dragSelect v-dragColumn class="xd-tb-wrapper" />
<pagination
v-show="total>0 && showPagination"
:total="total"
@ -128,7 +128,7 @@
<ul class="el-dropdown-menu el-popper el-dropdown-menu--medium"
style="transform-origin: center top; z-index: 2009;width: 180px;"
x-placement="bottom-end">
<li class="el-dropdown-menu__item" > <span @click="handleCopySelect(null,$event)">复制</span></li>
<li class="el-dropdown-menu__item" > <span @click.stop="handleCopySelect(null,$event)">复制</span></li>
<!-- <li class="el-dropdown-menu__item" > <span @click="handleCopySelect(null,$event)">复制选中数据</span></li> -->
<!-- <li class="el-dropdown-menu__item" > <span @click="handleCopySelect(null,$event)">复制行</span></li> -->
<!-- <li class="el-dropdown-menu__item" > <span @click="handleCopySelect(null,$event)">复制列</span></li> -->
@ -247,10 +247,9 @@ export default {
// 指令的定义
inserted: function (el, binding, vnode) {
var oDiv = el;
var tbBodyDiv=oDiv.getElementsByClassName("el-table__body-wrapper")[0];
//监听用户鼠标事件
oDiv.onmousedown = function (ev) {
tbBodyDiv.onmousedown = function (ev) {
var evt = window.event || arguments[0];
var flag = true;
// 鼠标右键菜单
@ -258,7 +257,7 @@ export default {
if(evt.button == 2){
flag=false;
showContextMenu(evt);
vnode.context.clearEventBubble(evt);
// vnode.context.clearEventBubble(evt);
const currentCellInfo=getCellPosition(evt.target);
vnode.context.currentCellInfo=currentCellInfo;
// console.log("currentCellInfo",currentCellInfo);
@ -324,7 +323,7 @@ export default {
var _x = null;
var _y = null;
vnode.context.clearEventBubble(evt);
// vnode.context.clearEventBubble(evt);
// //打开开关
vnode.context.mouseflag = true;
// //鼠标拖动时画框
@ -414,7 +413,6 @@ export default {
// document.oncontextmenu = new Function("event.returnValue=false");
tableDom.addEventListener("contextmenu", function(event) {
event.preventDefault();
var menu = document.querySelector("#contextMenu");
let tbPosRect=getTablePosition(tableDom);
menu.style.left = (event.clientX-tbPosRect.left+10) + "px";
@ -423,6 +421,7 @@ export default {
menu.style.zIndex = 3000;
vnode.context.contextVisible=true;
event.preventDefault();
});
// tableDom.oncontextmenu = new Function("event.returnValue=false");
// event.preventDefault();
@ -487,25 +486,6 @@ export default {
return { rowIndex:-1,cellIndex:-1};
}
}
// //方法是确定列表到屏幕的位置
// function getX(obj){
// var parObj=obj;
// var left=obj.offsetLeft;
// while(parObj=parObj.offsetParent){
// left+=parObj.offsetLeft;
// }
// return left;
// }
// //方法是确定列表到屏幕的位置
// function getY(obj){
// var parObj=obj;
// var top=obj.offsetTop;
// while(parObj = parObj.offsetParent){
// top+=parObj.offsetTop;
// }
// return top;
// }
//在鼠标抬起后做的重置
document.onmouseup = function () {
//把鼠标移动事初始化
@ -518,14 +498,21 @@ export default {
selList = null, _x = null, _y = null, selDiv = null, startX = null, startY = null, evt = null;
vnode.context.mouseflag = false;
vnode.context.handleBatchSelect();
cancelContextMenu();
// cancelContextMenu();
};
};
}
}
},
dragColumn: {
update: function (el, binding, vnode) {
var oDiv = el;
vnode.context.setHeaderSortable();
}
}
},
data() {
return {
refreshKeyId:Math.random().toString(36).substring(3,10),
tableId:this.id?this.id:"XdTable"+Math.random().toString(36).substring(3,10),
// 弹出层标题
title: "显示/隐藏",
@ -546,6 +533,7 @@ export default {
},
tableData:[],
dropCol:[],
sortable:null,
isDragging: false,
startRowIndex: -1,
@ -613,7 +601,6 @@ export default {
this.updateTable()
this.initSort();
this.tableDom=this.getTableDom();
this.columnDrop();
},
methods: {
@ -838,36 +825,48 @@ export default {
getTablePosition() {
return this.tableDom.getBoundingClientRect();
},
// 列拖拽
columnDrop() {
const _this = this;
var xdTableObj = document.getElementById(this.tableId);
// var tbHeader1=xdTableObj.getElementsByClassName("el-table__body-wrapper")[0];
const wrapperTr = xdTableObj.querySelector('.el-table__header-wrapper tr');
console.log("===>columnDrop==>",wrapperTr)
this.sortable = Sortable.create(wrapperTr, {
animation: 180,
delay: 0,
onEnd: evt => {
// 跳过显示的列数量,如开头我们用了一个多选框
const empty = 1
const oldItem = _this.dropCol[evt.oldIndex- empty];
this.newCol=evt.newIndex-1
_this.dropCol.splice(evt.oldIndex- empty, 1);
_this.dropCol.splice(evt.newIndex- empty, 0, oldItem);
console.log("===>columnDrop==>",_this.dropCol)
}
});
},
handleCopySelect(data,event) {
// console.log("===>handleCopySelect===>",event);
handleClipboard(this.currentSelectStr, event)
this.contextVisible=false;
},
handleCopyRow(){
handleSelectCurrentRow(){
},
handleCopyColumn(){
setHeaderSortable(){
let that=this;
this.$nextTick(function () {
const wrapperTr = document.querySelector('#'+that.tableId+' .el-table__header-wrapper > table > thead > tr');
// console.log("===>wrapperTr==>",wrapperTr);
Sortable.create(wrapperTr, {
animation: 100,
delay: 50,
dragClass: "dragClass",
ghostClass: "ghostClass",
chosenClass: "chosenClass",
onStart: () => {
},
// 结束拖动事件
onEnd: ({ newIndex, oldIndex }) => {
let arr = that.storageList;
const currCol = arr.splice(oldIndex-1, 1)[0];
arr.splice(newIndex-1, 0, currCol);
that.storageList = arr;
that.updateTable();
// this.refreshKeyId=Math.random().toString(36).substring(3,10);
// const currCol = vnode.context.storageList.splice(oldIndex-1, 1)[0];
// vnode.context.storageList.splice(newIndex-1, 0, currCol);
// vnode.context.updateTable();
},
});
})
},
handleSelectCurrentColumn(){
},
// 定义方法 isEqual 来比较两个选中数据对象是否相同
@ -1033,6 +1032,8 @@ export default {
storage[this.saveStorageName] = this.storageList
window.localStorage.setItem('tableStorage', JSON.stringify(storage))
}
// this.setHeaderSortable();
},
}
@ -1115,6 +1116,24 @@ export default {
user-select: none;
}
.el-table__body tr.current-row>td {
background: #453878 !important;
}
// 拖拽
.dragClass {
background: rgba($color: #41c21a, $alpha: 0.5) !important;
}
// 停靠
.ghostClass {
background: rgba($color: #6cacf5, $alpha: 0.5) !important;
}
// 选择
.chosenClass:hover > td {
background: rgba($color: #f56c6c, $alpha: 0.5) !important;
}
</style>

View File

@ -503,6 +503,7 @@ export default {
operateEmployeeCode: element['取件员/操作员'],
remark: element['录单备注'],
blMessage: element['寄件/签收短信'],
realValue: element['货值'],
uploadStatus: 0,
errorInfo:'',