This commit is contained in:
linfso 2025-07-04 17:50:15 +08:00
parent 57495d050c
commit 927352b7c9

View File

@ -94,9 +94,10 @@
</div>
</slot>
</div>
<div @mouseenter="initKeyDownEvent" @mouseleave="removeKeyDownEvent">
<!-- @mouseenter="initKeyDownEvent" @mouseleave="removeKeyDownEvent" -->
<div >
<!-- <div class="flex-auto"> -->
<orig-table ref="table" :key="refreshKeyId" tabindex="0" :config="config" v-dragSelect class="xd-tb-wrapper" />
<orig-table ref="table" :key="refreshKeyId" tabindex="0" :config="config" v-dragSelect class="xd-tb-wrapper" />
<!-- </div> -->
<!-- 统计数据 v-dragColumn v-dragSelect-->
@ -269,6 +270,7 @@ export default {
// 鼠标按下事件
tbBodyDiv.onmousedown = function (ev) {
console.log('===tbBodyDiv.onmousedown===>')
var evt = window.event || arguments[0];
var flag = true;
// 鼠标右键菜单,并且记录当前位置
@ -333,10 +335,23 @@ export default {
vnode.context.mouseflag = true;
// //鼠标拖动时画框
document.onmousemove = function (ev) {
const tbBodyDivRect = tbBodyDiv.getBoundingClientRect();
console.log("===document.onmousemove==>",ev,tbBodyDivRect);
evt = window.event || arguments[0];
_x = (evt.x || evt.clientX);
_y = (evt.y || evt.clientY);
//为了确定是点击事件还是移动事件
if(_x<tbBodyDivRect.x || _y<tbBodyDivRect.y){
console.log("no scope");
vnode.context.isTableFocused=false;
return;
}
vnode.context.isTableFocused=true;
console.log("in scope");
if(Math.abs(_x - startX)<5 && Math.abs(_y - startY)<5){
// setMouseCellSelect(evt.target);
@ -436,8 +451,8 @@ export default {
}
}
}
}
vnode.context.clearEventBubble(evt);
}
vnode.context.clearEventBubble(evt);
};
function showContextMenu(event){
@ -515,8 +530,6 @@ export default {
}
}
// 获取鼠标位置的单元格
function getCellPosition(cell) {
try{
@ -536,7 +549,7 @@ export default {
//在鼠标抬起后做的重置
document.onmouseup = function () {
//把鼠标移动事初始化
document.onmousemove=null;
// document.onmousemove=null;
var xdTableObj = document.getElementById(vnode.context.tableId);
var selDiv=document.getElementById("selectDiv-"+vnode.context.tableId);
if (selDiv) {
@ -546,10 +559,11 @@ export default {
vnode.context.mouseflag = false;
vnode.context.handleBatchSelect();
// cancelContextMenu();
};
};
};
}
},
dragColumn: {
@ -572,6 +586,8 @@ export default {
title: "显示/隐藏",
// 是否显示弹出层
open: false,
showTable: false,
popVisible:false,
isMouseDown: true, // 是否需要(允许)处理鼠标的移动事件
@ -621,6 +637,7 @@ export default {
checkAll: false, //招标阶段 是否全选
isIndeterminate: false, //全选复选框标识
isTableFocused: false,
copyHanderEvent:null,
// 表格个性化记忆配置
@ -670,26 +687,19 @@ export default {
this.isNeedDbSaveTpl=false;
}
this.initKeyDownEvent();
// 初始化默认模版到本地
this.initDefaultTplList();
this.initStorage()
this.updateTable()
// this.initKeyDown();
this.tableDom=this.getTableDom();
// 监听 ctrl+c键盘事件
let that=this;
this.copyHanderEvent = (e) => {
// console.log('键盘监听中')
e = e||window.event;
if(e.ctrlKey&&e.code=="KeyC"){
that.handleCopySelect(e);
return false;
}
}
},
beforeDestroy () {
document.removeEventListener('keydown', this.copyHanderEvent)
document.removeEventListener('keydown', this.handleGlobalKeydown)
},
methods: {
getInstance() {
@ -699,6 +709,25 @@ export default {
return Math.random().toString(36).substring(3,10);
},
// 全局键盘事件处理
handleGlobalKeydown(event) {
// console.log("===>handleGlobalKeydown===>",event)
// 检查是否按下了Ctrl+C组合键
if ((event.ctrlKey || event.metaKey) && event.key === 'c') {
// 如果焦点在表格内,处理复制操作
if (this.isTableFocused) {
event.preventDefault();
this.handleCopySelect();
// e = e||window.event;
// if(e.ctrlKey&&e.code=="KeyC"){
// that.handleCopySelect(e);
// return false;
// }
}
}
},
clearSelection(){
this.$nextTick(()=>{
this.$refs.table.$refs.elTable.clearSelection();
@ -707,12 +736,13 @@ export default {
initKeyDownEvent(){
// console.log('===initKeyDownEvent===>')
document.addEventListener('keydown', this.copyHanderEvent );
document.addEventListener('keydown', this.handleGlobalKeydown );
},
removeKeyDownEvent(){
// console.log('===removeKeyDownEvent===>')
document.removeEventListener('keydown', this.copyHanderEvent );
document.removeEventListener('keydown', this.handleGlobalKeydown );
},
onTplSelectInputBlur(e) {
if (e.target.value.trim()!== '') {
//e.target.value就是录入的内容
@ -911,7 +941,10 @@ export default {
// 去除两端空格
this.currentSelectStr=selStr;
this.isTableFocused=true;
}else{
this.isTableFocused=false;
}
// this.$emit('handleSelect',this.multipleSelection)