You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
251 lines
6.5 KiB
Vue
251 lines
6.5 KiB
Vue
<template>
|
|
<div class="app-container">
|
|
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="98px">
|
|
<el-form-item label="生产时间">
|
|
<el-date-picker
|
|
v-model="queryParams.monthValue"
|
|
type="month"
|
|
value-format="yyyy-MM"
|
|
placeholder="选择月">
|
|
</el-date-picker>
|
|
</el-form-item>
|
|
<el-form-item>
|
|
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
|
</el-form-item>
|
|
</el-form>
|
|
<!-- <el-row :gutter="10" class="mb8">-->
|
|
<!-- <el-col :span="1.5">-->
|
|
<!-- <el-button-->
|
|
<!-- type="warning"-->
|
|
<!-- plain-->
|
|
<!-- icon="el-icon-download"-->
|
|
<!-- size="mini"-->
|
|
<!-- @click="handleExport"-->
|
|
<!-- v-hasPermi="['mes:prepare:export']"-->
|
|
<!-- >导出</el-button>-->
|
|
<!-- </el-col>-->
|
|
<!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>-->
|
|
<!-- </el-row>-->
|
|
|
|
|
|
<el-table :data="tableData" border style="width: 100%">
|
|
<el-table-column
|
|
prop="equipment_name"
|
|
label="产线"
|
|
fixed="left"
|
|
width="150">
|
|
</el-table-column>
|
|
<el-table-column
|
|
prop="category"
|
|
label="类别"
|
|
fixed="left"
|
|
width="150">
|
|
</el-table-column>
|
|
<el-table-column
|
|
prop="total_monthly_summary"
|
|
label="当月汇总"
|
|
fixed="left"
|
|
width="150">
|
|
</el-table-column>
|
|
<el-table-column
|
|
v-for="day in days"
|
|
:key="day"
|
|
:prop="day"
|
|
:label="`${day.replace('day', '')}`"
|
|
:width="150"
|
|
align="center"
|
|
:formatter="formatNullToZero">
|
|
</el-table-column>
|
|
</el-table>
|
|
|
|
<div id="main" style="width: 100%; height: 820px; background: #fff"></div>
|
|
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { getmonthProductionSut} from "@/api/mes/reportWork";
|
|
import * as echarts from 'echarts'
|
|
|
|
export default {
|
|
name: "Index",
|
|
|
|
data() {
|
|
return {
|
|
// 遮罩层
|
|
loading: true,
|
|
// 选中数组
|
|
ids: [],
|
|
// 非单个禁用
|
|
single: true,
|
|
// 非多个禁用
|
|
multiple: true,
|
|
// 显示搜索条件
|
|
showSearch: true,
|
|
// 总条数
|
|
total: 0,
|
|
// 日期范围
|
|
|
|
// 备料单表格数据
|
|
tableData: [],
|
|
days: [],
|
|
// 弹出层标题
|
|
title: "",
|
|
// 是否显示弹出层
|
|
open: false,
|
|
// 查询参数
|
|
queryParams: {
|
|
pageNum: 1,
|
|
pageSize: 10,
|
|
monthValue:''
|
|
},
|
|
// 表单参数
|
|
form: {},
|
|
// 表单校验
|
|
rules: {
|
|
monthValue: [
|
|
{ required: true, message: '生产时间不能为空', trigger: 'change' }
|
|
]
|
|
},
|
|
charts: "",
|
|
legendData:[],
|
|
seriesData:[]
|
|
};
|
|
},
|
|
|
|
created() {
|
|
|
|
const currentMonth = new Date().toISOString().substr(0, 7);
|
|
this.queryParams.monthValue = currentMonth;
|
|
this.getList();
|
|
},
|
|
methods: {
|
|
indexMethod(index) {
|
|
return index + 1;
|
|
},
|
|
/** 查询备料单列表 */
|
|
getList() {
|
|
this.seriesData=[];
|
|
this.legendData=[];
|
|
this.loading = true;
|
|
getmonthProductionSut(this.queryParams).then(response => {
|
|
// this.prepareList = response.rows;
|
|
const data = response.data;
|
|
// this.total = response.total;
|
|
this.loading = false;
|
|
if (data.length > 0) {
|
|
// 获取所有键
|
|
const allKeys = Object.keys(data[0]);
|
|
// 使用正则表达式过滤出符合日期格式的键
|
|
this.days = allKeys.filter(key => /^\d{4}-\d{2}-\d{2}$/.test(key)).sort();
|
|
// 计算每行的日期列数据总和,并设置到 'total_monthly_summary' 字段
|
|
data.forEach(row => {
|
|
let totalSummary = 0;
|
|
const dailyValues = []; // 用于存放每天的值
|
|
this.days.forEach(day => {
|
|
const value = row[day] || 0;
|
|
totalSummary += value;
|
|
dailyValues.push(value); // 将每天的值按顺序存入 dailyValues 数组中
|
|
totalSummary += (row[day] || 0);
|
|
});
|
|
row.total_monthly_summary = totalSummary;
|
|
this.legendData.push(row.equipment_name);
|
|
this.seriesData.push({
|
|
name: row.equipment_name, // 使用机器名或其他标识作为系列名称
|
|
type: 'line',
|
|
stack: 'Total',
|
|
data: dailyValues,
|
|
itemStyle: {
|
|
color: this.getRandomColor(), // 随机颜色
|
|
lineStyle: {
|
|
color: this.getRandomColor(),
|
|
},
|
|
},
|
|
});
|
|
});
|
|
}
|
|
this.tableData = data;
|
|
// 更新折线图数据
|
|
this.drawLine("main");
|
|
|
|
}).catch(() => {
|
|
this.loading = false;
|
|
});
|
|
},
|
|
formatNullToZero(row, column, cellValue) {
|
|
return cellValue === null || cellValue === undefined ? 0 : cellValue;
|
|
},
|
|
getRandomColor() {
|
|
const letters = '0123456789ABCDEF';
|
|
let color = '#';
|
|
for (let i = 0; i < 6; i++) {
|
|
color += letters[Math.floor(Math.random() * 16)];
|
|
}
|
|
return color;
|
|
},
|
|
// 取消按钮
|
|
cancel() {
|
|
this.open = false;
|
|
this.reset();
|
|
},
|
|
// 表单重置
|
|
reset() {
|
|
this.form = {};
|
|
this.resetForm("form");
|
|
},
|
|
/** 搜索按钮操作 */
|
|
handleQuery() {
|
|
this.queryParams.pageNum = 1
|
|
this.getList()
|
|
},
|
|
|
|
/** 导出按钮操作 */
|
|
handleExport() {
|
|
this.download('mes/reportWork/getDailyReportExport', {
|
|
...this.queryParams
|
|
}, `dailyReport${new Date().getTime()}.xlsx`)
|
|
},
|
|
|
|
|
|
drawLine(id) {
|
|
// 初始化折线图
|
|
this.charts = echarts.init(document.getElementById(id));
|
|
|
|
|
|
// 设置折线图数据和样式
|
|
this.charts.setOption({
|
|
title: {
|
|
text: '产量趋势'
|
|
},
|
|
tooltip: {
|
|
trigger: 'axis'
|
|
},
|
|
legend: {
|
|
data: this.legendData
|
|
},
|
|
grid: {
|
|
left: '3%',
|
|
right: '4%',
|
|
bottom: '3%',
|
|
containLabel: true
|
|
},
|
|
toolbox: {
|
|
feature: {
|
|
saveAsImage: {}
|
|
}
|
|
},
|
|
xAxis: {
|
|
type: 'category',
|
|
boundaryGap: false,
|
|
data: this.days
|
|
},
|
|
yAxis: {
|
|
type: 'value',
|
|
},
|
|
series: this.seriesData
|
|
});
|
|
},
|
|
}
|
|
};
|
|
</script>
|