feat: 优化部分问题,完善选区功能

This commit is contained in:
bighuixiang
2025-07-04 03:16:18 +08:00
parent b6afd2764d
commit 0615ab31f9
12 changed files with 1892 additions and 1144 deletions

View File

@@ -11,7 +11,7 @@ import LayersList from "./LayersList.vue"; // 引入 LayersList 组件
// GroupLayersCommand,
// UngroupLayersCommand,
// } from "../../commands/LayerCommands";
import { generateId } from "../../utils/helper";
import { findObjectById, generateId } from "../../utils/helper";
const props = defineProps({
// layers: Array,
@@ -26,6 +26,7 @@ const props = defineProps({
const emit = defineEmits([
"add-layer",
"add-top-layer",
"add-group-layer",
"set-active-layer",
"toggle-layer-visibility",
@@ -92,6 +93,13 @@ const selectedLayers = computed(() => {
);
});
// 计算属性:获取当前是否激活子图层
const isChildLayerActive = computed(() => {
const { parent } = findLayerRecursively(layers.value, props.activeLayerId);
if (parent) return true; // 如果有父图层,则表示是子图层
return false; // 否则是根图层
});
// 计算属性:检查是否有选中的图层可以分组
const canGroupLayers = computed(() => {
// 直接基于 selectedLayerIds 和 sortableRootLayers 计算,确保响应式
@@ -142,6 +150,9 @@ const canToggleLock = computed(() => {
function addLayer() {
emit("add-layer");
}
function addTopLayer() {
emit("add-top-layer");
}
function addGroupLayer() {
emit("add-group-layer");
@@ -590,6 +601,7 @@ function handleLayerClick(layer, event) {
) {
// 如果是组图层,设置第一个子图层为活动图层
setActiveLayer(layer.children[0].id, { parentId: layer.id });
layerManager?.setAllActiveGroupLayerCanvasObject?.(layer);
} else {
// 否则直接设置当前图层为活动图层
setActiveLayer(layer.id);
@@ -1252,6 +1264,14 @@ const forwardEvent = (eventName, ...args) => {
<!-- 常规操作按钮 -->
<div v-else class="normal-actions">
<div
v-if="isChildLayerActive"
class="add-layer-btn action-btn"
@click="addTopLayer"
:title="$t('添加顶级图层')"
>
<SvgIcon name="CPlusTop" size="16"></SvgIcon>
</div>
<div
class="add-layer-btn action-btn"
@click="addLayer"