forked from github/dataease
Merge pull request #9855 from dataease/pr@dev-v2@feat_scroll-text2
feat(数据大屏): 优化跑马灯组件
This commit is contained in:
commit
3027e49afb
@ -0,0 +1 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1716538241941" class="icon" viewBox="0 0 1166 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4799" xmlns:xlink="http://www.w3.org/1999/xlink" width="227.734375" height="200"><path d="M1016.603881 149.959255A508.396905 508.396905 0 0 0 661.880392 0H47.123419a42.206376 42.206376 0 0 0-42.206376 42.206376 42.206376 42.206376 0 0 0 42.206376 42.206376h607.45527c235.764818 0 427.571694 191.806877 427.571695 427.571695S890.343507 939.577245 654.578689 939.577245s-427.571694-191.82798-427.571694-427.592798h105.51594a42.206376 42.206376 0 0 0 42.206376-42.206376 42.206376 42.206376 0 0 0-42.206376-42.206377H42.206376a42.206376 42.206376 0 0 0-42.206376 42.206377 42.206376 42.206376 0 0 0 42.206376 42.206376h100.387866a511.984447 511.984447 0 0 0 874.009639 362.046295 512.00555 512.00555 0 0 0 0-724.071487z" p-id="4800"></path><path d="M411.237827 298.166945a42.206376 42.206376 0 0 0 42.206376-42.206376 42.206376 42.206376 0 0 0-42.206376-42.206377H120.857958a42.206376 42.206376 0 0 0-42.206376 42.206377 42.206376 42.206376 0 0 0 42.206376 42.206376zM635.205962 232.388308a42.311892 42.311892 0 0 0-42.206376 42.206376v290.379868a42.311892 42.311892 0 0 0 42.206376 42.206377h228.737456a42.206376 42.206376 0 0 0 42.206377-42.206377 42.206376 42.206376 0 0 0-42.206377-42.206376h-186.657699V274.573581A42.206376 42.206376 0 0 0 635.205962 232.388308z" p-id="4801"></path></svg>
|
After Width: | Height: | Size: 1.5 KiB |
@ -84,7 +84,7 @@
|
|||||||
@change="changeStyle"
|
@change="changeStyle"
|
||||||
>
|
>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<el-icon>
|
<el-icon :class="{ 'dark-icon': themes === 'dark' }">
|
||||||
<Icon :name="styleOptionKey.icon" />
|
<Icon :name="styleOptionKey.icon" />
|
||||||
</el-icon>
|
</el-icon>
|
||||||
</template>
|
</template>
|
||||||
@ -266,12 +266,28 @@ const styleMounted = ref({
|
|||||||
opacity: 1,
|
opacity: 1,
|
||||||
fontSize: 22,
|
fontSize: 22,
|
||||||
activeFontSize: 22,
|
activeFontSize: 22,
|
||||||
|
letterSpacing: 0,
|
||||||
|
scrollSpeed: 0,
|
||||||
fontWeight: 'normal',
|
fontWeight: 'normal',
|
||||||
fontStyle: 'normal',
|
fontStyle: 'normal',
|
||||||
textAlign: 'center',
|
textAlign: 'center',
|
||||||
color: '#000000'
|
color: '#000000'
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const scrollSpeedList = [
|
||||||
|
{ name: '停止', value: 0 },
|
||||||
|
{ name: '1', value: 20 },
|
||||||
|
{ name: '2', value: 18 },
|
||||||
|
{ name: '3', value: 16 },
|
||||||
|
{ name: '4', value: 14 },
|
||||||
|
{ name: '5', value: 12 },
|
||||||
|
{ name: '6', value: 10 },
|
||||||
|
{ name: '7', value: 8 },
|
||||||
|
{ name: '8', value: 6 },
|
||||||
|
{ name: '9', value: 4 },
|
||||||
|
{ name: '10', value: 2 }
|
||||||
|
]
|
||||||
|
|
||||||
const opacitySizeList = [
|
const opacitySizeList = [
|
||||||
{ name: '0.1', value: 0.1 },
|
{ name: '0.1', value: 0.1 },
|
||||||
{ name: '0.2', value: 0.2 },
|
{ name: '0.2', value: 0.2 },
|
||||||
@ -310,6 +326,17 @@ const styleColorKeyArray = [
|
|||||||
{ value: 'backgroundColor', label: '背景色', width: 90, icon: 'dv-style-backgroundColor' }
|
{ value: 'backgroundColor', label: '背景色', width: 90, icon: 'dv-style-backgroundColor' }
|
||||||
]
|
]
|
||||||
|
|
||||||
|
const letterSpacingList = computed(() => {
|
||||||
|
const arr = []
|
||||||
|
for (let i = 0; i <= 60; i = i + 1) {
|
||||||
|
arr.push({
|
||||||
|
name: i + '',
|
||||||
|
value: i
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return arr
|
||||||
|
})
|
||||||
|
|
||||||
const fontSizeList = computed(() => {
|
const fontSizeList = computed(() => {
|
||||||
const arr = []
|
const arr = []
|
||||||
for (let i = 10; i <= 60; i = i + 1) {
|
for (let i = 10; i <= 60; i = i + 1) {
|
||||||
@ -351,6 +378,13 @@ const borderStyleList = [
|
|||||||
|
|
||||||
//大小随画布缩放动态变化
|
//大小随画布缩放动态变化
|
||||||
const styleOptionMountedKeyArray = [
|
const styleOptionMountedKeyArray = [
|
||||||
|
{
|
||||||
|
value: 'letterSpacing',
|
||||||
|
label: '字间距',
|
||||||
|
customOption: letterSpacingList.value,
|
||||||
|
width: '90px',
|
||||||
|
icon: 'dv-style-letterSpacing'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
value: 'fontSize',
|
value: 'fontSize',
|
||||||
label: '字体大小',
|
label: '字体大小',
|
||||||
@ -369,6 +403,13 @@ const styleOptionMountedKeyArray = [
|
|||||||
|
|
||||||
//大小不变
|
//大小不变
|
||||||
const styleOptionKeyArray = [
|
const styleOptionKeyArray = [
|
||||||
|
{
|
||||||
|
value: 'scrollSpeed',
|
||||||
|
label: '滚动速度',
|
||||||
|
customOption: scrollSpeedList,
|
||||||
|
width: '90px',
|
||||||
|
icon: 'dv-style-scroll-speed'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
value: 'opacity',
|
value: 'opacity',
|
||||||
label: '不透明度',
|
label: '不透明度',
|
||||||
|
@ -11,7 +11,7 @@ const props = defineProps({
|
|||||||
},
|
},
|
||||||
dvModel: {
|
dvModel: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'dv'
|
default: 'dataV'
|
||||||
},
|
},
|
||||||
element: {
|
element: {
|
||||||
type: Object,
|
type: Object,
|
||||||
@ -52,6 +52,7 @@ const newComponent = (componentName, innerType) => {
|
|||||||
v-on:click="newComponent('UserView', 'rich-text')"
|
v-on:click="newComponent('UserView', 'rich-text')"
|
||||||
></drag-component>
|
></drag-component>
|
||||||
<drag-component
|
<drag-component
|
||||||
|
v-if="dvModel === 'dataV'"
|
||||||
:themes="themes"
|
:themes="themes"
|
||||||
icon="dv-scroll-text"
|
icon="dv-scroll-text"
|
||||||
label="跑马灯"
|
label="跑马灯"
|
||||||
|
@ -386,7 +386,7 @@ const list = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
component: 'CanvasBoard',
|
component: 'CanvasBoard',
|
||||||
name: '图形',
|
name: '边框',
|
||||||
label: '边框',
|
label: '边框',
|
||||||
propValue: '',
|
propValue: '',
|
||||||
icon: 'other_material_board',
|
icon: 'other_material_board',
|
||||||
@ -497,7 +497,8 @@ const list = [
|
|||||||
letterSpacing: 0,
|
letterSpacing: 0,
|
||||||
color: '',
|
color: '',
|
||||||
padding: 4,
|
padding: 4,
|
||||||
verticalAlign: 'middle'
|
verticalAlign: 'middle',
|
||||||
|
scrollSpeed: 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { keycodes } from '@/utils/DeShortcutKey.js'
|
import { keycodes } from '@/utils/DeShortcutKey.js'
|
||||||
import eventBus from '@/utils/eventBus'
|
import eventBus from '@/utils/eventBus'
|
||||||
import { nextTick, onBeforeUnmount, ref } from 'vue'
|
import { computed, nextTick, onBeforeUnmount, ref } from 'vue'
|
||||||
import { toRefs } from 'vue'
|
import { toRefs } from 'vue'
|
||||||
import { dvMainStoreWithOut } from '@/store/modules/data-visualization/dvMain'
|
import { dvMainStoreWithOut } from '@/store/modules/data-visualization/dvMain'
|
||||||
import { storeToRefs } from 'pinia'
|
import { storeToRefs } from 'pinia'
|
||||||
@ -112,17 +112,30 @@ const selectText = element => {
|
|||||||
onBeforeUnmount(() => {
|
onBeforeUnmount(() => {
|
||||||
eventBus.off('componentClick', onComponentClick)
|
eventBus.off('componentClick', onComponentClick)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const varStyle = computed(() => [{ '--scroll-speed': `${element.value.style.scrollSpeed}s` }])
|
||||||
|
|
||||||
|
const textStyle = computed(() => {
|
||||||
|
return {
|
||||||
|
verticalAlign: element.value['style'].verticalAlign
|
||||||
|
}
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div v-if="editMode == 'edit'" class="v-text" @keydown="handleKeydown" @keyup="handleKeyup">
|
<div
|
||||||
|
v-if="editMode == 'edit'"
|
||||||
|
:style="varStyle"
|
||||||
|
class="v-text"
|
||||||
|
@keydown="handleKeydown"
|
||||||
|
@keyup="handleKeyup"
|
||||||
|
>
|
||||||
<div
|
<div
|
||||||
ref="text"
|
ref="text"
|
||||||
class="marquee-txt"
|
|
||||||
:contenteditable="canEdit"
|
:contenteditable="canEdit"
|
||||||
:class="{ 'can-edit': canEdit }"
|
:class="{ 'can-edit': canEdit, 'marquee-txt': !canEdit }"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
:style="{ verticalAlign: element['style'].verticalAlign }"
|
:style="textStyle"
|
||||||
@dblclick="setEdit"
|
@dblclick="setEdit"
|
||||||
@paste="clearStyle"
|
@paste="clearStyle"
|
||||||
@mousedown="handleMousedown"
|
@mousedown="handleMousedown"
|
||||||
@ -132,11 +145,7 @@ onBeforeUnmount(() => {
|
|||||||
></div>
|
></div>
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="v-text preview">
|
<div v-else class="v-text preview">
|
||||||
<div
|
<div class="marquee-txt" :style="textStyle" v-html="element['propValue']"></div>
|
||||||
class="marquee-txt"
|
|
||||||
:style="{ verticalAlign: element['style'].verticalAlign }"
|
|
||||||
v-html="element['propValue']"
|
|
||||||
></div>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -175,7 +184,7 @@ onBeforeUnmount(() => {
|
|||||||
.marquee-txt {
|
.marquee-txt {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding-left: 100%; /* 从右至左开始滚动 */
|
padding-left: 100%; /* 从右至左开始滚动 */
|
||||||
animation: marqueeAnimation 10s linear infinite;
|
animation: marqueeAnimation var(--scroll-speed) linear infinite;
|
||||||
}
|
}
|
||||||
@keyframes marqueeAnimation {
|
@keyframes marqueeAnimation {
|
||||||
0% {
|
0% {
|
||||||
|
@ -7,7 +7,7 @@ import { groupSizeStyleAdaptor } from '@/utils/style'
|
|||||||
const dvMainStore = dvMainStoreWithOut()
|
const dvMainStore = dvMainStoreWithOut()
|
||||||
const { componentData, curComponentIndex, canvasStyleData } = storeToRefs(dvMainStore)
|
const { componentData, curComponentIndex, canvasStyleData } = storeToRefs(dvMainStore)
|
||||||
|
|
||||||
const needToChangeAttrs = ['top', 'left', 'width', 'height', 'fontSize']
|
const needToChangeAttrs = ['top', 'left', 'width', 'height', 'fontSize', 'letterSpacing']
|
||||||
|
|
||||||
export function changeSizeWithScale(scale) {
|
export function changeSizeWithScale(scale) {
|
||||||
return changeComponentsSizeWithScale(scale)
|
return changeComponentsSizeWithScale(scale)
|
||||||
|
Loading…
Reference in New Issue
Block a user