提交 71dc03b4 authored 作者: dataeaseShu's avatar dataeaseShu

feat: 【仪表板】筛选框文字支持排列设置(靠上、居中等)

上级 73a9a0bd
...@@ -153,7 +153,7 @@ ...@@ -153,7 +153,7 @@
<div v-if="attrShow('titlePostion')" style="width: 20px;float: left;margin-top: 2px;margin-left: 10px;"> <div v-if="attrShow('titlePostion')" style="width: 20px;float: left;margin-top: 2px;margin-left: 10px;">
<el-tooltip content="标题位置"> <el-tooltip content="标题位置">
<title-postion :style-info="styleInfo" /> <title-postion :show-vertical="showVertical" :style-info="styleInfo" />
</el-tooltip> </el-tooltip>
</div> </div>
<!--tab 内部组件样式--> <!--tab 内部组件样式-->
...@@ -181,7 +181,6 @@ ...@@ -181,7 +181,6 @@
<script> <script>
import { mapState } from 'vuex' import { mapState } from 'vuex'
import Hyperlinks from '@/components/canvas/components/Editor/Hyperlinks'
import VideoLinks from '@/components/canvas/components/Editor/VideoLinks' import VideoLinks from '@/components/canvas/components/Editor/VideoLinks'
import StreamMediaLinks from '@/components/canvas/components/Editor/StreamMediaLinks' import StreamMediaLinks from '@/components/canvas/components/Editor/StreamMediaLinks'
import DateFormat from '@/components/canvas/components/Editor/DateFormat' import DateFormat from '@/components/canvas/components/Editor/DateFormat'
...@@ -189,7 +188,7 @@ import { COLOR_PANEL } from '@/views/chart/chart/chart' ...@@ -189,7 +188,7 @@ import { COLOR_PANEL } from '@/views/chart/chart/chart'
import FrameLinks from '@/components/canvas/components/Editor/FrameLinks' import FrameLinks from '@/components/canvas/components/Editor/FrameLinks'
export default { export default {
components: { FrameLinks, Hyperlinks, DateFormat, VideoLinks, StreamMediaLinks }, components: { FrameLinks, DateFormat, VideoLinks, StreamMediaLinks },
props: { props: {
scrollLeft: { scrollLeft: {
type: Number, type: Number,
...@@ -356,6 +355,9 @@ export default { ...@@ -356,6 +355,9 @@ export default {
canvasWidth() { canvasWidth() {
return this.canvasStyleData.width * this.curCanvasScale.scalePointWidth return this.canvasStyleData.width * this.curCanvasScale.scalePointWidth
}, },
showVertical() {
return !['textSelectGridWidget', 'numberSelectGridWidget'].includes(this.curComponent.serviceName)
},
...mapState([ ...mapState([
'curComponent', 'curComponent',
'curCanvasScale', 'curCanvasScale',
......
<template> <template>
<div ref="myContainer" class="my-container"> <div ref="myContainer" class="my-container">
<div ref="conditionMain" class="condition-main" :class="mainClass"> <div ref="conditionMain" :style="outsideStyle" class="condition-main">
<div v-if="element.options.attrs.title" ref="deTitleContainer" class="condition-title"> <div v-if="element.options.attrs.title" ref="deTitleContainer" :style="titleStyle" class="condition-title">
<div class="condition-title-absolute"> <div class="condition-title-absolute">
<div class="first-title"> <div class="first-title">
<div class="span-container"> <div class="span-container">
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
<div <div
ref="deContentContainer" ref="deContentContainer"
class="condition-content" class="condition-content"
:style="titleStyle"
:class="element.options.attrs.title ? '' : 'condition-content-default'" :class="element.options.attrs.title ? '' : 'condition-content-default'"
> >
<div class="condition-content-container"> <div class="condition-content-container">
...@@ -43,7 +44,6 @@ ...@@ -43,7 +44,6 @@
</template> </template>
<script> <script>
import elementResizeDetectorMaker from 'element-resize-detector'
import { mapState } from 'vuex' import { mapState } from 'vuex'
export default { export default {
name: 'DeOutWidget', name: 'DeOutWidget',
...@@ -81,7 +81,9 @@ export default { ...@@ -81,7 +81,9 @@ export default {
showNumber: false, showNumber: false,
mainClass: '', mainClass: '',
mainHeight: 75, mainHeight: 75,
duHeight: 46 duHeight: 46,
titleStyle: null,
outsideStyle: null
} }
}, },
computed: { computed: {
...@@ -101,61 +103,43 @@ export default { ...@@ -101,61 +103,43 @@ export default {
]) ])
}, },
watch: { watch: {
element: { 'element.style': {
handler() { handler(val) {
this.watchSize() this.handlerPositionChange(val)
}, },
deep: true deep: true,
immediate: true
} }
}, },
mounted() { mounted() {
this.watchSize() // this.watchSize()
}, },
created() { created() {
// console.log('aaaaaa')
const { horizontal, vertical } = this.element.style
this.$set(this.element.style, 'horizontal', horizontal || 'left')
this.$set(this.element.style, 'vertical', vertical || 'top')
}, },
methods: { methods: {
handlerPositionChange(val) {
watchSize() { const { horizontal = 'left', vertical = 'top' } = val
const erd = elementResizeDetectorMaker() this.titleStyle = {
erd.listenTo(this.$refs.myContainer, ele => { width: '100%',
const deContentContainer = this.$refs.deContentContainer textAlign: horizontal
const height = ele.offsetHeight
this.mainHeight = height
if (!this.element.options.attrs.title) {
this.duHeight = this.mainHeight
deContentContainer.style.marginLeft = '0px'
return
}
const titleWidth = this.$refs.deTitle.offsetWidth
this.$nextTick(() => {
let numRange = 0
let min = this.element.style.fontSize * 2 + 30
if (this.element.component === 'de-number-range') {
min = this.element.style.fontSize * 2 + 55
numRange = 25
} }
if (height < min) { this.outsideStyle = {
this.duHeight = height - numRange flexWrap: 'wrap'
this.mainClass = 'condition-main-line'
if (deContentContainer) {
deContentContainer.style.top = '0px'
deContentContainer.style.marginLeft = (titleWidth + 15) + 'px'
} }
} else { if (vertical !== 'top') {
this.duHeight = height - titleWidth + numRange this.titleStyle = null
this.mainClass = '' this.outsideStyle = {
if (deContentContainer) { flexDirection: horizontal === 'right' ? 'row-reverse' : '',
deContentContainer.style.top = '2em' alignItems: 'center'
deContentContainer.style.marginLeft = '0px'
} }
} }
})
})
} }
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
...@@ -167,7 +151,6 @@ export default { ...@@ -167,7 +151,6 @@ export default {
bottom: 0px; bottom: 0px;
left: 0px; left: 0px;
} }
.ccondition-main { .ccondition-main {
position: absolute; position: absolute;
overflow: auto; overflow: auto;
...@@ -175,53 +158,23 @@ export default { ...@@ -175,53 +158,23 @@ export default {
right: 0px; right: 0px;
bottom: 0px; bottom: 0px;
left: 0px; left: 0px;
display: flex;
} }
.condition-title { .condition-title {
top: 0px;
right: 0px;
bottom: 0px;
left: 0px;
position: absolute;
height: 2em; height: 2em;
cursor: -webkit-grab; cursor: -webkit-grab;
line-height: 2em;
white-space: nowrap;
} }
.first-title {
width: 100%;
overflow: hidden;
position: absolute;
color: inherit;
display: flex;
align-items: center;
}
.condition-title-absolute {
right: 0px;
bottom: 0px;
position: absolute;
top: 0px;
left: 4px;
display: flex;
align-items: flex-end;
}
.span-container { .span-container {
overflow: hidden auto; overflow: hidden auto;
position: relative; position: relative;
padding: 0 5px; padding: 0 5px;
} }
.condition-content { .condition-content {
overflow: auto hidden; overflow: auto hidden;
top: 2em;
left: 0px;
right: 0px;
bottom: 0px;
position: absolute;
letter-spacing: 0px !important; letter-spacing: 0px !important;
} }
.condition-content-container { .condition-content-container {
position: relative; position: relative;
display: table; display: table;
...@@ -229,7 +182,6 @@ export default { ...@@ -229,7 +182,6 @@ export default {
height: 100%; height: 100%;
white-space: nowrap; white-space: nowrap;
} }
.first-element { .first-element {
position: relative; position: relative;
display: table-cell; display: table-cell;
...@@ -238,34 +190,29 @@ export default { ...@@ -238,34 +190,29 @@ export default {
padding: 0px; padding: 0px;
height: 100%; height: 100%;
} }
.first-element-contaner { .first-element-contaner {
width: calc(100% - 10px); width: calc(100% - 10px);
background: initial; background: initial;
position: absolute;
bottom: 5px;
margin: 0 4px; margin: 0 4px;
div { div {
width: 100%; width: 100%;
} }
display: flex; display: flex;
align-items: flex-end; align-items: flex-end;
} }
.first-element-grid-contaner { .first-element-grid-contaner {
background: #fff; background: #fff;
border: 1px solid #d7dae2; border: 1px solid #d7dae2;
top: 5px; top: 5px;
} }
.condition-main-line { .condition-main-line {
height: 40px !important; height: 40px !important;
} }
.condition-main {
display: flex;
padding-top: 5px;
}
.condition-content-default { .condition-content-default {
inset: 0px 0px 0px !important; inset: 0px 0px 0px !important;
} }
</style> </style>
...@@ -7,17 +7,16 @@ ...@@ -7,17 +7,16 @@
<el-col> <el-col>
<el-form ref="tabsStyleForm" :model="styleInfo" label-width="80px" size="mini" class="demo-form-inline"> <el-form ref="tabsStyleForm" :model="styleInfo" label-width="80px" size="mini" class="demo-form-inline">
<el-form-item :label="$t('chart.text_h_position')" class="form-item"> <el-form-item :label="$t('chart.text_h_position')" class="form-item">
<el-radio-group v-model="styleInfo.hPosition" size="mini" @change="styleChange"> <el-radio-group v-model="styleInfo.horizontal" size="mini">
<el-radio-button label="left">{{ $t('chart.text_pos_left') }}</el-radio-button> <el-radio-button label="left">{{ $t('chart.text_pos_left') }}</el-radio-button>
<el-radio-button label="center">{{ $t('chart.text_pos_center') }}</el-radio-button> <el-radio-button label="center">{{ $t('chart.text_pos_center') }}</el-radio-button>
<el-radio-button label="right">{{ $t('chart.text_pos_right') }}</el-radio-button> <el-radio-button label="right">{{ $t('chart.text_pos_right') }}</el-radio-button>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item :label="$t('chart.text_v_position')" class="form-item"> <el-form-item v-if="showVertical" :label="$t('chart.text_v_position')" class="form-item">
<el-radio-group v-model="styleInfo.vPosition" size="mini" @change="styleChange"> <el-radio-group v-model="styleInfo.vertical" size="mini">
<el-radio-button label="top">{{ $t('chart.text_pos_top') }}</el-radio-button> <el-radio-button label="top">{{ $t('chart.text_pos_top') }}</el-radio-button>
<el-radio-button label="center">{{ $t('chart.text_pos_center') }}</el-radio-button> <el-radio-button label="center">{{ $t('chart.text_pos_center') }}</el-radio-button>
<el-radio-button label="bottom">{{ $t('chart.text_pos_bottom') }}</el-radio-button>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
...@@ -37,25 +36,10 @@ export default { ...@@ -37,25 +36,10 @@ export default {
styleInfo: { styleInfo: {
type: Object, type: Object,
default: null default: null
}
},
data() {
return {
defaultPosition: {
hPosition: 'left',
vPosition: 'center'
}
}
}, },
showVertical: {
created() { type: Boolean,
default: false
},
methods: {
styleChange() {
this.$store.commit('recordStyleChange')
} }
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论