factory_web/src/views/statistics/bxerp/zhongjian1Total.vue

433 lines
17 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-date-picker
v-model="query.last_time__gte"
type="date"
value-format="YYYY-MM-DD"
placeholder="开始时间"
style="width: 150px"
/>
<el-date-picker
v-model="query.last_time__lte"
type="date"
value-format="YYYY-MM-DD"
placeholder="结束时间"
style="margin-left: 2px; width: 150px"
/>
<el-input v-model="query.name__contains"
placeholder="产品名称"
clearable
style="width: 200px;"
></el-input>
<el-input v-model="query.batch__contains"
placeholder="批次号"
clearable
style="width: 200px;"
></el-input>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
></el-button>
</div>
</el-header>
<el-main class="nopadding">
<scTable
ref="table"
:apiObj="apiObj"
:params="params"
:query="params"
id="exportDiv"
row-key="id"
:summary-method="getSummaries"
show-summary
stripe
>
<el-table-column type="index" width="50" fixed="left"/>
<el-table-column label="产品名称" prop="material_start_name" fixed="left" min-width="100">
</el-table-column>
<el-table-column label="批次编号" fixed="left" prop="batch">
</el-table-column>
<el-table-column label="版型" prop="material_start_model" fixed="left">
</el-table-column>
<el-table-column label="检测日期" fixed="left" prop="batch" width="90">
<template #default="scope">
{{ scope.row.data.中检一_日期 }}
</template>
</el-table-column>
<el-table-column label="中检数" fixed="left">
<template #default="scope">
<span>{{ scope.row.data.中检一_count_use }}</span>
</template>
</el-table-column>
<el-table-column label="合格数" fixed="left">
<template #default="scope">
<span>{{ scope.row.data.中检一_count_ok }}</span>
</template>
</el-table-column>
<el-table-column label="炸" align="center" class-name="colorheader1">
<el-table-column label="数量" class-name="colorheader1">
<template #default="scope">
<span>{{ scope.row.data.中检一_含缺陷_炸}}</span>
</template>
</el-table-column>
<el-table-column label="比例" class-name="colorheader1">
<template #default="scope">
<span v-if="scope.row.data.中检一_含缺陷_炸_比例">{{scope.row.data.中检一_含缺陷_炸_比例 }}%</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="偏" align="center" class-name="colorheader2">
<el-table-column label="数量" class-name="colorheader2">
<template #default="scope">
<span>{{ scope.row.data.中检一_含缺陷_偏}}</span>
</template>
</el-table-column>
<el-table-column label="比例" class-name="colorheader2">
<template #default="scope">
<span v-if="scope.row.data.中检一_含缺陷_偏_比例">{{scope.row.data.中检一_含缺陷_偏_比例 }}%</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="掉头" align="center" class-name="colorheader3">
<el-table-column label="数量" class-name="colorheader3">
<template #default="scope">
<span>{{ scope.row.data.中检一_含缺陷_掉头}}</span>
</template>
</el-table-column>
<el-table-column label="比例" class-name="colorheader3">
<template #default="scope">
<span v-if="scope.row.data.中检一_含缺陷_掉头_比例">{{scope.row.data.中检一_含缺陷_掉头_比例 }}%</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="台阶划伤" align="center" class-name="colorheader4">
<el-table-column label="数量" class-name="colorheader4">
<template #default="scope">
<span>{{ scope.row.data.中检一_含缺陷_台阶划伤}}</span>
</template>
</el-table-column>
<el-table-column label="比例" class-name="colorheader4">
<template #default="scope">
<span v-if="scope.row.data.中检一_含缺陷_台阶划伤_比例">{{scope.row.data.中检一_含缺陷_台阶划伤_比例 }}%</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="柱面划伤" align="center" class-name="colorheader5">
<el-table-column label="数量" class-name="colorheader5">
<template #default="scope">
<span>{{ scope.row.data.中检一_含缺陷_柱面划伤}}</span>
</template>
</el-table-column>
<el-table-column label="比例" class-name="colorheader5">
<template #default="scope">
<span v-if="scope.row.data.中检一_含缺陷_柱面划伤_比例">{{scope.row.data.中检一_含缺陷_柱面划伤_比例 }}%</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="台棱" align="center" class-name="colorheader6">
<el-table-column label="数量" class-name="colorheader6">
<template #default="scope">
<span>{{ scope.row.data.中检一_含缺陷_台棱}}</span>
</template>
</el-table-column>
<el-table-column label="比例" class-name="colorheader6">
<template #default="scope">
<span v-if="scope.row.data.中检一_含缺陷_台棱_比例">{{scope.row.data.中检一_含缺陷_台棱_比例 }}%</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="台糙" align="center" class-name="colorheader7">
<el-table-column label="数量" class-name="colorheader7">
<template #default="scope">
<span>{{ scope.row.data.中检一_含缺陷_台糙}}</span>
</template>
</el-table-column>
<el-table-column label="比例" class-name="colorheader7">
<template #default="scope">
<span v-if="scope.row.data.中检一_含缺陷_台糙_比例">{{scope.row.data.中检一_含缺陷_台糙_比例 }}%</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="尺寸大/小" align="center" class-name="colorheader1">
<el-table-column label="数量" class-name="colorheader1">
<template #default="scope">
<span>{{ scope.row.data['中检一_含缺陷_尺寸大/小']}}</span>
</template>
</el-table-column>
<el-table-column label="比例" class-name="colorheader1">
<template #default="scope">
<span v-if="scope.row.data['中检一_含缺陷_尺寸大/小_比例']">{{scope.row.data['中检一_含缺陷_尺寸大/小_比例'] }}%</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="崩" align="center" class-name="colorheader2">
<el-table-column label="数量" class-name="colorheader2">
<template #default="scope">
<span>{{ scope.row.data.中检一_含缺陷_崩}}</span>
</template>
</el-table-column>
<el-table-column label="比例" class-name="colorheader2">
<template #default="scope">
<span v-if="scope.row.data.中检一_含缺陷_崩_比例">{{scope.row.data.中检一_含缺陷_崩_比例 }}%</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="修崩/炸" align="center" class-name="colorheader3">
<el-table-column label="数量" class-name="colorheader3">
<template #default="scope">
<span>{{ scope.row.data['中检一_含缺陷_修崩/炸']}}</span>
</template>
</el-table-column>
<el-table-column label="比例" class-name="colorheader3">
<template #default="scope">
<span v-if="scope.row.data['中检一_含缺陷_修崩/炸_比例']">{{scope.row.data['中检一_含缺陷_修崩/炸_比例'] }}%</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="拆头" align="center" class-name="colorheader4">
<el-table-column label="数量" class-name="colorheader4">
<template #default="scope">
<span>{{ scope.row.data.中检一_含缺陷_拆头}}</span>
</template>
</el-table-column>
<el-table-column label="比例" class-name="colorheader4">
<template #default="scope">
<span v-if="scope.row.data.中检一_含缺陷_拆头_比例">{{scope.row.data.中检一_含缺陷_拆头_比例 }}%</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="外黑" align="center" class-name="colorheader5">
<el-table-column label="数量" class-name="colorheader5">
<template #default="scope">
<span>{{ scope.row.data.中检一_含缺陷_外黑}}</span>
</template>
</el-table-column>
<el-table-column label="比例" class-name="colorheader5">
<template #default="scope">
<span v-if="scope.row.data.中检一_含缺陷_外黑_比例">{{scope.row.data.中检一_含缺陷_外黑_比例 }}%</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="外磕" align="center" class-name="colorheader6">
<el-table-column label="数量" class-name="colorheader6">
<template #default="scope">
<span>{{ scope.row.data.中检一_含缺陷_外磕}}</span>
</template>
</el-table-column>
<el-table-column label="比例" class-name="colorheader6">
<template #default="scope">
<span v-if="scope.row.data.中检一_含缺陷_外磕_比例">{{scope.row.data.中检一_含缺陷_外磕_比例 }}%</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="打毛/打台" align="center" class-name="colorheader7">
<el-table-column label="数量" class-name="colorheader7">
<template #default="scope">
<span>{{ scope.row.data['中检一_含缺陷_打毛/打台']}}</span>
</template>
</el-table-column>
<el-table-column label="比例" class-name="colorheader7">
<template #default="scope">
<span v-if="scope.row.data['中检一_含缺陷_打毛/打台_比例']">{{scope.row.data['中检一_含缺陷_打毛/打台_比例'] }}%</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="喷码" align="center" class-name="colorheader1">
<el-table-column label="数量" class-name="colorheader1">
<template #default="scope">
<span>{{ scope.row.data.中检一_含缺陷_喷码}}</span>
</template>
</el-table-column>
<el-table-column label="比例" class-name="colorheader1">
<template #default="scope">
<span v-if="scope.row.data.中检一_含缺陷_喷码_比例">{{scope.row.data.中检一_含缺陷_喷码_比例 }}%</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="掉皮" align="center" class-name="colorheader2">
<el-table-column label="数量" class-name="colorheader2">
<template #default="scope">
<span>{{ scope.row.data.中检一_含缺陷_掉皮}}</span>
</template>
</el-table-column>
<el-table-column label="比例" class-name="colorheader2">
<template #default="scope">
<span v-if="scope.row.data.中检一_含缺陷_掉皮_比例">{{scope.row.data.中检一_含缺陷_掉皮_比例 }}%</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="量崩" align="center" class-name="colorheader3">
<el-table-column label="数量" class-name="colorheader3">
<template #default="scope">
<span>{{ scope.row.data.中检一_含缺陷_量崩}}</span>
</template>
</el-table-column>
<el-table-column label="比例" class-name="colorheader3">
<template #default="scope">
<span v-if="scope.row.data.中检一_含缺陷_量崩_比例">{{scope.row.data.中检一_含缺陷_量崩_比例 }}%</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="坑" align="center" class-name="colorheader4">
<el-table-column label="数量" class-name="colorheader4">
<template #default="scope">
<span>{{ scope.row.data.中检一_含缺陷_坑}}</span>
</template>
</el-table-column>
<el-table-column label="比例" class-name="colorheader4">
<template #default="scope">
<span v-if="scope.row.data.中检一_含缺陷_坑_比例">{{scope.row.data.中检一_含缺陷_坑_比例 }}%</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="合格" class-name="colorheader5">
<el-table-column label="数量" class-name="colorheader5">
<template #default="scope">
<span>{{ scope.row.data.中检一_count_ok }}</span>
</template>
</el-table-column>
<el-table-column label="比例" class-name="colorheader5">
<template #default="scope">
<span v-if="scope.row.data.中检一_合格率">{{scope.row.data.中检一_合格率 }}%</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="备注" align="center" class-name="colorheader6">
<template #default="scope">
<span>{{ scope.row.data.中检一_缺陷_备注 }}</span>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
</template>
<script>
export default {
name: "statistics_guan",
data() {
return {
params: {
ordering:'-data__中检一_小日期',
querys:[[{field:"data__has_key",compare:"",value:"中检一_日期"}]],
},
query:{
name__contains:'',
batch__contains:'',
last_time__gte:'',
last_time__lte:'',
},
apiObj: this.$API.wpm.batchstquery,
options:[],
tableData:[],
};
},
methods: {
handleQuery(){
let that = this;
let querys = [[{field:"data__has_key",compare:"",value:"中检一_日期"}]];
let obj = {},obj1 = {},obj2 = {},obj3 = {};
obj.field = 'data__中检一_批次号';
obj.value = that.query.batch__contains;
obj.compare = '';
obj1.field = 'data__中检一_日期';
obj1.value = that.query.last_time__gte;
obj1.compare = 'gte';
obj2.field = 'data__中检一_日期';
obj2.value = that.query.last_time__lte;
obj2.compare = 'lte';
obj3.field = 'material_start__name';
obj3.value = that.query.name__contains;
obj3.compare = 'contains';
if(that.query.batch__contains!==''&&that.query.batch__contains!==null){
querys[0].push(obj);
}
if(that.query.last_time__gte!==''&&that.query.last_time__gte!==null){
querys[0].push(obj1);
}
if(that.query.last_time__lte!==''&&that.query.last_time__lte!==null){
querys[0].push(obj2);
}
if(that.query.name__contains!==''&&that.query.name__contains!==null){
querys[0].push(obj3);
}
that.params.querys = querys;
this.$refs.table.queryData(that.params);
},
getCountQt(data,type){
let count_qt = 0,count = 0;
},
getSummaries({ columns, data }) {
const sums = [];
// 总中检数(作为比率分母)
const totalCount = data.reduce((s, item) =>
s + Number(item.data['中检一_count_use'] || 0), 0);
// 数量列:列索引 → data 字段名
const countFieldMap = {
5: '中检一_count_use',
6: '中检一_count_ok',
7: '中检一_含缺陷_炸',
9: '中检一_含缺陷_偏',
11: '中检一_含缺陷_掉头',
13: '中检一_含缺陷_台阶划伤',
15: '中检一_含缺陷_柱面划伤',
17: '中检一_含缺陷_台棱',
19: '中检一_含缺陷_台糙',
21: '中检一_含缺陷_尺寸大/小',
23: '中检一_含缺陷_崩',
25: '中检一_含缺陷_修崩/炸',
27: '中检一_含缺陷_拆头',
29: '中检一_含缺陷_外黑',
31: '中检一_含缺陷_外磕',
33: '中检一_含缺陷_打毛/打台',
35: '中检一_含缺陷_喷码',
37: '中检一_含缺陷_掉皮',
39: '中检一_含缺陷_量崩',
41: '中检一_含缺陷_坑',
43: '中检一_count_ok',
};
// 预先求和
const sumCache = {};
Object.entries(countFieldMap).forEach(([idx, field]) => {
sumCache[idx] = data.reduce((s, item) =>
s + Number(item.data[field] || 0), 0);
});
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = <p class="count_row">合计<br /><br />比率<br /></p>;
return;
}
if (countFieldMap[index] !== undefined) {
const sum = sumCache[index];
if (index === 5 || index === 6) {
// 中检数/合格数:只显示合计
sums[index] = <p class="count_row"><div ref="borrowAmount1">{sum}</div><br /><div ref="borrowAmount2">-</div></p>;
} else {
const ratio = totalCount > 0
? Number(sum / totalCount * 100).toFixed(2)
: '0.00';
sums[index] = <p class="count_row"><div ref="borrowAmount1">{sum}</div><br /><div ref="borrowAmount2">{ratio}%</div></p>;
}
}
// 比例子列留空避免重复
});
return sums;
},
},
};
</script>
<style scoped>
</style>