油漆
This commit is contained in:
502
src/views/paintLabManagement/dataAnalysis.vue
Normal file
502
src/views/paintLabManagement/dataAnalysis.vue
Normal file
@@ -0,0 +1,502 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<!-- 搜索部分 -->
|
||||
<div>
|
||||
<el-form :model="search" inline size="mini" label-width="80px">
|
||||
<el-form-item label="开始日期">
|
||||
<el-date-picker :style="{ width: inputWidth }" v-model="search.starttime" type="datetime" placeholder="选择日期时间" align="right" :picker-options="pickerOptions">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="结束日期">
|
||||
<el-date-picker :style="{ width: inputWidth }" v-model="search.endtime" type="datetime" placeholder="选择日期时间" align="right" :picker-options="pickerOptions">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="工单号">
|
||||
<el-input v-model.trim="search.workorderid" placeholder="输入工单号" :style="{ width: inputWidth }"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="零件号">
|
||||
<el-input v-model.trim="search.partnumber" placeholder="输入零件号" :style="{ width: inputWidth }"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="产品描述">
|
||||
<el-input v-model.trim="search.product_description" placeholder="输入产品描述" :style="{ width: inputWidth }"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="班组">
|
||||
<el-select v-model="search.team" placeholder="输入班组" :style="{ width: inputWidth }">
|
||||
<el-option label="A班" value="A"> </el-option>
|
||||
<el-option label="B班" value="B"> </el-option>
|
||||
<el-option label="" value=""> </el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="报表类型">
|
||||
<el-select v-model="search.reportType" placeholder="请选择" :style="{ width: inputWidth }">
|
||||
<el-option v-for="item in reportType_options" :key="item.value" :label="item.label" :value="item.value"> </el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label=" ">
|
||||
<el-button size="mini" type="primary" icon="el-icon-search" @click="getList">搜索</el-button>
|
||||
<el-button size="mini" type="warning" @click="exportAllDataEvent(false)">日生产报表导出</el-button>
|
||||
<el-button size="mini" type="success" @click="exportAllDataEvent(true)">缺陷详情导出</el-button>
|
||||
<!-- <el-button size="mini" type="success" @click="exportDataEvent">缺陷详情导出</el-button> -->
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div style="width: 100%; display: flex; justify-content: flex-end">
|
||||
<pagination :pageSizes="[12, 60, 120, 300]" :total="pagination.total" :page.sync="pagination.pageNum" :limit.sync="pagination.pageSize" @pagination="getList" />
|
||||
</div>
|
||||
<div style="width: 100%">
|
||||
<div style="font-size: 20px;text-align: center; margin 0 auto">
|
||||
{{ reportType_options[search.reportType].label }} 共 {{ realTotal }} 条
|
||||
</div>
|
||||
</div>
|
||||
<!-- 表格部分 -->
|
||||
<vxe-table @menu-click="contextMenuClickEvent" :menu-config="tableMenu" border resizable show-overflow :header-cell-style="headerCellStyle" ref="xTable" :column-config="{ resizable: true }" :row-config="{ isHover: true, isCurrent: true, height: 20 }" :loading="loading" :data="QualityStatisticsTable" :merge-cells="mergeCells" :cell-style="cellStyle" size="mini" align="center" max-height="800px" :export-config="{}">
|
||||
<vxe-colgroup title="订单信息" align="center" fixed="left">
|
||||
<vxe-column field="workorderId" title="工单号" width="140px" sortable></vxe-column>
|
||||
<vxe-column field="finishedPartNumber" title="零件号" min-width="120px" :show-overflow="false" sortable></vxe-column>
|
||||
<vxe-column field="color" title="颜色" min-width="100px" :show-overflow="false" sortable></vxe-column>
|
||||
<vxe-column field="productDescription" title="描述" min-width="100px" :show-overflow="false"></vxe-column>
|
||||
<vxe-column field="requireNumber" title="生 产 投 入 数" min-width="60px"></vxe-column>
|
||||
<vxe-column field="team" title="班次" sortable></vxe-column>
|
||||
<vxe-column field="qualifiedNumber" title="合 格 数" min-width="60px"></vxe-column>
|
||||
<vxe-column title="合格率" min-width="70px">
|
||||
<template #default="{ row }"> {{ offsetRate(row.qualifiedRate) }}% </template>
|
||||
</vxe-column>
|
||||
<vxe-column field="paoguangTotal" title="抛光总数" min-width="60px"></vxe-column>
|
||||
<vxe-column field="damoTotal" title="打磨总数" min-width="60px"></vxe-column>
|
||||
<vxe-column field="baofeiTotal" title="报废总数" min-width="60px"></vxe-column>
|
||||
<vxe-column field="startTime" title="开始时间" width="120px" :show-overflow="false" sortable></vxe-column>
|
||||
<vxe-column field="endTime" title="结束时间" width="120px" :show-overflow="false" sortable></vxe-column>
|
||||
<vxe-column field="remark" title="备注" width="60px"></vxe-column>
|
||||
</vxe-colgroup>
|
||||
|
||||
<vxe-colgroup title="油漆" align="center">
|
||||
<vxe-column field="paintSuokong" title="缩 孔" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.paintSuokong) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="paintZhengkong" title="针 孔" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.paintZhengkong) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="paintShiguang" title="失 光" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.paintShiguang) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="paintSecha" title="色 差" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.paintSecha) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="paintDianzi" title="点 子" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.paintDianzi) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="paintOther" title="其 他" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.paintOther) }}</template>
|
||||
</vxe-column>
|
||||
</vxe-colgroup>
|
||||
|
||||
<vxe-colgroup title="设备" align="center">
|
||||
<vxe-column field="deviceShuiban" title="水 斑" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.deviceShuiban) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="deviceZandian" title="脏 点" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.deviceZandian) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="deviceBianxing" title="变 形" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.deviceBianxing) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="deviceYouzhu" title="油 珠" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.deviceYouzhu) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="deviceTuoluo" title="脱 落" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.deviceTuoluo) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="deviceZhuangshang" title="撞 伤" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.deviceZhuangshang) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="deviceOther" title="其 他" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.deviceOther) }}</template>
|
||||
</vxe-column>
|
||||
</vxe-colgroup>
|
||||
|
||||
<vxe-colgroup title="毛坯" align="center">
|
||||
<vxe-column field="blankMaoci" title="毛 刺" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.blankMaoci) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="blankSuoyin" title="缩 印" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.blankSuoyin) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="blankCanshuang" title="擦 伤" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.blankCanshuang) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="blankShaying" title="砂 印" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.blankShaying) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="blankZangdian" title="脏 点" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.blankZangdian) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="blankDamo" title="打 磨" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.blankDamo) }}</template>
|
||||
</vxe-column>
|
||||
</vxe-colgroup>
|
||||
|
||||
<vxe-colgroup title="程序" align="center">
|
||||
<vxe-column field="programLiuguang" title="流 挂" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.programLiuguang) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="programSeqiqueqi" title="色 漆 缺 漆" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.programSeqiqueqi) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="programQingqiqueqi" title="清 漆 缺 漆" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.programQingqiqueqi) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="programJupi" title="桔 皮" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.programJupi) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="programOther" title="其 他" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.programOther) }}</template>
|
||||
</vxe-column>
|
||||
</vxe-colgroup>
|
||||
|
||||
<vxe-colgroup title="班组操作" align="center">
|
||||
<vxe-column field="teamTuoluocanshuang" title="脱 落 擦 伤" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.teamTuoluocanshuang) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="teamQingqiqikuai" title="清 漆 漆 块" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.teamQingqiqikuai) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="teamSeqiqikuai" title="色 漆 漆 块" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.teamSeqiqikuai) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="teamFahua" title="发 花" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.teamFahua) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="teamLiangbang" title="亮 斑" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.teamLiangbang) }}</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="teamPenglou" title="喷 漏" min-width="60px">
|
||||
<template #default="{ row }"> {{ offsetValue(row.teamPenglou) }}</template>
|
||||
</vxe-column>
|
||||
</vxe-colgroup>
|
||||
</vxe-table>
|
||||
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
GetQualityStatisticsTable_first,
|
||||
GetQualityStatisticsTable_again,
|
||||
GetQualityStatisticsTable_final,
|
||||
GetQualityStatisticsTable_total,
|
||||
deleteStatisticsTable,
|
||||
downloadStatisticsTableExcel
|
||||
} from '@/api/qualityManagement/qualityStatistics_V2'
|
||||
export default {
|
||||
name: 'dataAnalysis',
|
||||
data() {
|
||||
return {
|
||||
inputWidth: '180px',
|
||||
pickerOptions: {
|
||||
shortcuts: [
|
||||
{
|
||||
text: '今天',
|
||||
onClick(picker) {
|
||||
picker.$emit('pick', new Date())
|
||||
},
|
||||
},
|
||||
{
|
||||
text: '昨天',
|
||||
onClick(picker) {
|
||||
const date = new Date()
|
||||
date.setTime(date.getTime() - 3600 * 1000 * 24)
|
||||
picker.$emit('pick', date)
|
||||
},
|
||||
},
|
||||
{
|
||||
text: '一周前',
|
||||
onClick(picker) {
|
||||
const date = new Date()
|
||||
date.setTime(date.getTime() - 3600 * 1000 * 24 * 7)
|
||||
picker.$emit('pick', date)
|
||||
},
|
||||
}, ],
|
||||
},
|
||||
search: {
|
||||
starttime: new Date(new Date(new Date().toLocaleDateString()).getTime()),
|
||||
endtime: new Date(new Date(new Date().toLocaleDateString()).getTime() + 24 * 60 * 60 * 1000 - 1),
|
||||
team: null,
|
||||
workorderid: null,
|
||||
partnumber: null,
|
||||
reportType: 0,
|
||||
product_description: '',
|
||||
},
|
||||
reportType_options: [
|
||||
{ label: '首检报表', value: 0 },
|
||||
{ label: '抛光报表', value: 1 },
|
||||
{ label: '包装报表', value: 2 },
|
||||
{ label: '总报表', value: 3 },
|
||||
],
|
||||
pagination: {
|
||||
total: 0,
|
||||
pageNum: 1,
|
||||
pageSize: 60,
|
||||
},
|
||||
realTotal: 0,
|
||||
loading: false,
|
||||
QualityStatisticsTable: [],
|
||||
mergeCells: [
|
||||
// { row: 0, col: 0, rowspan: 3, colspan: 0 },
|
||||
// { row: 0, col: 1, rowspan: 3, colspan: 0 },
|
||||
// { row: 0, col: 2, rowspan: 3, colspan: 0 },
|
||||
// { row: 0, col: 3, rowspan: 3, colspan: 0 },
|
||||
// { row: 0, col: 4, rowspan: 3, colspan: 0 },
|
||||
// { row: 0, col: 5, rowspan: 3, colspan: 0 },
|
||||
// { row: 0, col: 6, rowspan: 3, colspan: 0 },
|
||||
// { row: 0, col: 7, rowspan: 3, colspan: 0 },
|
||||
// { row: 0, col: 8, rowspan: 3, colspan: 0 },
|
||||
// { row: 0, col: 9, rowspan: 3, colspan: 0 },
|
||||
// { row: 0, col: 10, rowspan: 3, colspan: 0 },
|
||||
// { row: 0, col: 11, rowspan: 3, colspan: 0 },
|
||||
],
|
||||
hiddenCells: [],
|
||||
// 列表对照表
|
||||
tableCellDict: [],
|
||||
// 右键菜单
|
||||
tableMenu: {
|
||||
header: {
|
||||
options: [
|
||||
[
|
||||
{ code: 'hideColumn', name: '隐藏列', disabled: false },
|
||||
{ code: 'showAllColumn', name: '取消所有隐藏列', disabled: false },
|
||||
],
|
||||
],
|
||||
},
|
||||
body: {
|
||||
options: [
|
||||
[
|
||||
// { code: 'copy', name: '复制', prefixIcon: 'vxe-icon-copy', disabled: false },
|
||||
// { code: 'reload', name: '刷新', disabled: false },
|
||||
// { code: 'insertAt', name: '插入', disabled: false },
|
||||
{ code: 'remove', name: '删除', disabled: false },
|
||||
// { code: 'save', name: '保存', prefixIcon: 'vxe-icon-save', disabled: false },
|
||||
{ code: 'update', name: '修改', disabled: false },
|
||||
],
|
||||
],
|
||||
},
|
||||
visibleMethod: this.visibleMethod,
|
||||
},
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.getList()
|
||||
},
|
||||
created() {},
|
||||
methods: {
|
||||
//todo 设置表合并行
|
||||
mergeTable(num) {
|
||||
this.mergeCells = []
|
||||
for (let i = 0; i < this.QualityStatisticsTable.length; i = i + num) {
|
||||
let count = 13 - this.hiddenCells.length;
|
||||
for (let j = 0; j < count; j++) {
|
||||
this.mergeCells.push({ row: i, col: j, rowspan: num, colspan: 0 })
|
||||
}
|
||||
// if(this.hiddenCells.includes('工单号')){
|
||||
|
||||
// }
|
||||
// this.mergeCells.push({ row: i, col: 10, rowspan: num, colspan: 0 })
|
||||
// this.mergeCells.push({ row: i, col: 11, rowspan: num, colspan: 0 })
|
||||
// this.mergeCells.push({ row: i, col: 12, rowspan: num, colspan: 0 })
|
||||
}
|
||||
},
|
||||
|
||||
//todo 获取统计数据
|
||||
getList() {
|
||||
this.loading = true
|
||||
setTimeout(() => {
|
||||
this.loading = false
|
||||
}, 30000)
|
||||
let query = { ...this.search, ...this.pagination }
|
||||
delete query['reportType']
|
||||
delete query['total']
|
||||
switch (this.search.reportType) {
|
||||
case 0:
|
||||
GetQualityStatisticsTable_first(query).then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.QualityStatisticsTable = res.data.item1
|
||||
this.pagination.total = res.data.item2
|
||||
this.realTotal = parseInt(res.data.item2 / 3)
|
||||
this.mergeTable(3)
|
||||
this.loading = false
|
||||
}
|
||||
})
|
||||
break
|
||||
case 1:
|
||||
GetQualityStatisticsTable_again(query).then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.QualityStatisticsTable = res.data.item1
|
||||
this.pagination.total = res.data.item2
|
||||
this.realTotal = parseInt(res.data.item2 / 2)
|
||||
this.mergeTable(2)
|
||||
this.loading = false
|
||||
}
|
||||
})
|
||||
break
|
||||
case 2:
|
||||
GetQualityStatisticsTable_final(query).then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.QualityStatisticsTable = res.data.item1
|
||||
this.pagination.total = res.data.item2
|
||||
this.realTotal = parseInt(res.data.item2 / 2)
|
||||
this.mergeTable(2)
|
||||
this.loading = false
|
||||
}
|
||||
})
|
||||
break
|
||||
case 3:
|
||||
GetQualityStatisticsTable_total(query).then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.QualityStatisticsTable = res.data.item1
|
||||
this.pagination.total = res.data.item2
|
||||
this.realTotal = parseInt(res.data.item2 / 2)
|
||||
this.mergeTable(2)
|
||||
this.loading = false
|
||||
}
|
||||
})
|
||||
break
|
||||
}
|
||||
},
|
||||
|
||||
//todo 设置表头颜色
|
||||
headerCellStyle() {
|
||||
return {
|
||||
backgroundColor: '#2D3D51',
|
||||
color: '#ffffff',
|
||||
border: '1px solid #161823',
|
||||
fontSize: '18px',
|
||||
}
|
||||
},
|
||||
|
||||
cellStyle() {
|
||||
return {
|
||||
border: '1px solid #161823',
|
||||
fontSize: '16px',
|
||||
fontWeight: '700',
|
||||
}
|
||||
},
|
||||
|
||||
//todo 导出excel
|
||||
exportDataEvent() {
|
||||
this.$refs.xTable.openExport()
|
||||
},
|
||||
// 导出全部数据
|
||||
exportAllDataEvent(isShowDetail = false) {
|
||||
let data = { ...this.search, ...this.pagination };
|
||||
data.type = this.search.reportType + 1;
|
||||
data.isShowDetail = isShowDetail;
|
||||
let fileName = this.reportType_options[this.search.reportType].label + (isShowDetail ? '-缺陷详情' : '-日生产报表') + '.xlsx';
|
||||
downloadStatisticsTableExcel(data).then(res => {
|
||||
console.log(res);
|
||||
let blobURL = URL.createObjectURL(res.data)
|
||||
//创建标签
|
||||
let link = document.createElement('a')
|
||||
//设置href
|
||||
link.href = blobURL
|
||||
//设置a标签的行为是download,不然就跳转了,同时设置名字是"test.ppt"
|
||||
link.download = fileName;
|
||||
//隐藏a标签,他只是下载,没必要出现
|
||||
link.style.display = "none"
|
||||
//模拟点击
|
||||
link.click()
|
||||
//最后,把这个URL进行销毁,免得他占内存
|
||||
URL.revokeObjectURL()
|
||||
})
|
||||
// this.download('/mes/qc/statistics/downloadStatisticsTableExcel');
|
||||
},
|
||||
// 合格率去除小数
|
||||
offsetRate(num) {
|
||||
if (num === null) {
|
||||
return ''
|
||||
}
|
||||
return parseInt(num)
|
||||
},
|
||||
// 数据去除0
|
||||
offsetValue(num) {
|
||||
if (num === 0 || num === '0') {
|
||||
return ''
|
||||
}
|
||||
return num
|
||||
},
|
||||
// 右键菜单
|
||||
contextMenuClickEvent({ menu, row, column }) {
|
||||
const $table = this.$refs.xTable
|
||||
switch (menu.code) {
|
||||
case 'hideColumn':
|
||||
this.hideColumn(column);
|
||||
break
|
||||
case 'showAllColumn':
|
||||
this.resetColumn()
|
||||
break
|
||||
case 'remove':
|
||||
this.removeData(row)
|
||||
// $table.remove(row)
|
||||
case 'update':
|
||||
this.updateData(row)
|
||||
break
|
||||
}
|
||||
},
|
||||
// 隐藏列
|
||||
hideColumn(column) {
|
||||
const $table = this.$refs.xTable;
|
||||
$table.hideColumn(column);
|
||||
this.hiddenCells.push(column.title);
|
||||
this.resetMergeTable();
|
||||
},
|
||||
// 取消所有隐藏列
|
||||
resetColumn() {
|
||||
const $table = this.$refs.xTable;
|
||||
this.hiddenCells = [];
|
||||
$table.resetColumn();
|
||||
this.resetMergeTable();
|
||||
},
|
||||
resetMergeTable(){
|
||||
if(this.search.reportType === 3){
|
||||
this.mergeTable(2);
|
||||
}else{
|
||||
this.mergeTable(3);
|
||||
}
|
||||
|
||||
},
|
||||
// 删除数据
|
||||
removeData(row) {
|
||||
this.$confirm('此操作将永久删除该条记录, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
}).then(() => {
|
||||
const deleteData = {
|
||||
workorderid: row.workorderId,
|
||||
}
|
||||
deleteStatisticsTable(deleteData).then((res) => {
|
||||
if (res.code === 200) {
|
||||
this.$message({
|
||||
type: 'success',
|
||||
message: '删除成功!',
|
||||
})
|
||||
this.getList()
|
||||
} else {
|
||||
this.$message({
|
||||
type: 'error',
|
||||
message: '删除失败!请检查!',
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
//修改数据
|
||||
updateDate(row) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
631
src/views/paintLabManagement/dataCapture.vue
Normal file
631
src/views/paintLabManagement/dataCapture.vue
Normal file
@@ -0,0 +1,631 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<!-- 搜索部分 -->
|
||||
<div>
|
||||
<el-form :model="search" inline size="mini" label-width="80px">
|
||||
<el-form-item label="开始日期">
|
||||
<el-date-picker :style="{ width: inputWidth }" v-model="search.starttime" type="datetime" placeholder="选择日期时间" align="right" :picker-options="pickerOptions">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="结束日期">
|
||||
<el-date-picker :style="{ width: inputWidth }" v-model="search.endtime" type="datetime" placeholder="选择日期时间" align="right" :picker-options="pickerOptions">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="工单号">
|
||||
<el-input v-model.trim="search.workorderid" placeholder="输入工单号" :style="{ width: inputWidth }"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="零件号">
|
||||
<el-input v-model.trim="search.partnumber" placeholder="输入零件号" :style="{ width: inputWidth }"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="产品描述">
|
||||
<el-input v-model.trim="search.product_description" placeholder="输入产品描述" :style="{ width: inputWidth }"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="班组">
|
||||
<el-select v-model="search.team" placeholder="输入班组" :style="{ width: inputWidth }">
|
||||
<el-option label="A班" value="A"> </el-option>
|
||||
<el-option label="B班" value="B"> </el-option>
|
||||
<el-option label="" value=""> </el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="报表类型">
|
||||
<el-select v-model="search.reportType" placeholder="请选择" :style="{ width: inputWidth }">
|
||||
<el-option v-for="item in reportType_options" :key="item.value" :label="item.label" :value="item.value"> </el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label=" ">
|
||||
<el-button size="mini" type="primary" icon="el-icon-search" @click="getList">搜索</el-button>
|
||||
<el-button size="mini" type="warning" @click="exportAllDataEvent(false)">日生产报表导出</el-button>
|
||||
<el-button size="mini" type="success" @click="exportAllDataEvent(true)">缺陷详情导出</el-button>
|
||||
<!-- <el-button size="mini" type="success" @click="exportDataEvent">缺陷详情导出</el-button> -->
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div style="width: 100%; display: flex; justify-content: flex-end">
|
||||
<pagination :pageSizes="[12, 60, 120, 300]" :total="pagination.total" :page.sync="pagination.pageNum" :limit.sync="pagination.pageSize" @pagination="getList" />
|
||||
</div>
|
||||
<div style="width: 100%">
|
||||
<div style="font-size: 20px;text-align: center; margin 0 auto">
|
||||
{{ reportType_options[search.reportType].label }} 共 {{ realTotal }} 条
|
||||
</div>
|
||||
</div>
|
||||
<!-- 表格部分 -->
|
||||
<vxe-table @menu-click="contextMenuClickEvent" :menu-config="tableMenu" border resizable show-overflow :header-cell-style="headerCellStyle" ref="xTable"
|
||||
:column-config="{ resizable: true }" :row-config="{ isHover: false, isCurrent: false, height: 30 }"
|
||||
:loading="loading" :data="QualityStatisticsTable" :merge-cells="mergeCells"
|
||||
:cell-style="cellStyle" size="mini" align="center" max-height="800px" :export-config="{}"
|
||||
:edit-config="{trigger: 'click', mode: 'cell'}">
|
||||
|
||||
<vxe-column field="name01" title="工单号" width="140px"></vxe-column>
|
||||
<vxe-column field="name02" title="产品名称" width="140px"></vxe-column>
|
||||
<vxe-column field="name03" title="颜色" width="140px"></vxe-column>
|
||||
<vxe-colgroup title="色差" align="center">
|
||||
<vxe-column field="name04" title="种类" width="140px" ></vxe-column>
|
||||
<vxe-colgroup title="实测" align="center">
|
||||
|
||||
<vxe-column field="name05" title="△L" min-width="80px" :edit-render="{autofocus: '.vxe-input--inner'}">
|
||||
<template #edit="{ row }">
|
||||
<vxe-input v-model="row.name05" type="text"></vxe-input>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="name06" title="△A" min-width="80px" :edit-render="{autofocus: '.vxe-input--inner'}">
|
||||
<template #edit="{ row }">
|
||||
<vxe-input v-model="row.name06" type="text"></vxe-input>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="name07" title="△B" min-width="80px" :edit-render="{autofocus: '.vxe-input--inner'}">
|
||||
<template #edit="{ row }">
|
||||
<vxe-input v-model="row.name07" type="text"></vxe-input>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="name08" title="△E" min-width="80px" :edit-render="{autofocus: '.vxe-input--inner'}">
|
||||
<template #edit="{ row }">
|
||||
<vxe-input v-model="row.name08" type="text"></vxe-input>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="name09" title="MDE" min-width="100px" :edit-render="{autofocus: '.vxe-input--inner'}">
|
||||
<template #edit="{ row }">
|
||||
<vxe-input v-model="row.name09" type="text"></vxe-input>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="name10" title="△SE" min-width="80px" :edit-render="{autofocus: '.vxe-input--inner'}">
|
||||
<template #edit="{ row }">
|
||||
<vxe-input v-model="row.name10" type="text"></vxe-input>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="name11" title="△ET" min-width="80px" :edit-render="{autofocus: '.vxe-input--inner'}">
|
||||
<template #edit="{ row }">
|
||||
<vxe-input v-model="row.name11" type="text"></vxe-input>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="name12" title="△ST" min-width="80px" :edit-render="{autofocus: '.vxe-input--inner'}">
|
||||
<template #edit="{ row }">
|
||||
<vxe-input v-model="row.name12" type="text"></vxe-input>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-colgroup>
|
||||
<vxe-column field="name45" title="判定" width="100px" :edit-render="{autofocus: '.vxe-input--inner'}">
|
||||
<template #edit="{ row }">
|
||||
<vxe-input v-model="row.name45" type="text"></vxe-input>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-colgroup>
|
||||
|
||||
<vxe-colgroup title="光泽" align="center">
|
||||
<vxe-column field="name13" title="标准" min-width="60px" :show-overflow="false"></vxe-column>
|
||||
<vxe-column field="name14" title="实测" min-width="100px" :edit-render="{autofocus: '.vxe-input--inner'}">
|
||||
<template #edit="{ row }">
|
||||
<vxe-input v-model="row.name14" type="text"></vxe-input>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="name15" title="判定" min-width="80px" :edit-render="{autofocus: '.vxe-input--inner'}">
|
||||
<template #edit="{ row }">
|
||||
<vxe-input v-model="row.name15" type="text"></vxe-input>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-colgroup>
|
||||
|
||||
<vxe-colgroup title="附着力(3件)" align="center">
|
||||
<vxe-column field="name16" title="标准" min-width="80px"></vxe-column>
|
||||
<vxe-column field="name17" title="实际保留面积" min-width="100px" :edit-render="{autofocus: '.vxe-input--inner'}">
|
||||
<template #edit="{ row }">
|
||||
<vxe-input v-model="row.name17" type="text"></vxe-input>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="name18" title="判定" min-width="100px" :edit-render="{autofocus: '.vxe-input--inner'}">
|
||||
<template #edit="{ row }">
|
||||
<vxe-input v-model="row.name18" type="text"></vxe-input>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-colgroup>
|
||||
|
||||
<vxe-colgroup title="膜厚" align="center">
|
||||
<vxe-column field="name19" title="标准" min-width="100px" :edit-render="{autofocus: '.vxe-input--inner'}">
|
||||
<template #edit="{ row }">
|
||||
<vxe-input v-model="row.name19" type="text"></vxe-input>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="name20" title="实测" min-width="100px" :edit-render="{autofocus: '.vxe-input--inner'}">
|
||||
<template #edit="{ row }">
|
||||
<vxe-input v-model="row.name20" type="text"></vxe-input>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="name21" title="判定" min-width="100px" :edit-render="{autofocus: '.vxe-input--inner'}">
|
||||
<template #edit="{ row }">
|
||||
<vxe-input v-model="row.name21" type="text"></vxe-input>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-colgroup>
|
||||
|
||||
<vxe-colgroup title="桔皮" align="center">
|
||||
<vxe-column field="name22" title="标准(大众)" min-width="130px" :show-overflow="false" ></vxe-column>
|
||||
<vxe-column field="name23" title="实测" min-width="100px" :edit-render="{autofocus: '.vxe-input--inner'}">
|
||||
<template #edit="{ row }">
|
||||
<vxe-input v-model="row.name23" type="text"></vxe-input>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-colgroup>
|
||||
|
||||
<vxe-column field="name24" title="批次判定" width="100px" :edit-render="{autofocus: '.vxe-input--inner'}">
|
||||
<template #edit="{ row }">
|
||||
<vxe-input v-model="row.name24" type="text"></vxe-input>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="name25" title="检验员" width="100px" :edit-render="{autofocus: '.vxe-input--inner'}">
|
||||
<template #edit="{ row }">
|
||||
<vxe-input v-model="row.name25" type="text"></vxe-input>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="name26" title="备注" width="100px" :edit-render="{autofocus: '.vxe-input--inner'}">
|
||||
<template #edit="{ row }">
|
||||
<vxe-input v-model="row.name26" type="text"></vxe-input>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
GetQualityStatisticsTable_first,
|
||||
GetQualityStatisticsTable_again,
|
||||
GetQualityStatisticsTable_final,
|
||||
GetQualityStatisticsTable_total,
|
||||
deleteStatisticsTable,
|
||||
downloadStatisticsTableExcel
|
||||
} from '@/api/qualityManagement/qualityStatistics_V2'
|
||||
export default {
|
||||
name: 'dataCapture',
|
||||
data() {
|
||||
return {
|
||||
inputWidth: '180px',
|
||||
pickerOptions: {
|
||||
shortcuts: [
|
||||
{
|
||||
text: '今天',
|
||||
onClick(picker) {
|
||||
picker.$emit('pick', new Date())
|
||||
},
|
||||
},
|
||||
{
|
||||
text: '昨天',
|
||||
onClick(picker) {
|
||||
const date = new Date()
|
||||
date.setTime(date.getTime() - 3600 * 1000 * 24)
|
||||
picker.$emit('pick', date)
|
||||
},
|
||||
},
|
||||
{
|
||||
text: '一周前',
|
||||
onClick(picker) {
|
||||
const date = new Date()
|
||||
date.setTime(date.getTime() - 3600 * 1000 * 24 * 7)
|
||||
picker.$emit('pick', date)
|
||||
},
|
||||
}, ],
|
||||
},
|
||||
search: {
|
||||
starttime: new Date(new Date(new Date().toLocaleDateString()).getTime()),
|
||||
endtime: new Date(new Date(new Date().toLocaleDateString()).getTime() + 24 * 60 * 60 * 1000 - 1),
|
||||
team: null,
|
||||
workorderid: null,
|
||||
partnumber: null,
|
||||
reportType: 0,
|
||||
product_description: '',
|
||||
},
|
||||
reportType_options: [
|
||||
{ label: '产品性能测试记录', value: 0 },
|
||||
{ label: '抛光报表', value: 1 },
|
||||
{ label: '包装报表', value: 2 },
|
||||
{ label: '总报表', value: 3 },
|
||||
],
|
||||
pagination: {
|
||||
total: 0,
|
||||
pageNum: 1,
|
||||
pageSize: 60,
|
||||
},
|
||||
realTotal: 0,
|
||||
loading: false,
|
||||
QualityStatisticsTable: [],
|
||||
mergeCells: [
|
||||
// { row: 0, col: 0, rowspan: 3, colspan: 0 },
|
||||
// { row: 0, col: 1, rowspan: 3, colspan: 0 },
|
||||
// { row: 0, col: 2, rowspan: 3, colspan: 0 },
|
||||
// { row: 0, col: 3, rowspan: 3, colspan: 0 },
|
||||
// { row: 0, col: 4, rowspan: 3, colspan: 0 },
|
||||
// { row: 0, col: 5, rowspan: 3, colspan: 0 },
|
||||
// { row: 0, col: 6, rowspan: 3, colspan: 0 },
|
||||
// { row: 0, col: 7, rowspan: 3, colspan: 0 },
|
||||
// { row: 0, col: 8, rowspan: 3, colspan: 0 },
|
||||
// { row: 0, col: 9, rowspan: 3, colspan: 0 },
|
||||
// { row: 0, col: 10, rowspan: 3, colspan: 0 },
|
||||
// { row: 0, col: 11, rowspan: 3, colspan: 0 },
|
||||
],
|
||||
hiddenCells: [],
|
||||
// 列表对照表
|
||||
tableCellDict: [],
|
||||
// 右键菜单
|
||||
tableMenu: {
|
||||
header: {
|
||||
options: [
|
||||
[
|
||||
{ code: 'hideColumn', name: '隐藏列', disabled: false },
|
||||
{ code: 'showAllColumn', name: '取消所有隐藏列', disabled: false },
|
||||
],
|
||||
],
|
||||
},
|
||||
body: {
|
||||
options: [
|
||||
[
|
||||
// { code: 'copy', name: '复制', prefixIcon: 'vxe-icon-copy', disabled: false },
|
||||
// { code: 'reload', name: '刷新', disabled: false },
|
||||
// { code: 'insertAt', name: '插入', disabled: false },
|
||||
{ code: 'remove', name: '删除', disabled: false },
|
||||
// { code: 'save', name: '保存', prefixIcon: 'vxe-icon-save', disabled: false },
|
||||
{ code: 'update', name: '修改', disabled: false },
|
||||
],
|
||||
],
|
||||
},
|
||||
visibleMethod: this.visibleMethod,
|
||||
},
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
//this.getList()
|
||||
this.QualityStatisticsTable = [
|
||||
{"name01":"","name02":"","name03":"","name04":"15°","name05":"","name06":"","name07":"",
|
||||
"name08":"","name09":"","name10":"","name11":"","name12":"","name45":"","name13":"20°>=85","name14":"",
|
||||
"name15":"","name16":"Gt0~1","name17":"","name18":"","name19":"","name20":"","name21":"",
|
||||
"name22":"垂直 LW<=13 SW<=30","name23":"","name24":"","name25":"","name26":""},
|
||||
|
||||
{"name01":"","name02":"","name03":"","name04":"25°","name05":"","name06":"","name07":"",
|
||||
"name08":"","name09":"","name10":"","name11":"","name12":"","name45":"","name13":"","name14":"",
|
||||
"name15":"","name16":"","name17":"","name18":"","name19":"","name20":"","name21":"",
|
||||
"name22":"","name23":"","name24":"","name25":"","name26":""},
|
||||
|
||||
{"name01":"","name02":"","name03":"","name04":"45°","name05":"","name06":"","name07":"",
|
||||
"name08":"","name09":"","name10":"","name11":"","name12":"","name45":"","name13":"","name14":"",
|
||||
"name15":"","name16":"","name17":"","name18":"","name19":"","name20":"","name21":"",
|
||||
"name22":"","name23":"","name24":"","name25":"","name26":""},
|
||||
|
||||
{"name01":"","name02":"","name03":"","name04":"75°","name05":"","name06":"","name07":"",
|
||||
"name08":"","name09":"","name10":"","name11":"","name12":"","name45":"","name13":"","name14":"",
|
||||
"name15":"","name16":"","name17":"","name18":"","name19":"","name20":"","name21":"",
|
||||
"name22":"垂直 LW<=5 SW<=25","name23":"","name24":"","name25":"","name26":""},
|
||||
|
||||
{"name01":"","name02":"","name03":"","name04":"110°","name05":"","name06":"","name07":"",
|
||||
"name08":"","name09":"","name10":"","name11":"","name12":"","name45":"","name13":"","name14":"",
|
||||
"name15":"","name16":"","name17":"","name18":"","name19":"","name20":"","name21":"",
|
||||
"name22":"","name23":"","name24":"","name25":"","name26":""},
|
||||
|
||||
{"name01":"","name02":"","name03":"","name04":"15°","name05":"","name06":"","name07":"",
|
||||
"name08":"","name09":"","name10":"","name11":"","name12":"","name45":"","name13":"20°>=85","name14":"",
|
||||
"name15":"","name16":"Gt0~1","name17":"","name18":"","name19":"","name20":"","name21":"",
|
||||
"name22":"垂直 LW<=13 SW<=30","name23":"","name24":"","name25":"","name26":""},
|
||||
|
||||
{"name01":"","name02":"","name03":"","name04":"25°","name05":"","name06":"","name07":"",
|
||||
"name08":"","name09":"","name10":"","name11":"","name12":"","name45":"","name13":"","name14":"",
|
||||
"name15":"","name16":"","name17":"","name18":"","name19":"","name20":"","name21":"",
|
||||
"name22":"","name23":"","name24":"","name25":"","name26":""},
|
||||
|
||||
{"name01":"","name02":"","name03":"","name04":"45°","name05":"","name06":"","name07":"",
|
||||
"name08":"","name09":"","name10":"","name11":"","name12":"","name45":"","name13":"","name14":"",
|
||||
"name15":"","name16":"","name17":"","name18":"","name19":"","name20":"","name21":"",
|
||||
"name22":"","name23":"","name24":"","name25":"","name26":""},
|
||||
|
||||
{"name01":"","name02":"","name03":"","name04":"75°","name05":"","name06":"","name07":"",
|
||||
"name08":"","name09":"","name10":"","name11":"","name12":"","name45":"","name13":"","name14":"",
|
||||
"name15":"","name16":"","name17":"","name18":"","name19":"","name20":"","name21":"",
|
||||
"name22":"垂直 LW<=5 SW<=25","name23":"","name24":"","name25":"","name26":""},
|
||||
|
||||
{"name01":"","name02":"","name03":"","name04":"110°","name05":"","name06":"","name07":"",
|
||||
"name08":"","name09":"","name10":"","name11":"","name12":"","name45":"","name13":"","name14":"",
|
||||
"name15":"","name16":"","name17":"","name18":"","name19":"","name20":"","name21":"",
|
||||
"name22":"","name23":"","name24":"","name25":"","name26":""},
|
||||
|
||||
{"name01":"","name02":"","name03":"","name04":"15°","name05":"","name06":"","name07":"",
|
||||
"name08":"","name09":"","name10":"","name11":"","name12":"","name45":"","name13":"20°>=85","name14":"",
|
||||
"name15":"","name16":"Gt0~1","name17":"","name18":"","name19":"","name20":"","name21":"",
|
||||
"name22":"垂直 LW<=13 SW<=30","name23":"","name24":"","name25":"","name26":""},
|
||||
|
||||
{"name01":"","name02":"","name03":"","name04":"25°","name05":"","name06":"","name07":"",
|
||||
"name08":"","name09":"","name10":"","name11":"","name12":"","name45":"","name13":"","name14":"",
|
||||
"name15":"","name16":"","name17":"","name18":"","name19":"","name20":"","name21":"",
|
||||
"name22":"","name23":"","name24":"","name25":"","name26":""},
|
||||
|
||||
{"name01":"","name02":"","name03":"","name04":"45°","name05":"","name06":"","name07":"",
|
||||
"name08":"","name09":"","name10":"","name11":"","name12":"","name45":"","name13":"","name14":"",
|
||||
"name15":"","name16":"","name17":"","name18":"","name19":"","name20":"","name21":"",
|
||||
"name22":"","name23":"","name24":"","name25":"","name26":""},
|
||||
|
||||
{"name01":"","name02":"","name03":"","name04":"75°","name05":"","name06":"","name07":"",
|
||||
"name08":"","name09":"","name10":"","name11":"","name12":"","name45":"","name13":"","name14":"",
|
||||
"name15":"","name16":"","name17":"","name18":"","name19":"","name20":"","name21":"",
|
||||
"name22":"垂直 LW<=5 SW<=25","name23":"","name24":"","name25":"","name26":""},
|
||||
|
||||
{"name01":"","name02":"","name03":"","name04":"110°","name05":"","name06":"","name07":"",
|
||||
"name08":"","name09":"","name10":"","name11":"","name12":"","name45":"","name13":"","name14":"",
|
||||
"name15":"","name16":"","name17":"","name18":"","name19":"","name20":"","name21":"",
|
||||
"name22":"","name23":"","name24":"","name25":"","name26":""},
|
||||
]
|
||||
this.mergeTable(5)
|
||||
},
|
||||
created() {},
|
||||
methods: {
|
||||
//todo 设置表合并行
|
||||
mergeTable(num) {
|
||||
this.mergeCells = []
|
||||
for (let i = 0; i < this.QualityStatisticsTable.length; i = i + num) {
|
||||
let count = 13 - this.hiddenCells.length;
|
||||
/* for (let j = 0; j < count; j++) {
|
||||
this.mergeCells.push({ row: i, col: j, rowspan: num, colspan: 0 })
|
||||
} */
|
||||
// 工单号,产品名称,颜色
|
||||
this.mergeCells.push({ row: i, col: 0, rowspan: num, colspan: 0 });
|
||||
this.mergeCells.push({ row: i, col: 1, rowspan: num, colspan: 0 });
|
||||
this.mergeCells.push({ row: i, col: 2, rowspan: num, colspan: 0 });
|
||||
|
||||
// 光泽-标准,光泽-判定,附着力-标准
|
||||
this.mergeCells.push({ row: i, col: 13, rowspan: num, colspan: 0 });
|
||||
this.mergeCells.push({ row: i, col: 15, rowspan: num, colspan: 0 });
|
||||
this.mergeCells.push({ row: i, col: 16, rowspan: num, colspan: 0 });
|
||||
|
||||
// 附着力-判定,膜厚-标准,膜厚-判定
|
||||
this.mergeCells.push({ row: i, col: 18, rowspan: num, colspan: 0 });
|
||||
this.mergeCells.push({ row: i, col: 19, rowspan: num, colspan: 0 });
|
||||
this.mergeCells.push({ row: i, col: 21, rowspan: num, colspan: 0 });
|
||||
|
||||
// 桔皮:标准,前3行,后2行
|
||||
this.mergeCells.push({ row: i, col: 22, rowspan: 3, colspan: 0 });
|
||||
this.mergeCells.push({ row: i+3, col: 22, rowspan: 2, colspan: 0 });
|
||||
|
||||
// 桔皮:实测;批次判定;检验员;备注
|
||||
this.mergeCells.push({ row: i, col: 23, rowspan: num, colspan: 0 });
|
||||
this.mergeCells.push({ row: i, col: 24, rowspan: num, colspan: 0 });
|
||||
this.mergeCells.push({ row: i, col: 25, rowspan: num, colspan: 0 });
|
||||
this.mergeCells.push({ row: i, col: 26, rowspan: num, colspan: 0 });
|
||||
// if(this.hiddenCells.includes('工单号')){
|
||||
|
||||
// }
|
||||
// this.mergeCells.push({ row: i, col: 10, rowspan: num, colspan: 0 })
|
||||
// this.mergeCells.push({ row: i, col: 11, rowspan: num, colspan: 0 })
|
||||
// this.mergeCells.push({ row: i, col: 12, rowspan: num, colspan: 0 })
|
||||
}
|
||||
},
|
||||
|
||||
// 通用行合并函数(将相同多列数据合并为一行)
|
||||
rowspanMethod ({ row, _rowIndex, column, visibleData }) {
|
||||
return;
|
||||
let fields = ['name01']
|
||||
let cellValue = row[column.field]
|
||||
if (fields.includes(column.field)) {
|
||||
let prevRow = visibleData[_rowIndex - 1]
|
||||
let nextRow = visibleData[_rowIndex + 1]
|
||||
if (prevRow && prevRow[column.field] === cellValue) {
|
||||
return { rowspan: 0, colspan: 0 }
|
||||
} else {
|
||||
let countRowspan = 1
|
||||
while (nextRow && nextRow[column.field] === cellValue) {
|
||||
nextRow = visibleData[++countRowspan + _rowIndex]
|
||||
}
|
||||
if (countRowspan > 1) {
|
||||
return { rowspan: countRowspan, colspan: 1 }
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
//todo 获取统计数据
|
||||
getList() {
|
||||
this.loading = true
|
||||
setTimeout(() => {
|
||||
this.loading = false
|
||||
}, 30000)
|
||||
let query = { ...this.search, ...this.pagination }
|
||||
delete query['reportType']
|
||||
delete query['total']
|
||||
switch (this.search.reportType) {
|
||||
case 0:
|
||||
GetQualityStatisticsTable_first(query).then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.QualityStatisticsTable = res.data.item1
|
||||
this.pagination.total = res.data.item2
|
||||
this.realTotal = parseInt(res.data.item2 / 3)
|
||||
this.mergeTable(3)
|
||||
this.loading = false
|
||||
}
|
||||
})
|
||||
break
|
||||
case 1:
|
||||
GetQualityStatisticsTable_again(query).then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.QualityStatisticsTable = res.data.item1
|
||||
this.pagination.total = res.data.item2
|
||||
this.realTotal = parseInt(res.data.item2 / 2)
|
||||
this.mergeTable(2)
|
||||
this.loading = false
|
||||
}
|
||||
})
|
||||
break
|
||||
case 2:
|
||||
GetQualityStatisticsTable_final(query).then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.QualityStatisticsTable = res.data.item1
|
||||
this.pagination.total = res.data.item2
|
||||
this.realTotal = parseInt(res.data.item2 / 2)
|
||||
this.mergeTable(2)
|
||||
this.loading = false
|
||||
}
|
||||
})
|
||||
break
|
||||
case 3:
|
||||
GetQualityStatisticsTable_total(query).then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.QualityStatisticsTable = res.data.item1
|
||||
this.pagination.total = res.data.item2
|
||||
this.realTotal = parseInt(res.data.item2 / 2)
|
||||
this.mergeTable(2)
|
||||
this.loading = false
|
||||
}
|
||||
})
|
||||
break
|
||||
}
|
||||
},
|
||||
|
||||
//todo 设置表头颜色
|
||||
headerCellStyle() {
|
||||
return {
|
||||
backgroundColor: '#2D3D51',
|
||||
color: '#ffffff',
|
||||
border: '1px solid #161823',
|
||||
fontSize: '18px',
|
||||
}
|
||||
},
|
||||
|
||||
cellStyle() {
|
||||
|
||||
return {
|
||||
border: '1px solid #161823',
|
||||
fontSize: '16px',
|
||||
fontWeight: '700',
|
||||
}
|
||||
},
|
||||
|
||||
//todo 导出excel
|
||||
exportDataEvent() {
|
||||
this.$refs.xTable.openExport()
|
||||
},
|
||||
// 导出全部数据
|
||||
exportAllDataEvent(isShowDetail = false) {
|
||||
let data = { ...this.search, ...this.pagination };
|
||||
data.type = this.search.reportType + 1;
|
||||
data.isShowDetail = isShowDetail;
|
||||
let fileName = this.reportType_options[this.search.reportType].label + (isShowDetail ? '-缺陷详情' : '-日生产报表') + '.xlsx';
|
||||
downloadStatisticsTableExcel(data).then(res => {
|
||||
console.log(res);
|
||||
let blobURL = URL.createObjectURL(res.data)
|
||||
//创建标签
|
||||
let link = document.createElement('a')
|
||||
//设置href
|
||||
link.href = blobURL
|
||||
//设置a标签的行为是download,不然就跳转了,同时设置名字是"test.ppt"
|
||||
link.download = fileName;
|
||||
//隐藏a标签,他只是下载,没必要出现
|
||||
link.style.display = "none"
|
||||
//模拟点击
|
||||
link.click()
|
||||
//最后,把这个URL进行销毁,免得他占内存
|
||||
URL.revokeObjectURL()
|
||||
})
|
||||
// this.download('/mes/qc/statistics/downloadStatisticsTableExcel');
|
||||
},
|
||||
// 合格率去除小数
|
||||
offsetRate(num) {
|
||||
if (num === null) {
|
||||
return ''
|
||||
}
|
||||
return parseInt(num)
|
||||
},
|
||||
// 数据去除0
|
||||
offsetValue(num) {
|
||||
if (num === 0 || num === '0') {
|
||||
return ''
|
||||
}
|
||||
return num
|
||||
},
|
||||
// 右键菜单
|
||||
contextMenuClickEvent({ menu, row, column }) {
|
||||
const $table = this.$refs.xTable
|
||||
switch (menu.code) {
|
||||
case 'hideColumn':
|
||||
this.hideColumn(column);
|
||||
break
|
||||
case 'showAllColumn':
|
||||
this.resetColumn()
|
||||
break
|
||||
case 'remove':
|
||||
this.removeData(row)
|
||||
// $table.remove(row)
|
||||
case 'update':
|
||||
this.updateData(row)
|
||||
break
|
||||
}
|
||||
},
|
||||
// 隐藏列
|
||||
hideColumn(column) {
|
||||
const $table = this.$refs.xTable;
|
||||
$table.hideColumn(column);
|
||||
this.hiddenCells.push(column.title);
|
||||
this.resetMergeTable();
|
||||
},
|
||||
// 取消所有隐藏列
|
||||
resetColumn() {
|
||||
const $table = this.$refs.xTable;
|
||||
this.hiddenCells = [];
|
||||
$table.resetColumn();
|
||||
this.resetMergeTable();
|
||||
},
|
||||
resetMergeTable(){
|
||||
if(this.search.reportType === 3){
|
||||
this.mergeTable(2);
|
||||
}else{
|
||||
this.mergeTable(3);
|
||||
}
|
||||
|
||||
},
|
||||
// 删除数据
|
||||
removeData(row) {
|
||||
this.$confirm('此操作将永久删除该条记录, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
}).then(() => {
|
||||
const deleteData = {
|
||||
workorderid: row.workorderId,
|
||||
}
|
||||
deleteStatisticsTable(deleteData).then((res) => {
|
||||
if (res.code === 200) {
|
||||
this.$message({
|
||||
type: 'success',
|
||||
message: '删除成功!',
|
||||
})
|
||||
this.getList()
|
||||
} else {
|
||||
this.$message({
|
||||
type: 'error',
|
||||
message: '删除失败!请检查!',
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
//修改数据
|
||||
updateDate(row) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
Reference in New Issue
Block a user