fix:解决冲突
This commit is contained in:
@@ -507,6 +507,7 @@
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.endpoint-query-metrics.chart-fullscreen.nz-dialog,.recordRules-query-metrics.chart-fullscreen.nz-dialog {
|
.endpoint-query-metrics.chart-fullscreen.nz-dialog,.recordRules-query-metrics.chart-fullscreen.nz-dialog {
|
||||||
.chart-screen-header .chart-header__tools #browser-go {
|
.chart-screen-header .chart-header__tools #browser-go {
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
@@ -683,8 +684,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.chart-dataLink-tooltip{
|
.chart-dataLink-tooltip{
|
||||||
position: absolute;
|
position: absolute !important;
|
||||||
padding-bottom: 2px;
|
padding-bottom: 2px !important;
|
||||||
z-index: 999999999;
|
z-index: 999999999;
|
||||||
pointer-events: auto;
|
pointer-events: auto;
|
||||||
.chart-dataLink-list{
|
.chart-dataLink-list{
|
||||||
@@ -717,6 +718,22 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.chart-expolre-tooltip{
|
||||||
|
display: block;
|
||||||
|
border-style: solid;
|
||||||
|
white-space: nowrap;
|
||||||
|
will-change: transform;
|
||||||
|
box-shadow: rgba(0, 0, 0, 0.2) 1px 2px 10px;
|
||||||
|
transition: opacity 0.2s cubic-bezier(0.23, 1, 0.32, 1) 0s, visibility 0.2s cubic-bezier(0.23, 1, 0.32, 1) 0s, transform 0.4s cubic-bezier(0.23, 1, 0.32, 1) 0s;
|
||||||
|
background-color: $--background-color-empty;
|
||||||
|
border-width: 1px;
|
||||||
|
border-radius: 4px;
|
||||||
|
color: rgb(0, 0, 0);
|
||||||
|
font: 14px / 21px "Microsoft YaHei";
|
||||||
|
padding: 10px;
|
||||||
|
border-color: rgb(221, 228, 237);
|
||||||
|
}
|
||||||
|
|
||||||
.graph-icon-info-box{
|
.graph-icon-info-box{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
@@ -854,4 +871,4 @@
|
|||||||
.chart-canvas-tooltip{
|
.chart-canvas-tooltip{
|
||||||
height: auto !important;
|
height: auto !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -243,6 +243,7 @@
|
|||||||
.chart-room {
|
.chart-room {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 300px;
|
height: 300px;
|
||||||
|
position: relative;
|
||||||
}
|
}
|
||||||
.introduce-view {
|
.introduce-view {
|
||||||
.info-room {
|
.info-room {
|
||||||
|
|||||||
@@ -174,6 +174,18 @@ export default {
|
|||||||
this.legends = []
|
this.legends = []
|
||||||
this.series = chartOption.series = this.handleTimeSeries(this.chartInfo, chartOption.series[0], this.chartData) // 生成series和legends
|
this.series = chartOption.series = this.handleTimeSeries(this.chartInfo, chartOption.series[0], this.chartData) // 生成series和legends
|
||||||
|
|
||||||
|
const styleOption = this.$lodash.get(this.chartInfo, 'param.option')
|
||||||
|
if (styleOption) {
|
||||||
|
chartOption.series.forEach(item => {
|
||||||
|
if (item.lineStyle && styleOption.lineWidth != undefined) {
|
||||||
|
item.lineStyle.width = styleOption.lineWidth
|
||||||
|
}
|
||||||
|
if (styleOption.pointSize != undefined) {
|
||||||
|
item.symbolSize = styleOption.pointSize
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
this.isGrey = this.legends.map(() => false)
|
this.isGrey = this.legends.map(() => false)
|
||||||
chartOption.color = this.colorList
|
chartOption.color = this.colorList
|
||||||
if (!this.series.length) {
|
if (!this.series.length) {
|
||||||
@@ -260,12 +272,11 @@ export default {
|
|||||||
if (this.tooltip.activeIndex != params.seriesIndex) {
|
if (this.tooltip.activeIndex != params.seriesIndex) {
|
||||||
const option = myChart.getOption()
|
const option = myChart.getOption()
|
||||||
option.series[params.seriesIndex].symbol = 'circle'
|
option.series[params.seriesIndex].symbol = 'circle'
|
||||||
option.series[params.seriesIndex].emphasis.itemStyle = {
|
option.series[params.seriesIndex].itemStyle = {
|
||||||
opacity: 1,
|
|
||||||
borderColor: this.hexToRgb(params.color, 0.4),
|
borderColor: this.hexToRgb(params.color, 0.4),
|
||||||
borderWidth: 6
|
borderWidth: 5
|
||||||
}
|
}
|
||||||
myChart.setOption(option, true)
|
myChart.setOption(option)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.tooltip.activeIndex = params.seriesIndex
|
this.tooltip.activeIndex = params.seriesIndex
|
||||||
@@ -275,11 +286,8 @@ export default {
|
|||||||
const option = myChart.getOption()
|
const option = myChart.getOption()
|
||||||
option.series.forEach(item => {
|
option.series.forEach(item => {
|
||||||
item.symbol = 'emptyCircle'
|
item.symbol = 'emptyCircle'
|
||||||
item.emphasis.itemStyle = {
|
|
||||||
opacity: 1
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
myChart.setOption(option, true)
|
myChart.setOption(option)
|
||||||
}
|
}
|
||||||
this.tooltip.activeIndex = undefined
|
this.tooltip.activeIndex = undefined
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -129,11 +129,6 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
onCopy (txt) {
|
|
||||||
this.$copyText(txt).then(() => {
|
|
||||||
this.$message.success({ message: this.$t('overall.copySuccess') })
|
|
||||||
})
|
|
||||||
},
|
|
||||||
clickLegend (legendName, index) {
|
clickLegend (legendName, index) {
|
||||||
/* 点击legend
|
/* 点击legend
|
||||||
* 1.当前如果是全高亮状态,则全部置灰,只留被点击的legend高亮
|
* 1.当前如果是全高亮状态,则全部置灰,只留被点击的legend高亮
|
||||||
|
|||||||
@@ -152,26 +152,23 @@ export const chartTimeSeriesLineOption = {
|
|||||||
type: 'line',
|
type: 'line',
|
||||||
symbol: 'emptyCircle', // 去掉点
|
symbol: 'emptyCircle', // 去掉点
|
||||||
connectNulls: true,
|
connectNulls: true,
|
||||||
symbolSize: [6, 6],
|
symbolSize: 6,
|
||||||
smooth: 0.2, // 曲线变平滑
|
smooth: 0.2, // 曲线变平滑
|
||||||
// showSymbol: false,
|
showSymbol: false,
|
||||||
itemStyle: {
|
|
||||||
opacity: 0.001
|
|
||||||
},
|
|
||||||
data: [],
|
data: [],
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
width: 1,
|
width: 1,
|
||||||
opacity: 0.9
|
opacity: 0.9
|
||||||
},
|
},
|
||||||
emphasis: {
|
emphasis: {
|
||||||
focus: 'series',
|
focus: 'series'
|
||||||
itemStyle: {
|
|
||||||
opacity: 1
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
blur: {
|
blur: {
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
opacity: 0.3
|
opacity: 0.3
|
||||||
|
},
|
||||||
|
itemStyle: {
|
||||||
|
opacity: 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}],
|
}],
|
||||||
|
|||||||
@@ -250,7 +250,11 @@ export default {
|
|||||||
min: undefined,
|
min: undefined,
|
||||||
max: undefined
|
max: undefined
|
||||||
},
|
},
|
||||||
dataLink: []
|
dataLink: [],
|
||||||
|
option: {
|
||||||
|
lineWidth: 1,
|
||||||
|
pointSize: 6
|
||||||
|
}
|
||||||
},
|
},
|
||||||
elements: [{ expression: '', legend: '', type: 'expert', id: '', name: 'A', state: 1, orderNum: 0 }],
|
elements: [{ expression: '', legend: '', type: 'expert', id: '', name: 'A', state: 1, orderNum: 0 }],
|
||||||
panel: '',
|
panel: '',
|
||||||
@@ -433,14 +437,22 @@ export default {
|
|||||||
if (this.chart.type === 'group' && !this.chart.param.collapse == undefined) {
|
if (this.chart.type === 'group' && !this.chart.param.collapse == undefined) {
|
||||||
this.chart.param.collapse = false
|
this.chart.param.collapse = false
|
||||||
}
|
}
|
||||||
if ((this.chart.type === 'line' || this.chart.type === 'area' || this.chart.type === 'point') && !this.chart.param.rightYAxis) {
|
if ((this.chart.type === 'line' || this.chart.type === 'area' || this.chart.type === 'point')) {
|
||||||
this.chart.param.rightYAxis = {
|
if (!this.chart.param.rightYAxis) {
|
||||||
elementNames: [],
|
this.chart.param.rightYAxis = {
|
||||||
style: 'line',
|
elementNames: [],
|
||||||
unit: 2,
|
style: 'line',
|
||||||
label: '',
|
unit: 2,
|
||||||
min: undefined,
|
label: '',
|
||||||
max: undefined
|
min: undefined,
|
||||||
|
max: undefined
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!this.chart.param.option) {
|
||||||
|
this.chart.param.option = {
|
||||||
|
lineWidth: 1,
|
||||||
|
pointSize: 6
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.chart.type === 'stat') {
|
if (this.chart.type === 'stat') {
|
||||||
@@ -480,14 +492,22 @@ export default {
|
|||||||
if (this.chart.type === 'group' && !this.chart.param.collapse == undefined) {
|
if (this.chart.type === 'group' && !this.chart.param.collapse == undefined) {
|
||||||
this.chart.param.collapse = false
|
this.chart.param.collapse = false
|
||||||
}
|
}
|
||||||
if ((this.chart.type === 'line' || this.chart.type === 'area' || this.chart.type === 'point') && !this.chart.param.rightYAxis) {
|
if ((this.chart.type === 'line' || this.chart.type === 'area' || this.chart.type === 'point')) {
|
||||||
this.chart.param.rightYAxis = {
|
if (!this.chart.param.rightYAxis) {
|
||||||
elementNames: [],
|
this.chart.param.rightYAxis = {
|
||||||
style: 'line',
|
elementNames: [],
|
||||||
unit: 2,
|
style: 'line',
|
||||||
label: '',
|
unit: 2,
|
||||||
min: undefined,
|
label: '',
|
||||||
max: undefined
|
min: undefined,
|
||||||
|
max: undefined
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!this.chart.param.option) {
|
||||||
|
this.chart.param.option = {
|
||||||
|
lineWidth: 1,
|
||||||
|
pointSize: 6
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.chart.type === 'stat') {
|
if (this.chart.type === 'stat') {
|
||||||
|
|||||||
@@ -447,8 +447,46 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- option -->
|
||||||
|
<div v-if="isTimeSeries(chartConfig.type)">
|
||||||
|
<div class="form__sub-title">
|
||||||
|
<span>{{$t('dashboard.dashboard.chartForm.option')}}</span>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="form-items--half-width-group"
|
||||||
|
>
|
||||||
|
<!--lineWidth-->
|
||||||
|
<el-form-item
|
||||||
|
v-if="chartConfig.type!=='point'"
|
||||||
|
:label="$t('dashboard.dashboard.chartForm.lineWidth')"
|
||||||
|
class="form-item--half-width"
|
||||||
|
prop="param.option.lineWidth"
|
||||||
|
>
|
||||||
|
<el-input-number
|
||||||
|
size="small"
|
||||||
|
:controls="false"
|
||||||
|
@change="change"
|
||||||
|
show-word-limit
|
||||||
|
v-model="chartConfig.param.option.lineWidth"/>
|
||||||
|
</el-form-item>
|
||||||
|
<!--pointSize-->
|
||||||
|
<el-form-item
|
||||||
|
:label="$t('dashboard.dashboard.chartForm.pointSize')"
|
||||||
|
class="form-item--half-width"
|
||||||
|
prop="param.option.pointSize"
|
||||||
|
>
|
||||||
|
<el-input-number
|
||||||
|
size="small"
|
||||||
|
:controls="false"
|
||||||
|
@change="change"
|
||||||
|
show-word-limit
|
||||||
|
v-model="chartConfig.param.option.pointSize"/>
|
||||||
|
</el-form-item>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Right Y Axis -->
|
<!-- Right Y Axis -->
|
||||||
<div v-if="isShowRightYAxis(chartConfig.type)">
|
<div v-if="isTimeSeries(chartConfig.type)">
|
||||||
<div class="form__sub-title">
|
<div class="form__sub-title">
|
||||||
<span>{{$t('dashboard.dashboard.chartForm.rightYAxis')}}</span>
|
<span>{{$t('dashboard.dashboard.chartForm.rightYAxis')}}</span>
|
||||||
<el-switch
|
<el-switch
|
||||||
@@ -1397,7 +1435,11 @@ export default {
|
|||||||
min: undefined,
|
min: undefined,
|
||||||
max: undefined
|
max: undefined
|
||||||
},
|
},
|
||||||
dataLink: this.chartConfig.param.dataLink
|
dataLink: this.chartConfig.param.dataLink,
|
||||||
|
option: {
|
||||||
|
lineWidth: 1,
|
||||||
|
pointSize: 6
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.chartConfig.param.thresholds.push({ value: undefined, color: randomcolor() })
|
this.chartConfig.param.thresholds.push({ value: undefined, color: randomcolor() })
|
||||||
|
|||||||
@@ -408,7 +408,11 @@ export default {
|
|||||||
min: undefined,
|
min: undefined,
|
||||||
max: undefined
|
max: undefined
|
||||||
},
|
},
|
||||||
dataLink: []
|
dataLink: [],
|
||||||
|
option: {
|
||||||
|
lineWidth: 1,
|
||||||
|
pointSize: 6
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -239,7 +239,7 @@ export default {
|
|||||||
default: return false
|
default: return false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
isShowRightYAxis (type) {
|
isTimeSeries (type) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 'line':
|
case 'line':
|
||||||
case 'area':
|
case 'area':
|
||||||
|
|||||||
@@ -266,7 +266,11 @@ export default {
|
|||||||
min: undefined,
|
min: undefined,
|
||||||
max: undefined
|
max: undefined
|
||||||
},
|
},
|
||||||
dataLink: []
|
dataLink: [],
|
||||||
|
option: {
|
||||||
|
lineWidth: 1,
|
||||||
|
pointSize: 6
|
||||||
|
}
|
||||||
},
|
},
|
||||||
elements: [{ expression: '', legend: '', type: 'expert', id: '', name: 'A', state: 1, orderNum: 0 }],
|
elements: [{ expression: '', legend: '', type: 'expert', id: '', name: 'A', state: 1, orderNum: 0 }],
|
||||||
panel: '',
|
panel: '',
|
||||||
@@ -607,14 +611,22 @@ export default {
|
|||||||
if (this.chart.type === 'group' && !this.chart.param.collapse == undefined) {
|
if (this.chart.type === 'group' && !this.chart.param.collapse == undefined) {
|
||||||
this.chart.param.collapse = false
|
this.chart.param.collapse = false
|
||||||
}
|
}
|
||||||
if ((this.chart.type === 'line' || this.chart.type === 'area' || this.chart.type === 'point') && !this.chart.param.rightYAxis) {
|
if ((this.chart.type === 'line' || this.chart.type === 'area' || this.chart.type === 'point')) {
|
||||||
this.chart.param.rightYAxis = {
|
if (!this.chart.param.rightYAxis) {
|
||||||
elementNames: [],
|
this.chart.param.rightYAxis = {
|
||||||
style: 'line',
|
elementNames: [],
|
||||||
unit: 2,
|
style: 'line',
|
||||||
label: '',
|
unit: 2,
|
||||||
min: undefined,
|
label: '',
|
||||||
max: undefined
|
min: undefined,
|
||||||
|
max: undefined
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!this.chart.param.option) {
|
||||||
|
this.chart.param.option = {
|
||||||
|
lineWidth: 1,
|
||||||
|
pointSize: 6
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.chart.type === 'stat') {
|
if (this.chart.type === 'stat') {
|
||||||
@@ -654,14 +666,22 @@ export default {
|
|||||||
if (this.chart.type === 'group' && !this.chart.param.collapse == undefined) {
|
if (this.chart.type === 'group' && !this.chart.param.collapse == undefined) {
|
||||||
this.chart.param.collapse = false
|
this.chart.param.collapse = false
|
||||||
}
|
}
|
||||||
if ((this.chart.type === 'line' || this.chart.type === 'area' || this.chart.type === 'point') && !this.chart.param.rightYAxis) {
|
if ((this.chart.type === 'line' || this.chart.type === 'area' || this.chart.type === 'point')) {
|
||||||
this.chart.param.rightYAxis = {
|
if (!this.chart.param.rightYAxis) {
|
||||||
elementNames: [],
|
this.chart.param.rightYAxis = {
|
||||||
style: 'line',
|
elementNames: [],
|
||||||
unit: 2,
|
style: 'line',
|
||||||
label: '',
|
unit: 2,
|
||||||
min: undefined,
|
label: '',
|
||||||
max: undefined
|
min: undefined,
|
||||||
|
max: undefined
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!this.chart.param.option) {
|
||||||
|
this.chart.param.option = {
|
||||||
|
lineWidth: 1,
|
||||||
|
pointSize: 6
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.chart.type === 'stat') {
|
if (this.chart.type === 'stat') {
|
||||||
|
|||||||
@@ -3850,9 +3850,10 @@ export default {
|
|||||||
}
|
}
|
||||||
data.forEach((result, i) => {
|
data.forEach((result, i) => {
|
||||||
const seriesItem = {
|
const seriesItem = {
|
||||||
|
type: 'line',
|
||||||
name: '',
|
name: '',
|
||||||
symbol: 'emptyCircle', // 去掉点
|
symbol: 'emptyCircle', // 去掉点
|
||||||
symbolSize: [2, 2],
|
symbolSize: [6, 6],
|
||||||
showSymbol: false,
|
showSymbol: false,
|
||||||
smooth: 0.2, // 曲线变平滑
|
smooth: 0.2, // 曲线变平滑
|
||||||
data: [],
|
data: [],
|
||||||
@@ -3860,7 +3861,17 @@ export default {
|
|||||||
width: 1,
|
width: 1,
|
||||||
opacity: 0.9
|
opacity: 0.9
|
||||||
},
|
},
|
||||||
type: 'line'
|
emphasis: {
|
||||||
|
focus: 'series'
|
||||||
|
},
|
||||||
|
blur: {
|
||||||
|
lineStyle: {
|
||||||
|
opacity: 0.3
|
||||||
|
},
|
||||||
|
itemStyle: {
|
||||||
|
opacity: 1
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
let legendName = ''
|
let legendName = ''
|
||||||
seriesItem.data = result.values.map((item) => {
|
seriesItem.data = result.values.map((item) => {
|
||||||
@@ -3932,9 +3943,10 @@ export default {
|
|||||||
}
|
}
|
||||||
data.forEach((result, i) => {
|
data.forEach((result, i) => {
|
||||||
const seriesItem = {
|
const seriesItem = {
|
||||||
|
type: 'line',
|
||||||
name: '',
|
name: '',
|
||||||
symbol: 'emptyCircle', // 去掉点
|
symbol: 'emptyCircle', // 去掉点
|
||||||
symbolSize: [2, 2],
|
symbolSize: [6, 6],
|
||||||
showSymbol: false,
|
showSymbol: false,
|
||||||
smooth: 0.2, // 曲线变平滑
|
smooth: 0.2, // 曲线变平滑
|
||||||
data: [],
|
data: [],
|
||||||
@@ -3942,7 +3954,17 @@ export default {
|
|||||||
width: 1,
|
width: 1,
|
||||||
opacity: 0.9
|
opacity: 0.9
|
||||||
},
|
},
|
||||||
type: 'line'
|
emphasis: {
|
||||||
|
focus: 'series'
|
||||||
|
},
|
||||||
|
blur: {
|
||||||
|
lineStyle: {
|
||||||
|
opacity: 0.3
|
||||||
|
},
|
||||||
|
itemStyle: {
|
||||||
|
opacity: 1
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
let legendName = ''
|
let legendName = ''
|
||||||
seriesItem.data = result.values.map((item) => {
|
seriesItem.data = result.values.map((item) => {
|
||||||
|
|||||||
@@ -408,9 +408,10 @@ export default {
|
|||||||
}
|
}
|
||||||
data.forEach((result, i) => {
|
data.forEach((result, i) => {
|
||||||
const seriesItem = {
|
const seriesItem = {
|
||||||
|
type: 'line',
|
||||||
name: '',
|
name: '',
|
||||||
symbol: 'emptyCircle', // 去掉点
|
symbol: 'emptyCircle', // 去掉点
|
||||||
symbolSize: [2, 2],
|
symbolSize: [6, 6],
|
||||||
showSymbol: false,
|
showSymbol: false,
|
||||||
smooth: 0.2, // 曲线变平滑
|
smooth: 0.2, // 曲线变平滑
|
||||||
data: [],
|
data: [],
|
||||||
@@ -418,7 +419,17 @@ export default {
|
|||||||
width: 1,
|
width: 1,
|
||||||
opacity: 0.9
|
opacity: 0.9
|
||||||
},
|
},
|
||||||
type: 'line'
|
emphasis: {
|
||||||
|
focus: 'series'
|
||||||
|
},
|
||||||
|
blur: {
|
||||||
|
lineStyle: {
|
||||||
|
opacity: 0.3
|
||||||
|
},
|
||||||
|
itemStyle: {
|
||||||
|
opacity: 1
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
let legendName = ''
|
let legendName = ''
|
||||||
seriesItem.data = result.values.map((item) => {
|
seriesItem.data = result.values.map((item) => {
|
||||||
@@ -612,9 +623,10 @@ export default {
|
|||||||
}
|
}
|
||||||
data.forEach((result, i) => {
|
data.forEach((result, i) => {
|
||||||
const seriesItem = {
|
const seriesItem = {
|
||||||
|
type: 'line',
|
||||||
name: '',
|
name: '',
|
||||||
symbol: 'emptyCircle', // 去掉点
|
symbol: 'emptyCircle', // 去掉点
|
||||||
symbolSize: [2, 2],
|
symbolSize: [6, 6],
|
||||||
showSymbol: false,
|
showSymbol: false,
|
||||||
smooth: 0.2, // 曲线变平滑
|
smooth: 0.2, // 曲线变平滑
|
||||||
data: [],
|
data: [],
|
||||||
@@ -622,7 +634,17 @@ export default {
|
|||||||
width: 1,
|
width: 1,
|
||||||
opacity: 0.9
|
opacity: 0.9
|
||||||
},
|
},
|
||||||
type: 'line'
|
emphasis: {
|
||||||
|
focus: 'series'
|
||||||
|
},
|
||||||
|
blur: {
|
||||||
|
lineStyle: {
|
||||||
|
opacity: 0.3
|
||||||
|
},
|
||||||
|
itemStyle: {
|
||||||
|
opacity: 1
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
let legendName = ''
|
let legendName = ''
|
||||||
seriesItem.data = result.values.map((item) => {
|
seriesItem.data = result.values.map((item) => {
|
||||||
|
|||||||
@@ -4,15 +4,40 @@
|
|||||||
<div class="showMore" v-if="legendAll.length !== legend.length"><i class="nz-icon nz-icon-jinggao"></i>{{$t("dashboard.dashboard.moreTitle")}} <span class="moreChart" @click="showMore">{{$t("dashboard.dashboard.showAll")+legendAll.length}}</span></div>
|
<div class="showMore" v-if="legendAll.length !== legend.length"><i class="nz-icon nz-icon-jinggao"></i>{{$t("dashboard.dashboard.moreTitle")}} <span class="moreChart" @click="showMore">{{$t("dashboard.dashboard.showAll")+legendAll.length}}</span></div>
|
||||||
<div class="chart-header">{{chartTitle}}</div>
|
<div class="chart-header">{{chartTitle}}</div>
|
||||||
|
|
||||||
<div class="chart-body" ref="chartBody" :id="chartId" ></div>
|
<div class="chart-body" ref="chartBody" :id="chartId" :class="{'chart-cursor-default':cursorDefault}"></div>
|
||||||
<div class="chart-no-data" v-show="noData">No Data</div>
|
<div class="chart-no-data" v-show="noData">No Data</div>
|
||||||
|
|
||||||
<div class="legend-container legend-container-screen" :id="'legendArea' + chartId" ref="legendArea" v-show="legend.length>0">
|
<div class="legend-container legend-container-screen" :id="'legendArea' + chartId" ref="legendArea" v-show="legend.length>0">
|
||||||
<div v-for="(item, index) in legend" :title="item.alias?item.alias:item.name" @click="clickLegend(item.name,index)" class="legend-item" :class="{'ft-gr':item.isGray}" :key="'legend_' + item.name+'_'+index">
|
<div
|
||||||
<span class="legend-shape" :style="{background:(item.isGray?'#D3D3D3':getBgColor(index))}"></span>{{item.alias?item.alias:item.name}}
|
v-for="(item, index) in legend" :title="item.alias?item.alias:item.name"
|
||||||
|
:key="'legend_' + item.name+'_'+index"
|
||||||
|
class="legend-item"
|
||||||
|
:class="{'ft-gr':item.isGray}"
|
||||||
|
@click="clickLegend(item.name,index)"
|
||||||
|
@mouseenter="hoverLegend(item.name, index,'highlight')"
|
||||||
|
@mouseleave="hoverLegend(item.name, index,'downplay')"
|
||||||
|
>
|
||||||
|
<span class="legend-shape" :style="{background:(item.isGray?'#D3D3D3':getBgColor(index))}"></span>
|
||||||
|
<span>{{item.alias?item.alias:item.name}}</span>
|
||||||
|
<i class="nz-icon nz-icon-override" @click.stop="onCopy(item.alias?item.alias:item.name)" :title="$t('overall.copyText')"></i>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div :id="`chart-canvas-tooltip-${chartId}`" class="chart-expolre-tooltip no-style-class" :class="{'chart-dataLink-tooltip':tooltip.dataLinkShow}" :style="{left:tooltip.x+'px',top:tooltip.y+'px'}" v-if="tooltip.show" v-clickoutside="clickout">
|
||||||
|
<div v-html="tooltip.tooltipHtml"></div>
|
||||||
|
<div class="chart-dataLink-list" v-if="tooltip.dataLinkShow">
|
||||||
|
<!-- 只有一条数据时显示 -->
|
||||||
|
<div class="chart-dataLink-item" v-if="legend.filter(value => value.isGray === false).length==1" @click="showAllSeries">
|
||||||
|
<i class="nz-icon nz-icon-a-Showallseries"></i>
|
||||||
|
<span>{{$t('dashboard.showAllSeries')}}</span>
|
||||||
|
</div>
|
||||||
|
<!-- 有多条数据时显示 -->
|
||||||
|
<div class="chart-dataLink-item" v-else @click="showSelectedSeries">
|
||||||
|
<i class="nz-icon nz-icon-a-Showseletedseries"></i>
|
||||||
|
<span>{{$t('dashboard.showSelectedSeries')}}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -56,7 +81,21 @@ export default {
|
|||||||
noData: false,
|
noData: false,
|
||||||
dataSize: 20,
|
dataSize: 20,
|
||||||
chartDot: 2,
|
chartDot: 2,
|
||||||
theme: localStorage.getItem(`nz-user-${localStorage.getItem('nz-user-id')}-theme`) || 'light'
|
theme: localStorage.getItem(`nz-user-${localStorage.getItem('nz-user-id')}-theme`) || 'light',
|
||||||
|
cursorDefault: false,
|
||||||
|
tooltip: {
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
title: 0,
|
||||||
|
value: 0,
|
||||||
|
mapping: {},
|
||||||
|
show: false,
|
||||||
|
dataLinkShow: '',
|
||||||
|
metric: {},
|
||||||
|
activeIndex: undefined,
|
||||||
|
clickIndex: undefined
|
||||||
|
},
|
||||||
|
isInit: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created () {
|
created () {
|
||||||
@@ -174,6 +213,11 @@ export default {
|
|||||||
} else {
|
} else {
|
||||||
this.option.yAxis.axisLabel.formatter = this.defaultYAxisFormatter
|
this.option.yAxis.axisLabel.formatter = this.defaultYAxisFormatter
|
||||||
}
|
}
|
||||||
|
if (this.series.length == 1) {
|
||||||
|
this.series.forEach(item => {
|
||||||
|
item.cursor = 'default'
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (this.series && this.series.length) {
|
if (this.series && this.series.length) {
|
||||||
this.$set(this.option, 'series', this.series)
|
this.$set(this.option, 'series', this.series)
|
||||||
@@ -207,6 +251,60 @@ export default {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.isInit) {
|
||||||
|
// 未设置dataLink的图表 鼠标样式为default
|
||||||
|
this.chart.getZr().on('mousemove', (params) => {
|
||||||
|
// 获取鼠标在图表中的坐标
|
||||||
|
const pointInPixel = [params.offsetX, params.offsetY]
|
||||||
|
const option = this.chart.getOption()
|
||||||
|
const zoomState = this.$lodash.get(option, 'toolbox[0].feature.dataZoom.iconStatus.zoom', 'normal')
|
||||||
|
// 判断鼠标在坐标轴中且zoom未被激活
|
||||||
|
if (this.chart.containPixel('grid', pointInPixel) && zoomState === 'normal') {
|
||||||
|
this.cursorDefault = true
|
||||||
|
} else {
|
||||||
|
this.cursorDefault = false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
if (this.series.length > 1) {
|
||||||
|
this.chart.on('mousemove', () => {
|
||||||
|
this.cursorDefault = false
|
||||||
|
})
|
||||||
|
this.chart.on('click', this.chartClick)
|
||||||
|
this.chart.on('mousedown', (params) => {
|
||||||
|
if (this.tooltip.dataLinkShow) {
|
||||||
|
const e = params.event.event
|
||||||
|
e.stopPropagation()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
this.chart.on('mouseover', (params) => {
|
||||||
|
if (this.tooltip.activeIndex != params.seriesIndex) {
|
||||||
|
const option = this.chart.getOption()
|
||||||
|
option.series[params.seriesIndex].symbol = 'circle'
|
||||||
|
option.series[params.seriesIndex].itemStyle = {
|
||||||
|
borderColor: this.hexToRgb(params.color, 0.4),
|
||||||
|
borderWidth: 5
|
||||||
|
}
|
||||||
|
this.chart.setOption(option)
|
||||||
|
}
|
||||||
|
this.tooltip.activeIndex = params.seriesIndex
|
||||||
|
})
|
||||||
|
|
||||||
|
this.chart.on('mouseout', (params) => {
|
||||||
|
const option = this.chart.getOption()
|
||||||
|
option.series.forEach(item => {
|
||||||
|
item.symbol = 'emptyCircle'
|
||||||
|
})
|
||||||
|
this.chart.setOption(option)
|
||||||
|
this.tooltip.activeIndex = undefined
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
this.isInit = false
|
||||||
|
|
||||||
this.resize()
|
this.resize()
|
||||||
},
|
},
|
||||||
chartRoomMouseMove (event, tooltipDom) {
|
chartRoomMouseMove (event, tooltipDom) {
|
||||||
@@ -252,6 +350,17 @@ export default {
|
|||||||
const color = this.colors[index]
|
const color = this.colors[index]
|
||||||
return color
|
return color
|
||||||
},
|
},
|
||||||
|
hoverLegend (legendName, index, type) {
|
||||||
|
// legend 已经取消显示,鼠标悬浮,不开启 高亮效果
|
||||||
|
if (this.legend[index].isGray) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
this.chart && this.chart.dispatchAction({
|
||||||
|
type: type,
|
||||||
|
seriesIndex: index,
|
||||||
|
name: legendName
|
||||||
|
})
|
||||||
|
},
|
||||||
clickLegend (legendName, index) {
|
clickLegend (legendName, index) {
|
||||||
/* 点击legend
|
/* 点击legend
|
||||||
* 1.当前如果是全高亮状态,则全部置灰,只留被点击的legend高亮
|
* 1.当前如果是全高亮状态,则全部置灰,只留被点击的legend高亮
|
||||||
@@ -350,35 +459,17 @@ export default {
|
|||||||
// 当前鼠标位置
|
// 当前鼠标位置
|
||||||
const pointX = point[0]
|
const pointX = point[0]
|
||||||
const pointY = point[1]
|
const pointY = point[1]
|
||||||
// 外层div大小
|
|
||||||
/* const viewWidth = size.viewSize[0]
|
|
||||||
const viewHeight = size.viewSize[1] */
|
|
||||||
// 提示框大小
|
// 提示框大小
|
||||||
const boxWidth = size.contentSize[0]
|
const boxWidth = size.contentSize[0]
|
||||||
// const boxHeight = size.contentSize[1]
|
|
||||||
const chartDom = document.getElementById(this.chartId)
|
const chartDom = document.getElementById(this.chartId)
|
||||||
if (chartDom) {
|
if (chartDom) {
|
||||||
// const parTop = chartDom.offsetTop
|
|
||||||
const parLeft = chartDom.offsetLeft
|
|
||||||
|
|
||||||
const parent = chartDom.parentElement
|
const parent = chartDom.parentElement
|
||||||
// const parClientHeight = parent.clientHeight// 可视高度
|
|
||||||
const parClientWidth = parent.clientWidth// 可视宽度
|
const parClientWidth = parent.clientWidth// 可视宽度
|
||||||
// const parScrollTop = parent.scrollTop
|
if ((parClientWidth - pointX - 20) >= boxWidth) { // 说明鼠标在左边放不下提示框
|
||||||
if ((parClientWidth - pointX - parLeft - 20) >= boxWidth) { // 说明鼠标在左边放不下提示框
|
|
||||||
x = pointX + 10
|
x = pointX + 10
|
||||||
} else {
|
} else {
|
||||||
x = pointX - boxWidth
|
x = pointX - boxWidth
|
||||||
}
|
}
|
||||||
// if((parClientHeight-pointY-(parTop-parScrollTop)-20)>=boxHeight){//说明鼠标上面放不下提示框
|
|
||||||
// y = pointY+10;
|
|
||||||
// }else {
|
|
||||||
// y = pointY-boxHeight;
|
|
||||||
// }
|
|
||||||
y = pointY + 10
|
|
||||||
return [x, y]
|
|
||||||
} else {
|
|
||||||
x = pointX - boxWidth
|
|
||||||
y = pointY + 10
|
y = pointY + 10
|
||||||
return [x, y]
|
return [x, y]
|
||||||
}
|
}
|
||||||
@@ -422,13 +513,15 @@ export default {
|
|||||||
defaultTooltipFormatter: function (params) {
|
defaultTooltipFormatter: function (params) {
|
||||||
let showFlag = false
|
let showFlag = false
|
||||||
let minusFlag = true
|
let minusFlag = true
|
||||||
let str = '<div>'
|
let str = '<div class="nz-chart__tooltip">'
|
||||||
params instanceof Array || (params = [params])
|
params instanceof Array || (params = [params])
|
||||||
params.forEach((item, i) => {
|
params.forEach((item, i) => {
|
||||||
const alias = this.queryAlias(item.seriesIndex)
|
const alias = this.queryAlias(item.seriesIndex)
|
||||||
if (i === 0 && alias.indexOf('Previous ') === -1) {
|
if (i === 0 && alias.indexOf('Previous ') === -1) {
|
||||||
const value = item.data[0]
|
const value = item.data[0]
|
||||||
|
str += '<div class="tooltip-title" style="margin-bottom: 5px">'
|
||||||
str += bus.timeFormate(bus.computeTimezone(value))
|
str += bus.timeFormate(bus.computeTimezone(value))
|
||||||
|
str += '</div>'
|
||||||
}
|
}
|
||||||
if (alias.indexOf('Previous ') !== -1 && minusFlag) {
|
if (alias.indexOf('Previous ') !== -1 && minusFlag) {
|
||||||
if (i !== 0) {
|
if (i !== 0) {
|
||||||
@@ -441,9 +534,12 @@ export default {
|
|||||||
showFlag = showFlag || item.data[1]
|
showFlag = showFlag || item.data[1]
|
||||||
if (!isNaN(item.data[1] + '')) {
|
if (!isNaN(item.data[1] + '')) {
|
||||||
const val = Number(item.data[1])
|
const val = Number(item.data[1])
|
||||||
str += '<div style="white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis;display: flex; justify-content: space-between; min-width: 150px; max-width: 600px; line-height: 18px; font-size: 12px;">'
|
str += `<div class="${(this.tooltip.activeIndex == item.seriesIndex) ? 'tooltip__row highlight' : 'tooltip__row'}">`
|
||||||
str += `<div style="max-width: 500px;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis;"><span style='display:inline-block;margin-right:5px;border-radius:10px;width:15px;height:5px;background-color: ${item.color};}'></span>${alias || item.seriesName}: </div>`
|
str += `<div class="row__label">
|
||||||
str += '<div style="padding-left: 10px;">'
|
<span style='display:inline-block;margin-right:5px;border-radius:10px;width:15px;height:5px;background-color: ${item.color};}'></span>
|
||||||
|
<span>${alias || item.seriesName}</span>
|
||||||
|
</div>`
|
||||||
|
str += '<div class="row__value">'
|
||||||
let dot = bus.countDecimals(val)
|
let dot = bus.countDecimals(val)
|
||||||
if (dot < this.chartDot) {
|
if (dot < this.chartDot) {
|
||||||
dot = this.chartDot
|
dot = this.chartDot
|
||||||
@@ -611,6 +707,134 @@ export default {
|
|||||||
unit,
|
unit,
|
||||||
oldDot
|
oldDot
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
datalinkPosition (e) {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
const box = document.getElementById(`chart-canvas-tooltip-${this.chartId}`)
|
||||||
|
const left = e.pageX - this.$refs.chartRoom.getBoundingClientRect().left
|
||||||
|
const top = e.pageY - this.$refs.chartRoom.getBoundingClientRect().top
|
||||||
|
if (box) {
|
||||||
|
const boxWidth = box.offsetWidth
|
||||||
|
const chartDom = document.getElementById(this.chartId)
|
||||||
|
const parent = chartDom.parentElement
|
||||||
|
const parClientWidth = parent.clientWidth// 可视宽度
|
||||||
|
if ((parClientWidth - left - 20) >= boxWidth) { // 说明鼠标在左边放不下提示框
|
||||||
|
this.tooltip.x = left + 10
|
||||||
|
} else {
|
||||||
|
this.tooltip.x = left - boxWidth
|
||||||
|
}
|
||||||
|
this.tooltip.y = top + 10
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
chartClick (params) {
|
||||||
|
const option = {
|
||||||
|
tooltip: {
|
||||||
|
extraCssText: 'z-index:1000;visibility:hidden;transition:none;',
|
||||||
|
hideDelay: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.chart.setOption(option)
|
||||||
|
this.chart.dispatchAction({
|
||||||
|
type: 'hideTip'
|
||||||
|
})
|
||||||
|
const nameArr = params.seriesName.split('-')
|
||||||
|
if (nameArr.length > 1) {
|
||||||
|
nameArr.splice(nameArr.length - 1, 1)
|
||||||
|
}
|
||||||
|
const seriesName = nameArr.join('-')
|
||||||
|
// title
|
||||||
|
const value = bus.computeTimezone(params.data[0])
|
||||||
|
const tData = new Date(value)
|
||||||
|
// value
|
||||||
|
let paramsDot = bus.countDecimals(params.data[1])
|
||||||
|
if (paramsDot < this.chartDot) {
|
||||||
|
paramsDot = this.chartDot
|
||||||
|
} else if (paramsDot > 6) {
|
||||||
|
paramsDot = 6
|
||||||
|
}
|
||||||
|
const val = formatScientificNotation(params.data[1], paramsDot)
|
||||||
|
const color = this.colors[params.seriesIndex]
|
||||||
|
this.tooltip.tooltipHtml = `
|
||||||
|
<div class="nz-chart__tooltip">
|
||||||
|
<div class="tooltip-title" style="margin-bottom: 5px">${bus.timeFormate(tData)}</div>
|
||||||
|
<div class="tooltip__row">
|
||||||
|
<div class="row__label" :title=">${seriesName}">
|
||||||
|
<span class="row__color-block" style="background-color: ${color};color: ${color}"></span>
|
||||||
|
<span>${seriesName}</span>
|
||||||
|
</div>
|
||||||
|
<div class="row__value">
|
||||||
|
<span>${chartDataFormat.getUnit(this.unit).compute(val, null, -1, paramsDot)}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
this.tooltip.show = true
|
||||||
|
this.tooltip.dataLinkShow = true
|
||||||
|
this.tooltip.clickIndex = params.seriesIndex
|
||||||
|
const e = params.event.event
|
||||||
|
this.datalinkPosition(e)
|
||||||
|
},
|
||||||
|
clickout () {
|
||||||
|
if (this.series.length > 1) {
|
||||||
|
this.tooltip.show = false
|
||||||
|
this.tooltip.dataLinkShow = false
|
||||||
|
const option = {
|
||||||
|
tooltip: {
|
||||||
|
extraCssText: 'z-index:1000;visibility:visible;'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.chart.setOption(option)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
showSelectedSeries () {
|
||||||
|
this.legend.forEach((item, index) => {
|
||||||
|
if (index == this.tooltip.clickIndex) {
|
||||||
|
this.chart.dispatchAction({
|
||||||
|
type: 'legendSelect',
|
||||||
|
name: item.name
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.chart.dispatchAction({
|
||||||
|
type: 'legendUnSelect',
|
||||||
|
name: item.name
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
this.legend = this.legend.map((item, index) => {
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
isGray: index !== this.tooltip.clickIndex
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.clickout()
|
||||||
|
},
|
||||||
|
showAllSeries () {
|
||||||
|
this.chart.dispatchAction({
|
||||||
|
type: 'legendAllSelect'
|
||||||
|
})
|
||||||
|
this.legend = this.legend.map((item, index) => {
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
isGray: false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.clickout()
|
||||||
|
},
|
||||||
|
// 十六进制转为rgba
|
||||||
|
hexToRgb (hex, a = 1) {
|
||||||
|
/*
|
||||||
|
hex: {String}, "#333", "#AF0382"
|
||||||
|
*/
|
||||||
|
hex = hex.slice(1)
|
||||||
|
if (hex.length == 3) {
|
||||||
|
hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]
|
||||||
|
}
|
||||||
|
const r = parseInt(hex.slice(0, 2), 16)
|
||||||
|
const g = parseInt(hex.slice(2, 4), 16)
|
||||||
|
const b = parseInt(hex.slice(4, 6), 16)
|
||||||
|
return `rgba(${r}, ${g}, ${b}, ${a})`
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted () {
|
mounted () {
|
||||||
@@ -623,7 +847,7 @@ export default {
|
|||||||
beforeDestroy () {
|
beforeDestroy () {
|
||||||
this.$refs.chartRoom.removeEventListener('mousemove', this.chartRoomMouseMove)
|
this.$refs.chartRoom.removeEventListener('mousemove', this.chartRoomMouseMove)
|
||||||
if (this.chart) {
|
if (this.chart) {
|
||||||
this.chart.clear()
|
this.chart.dispose()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user