123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- <template>
- <!-- <transition name="slide-fade"> -->
- <div
- v-if="rightVisiable"
- class="bs-right-panel-wrap"
- >
- <div class="bs-set-title">
- <SettingTitle>{{ chartSettingShow ? `${title}设置` : '大屏设置' }}</SettingTitle>
- </div>
- <div :class="!rightVisiable ? 'bs-page-right bs-page-right-fold' : 'bs-page-right'">
- <RightSetting
- v-if="chartSettingShow"
- @closeRightPanel="close"
- @updateSetting="updateSetting"
- @updateDataSetting="updateDataSetting"
- >
- <template #dataSetSelect="{value}">
- <slot
- name="dataSetSelect"
- :value="value"
- />
- </template>
- </RightSetting>
- <OverallSetting
- v-if="!chartSettingShow"
- ref="OverallSetting"
- @close="close"
- @styleHandler="styleHandler"
- />
- </div>
- </div>
- <!-- </transition> -->
- </template>
- <script>
- import SettingTitle from 'data-room-ui/SettingTitle/index.vue'
- import RightSetting from 'data-room-ui/BigScreenDesign/RightSetting/index.vue'
- import OverallSetting from 'data-room-ui/BigScreenDesign/OverallSetting/index.vue'
- import { mapState } from 'vuex'
- export default {
- name: '',
- components: {
- SettingTitle,
- RightSetting,
- OverallSetting
- },
- props: {
- rightVisiable: {
- type: Boolean,
- default: false
- },
- pageInfoVisiable: {
- type: Boolean,
- default: false
- },
- headerShow: {
- type: Boolean,
- default: true
- },
- height: {
- type: String,
- default: '100vh'
- }
- },
- data () {
- return {
- count: 0,
- right: 0
- }
- },
- watch: {
- rightVisiable (value) {
- const leftElement = document.querySelector('.bs-left-panel')
- const contentElement = document.querySelector('.grid-wrap-box')
- // const rightElement = document.querySelector('.bs-right-panel-wrap')
- const mapElement = document.querySelector('.minimap')
- if (value) {
- if (parseInt(window.getComputedStyle(mapElement).right) > parseInt(window.getComputedStyle(leftElement).width) + parseInt(window.getComputedStyle(contentElement).width) - 320 - parseInt(window.getComputedStyle(mapElement).width)) {
- // 此时距离超出可视范围
- this.count = 1
- this.right = window.getComputedStyle(mapElement).right
- mapElement.style.right = parseInt(window.getComputedStyle(leftElement).width) + parseInt(window.getComputedStyle(contentElement).width) - 320 - parseInt(window.getComputedStyle(mapElement).width) + 'px'
- }
- } else {
- if (this.count === 1) {
- mapElement.style.right = this.right
- this.count--
- }
- }
- }
- },
- computed: {
- ...mapState('bigScreen', {
- activeItem: state => state.activeItemConfig,
- activeCode: state => state.activeCode
- }),
- chartSettingShow () {
- return this.rightVisiable && this.activeCode
- },
- title () {
- if (this.activeItem.type === 'customComponent') {
- return this.activeItem?.category
- } else if (this.activeItem.type === 'remoteComponent') {
- return this.activeItem?.title
- } else {
- return this.activeItem?.name
- }
- // if(this.activeItem)
- }
- },
- mounted () { },
- methods: {
- styleHandler (config) {
- this.$emit('styleHandler', config)
- },
- toggleShow () {
- this.$emit('update:rightVisiable', !this.rightVisiable)
- },
- close () {
- this.$emit('update:rightVisiable', false)
- },
- updateSetting (config) {
- this.$emit('updateSetting', config)
- },
- updateDataSetting (config) {
- this.$emit('updateDataSetting', config)
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- .bs-right-panel-wrap {
- //z-index: 1000;
- display: flex;
- flex-direction: column;
- background-color: var(--bs-background-1);
- .bs-set-title {
- background-color: var(--bs-background-2);
- color: var(--bs-el-title);
- height: 40px;
- font-size: 14px;
- border-bottom: 2px solid var(--bs-background-1);
- display: flex;
- align-items: center;
- z-index: 1000;
- .bs-set-title-text {
- position: relative;
- padding-left: 12px;
- display: inline-block;
- &:after{
- position: absolute;
- left: 0;
- top: 50%;
- transform: translateY(-50%);
- content: '';
- width: 4px;
- height: 14px;
- background-color: var(--bs-el-color-primary);
- }
- }
- }
- .bs-folder-wrap {
- width: 20px;
- position: relative;
- i {
- position: absolute;
- top: 50%;
- left: 0;
- transform: translateY(-50%);
- font-size: 20px;
- color: #fff;
- cursor: pointer;
- z-index: 1;
- }
- &:hover {
- background: rgba(143, 225, 255, .1)
- }
- }
- .bs-page-right {
- height: calc(100vh - 80px);
- width: 320px;
- box-sizing: border-box;
- background-color: var(--bs-background-2);
- .config-title {
- display: flex;
- height: 40px;
- line-height: 40px;
- padding: 0 10px;
- color: #fff;
- font-size: 14px;
- /* border-bottom: 1px solid #ebeef5; */
- .config-title-text {
- display: inline-block;
- max-width: 200px;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- }
- >* {
- color: #fff;
- }
- // 左侧居中伸缩图标
- &::after {
- content: '';
- position: absolute;
- top: 0;
- left: -10px;
- width: 10px;
- height: 100%;
- background: #fff;
- cursor: pointer;
- z-index: 1;
- }
- }
- .bs-page-right-fold {
- width: 0;
- overflow: hidden;
- }
- .slider-zoom {
- position: absolute;
- bottom: 10px;
- right: -10px;
- }
- }
- .slide-fade-enter-active {
- transition: all .3s ease;
- }
- .slide-fade-leave-active {
- transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);
- }
- .slide-fade-enter,
- .slide-fade-leave-to
- /* .slide-fade-leave-active for below version 2.1.8 */
- {
- transform: translateX(10px);
- opacity: 0;
- }
- ::v-deep .el-scrollbar__view{
- height: calc(100vh - 80px);
- overflow-x: unset;
- }
- </style>
|