diff --git a/core/core-frontend/src/components/data-visualization/RealTimeGroup.vue b/core/core-frontend/src/components/data-visualization/RealTimeGroup.vue index d20476762b..7f7c73c514 100644 --- a/core/core-frontend/src/components/data-visualization/RealTimeGroup.vue +++ b/core/core-frontend/src/components/data-visualization/RealTimeGroup.vue @@ -77,6 +77,7 @@ import ComposeShow from '@/components/data-visualization/canvas/ComposeShow.vue' import { composeStoreWithOut } from '@/store/modules/data-visualization/compose' import circlePackingOrigin from '@/assets/svg/circle-packing-origin.svg' import RealTimeTab from '@/components/data-visualization/RealTimeTab.vue' +import RealTimeGroupInner from '@/components/data-visualization/RealTimeGroupInner.vue' const dropdownMore = ref(null) const lockStore = lockStoreWithOut() @@ -319,8 +320,8 @@ const expandClick = component => { @click="onClick(transformIndex(index))" >
{ :component-data="getComponent(index).propValue" >
+
+ +
@@ -470,7 +477,7 @@ const expandClick = component => { align-items: center; justify-content: flex-start; font-size: 12px; - padding: 0 2px 0 20px; + padding: 0 2px 0 28px; user-select: none; .component-icon { @@ -513,7 +520,7 @@ const expandClick = component => { .component-base { opacity: 1; } - width: 70px !important; + width: 55px !important; } } @@ -521,7 +528,7 @@ const expandClick = component => { .component-base { opacity: 0; } - width: 0px; + width: 0; display: flex; justify-content: flex-end; align-items: center; @@ -575,7 +582,7 @@ const expandClick = component => { } .icon-container-show { - width: 70px !important; + width: 55px !important; } .icon-container-lock { diff --git a/core/core-frontend/src/components/data-visualization/RealTimeGroupInner.vue b/core/core-frontend/src/components/data-visualization/RealTimeGroupInner.vue new file mode 100644 index 0000000000..a81fac3fb4 --- /dev/null +++ b/core/core-frontend/src/components/data-visualization/RealTimeGroupInner.vue @@ -0,0 +1,598 @@ + + + + + + + diff --git a/core/core-frontend/src/components/data-visualization/RealTimeListTree.vue b/core/core-frontend/src/components/data-visualization/RealTimeListTree.vue index f44d480017..eda406b46d 100644 --- a/core/core-frontend/src/components/data-visualization/RealTimeListTree.vue +++ b/core/core-frontend/src/components/data-visualization/RealTimeListTree.vue @@ -81,6 +81,7 @@ import { contextmenuStoreWithOut } from '@/store/modules/data-visualization/cont import RealTimeTab from '@/components/data-visualization/RealTimeTab.vue' import { useI18n } from '@/hooks/web/useI18n' import circlePackingOrigin from '@/assets/svg/circle-packing-origin.svg' +import { checkJoinGroup } from '@/utils/canvasUtils' const dropdownMore = ref(null) const lockStore = lockStoreWithOut() @@ -136,16 +137,15 @@ const shiftDataPush = curClickIndex => { indexBegin = curClickIndex indexEnd = laterIndexTrans } - const shiftAreaComponents = componentData.value - .slice(indexBegin, indexEnd + 1) - .filter( - component => - !areaDataIdArray.includes(component.id) && - !component.isLock && - component.isShow && - component.category !== 'hidden' && - !['GroupArea', 'DeTabs'].includes(component.component) - ) + const shiftAreaComponents = componentData.value.slice(indexBegin, indexEnd + 1).filter( + component => + !areaDataIdArray.includes(component.id) && + !component.isLock && + component.isShow && + component.category !== 'hidden' && + !['GroupArea'].includes(component.component) && + checkJoinGroup(component) // 当前如果是Tab 则tab中不能包含Group + ) areaData.value.components.push(...shiftAreaComponents) dvMainStore.setCurComponent({ component: null, index: null }) } @@ -509,7 +509,7 @@ const canvasChange = () => { >
{ align-items: center; justify-content: flex-start; font-size: 12px; - padding: 0 2px 0 0px; + padding: 0 2px 0 8px; user-select: none; .component-icon { @@ -705,7 +705,7 @@ const canvasChange = () => { .component-base { opacity: 1; } - width: 66px !important; + max-width: 66px !important; } } diff --git a/core/core-frontend/src/utils/ShapeUtils.ts b/core/core-frontend/src/utils/ShapeUtils.ts new file mode 100644 index 0000000000..d722e1aba6 --- /dev/null +++ b/core/core-frontend/src/utils/ShapeUtils.ts @@ -0,0 +1,88 @@ +import { dvMainStoreWithOut } from '@/store/modules/data-visualization/dvMain' +import { storeToRefs } from 'pinia' + +const dvMainStore = dvMainStoreWithOut() +const { componentData } = storeToRefs(dvMainStore) + +// 检查是否可以加入到分组 +export function checkJoinGroup(item) { + if (item.component === 'DeTabs') { + let result = true + item.propValue.forEach(tabItem => { + tabItem.componentData.forEach(tabComponent => { + if (tabComponent.component === 'Group') { + result = false + } + }) + }) + return result + } else { + return true + } +} +// 检查是否可以移入tab +export function checkJoinTab(item) { + if (item.component === 'Group') { + let result = true + item.propValue.forEach(groupItem => { + if (groupItem.component === 'DeTabs') { + result = false + } + }) + return result + } else { + return true + } +} + +// 目前仅允许group中还有一层Tab 或者 Tab中含有一层group +export function itemCanvasPathCheck(item, checkType) { + if (checkType === 'canvas-main') { + return isMainCanvas(item.canvasId) + } + const pathMap = {} + componentData.value.forEach(componentItem => { + canvasIdMapCheck(componentItem, null, pathMap) + }) + + // 父组件是Tab且在group中 + if (checkType === 'pTabGroup') { + return Boolean( + pathMap[item.id] && + pathMap[item.id].component === 'DeTabs' && + pathMap[pathMap[item.id].id] && + pathMap[pathMap[item.id].id].component === 'Group' + ) + } + // 当前组件是group且在Tab中 + if (checkType === 'groupInTab') { + return Boolean( + item.component === 'Group' && + pathMap[pathMap[item.id].id] && + pathMap[pathMap[item.id].id].component === 'DeTabs' + ) + } + + // 当前组件是Tab且在Group中 + if (checkType === 'tabInGroup') { + return Boolean( + item.component === 'DeTabs' && pathMap[item.id] && pathMap[item.id].component === 'Group' + ) + } + return false +} + +export function canvasIdMapCheck(item, pItem, pathMap) { + pathMap[item.id] = pItem + if (item.component === 'DeTabs') { + item.propValue.forEach(tabItem => { + tabItem.componentData.forEach(tabComponent => { + canvasIdMapCheck(tabComponent, item, pathMap) + }) + }) + } else if (item.component === 'Group') { + item.propValue.forEach(groupItem => { + canvasIdMapCheck(groupItem, item, pathMap) + }) + } +}