|
@@ -20,7 +20,7 @@ export default {
|
|
|
'initTableName',
|
|
|
'selectedTableKey',
|
|
|
'containerId',
|
|
|
- 'multipleSelect' // 新增:是否允许多选,默认为false
|
|
|
+ 'multipleSelect' // 是否允许多选,默认为false
|
|
|
],
|
|
|
data() {
|
|
|
return {
|
|
@@ -224,6 +224,11 @@ export default {
|
|
|
return; // 不是当前组件内的点击,不处理
|
|
|
}
|
|
|
|
|
|
+ // 检测Control键是否按下 (e.ctrlKey 对Windows/Linux有效,e.metaKey对Mac的Command键有效)
|
|
|
+ const isCtrlPressed = e.ctrlKey || e.metaKey;
|
|
|
+ // 只有在multipleSelect为true时才允许通过Control键进行多选
|
|
|
+ const isMultiSelectMode = this.multipleSelect && isCtrlPressed;
|
|
|
+
|
|
|
// 只在当前容器内查找目标元素
|
|
|
let target = e.target;
|
|
|
while (target && target !== container && !target.id) {
|
|
@@ -257,15 +262,15 @@ export default {
|
|
|
item.tableElementKey === elementId
|
|
|
);
|
|
|
|
|
|
- // 修改:根据多选模式决定是否清空已选元素
|
|
|
- if (!this.multipleSelect) {
|
|
|
+ // 根据是否按下Control键决定是否清空已选元素
|
|
|
+ if (!isMultiSelectMode) {
|
|
|
this.clearAllSelected();
|
|
|
}
|
|
|
|
|
|
if (!isSameKeySelected) {
|
|
|
if (id.startsWith('key_')) {
|
|
|
const keyPrefix = this.extractKeyPrefix(id);
|
|
|
- // 关键修复:只在当前容器内查找同前缀元素
|
|
|
+ // 只在当前容器内查找同前缀元素
|
|
|
const samePrefixElements = container.querySelectorAll(`[id^="${keyPrefix}__"]`);
|
|
|
this.selectElements(samePrefixElements);
|
|
|
} else {
|
|
@@ -273,7 +278,7 @@ export default {
|
|
|
}
|
|
|
} else {
|
|
|
// 如果已经有相同 tableElementKey 的元素被选中,在多选模式下点击会取消选择所有相同key的元素
|
|
|
- if (this.multipleSelect) {
|
|
|
+ if (isMultiSelectMode) {
|
|
|
this.deselectElementsByKey(elementId);
|
|
|
}
|
|
|
}
|
|
@@ -314,7 +319,7 @@ export default {
|
|
|
});
|
|
|
},
|
|
|
|
|
|
- // 修改:取消选择所有具有相同 tableElementKey 的元素
|
|
|
+ // 取消选择所有具有相同 tableElementKey 的元素
|
|
|
deselectElementsByKey(tableElementKey) {
|
|
|
const container = this.getContainer();
|
|
|
if (!container) return;
|