From 3ab1b81f676d8a681a4b2b2695688f8cfc1c05bc Mon Sep 17 00:00:00 2001
From: wangjiahao <1522128093@qq.com>
Date: Tue, 6 Aug 2024 17:15:38 +0800
Subject: [PATCH] =?UTF-8?q?feat(=E4=BB=AA=E8=A1=A8=E6=9D=BF):=20Tab?=
=?UTF-8?q?=E7=BB=84=E4=BB=B6=E6=94=AF=E6=8C=81=E8=BD=AE=E6=92=AD=20#9566?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../common/TabCarouselSetting.vue | 71 +++++++++++++++++++
.../src/custom-component/component-list.ts | 7 ++
.../src/custom-component/de-tabs/Attr.vue | 9 ++-
.../custom-component/de-tabs/Component.vue | 25 +++++++
core/core-frontend/src/utils/canvasUtils.ts | 3 +
5 files changed, 114 insertions(+), 1 deletion(-)
create mode 100644 core/core-frontend/src/custom-component/common/TabCarouselSetting.vue
diff --git a/core/core-frontend/src/custom-component/common/TabCarouselSetting.vue b/core/core-frontend/src/custom-component/common/TabCarouselSetting.vue
new file mode 100644
index 0000000000..37036c89ec
--- /dev/null
+++ b/core/core-frontend/src/custom-component/common/TabCarouselSetting.vue
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+ 轮询时间
+
+
+ Tab轮询退出编辑模式才开生效
+
+
+
+
+
+
+
+ 秒
+
+
+
+
+
+
+
+
diff --git a/core/core-frontend/src/custom-component/component-list.ts b/core/core-frontend/src/custom-component/component-list.ts
index 0d6da72970..193c19bbe2 100644
--- a/core/core-frontend/src/custom-component/component-list.ts
+++ b/core/core-frontend/src/custom-component/component-list.ts
@@ -8,6 +8,12 @@ export const commonStyle = {
opacity: 1
}
+// 轮询设置
+export const BASE_CAROUSEL = {
+ enable: false,
+ time: 10
+}
+
export const BASE_EVENTS = {
checked: false,
showTips: false,
@@ -200,6 +206,7 @@ export const commonAttr = {
animations: [],
canvasId: 'canvas-main',
events: BASE_EVENTS,
+ carousel: BASE_CAROUSEL,
multiDimensional: MULTI_DIMENSIONAL, // 3d 设置
groupStyle: {}, // 当一个组件成为 Group 的子组件时使用
isLock: false, // 是否锁定组件
diff --git a/core/core-frontend/src/custom-component/de-tabs/Attr.vue b/core/core-frontend/src/custom-component/de-tabs/Attr.vue
index 067e109e56..3a4563ab17 100644
--- a/core/core-frontend/src/custom-component/de-tabs/Attr.vue
+++ b/core/core-frontend/src/custom-component/de-tabs/Attr.vue
@@ -3,6 +3,7 @@ import CommonAttr from '@/custom-component/common/CommonAttr.vue'
import { toRefs } from 'vue'
import { dvMainStoreWithOut } from '@/store/modules/data-visualization/dvMain'
import { storeToRefs } from 'pinia'
+import TabCarouselSetting from '@/custom-component/common/TabCarouselSetting.vue'
const props = withDefaults(
defineProps<{
@@ -25,7 +26,13 @@ const { curComponent } = storeToRefs(dvMainStore)
:element="curComponent"
:background-color-picker-width="197"
:background-border-select-width="197"
- />
+ >
+
+
diff --git a/core/core-frontend/src/custom-component/de-tabs/Component.vue b/core/core-frontend/src/custom-component/de-tabs/Component.vue
index 98b2ae0e0d..a3f7f6534b 100644
--- a/core/core-frontend/src/custom-component/de-tabs/Component.vue
+++ b/core/core-frontend/src/custom-component/de-tabs/Component.vue
@@ -124,6 +124,7 @@ import { getPanelAllLinkageInfo } from '@/api/visualization/linkage'
const dvMainStore = dvMainStoreWithOut()
const { tabMoveInActiveId, bashMatrixInfo, editMode, mobileInPc } = storeToRefs(dvMainStore)
const tabComponentRef = ref(null)
+let carouselTimer = null
const props = defineProps({
canvasStyleData: {
@@ -401,6 +402,25 @@ const reShow = () => {
})
}
+const initCarousel = () => {
+ carouselTimer && clearInterval(carouselTimer)
+ carouselTimer = null
+ if (!isEditMode.value) {
+ if (element.value.carousel?.enable) {
+ const switchTime = (element.value.carousel.time || 5) * 1000
+ let switchCount = 1
+ // 轮播定时器
+ carouselTimer = setInterval(() => {
+ const nowIndex = switchCount % element.value.propValue.length
+ switchCount++
+ nextTick(() => {
+ editableTabsValue.value = element.value.propValue[nowIndex].name
+ })
+ }, switchTime)
+ }
+ }
+}
+
onMounted(() => {
if (element.value.propValue.length > 0) {
editableTabsValue.value = element.value.propValue[0].name
@@ -410,12 +430,17 @@ onMounted(() => {
eventBus.on('onTabMoveOut-' + element.value.id, componentMoveOut)
eventBus.on('onTabSortChange-' + element.value.id, reShow)
currentInstance = getCurrentInstance()
+ initCarousel()
})
onBeforeMount(() => {
eventBus.off('onTabMoveIn-' + element.value.id, componentMoveIn)
eventBus.off('onTabMoveOut-' + element.value.id, componentMoveOut)
eventBus.off('onTabSortChange-' + element.value.id, reShow)
+ if (carouselTimer) {
+ clearInterval(carouselTimer)
+ carouselTimer = null
+ }
})