factory_web/src/components/scEnm/empchartsdialog.vue

284 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<el-dialog v-model="visible" :fullscreen="isFullscreen" v-bind="$attrs" :show-close="showClose">
<template #header>
<slot name="header">
<span class="el-dialog__title">{{ title }}</span>
</slot>
<div class="sc-dialog__headerbtn">
<button v-if="showFullscreen" aria-label="fullscreen" type="button" @click="setFullscreen">
<el-icon v-if="isFullscreen" class="el-dialog__close"><el-icon-bottom-left /></el-icon>
<el-icon v-else class="el-dialog__close"><el-icon-full-screen /></el-icon>
</button>
<button v-if="showClose" aria-label="close" type="button" @click="closeDialog">
<el-icon class="el-dialog__close"></el-icon>
</button>
</div>
</template>
<div v-loading="loading">
<div class="searchHead" v-if="type=='hours'">
<el-date-picker
v-model="query.start_time"
type="date"
placeholder="选择时间"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
:picker-options="pickerOptions"
/>
<span class="middleText">至</span>
<el-date-picker
v-model="query.end_time"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
start-placeholder="结束日期"
:picker-options="pickerOptions"
/>
<el-button type="primary" class="searchBtn" @click="dataSearch">查询</el-button>
</div>
<div class="searchHead" v-if="type=='days'">
<el-date-picker
v-model="query.start_time"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
start-placeholder="开始日期"
:picker-options="pickerOptions"
/>
<el-date-picker
v-model="query.end_time"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
start-placeholder="结束日期"
:picker-options="pickerOptions"
/>
<el-button type="primary" class="searchBtn" @click="dataSearch">查询</el-button>
</div>
<div class="searchHead" v-if="type=='month'">
<el-date-picker
v-model="query.start_time"
type="month"
format="YYYY-MM"
value-format="YYYY-MM"
start-placeholder="开始月份"
:picker-options="pickerOptions"
/>
<el-date-picker
v-model="query.end_time"
type="month"
format="YYYY-MM"
value-format="YYYY-MM"
start-placeholder="结束月份"
:picker-options="pickerOptions"
/>
<el-button type="primary" class="searchBtn" @click="dataSearch">查询</el-button>
</div>
<div class="searchHead" v-if="type=='year'">
<el-date-picker
v-model="query.start_time"
type="year"
format="YYYY"
value-format="YYYY"
start-placeholder="开始日期"
:picker-options="pickerOptions"
/>
<el-date-picker
v-model="query.end_time"
type="year"
format="YYYY"
value-format="YYYY"
start-placeholder="结束日期"
:picker-options="pickerOptions"
/>
<el-button type="primary" class="searchBtn" @click="dataSearch">查询</el-button>
</div>
<div id="myChart" style="width:100%;height:400px;"></div>
</div>
<template #footer>
<slot name="footer"></slot>
</template>
</el-dialog>
</template>
<script>
import * as echarts from 'echarts';
export default {
props: {
type: { type: String, default: "hours" },
title: { type: String, default: "" },
apiObj: { type: Object, default: () => { } },
showClose: { type: Boolean, default: true },
echartType: { type: String, default: 'bar' },
modelValue: { type: Boolean, default: false },
showFullscreen: { type: Boolean, default: true },
loading: { type: Boolean, default: false }
},
data() {
return {
visible: false,
isFullscreen: false,
query:{
time:''
},
myChart:null,
option: {
title: {
text: '折线图',
subtext: '小标题',
x: 'center'
},
grid: { // 图表距离边框的距离可用百分比和数字px配置
top: '20%',
left: '3%',
right: '10%',
bottom: '5%',
containLabel: true
},
legend: { // 图例配置选项
orient: 'horizontal', //图例布局方式:水平 'horizontal' 、垂直 'vertical'
x: 'right', // 横向放置位置,选项:'center'、'left'、'right'、'number'(横向值 px
y: '10',// 纵向放置位置,选项:'top'、'bottom'、'center'、'number'(纵向值 px
data: ['查询对象'],
},
xAxis: {
type: 'category',
data: ['1','2','3','4','5','6','7','8','9','10','11','12'],
name: '时间',
// x轴名称样式
nameTextStyle: {
fontWeight: 600,
fontSize: 14
},
axisLine: {
lineStyle: { // X 轴颜色配置
color: '#3366CC'
}
},
axisLabel: {
rotate: 45, // X 轴标签文字旋转角度
interval: 0 //设置 X 轴数据间隔几个显示一个为0表示都显示
},
boundaryGap: false, //数据从 Y 轴起始
},
yAxis: {
type: 'value',
name: '对象值',
// y轴名称样式
nameTextStyle: {
fontWeight: 500,
fontSize: 14
},
//min:0, // 配置 Y 轴刻度最小值
//max:4000, // 配置 Y 轴刻度最大值
//splitNumber:7, // 配置 Y 轴数值间隔
axisLine: {
lineStyle: { // Y 轴颜色配置
color: '#3366CC'
}
},
},
tooltip: {
show: true, // 是否显示
trigger: 'axis', // axis item none
axisPointer: { // 坐标轴指示器配置项。
type: 'cross', // 'line' 直线指示器 'shadow' 阴影指示器 'none' 无指示器 'cross' 十字准星指示器。
axis: 'auto', // 指示器的坐标轴。
snap: true, // 坐标轴指示器是否自动吸附到点上
},
showContent: true,
},
series: [
{
name: '查询对象',
data: [0,0,0,0,0,0,0,0,0,0,0,0],
type: 'line',
// symbolSize: function(value) { // 点的大小跟随数值增加而变大
// return value / 150;
// },
symbolSize:8, //设置折线上圆点大小
symbol:'circle',
smooth: 0.5, // 设置折线弧度
itemStyle: {
normal: {
label : {
show: true // 在折线拐点上显示数据
},
lineStyle:{
width:1, // 设置虚线宽度
type:'dotted', // 虚线'dotted' 实线'solid'
color: '#3366CC'// 折线颜色设置为0即只显示点不显示折线
}
}
}
},
]
},
pickerOptions: {
disabledDate(time) {
return time.getTime() > Date.now();
}
}
}
},
watch:{
modelValue(){
this.visible = this.modelValue
if(this.visible){
this.isFullscreen = false
}
}
},
mounted() {
console.log(this.type);
console.log(this.title);
console.log(this.echartType);
this.visible = this.modelValue;
this.$nextTick(res=>{
this.getChartsData();
})
},
methods: {
async getChartsData(){
let that = this;
// var res = await this.apiObj.req(this.query);
let chartDom = document.getElementById('myChart');
that.myChart = echarts.init(chartDom);
// var option = {};
that.myChart.setOption(that.option);
},
//关闭
closeDialog(){
this.visible = false;
},
//最大化
setFullscreen(){
this.isFullscreen = !this.isFullscreen
}
}
}
</script>
<style scoped>
.searchHead{
display:flex
}
.middleText{
height: 32px;
line-height: 32px;
margin: 0 5px;
display: inline-block;
}
.searchBtn{
margin-left: 5px;
}
.sc-dialog__headerbtn {position: absolute;top: var(--el-dialog-padding-primary);right: var(--el-dialog-padding-primary);}
.sc-dialog__headerbtn button {padding: 0;background: transparent;border: none;outline: none;cursor: pointer;font-size: var(--el-message-close-size,16px);margin-left: 15px;color: var(--el-color-info);}
.sc-dialog__headerbtn button:hover .el-dialog__close {color: var(--el-color-primary);}
.sc-dialog:deep(.el-dialog).is-fullscreen {display: flex;flex-direction: column;top:0px !important;left:0px !important;}
.sc-dialog:deep(.el-dialog).is-fullscreen .el-dialog__header {}
.sc-dialog:deep(.el-dialog).is-fullscreen .el-dialog__body {flex:1;overflow: auto;}
.sc-dialog:deep(.el-dialog).is-fullscreen .el-dialog__footer {padding-bottom: 10px;border-top: 1px solid var(--el-border-color-base);}
</style>