fix:生产统计百分比保留整数加%

This commit is contained in:
shijing 2024-03-26 13:31:48 +08:00
parent 4b66cea211
commit dcecde3c11
3 changed files with 828 additions and 521 deletions

View File

@ -3,20 +3,41 @@
<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
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
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
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>
<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-card shadow="never" style="margin-bottom: 8px">
<el-row :gutter="10">
<el-col :lg="12">
<el-card shadow="never">
@ -24,15 +45,38 @@
</el-card>
</el-col>
<el-col :lg="12">
<el-card shadow="never" style="position: relative;">
<el-button @click="handleExport('7')" class="tables" type="primary">导出</el-button>
<el-table :data="tableData7" id="exportDiv7" :height="300">
<el-card shadow="never" style="position: relative">
<el-button
@click="handleExport('7')"
class="tables"
type="primary"
>导出</el-button
>
<el-table
:data="tableData7"
id="exportDiv7"
:height="300"
>
<el-table-column type="index" width="50" />
<el-table-column label="物料名" prop="物料名">
<el-table-column
label="物料名"
prop="物料名"
min-width="100"
>
</el-table-column>
<el-table-column label="月份" prop="月" v-if="queryType == '年'" width="50">
<el-table-column
label="月份"
prop="月"
v-if="queryType == '年'"
width="50"
>
</el-table-column>
<el-table-column label="周" prop="周" v-else width="50">
<el-table-column
label="周"
prop="周"
v-else
width="50"
>
</el-table-column>
<el-table-column label="型号" prop="型号">
</el-table-column>
@ -44,11 +88,14 @@
</el-table-column>
<el-table-column label="合格数" prop="合格数">
</el-table-column>
<el-table-column label="不合格数" prop="不合格数">
<el-table-column
label="不合格数"
prop="不合格数"
>
</el-table-column>
<el-table-column label="合格率" prop="合格率">
<template #default="scope">
{{ Math.round(scope.row.合格率)}}%
{{ Math.round(scope.row.合格率) }}%
</template>
</el-table-column>
</el-table>
@ -56,7 +103,7 @@
</el-col>
</el-row>
</el-card>
<el-card shadow="never" style="margin-bottom: 8px;">
<el-card shadow="never" style="margin-bottom: 8px">
<el-row :gutter="10">
<el-col :lg="12">
<el-card shadow="never">
@ -64,13 +111,30 @@
</el-card>
</el-col>
<el-col :lg="12">
<el-card shadow="never" style="position: relative;">
<el-button @click="handleExport('10')" class="tables" type="primary">导出</el-button>
<el-table :data="tableData10" id="exportDiv10" :height="300">
<el-card shadow="never" style="position: relative">
<el-button
@click="handleExport('10')"
class="tables"
type="primary"
>导出</el-button
>
<el-table
:data="tableData10"
id="exportDiv10"
:height="300"
>
<el-table-column type="index" width="50" />
<el-table-column label="物料名" prop="物料名">
<el-table-column
label="物料名"
prop="物料名"
min-width="100"
>
</el-table-column>
<el-table-column label="月份" prop="月" v-if="queryType == '年'">
<el-table-column
label="月份"
prop="月"
v-if="queryType == '年'"
>
</el-table-column>
<el-table-column label="周" prop="周" v-else>
</el-table-column>
@ -84,11 +148,14 @@
</el-table-column>
<el-table-column label="合格数" prop="合格数">
</el-table-column>
<el-table-column label="不合格数" prop="不合格数">
<el-table-column
label="不合格数"
prop="不合格数"
>
</el-table-column>
<el-table-column label="合格率" prop="合格率">
<template #default="scope">
{{ Math.round(scope.row.合格率)}}%
{{ Math.round(scope.row.合格率) }}%
</template>
</el-table-column>
</el-table>
@ -96,7 +163,7 @@
</el-col>
</el-row>
</el-card>
<el-card shadow="never" style="margin-bottom: 8px;">
<el-card shadow="never" style="margin-bottom: 8px">
<el-row :gutter="10">
<el-col :lg="12">
<el-card shadow="never">
@ -104,13 +171,30 @@
</el-card>
</el-col>
<el-col :lg="12">
<el-card shadow="never" style="position: relative;">
<el-button @click="handleExport('6')" class="tables" type="primary">导出</el-button>
<el-table :data="tableData6" id="exportDiv6" :height="300">
<el-card shadow="never" style="position: relative">
<el-button
@click="handleExport('6')"
class="tables"
type="primary"
>导出</el-button
>
<el-table
:data="tableData6"
id="exportDiv6"
:height="300"
>
<el-table-column type="index" width="50" />
<el-table-column label="物料名" prop="物料名">
<el-table-column
label="物料名"
prop="物料名"
min-width="100"
>
</el-table-column>
<el-table-column label="月份" prop="月" v-if="queryType == '年'">
<el-table-column
label="月份"
prop="月"
v-if="queryType == '年'"
>
</el-table-column>
<el-table-column label="周" prop="周" v-else>
</el-table-column>
@ -124,11 +208,14 @@
</el-table-column>
<el-table-column label="合格数" prop="合格数">
</el-table-column>
<el-table-column label="不合格数" prop="不合格数">
<el-table-column
label="不合格数"
prop="不合格数"
>
</el-table-column>
<el-table-column label="合格率" prop="合格率">
<template #default="scope">
{{ Math.round(scope.row.合格率)}}%
{{ Math.round(scope.row.合格率) }}%
</template>
</el-table-column>
</el-table>
@ -136,7 +223,7 @@
</el-col>
</el-row>
</el-card>
<el-card shadow="never" style="margin-bottom: 8px;">
<el-card shadow="never" style="margin-bottom: 8px">
<el-row :gutter="10">
<el-col :lg="12">
<el-card shadow="never">
@ -144,13 +231,26 @@
</el-card>
</el-col>
<el-col :lg="12">
<el-card shadow="never" style="position: relative;">
<el-button @click="handleExport('AVG')" class="tables" type="primary">导出</el-button>
<el-table :data="tableDataAVG" id="exportDivAVG" :height="300">
<el-card shadow="never" style="position: relative">
<el-button
@click="handleExport('AVG')"
class="tables"
type="primary"
>导出</el-button
>
<el-table
:data="tableDataAVG"
id="exportDivAVG"
:height="300"
>
<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
label="月份"
prop="月"
v-if="queryType == '年'"
>
</el-table-column>
<el-table-column label="周" prop="周" v-else>
</el-table-column>
@ -166,53 +266,55 @@
</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';
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',
name: "chart",
components: {
scEcharts
scEcharts,
},
data() {
return {
queryType: '月',
queryDate: '',
start_date: '',
end_date: '',
currentYear: '',
currentMonth: '',
queryType: "月",
queryDate: "",
start_date: "",
end_date: "",
currentYear: "",
currentMonth: "",
xAxisOrigin: [],
xAxisData: [],
typeOptions: ['月', '年'],
typeOptions: ["月", "年"],
basicOption: {
backgroundColor: 'transparent',
backgroundColor: "transparent",
title: {
text: '',
text: "",
},
grid: {
top: '80px'
top: "80px",
},
tooltip: {
trigger: 'axis'
trigger: "axis",
},
xAxis: {
type: 'category',
data: []
type: "category",
data: [],
},
yAxis: {
type: 'value'
type: "value",
},
lenged: [],
series: [{
data: [0, 0, 0, 0, 0, 0, 0],
stack: 'Ad',
type: 'bar',
barWidth: '15px',
}]
series: [
{
data: [0, 0, 0, 0, 0, 0, 0],
stack: "Ad",
type: "bar",
barWidth: "15px",
},
],
},
tableData6: [],
tableData7: [],
@ -220,8 +322,21 @@ export default {
tableDataAVG: [],
firstWeekNum: 1,
endWeekNum: 4,
monthList: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']
}
monthList: [
"一月",
"二月",
"三月",
"四月",
"五月",
"六月",
"七月",
"八月",
"九月",
"十月",
"十一月",
"十二月",
],
};
},
mounted() {
let that = this;
@ -231,16 +346,19 @@ export default {
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();
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;
if (month1 < 10) {
month1 = "0" + month1;
}
that.queryDate = year + "-" + month1;
that.firstWeekNum = that.getWeekOfYear(new Date(that.start_date));
that.endWeekNum = that.getWeekOfYear(new Date(that.end_date));
let duration = that.endWeekNum - that.firstWeekNum + 1;
for (let i = 1; i <= duration; i++) {
that.xAxisOrigin.push('第' + i + '周');
that.xAxisOrigin.push("第" + i + "周");
}
that.xAxisData = that.xAxisOrigin;
that.getData6();
@ -251,30 +369,41 @@ export default {
methods: {
setChart(name, option = null) {
// name , optionoption
var myChart = echarts.getInstanceByDom(document.getElementById(name));
var myChart = echarts.getInstanceByDom(
document.getElementById(name)
);
if (myChart == undefined) {
myChart = echarts.init(document.getElementById(name), 'T');
myChart = echarts.init(document.getElementById(name), "T");
}
if (option == null) {
option = Object.assign({}, this.basicOption)
option = Object.assign({}, this.basicOption);
}
setTimeout(() => {
try {
myChart.setOption(option);
} catch (error) { }
}, 500)
} catch (error) {}
}, 500);
},
queryTypeChange(value) {
console.log(value)
this.queryDate = '';
console.log(value);
this.queryDate = "";
},
getWeekOfYear(date) {
var target = new Date(date.getFullYear(), date.getMonth(), date.getDate()); //
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);
return Math.ceil(
(target -
firstDayOfYear +
8 * (firstDayOfYear.getTimezoneOffset() / 480)) /
604800000
);
}
//
},
@ -282,10 +411,14 @@ export default {
let that = this;
let option = deepCopy(that.basicOption);
option.xAxis.data = that.xAxisData;
option.title.text = '6车间';
let exec = that.queryType == '月' ? 'lineWeek' : 'lineMonth';
option.title.text = "6车间";
let exec = that.queryType == "月" ? "lineWeek" : "lineMonth";
let obj = {
query: { start_date: that.start_date, end_date: that.end_date, dept_name: "6车间" },
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);
@ -293,21 +426,23 @@ export default {
that.tableData6 = tableData6;
if (tableData6.length > 0) {
option.series = [];
let seriesData = [], nameList = [];
tableData6.forEach(ite => {
if (nameList.indexOf(ite.物料名) > -1) { } else {
let seriesData = [],
nameList = [];
tableData6.forEach((ite) => {
if (nameList.indexOf(ite.物料名) > -1) {
} else {
nameList.push(ite.物料名);
seriesData.push([])
seriesData.push([]);
}
})
if (that.queryType == '月') {
tableData6.forEach(item => {
});
if (that.queryType == "月") {
tableData6.forEach((item) => {
let indexX = nameList.indexOf(item.物料名);
let indexY = item. - that.firstWeekNum;
seriesData[indexX][indexY] = item.合格数;
});
} else {
tableData6.forEach(item => {
tableData6.forEach((item) => {
let indexX = nameList.indexOf(item.物料名);
let indexY = item.month - 1;
seriesData[indexX][indexY] = item.合格数;
@ -316,11 +451,11 @@ export default {
for (let n = 0; n < seriesData.length; n++) {
let obj = {};
obj.name = nameList[n];
obj.stack = 'Ad';
obj.type = 'bar';
obj.barWidth = '15px';
obj.stack = "Ad";
obj.type = "bar";
obj.barWidth = "15px";
obj.data = seriesData[n];
option.series.push(obj)
option.series.push(obj);
}
that.setChart("bachart3", option);
} else {
@ -331,30 +466,37 @@ export default {
getData7() {
let that = this;
let obj = {
query: { start_date: that.start_date, end_date: that.end_date, dept_name: "7车间" },
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';
option.title.text = "预制棒7车间";
let exec = that.queryType == "月" ? "lineWeek" : "lineMonth";
that.$API.bi.dataset.exec.req(exec, obj).then((res) => {
console.log('7生产车间统计:', res);
console.log("7生产车间统计:", res);
let tableData7 = res.data2.ds0 ? 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 {
let seriesData = [],
nameList = [];
tableData7.forEach((ite) => {
if (nameList.indexOf(ite.物料名) > -1) {
} else {
nameList.push(ite.物料名);
seriesData.push([])
seriesData.push([]);
}
})
tableData7.forEach(item => {
let indexX = 0, indexY = 0;
if (that.queryType == '月') {
});
tableData7.forEach((item) => {
let indexX = 0,
indexY = 0;
if (that.queryType == "月") {
indexX = nameList.indexOf(item.物料名);
indexY = item. - that.firstWeekNum;
} else {
@ -366,11 +508,11 @@ export default {
for (let n = 0; n < seriesData.length; n++) {
let obj = {};
obj.name = nameList[n];
obj.stack = 'Ad';
obj.type = 'bar';
obj.barWidth = '15px';
obj.stack = "Ad";
obj.type = "bar";
obj.barWidth = "15px";
obj.data = seriesData[n];
option.series.push(obj)
option.series.push(obj);
}
that.setChart("bachart1", option);
} else {
@ -382,27 +524,34 @@ export default {
let that = this;
let option = deepCopy(that.basicOption);
option.xAxis.data = that.xAxisData;
option.title.text = '预制管10车间';
option.title.text = "预制管10车间";
let obj = {
query: { start_date: that.start_date, end_date: that.end_date, dept_name: "10车间" },
query: {
start_date: that.start_date,
end_date: that.end_date,
dept_name: "10车间",
},
};
let exec = that.queryType == '月' ? 'lineWeek' : 'lineMonth';
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 ? res.data2.ds0 : [];
that.tableData10 = tableData10;
if (tableData10.length > 0) {
option.series = [];
let seriesData = [], nameList = [];
tableData10.forEach(ite => {
if (nameList.indexOf(ite.物料名) > -1) { } else {
let seriesData = [],
nameList = [];
tableData10.forEach((ite) => {
if (nameList.indexOf(ite.物料名) > -1) {
} else {
nameList.push(ite.物料名);
seriesData.push([])
seriesData.push([]);
}
})
tableData10.forEach(item => {
let indexX = 0, indexY = 0;
if (that.queryType == '月') {
});
tableData10.forEach((item) => {
let indexX = 0,
indexY = 0;
if (that.queryType == "月") {
indexX = nameList.indexOf(item.物料名);
indexY = item. - that.firstWeekNum;
} else {
@ -414,11 +563,11 @@ export default {
for (let n = 0; n < seriesData.length; n++) {
let obj = {};
obj.name = nameList[n];
obj.stack = 'Ad';
obj.type = 'bar';
obj.barWidth = '15px';
obj.stack = "Ad";
obj.type = "bar";
obj.barWidth = "15px";
obj.data = seriesData[n];
option.series.push(obj)
option.series.push(obj);
}
that.setChart("bachart2", option);
} else {
@ -430,19 +579,19 @@ export default {
let that = this;
let option = deepCopy(that.basicOption);
option.xAxis.data = that.xAxisData;
option.title.text = 'AVG';
option.title.text = "AVG";
let obj = {
query: { start_date: that.start_date, end_date: that.end_date },
};
let exec = that.queryType == '月' ? 'AVGWeek' : 'AVGMonth';
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 ? res.data2.ds0 : [];
let seriesData = [];
if (tableDataAVG.length > 0) {
tableDataAVG.forEach(item => {
tableDataAVG.forEach((item) => {
let index = 0;
if (that.queryType == '月') {
if (that.queryType == "月") {
index = item.month - 1;
} else {
index = item. - that.firstWeekNum;
@ -450,11 +599,11 @@ export default {
seriesData[index] = item.合格数;
});
let obj = {};
obj.name = 'AVG';
obj.type = 'bar';
obj.barWidth = '15px';
obj.name = "AVG";
obj.type = "bar";
obj.barWidth = "15px";
obj.data = seriesData;
option.series.push(obj)
option.series.push(obj);
that.setChart("bachart4", option);
} else {
that.setChart("bachart4", option);
@ -463,33 +612,50 @@ export default {
},
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));
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 + '周');
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();
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';
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';
this.start_date = this.currentYear + "-01-01";
this.end_date = this.currentYear + "-12-31";
}
that.xAxisData = that.monthList;
}
@ -500,24 +666,27 @@ export default {
},
handleExport(val) {
this.exportLoading = true;
let id = '#exportDiv' + val;
let name = val == 'AVG' ? val + '合格数统计' : val+'车间合格数统计';
let id = "#exportDiv" + val;
let name =
val == "AVG" ? val + "合格数统计" : val + "车间合格数统计";
this.$XLSX(id, name);
this.exportLoading = false;
},
},
}
};
</script>
<style scoped>
#bachart1,#bachart2,
#bachart3,#bachart4{
width:100%;
height:300px;
#bachart1,
#bachart2,
#bachart3,
#bachart4 {
width: 100%;
height: 300px;
}
.tables{
.tables {
position: absolute;
top:6px;
top: 6px;
left: 4px;
z-index: 10;
}

View File

@ -3,16 +3,37 @@
<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
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
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
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>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
></el-button>
</div>
</el-header>
<el-main id="elMain">
@ -23,13 +44,26 @@
</el-card>
</el-col>
<el-col :lg="12">
<el-card shadow="never" style="position: relative;">
<el-button @click="handleExport" class="tables" type="primary">导出</el-button>
<el-table :data="tableData" :height="tableHeight" id="exportDiv">
<el-card shadow="never" style="position: relative">
<el-button
@click="handleExport"
class="tables"
type="primary"
>导出</el-button
>
<el-table
:data="tableData"
:height="tableHeight"
id="exportDiv"
>
<el-table-column type="index" width="50" />
<el-table-column label="工段" prop="工段">
</el-table-column>
<el-table-column label="物料名" prop="物料名">
<el-table-column
label="物料名"
prop="物料名"
min-width="100"
>
</el-table-column>
<el-table-column label="任务数" prop="任务数">
</el-table-column>
@ -40,8 +74,14 @@
<el-table-column label="不合格数" prop="不合格数">
</el-table-column>
<el-table-column label="完成进度" prop="完成进度">
<template slot-scope="scope">
{{ Math.round(scope.row.完成进度 * 100) }}%
</template>
</el-table-column>
<el-table-column label="合格率" prop="合格率">
<template slot-scope="scope">
{{ Math.round(scope.row.合格率 * 100) }}%
</template>
</el-table-column>
</el-table>
</el-card>
@ -52,146 +92,181 @@
</template>
<script>
import scEcharts from '@/components/scEcharts';
import scEcharts from "@/components/scEcharts";
export default {
name: 'chart',
name: "chart",
components: {
scEcharts
scEcharts,
},
data() {
return {
tableHeight: 0,
queryType: '月',
queryDate: '',
start_date: '',
end_date: '',
currentYear: '',
currentMonth: '',
typeOptions: ['月', '年'],
queryType: "月",
queryDate: "",
start_date: "",
end_date: "",
currentYear: "",
currentMonth: "",
typeOptions: ["月", "年"],
option: {
title: {
text: '生产数量',
text: "生产数量",
},
grid: {
top: '80px'
top: "80px",
},
tooltip: {
trigger: 'axis'
trigger: "axis",
},
xAxis: {
type: 'category',
data: []
type: "category",
data: [],
},
yAxis: {
type: 'value'
type: "value",
},
series: [
{
name: '光纤预制棒',
name: "光纤预制棒",
data: [0, 0, 0, 0, 0, 0, 0, 0],
type: 'bar',
barWidth: '15px',
}, {
name: '光纤预制管',
type: "bar",
label: {
show: true,
position: "top",
formatter: "{c}",
color: "rgb(64,158,255)",
},
barWidth: "15px",
},
{
name: "光纤预制管",
data: [0, 0, 0, 0, 0, 0, 0, 0],
type: 'bar',
barWidth: '15px',
}
]
type: "bar",
label: {
show: true,
position: "top",
formatter: "{c}",
color: "rgb(64,158,255)",
},
barWidth: "15px",
},
],
},
processData: [],
xAxisData: [],
tableData: [],
}
};
},
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 > 9 ? month : '0' + month;
that.start_date = year + '-' + month + '-01';
that.end_date = year + '-' + month + '-' + new Date(year, month, 0).getDate();
let month1 = month > 9 ? month : '0' + month;
that.queryDate = year + '-' + month1;
that.tableHeight = document.getElementById('elMain').clientHeight - 40;
that.currentMonth = month > 9 ? month : "0" + month;
that.start_date = year + "-" + month + "-01";
that.end_date =
year + "-" + month + "-" + new Date(year, month, 0).getDate();
let month1 = month > 9 ? month : "0" + month;
that.queryDate = year + "-" + month1;
that.tableHeight = document.getElementById("elMain").clientHeight - 40;
that.getData6();
},
methods: {
queryTypeChange(value) {
console.log(value)
this.queryDate = '';
console.log(value);
this.queryDate = "";
},
getData6() {
let that = this;
let obj = {
query: {
start_date: this.start_date, end_date: this.end_date, dept_name: "6车间",
select_cols_material: "", group_bys_material: "", order_bys_material: "",
is_count_utask:-1,select_cols_mgroup: ", mgroup.name AS 工段",
group_bys_mgroup: ", mgroup.name"
start_date: this.start_date,
end_date: this.end_date,
dept_name: "6车间",
select_cols_material: "",
group_bys_material: "",
order_bys_material: "",
is_count_utask: -1,
select_cols_mgroup: ", mgroup.name AS 工段",
group_bys_mgroup: ", mgroup.name",
},
raise_exception: true
raise_exception: true,
};
if (that.queryType == '月') {
obj.query.select_cols_date = ",EXTRACT ( MONTH FROM mlog.handle_date ) AS 月"
obj.query.group_bys_date = ",EXTRACT ( MONTH FROM mlog.handle_date )"
obj.query.order_bys_date = ", 月"
if (that.queryType == "月") {
obj.query.select_cols_date =
",EXTRACT ( MONTH FROM mlog.handle_date ) AS 月";
obj.query.group_bys_date =
",EXTRACT ( MONTH FROM mlog.handle_date )";
obj.query.order_bys_date = ", 月";
}
let xAxisData = [], data1 = [], data0 = [];
that.$API.bi.dataset.exec.req('lineWeek', obj).then((res) => {
let xAxisData = [],
data1 = [],
data0 = [];
that.$API.bi.dataset.exec.req("lineWeek", obj).then((res) => {
let data = res.data2.ds0;
that.tableData = data;
data.forEach(item => {
if (xAxisData.indexOf(item.工段) > -1) { } else {
data.forEach((item) => {
if (xAxisData.indexOf(item.工段) > -1) {
} else {
xAxisData.push(item.工段);
}
console.log('xAxisData:', xAxisData);
console.log("xAxisData:", xAxisData);
let index = xAxisData.indexOf(item.工段);
if (item.物料名.indexOf('棒') > -1) {
if (item.物料名.indexOf("棒") > -1) {
data0[index] = item.合格数;
} else {
data1[index] = item.合格数;
}
})
});
that.xAxisData = xAxisData;
that.option.xAxis.data = that.xAxisData;
that.option.series[0].data = data0;
that.option.series[1].data = data1;
})
});
},
handleQuery() {
if (this.queryDate !== '' && this.queryDate !== null) {
if (this.queryType == '月') {
this.start_date = this.queryDate + '-01';
let arr = this.queryDate.split('-');
this.end_date = this.queryDate + '-' + new Date(arr[0], arr[1], 0).getDate();
if (this.queryDate !== "" && this.queryDate !== null) {
if (this.queryType == "月") {
this.start_date = this.queryDate + "-01";
let arr = this.queryDate.split("-");
this.end_date =
this.queryDate +
"-" +
new Date(arr[0], arr[1], 0).getDate();
} else {
this.start_date = this.queryDate + '-01-01';
this.end_date = this.queryDate + '-12-31';
this.start_date = this.queryDate + "-01-01";
this.end_date = this.queryDate + "-12-31";
}
} else {
if (this.queryType == '月') {
this.start_date = this.currentYear + '-' + this.currentMonth + '-01';
this.end_date = this.currentYear + '-' + this.currentMonth + '-' + new Date(this.currentYear, this.currentMonth, 0).getDate();
if (this.queryType == "月") {
this.start_date =
this.currentYear + "-" + this.currentMonth + "-01";
this.end_date =
this.currentYear +
"-" +
this.currentMonth +
"-" +
new Date(
this.currentYear,
this.currentMonth,
0
).getDate();
} else {
this.start_date = this.currentYear + '-01-01';
this.end_date = this.currentYear + '-12-31';
this.start_date = this.currentYear + "-01-01";
this.end_date = this.currentYear + "-12-31";
}
}
this.getData6();
},
handleExport() {
this.exportLoading = true;
this.$XLSX('#exportDiv', '工序合格数');
this.$XLSX("#exportDiv", "工序合格数");
this.exportLoading = false;
},
},
}
};
</script>
<style scoped>

View File

@ -3,32 +3,37 @@
<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
v-for="item in typeOptions"
:key="item"
:label="item"
:value="item"
>
</el-option>
</el-select>
<el-date-picker
v-if="queryType=='月'"
v-if="queryType == '月'"
v-model="queryDate"
type="month"
placeholder="查询月期"
value-format="YYYY-MM"
style="width:100%"
style="width: 100%"
>
</el-date-picker>
<el-date-picker
v-if="queryType=='年'"
v-if="queryType == '年'"
v-model="queryDate"
type="year"
placeholder="查询年份"
value-format="YYYY"
style="width:100%"
style="width: 100%"
>
</el-date-picker>
<el-button type="primary" icon="el-icon-search" @click="handleQuery"></el-button>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
></el-button>
</div>
</el-header>
<el-main id="elMain">
@ -51,11 +56,24 @@
</el-row>
<el-row :gutter="10">
<el-col :lg="8">
<el-card shadow="never" style="position: relative;">
<el-button @click="handleExport('7')" class="tables" type="primary">导出</el-button>
<el-table :data="tableData1" id="exportDiv7" :height="tableHeight">
<el-card shadow="never" style="position: relative">
<el-button
@click="handleExport('7')"
class="tables"
type="primary"
>导出</el-button
>
<el-table
:data="tableData1"
id="exportDiv7"
:height="tableHeight"
>
<el-table-column type="index" width="50" />
<el-table-column label="任务编号" prop="number">
<el-table-column
label="任务编号"
prop="number"
min-width="100px"
>
</el-table-column>
<el-table-column label="计划数" prop="count">
</el-table-column>
@ -67,11 +85,24 @@
</el-card>
</el-col>
<el-col :lg="8">
<el-card shadow="never" style="position: relative;">
<el-button @click="handleExport('10')" class="tables" type="primary">导出</el-button>
<el-table :data="tableData2" id="exportDiv10" :height="tableHeight">
<el-card shadow="never" style="position: relative">
<el-button
@click="handleExport('10')"
class="tables"
type="primary"
>导出</el-button
>
<el-table
:data="tableData2"
id="exportDiv10"
:height="tableHeight"
>
<el-table-column type="index" width="50" />
<el-table-column label="任务编号" prop="number">
<el-table-column
label="任务编号"
prop="number"
min-width="100px"
>
</el-table-column>
<el-table-column label="计划数" prop="count">
</el-table-column>
@ -83,11 +114,24 @@
</el-card>
</el-col>
<el-col :lg="8">
<el-card shadow="never" style="position: relative;">
<el-button @click="handleExport('6')" class="tables" type="primary">导出</el-button>
<el-table :data="tableData3" id="exportDiv6" :height="tableHeight">
<el-card shadow="never" style="position: relative">
<el-button
@click="handleExport('6')"
class="tables"
type="primary"
>导出</el-button
>
<el-table
:data="tableData3"
id="exportDiv6"
:height="tableHeight"
>
<el-table-column type="index" width="50" />
<el-table-column label="任务编号" prop="number">
<el-table-column
label="任务编号"
prop="number"
min-width="100px"
>
</el-table-column>
<el-table-column label="计划数" prop="count">
</el-table-column>
@ -103,285 +147,304 @@
</el-container>
</template>
<script>
import scEcharts from '@/components/scEcharts';
export default {
name: 'chart',
components: {
scEcharts
import scEcharts from "@/components/scEcharts";
export default {
name: "chart",
components: {
scEcharts,
},
data() {
return {
tableHeight: 0,
queryType: "月",
queryDate: "",
start_date: "",
end_date: "",
currentYear: "",
currentMonth: "",
typeOptions: ["月", "年"],
option1: {
title: {
text: "7车间完成率",
},
tooltip: {
trigger: "item",
},
legend: {
top: "3",
right: "3%",
},
color: ["rgb(64,158,255)", "orange"],
series: {
name: "7车间完成率",
type: "pie",
radius: ["40%", "70%"],
center: ["50%", "60%"],
label: {
show: true,
position: "outside",
formatter: "{b} : {c} ({d}%)",
},
data: [
{ value: 0, name: "已完成" },
{ value: 0, name: "未完成" },
],
},
},
option2: {
title: {
text: "10车间完成率",
// subtext: '',
},
tooltip: {
trigger: "item",
},
legend: {
top: "3",
right: "3%",
},
color: ["rgb(64,158,255)", "orange"],
series: {
name: "10车间完成率",
type: "pie",
radius: ["40%", "70%"],
center: ["50%", "60%"],
label: {
show: true,
position: "outside",
formatter: "{b} : {c} ({d}%)",
},
data: [
{ value: 0, name: "已完成" },
{ value: 0, name: "未完成" },
],
},
},
option3: {
title: {
text: "6车间完成率",
},
tooltip: {
trigger: "item",
},
legend: {
top: "3",
right: "3%",
},
color: ["rgb(64,158,255)", "orange"],
series: {
name: "6车间完成率",
type: "pie",
radius: ["40%", "70%"],
center: ["50%", "60%"],
label: {
show: true,
position: "outside",
formatter: "{b} : {c} ({d}%)",
},
// labelLayout: {
// verticalAlign: "bottom",
// // dy: 10,
// align: "left",
// dx: -10,
// },
// labelLine: {
// // length: 10,
// // length2: 30,
// lineStyle: {
// color: 'rgb(64,158,255)',
// type: "dashed",
// },
// },
data: [
{ value: 0, name: "已完成" },
{ value: 0, name: "未完成" },
],
},
},
tableData1: [],
tableData2: [],
tableData3: [],
};
},
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();
this.currentYear = year;
this.currentMonth = month > 9 ? month : "0" + month;
this.start_date = year + "-" + month + "-01";
this.end_date =
year + "-" + month + "-" + new Date(year, month, 0).getDate();
let month1 = month > 9 ? month : "0" + month;
this.queryDate = year + "-" + month1;
let height = document.getElementById("elMain").clientHeight - 40;
let chartheight = document.getElementById("elCol").clientHeight;
that.tableHeight = height - chartheight;
this.getData6();
this.getData7();
this.getData10();
},
methods: {
queryTypeChange() {
this.queryDate = "";
},
data() {
return {
tableHeight:0,
queryType:'月',
queryDate:'',
start_date:'',
end_date:'',
currentYear:'',
currentMonth:'',
typeOptions:['月','年'],
option1: {
title: {
text: '7车间完成率',
},
tooltip: {
trigger: 'item'
},
legend: {
top: '3',
right:'3%',
},
color:['rgb(64,158,255)','orange'],
series: {
name: '7车间完成率',
type: 'pie',
radius: ['40%', '70%'],
center: ['50%', '60%'],
label: {
show: true,
position: 'outside',
formatter: '{b} : {c} ({d}%)',
},
data: [
{value: 0, name: '已完成'},
{value: 0, name: '未完成'},
]
}
},
option2: {
title: {
text: '10车间完成率',
// subtext: '',
},
tooltip: {
trigger: 'item'
},
legend: {
top: '3',
right:'3%',
},
color:['rgb(64,158,255)','orange'],
series: {
name: '10车间完成率',
type: 'pie',
radius: ['40%', '70%'],
center: ['50%', '60%'],
label: {
show: true,
position: 'outside',
formatter: '{b} : {c} ({d}%)',
},
data: [
{value: 0, name: '已完成'},
{value: 0, name: '未完成'},
]
}
},
option3: {
title: {
text: '6车间完成率',
},
tooltip: {
trigger: 'item'
},
legend: {
top: '3',
right:'3%',
},
color:['rgb(64,158,255)','orange'],
series: {
name: '6车间完成率',
type: 'pie',
radius: ['40%', '70%'],
center: ['50%', '60%'],
label: {
show: true,
position: 'outside',
formatter: '{b} : {c} ({d}%)',
},
// labelLayout: {
// verticalAlign: "bottom",
// // dy: 10,
// align: "left",
// dx: -10,
// },
// labelLine: {
// // length: 10,
// // length2: 30,
// lineStyle: {
// color: 'rgb(64,158,255)',
// type: "dashed",
// },
// },
data: [
{value: 0, name: '已完成'},
{value: 0, name: '未完成'},
]
}
},
tableData1:[],
tableData2:[],
tableData3:[],
}
},
mounted(){
getData7() {
let that = this;
let date = new Date();
let year = date.getFullYear();
let month = date.getMonth()+1;
let days = new Date(year, month, 0).getDate();
this.currentYear = year;
this.currentMonth = month>9?month:'0'+month;
this.start_date =year+'-'+month+'-01';
this.end_date = year+'-'+month+'-'+new Date(year, month, 0).getDate();
let month1 = month>9?month:'0'+month;
this.queryDate = year+'-'+month1;
let height= document.getElementById('elMain').clientHeight-40;
let chartheight= document.getElementById('elCol').clientHeight;
that.tableHeight = height-chartheight;
that.tableData1 = [];
that.option1.series.data[0].value = 0;
that.option1.series.data[1].value = 0;
let obj = {};
obj.page = 0;
obj.mgroup__belong_dept__name = "7车间";
obj.start_date__gte = this.start_date;
obj.end_date__lte = this.end_date;
that.$API.pm.utask.list.req(obj).then((res) => {
console.log("utask:", res);
let data = [];
let count_ok1 = 0;
let count_notok1 = 0;
if (res.length > 0) {
res.forEach((item) => {
let obj = item;
obj.rate =
Math.round((item.count_ok / item.count) * 100) +
"%";
if (item.count_ok >= item.count) {
count_ok1++;
} else {
count_notok1++;
}
data.push(obj);
});
that.tableData1 = data;
that.option1.series.data[0].value = count_ok1;
}
this.option1.series.data[0].value = count_ok1;
this.option1.series.data[1].value = count_notok1;
});
},
async getData10() {
let that = this;
that.tableData2 = [];
that.option2.series.data[0].value = 0;
that.option2.series.data[1].value = 0;
let obj = {};
obj.page = 0;
obj.mgroup__belong_dept__name = "10车间";
obj.start_date__gte = this.start_date;
obj.end_date__lte = this.end_date;
await that.$API.pm.utask.list.req(obj).then((res) => {
console.log("utask:", res);
let data = [];
let count_ok2 = 0;
let count_notok2 = 0;
if (res.length > 0) {
res.forEach((item) => {
let obj = item;
obj.rate =
Math.round((item.count_ok / item.count) * 100) +
"%";
if (item.count_ok >= item.count) {
count_ok2++;
} else {
count_notok2++;
}
data.push(obj);
});
that.tableData2 = data;
that.option2.series.data[0].value = count_ok2;
that.option2.series.data[1].value = count_notok2;
}
});
},
async getData6() {
let that = this;
that.tableData3 = [];
that.option3.series.data[0].value = 0;
that.option3.series.data[1].value = 0;
let obj = {};
obj.page = 0;
obj.mtask_utask__mgroup__belong_dept__name = "6车间";
obj.start_date__gte = this.start_date;
obj.end_date__lte = this.end_date;
await that.$API.pm.utask.list.req(obj).then((res) => {
console.log("utask:", res);
let data = [];
let count_ok3 = 0;
let count_notok3 = 0;
if (res.length > 0) {
res.forEach((item) => {
let obj = item;
obj.rate =
Math.round((item.count_ok / item.count) * 100) +
"%";
if (item.count_ok >= item.count) {
count_ok3++;
} else {
count_notok3++;
}
data.push(obj);
});
that.tableData3 = data;
that.option3.series.data[0].value = count_ok3;
that.option3.series.data[1].value = count_notok3;
}
});
},
handleQuery() {
if (this.queryDate !== "" && this.queryDate !== null) {
if (this.queryType == "月") {
this.start_date = this.queryDate + "-01";
let arr = this.queryDate.split("-");
this.end_date =
this.queryDate +
"-" +
new Date(arr[0], arr[1], 0).getDate();
} else {
this.start_date = this.queryDate + "-01-01";
this.end_date = this.queryDate + "-12-31";
}
} else {
if (this.queryType == "月") {
this.start_date =
this.currentYear + "-" + this.currentMonth + "-01";
this.end_date =
this.currentYear +
"-" +
this.currentMonth +
"-" +
new Date(
this.currentYear,
this.currentMonth,
0
).getDate();
} else {
this.start_date = this.currentYear + "-01-01";
this.end_date = this.currentYear + "-12-31";
}
}
this.getData6();
this.getData7();
this.getData10();
},
methods:{
queryTypeChange(){
this.queryDate = '';
},
getData7(){
let that = this;
that.tableData1=[];
that.option1.series.data[0].value = 0;
that.option1.series.data[1].value = 0;
let obj={};
obj.page = 0;
obj.mgroup__belong_dept__name = '7车间';
obj.start_date__gte = this.start_date;
obj.end_date__lte = this.end_date;
that.$API.pm.utask.list.req( obj).then((res) => {
console.log('utask:',res);
let data = [];
let count_ok1 = 0;
let count_notok1 = 0;
if(res.length>0){
res.forEach(item => {
let obj = item;
obj.rate = (item.count_ok/item.count*100).toFixed(2)+'%';
if(item.count_ok>=item.count){
count_ok1++;
}else{
count_notok1++;
}
data.push(obj);
});
that.tableData1 = data
that.option1.series.data[0].value = count_ok1;
}
this.option1.series.data[0].value = count_ok1;
this.option1.series.data[1].value = count_notok1;
});
},
async getData10(){
let that = this;
that.tableData2=[];
that.option2.series.data[0].value = 0;
that.option2.series.data[1].value = 0;
let obj={};
obj.page = 0;
obj.mgroup__belong_dept__name = '10车间';
obj.start_date__gte = this.start_date;
obj.end_date__lte = this.end_date;
await that.$API.pm.utask.list.req( obj).then((res) => {
console.log('utask:',res);
let data = [];
let count_ok2 = 0;
let count_notok2 = 0;
if(res.length>0){
res.forEach(item => {
let obj = item;
obj.rate = (item.count_ok/item.count*100).toFixed(2)+'%';
if(item.count_ok>=item.count){
count_ok2++;
}else{
count_notok2++;
}
data.push(obj);
});
that.tableData2 = data;
that.option2.series.data[0].value = count_ok2;
that.option2.series.data[1].value = count_notok2;
}
});
},
async getData6(){
let that = this;
that.tableData3=[];
that.option3.series.data[0].value = 0;
that.option3.series.data[1].value = 0;
let obj={};
obj.page = 0;
obj.mtask_utask__mgroup__belong_dept__name = '6车间';
obj.start_date__gte = this.start_date;
obj.end_date__lte = this.end_date;
await that.$API.pm.utask.list.req( obj).then((res) => {
console.log('utask:',res);
let data = [];
let count_ok3 = 0;
let count_notok3 = 0;
if(res.length>0){
res.forEach(item => {
let obj = item;
obj.rate = (item.count_ok/item.count*100).toFixed(2)+'%';
if(item.count_ok>=item.count){
count_ok3++;
}else{
count_notok3++;
}
data.push(obj);
});
that.tableData3= data
that.option3.series.data[0].value = count_ok3;
that.option3.series.data[1].value = count_notok3;
}
});
},
handleQuery(){
if(this.queryDate!==''&&this.queryDate!==null){
if(this.queryType=='月'){
this.start_date =this.queryDate+'-01';
let arr = this.queryDate.split('-');
this.end_date = this.queryDate+'-'+new Date(arr[0], arr[1], 0).getDate();
}else{
this.start_date = this.queryDate+'-01-01';
this.end_date = this.queryDate+'-12-31';
}
}else{
if(this.queryType=='月'){
this.start_date =this.currentYear+'-'+this.currentMonth+'-01';
this.end_date = this.currentYear+'-'+this.currentMonth+'-'+new Date(this.currentYear, this.currentMonth, 0).getDate();
}else{
this.start_date = this.currentYear+'-01-01';
this.end_date = this.currentYear+'-12-31';
}
}
this.getData6();
this.getData7();
this.getData10();
},
handleExport(val) {
this.exportLoading = true;
let id = '#exportDiv' + val;
let name = val+'车间完成率';
this.$XLSX(id, name);
this.exportLoading = false;
},
handleExport(val) {
this.exportLoading = true;
let id = "#exportDiv" + val;
let name = val + "车间完成率";
this.$XLSX(id, name);
this.exportLoading = false;
},
}
},
};
</script>
<style scoped>
.tables{
.tables {
position: absolute;
top:6px;
top: 6px;
left: 4px;
z-index: 10;
}