发现点击tabpage的不同页标签,标签页内容没有改变
This commit is contained in:
@@ -115,28 +115,7 @@
|
||||
@tabDragStart="() => {}"
|
||||
@tabDragMove="() => {}"
|
||||
@tabDragEnd="() => {}"
|
||||
>
|
||||
<!-- 在TabPage内渲染其包含的Panels -->
|
||||
<Panel
|
||||
v-for="panel in item.tabPage.panels"
|
||||
:key="`received-panel-${index}-${panel.id}`"
|
||||
:id="panel.id"
|
||||
:title="panel.title"
|
||||
:collapsed="panel.collapsed"
|
||||
:toolbarExpanded="panel.toolbarExpanded"
|
||||
:maximized="panel.maximized"
|
||||
:content="panel.content"
|
||||
@toggleCollapse="() => {}"
|
||||
@maximize="onPanelMaximize"
|
||||
@close="() => {}"
|
||||
@toggleToolbar="() => {}"
|
||||
@dragStart="() => {}"
|
||||
@dragMove="() => {}"
|
||||
@dragEnd="() => {}"
|
||||
@dragover="handleDragOver"
|
||||
@dragleave="handleDragLeave"
|
||||
/>
|
||||
</TabPage>
|
||||
/>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
@@ -593,11 +572,10 @@ const mergeAreaContent = (sourceArea) => {
|
||||
sourceArea.tabPages.forEach((tabPage, tabIndex) => {
|
||||
const newTabPageId = `merged-tabpage-${Date.now()}-${tabIndex}`
|
||||
const newPanels = (tabPage.panels || []).map((panel, panelIndex) => {
|
||||
const newPanelId = `merged-panel-${Date.now()}-${tabIndex}-${panelIndex}`
|
||||
console.log(`[Area] 添加Panel: ${panel.id} -> ${newPanelId}`)
|
||||
// 保持原有Panel ID不变,确保Vue响应式和状态稳定性
|
||||
console.log(`[Area] 添加Panel: ${panel.id}`)
|
||||
return {
|
||||
...panel,
|
||||
id: newPanelId,
|
||||
maximized: true
|
||||
}
|
||||
})
|
||||
@@ -643,20 +621,18 @@ const mergeAreaContent = (sourceArea) => {
|
||||
if (sourceArea.tabPages && sourceArea.tabPages.length > 0) {
|
||||
sourceArea.tabPages.forEach((sourceTabPage, tabIndex) => {
|
||||
if (sourceTabPage && sourceTabPage.panels) {
|
||||
// 为每个Panel创建新的唯一ID避免冲突
|
||||
// 保持原有Panel ID不变,避免Vue组件重新创建和状态丢失
|
||||
const newPanels = sourceTabPage.panels.map((panel, panelIndex) => {
|
||||
const newPanelId = `merged-panel-${Date.now()}-${tabIndex}-${panelIndex}`
|
||||
console.log(`[Area] 合并Panel到现有TabPage: ${panel.id} -> ${newPanelId}`)
|
||||
console.log(`[Area] 合并Panel到现有TabPage: ${panel.id}`)
|
||||
return {
|
||||
...panel,
|
||||
id: newPanelId,
|
||||
maximized: true
|
||||
}
|
||||
})
|
||||
|
||||
// 将新的Panel添加到现有TabPage
|
||||
existingTabPage.tabPage.panels.push(...newPanels)
|
||||
existingTabPage.panels.push(...newPanels)
|
||||
// existingTabPage.panels 是旧引用,保持结构一致性但避免重复添加
|
||||
|
||||
console.log(`[Area] 成功合并 ${newPanels.length} 个Panel到现有TabPage`)
|
||||
}
|
||||
|
||||
@@ -58,8 +58,41 @@
|
||||
|
||||
<!-- Tab页内容区域 -->
|
||||
<div class="tab-content">
|
||||
<!-- 渲染slot内容(Panel组件) -->
|
||||
<slot></slot>
|
||||
<!-- 渲染当前激活的Panel内容 -->
|
||||
<template v-if="activeTabIndex >= 0 && activeTabIndex < panels.length">
|
||||
<div
|
||||
v-for="(panel, index) in panels"
|
||||
:key="panel.id"
|
||||
v-show="index === activeTabIndex"
|
||||
class="tab-panel"
|
||||
:class="{ active: index === activeTabIndex }"
|
||||
>
|
||||
<!-- 使用Panel组件渲染面板内容 -->
|
||||
<Panel
|
||||
:id="panel.id"
|
||||
:title="panel.title"
|
||||
:x="panel.x || 0"
|
||||
:y="panel.y || 0"
|
||||
:width="panel.width || 300"
|
||||
:height="panel.height || 200"
|
||||
:collapsed="panel.collapsed || false"
|
||||
:toolbar-expanded="panel.toolbarExpanded || false"
|
||||
:maximized="panel.maximized || false"
|
||||
:content="panel.content"
|
||||
@toggle-collapse="$emit('toggleCollapse', $event)"
|
||||
@maximize="$emit('maximize', $event)"
|
||||
@close="$emit('close', $event)"
|
||||
@toggle-toolbar="$emit('toggleToolbar', $event)"
|
||||
@drag-start="$emit('dragStart', $event)"
|
||||
@drag-move="$emit('dragMove', $event)"
|
||||
@drag-end="$emit('dragEnd', $event)"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
<!-- 空状态提示 -->
|
||||
<div v-else class="tab-empty">
|
||||
<span>没有可显示的内容</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 右侧标签栏 -->
|
||||
@@ -122,6 +155,7 @@
|
||||
|
||||
<script setup>
|
||||
import { defineProps, defineEmits, ref, onMounted } from 'vue'
|
||||
import Panel from './Panel.vue'
|
||||
|
||||
const props = defineProps({
|
||||
id: { type: String, required: true },
|
||||
|
||||
Reference in New Issue
Block a user