dataease-dm/frontend/src/views/panel/list/PanelViewShow.vue

286 lines
6.4 KiB
Vue
Raw Normal View History

<template>
<el-row style="height: 100%;overflow-y: hidden;width: 100%;">
<el-row style="display: flex;height: 100%">
<el-col class="panel-design">
<!--TODO 仪表盘设计公共设置区域-->
<el-row class="panel-design-head">
2021-03-22 19:05:35 +08:00
<span style="float: left;line-height: 40px; color: gray">
<span>名称{{ panelInfo.name || '测试仪表板' }}</span>
</span>
<span style="float: right;line-height: 40px;">
2021-03-22 19:05:35 +08:00
<el-tooltip content="返回目录">
<el-button class="el-icon-refresh-left" size="mini" circle />
</el-tooltip>
<el-tooltip content="背景图">
<el-button class="el-icon-full-screen" size="mini" circle />
</el-tooltip>
<el-tooltip content="预览">
<el-button class="el-icon-view" size="mini" circle @click="save" />
</el-tooltip>
</span>
</el-row>
<el-row class="panel-design-show">
<div class="container" :style="panelDetails.gridStyle">
2021-03-19 17:06:52 +08:00
<vue-drag-resize-rotate
v-for="panelDesign in panelDetails.panelDesigns"
v-show="panelDesign.keepFlag"
:key="panelDesign.id"
2021-03-22 17:27:16 +08:00
:panel-design="panelDesign"
2021-03-19 17:06:52 +08:00
:parent="true"
@newStyle="newStyle"
>
<!--视图显示 panelDesign.componentType==='view'-->
2021-03-19 17:06:52 +08:00
<chart-component v-if="panelDesign.componentType==='view'" :ref="panelDesign.id" :chart-id="panelDesign.id" :chart="panelDesign.chartView" />
<!--组件显示待开发-->
</vue-drag-resize-rotate>
</div>
2021-03-22 19:05:35 +08:00
</el-row></el-col>
</el-row>
</el-row>
</template>
<script>
2021-03-22 17:27:16 +08:00
import { post, get } from '@/api/panel/panel'
2021-03-19 17:06:52 +08:00
import ChartComponent from '../../chart/components/ChartComponent'
import VueDragResizeRotate from '@/components/vue-drag-resize-rotate'
import { uuid } from 'vue-uuid'
export default {
name: 'PanelViewShow',
2021-03-22 19:05:35 +08:00
components: { ChartComponent, VueDragResizeRotate },
2021-03-19 17:06:52 +08:00
data() {
return {
panelDetails: {
viewsUsable: [],
panelDesigns: [],
gridStyle: null
},
gridStyleDefault: {
position: 'relative',
height: '100%',
width: '100%',
2021-03-22 17:27:16 +08:00
backgroundColor: '#f2f2f2',
// background: 'linear-gradient(-90deg, rgba(0, 0, 0, .1) 1px, transparent 1px), linear-gradient(rgba(0, 0, 0, .1) 1px, transparent 1px)',
2021-03-19 17:06:52 +08:00
backgroundSize: '20px 20px, 20px 20px'
},
ViewActiveName: 'Views'
}
},
computed: {
panelInfo() {
return this.$store.state.panel.panelInfo
}
},
watch: {
panelInfo(newVal, oldVal) {
this.panelDesign(newVal.id)
}
},
created() {
// this.get(this.$store.state.chart.viewId);
},
mounted() {
const panelId = this.$store.state.panel.panelInfo.id
if (panelId) {
this.panelDesign(panelId)
}
},
activated() {
},
methods: {
// 加载公共组件
// 加载panel design
panelDesign(panelId) {
get('panel/group/findOne/' + panelId).then(res => {
const panelDetailsInfo = res.data
if (panelDetailsInfo) {
this.panelDetails = panelDetailsInfo
}
if (!panelDetailsInfo.gridStyle) {
this.panelDetails.gridStyle = this.gridStyleDefault
}
})
},
2021-03-19 17:06:52 +08:00
panelViewAdd(view) {
const panelDesigns = this.panelDetails.panelDesigns
this.panelDetails.viewsUsable.forEach(function(item, index) {
if (item.id === view.id) {
const newComponent = {
id: uuid.v1(),
keepFlag: true,
chartView: item,
2021-03-22 17:27:16 +08:00
componentType: 'view',
styleInit: false
2021-03-19 17:06:52 +08:00
}
panelDesigns.push(newComponent)
}
})
},
2021-03-22 17:27:16 +08:00
// removeView(panelDesignId) {
// this.panelDetails.panelDesigns.forEach(function(panelDesign, index) {
// if (panelDesign.id === panelDesignId) {
// panelDesign.keepFlag = false
// }
// })
// },
2021-03-19 17:06:52 +08:00
newStyle(viewId, newStyleInfo) {
this.$nextTick(() => {
this.$refs[viewId][0].chartResize()
})
2021-03-22 17:27:16 +08:00
this.panelInfo.preStyle = JSON.stringify(newStyleInfo)
2021-03-19 17:06:52 +08:00
console.log(viewId)
console.log(JSON.stringify(newStyleInfo))
},
2021-03-19 17:06:52 +08:00
// 左边往右边拖动时的事件
start1(e) {
console.log(e)
},
2021-03-19 17:06:52 +08:00
end1(e) {
console.log(e)
},
2021-03-19 17:06:52 +08:00
// 右边往左边拖动时的事件
start2(e) {
console.log(e)
},
end2(e) {
console.log(e)
},
// move回调方法
onMove(e, originalEvent) {
console.log(e)
return true
},
preViewShow() {
2021-03-22 17:27:16 +08:00
},
savePanel() {
post('panel/group/saveGroupWithDesign', this.panelDetails, () => {
})
this.$success(this.$t('commons.save_success'))
2021-03-22 19:05:35 +08:00
},
save() {
}
}
2021-03-19 17:06:52 +08:00
}
</script>
<style scoped>
.view-list {
height: 100%;
width: 20%;
min-width: 180px;
max-width: 220px;
border: 1px solid #E6E6E6;
border-left: 0 solid;
overflow-y: auto;
}
.view-list-thumbnails-outline {
height: 100%;
overflow-y: auto;
}
.view-list-thumbnails {
width: 100%;
padding: 0px 15px 15px 0px;
}
.panel-design {
height: 100%;
min-width: 500px;
border-top: 1px solid #E6E6E6;
}
.panel-design-head {
height: 40px;
}
.panel-design-show {
height: 100%;
width: 100%;
border-top: 1px solid #E6E6E6;
}
.padding-lr {
padding: 0 6px;
}
.itxst {
margin: 10px;
text-align: left;
}
.col {
width: 40%;
flex: 1;
padding: 10px;
border: solid 1px #eee;
border-radius: 5px;
float: left;
}
.col + .col {
margin-left: 10px;
}
.item {
padding: 2px 12px;
margin: 3px 3px 0 3px;
border: solid 1px #eee;
background-color: #f1f1f1;
text-align: left;
display: block;
}
.item + .item {
border-top: none;
margin-top: 3px;
}
.item:hover {
background-color: #fdfdfd;
cursor: pointer;
}
.item-axis {
padding: 2px 12px;
margin: 3px 3px 0 3px;
border: solid 1px #eee;
background-color: #f1f1f1;
text-align: left;
}
.item-axis:hover {
background-color: #fdfdfd;
cursor: pointer;
}
.el-form-item {
margin-bottom: 0;
}
.container {
width: 100%;
height: 600px;
border: 1px solid #000;
position: relative;
box-sizing: border-box;
}
span {
font-size: 12px;
}
</style>