fix:统计同步

This commit is contained in:
shijing 2025-07-02 10:38:45 +08:00
parent 0e6df874b7
commit b067617e15
8 changed files with 3193 additions and 563 deletions

View File

@ -163,6 +163,7 @@
<el-tag v-if="scope.row.type == 20" type="warning">返工</el-tag>
<el-tag v-if="scope.row.type == 40" type="danger" >报废</el-tag>
<el-tag v-if="scope.row.type == 50" type="success" >改版</el-tag>
<el-tag v-if="scope.row.type == 60" type="success" >退料</el-tag>
</template>
</el-table-column>
<el-table-column label="交接类型" prop="mtype" min-width="80">

View File

@ -120,7 +120,7 @@
<el-table-column label="合计" prop="count_notok"></el-table-column>
</el-table-column>
<el-table-column label="不合格数" align="center" v-else>
<el-table-column label="返">
<el-table-column label="返">
<template #default="scope">
{{ scope.row.count_notok_json.count_n_fx }}
</template>

View File

@ -2,187 +2,642 @@
<el-container>
<el-header>
<div class="right-panel">
<!-- 检验类型 -->
<el-select
v-model="query.process_name"
placeholder="检验类型"
@change="processChange">
<el-option
v-for="item in options"
:key="item.value"
:label="item.name"
:value="item.value"
>
</el-option>
</el-select>
<!-- 检验人 -->
<!-- <el-select v-model="query.test_user"
placeholder="检验人">
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
<el-select v-model="query.shift"
placeholder="班次">
<el-option
v-for="item in shiftOptions"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select> -->
<el-input v-model="query.batch"
placeholder="批次号"
clearable
style="width: 200px;"
></el-input>
<el-date-picker
v-model="query.start_date"
v-model="query.cc_data_start"
type="date"
placeholder="查询日期"
placeholder="尺寸检验开始日期"
value-format="YYYY-MM-DD"
style="width: 160px"
>
</el-date-picker>
clearable
style="width: 160px; margin: 5px"
></el-date-picker>
<el-date-picker
v-model="query.cc_data_end"
type="date"
placeholder="尺寸检验结束日期"
value-format="YYYY-MM-DD"
clearable
style="width: 160px; margin:0"
></el-date-picker>
<el-date-picker
v-model="query.wg_data_start"
type="date"
placeholder="外观检验开始日期"
value-format="YYYY-MM-DD"
clearable
style="width: 160px; margin: 5px"
></el-date-picker>
<el-date-picker
v-model="query.wg_data_end"
type="date"
placeholder="外观检验结束日期"
value-format="YYYY-MM-DD"
clearable
style="width: 160px; margin:0"
></el-date-picker>
<el-date-picker
v-model="query.fx_data_start"
type="date"
placeholder="返修开始日期"
value-format="YYYY-MM-DD"
clearable
style="width: 160px; margin: 5px"
></el-date-picker>
<el-date-picker
v-model="query.fx_data_end"
type="date"
placeholder="返修结束日期"
value-format="YYYY-MM-DD"
clearable
style="width: 160px; margin:0"
></el-date-picker>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
></el-button>
<el-button
@click="handleExport"
class="tables"
type="primary"
>导出</el-button>
</div>
<el-button @click="handleExport" type="primary">导出</el-button>
</el-header>
<el-main class="nopadding">
<scTable
:data="tableData"
id="exportDiv"
stripe
hideDo
hidePagination>
<el-table-column type="index" width="50" />
<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-column label="工序" prop="工序"> </el-table-column>
<el-table-column label="检验时间">
<template #default="scope">
{{ scope.row. }}-{{ scope.row. }}-{{ scope.row. }}
<el-table
ref="table"
:data="tableData"
id="exportDiv"
stripe
style="height: 100%;"
:summary-method="getSummaries"
show-summary
>
<el-table-column label="批次号" prop="batch" min-width="240" fixed="left">
<template #default="scope"><span>{{ scope.row.data.批次号 }}</span></template>
</el-table-column>
<el-table-column label="尺寸检验" align="center" class-name="colorheader1">
<el-table-column label="日期" class-name="colorheader1" width="90">
<template #default="scope"><span>{{ scope.row.data.尺寸检验_日期 }}</span></template>
</el-table-column>
<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>{{ scope.row.data.尺寸检验_count_real }}</span></template>
</el-table-column>
<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>{{ scope.row.data.尺寸检验_缺陷_黑圈内径_比例 }}</span></template>
</el-table-column>
<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>{{ scope.row.data.尺寸检验_缺陷_黑圈外径_比例 }}</span></template>
</el-table-column>
<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>{{ scope.row.data.尺寸检验_缺陷_产品同心度_比例 }}</span></template>
</el-table-column>
<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>{{ scope.row.data.尺寸检验_缺陷_圆度_比例 }}</span></template>
</el-table-column>
<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>{{ scope.row.data['尺寸检验_缺陷_产品外径大(返修)'] }}</span></template>
</el-table-column>
<el-table-column label="黑圈缺口" class-name="colorheader1">
<template #default="scope"><span>{{ scope.row.data.尺寸检验_缺陷_黑圈缺口 }}</span></template>
</el-table-column>
<el-table-column label="外径发货片(B)" 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>{{ scope.row.data.尺寸检验_缺陷_前道崩 }}</span></template>
</el-table-column>
<el-table-column label="合格数" class-name="colorheader1">
<template #default="scope"><span>{{ scope.row.data.尺寸检验_count_ok_full }}</span></template>
</el-table-column>
<el-table-column label="合格率(%)" class-name="colorheader1">
<template #default="scope"><span>{{ scope.row.data.尺寸检验_完全合格率 }}</span></template>
</el-table-column>
<el-table-column label="准合格(B)" class-name="colorheader1">
<template #default="scope"><span>{{ scope.row.data['尺寸检验_缺陷_准合格(B)'] }}</span></template>
</el-table-column>
<el-table-column label="圆度准合格" class-name="colorheader1">
<template #default="scope"><span>{{ scope.row.data['尺寸检验_缺陷_圆准(B)'] }}</span></template>
</el-table-column>
<el-table-column label="总合格数" class-name="colorheader1">
<template #default="scope"><span>{{ scope.row.data.尺寸检验_count_ok }}</span></template>
</el-table-column>
<el-table-column label="总合格率(%)" class-name="colorheader1">
<template #default="scope"><span>{{ 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" width="90">
<template #default="scope"><span>{{ scope.row.data.外观检验_日期 }}</span></template>
</el-table-column>
<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>{{ scope.row.data.外观检验_count_real }}</span></template>
</el-table-column>
<el-table-column label="合格数" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data.外观检验_count_ok_full }}</span></template>
</el-table-column>
<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>{{ scope.row.data['外观检验_缺陷_划麻(返修)'] }}</span></template>
</el-table-column>
<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>{{ scope.row.data['外观检验_缺陷_脏(返修) ']}}</span></template>
</el-table-column>
<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>{{ scope.row.data.外观检验_缺陷_气泡 }}</span></template>
</el-table-column>
<el-table-column label="比例(%)" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data.外观检验_缺陷_气泡_比例 }}</span></template>
</el-table-column>
<el-table-column label="浅气泡(B)" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data['外观检验_缺陷_浅气泡(B)'] }}</span></template>
</el-table-column>
<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>{{ scope.row.data.外观检验_缺陷_黑圈缺口 }}</span></template>
</el-table-column>
<el-table-column label="重水纹" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data.外观检验_缺陷_重水纹 }}</span></template>
</el-table-column>
<el-table-column label="浅水纹(B)" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data['外观检验_缺陷_浅水纹(B)'] }}</span></template>
</el-table-column>
<el-table-column label="大崩" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data.外观检验_缺陷_大崩 }}</span></template>
</el-table-column>
<el-table-column label="小崩边(B)" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data['外观检验_缺陷_小崩边(B)'] }}</span></template>
</el-table-column>
<el-table-column label="比例(%)" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data['外观检验_缺陷_小崩边(B)_比例'] }}</span></template>
</el-table-column>
<el-table-column label="棕点" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data.外观检验_缺陷_棕点 }}</span></template>
</el-table-column>
<el-table-column label="浅划麻(B)" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data['外观检验_缺陷_浅划麻(B)'] }}</span></template>
</el-table-column>
<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>{{ scope.row.data.外观检验_缺陷_倒角 }}</span></template>
</el-table-column>
<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>{{ scope.row.data.外观检验_缺陷_蓝圈 }}</span></template>
</el-table-column>
<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>{{ scope.row.data.外观检验_缺陷_破损 }}</span></template>
</el-table-column>
<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>{{ scope.row.data.外观检验_缺陷_漏光 }}</span></template>
</el-table-column>
<el-table-column label="返修数" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data.外观检验_返修_count_real }}</span></template>
</el-table-column>
<el-table-column label="合格数" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data.外观检验_返修_count_ok_full }}</span></template>
</el-table-column>
</el-table-column>
<el-table-column label="返修" align="center" class-name="colorheader3">
<el-table-column label="日期" class-name="colorheader3" width="90">
<template #default="scope"><span>{{ scope.row.data.外观检验_返修_日期 }}</span></template>
</el-table-column>
<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>{{ scope.row.data.外观检验_返修_count_real }}</span></template>
</el-table-column>
<el-table-column label="合格数" class-name="colorheader3">
<template #default="scope"><span>{{ scope.row.data.外观检验_返修_count_ok_full }}</span></template>
</el-table-column>
<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>{{ scope.row.data.外观检验_返修_缺陷_气泡 }}</span></template>
</el-table-column>
<el-table-column label="浅气泡(B)" class-name="colorheader3">
<template #default="scope"><span>{{ scope.row.data['外观检验_返修_缺陷_浅气泡(B)'] }}</span></template>
</el-table-column>
<el-table-column label="浅划麻(B)" class-name="colorheader3">
<template #default="scope"><span>{{ scope.row.data['外观检验_返修_缺陷_浅划麻(B)'] }}</span></template>
</el-table-column>
<el-table-column label="双面划麻" class-name="colorheader3">
<template #default="scope"><span>{{ scope.row.data.外观检验_返修_缺陷_双面划麻 }}</span></template>
</el-table-column>
<el-table-column label="浅水纹(B)" class-name="colorheader3">
<template #default="scope"><span>{{ scope.row.data['外观检验_返修_缺陷_浅水纹(B)'] }}</span></template>
</el-table-column>
<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>{{ scope.row.data.外观检验_返修_缺陷_大崩 }}</span></template>
</el-table-column>
<el-table-column label="小崩边(B)" class-name="colorheader3">
<template #default="scope"><span>{{ scope.row.data['外观检验_返修_缺陷_小崩边(B)'] }}</span></template>
</el-table-column>
<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>{{ scope.row.data.外观检验_返修_缺陷_棕点 }}</span></template>
</el-table-column>
<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>{{ scope.row.data.外观检验_返修_缺陷_黑圈缺口 }}</span></template>
</el-table-column>
<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>{{ scope.row.data.外观检验_返修_缺陷_尺寸小 }}</span></template>
</el-table-column>
</el-table-column>
<el-table-column label="外观总合格数" class-name="colorheader4">
<template #default="scope">
<span v-if="scope.row.data.外观检验_完全总合格数==0&&scope.row.data.外观检验_count_ok_full">{{ scope.row.data.外观检验_count_ok_full }}</span>
<span v-else>{{ scope.row.data.外观检验_完全总合格数 }}</span>
</template>
</el-table-column>
<el-table-column label="检验数" prop="检验数"></el-table-column>
<el-table-column label="合格数" prop="合格数量"></el-table-column>
<el-table-column label="不合格数" align="center" v-if="query.process_name == '一次超洗'">
<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-column label="黑圈外径圆度" prop="黑圈外径圆度"></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-column label="厚度" prop="厚度"></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-column label="外观总合格率(%)" class-name="colorheader5">
<template #default="scope">
<span v-if="scope.row.data.外观检验_完全总合格率">{{ scope.row.data.外观检验_完全总合格率 }}</span>
<span v-else-if="scope.row.data.外观检验_完全合格率">{{ scope.row.data.外观检验_完全合格率 }}</span>
<span v-else>0</span>
</template>
</el-table-column>
<el-table-column label="不合格数" align="center" v-else>
<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-column label="崩边" prop="崩边"></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-column label="麻点" prop="麻点"></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-column label="蓝圈" prop="蓝圈"></el-table-column>
<el-table-column label="合计" prop="不合格数"></el-table-column>
<el-table-column label="直通良率(%)" class-name="colorheader6">
<template #default="scope">
<span v-if="scope.row.data.外观检验_完全直通合格率">{{ scope.row.data.外观检验_完全直通合格率 }}</span>
<span v-else-if="scope.row.data.尺寸检验_合格率">{{ scope.row.data.尺寸检验_合格率 }}</span>
<span v-else-if="scope.row.data.外观检验_完全总合格率">{{ scope.row.data.外观检验_完全总合格率 }}</span>
<span v-else>0</span>
</template>
</el-table-column>
</scTable>
</el-table>
</el-main>
<el-footer>
<el-pagination
background
:small="true"
:total="dataTotal"
layout="total, sizes, prev, pager, next, jumper"
:page-size="params.page_size"
:page-sizes="[20, 50, 100, 200]"
:current-page="params.page"
@current-change="getList"
@update:page-size="getList2"
></el-pagination>
</el-footer>
</el-container>
</template>
<script>
export default {
name: "chart",
data() {
return {
query:{
fw_type:'prod',
end_date:'',
start_date:'',
process_name:'一次超洗',
group_by_dept: ", dept.id",
group_by_user: ", suser.id",
group_by_shift: ", shift.id",
select_col_dept: ", dept.name as 部门",
select_col_user: ", suser.name as 检验人",
select_col_shift: ", shift.name as 班次"
batch:'',
cc_data_start:'',
cc_data_end:'',
wg_data_start:'',
wg_data_end:'',
fx_data_start:'',
fx_data_end:'',
},
currentDate: "",
tableData: [],
options:[
{name:'外观',value:'一次超洗'},
{name:'尺寸',value:'二次超洗'}
],
userOptions:[],
shiftOptions:[],
params: {
page:1,
page_size:20,
ordering:"-last_time",
querys:[
[{field:"data__has_key",compare:"",value:"尺寸检验_日期"}],
[{field:"data__has_key",compare:"",value:"外观检验_日期"}],
[{field:"data__has_key",compare:"",value:"外观检验_返修_日期"}]
],
},
apiObj: this.$API.wpm.batchst,
dataTotal:0,
options:[],
tableData:[],
};
},
mounted() {
let that = this;
let date = new Date();
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
month = month < 10 ? "0" + month : month;
day = day < 10 ? "0" + day : day;
let queryDate = year + "-" + month + "-" + day;
that.query.start_date = that.query.end_date = that.currentDate = queryDate;
this.getData();
this.getUsers();
this.getShifts();
that.getList();
},
methods: {
getUsers(){
getList(val){
let that = this;
this.$API.system.user.list.req({ page: 0, posts__code__contains: "check" }).then((res) => {
that.userOptions = res;
that.params.page = val?val:1;
that.$API.wpm.batchstquery.req(that.params).then((res) => {
if (res.count > 0) {
that.tableData = res.results;
that.dataTotal = res.count;
}else{
that.tableData = [];
that.dataTotal = 0;
}
});
},
getShifts(){
getList2(val){
let that = this;
that.$API.mtm.shift.list.req({ page: 0 }).then((res) => {
that.shiftOptions = res;
});
that.params.page = 1;
that.params.page_size = val;
that.params.querys=[
[{field:"data__has_key",compare:"",value:"尺寸检验_日期"}],
[{field:"data__has_key",compare:"",value:"外观检验_日期"}],
[{field:"data__has_key",compare:"",value:"外观检验_返修_日期"}]
];
that.getList(1);
},
getData() {
handleQuery(){
let that = this;
let obj = {};
obj.query = that.query;
that.tableData = [];
that.$API.bi.dataset.exec.req('ftestDay', obj).then((res) => {
that.tableData = res.data2.ds0;
console.log(that.tableData);
});
},
processChange(){
this.handleQuery();
},
handleQuery() {
if(this.query.start_date){
this.query.end_date = this.query.start_date;
}else{
this.query.start_date = this.query.end_date = this.currentDate;
that.params.page = 1;
that.params.querys=[];
let arr1 = [{field:"data__has_key",compare:"",value:"尺寸检验_日期"}],
arr2 = [{field:"data__has_key",compare:"",value:"外观检验_日期"}],
arr3 = [{field:"data__has_key",compare:"",value:"外观检验_返修_日期"}];
for(let key in that.query){
if(that.query[key] != ""&&that.query[key] != null&&that.query[key] != undefined){
let obj = {};
obj.value = that.query[key];
if(key=='batch'){
obj.field = "batch";
obj.compare = "contains";
arr1.push(obj);
arr2.push(obj);
arr3.push(obj);
}else if(key=='cc_data_start'){
obj.compare = "gte";
obj.field = "data__尺寸检验_日期";
arr1.push(obj);
}else if(key=='cc_data_end'){
obj.compare = "lte";
obj.field = "data__尺寸检验_日期";
arr1.push(obj);
}else if(key=='wg_data_start'){
obj.compare = "gte";
obj.field = "data__外观检验_日期";
arr2.push(obj);
}else if(key=='wg_data_end'){
obj.compare = "lte";
obj.field = "data__外观检验_日期";
arr2.push(obj);
}else if(key=='fx_data_start'){
obj.compare = "gte";
obj.field = "data__返修_日期";
arr3.push(obj);
}else if(key=='fx_data_end'){
obj.compare = "lte";
obj.field = "data__返修_日期";
arr3.push(obj);
}
}
}
this.getData();
if((that.query.cc_data_start != ""&&that.query.cc_data_start != null)||(that.query.cc_data_end != ""&&that.query.cc_data_end != null)){
console.log('arr1');
console.log(arr1);
that.params.querys.push(arr1);
}
if((that.query.wg_data_start != ""&&that.query.wg_data_start != null)||(that.query.wg_data_end != ""&&that.query.wg_data_end != null)){
console.log('arr2');
console.log(arr2);
that.params.querys.push(arr2);
}
if((that.query.fx_data_start != ""&&that.query.fx_data_start != null)||(that.query.fx_data_end != ""&&that.query.fx_data_end != null)){
console.log('arr3');
console.log(arr3);
that.params.querys.push(arr3);
}
if((that.query.cc_data_start == ""||that.query.cc_data_start == null)&&(that.query.cc_data_end == ""||that.query.cc_data_end== null)&&
(that.query.wg_data_start == ""||that.query.wg_data_start == null)&&(that.query.wg_data_end == ""||that.query.wg_data_end == null)&&
(that.query.fx_data_start == ""||that.query.fx_data_start == null)&&(that.query.fx_data_end == ""||that.query.fx_data_end == null)){
that.params.querys.push(arr1,arr2,arr3);
}
this.getList();
},
getSummaries({ columns, data }) {
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = "合计";
return;
}
let propert = '';
//
if(index == 3&&column.label=='检验数'){
propert = '尺寸检验_count_real';
}else if(column.label=='黑圈内径'){
propert = '尺寸检验_缺陷_黑圈内径';
}else if(column.label=='黑圈外径'){
propert = '尺寸检验_缺陷_黑圈外径';
}else if(column.label=='产品同心度'){
propert = '尺寸检验_缺陷_产品同心度';
}else if(column.label=='圆度'){
propert = '尺寸检验_缺陷_圆度';
}else if(column.label=='产品外径小'){
propert = '尺寸检验_缺陷_产品外径小';
}else if(column.label=='产品外径大(返修)'){
propert = '尺寸检验_缺陷_产品外径大(返修)';
}else if(index == 14&&column.label=='黑圈缺口'){
propert = '尺寸检验_缺陷_黑圈缺口';
}else if(column.label=='外径发货片(B)'){
propert = '尺寸检验_缺陷_外径发货片(B)';
}else if(column.label=='前道崩'){
propert = '尺寸检验_缺陷_前道崩';
}else if(index==17&&column.label=='合格数'){
propert = '尺寸检验_count_ok_full';
}else if(column.label=='准合格(B)'){
propert = '尺寸检验_缺陷_准合格(B)';
}else if(column.label=='圆度准合格'){
propert = '尺寸检验_缺陷_圆准(B)';
}else if(column.label=='总合格数'){
propert = '尺寸检验_count_ok';
}else if(index == 25&&column.label=='检验数'){
propert = '外观检验_count_real';
}else if(index==26&&column.label=='合格数'){
propert = '外观检验_count_ok_full';
}else if(index==28&&column.label=='划麻(返修)'){
propert = '外观检验_缺陷_划麻(返修)';
}else if(index==30&&column.label=='脏(返修)'){
propert = '外观检验_缺陷_脏(返修)';
}else if(index==32&&column.label=='气泡'){
propert = '外观检验_缺陷_气泡';
}else if(index==34&&column.label=='浅气泡(B)'){
propert = '外观检验_缺陷_浅气泡(B)';
}else if(index==35&&column.label=='黑圈变形'){
propert = '外观检验_缺陷_黑圈变形';
}else if(index==36&&column.label=='黑圈缺口'){
propert = '外观检验_缺陷_黑圈缺口';
}else if(index==37&&column.label=='重水纹'){
propert = '外观检验_缺陷_重水纹';
}else if(index==38&&column.label=='浅水纹(B)'){
propert = '外观检验_缺陷_浅水纹(B)';
}else if(index==39&&column.label=='大崩'){
propert = '外观检验_缺陷_大崩';
}else if(index==40&&column.label=='小崩边(B)'){
propert = '外观检验_缺陷_小崩边(B)';
}else if(index==42&&column.label=='棕点'){
propert = '外观检验_缺陷_棕点';
}else if(index==43&&column.label=='浅划麻(B)'){
propert = '外观检验_缺陷_浅划麻(B)';
}else if(index==44&&column.label=='双面划麻'){
propert = '外观检验_缺陷_双面划麻';
}else if(index==45&&column.label=='倒角'){
propert = '外观检验_缺陷_倒角';
}else if(index==46&&column.label=='棕圈'){
propert = '外观检验_缺陷_棕圈';
}else if(index==47&&column.label=='蓝圈'){
propert = '外观检验_缺陷_蓝圈';
}else if(index==48&&column.label=='尺寸小'){
propert = '外观检验_缺陷_尺寸小';
}else if(index==49&&column.label=='破损'){
propert = '外观检验_缺陷_破损';
}else if(index==50&&column.label=='发白'){
propert = '外观检验_缺陷_发白';
}else if(index==51&&column.label=='漏光'){
propert = '外观检验_缺陷_漏光';
}else if(index == 54&&column.label=='返修数'){
propert = '外观检验_返修_count_real';
}else if(index==55&&column.label=='合格数'){
propert = '外观检验_返修_count_ok_full';
}else if(index==56&&column.label=='黑圈变形'){
propert = '外观检验_返修_缺陷_黑圈变形';
}else if(index==57&&column.label=='气泡'){
propert = '外观检验_返修_缺陷_气泡';
}else if(index==58&&column.label=='浅气泡(B)'){
propert = '外观检验_返修_缺陷_浅气泡(B)';
}else if(index==59&&column.label=='浅划麻(B)'){
propert = '外观检验_返修_缺陷_浅划麻(B)';
}else if(index==60&&column.label=='双面划麻'){
propert = '外观检验_返修_缺陷_双面划麻';
}else if(index==61&&column.label=='浅水纹(B)'){
propert = '外观检验_返修_缺陷_浅水纹(B)';
}else if(index==62&&column.label=='重水纹'){
propert = '外观检验_返修_缺陷_重水纹';
}else if(index==63&&column.label=='大崩'){
propert = '外观检验_返修_缺陷_大崩';
}else if(index==64&&column.label=='小崩边(B)'){
propert = '外观检验_返修_缺陷_小崩边(B)';
}else if(index==65&&column.label=='倒角'){
propert = '外观检验_返修_缺陷_倒角';
}else if(index==66&&column.label=='棕点'){
propert = '外观检验_返修_缺陷_棕点';
}else if(index==67&&column.label=='漏光'){
propert = '外观检验_返修_缺陷_漏光';
}else if(index==68&&column.label=='黑圈缺口'){
propert = '外观检验_返修_缺陷_黑圈缺口';
}else if(index==69&&column.label=='破损'){
propert = '外观检验_返修_缺陷_破损';
}else if(index==70&&column.label=='尺寸小'){
propert = '外观检验_返修_缺陷_尺寸小';
}else if(column.label=='外观总合格数'){
propert = '外观检验_完全总合格数';
}
if (propert!=='') {
const values = data.map((item) =>
Number(item.data[propert])
);
if (!values.every((value) => Number.isNaN(value))) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
let sum = Number(Number(prev) + Number(curr));
if (!isNaN(value)) {
return sum;
} else {
return prev;
}
}, 0);
}
}
if(index==5||index==7||index==9||index==11||index==18||index==22){
if(sums[index-1]){
sums[index] = ((sums[index-1]/sums[3])*100).toFixed(4);
}
}
if(index==27||index==29||index==31||index==33||index==41){
if(sums[index-1]){
sums[index] = ((sums[index-1]/sums[25])*100).toFixed(4);
}
}
if(index==71){
let sum = 0;
if(sums[26]){
sum += sums[26];
}
if(sums[55]){
sum += sums[55];
}
sums[index] = sum;
}
if(index==72){
if(sums[71]&&sums[25]){
sums[index] = ((sums[71]/sums[25])*100).toFixed(2);
}
}
if(index==73){
if(sums[72]&&sums[22]){
sums[index] = ((sums[72]*sums[22])/100).toFixed(2);
}
}
});
return sums;
},
handleExport() {
this.exportLoading = true;
this.$XLSX("#exportDiv", "成品检验统计");
this.$XLSX("#exportDiv", "过程检验统计");
this.exportLoading = false;
},
},
@ -190,10 +645,4 @@ export default {
</script>
<style scoped>
.tables {
position: absolute;
top: 4px;
right: 6px;
z-index: 10;
}
</style>

View File

@ -0,0 +1,551 @@
<template>
<el-container>
<el-header>
<div class="right-panel">
<el-input v-model="query.batch"
placeholder="批次号"
clearable
style="width: 200px;"
></el-input>
<el-date-picker
v-model="query.cc_data_start"
type="date"
placeholder="尺寸检验开始日期"
value-format="YYYY-MM-DD"
clearable
style="width: 160px; margin: 5px"
></el-date-picker>
<el-date-picker
v-model="query.cc_data_end"
type="date"
placeholder="尺寸检验结束日期"
value-format="YYYY-MM-DD"
clearable
style="width: 160px; margin:0"
></el-date-picker>
<el-date-picker
v-model="query.wg_data_start"
type="date"
placeholder="外观检验开始日期"
value-format="YYYY-MM-DD"
clearable
style="width: 160px; margin: 5px"
></el-date-picker>
<el-date-picker
v-model="query.wg_data_end"
type="date"
placeholder="外观检验结束日期"
value-format="YYYY-MM-DD"
clearable
style="width: 160px; margin:0"
></el-date-picker>
<el-date-picker
v-model="query.fx_data_start"
type="date"
placeholder="返修开始日期"
value-format="YYYY-MM-DD"
clearable
style="width: 160px; margin: 5px"
></el-date-picker>
<el-date-picker
v-model="query.fx_data_end"
type="date"
placeholder="返修结束日期"
value-format="YYYY-MM-DD"
clearable
style="width: 160px; margin:0"
></el-date-picker>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
></el-button>
<el-button
@click="handleExport"
class="tables"
type="primary"
>导出</el-button>
</div>
</el-header>
<el-main class="nopadding">
<el-table
ref="table"
:data="tableData"
id="exportDiv"
stripe
style="height: 100%;"
:summary-method="getSummaries"
show-summary
>
<el-table-column label="批次号" prop="batch" min-width="240" fixed="left">
<template #default="scope"><span>{{ scope.row.data.批次号 }}</span></template>
</el-table-column>
<el-table-column label="尺寸检验" align="center" class-name="colorheader1">
<el-table-column label="日期" class-name="colorheader1" width="90">
<template #default="scope"><span>{{ scope.row.data.尺寸检验_日期 }}</span></template>
</el-table-column>
<el-table-column label="检验数" class-name="colorheader1">
<template #default="scope"><span>{{ scope.row.data.尺寸检验_count_real }}</span></template>
</el-table-column>
<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>{{ scope.row.data.尺寸检验_缺陷_黑圈内径_比例 }}</span></template>
</el-table-column>
<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>{{ scope.row.data.尺寸检验_缺陷_黑圈外径_比例 }}</span></template>
</el-table-column>
<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>{{ scope.row.data.尺寸检验_缺陷_产品同心度_比例 }}</span></template>
</el-table-column>
<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>{{ scope.row.data.尺寸检验_缺陷_圆度_比例 }}</span></template>
</el-table-column>
<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>{{ scope.row.data['尺寸检验_缺陷_产品外径大(返修)'] }}</span></template>
</el-table-column>
<el-table-column label="黑圈缺口" class-name="colorheader1">
<template #default="scope"><span>{{ scope.row.data.尺寸检验_缺陷_黑圈缺口 }}</span></template>
</el-table-column>
<el-table-column label="外径发货片(B)" 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>{{ scope.row.data.尺寸检验_缺陷_前道崩 }}</span></template>
</el-table-column>
<el-table-column label="合格数" class-name="colorheader1">
<template #default="scope"><span>{{ scope.row.data.尺寸检验_count_ok_full }}</span></template>
</el-table-column>
<el-table-column label="合格率(%)" class-name="colorheader1">
<template #default="scope"><span>{{ scope.row.data.尺寸检验_完全合格率 }}</span></template>
</el-table-column>
<el-table-column label="准合格(B)" class-name="colorheader1">
<template #default="scope"><span>{{ scope.row.data['尺寸检验_缺陷_准合格(B)'] }}</span></template>
</el-table-column>
<el-table-column label="圆度准合格" class-name="colorheader1">
<template #default="scope"><span>{{ scope.row.data['尺寸检验_缺陷_圆准(B)'] }}</span></template>
</el-table-column>
<el-table-column label="总合格数" class-name="colorheader1">
<template #default="scope"><span>{{ scope.row.data.尺寸检验_count_ok }}</span></template>
</el-table-column>
<el-table-column label="总合格率(%)" class-name="colorheader1">
<template #default="scope"><span>{{ 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" width="90">
<template #default="scope"><span>{{ scope.row.data.外观检验_日期 }}</span></template>
</el-table-column>
<el-table-column label="检验数" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data.外观检验_count_real }}</span></template>
</el-table-column>
<el-table-column label="合格数" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data.外观检验_count_ok_full }}</span></template>
</el-table-column>
<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>{{ scope.row.data['外观检验_缺陷_划麻(返修)'] }}</span></template>
</el-table-column>
<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>{{ scope.row.data['外观检验_缺陷_脏(返修) ']}}</span></template>
</el-table-column>
<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>{{ scope.row.data.外观检验_缺陷_气泡 }}</span></template>
</el-table-column>
<el-table-column label="比例(%)" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data.外观检验_缺陷_气泡_比例 }}</span></template>
</el-table-column>
<el-table-column label="浅气泡(B)" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data['外观检验_缺陷_浅气泡(B)'] }}</span></template>
</el-table-column>
<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>{{ scope.row.data.外观检验_缺陷_黑圈缺口 }}</span></template>
</el-table-column>
<el-table-column label="重水纹" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data.外观检验_缺陷_重水纹 }}</span></template>
</el-table-column>
<el-table-column label="浅水纹(B)" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data['外观检验_缺陷_浅水纹(B)'] }}</span></template>
</el-table-column>
<el-table-column label="大崩" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data.外观检验_缺陷_大崩 }}</span></template>
</el-table-column>
<el-table-column label="小崩边(B)" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data['外观检验_缺陷_小崩边(B)'] }}</span></template>
</el-table-column>
<el-table-column label="比例(%)" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data['外观检验_缺陷_小崩边(B)_比例'] }}</span></template>
</el-table-column>
<el-table-column label="棕点" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data.外观检验_缺陷_棕点 }}</span></template>
</el-table-column>
<el-table-column label="浅划麻(B)" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data['外观检验_缺陷_浅划麻(B)'] }}</span></template>
</el-table-column>
<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>{{ scope.row.data.外观检验_缺陷_倒角 }}</span></template>
</el-table-column>
<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>{{ scope.row.data.外观检验_缺陷_蓝圈 }}</span></template>
</el-table-column>
<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>{{ scope.row.data.外观检验_缺陷_破损 }}</span></template>
</el-table-column>
<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>{{ scope.row.data.外观检验_缺陷_漏光 }}</span></template>
</el-table-column>
<el-table-column label="返修数" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data.外观检验_返修_count_real }}</span></template>
</el-table-column>
<el-table-column label="合格数" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data.外观检验_返修_count_ok_full }}</span></template>
</el-table-column>
</el-table-column>
<el-table-column label="外观总合格数" class-name="colorheader3">
<template #default="scope">
<span v-if="scope.row.data.外观检验_完全总合格数==0&&scope.row.data.外观检验_count_ok_full">{{ scope.row.data.外观检验_count_ok_full }}</span>
<span v-else>{{ 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>
<span v-else-if="scope.row.data.外观检验_完全合格率">{{ scope.row.data.外观检验_完全合格率 }}</span>
<span v-else>0</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>
<span v-else-if="scope.row.data.尺寸检验_合格率">{{ scope.row.data.尺寸检验_合格率 }}</span>
<span v-else-if="scope.row.data.外观检验_完全总合格率">{{ scope.row.data.外观检验_完全总合格率 }}</span>
<span v-else>0</span>
</template>
</el-table-column>
</el-table>
</el-main>
<el-footer>
<el-pagination
background
:small="true"
:total="dataTotal"
layout="total, sizes, prev, pager, next, jumper"
:page-size="params.page_size"
:page-sizes="[20, 50, 100, 200]"
:current-page="params.page"
@current-change="getList"
@update:page-size="getList2"
></el-pagination>
</el-footer>
</el-container>
</template>
<script>
export default {
name: "chart",
data() {
return {
query:{
batch:'',
cc_data_start:'',
cc_data_end:'',
wg_data_start:'',
wg_data_end:'',
fx_data_start:'',
fx_data_end:'',
},
params: {
page:1,
page_size:20,
ordering:"-last_time",
querys:[
[{field:"data__has_key",compare:"",value:"尺寸检验_日期"}],
[{field:"data__has_key",compare:"",value:"外观检验_日期"}],
[{field:"data__has_key",compare:"",value:"外观检验_返修_日期"}]
],
},
apiObj: this.$API.wpm.batchst,
dataTotal:0,
options:[],
tableData:[],
};
},
mounted() {
let that = this;
that.getList();
},
methods: {
getList(val){
let that = this;
that.params.page = val?val:1;
that.$API.wpm.batchstquery.req(that.params).then((res) => {
if (res.count > 0) {
that.tableData = res.results;
that.dataTotal = res.count;
}else{
that.tableData = [];
that.dataTotal = 0;
}
});
},
getList2(val){
let that = this;
that.params.page = 1;
that.params.page_size = val;
that.params.querys=[
[{field:"data__has_key",compare:"",value:"尺寸检验_日期"}],
[{field:"data__has_key",compare:"",value:"外观检验_日期"}],
[{field:"data__has_key",compare:"",value:"外观检验_返修_日期"}]
];
that.getList(1);
},
handleQuery(){
let that = this;
that.params.page = 1;
that.params.querys=[];
let arr1 = [{field:"data__has_key",compare:"",value:"尺寸检验_日期"}],
arr2 = [{field:"data__has_key",compare:"",value:"外观检验_日期"}],
arr3 = [{field:"data__has_key",compare:"",value:"外观检验_返修_日期"}];
for(let key in that.query){
if(that.query[key] != ""&&that.query[key] != null&&that.query[key] != undefined){
let obj = {};
obj.value = that.query[key];
if(key=='batch'){
obj.field = "batch";
obj.compare = "contains";
arr1.push(obj);
arr2.push(obj);
arr3.push(obj);
}else if(key=='cc_data_start'){
obj.compare = "gte";
obj.field = "data__尺寸检验_日期";
arr1.push(obj);
}else if(key=='cc_data_end'){
obj.compare = "lte";
obj.field = "data__尺寸检验_日期";
arr1.push(obj);
}else if(key=='wg_data_start'){
obj.compare = "gte";
obj.field = "data__外观检验_日期";
arr2.push(obj);
}else if(key=='wg_data_end'){
obj.compare = "lte";
obj.field = "data__外观检验_日期";
arr2.push(obj);
}else if(key=='fx_data_start'){
obj.compare = "gte";
obj.field = "data__返修_日期";
arr3.push(obj);
}else if(key=='fx_data_end'){
obj.compare = "lte";
obj.field = "data__返修_日期";
arr3.push(obj);
}
}
}
if((that.query.cc_data_start != ""&&that.query.cc_data_start != null)||(that.query.cc_data_end != ""&&that.query.cc_data_end != null)){
that.params.querys.push(arr1);
}
if((that.query.wg_data_start != ""&&that.query.wg_data_start != null)||(that.query.wg_data_end != ""&&that.query.wg_data_end != null)){
that.params.querys.push(arr2);
}
if((that.query.fx_data_start != ""&&that.query.fx_data_start != null)||(that.query.fx_data_end != ""&&that.query.fx_data_end != null)){
that.params.querys.push(arr3);
}
if((that.query.cc_data_start == ""||that.query.cc_data_start == null)&&(that.query.cc_data_end == ""||that.query.cc_data_end== null)&&
(that.query.wg_data_start == ""||that.query.wg_data_start == null)&&(that.query.wg_data_end == ""||that.query.wg_data_end == null)&&
(that.query.fx_data_start == ""||that.query.fx_data_start == null)&&(that.query.fx_data_end == ""||that.query.fx_data_end == null)){
that.params.querys.push(arr1,arr2,arr3);
}
this.getList();
},
getSummaries({ columns, data }) {
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = "合计";
return;
}
let propert = '';
//
if(index == 2&&column.label=='检验数'){
propert = '尺寸检验_count_real';
}else if(column.label=='黑圈内径'){
propert = '尺寸检验_缺陷_黑圈内径';
}else if(column.label=='黑圈外径'){
propert = '尺寸检验_缺陷_黑圈外径';
}else if(column.label=='产品同心度'){
propert = '尺寸检验_缺陷_产品同心度';
}else if(column.label=='圆度'){
propert = '尺寸检验_缺陷_圆度';
}else if(column.label=='产品外径小'){
propert = '尺寸检验_缺陷_产品外径小';
}else if(column.label=='产品外径大(返修)'){
propert = '尺寸检验_缺陷_产品外径大(返修)';
}else if(index == 14&&column.label=='黑圈缺口'){
propert = '尺寸检验_缺陷_黑圈缺口';
}else if(column.label=='外径发货片(B)'){
propert = '尺寸检验_缺陷_外径发货片(B)';
}else if(column.label=='前道崩'){
propert = '尺寸检验_缺陷_前道崩';
}else if(index==16&&column.label=='合格数'){
propert = '尺寸检验_count_ok_full';
}else if(column.label=='准合格(B)'){
propert = '尺寸检验_缺陷_准合格(B)';
}else if(column.label=='圆度准合格'){
propert = '尺寸检验_缺陷_圆准(B)';
}else if(column.label=='总合格数'){
propert = '尺寸检验_count_ok';
}else if(index == 23&&column.label=='检验数'){
propert = '外观检验_count_real';
}else if(index==24&&column.label=='合格数'){
propert = '外观检验_count_ok_full';
}else if(index==26&&column.label=='划麻(返修)'){
propert = '外观检验_缺陷_划麻(返修)';
}else if(index==28&&column.label=='脏(返修)'){
propert = '外观检验_缺陷_脏(返修)';
}else if(index==30&&column.label=='气泡'){
propert = '外观检验_缺陷_气泡';
}else if(index==32&&column.label=='浅气泡(B)'){
propert = '外观检验_缺陷_浅气泡(B)';
}else if(index==33&&column.label=='黑圈变形'){
propert = '外观检验_缺陷_黑圈变形';
}else if(index==34&&column.label=='黑圈缺口'){
propert = '外观检验_缺陷_黑圈缺口';
}else if(index==35&&column.label=='重水纹'){
propert = '外观检验_缺陷_重水纹';
}else if(index==36&&column.label=='浅水纹(B)'){
propert = '外观检验_缺陷_浅水纹(B)';
}else if(index==37&&column.label=='大崩'){
propert = '外观检验_缺陷_大崩';
}else if(index==38&&column.label=='小崩边(B)'){
propert = '外观检验_缺陷_小崩边(B)';
}else if(index==40&&column.label=='棕点'){
propert = '外观检验_缺陷_棕点';
}else if(index==41&&column.label=='浅划麻(B)'){
propert = '外观检验_缺陷_浅划麻(B)';
}else if(index==42&&column.label=='双面划麻'){
propert = '外观检验_缺陷_双面划麻';
}else if(index==43&&column.label=='倒角'){
propert = '外观检验_缺陷_倒角';
}else if(index==44&&column.label=='棕圈'){
propert = '外观检验_缺陷_棕圈';
}else if(index==45&&column.label=='蓝圈'){
propert = '外观检验_缺陷_蓝圈';
}else if(index==46&&column.label=='尺寸小'){
propert = '外观检验_缺陷_尺寸小';
}else if(index==47&&column.label=='破损'){
propert = '外观检验_缺陷_破损';
}else if(index==48&&column.label=='发白'){
propert = '外观检验_缺陷_发白';
}else if(index==49&&column.label=='漏光'){
propert = '外观检验_缺陷_漏光';
}else if(index == 50&&column.label=='返修数'){
propert = '外观检验_返修_count_real';
}else if(index==51&&column.label=='合格数'){
propert = '外观检验_返修_count_ok_full';
}else if(column.label=='外观总合格数'){
propert = '外观检验_完全总合格数';
}
if (propert!=='') {
const values = data.map((item) =>
Number(item.data[propert])
);
if (!values.every((value) => Number.isNaN(value))) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
let sum = Number(Number(prev) + Number(curr));
if (!isNaN(value)) {
return sum;
} else {
return prev;
}
}, 0);
}
}
if(index==4||index==6||index==8||index==10||index==17||index==21){
if(sums[index-1]){
sums[index] = ((sums[index-1]/sums[2])*100).toFixed(4);
}else{
sums[index] = null;
}
}
if(index==25||index==27||index==29||index==31||index==39){
if(sums[index-1]){
sums[index] = ((sums[index-1]/sums[23])*100).toFixed(4);
}else{
sums[index] = null;
}
}
if(index==52){
let sum = 0;
if(sums[24]){
sum += sums[24];
}
if(sums[51]){
sum += sums[51];
}
sums[index] = sum;
}
if(index==53){
if(sums[52]&&sums[23]){
sums[index] = ((sums[52]/sums[23])*100).toFixed(2);
}
}
if(index==54){
if(sums[53]&&sums[21]){
sums[index] = ((sums[53]*sums[21])/100).toFixed(2);
}
}
});
return sums;
},
handleExport() {
this.exportLoading = true;
this.$XLSX("#exportDiv", "过程检验统计");
this.exportLoading = false;
},
},
};
</script>
<style scoped>
</style>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,354 @@
<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>
<el-button
@click="handleExport"
type="primary"
>导出</el-button
>
</div>
</el-header>
<el-main id="elMain">
<el-row :gutter="10">
<el-col >
<el-card shadow="never">
<scEcharts id="bachart1" :option="option"></scEcharts>
</el-card>
</el-col>
<el-col>
<el-card shadow="never" style="position: relative">
<el-table
:data="tableData"
:height="tableHeight"
id="exportDiv"
>
<el-table-column type="index" width="50" />
<el-table-column label="工段" prop="工段">
<!-- :filters="mgroupFilters"
:filter-method="filterMgroup"
filter-placement="bottom-end" -->
</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-column label="不合格数" prop="不合格数">
</el-table-column>
<el-table-column label="合格率(%)" prop="合格率">
<template #default="scope">
<span>{{(scope.row.合格率).toFixed(2)}}%</span>
</template>
</el-table-column>
</el-table>
</el-card>
</el-col>
</el-row>
</el-main>
</el-container>
</template>
<script>
import scEcharts from "@/components/scEcharts";
export default {
name: "chart",
components: {
scEcharts,
},
data() {
return {
tableHeight: 0,
queryType: "月",
queryDate: "",
start_date: "",
end_date: "",
currentYear: "",
currentMonth: "",
typeOptions: ["月", "年"],
option: {
color: ["rgb(64,158,255)", "rgb(54,206,158)", "rgb(254,110,106)", "rgb(250,200,88)"],
title: {
text: "生产数量",
},
grid: {
top: "80px",
},
tooltip: {
trigger: "axis",
},
xAxis: {
type: "category",
data: ['外协白片抛','扫边A','黑化','退火','减薄A','减薄B','平磨','精雕','外协出司检','外协一次抛','磨抛一次抛','外扫','扫边B','倒角','成品抛','一次超洗','尺寸检验','二次超洗','外观检验','三次超洗'],
},
yAxis: [
{
type: 'value',
name: '数量',
axisLine: {
lineStyle: {
color: '#fff',
}
},
axisLabel: {
fontSize: 10,
color: '#fff',
},
},
{
type: "value",
name: "合格率",
position: "right",
alignTicks: true,
offset: 0,
axisLine: {
lineStyle: {
fontSize: 8,
color: "rgb(250,200,88)",
},
},
axisLabel: {
formatter: "{value}",
},
}
],
series: [
{
name:'生产数',
type: "bar",
yAxisIndex: 0,
barWidth: "15px",
label:{
show: true,
position: "top",
formatter: "{c}",
color: "rgb(64,158,255)",
},
itemStyle: {
borderRadius: [5, 5, 1, 1],
},
data:[],
},
{
name:'合格数',
type: "bar",
yAxisIndex: 0,
barWidth: "15px",
label:{
show: true,
position: "right",
formatter: "{c}",
color: "rgb(54,206,158)",
},
itemStyle: {
borderRadius: [5, 5, 1, 1],
},
data:[],
},
{
name:'不合格数',
type: "bar",
yAxisIndex: 0,
barWidth: "15px",
label:{
show: true,
position: "right",
formatter: "{c}",
color: "rgb(254,110,106)",
},
itemStyle: {
borderRadius: [5, 5, 1, 1],
},
data:[],
},
{
name:'合格率',
type: "line",
yAxisIndex: 1,
label:{
show: true,
position: "top",
formatter: "{c}",
color: "rgb(250,200,88)",
},
data:[],
},
],
},
nameFilters: [],
mgroupFilters: [],
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;
month = month > 9 ? month : "0" + month;
that.start_date = year + "-" + month + "-01";
that.end_date =year + "-" + month + "-" + days;
that.queryDate = year + "-" + month;
let height = document.getElementById("elMain").clientHeight - 60;
that.tableHeight = height/3*2;
document.getElementById('bachart1').style.height = height/3 + 'px';
that.getData();
},
methods: {
queryTypeChange(value) {
console.log(value);
this.queryDate = "";
},
getData() {
let that = this;
that.nameFilters = [];
that.mgroupFilters = [];
let obj = {
query: {
start_date: that.start_date,
end_date: that.end_date,
mgroup_name: "",
},
raise_exception: true,
};
let xAxisData = [];
that.$API.bi.dataset.exec.req("mlog_okrate", obj).then((res) => {
let data = res.data2.ds0;
that.tableData = data;
data.forEach((item) => {
let indexs = xAxisData.indexOf(item.工段); //
if (indexs> -1) {} else {
indexs = xAxisData.length;
xAxisData.push(item.工段);
that.option.series[0].data[indexs] = item.生产数;
that.option.series[1].data[indexs] = item.合格数;
that.option.series[2].data[indexs] = item.不合格数;
that.option.series[3].data[indexs] = item.合格率.toFixed(2);
}
});
console.log('that.option',that.option);
console.log('xAxisData',xAxisData);
that.xAxisData = xAxisData;
that.option.xAxis.data = xAxisData;
});
},
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.getData();
},
getSummaries({ columns, data }) {
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = "合计";
return;
}
if (index == 3||index == 4||index == 5||index == 6) {
const values = data.map((item) =>
Number(item[column.property])
);
if (!values.every((value) => Number.isNaN(value))) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr); //Number
let sum = Number(
Number(prev) + Number(curr)
).toFixed(2); //toFixed(2)
if (!isNaN(value)) {
return sum;
} else {
return prev;
}
}, 0);
}
}
});
return sums;
},
filterName(value, row) {
return row.物料名 === value;
},
filterMgroup(value, row) {
return row.工段 === value;
},
handleExport() {
this.exportLoading = true;
this.$XLSX("#exportDiv", "工序合格数");
this.exportLoading = false;
},
},
};
</script>
<style scoped>
.tables {
position: absolute;
top: 6px;
left: 4px;
z-index: 10;
}
</style>

View File

@ -0,0 +1,886 @@
<template>
<el-container>
<el-header>
<div class="right-panel">
<el-input v-model="query.batch"
placeholder="批次号"
clearable
style="width: 200px;"
></el-input>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
></el-button>
<el-button
@click="handleExport"
class="tables"
type="primary"
>导出</el-button
>
</div>
</el-header>
<el-main class="nopadding">
<el-table
ref="table"
:data="tableData"
id="exportDiv"
stripe
style="height: 100%;"
>
<el-table-column label="产品编号" prop="batch" min-width="160" fixed="left">
</el-table-column>
<el-table-column label="扫边A" align="center" class-name="colorheader1">
<el-table-column label="1-内置-材料不良" align="center" class-name="colorheader1">
<el-table-column label="气泡" class-name="colorheader1">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.扫边A_缺陷_气泡 }}</span>
</template>
</el-table-column>
<el-table-column label="线痕" class-name="colorheader1">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.扫边A_缺陷_线痕 }}</span>
</template>
</el-table-column>
<el-table-column label="断裂" class-name="colorheader1">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.扫边A_缺陷_断裂 }}</span>
</template>
</el-table-column>
<el-table-column label="划伤" class-name="colorheader1">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.扫边A_缺陷_划伤 }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="2-破损" align="center" class-name="colorheader1">
<el-table-column label="人为磕碰" class-name="colorheader1">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.扫边A_缺陷_人为磕碰 }}</span>
</template>
</el-table-column>
<el-table-column label="设备故障" class-name="colorheader1">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.扫边A_缺陷_设备故障 }}</span>
</template>
</el-table-column>
<el-table-column label="断点" class-name="colorheader1">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.扫边A_缺陷_断点 }}</span>
</template>
</el-table-column>
<el-table-column label="调机破损" class-name="colorheader1">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.扫边A_缺陷_调机破损 }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="3-加工后崩边" align="center" class-name="colorheader1">
<el-table-column label="大崩" class-name="colorheader1">
<template #default="scope"><span>{{ scope.row.data.扫边A_缺陷_崩边 }}</span></template>
</el-table-column>
<el-table-column label="小崩边" class-name="colorheader1">
<template #default="scope"><span>{{ scope.row.data.扫边A_缺陷_小崩边 }}</span></template>
</el-table-column>
</el-table-column>
<el-table-column label="其他" class-name="colorheader1">
<template #default="scope">
<span v-if="scope.row.data">{{ getCountQt(scope.row.data,'扫边A') }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="扫边B" align="center" class-name="colorheader2">
<el-table-column label="1-加工前不良" align="center" class-name="colorheader2">
<el-table-column label="裂纹" class-name="colorheader2">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.扫边B_加工前_缺陷_裂纹 }}</span>
</template>
</el-table-column>
<el-table-column label="断裂" class-name="colorheader2">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.扫边B_加工前_缺陷_断裂 }}</span>
</template>
</el-table-column>
<el-table-column label="划伤" class-name="colorheader2">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.扫边B_加工前_缺陷_划伤 }}</span>
</template>
</el-table-column>
<el-table-column label="抛光未磨透(线痕)" class-name="colorheader2">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.扫边B_加工前_缺陷_线痕 }}</span>
</template>
</el-table-column>
<el-table-column label="麻点" class-name="colorheader2">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.扫边B_加工前_缺陷_麻点 }}</span>
</template>
</el-table-column>
<el-table-column label="其他" class-name="colorheader2">
<template #default="scope">
<span v-if="scope.row.data">{{ getCountQt(scope.row.data,'扫边B前') }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="2-内置" align="center" class-name="colorheader2">
<el-table-column label="黑圈不良" class-name="colorheader2">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.扫边B_缺陷_黑圈不良 }}</span>
</template>
</el-table-column>
<el-table-column label="材料不良" class-name="colorheader2">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.扫边B_缺陷_材料不良 }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="3-破损" align="center" class-name="colorheader2">
<el-table-column label="人为磕碰" class-name="colorheader2">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.扫边B_缺陷_人为磕碰 }}</span>
</template>
</el-table-column>
<el-table-column label="设备故障" class-name="colorheader2">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.扫边B_缺陷_设备故障 }}</span>
</template>
</el-table-column>
<el-table-column label="脏污" class-name="colorheader2">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.扫边B_缺陷_脏污 }}</span>
</template>
</el-table-column>
<el-table-column label="抛光未磨透" class-name="colorheader2">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.扫边B_缺陷_线痕 }}</span>
</template>
</el-table-column>
<el-table-column label="调机破损" class-name="colorheader2">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.扫边B_缺陷_调机破损 }}</span>
</template>
</el-table-column>
<el-table-column label="断裂" class-name="colorheader2">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.扫边B_缺陷_断裂 }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="4-加工后崩边" align="center" class-name="colorheader2">
<el-table-column label="大崩" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data.扫边B_缺陷_崩边 }}</span></template>
</el-table-column>
<el-table-column label="小崩边" class-name="colorheader2">
<template #default="scope"><span>{{ scope.row.data.扫边B_缺陷_小崩边 }}</span></template>
</el-table-column>
</el-table-column>
<el-table-column label="其他" class-name="colorheader2">
<template #default="scope">
<span v-if="scope.row.data">{{ getCountQt(scope.row.data,'扫边B') }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="精雕" align="center" class-name="colorheader3">
<el-table-column label="1-加工前不良" 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>{{ scope.row.data.精雕_加工前_缺陷_小崩边}}</span></template>
</el-table-column>
<el-table-column label="其他" class-name="colorheader3">
<template #default="scope">
<span v-if="scope.row.data">{{ getCountQt(scope.row.data,'精雕前') }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="2-内置" align="center" class-name="colorheader3">
<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 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="3-破损" align="center" class-name="colorheader3">
<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 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="4-其他" class-name="colorheader3">
<template #default="scope">
<span v-if="scope.row.data">{{ getCountQt(scope.row.data,'精雕') }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="倒角" align="center" class-name="colorheader4">
<el-table-column label="1-加工前不良" 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>{{ scope.row.data.倒角_加工前_缺陷_崩边 }}</span></template>
</el-table-column>
<el-table-column label="其他" class-name="colorheader4">
<template #default="scope">
<span v-if="scope.row.data">{{ getCountQt(scope.row.data,'倒角前') }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="2-内置" align="center" class-name="colorheader4">
<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 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="3-破损" align="center" class-name="colorheader4">
<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 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="3-加工后崩边" 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>{{ scope.row.data.倒角_缺陷_小崩边 }}</span></template>
</el-table-column>
</el-table-column>
<el-table-column label="4-其他" class-name="colorheader4">
<template #default="scope">
<span v-if="scope.row.data">{{ getCountQt(scope.row.data,'倒角') }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="减薄A" align="center" class-name="colorheader5">
<el-table-column label="1-内置" align="center" class-name="colorheader5">
<el-table-column label="黑圈不良" class-name="colorheader5">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.减薄A_缺陷_黑圈不良 }}</span>
</template>
</el-table-column>
<el-table-column label="材料不良" class-name="colorheader5">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.减薄A_缺陷_材料不良 }}</span>
</template>
</el-table-column>
<el-table-column label="黑雾" class-name="colorheader5">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.减薄A_缺陷_黑雾 }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="2-破损" align="center" class-name="colorheader5">
<el-table-column label="调机破损" class-name="colorheader5">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.减薄A_缺陷_调机破损 }}</span>
</template>
</el-table-column>
<el-table-column label="人为磕碰" class-name="colorheader5">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.减薄A_缺陷_人为磕碰 }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="2-加工后崩边" align="center" class-name="colorheader5">
<el-table-column label="大崩" class-name="colorheader5">
<template #default="scope"><span>{{ scope.row.data.减薄A_缺陷_崩边 }}</span></template>
</el-table-column>
<el-table-column label="小崩边" class-name="colorheader5">
<template #default="scope"><span>{{ scope.row.data.减薄A_缺陷_小崩边 }}</span></template>
</el-table-column>
</el-table-column>
<el-table-column label="3-其他" class-name="colorheader5">
<template #default="scope">
<span v-if="scope.row.data">{{ getCountQt(scope.row.data,'减薄A') }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="减薄B" align="center" class-name="colorheader6">
<el-table-column label="1-内置" align="center" class-name="colorheader6">
<el-table-column label="黑圈不良" class-name="colorheader6">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.减薄B_缺陷_黑圈不良 }}</span>
</template>
</el-table-column>
<el-table-column label="材料不良" class-name="colorheader6">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.减薄B_缺陷_材料不良 }}</span>
</template>
</el-table-column>
<el-table-column label="黑雾" class-name="colorheader6">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.减薄B_缺陷_黑雾 }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="2-破损" align="center" class-name="colorheader6">
<el-table-column label="调机破损" class-name="colorheader6">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.减薄B_缺陷_调机破损 }}</span>
</template>
</el-table-column>
<el-table-column label="人为" class-name="colorheader6">
<template #default="scope">
<span v-if="scope.row.data">{{ scope.row.data.减薄B_缺陷_人为磕碰磕碰 }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="2-加工后崩边" align="center" class-name="colorheader6">
<el-table-column label="大崩" class-name="colorheader6">
<template #default="scope"><span>{{ scope.row.data.减薄B_缺陷_崩边 }}</span></template>
</el-table-column>
<el-table-column label="小崩边" class-name="colorheader6">
<template #default="scope"><span>{{ scope.row.data.减薄B_缺陷_小崩边 }}</span></template>
</el-table-column>
</el-table-column>
<el-table-column label="3-其他" class-name="colorheader6">
<template #default="scope">
<span v-if="scope.row.data">{{ getCountQt(scope.row.data,'减薄B') }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="磨抛" align="center" class-name="colorheader7">
<el-table-column label="1-加工前不良" 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>{{ scope.row.data.磨抛_缺陷_小崩边 }}</span></template>
</el-table-column>
<el-table-column label="其他" class-name="colorheader7">
<template #default="scope">
<span v-if="scope.row.data">{{ getCountQt(scope.row.data,'磨抛前') }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="2-内置" align="center" class-name="colorheader7">
<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 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="3-破损" align="center" class-name="colorheader7">
<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 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="4-其他" class-name="colorheader7">
<template #default="scope">
<span v-if="scope.row.data">{{ getCountQt(scope.row.data,'磨抛') }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="一次超洗" align="center" class-name="colorheader1">
<el-table-column label="1-加工前不良" 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>{{ scope.row.data.一次超洗_加工前_缺陷_小崩边 }}</span></template>
</el-table-column>
<el-table-column label="其他" class-name="colorheader1">
<template #default="scope">
<span v-if="scope.row.data">{{ getCountQt(scope.row.data,'一次超洗前') }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="2-内置" align="center" class-name="colorheader1">
<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 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="3-破损" align="center" class-name="colorheader1">
<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 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>
<el-table-column label="二次超洗" align="center" class-name="colorheader2">
<el-table-column label="1-加工前不良" 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>{{ scope.row.data.二次超洗_加工前_缺陷_小崩边 }}</span></template>
</el-table-column>
<el-table-column label="其他" class-name="colorheader2">
<template #default="scope">
<span v-if="scope.row.data">{{ getCountQt(scope.row.data,'二次超洗前') }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="2-内置" align="center" class-name="colorheader2">
<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 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="3-破损" align="center" class-name="colorheader2">
<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 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>
</el-table>
</el-main>
<el-footer>
<el-pagination
background
:small="true"
:total="dataTotal"
layout="total, sizes, prev, pager, next, jumper"
:page-size="params.page_size"
:page-sizes="[20, 50, 100, 200]"
:current-page="params.page"
@current-change="getList"
@update:page-size="getList2"
></el-pagination>
</el-footer>
</el-container>
</template>
<script>
function deepCopy(obj) {
return JSON.parse(JSON.stringify(obj));
}
export default {
name: "chart",
data() {
return {
dataTotal: 0,
params: {
page:1,
page_size:20,
ordering:"-last_time",
querys:[],
},
querys:[
[{field:"data__has_key",compare:"",value:"扫边A_日期"}],
[{field:"data__has_key",compare:"",value:"扫边B_日期"}],
[{field:"data__has_key",compare:"",value:"精雕_日期"}],
[{field:"data__has_key",compare:"",value:"倒角_日期"}],
[{field:"data__has_key",compare:"",value:"减薄A_日期"}],
[{field:"data__has_key",compare:"",value:"减薄B_日期"}],
[{field:"data__has_key",compare:"",value:"磨抛_日期"}],
[{field:"data__has_key",compare:"",value:"一次超洗_日期"}],
[{field:"data__has_key",compare:"",value:"二次超洗_日期"}],
],
query:{
batch:'',
},
tableData:[],
};
},
mounted() {
let that = this;
that.getList();
},
methods: {
getList(val){
let that = this;
that.params.page = val?val:1;
that.params.querys = that.querys;
that.$API.wpm.batchstquery.req(that.params).then((res) => {
if (res.count > 0) {
that.tableData = res.results;
that.dataTotal = res.count;
}else{
that.tableData = [];
that.dataTotal = 0;
}
});
},
getList2(val){
let that = this;
that.params.page = 1;
that.params.page_size = val;
that.getList(1);
},
handleQuery(){
let that = this;
that.params.page = 1;
that.params.querys = [];
if(that.query.batch!==''&&that.query.batch!==null){
console.log('that.query.batch',that.query.batch);
let obj = {};
obj.field = "batch__contains";
obj.compare = "";//contains
obj.value = that.query.batch;
that.querys.forEach((item)=>{
let arr = item;
arr.push(obj);
that.params.querys.push(arr);
});
}else{
that.params.querys = that.querys;
}
this.getList();
},
getCountQt(data,type){
let count_qt = 0,count = 0;
if(type=='扫边A'){
if(data.扫边A_count_notok){
if (data.扫边A_缺陷_气泡 !== undefined) {
count += data.扫边A_缺陷_气泡 ;
}
if (data.扫边A_缺陷_线痕 !== undefined) {
count += data.扫边A_缺陷_线痕 ;
}
if (data.扫边A_缺陷_断裂 !== undefined) {
count += data.扫边A_缺陷_断裂 ;
}
if (data.扫边A_缺陷_划伤 !== undefined) {
count += data.扫边A_缺陷_划伤 ;
}
if (data.扫边A_缺陷_人为磕碰 !== undefined) {
count += data.扫边A_缺陷_人为磕碰 ;
}
if (data.扫边A_缺陷_设备故障 !== undefined) {
count += data.扫边A_缺陷_设备故障 ;
}
if (data.扫边A_缺陷_断点 !== undefined) {
count += data.扫边A_缺陷_断点 ;
}
if (data.扫边A_缺陷_调机破损 !== undefined) {
count += data.扫边A_缺陷_调机破损 ;
}
if (data.扫边A_缺陷_崩边 !== undefined) {
count += data.扫边A_缺陷_崩边 ;
}
if (data.扫边A_缺陷_小崩边 !== undefined) {
count += data.扫边A_缺陷_小崩边 ;
}
count_qt = data.扫边A_count_notok - count;
return count_qt;
}
}else if(type=='扫边B前'){
if(data.扫边B_count_pn_jgqbl){
if (data.扫边B_加工前_缺陷_裂纹 !== undefined) {
count += data.扫边B_加工前_缺陷_裂纹 ;
}
if (data.扫边B_加工前_缺陷_断裂 !== undefined) {
count += data.扫边B_加工前_缺陷_断裂 ;
}
if (data.扫边B_加工前_缺陷_划伤 !== undefined) {
count += data.扫边B_加工前_缺陷_划伤 ;
}
if (data.扫边B_加工前_缺陷_线痕 !== undefined) {
count += data.扫边B_加工前_缺陷_线痕 ;
}
if (data.扫边B_加工前_缺陷_麻点 !== undefined) {
count += data.扫边B_加工前_缺陷_麻点 ;
}
count_qt = data.扫边B_count_pn_jgqbl - count;
return count_qt;
}
}else if(type=='扫边B'){
if(data.扫边B_count_notok){
if (data.扫边B_缺陷_黑圈不良 !== undefined) {
count += data.扫边B_缺陷_黑圈不良 ;
}
if (data.扫边B_缺陷_材料不良 !== undefined) {
count += data.扫边B_缺陷_材料不良 ;
}
if (data.扫边B_缺陷_人为磕碰 !== undefined) {
count += data.扫边B_缺陷_人为磕碰 ;
}
if (data.扫边B_缺陷_设备故障 !== undefined) {
count += data.扫边B_缺陷_设备故障 ;
}
if (data.扫边B_缺陷_脏污 !== undefined) {
count += data.扫边B_缺陷_脏污 ;
}
if (data.扫边B_缺陷_线痕 !== undefined) {
count += data.扫边B_缺陷_线痕 ;
}
if (data.扫边B_缺陷_调机破损 !== undefined) {
count += data.扫边B_缺陷_调机破损 ;
}
if (data.扫边B_缺陷_断裂 !== undefined) {
count += data.扫边B_缺陷_断裂 ;
}
if (data.扫边B_缺陷_崩边 !== undefined) {
count += data.扫边B_缺陷_崩边 ;
}
if (data.扫边B_缺陷_小崩边 !== undefined) {
count += data.扫边B_缺陷_小崩边 ;
}
count_qt = data.扫边B_count_notok - count;
return count_qt;
}
}else if(type=='精雕前'){
if(data.精雕_count_pn_jgqbl){
if (data.精雕_加工前_缺陷_崩边 !== undefined) {
count += data.精雕_加工前_缺陷_崩边 ;
}
if (data.精雕_加工前_缺陷_小崩边 !== undefined) {
count += data.精雕_加工前_缺陷_小崩边 ;
}
count_qt = data.扫边B_count_pn_jgqbl - count;
return count_qt;
}
}else if(type=='精雕'){
if(data.精雕_count_notok){
if (data.精雕_缺陷_黑圈不良 !== undefined) {
count += data.精雕_缺陷_黑圈不良 ;
}
if (data.精雕_缺陷_材料不良 !== undefined) {
count += data.精雕_缺陷_材料不良 ;
}
if (data.精雕_缺陷_调机破损 !== undefined) {
count += data.精雕_缺陷_调机破损 ;
}
if (data.精雕_缺陷_人为磕碰 !== undefined) {
count += data.精雕_缺陷_人为磕碰 ;
}
count_qt = data.精雕_count_notok - count;
return count_qt;
}
}else if(type=='倒角前'){
if(data.倒角_count_pn_jgqbl){
if (data.倒角_加工前_缺陷_崩边 !== undefined) {
count += data.倒角_加工前_缺陷_崩边 ;
}
if (data.倒角_加工前_缺陷_小崩边 !== undefined) {
count += data.倒角_加工前_缺陷_小崩边 ;
}
count_qt = data.倒角_count_pn_jgqbl - count;
return count_qt;
}
}else if(type=='倒角'){
if(data.倒角_count_notok){
if (data.倒角_缺陷_黑圈不良 !== undefined) {
count += data.倒角_缺陷_黑圈不良 ;
}
if (data.倒角_缺陷_材料不良 !== undefined) {
count += data.倒角_缺陷_材料不良 ;
}
if (data.倒角_缺陷_调机破损 !== undefined) {
count += data.倒角_缺陷_调机破损 ;
}
if (data.倒角_缺陷_人为磕碰 !== undefined) {
count += data.倒角_缺陷_人为磕碰 ;
}
if (data.倒角_缺陷_崩边 !== undefined) {
count += data.倒角_缺陷_崩边 ;
}
if (data.倒角_缺陷_小崩边 !== undefined) {
count += data.倒角_缺陷_小崩边 ;
}
count_qt = data.倒角_count_notok - count;
return count_qt;
}
}else if(type=='减薄A'){
if(data.减薄A_count_notok){
if (data.减薄A_缺陷_黑圈不良 !== undefined) {
count += data.减薄A_缺陷_黑圈不良 ;
}
if (data.减薄A_缺陷_材料不良 !== undefined) {
count += data.减薄A_缺陷_材料不良 ;
}
if (data.减薄A_缺陷_黑雾 !== undefined) {
count += data.减薄A_缺陷_黑雾 ;
}
if (data.减薄A_缺陷_调机破损 !== undefined) {
count += data.减薄A_缺陷_调机破损 ;
}
if (data.减薄A_缺陷_人为磕碰 !== undefined) {
count += data.减薄A_缺陷_人为磕碰 ;
}
if (data.减薄A_缺陷_崩边 !== undefined) {
count += data.减薄A_缺陷_崩边 ;
}
if (data.减薄A_缺陷_小崩边 !== undefined) {
count += data.减薄A_缺陷_小崩边 ;
}
count_qt = data.减薄A_count_notok - count;
return count_qt;
}
}else if(type=='减薄B'){
if(data.减薄B_count_notok){
if (data.减薄B_缺陷_黑圈不良 !== undefined) {
count += data.减薄B_缺陷_黑圈不良 ;
}
if (data.减薄B_缺陷_材料不良 !== undefined) {
count += data.减薄B_缺陷_材料不良 ;
}
if (data.减薄B_缺陷_黑雾 !== undefined) {
count += data.减薄B_缺陷_黑雾 ;
}
if (data.减薄B_缺陷_调机破损 !== undefined) {
count += data.减薄B_缺陷_调机破损 ;
}
if (data.减薄B_缺陷_人为磕碰 !== undefined) {
count += data.减薄B_缺陷_人为磕碰 ;
}
if (data.减薄B_缺陷_崩边 !== undefined) {
count += data.减薄B_缺陷_崩边 ;
}
if (data.减薄B_缺陷_小崩边 !== undefined) {
count += data.减薄B_缺陷_小崩边 ;
}
count_qt = data.减薄B_count_notok - count;
return count_qt;
}
}else if(type=='磨抛前'){
if(data.磨抛_count_pn_jgqbl){
if (data.磨抛_加工前_缺陷_崩边 !== undefined) {
count += data.磨抛_加工前_缺陷_崩边 ;
}
if (data.磨抛_加工前_缺陷_小崩边 !== undefined) {
count += data.磨抛_加工前_缺陷_小崩边 ;
}
count_qt = data.磨抛_count_pn_jgqbl - count;
return count_qt;
}
}else if(type=='磨抛'){
if(data.磨抛_count_notok){
if (data.磨抛_缺陷_黑圈不良 !== undefined) {
count += data.磨抛_缺陷_黑圈不良 ;
}
if (data.磨抛_缺陷_材料不良 !== undefined) {
count += data.磨抛_缺陷_材料不良 ;
}
if (data.磨抛_缺陷_调机破损 !== undefined) {
count += data.磨抛_缺陷_调机破损 ;
}
if (data.磨抛_缺陷_人为磕碰 !== undefined) {
count += data.磨抛_缺陷_人为磕碰 ;
}
count_qt = data.磨抛_count_notok - count;
return count_qt;
}
}
else if(type=='一次超洗前'){
if(data.一次超洗_count_pn_jgqbl){
if (data.一次超洗_加工前_缺陷_崩边 !== undefined) {
count += data.一次超洗_加工前_缺陷_崩边 ;
}
if (data.一次超洗_加工前_缺陷_小崩边 !== undefined) {
count += data.一次超洗_加工前_缺陷_小崩边 ;
}
count_qt = data.一次超洗_count_pn_jgqbl - count;
return count_qt;
}
}else if(type=='一次超洗'){
if(data.一次超洗_count_notok){
if (data.一次超洗_缺陷_黑圈不良 !== undefined) {
count += data.一次超洗_缺陷_黑圈不良 ;
}
if (data.一次超洗_缺陷_材料不良 !== undefined) {
count += data.一次超洗_缺陷_材料不良 ;
}
if (data.一次超洗_缺陷_调机破损 !== undefined) {
count += data.一次超洗_缺陷_调机破损 ;
}
if (data.一次超洗_缺陷_人为磕碰 !== undefined) {
count += data.一次超洗_缺陷_人为磕碰 ;
}
count_qt = data.一次超洗_count_notok - count;
return count_qt;
}
}else if(type=='二次超洗前'){
if(data.二次超洗_count_pn_jgqbl){
if (data.二次超洗_加工前_缺陷_崩边 !== undefined) {
count += data.二次超洗_加工前_缺陷_崩边 ;
}
if (data.二次超洗_加工前_缺陷_小崩边 !== undefined) {
count += data.二次超洗_加工前_缺陷_小崩边 ;
}
count_qt = data.二次超洗_count_pn_jgqbl - count;
return count_qt;
}
}else if(type=='二次超洗'){
if(data.二次超洗_count_notok){
if (data.二次超洗_缺陷_黑圈不良 !== undefined) {
count += data.二次超洗_缺陷_黑圈不良 ;
}
if (data.二次超洗_缺陷_材料不良 !== undefined) {
count += data.二次超洗_缺陷_材料不良 ;
}
if (data.二次超洗_缺陷_调机破损 !== undefined) {
count += data.二次超洗_缺陷_调机破损 ;
}
if (data.二次超洗_缺陷_人为磕碰 !== undefined) {
count += data.二次超洗_缺陷_人为磕碰 ;
}
count_qt = data.二次超洗_count_notok - count;
return count_qt;
}
}
},
handleExport() {
this.exportLoading = true;
this.$XLSX("#exportDiv", "过程检验统计");
this.exportLoading = false;
},
},
};
</script>

View File

@ -0,0 +1,312 @@
<template>
<el-container>
<el-side>
<el-container>
<el-header style="height: 40px;">
<el-input
v-model="query.search"
placeholder="请输入物料编号"
clearable
style="width: 150px;"
>
</el-input>
<el-button type="primary" @click="search">查询</el-button>
</el-header>
<el-main style="padding: 0 1px;">
<scTable
ref="tablets"
:apiObj="apiObj"
row-key="id"
:query="query"
stripe
@row-click="rowClick"
hideDo
:paginationLayout="'total, sizes, jumper'"
>
<el-table-column prop="number" label="物料编号"></el-table-column>
</scTable>
</el-main>
</el-container>
</el-side>
<el-main id="elMain">
<el-container>
<el-header style="height: 150px;">
<el-descriptions :column="3">
<el-descriptions-item label="物料名称" width="30vw">
<span v-if="wprItem.material_name">{{wprItem.material_name}}</span>
</el-descriptions-item>
<el-descriptions-item label="物料编号" width="30vw">
<span v-if="wprItem.number">{{wprItem.number}}</span>
</el-descriptions-item>
<el-descriptions-item label="所属部门" width="30vw">
<span v-if="wprItem.belong_dept_name">{{wprItem.belong_dept_name}}</span>
</el-descriptions-item>
<el-descriptions-item label="所属工段" width="30vw">
<span v-if="wprItem.mgroup_name">{{wprItem.mgroup_name}}</span>
</el-descriptions-item>
<el-descriptions-item label="批次号" width="30vw">
<span v-if="wprItem.batch">{{wprItem.batch}}</span>
</el-descriptions-item>
<el-descriptions-item label="原始物料" width="30vw">
<span v-if="wprItem.material_ofrom_name">{{wprItem.material_ofrom_name}}</span>
</el-descriptions-item>
<el-descriptions-item label="原始批次" width="30vw">
<span v-if="wprItem.batch_ofrom">{{wprItem.batch_ofrom}}</span>
</el-descriptions-item>
</el-descriptions>
</el-header>
<el-main style="padding: 0 1px;">
<el-tabs type="border-card" v-model="activeName" style="height: 100%;" lazy>
<el-tab-pane name="mlog" label="生产日志" style="height: 100%;">
<el-container v-if="activeName=='mlog'">
<el-main>
<scTable
ref="tableMlog"
:apiObj="apiObj_mlog"
row-key="id"
:params="params_mlog"
>
<el-table-column label="#" type="index" width="50" fixed></el-table-column>
<el-table-column label="工艺路线" prop="material_out_name" min-width="130" fixed>
<template #default="scope">
<span v-if="scope.row.material_out_name!==null">{{scope.row.material_out_name}}</span>
<span v-else>返工</span>
</template>
</el-table-column>
<el-table-column label="生产设备" prop="equipment_name" min-width="150"></el-table-column>
<el-table-column label="加工数" prop="count_real"></el-table-column>
<el-table-column label="合格数" prop="count_ok"></el-table-column>
<el-table-column label="类型">
<template #default="scope">
<el-tag v-if="scope.row.is_fix" type="warning">返修</el-tag>
<el-tag v-else type="primary">正常</el-tag>
</template>
</el-table-column>
<el-table-column label="部门/工段">
<template #default="scope">
{{scope.row.belong_dept_name}}/{{scope.row.mgroup_name}}
</template>
</el-table-column>
<el-table-column
label="处理人"
prop="handle_user_name"
width="80"
></el-table-column>
<el-table-column label="保温剩余时间" v-if="mgroup_name=='黑化'||mgroup_name=='退火'">
<template #default="scope">
{{ getRemaTime(scope.row) }}
</template>
</el-table-column>
<el-table-column
label="操作日期"
prop="handle_date"
></el-table-column>
<el-table-column label="是否提交" prop="submit_time">
<template #default="scope">
<span v-if="scope.row.submit_time!==null" style="color: green;"></span>
<span v-else></span>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
</el-tab-pane>
<el-tab-pane name="handover" label="交接记录" style="height: 100%;">
<el-container v-if="activeName=='handover'">
<el-main>
<scTable
ref="tableHandover"
:apiObj="apiObj_handover"
row-key="id"
:params="params_handover"
>
<el-table-column
label="#"
type="index"
width="50"
></el-table-column>
<el-table-column type="expand">
<template #default="props">
<div style="padding-left: 50px">
<template v-for="item in props.row.handoverb" :key="item.id">
<el-descriptions :column="3">
<el-descriptions-item label="批次">
{{item.batch}}
</el-descriptions-item>
<el-descriptions-item label="数量">
{{item.count}}
</el-descriptions-item>
<el-descriptions-item label="不合格标记" v-if="item.defect_name!==null">
{{item.defect_name}}
</el-descriptions-item>
</el-descriptions>
</template>
</div>
</template>
</el-table-column>
<el-table-column
label="物料"
prop="material_name"
min-width="140"
></el-table-column>
<el-table-column label="批次" prop="batch" min-width="80">
<template #default="scope">
<el-text v-if="scope.row.handoverb.length>0" type="primary">{{scope.row.handoverb.length}}</el-text>
</template>
</el-table-column>
<el-table-column label="数量" prop="count" min-width="80"></el-table-column>
<el-table-column label="交接类别" prop="type" width="80">
<template #default="scope">
<el-tag v-if="scope.row.type == 10" type="primary">正常</el-tag>
<el-tag v-if="scope.row.type == 20" type="warning">返工</el-tag>
<el-tag v-if="scope.row.type == 40" type="danger" >报废</el-tag>
<el-tag v-if="scope.row.type == 50" type="success" >改版</el-tag>
</template>
</el-table-column>
<el-table-column label="交接类型" prop="mtype" min-width="80">
<template #default="scope">
<el-text v-if="scope.row.mtype == 10" type="primary">正常</el-text>
<el-text v-if="scope.row.mtype == 20" type="success">分批</el-text>
<el-text v-if="scope.row.mtype == 30" type="success">合批</el-text>
</template>
</el-table-column>
<el-table-column label="交送工段" prop="send_mgroup_name" min-width="80">
</el-table-column>
<el-table-column
label="交送人"
prop="send_user_name"
width="80"
></el-table-column>
<el-table-column label="接收工段" prop="recive_mgroup_name" min-width="80">
</el-table-column>
<el-table-column
label="接收人"
prop="recive_user_name"
width="80"
></el-table-column>
<el-table-column
label="交接日期"
prop="send_date"
width="120"
></el-table-column>
</scTable>
</el-main>
</el-container>
</el-tab-pane>
<el-tab-pane name="mio" label="出入库记录" style="height: 100%;">
<el-container v-if="activeName=='mio'">
<el-main>
<scTable
ref="tableMio"
:apiObj="apiObj_mio"
row-key="id"
:params="params_mio"
>
<el-table-column label="#" type="index" width="40"></el-table-column>
<el-table-column label="记录编号" prop="number" min-width="80"></el-table-column>
<el-table-column label="出入库类型" prop="type">
<template #default="scope">{{ typeDict[scope.row.type] }}</template>
</el-table-column>
<el-table-column label="执行部门" prop="belong_dept_name">
</el-table-column>
<el-table-column label="工段" prop="mgroup_name">
</el-table-column>
<el-table-column label="状态" prop="type" width="80">
<template #default="scope">
{{ stateDict[scope.row.state] }}
</template>
</el-table-column>
<el-table-column label="部门执行人" prop="do_user_name" ></el-table-column>
<el-table-column label="仓库执行人" prop="mio_user_name"></el-table-column>
<el-table-column label="日期" prop="inout_date"></el-table-column>
</scTable>
</el-main>
</el-container>
</el-tab-pane>
</el-tabs>
</el-main>
</el-container>
</el-main>
</el-container>
</template>
<script>
import { wmState } from "@/utils/enum.js";
export default {
name: "batch_statistics",
data() {
return {
wmState,
apiObj:this.$API.wpm.wpr.list,
wprItem:{},
query:{
search:'',
},
params_mio:{
item_mio__w_mioitem__number:'',
},
params_mlog:{
cnumber:'',
},
params_handover:{
b_handover__w_handoverb__number:'',
},
stateDict: {
10: "创建中",
20: "已提交",
},
typeDict: {
do_out: "生产领料",
sale_out: "销售发货",
pur_in: "采购入库",
do_in: "生产入库",
other_in: "其他入库",
other_out: "其他出库",
},
batch:'',
activeName:'',
limitedWatch:false,
apiObj_mlog:null,
apiObj_handover:null,
apiObj_mio:null,
};
},
mounted() {
},
methods: {
rowClick(row){
console.log('row',row)
let that = this;
that.nodes =[];
that.edges = [];
that.wprItem = {};
that.wprItem.material_name = row.material_name;
that.wprItem.number = row.number;
that.activeName = 'mlog';
that.$API.wpm.wpr.item.req(row.id).then((res) => {
if(res.wm_!==null){
that.wprItem = res.wm_;
that.wprItem.number = row.number;
}
that.params_mio.item_mio__w_mioitem__number = row.number;
that.params_mlog.cnumber = row.number;
that.params_handover.b_handover__w_handoverb__number = row.number;
that.apiObj_mlog = that.$API.wpm.mlog.list;
that.apiObj_handover = that.$API.wpm.handover.list;
that.apiObj_mio = that.$API.inm.mio.list;
that.$refs.tableMlog.queryData(that.params_mlog);
that.$refs.tableHandover.queryData(that.params_handover);
that.$refs.tableMio.queryData(that.params_mio);
})
},
search(){
this.$refs.tablets.queryData(this.query)
},
},
};
</script>
<style scoped>
</style>