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 @@ + + + + + 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 + } })