factory_web/src/views/statistics/pass_num.vue

489 lines
15 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-container>
<el-header>
<div class="right-panel">
<el-select v-model="queryType" @change="queryTypeChange">
<el-option v-for="item in typeOptions"
:key="item"
:label="item"
:value="item"
>
</el-option>
</el-select>
<el-date-picker
v-if="queryType=='月'"
v-model="queryDate"
type="month"
placeholder="查询月期"
value-format="YYYY-MM"
style="width:100%"
>
</el-date-picker>
<el-date-picker
v-if="queryType=='年'"
v-model="queryDate"
type="year"
placeholder="查询年份"
value-format="YYYY"
style="width:100%"
>
</el-date-picker>
<el-button type="primary" icon="el-icon-search" @click="handleQuery"></el-button>
</div>
</el-header>
<el-main>
<el-card shadow="never" style="margin-bottom: 8px;">
<el-row :gutter="10">
<el-col :lg="12">
<el-card shadow="never">
<div id="bachart1" style="width:100%;height:300px;"></div>
<!-- <scEcharts height="300px" :option="option"></scEcharts> -->
</el-card>
</el-col>
<el-col :lg="12">
<el-card shadow="never">
<el-table :data="tableData7">
<el-table-column type="index" width="50" />
<el-table-column label="物料名" prop="物料名">
</el-table-column>
<el-table-column label="月份" prop="月" v-if="queryType=='年'">
</el-table-column>
<el-table-column label="周" prop="周" v-else>
</el-table-column>
<el-table-column label="规格" prop="规格">
</el-table-column>
<el-table-column label="型号" prop="型号">
</el-table-column>
<el-table-column label="合格数" prop="合格数">
</el-table-column>
</el-table>
</el-card>
</el-col>
</el-row>
</el-card>
<el-card shadow="never" style="margin-bottom: 8px;">
<el-row :gutter="10">
<el-col :lg="12">
<el-card shadow="never">
<div id="bachart2" style="width:100%;height:300px;"></div>
<!-- <scEcharts height="300px" :option="option2"></scEcharts> -->
</el-card>
</el-col>
<el-col :lg="12">
<el-card shadow="never">
<el-table :data="tableData10">
<el-table-column type="index" width="50" />
<el-table-column label="物料名" prop="物料名">
</el-table-column>
<el-table-column label="月份" prop="月" v-if="queryType=='年'">
</el-table-column>
<el-table-column label="周" prop="周" v-else>
</el-table-column>
<el-table-column label="规格" prop="规格">
</el-table-column>
<el-table-column label="型号" prop="型号">
</el-table-column>
<el-table-column label="合格数" prop="合格数">
</el-table-column>
</el-table>
</el-card>
</el-col>
</el-row>
</el-card>
<el-card shadow="never" style="margin-bottom: 8px;">
<el-row :gutter="10">
<el-col :lg="12">
<el-card shadow="never">
<div id="bachart3" style="width:100%;height:300px;"></div>
<!-- <scEcharts height="300px" :option="option3"></scEcharts> -->
</el-card>
</el-col>
<el-col :lg="12">
<el-card shadow="never">
<el-table :data="tableDataAVG">
<el-table-column type="index" width="50" />
<el-table-column label="物料名" prop="物料名">
</el-table-column>
<el-table-column label="月份" prop="月" v-if="queryType=='年'">
</el-table-column>
<el-table-column label="周" prop="周" v-else>
</el-table-column>
<el-table-column label="合格数" prop="count_ok">
</el-table-column>
</el-table>
</el-card>
</el-col>
</el-row>
</el-card>
<el-card shadow="never" style="margin-bottom: 8px;">
<el-row :gutter="10">
<el-col :lg="12">
<el-card shadow="never">
<div id="bachart4" style="width:100%;height:300px;"></div>
<!-- <scEcharts height="300px" :option="option4"></scEcharts> -->
</el-card>
</el-col>
<el-col :lg="12">
<el-card shadow="never">
<el-table :data="tableData6">
<el-table-column type="index" width="50" />
<el-table-column label="物料名" prop="物料名">
</el-table-column>
<el-table-column label="月份" prop="月" v-if="queryType=='年'">
</el-table-column>
<el-table-column label="周" prop="周" v-else>
</el-table-column>
<el-table-column label="规格" prop="name">
</el-table-column>
<el-table-column label="型号" prop="name">
</el-table-column>
<el-table-column label="合格数" prop="count_ok">
</el-table-column>
</el-table>
</el-card>
</el-col>
</el-row>
</el-card>
</el-main>
</el-container>
</template>
<script>
import * as echarts from "echarts";
import T from '@/components/scEcharts/echarts-theme-T.js';
echarts.registerTheme('T', T);
import scEcharts from '@/components/scEcharts';
function deepCopy(obj) {
return JSON.parse(JSON.stringify(obj));
}
export default {
name: 'chart',
components: {
scEcharts
},
data() {
return {
queryType:'月',
queryDate:'',
start_date:'',
end_date:'',
currentYear:'',
currentMonth:'',
xAxisOrigin:[],
xAxisData:[],
typeOptions:['月','年'],
basicOption: {
backgroundColor: 'transparent',
title: {
text: '',
},
grid: {
top: '80px'
},
tooltip: {
trigger: 'axis'
},
xAxis: {
type: 'category',
data: []
},
yAxis: {
type: 'value'
},
lenged:[],
series: [{
data: [0, 0, 0, 0, 0, 0, 0],
stack: 'Ad',
type: 'bar',
barWidth: '15px',
}]
},
tableData6:[],
tableData7:[],
tableData10:[],
tableDataAVG:[],
firstWeekNum:1,
endWeekNum:4,
monthList:['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月']
}
},
mounted(){
let that =this;
let date = new Date();
let year = date.getFullYear();
let month = date.getMonth()+1;
let days = new Date(year, month, 0).getDate();
that.currentYear = year;
that.currentMonth = month;
that.start_date =year+'-'+month+'-01';
that.end_date = year+'-'+month+'-'+new Date(year, month, 0).getDate();
let month1=month;
if(month1<10){month1='0'+month1}
that.queryDate = year+'-'+month1;
that.firstWeekNum = that.getWeekOfYear(new Date('2024-1-01'));
that.endWeekNum = that.getWeekOfYear(new Date('2024-1-31'));
let duration = that.endWeekNum - that.firstWeekNum + 1;
for(let i =1;i<=duration;i++ ){
that.xAxisOrigin.push(''+i+'');
}
that.xAxisData = that.xAxisOrigin;
that.getData6();
that.getData7();
that.getData10();
that.getDataDAVG();
},
methods:{
setChart(name, option = null) {
// 根据name 渲染数据, option需填写否则option为模拟数据
var myChart = echarts.getInstanceByDom(document.getElementById(name));
if (myChart == undefined) {
myChart = echarts.init(document.getElementById(name), 'T');
}
if (option == null) {
option = Object.assign({}, this.basicOption)
}
setTimeout(() => {
try {
myChart.setOption(option);
} catch (error) { }
}, 500)
},
queryTypeChange(value){
console.log(value)
this.queryDate = '';
},
getWeekOfYear(date) {
var target = new Date(date.getFullYear(), date.getMonth(), date.getDate()); // 创建目标日期对象
var firstDayOfYear = new Date(target.getFullYear(), 0, 1); // 创建当前年份第一天的日期对象
if(target.getTime()==firstDayOfYear.getTime()){
return 1;
}else{
return Math.ceil((target - firstDayOfYear + 8 * (firstDayOfYear.getTimezoneOffset() / 480)) / 604800000);
}
// 计算两者之间相隔的周数并返回结果
},
getData6(){
let that = this;
let option = deepCopy(that.basicOption);
option.xAxis.data = that.xAxisData;
option.title.text = '6车间';
let exec = that.queryType=='月'?'productStatisticWeek':'productStatisticYear';
let obj = {
query: { start_date: that.start_date, end_date: that.end_date, dept_name: "6车间" },
};
that.$API.bi.dataset.exec.req(exec, obj).then((res) => {
// console.log('6生产车间统计:',res);
let tableData6 = res.data2.ds0;
if(tableData6.length>0){
option.series = [];
let seriesData = [],nameList = [];
tableData6.forEach(ite=>{
if(nameList.indexOf(ite.物料名)>-1){}else{
nameList.push(ite.物料名);
seriesData.push([])
}
})
if(that.queryType=='月'){
tableData6.forEach(item => {
let indexX = nameList.indexOf(item.物料名);
let indexY = item.-that.firstWeekNum;
seriesData[indexX][indexY]=item.合格数;
});
}else{
tableData6.forEach(item => {
let indexX = nameList.indexOf(item.物料名);
let indexY = item.month-1;
seriesData[indexX][indexY]=item.合格数;
});
}
for(let n=0;n<seriesData.length;n++){
let obj = {};
obj.name= nameList[n];
obj.stack= 'Ad';
obj.type= 'bar';
obj.barWidth= '15px';
obj.data= seriesData[n];
option.series.push(obj)
}
that.setChart("bachart3", option);
}else{
that.setChart("bachart3", option);
}
});
},
getData7(){
let that = this;
let obj = {
query: { start_date: that.start_date, end_date: that.end_date, dept_name: "7车间" },
};
let option = deepCopy(that.basicOption);
option.xAxis.data = that.xAxisData;
option.title.text = '预制棒7车间';
let exec = that.queryType==''?'lineWeek':'lineMonth';
that.$API.bi.dataset.exec.req(exec, obj).then((res) => {
console.log('7生产车间统计:',res);
let tableData7 = res.data2.ds0;
that.tableData7 = tableData7;
debugger;
if(tableData7.length>0){
debugger;
option.series = [];
let seriesData = [],nameList = [];
tableData7.forEach(ite=>{
if(nameList.indexOf(ite.物料名)>-1){}else{
nameList.push(ite.物料名);
seriesData.push([])
}
})
tableData7.forEach(item => {
let indexX=0,indexY=0;
if(that.queryType=='月'){
indexX = nameList.indexOf(item.物料名);
indexY = item.-that.firstWeekNum;
}else{
indexX = nameList.indexOf(item.物料名);
indexY = item.-1;
}
seriesData[indexX][indexY]=item.合格数;
});
for(let n=0;n<seriesData.length;n++){
let obj = {};
obj.name= nameList[n];
obj.stack= 'Ad';
obj.type= 'bar';
obj.barWidth= '15px';
obj.data= seriesData[n];
option.series.push(obj)
}
that.setChart("bachart1", option);
}else{
that.setChart("bachart1", option);
}
});
},
getData10(){
let that = this;
let option = deepCopy(that.basicOption);
option.xAxis.data = that.xAxisData;
option.title.text = '预制管10车间';
let obj = {
query: { start_date: that.start_date, end_date: that.end_date, dept_name: "10车间" },
};
let exec = that.queryType==''?'lineWeek':'lineMonth';
that.$API.bi.dataset.exec.req(exec, obj).then((res) => {
// console.log('10生产车间统计:',res);
let tableData10 = res.data2.ds0;
that.tableData10 = tableData10;
if(tableData10.length>0){
option.series = [];
let seriesData = [],nameList = [];
tableData10.forEach(ite=>{
if(nameList.indexOf(ite.物料名)>-1){}else{
nameList.push(ite.物料名);
seriesData.push([])
}
})
tableData10.forEach(item => {
let indexX=0,indexY=0;
if(that.queryType=='月'){
indexX = nameList.indexOf(item.物料名);
indexY = item.-that.firstWeekNum;
}else{
indexX = nameList.indexOf(item.物料名);
indexY = item.-1;
}
seriesData[indexX][indexY]=item.合格数;
});
for(let n=0;n<seriesData.length;n++){
let obj = {};
obj.name= nameList[n];
obj.stack= 'Ad';
obj.type= 'bar';
obj.barWidth= '15px';
obj.data= seriesData[n];
option.series.push(obj)
}
that.setChart("bachart2", option);
}else{
that.setChart("bachart2", option);
}
});
},
getDataDAVG(){
let that = this;
let option = deepCopy(that.basicOption);
option.xAxis.data = that.xAxisData;
option.title.text = 'AVG';
let obj = {
query: { start_date: that.start_date, end_date: that.end_date},
};
let exec = that.queryType==''?'AVGWeek':'AVGMonth';
that.$API.bi.dataset.exec.req(exec, obj).then((res) => {
// console.log('AVG统计:',res);
let tableDataAVG = res.data2.ds0;
let seriesData = [];
if(tableDataAVG.length>0){
tableDataAVG.forEach(item => {
let index=0;
if(that.queryType=='月'){
index = item.month-1;
}else{
index = item.-that.firstWeekNum;
}
seriesData[index]=item.合格数;
});
let obj = {};
obj.name= 'AVG';
obj.type= 'bar';
obj.barWidth= '15px';
obj.data= seriesData;
option.series.push(obj)
that.setChart("bachart4", option);
}else{
that.setChart("bachart4", option);
}
});
},
handleQuery(){
let that = this;
if(this.queryType=='月'){
if(this.queryDate!==''&&this.queryDate!==null){
this.start_date =this.queryDate+'-01';
let arr = this.queryDate.split('-');
this.end_date = this.queryDate+'-'+new Date(arr[0], arr[1], 0).getDate();
this.firstWeekNum = this.getWeekOfYear(new Date(this.start_date));
this.endWeekNum = this.getWeekOfYear(new Date(this.end_date));
let duration = this.endWeekNum - this.firstWeekNum + 1;
let xAxisData = [];
for(let i =1;i<=duration;i++ ){
xAxisData.push('第'+i+'周');
}
that.xAxisData = xAxisData;
}else{
this.start_date =this.currentYear+'-'+this.currentMonth+'-01';
this.end_date = this.currentYear+'-'+this.currentMonth+'-'+new Date(this.currentYear, this.currentMonth, 0).getDate();
let date = new Date(this.start_date);
this.firstWeekNum = this.getWeekOfYear(date);
this.xAxisData = this.xAxisOrigin;
}
}else{
if(this.queryDate!==''&&this.queryDate!==null){
this.start_date = this.queryDate+'-01-01';
this.end_date = this.queryDate+'-12-31';
}else{
this.start_date = this.currentYear+'-01-01';
this.end_date = this.currentYear+'-12-31';
}
that.xAxisData = that.monthList;
}
this.getData6();
this.getData7();
this.getData10();
this.getDataDAVG();
},
},
}
</script>
<style>
</style>