forked from github/dataease
Merge pull request #12282 from dataease/pr@dev-v2@feat_picture-group-carouse
Pr@dev v2@feat picture group carouse
This commit is contained in:
commit
21d252c104
@ -61,7 +61,8 @@ const handleInput = value => {
|
|||||||
<span style="font-size: 12px">轮播时间(秒)</span>
|
<span style="font-size: 12px">轮播时间(秒)</span>
|
||||||
<el-tooltip class="item" :effect="themes" placement="top">
|
<el-tooltip class="item" :effect="themes" placement="top">
|
||||||
<template #content>
|
<template #content>
|
||||||
<div>Tab轮播退出编辑模式才开生效</div>
|
<div>轮播退出编辑模式才开生效</div>
|
||||||
|
<div v-if="element.innerType === 'picture-group'">启用条件样式后,轮播失效</div>
|
||||||
</template>
|
</template>
|
||||||
<el-icon class="hint-icon" :class="{ 'hint-icon--dark': themes === 'dark' }">
|
<el-icon class="hint-icon" :class="{ 'hint-icon--dark': themes === 'dark' }">
|
||||||
<Icon name="icon_info_outlined"><icon_info_outlined class="svg-icon" /></Icon>
|
<Icon name="icon_info_outlined"><icon_info_outlined class="svg-icon" /></Icon>
|
@ -10,7 +10,7 @@ import elementResizeDetectorMaker from 'element-resize-detector'
|
|||||||
import { snapshotStoreWithOut } from '@/store/modules/data-visualization/snapshot'
|
import { snapshotStoreWithOut } from '@/store/modules/data-visualization/snapshot'
|
||||||
import CommonStyleSet from '@/custom-component/common/CommonStyleSet.vue'
|
import CommonStyleSet from '@/custom-component/common/CommonStyleSet.vue'
|
||||||
import CommonEvent from '@/custom-component/common/CommonEvent.vue'
|
import CommonEvent from '@/custom-component/common/CommonEvent.vue'
|
||||||
import TabCarouselSetting from '@/custom-component/common/TabCarouselSetting.vue'
|
import CarouselSetting from '@/custom-component/common/CarouselSetting.vue'
|
||||||
import CommonBorderSetting from '@/custom-component/common/CommonBorderSetting.vue'
|
import CommonBorderSetting from '@/custom-component/common/CommonBorderSetting.vue'
|
||||||
import CollapseSwitchItem from '../../components/collapse-switch-item/src/CollapseSwitchItem.vue'
|
import CollapseSwitchItem from '../../components/collapse-switch-item/src/CollapseSwitchItem.vue'
|
||||||
const snapshotStore = snapshotStoreWithOut()
|
const snapshotStore = snapshotStoreWithOut()
|
||||||
@ -197,11 +197,7 @@ const stopEvent = e => {
|
|||||||
@onStyleAttrChange="onStyleAttrChange"
|
@onStyleAttrChange="onStyleAttrChange"
|
||||||
></common-border-setting>
|
></common-border-setting>
|
||||||
</collapse-switch-item>
|
</collapse-switch-item>
|
||||||
<TabCarouselSetting
|
<CarouselSetting v-if="carouselShow" :element="element" :themes="themes"></CarouselSetting>
|
||||||
v-if="carouselShow"
|
|
||||||
:element="element"
|
|
||||||
:themes="themes"
|
|
||||||
></TabCarouselSetting>
|
|
||||||
</el-collapse>
|
</el-collapse>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -310,7 +310,7 @@ onBeforeUnmount(() => {
|
|||||||
|
|
||||||
.form-item-custom {
|
.form-item-custom {
|
||||||
.ed-radio {
|
.ed-radio {
|
||||||
margin-right: 4px !important;
|
margin-right: 2px !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,17 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { CSSProperties, computed, nextTick, toRefs, reactive, ref, PropType } from 'vue'
|
import {
|
||||||
|
CSSProperties,
|
||||||
|
computed,
|
||||||
|
nextTick,
|
||||||
|
toRefs,
|
||||||
|
reactive,
|
||||||
|
ref,
|
||||||
|
PropType,
|
||||||
|
watch,
|
||||||
|
onBeforeMount
|
||||||
|
} from 'vue'
|
||||||
import { imgUrlTrans } from '@/utils/imgUtils'
|
import { imgUrlTrans } from '@/utils/imgUtils'
|
||||||
import eventBus from '@/utils/eventBus'
|
import eventBus from '@/utils/eventBus'
|
||||||
import { dvMainStoreWithOut } from '@/store/modules/data-visualization/dvMain'
|
import { dvMainStoreWithOut } from '@/store/modules/data-visualization/dvMain'
|
||||||
@ -19,14 +29,15 @@ import { parseJson } from '@/views/chart/components/js/util'
|
|||||||
import { mappingColor } from '@/views/chart/components/js/panel/common/common_table'
|
import { mappingColor } from '@/views/chart/components/js/panel/common/common_table'
|
||||||
import { storeToRefs } from 'pinia'
|
import { storeToRefs } from 'pinia'
|
||||||
const dvMainStore = dvMainStoreWithOut()
|
const dvMainStore = dvMainStoreWithOut()
|
||||||
const { canvasViewInfo } = storeToRefs(dvMainStore)
|
const { canvasViewInfo, editMode, mobileInPc } = storeToRefs(dvMainStore)
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
emptyValue: '-',
|
emptyValue: '-',
|
||||||
data: null,
|
data: null,
|
||||||
viewDataInfo: null,
|
viewDataInfo: null,
|
||||||
showUrl: null,
|
showUrl: null,
|
||||||
firstRender: true,
|
firstRender: true,
|
||||||
previewFirstRender: true
|
previewFirstRender: true,
|
||||||
|
curImgList: []
|
||||||
})
|
})
|
||||||
const initReady = ref(true)
|
const initReady = ref(true)
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
@ -38,6 +49,11 @@ const props = defineProps({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
showPosition: {
|
||||||
|
required: false,
|
||||||
|
type: String,
|
||||||
|
default: 'preview'
|
||||||
|
},
|
||||||
view: {
|
view: {
|
||||||
type: Object as PropType<ChartObj>,
|
type: Object as PropType<ChartObj>,
|
||||||
default() {
|
default() {
|
||||||
@ -52,8 +68,37 @@ const errMsg = ref('')
|
|||||||
const dataRowSelect = ref({})
|
const dataRowSelect = ref({})
|
||||||
const dataRowNameSelect = ref({})
|
const dataRowNameSelect = ref({})
|
||||||
const dataRowFiledName = ref([])
|
const dataRowFiledName = ref([])
|
||||||
|
let carouselTimer = null
|
||||||
|
const { element, view, showPosition } = toRefs(props)
|
||||||
|
|
||||||
const { element, view } = toRefs(props)
|
const isEditMode = computed(() => showPosition.value.includes('canvas') && !mobileInPc.value)
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => isEditMode.value,
|
||||||
|
() => {
|
||||||
|
initCarousel()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
const initCarousel = () => {
|
||||||
|
carouselTimer && clearInterval(carouselTimer)
|
||||||
|
carouselTimer = null
|
||||||
|
const picLength = element.value.propValue.urlList?.length || 0
|
||||||
|
const { threshold } = parseJson(view.value.senior)
|
||||||
|
// 非编辑状态 未启用条件样式 存在图片 启用轮播
|
||||||
|
if (!isEditMode.value && !threshold.enable && picLength > 0 && element.value.carousel?.enable) {
|
||||||
|
const switchTime = (element.value.carousel.time || 5) * 1000
|
||||||
|
let switchCount = 1
|
||||||
|
// 轮播定时器
|
||||||
|
carouselTimer = setInterval(() => {
|
||||||
|
const nowIndex = switchCount % element.value.propValue.urlList.length
|
||||||
|
switchCount++
|
||||||
|
nextTick(() => {
|
||||||
|
state.showUrl = element.value.propValue.urlList[nowIndex].url
|
||||||
|
})
|
||||||
|
}, switchTime)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const imageAdapter = computed(() => {
|
const imageAdapter = computed(() => {
|
||||||
const style = {
|
const style = {
|
||||||
@ -137,6 +182,7 @@ const withInit = () => {
|
|||||||
if (element.value.propValue['urlList'] && element.value.propValue['urlList'].length > 0) {
|
if (element.value.propValue['urlList'] && element.value.propValue['urlList'].length > 0) {
|
||||||
state.showUrl = element.value.propValue['urlList'][0].url
|
state.showUrl = element.value.propValue['urlList'][0].url
|
||||||
}
|
}
|
||||||
|
initCarousel()
|
||||||
}
|
}
|
||||||
|
|
||||||
const calcData = (view: Chart, callback) => {
|
const calcData = (view: Chart, callback) => {
|
||||||
@ -163,6 +209,7 @@ const calcData = (view: Chart, callback) => {
|
|||||||
dvMainStore.setViewDataDetails(element.value.id, res)
|
dvMainStore.setViewDataDetails(element.value.id, res)
|
||||||
initReady.value = true
|
initReady.value = true
|
||||||
initCurFields(res)
|
initCurFields(res)
|
||||||
|
initCarousel()
|
||||||
}
|
}
|
||||||
callback?.()
|
callback?.()
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
@ -197,6 +244,13 @@ const renderChart = viewInfo => {
|
|||||||
//do renderView
|
//do renderView
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onBeforeMount(() => {
|
||||||
|
if (carouselTimer) {
|
||||||
|
clearInterval(carouselTimer)
|
||||||
|
carouselTimer = null
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
calcData,
|
calcData,
|
||||||
renderChart
|
renderChart
|
||||||
|
@ -31,9 +31,11 @@ import { BASE_VIEW_CONFIG } from '../util/chart'
|
|||||||
import { cloneDeep, defaultsDeep } from 'lodash-es'
|
import { cloneDeep, defaultsDeep } from 'lodash-es'
|
||||||
import BubbleAnimateCfg from '@/views/chart/components/editor/editor-senior/components/BubbleAnimateCfg.vue'
|
import BubbleAnimateCfg from '@/views/chart/components/editor/editor-senior/components/BubbleAnimateCfg.vue'
|
||||||
import { XpackComponent } from '@/components/plugin'
|
import { XpackComponent } from '@/components/plugin'
|
||||||
|
import CarouselSetting from '@/custom-component/common/CarouselSetting.vue'
|
||||||
const dvMainStore = dvMainStoreWithOut()
|
const dvMainStore = dvMainStoreWithOut()
|
||||||
|
|
||||||
const { nowPanelTrackInfo, nowPanelJumpInfo, dvInfo, componentData } = storeToRefs(dvMainStore)
|
const { nowPanelTrackInfo, nowPanelJumpInfo, dvInfo, componentData, curComponent } =
|
||||||
|
storeToRefs(dvMainStore)
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const linkJumpRef = ref(null)
|
const linkJumpRef = ref(null)
|
||||||
@ -422,6 +424,11 @@ const removeJumpSenior = () => {
|
|||||||
@onBubbleAnimateChange="onBubbleAnimateChange"
|
@onBubbleAnimateChange="onBubbleAnimateChange"
|
||||||
/>
|
/>
|
||||||
</collapse-switch-item>
|
</collapse-switch-item>
|
||||||
|
<carousel-setting
|
||||||
|
v-if="curComponent?.innerType === 'picture-group'"
|
||||||
|
:element="curComponent"
|
||||||
|
:themes="themes"
|
||||||
|
></carousel-setting>
|
||||||
</el-collapse>
|
</el-collapse>
|
||||||
</el-row>
|
</el-row>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user