fix:修改BUG

dashboard模块:1 图表拖拽调整大小空白区域调整 2图表只有title部分可进行拖拽,避免拖拽调整大小时样式乱 3 拖拽改变图表位置后台数据更新(目前图表存在拖动时滚动条不滚动的问题)
This commit is contained in:
hanyuxia
2020-03-25 09:21:23 +08:00
parent b4d9f1cb18
commit adb6932593
4 changed files with 136 additions and 21 deletions

View File

@@ -12,18 +12,39 @@
width: calc(100% - 14px); width: calc(100% - 14px);
overflow-x:hidden;/*避免鼠标第一次放到曲线时x轴出现滚动条后消失*/ overflow-x:hidden;/*避免鼠标第一次放到曲线时x轴出现滚动条后消失*/
} }
.drag-chart-class{ .dragChartClass{
cursor:move; cursor:move;/*
border:solid 2px yellow;
color:yellow;
background-color:yellow;
opacity:1;*/
/*background-color:red; /*background-color:red;
opacity:1*/ opacity:1*/
} }
.chooseClass{
cursor:move;/*
border:solid 2px purple;
color:purple;
background-color:purple;*/
}
.chosenClass .chartTitle{/*
color:orange;
border:solid 2px orange;*/
}
.fallback-class{ .fallback-class{
cursor:move;
/*background-color:green; /*background-color:green;
cursor:pointer;*/ cursor:pointer;*/
} }
.chart-ghost-class{ .chart-ghost-class{
/*opacity:1*/ /*opacity:1*/
} }
.ghost {/*
opacity: 1;
border:solid 2px green;
color:green;
background-color:green;*/
}
</style> </style>
<template> <template>
@@ -37,15 +58,18 @@
@dragend="handleDragEnd($event, item)" ,ghostClass:'' {scroll:true,forceFallback:true,animation:600,handle:'.drag-icon' @dragend="handleDragEnd($event, item)" ,ghostClass:'' {scroll:true,forceFallback:true,animation:600,handle:'.drag-icon'
--> -->
<draggable v-model="dataList" @chang="change" @start="start" @end="end" :move="move" <draggable v-model="dataList" @chang="change" @start="start" @end="end" :move="move"
:scroll-sensitivity="150"
:options="{ :options="{
dragClass:'drag-chart-class', dragClass:'dragChartClass',
fallbackClass:'fallback-class', fallbackClass:'fallback-class',
forceFallback:true, forceFallback:true,
ghostClass:'chart-ghost-class', ghostClass:'ghost',
scroll:true, chosenClass:'chooseClass',
animation:150, scroll:true,
scrollFn:function(offsetX,offsetY,originalEvent,touchEvt,hoverTargetEI){},
animation:150,
handle:'.chartTitle',
}" > }" >
<div class="chartBox" v-for="(item, index) in dataList" :key="item.id" :id="item.title+'_'+item.id" style="border:solid 0px red;" @dragstart=""> <div class="chartBox" v-for="(item, index) in dataList" :key="item.id" :id="item.title+'_'+item.id" style="border:solid 0px red;" @dragstart="">
<line-chart-block v-if="item.type === 'line' || item.type === 'bar' ||item.type == 'stackArea' || item.type === 4" :key="'inner' + item.id" <line-chart-block v-if="item.type === 'line' || item.type === 'bar' ||item.type == 'stackArea' || item.type === 4" :key="'inner' + item.id"
ref="editChart" ref="editChart"
@@ -91,6 +115,7 @@ export default {
return { return {
filter: {}, filter: {},
dataList: [], // 看板中所有图表信息 dataList: [], // 看板中所有图表信息
//dataListDragTmp:[],
time: { time: {
start: '', start: '',
end: '', end: '',
@@ -112,14 +137,97 @@ export default {
console.log('change', event) console.log('change', event)
}, },
start (event) { start (event) {
console.log('start', event) console.log('start', event, this.dataList)
let item = event.item;
let chartTitle = item.querySelector('.chartTitle');
chartTitle.style.background = '#d8dce1';
console.log('start-title',chartTitle);
//this.dataListDragTmp = [...this.dataList];
}, },
end (event) { end (event) {
console.log('end', event, this.groups) let item = event.item;
let chartTitle = item.querySelector('.chartTitle');
chartTitle.style.background = '';
console.log('end', event, this.dataList);
/*
let len = this.dataListDragTmp.length;
let endIndex = len-1;
let oldIndex = event.oldIndex;
if(oldIndex===0){//挪动之前为第一个元素
let oldNextItem = this.dataListDragTmp[oldIndex+1];
let nextItem = this.dataList.find(item => item.id === oldNextItem.id);
nextItem.prev = 0;
}else if(oldIndex===endIndex){//挪动之前为最后一个元素
let oldPrevItem = this.dataListDragTmp[oldIndex-1];
let prevItem = this.dataList.find(item => item.id === oldPrevItem.id);
prevItem.next = -1;
}else{//挪动之前为中间元素
let oldPrevItem = this.dataListDragTmp[oldIndex-1];
let oldNextItem = this.dataListDragTmp[oldIndex+1];
let nextItem = this.dataList.find(item => item.id === oldNextItem.id);
let prevItem = this.dataList.find(item => item.id === oldPrevItem.id);
prevItem.next = oldNextItem.id;
nextItem.prev = oldPrevItem.id;
}
let newIndex = event.newIndex;
let newItem = this.dataList[newIndex];
if(newIndex===0){//挪动之后为第一个元素
let newNextItem = this.dataList[newIndex+1];
newNextItem.prev = newItem.id;
}else if(newIndex===endIndex){//挪动之后为最后一个元素
let newPrevItem = this.dataList[newIndex-1];
newPrevItem.next =newItem.id;
}else{//挪动之后为中间元素
let newPrevItem = this.dataList[newIndex-1];
let newNextItem = this.dataList[newIndex+1];
newPrevItem.next = newItem.id;
newNextItem.prev = newItem.id;
}
*/
let newIndex = event.newIndex;
let newItem = this.dataList[newIndex];
if(newIndex===0){//挪动之后为第一个元素
let newNextItem = this.dataList[newIndex+1];
newItem.prev = 0;
newItem.next = newNextItem.id;
}else if(newIndex===(this.dataList.length-1)){//挪动之后为最后一个元素
let newPrevItem = this.dataList[newIndex-1];
newItem.prev = newPrevItem.id;
newItem.next = -1;
}else{//挪动之后为中间元素
let newNextItem = this.dataList[newIndex+1];
let newPrevItem = this.dataList[newIndex-1];
newItem.prev = newPrevItem.id;
newItem.next = newNextItem.id;
}
//更新图表prev和next
const modifyParams = {
id:newItem.id,
span:newItem.span,
height:newItem.height,
prev:newItem.prev,
next:newItem.next,
}
this.$put('panel/'+ this.pagePanelId+'/charts/modify',modifyParams).then(response => {
if (response.code === 200) {
//let item = this.dataList.find(item => item.id === newItem.id);
}else {
if(response.msg){
this.$message.error(response.msg);
}else if(response.error){
this.$message.error(response.error);
}else {
this.$message.error(response);
}
}
});
}, },
move (event, orgin) { move (event, orgin) {
console.log('move', event, orgin) console.log('move', event, orgin)
}, },
/*
handleDragStart(e,item){ handleDragStart(e,item){
this.dragging = item; this.dragging = item;
}, },
@@ -144,6 +252,7 @@ export default {
this.dataList = newItems this.dataList = newItems
}, },
*/
initCurrentRecordNum(){ initCurrentRecordNum(){
this.currentRecordNum = 0; this.currentRecordNum = 0;
}, },

View File

@@ -33,7 +33,7 @@
} }
} }
.chart-table { .chart-table {
width: calc(100% - 18px); width: 100%;
height: 100%;//calc(100% - 40px); height: 100%;//calc(100% - 40px);
// min-height: 500px; // min-height: 500px;
position: relative; position: relative;
@@ -71,6 +71,9 @@
.chartTitle:hover { .chartTitle:hover {
background-color:#d8dce1; background-color:#d8dce1;
} }
.dragTitle{
background-color:#d8dce1;
}
.chartTitle { .chartTitle {
text-align: center; text-align: center;
width: 100%; width: 100%;

View File

@@ -17,7 +17,7 @@
</div> </div>
</div> </div>
--> -->
<div class="clearfix chartTitle" :id="'chartTitle'+chartIndex"> <div class="clearfix chartTitle" :class="{'dragTitle':dragTitleShow}" :id="'chartTitle'+chartIndex">
<el-dropdown trigger="click" v-show="firstShow" class="nz-chart-top" :key="'chartDropdown'+chartIndex" v-clickoutside="clickos"> <el-dropdown trigger="click" v-show="firstShow" class="nz-chart-top" :key="'chartDropdown'+chartIndex" v-clickoutside="clickos">
<span class="el-dropdown-link chart-title" @click="dropdownMenuShow=!dropdownMenuShow"> <span class="el-dropdown-link chart-title" @click="dropdownMenuShow=!dropdownMenuShow">
@@ -163,6 +163,7 @@ export default {
stableFilter: {}, // 保存数据使用,初始化起止时间,单图or多图等 stableFilter: {}, // 保存数据使用,初始化起止时间,单图or多图等
firstShow: false, // 默认不显示操作按钮, firstShow: false, // 默认不显示操作按钮,
caretShow:false, caretShow:false,
dragTitleShow:false,
dropdownMenuShow:false, dropdownMenuShow:false,
minHeight:200, minHeight:200,
chartSpaceHeight:5,//top-border: 1,bottom-border: 1,padding-bottome:3 chartSpaceHeight:5,//top-border: 1,bottom-border: 1,padding-bottome:3
@@ -310,7 +311,8 @@ export default {
this.seriesItemScreen=this.filterShowData(this.storedScreanTableData,this.screenPageObj) this.seriesItemScreen=this.filterShowData(this.storedScreanTableData,this.screenPageObj)
}, },
dragResize:function(e){ dragResize:function(e){
var diffWidth =38; //界面的宽度空白的地方的宽度 var diffWidth =20; //界面的宽度空白的地方的宽度
var chartBoxPadding = 22;
var targetDiv= document.getElementById('chartTableDiv'+this.chartIndex); //e.target.parentNode.parentNode;.children[0] var targetDiv= document.getElementById('chartTableDiv'+this.chartIndex); //e.target.parentNode.parentNode;.children[0]
var targetDivContainer= document.getElementById('listContainer'); //e.target.parentNode.parentNode;.children[0] var targetDivContainer= document.getElementById('listContainer'); //e.target.parentNode.parentNode;.children[0]
var maxWidth = targetDivContainer.offsetWidth-diffWidth; var maxWidth = targetDivContainer.offsetWidth-diffWidth;
@@ -367,7 +369,7 @@ export default {
let containerHeight = parseInt(targetDiv.style.height); let containerHeight = parseInt(targetDiv.style.height);
let containerWidth = parseInt(targetDiv.style.width); let containerWidth = parseInt(targetDiv.style.width);
const chartBox = document.getElementsByClassName('chartBox'); const chartBox = document.getElementsByClassName('chartBox');
chartBox[_this.chartIndex].style.width = (containerWidth+diffWidth)+'px'; chartBox[_this.chartIndex].style.width = (containerWidth+chartBoxPadding)+'px';
//chartBox[_this.chartIndex].style.height = `${containerHeight}px`; //chartBox[_this.chartIndex].style.height = `${containerHeight}px`;
//表格的高度 //表格的高度
const tableBox = document.getElementById('tableContainer'+_this.chartIndex); const tableBox = document.getElementById('tableContainer'+_this.chartIndex);
@@ -418,7 +420,7 @@ export default {
let containerWidth = parseInt(targetDiv.style.width); let containerWidth = parseInt(targetDiv.style.width);
const chartBox = document.getElementsByClassName('chartBox'); const chartBox = document.getElementsByClassName('chartBox');
chartBox[_this.chartIndex].style.width = (containerWidth+diffWidth)+'px'; chartBox[_this.chartIndex].style.width = (containerWidth+chartBoxPadding)+'px';
//chartBox[_this.chartIndex].style.height = `${containerHeight}px`; //chartBox[_this.chartIndex].style.height = `${containerHeight}px`;
//表格的高度 //表格的高度
const tableBox = document.getElementById('tableContainer'+_this.chartIndex); const tableBox = document.getElementById('tableContainer'+_this.chartIndex);

View File

@@ -294,9 +294,10 @@
this.divFirstShow = showDiv; this.divFirstShow = showDiv;
}, },
dragResize:function(e){ dragResize:function(e){
var diffWidth = 38;//界面的宽度空白的地方的宽度 var diffWidth = 20;//界面的宽度空白的地方的宽度
var targetDiv= document.getElementById('lineChartDiv'+this.chartIndex); //e.target.parentNode.parentNode;.children[0] var chartBoxPadding = 20;
var targetDivContainer= document.getElementById('listContainer'); //e.target.parentNode.parentNode;.children[0] var targetDiv= document.getElementById('lineChartDiv'+this.chartIndex); //
var targetDivContainer= document.getElementById('listContainer'); //
var maxWidth = targetDivContainer.offsetWidth-diffWidth; var maxWidth = targetDivContainer.offsetWidth-diffWidth;
var minWidth = maxWidth/12; var minWidth = maxWidth/12;
var stepWidth = maxWidth/12; var stepWidth = maxWidth/12;
@@ -355,7 +356,7 @@
let containerHeight = parseInt(targetDiv.style.height); let containerHeight = parseInt(targetDiv.style.height);
let containerWidth = parseInt(targetDiv.style.width); let containerWidth = parseInt(targetDiv.style.width);
const chartBox = document.getElementsByClassName('chartBox'); const chartBox = document.getElementsByClassName('chartBox');
chartBox[_this.chartIndex].style.width = (containerWidth+diffWidth)+'px'; chartBox[_this.chartIndex].style.width = (containerWidth+chartBoxPadding)+'px';
_this.echartStore.resize({height:(containerHeight-divHeight-_this.titleHeight)}); _this.echartStore.resize({height:(containerHeight-divHeight-_this.titleHeight)});
} }
} }
@@ -405,7 +406,7 @@
if(_this.echartStore){ if(_this.echartStore){
let divHeight = _this.$refs.legendArea.offsetHeight; let divHeight = _this.$refs.legendArea.offsetHeight;
const chartBox = document.getElementsByClassName('chartBox'); const chartBox = document.getElementsByClassName('chartBox');
chartBox[_this.chartIndex].style.width = (containerWidth+diffWidth)+'px'; chartBox[_this.chartIndex].style.width = (containerWidth+chartBoxPadding)+'px';
_this.echartStore.resize({height:(containerHeight-divHeight-_this.titleHeight)}); _this.echartStore.resize({height:(containerHeight-divHeight-_this.titleHeight)});
} }