烧结电子档案添加及外协模块修改

dev-scheduling
jinna 4 weeks ago
parent d3f06afd6a
commit 0d6b057ad4
  1. 9
      src/api/outsourcingManagement/oemApproval.js
  2. 38
      src/api/outsourcingManagement/oemOrder.js
  3. 9
      src/api/qualityManagement/inspectionArchiving/eRecord.js
  4. 30
      src/views/oem/facInnerApproval/approvalDialog.vue
  5. 1
      src/views/oem/facInnerApproval/index.vue
  6. 28
      src/views/oem/oemApproval/approvalDialog.vue
  7. 103
      src/views/oem/oemOrder/batchDialog.vue
  8. 58
      src/views/oem/oemOrder/index.vue
  9. 23
      src/views/oem/oemProcess/index.vue
  10. 108
      src/views/qualityManagement/inspectionArchiving/ERecord/index.vue
  11. 165599
      src/views/qualityManagement/inspectionArchiving/ERecord/json/glassSealing.json
  12. 97
      src/views/qualityManagement/inspectionArchiving/ERecord/printDialog.vue
  13. 10
      src/views/qualityManagement/inspectionArchiving/ERecord/printOrder.json
  14. 568
      src/views/qualityManagement/inspectionArchiving/ERecord/printSjDialog.vue
  15. 32
      src/views/qualityManagement/reviewFormMess/options.js

@ -17,4 +17,13 @@ export const oemApproval = data => {
method: 'post',
data: data
});
};
// 批量审批
export const oemApprovalBatch = data => {
return request({
url: '/api/blade-desk/oemOrder/batchApproval',
method: 'post',
data: data
});
};

@ -52,4 +52,40 @@ export const getPrintList = params => {
method: 'get',
params
});
};
};
// 获取分批数据
export const getBatchData = (params) =>{
return request({
url:"/api/blade-desk/oemOrder/prepareOemBatches",
method:"get",
params
})
}
// 外协分批
export const setBatch = (data) =>{
return request({
url:"/api/blade-desk/oemOrder/inOemBatches",
method:"post",
data
})
}
// 合格证跳转
export const turnCertificate = (data) =>{
return request({
url:"/api/blade-desk/oemOrder/reviewQualityRecords",
method:"post",
data
})
}
// 质量记录跳转
export const turnQuality = (data) =>{
return request({
url:"/api/blade-desk/oemOrder/reviewQualityRecords",
method:"post",
data
})
}

@ -26,4 +26,13 @@ export const getWordDetail = (data) =>{
method:'post',
data
})
}
// 烧结打印
export const getBurnDetail = (data) =>{
return request({
url:'/api/blade-desk/QA/InspectionTask/pagePrintSj',
method:'post',
data
})
}

@ -11,7 +11,7 @@
</el-dialog>
</template>
<script>
import {oemApproval} from "@/api/outsourcingManagement/oemApproval"
import {oemApproval,oemApprovalBatch} from "@/api/outsourcingManagement/oemApproval"
export default {
props: {
showDialog: {
@ -84,16 +84,34 @@ export default {
submit(){
this.$refs.form.validate((valid, done, msg) => {
if(valid){
// this.$emit('approval', this.formData)
oemApproval({
...this.formData,
workOrderRunId:this.woId
}).then(res =>{
console.log('this.woID-------',this.woId)
let arr = this.woId.split(',')
console.log('arr-------',arr)
let params = []
arr.map(item =>{
params.push({
...this.formData,
workOrderRunId:item
})
})
console.log('params-------',params)
oemApprovalBatch(params).then(res =>{
if(res.data.code == 200){
this.$message.success('审批成功')
this.closeDialog(true)
}
})
// this.$emit('approval', this.formData)
// oemApproval({
// ...this.formData,
// workOrderRunId:this.woId
// }).then(res =>{
// if(res.data.code == 200){
// this.$message.success('')
// this.closeDialog(true)
// }
// })
}
})
},

@ -287,7 +287,6 @@ export default {
this.page.pageSize = pageSize
},
handleApproval(type,row) {
console.log('row--------',row)
if(type == 'batch' && this.selectionList.length == 0){
this.$message.error("请至少选择一条数据");
return

@ -11,7 +11,7 @@
</el-dialog>
</template>
<script>
import {oemApproval} from "@/api/outsourcingManagement/oemApproval"
import {oemApproval,oemApprovalBatch} from "@/api/outsourcingManagement/oemApproval"
export default {
props: {
showDialog: {
@ -85,15 +85,33 @@ export default {
this.$refs.form.validate((valid, done, msg) => {
if(valid){
// this.$emit('approval', this.formData)
oemApproval({
...this.formData,
workOrderRunId:this.woId
}).then(res =>{
let arr = this.woId.split(',')
console.log('arr-------',arr)
let params = []
arr.map(item =>{
params.push({
...this.formData,
workOrderRunId:item
})
})
console.log('params-------',params)
oemApprovalBatch(params).then(res =>{
if(res.data.code == 200){
this.$message.success('审批成功')
this.closeDialog(true)
}
})
// oemApproval({
// ...this.formData,
// workOrderRunId:this.woId
// }).then(res =>{
// if(res.data.code == 200){
// this.$message.success('')
// this.closeDialog(true)
// }
// })
}
})
},

@ -0,0 +1,103 @@
<template>
<el-dialog title="分批" v-model="setCrewShow" :before-close="cancel" width="45%" @open="open">
<el-form ref="form" :model="batchForm" :rules="batchRules" label-width="90">
<el-form-item label="分批数量" prop="makeQty">
<el-input-number style="width:100%;" controls-position="right" v-model="batchForm.makeQty"></el-input-number>
</el-form-item>
<el-form-item label="车间订单号" prop="woCode">
<el-input disabled v-model="batchForm.woCode"></el-input>
</el-form-item>
<el-form-item label="流程卡号" prop="cardNo">
<el-input disabled v-model="batchForm.cardNo"></el-input>
</el-form-item>
<el-form-item label="批次号" prop="batchNo">
<el-input disabled v-model="batchForm.batchNo"></el-input>
</el-form-item>
<el-form-item label="备注" prop="memo">
<el-input type="textarea" v-model="batchForm.memo"></el-input>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="cancel">取消</el-button>
<el-button type="primary" @click="submit()"> 确认</el-button>
</div>
</template>
</el-dialog>
</template>
<script>
import {getBatchData,setBatch} from "@/api/outsourcingManagement/oemOrder"
export default {
props:{
showBatch:{
type:Boolean,
default:false
},
checkRow:{
type:Object,
default:() => {}
}
},
data(){
return{
setCrewShow:false,
batchForm:{
makeQty:1,
},
batchRules:{
makeQty:[{required: true, message: '请输入分批数量', trigger: 'blur'}],
woCode:[{required: true, message: '请输入车间订单号', trigger: 'blur'}],
cardNo:[{required: true, message: '请输入流程卡号', trigger: 'blur'}],
batchNo:[{required: true, message: '请输入批次号', trigger: 'blur'}],
}
}
},
created(){
this.setCrewShow = this.showBatch;
this.getData()
},
methods:{
getData(){
console.log('111111111111111')
getBatchData({
worId:this.checkRow.id
}).then(res =>{
console.log('res----------',res)
this.batchForm = {
...this.batchForm,
woCode:res.data.data.woCode,
cardNo:res.data.data.cardNo,
batchNo:res.data.data.batchNo
}
})
},
cancel(val){
this.setCrewShow = false
this.$emit('cancel', val);
},
submit(){
this.$refs.form.validate((valid) => {
if(valid){
console.log('11111111111111111111111111111111111')
setBatch({
id:this.checkRow.woId,
...this.batchForm
}).then(res =>{
if(res.data.code == 200){
this.$message.success('分批成功')
this.cancel(true)
}
}).catch(err =>{
this.cancel(false)
})
}
})
}
}
}
</script>
<style>
</style>

@ -19,7 +19,7 @@
:row-class-name="rowCLassName"
>
<template #menu-left>
<el-button type="primary" @click="materialFormPrint">领料单打印</el-button>
<!-- <el-button type="primary" @click="materialFormPrint">领料单打印</el-button> -->
</template>
<template #menu-right="{ size }">
@ -56,15 +56,15 @@
<template
v-if="scope.row.approvalStatus != 2 && scope.row.runStatus < 15"
>
<el-button type="primary" link @click="takeBack(scope.row)">收回</el-button>
<el-button type="primary" link @click="turnFacInner(scope.row)"
>转厂内</el-button
>
<el-button type="text" @click="takeBack(scope.row)">收回</el-button>
<el-button type="text" v-if="scope.row.oemStatus == 1 " @click="turnFacInner(scope.row)" >转厂内</el-button>
<el-button type="text" @click="inBatches(scope.row)" >分批</el-button>
</template>
<template
v-if="scope.row.approvalStatus != 2 && scope.row.runStatus >= 15"
>
<span style="color: red">订单{{ scope.row.runStatusTitle }}</span>
v-if="scope.row.approvalStatus != 2 && scope.row.runStatus >= 15">
<!-- <span style="color: red">订单{{ scope.row.runStatusTitle }}</span> -->
<el-button type="text" @click="qualityRecords(scope.row)">质量记录</el-button>
<el-button type="text" @click="certificate(scope.row)">合格证</el-button>
</template>
</template>
<!-- <template #virtualMac="scope">
@ -118,16 +118,19 @@
></manufacturerChange>
<!-- 领料单打印 -->
<materialPrint v-if="showPrint" :showPrint="showPrint" @cancel="cancel"></materialPrint>
<!-- 分批处理 -->
<batch-dialog v-if="showBatch" :showBatch="showBatch" :checkRow="checkRow" @cancel="cancel"></batch-dialog>
</basic-container>
</template>
<script>
import {getList,oemBack} from "@/api/outsourcingManagement/oemOrder"
import {getList,oemBack,turnQuality,turnCertificate} from "@/api/outsourcingManagement/oemOrder"
import { mapGetters } from "vuex";
import memoDialog from "./memoDialog.vue";
import takeBack from "./takeBack.vue";
import turnFacInner from "./turnFacInner.vue";
import manufacturerChange from "./manufacturerChange.vue";
import materialPrint from "./materialPrint.vue"
import batchDialog from "./batchDialog.vue";
export default {
components: {
memoDialog,
@ -135,6 +138,7 @@ export default {
turnFacInner,
manufacturerChange,
materialPrint,
batchDialog
// setCraftAbility
},
data() {
@ -144,6 +148,7 @@ export default {
rowItem: {},
takeBackOpen: false,
worId: "",
showBatch:false,
memoDialogOpen: false,
parameter: {},
ocId: "89889",
@ -310,6 +315,20 @@ export default {
// },
// ],
},
{
label: "外协状态",
prop: "oemStatusList",
type:"select",
// bind: 'prWorkOrder.runStatus',
sortable: true,
hide: true,
search: true,
dicData:[
{label:"待外协",value:'1'},
{label:"外协中",value:'2'},
{label:"已完成",value:'3'},
]
},
{
label: "订单状态",
prop: "runStatusName",
@ -355,6 +374,11 @@ export default {
// },
// ],
},
{
label:'外协状态',
prop:"oemStatusTitle",
search:false,
},
{
label: "批次号",
prop: "batchNo",
@ -567,6 +591,7 @@ export default {
},
data: [],
changeOpen: false,
checkRow:{},
};
},
computed: {
@ -612,6 +637,16 @@ export default {
this.closeObj = { woId, status };
this.memoDialogOpen = true;
},
qualityRecords(row){
turnQuality({key:row.deliverKey}).then(res =>{
window.open(res.data.msg)
})
},
certificate(row){
turnCertificate({key:row.deliverKey}).then(res =>{
window.open(res.data.msg)
})
},
//
memoDialogCancel(flag, memo) {
this.memoDialogOpen = false;
@ -645,6 +680,10 @@ export default {
this.ecId = ecId;
this.showIp = true;
},
inBatches(row){
this.checkRow = row
this.showBatch = true
},
cancel(isRefresh) {
this.showPrint = false
this.workRateOpen = false;
@ -656,6 +695,7 @@ export default {
this.updateMakeQtyOpen = false;
this.memoDialogOpen = false;
this.changeOpen = false;
this.showBatch = false
if (isRefresh) {
this.refresh();
}

@ -152,6 +152,29 @@ export default {
},
],
},
{
label:'手动结算',
prop:"manual",
type:'switch',
span: 24,
dicData:[
{
label:'是',
value:'1'
},
{
label:'否',
value:'0'
}
],
rules: [
{
required: true,
message: "请选择是否手动结算",
trigger: "blur",
},
],
}
],
},
form: {},

@ -20,12 +20,10 @@
@on-load="onLoad"
>
<template #menu="{ row }">
<span v-if="row.yieldType !== 1">
<span>
<el-button type="text" @click="inspectionRecord(row)">检验记录</el-button>
<el-button type="text" @click="rbPrint(row,2)">热表打印</el-button>
</span>
<span v-else>
<el-button type="text" @click="handleDelete">烧结打印</el-button>
<el-button v-if="row.yieldType == 1" type="text" @click="rbPrint(row,2)">热表打印</el-button>
<el-button v-else type="text" @click="sjPrint(row)">烧结打印</el-button>
</span>
<el-button type="text" @click="handleDelete">测厚打印</el-button>
</template>
@ -99,6 +97,13 @@
</el-form-item>
</template>
</el-form>
<el-form ref="form" label-width="80px" class="vd-form-row" v-if="planOpenSj">
<template v-for="(item, index) in prWorkPlanList" :key="index">
<el-form-item :label="'工序'+item.orders">
<el-checkbox v-model="checkedList[index]" :label="item.procedureSet.ppsName" border size="small" />
</el-form-item>
</template>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="previewOpen = false"> </el-button>
@ -109,6 +114,8 @@
<print-dialog v-if="showPrint" :show-print="showPrint" :rbChecked="rbChecked" :checked-list="checkedList"
:printType="printType" :woId="checkWoId"
@closeDialog="closeDialog"></print-dialog>
<print-sj-dialog v-if="showSjPrint" :show-print="showSjPrint" @closeDialog="closeDialog"
:planList="checkedList" :checkRow="checkRow"></print-sj-dialog>
</basic-container>
</template>
@ -117,10 +124,12 @@ import {getList,getProcessList} from "@/api/qualityManagement/inspectionArchivin
import { mapGetters } from 'vuex';
import website from '@/config/website';
import printDialog from './printDialog.vue';
import printSjDialog from './printSjDialog.vue';
export default {
components:{
printDialog
printDialog,
printSjDialog
},
data() {
return {
@ -706,13 +715,16 @@ export default {
],
},
planOpenSj:false,
showSjPrint:false,
data: [],
prWorkPlanList:[],
dialogType:1,
prWorkChecked:[],
rbChecked:[true,false,false,false],
printType:'',
checkWoId:''
checkWoId:'',
checkRow:{}
};
},
computed: {
@ -727,9 +739,15 @@ export default {
},
methods: {
submitPrint(){
this.previewOpen = false
this.printType = '热表'
this.showPrint = true
if(this.planOpenSj){
this.previewOpen = false
this.showSjPrint = true
}else{
this.previewOpen = false
this.printType = '热表'
this.showPrint = true
}
},
printPreview(val,type){
this.dialogType = type
@ -738,30 +756,64 @@ export default {
},
closeDialog(){
this.showPrint = false
this.showSjPrint = false
this.previewOpen = false
},
sjPrint(row){
this.checkedList = []
this.prWorkPlanList = []
this.checkRow = row
// if(row.yieldType == 2){
getProcessList({
woId:'2019646268865155074'
// woId:row.woId
}).then(res =>{
res.data.data.forEach(ele =>{
this.prWorkPlanList.push({
orders:ele.ppsCode,
procedureSet:{
ppsName:ele.ppsName
}
})
})
this.checkedList = []
for(let i = 0;i<this.prWorkPlanList.length;i++){
this.checkedList.push(true)
}
this.dialogType = null
this.planOpenSj = true
this.previewOpen = true
})
// }else{
// this.showSjPrint = true
// }
},
rbPrint(row,type){
this.dialogType = type
this.planOpenSj = false
this.prWorkPlanList = []
this.checkWoId = '2019646268865155074'
// getProcessList({
// woId:'2019646268865155074'
// }).then(res =>{
// console.log('res==========',res)
// res.data.data.forEach(ele =>{
// this.prWorkPlanList.push({
// orders:ele.ppsCode,
// procedureSet:{
// ppsName:ele.ppsName
// }
// })
// })
// this.checkedList = []
// for(let i = 0;i<this.prWorkPlanList.length;i++){
// this.checkedList.push(true)
// }
this.checkedList = []
// this.checkWoId = '2019646268865155074'
this.woId = row.woId
getProcessList({
// woId:'2019646268865155074'
woId:row.woId
}).then(res =>{
console.log('res==========',res)
res.data.data.forEach(ele =>{
this.prWorkPlanList.push({
orders:ele.ppsCode,
procedureSet:{
ppsName:ele.ppsName
}
})
})
this.checkedList = []
for(let i = 0;i<this.prWorkPlanList.length;i++){
this.checkedList.push(true)
}
this.previewOpen = true
// })
})
},
inspectionRecord(row){
console.log('row=============',row)

@ -58,7 +58,7 @@
<tr v-if="index != 0" style="height: 20px;"></tr>
<tr>
<td colspan="9" style="font-size:16px;">
{{item.orders}} - {{item.ppsName}} 工序详情
{{item.orders}} - {{item.procedureSet.ppsName}} 工序详情
</td>
</tr>
<tr v-if="item.selfInspection && JSON.stringify(item.selfInspection) != '{}'">
@ -87,15 +87,29 @@
<td colspan="1" v-if="item.procedureSet.ppsName=='荧光检测'">
{{ (item.procedureSet.ppsName.indexOf('检验') != -1 || item.procedureSet.ppsName == '镀后接收') ? '/' : '检验员确认' }}
</td>
<td colspan="4" v-if="item.procedureSet.ppsName=='荧光检测'">曹鹏飞/2025-06-28</td>
<td v-else>{{ (item.procedureSet.ppsName.indexOf('检验') != -1 || item.procedureSet.ppsName == '镀后接收') ? '/' : '检验员确认' }}</td>
<template v-if="item.procedureSet.ppsName=='荧光检测'">
<td colspan="4"><img :src="testManImg(index) ? testManImg(index):'/'" style="width:70px;height:25px;margin:6px 0 6px 0"></br>{{ item.factEndTime || '/' }}</td>
</template>
<td colspan="4" v-else>
<!-- {{ (item.procedureSet.ppsName.indexOf('检验') != -1 || item.procedureSet.ppsName == '镀后接收') ? '/' : (testMan(index) ? (testMan(index) + ' / '+item.factEndTime):'/') }} -->
曹鹏飞1/2025-06-28
</td>
</tr>
<tr v-else>
<td :colspan="!item.jyy ? '4' : '1'">操作者</td>
<td :colspan="!item.jyy ? '5' : '4'">{{item.createMan || '/'}}</td>
<td colspan="1">操作者</td>
<td colspan="4">{{item.createMan || '/'}}</td>
<td colspan="1" v-if="item.procedureSet.ppsName=='荧光检测'">
{{ (item.procedureSet.ppsName.indexOf('检验') != -1 || item.procedureSet.ppsName == '镀后接收') ? '/' : '检验员确认' }}
</td>
<td colspan="3" v-if="item.procedureSet.ppsName=='荧光检测'">曹鹏飞/2025-06-28</td>
<td v-else>{{ (item.procedureSet.ppsName.indexOf('检验') != -1 || item.procedureSet.ppsName == '镀后接收') ? '/' : '检验员确认' }}</td>
<template v-if="item.procedureSet.ppsName=='荧光检测'">
<td colspan="3"><img :src="testManImg(index) ? testManImg(index):'/'" style="width:70px;height:25px;margin:6px 0 6px 0"></br>{{ item.factEndTime || '/' }}</td>
</template>
<td colspan="3" v-else>
<!-- {{ (item.procedureSet.ppsName.indexOf('检验') != -1 || item.procedureSet.ppsName == '镀后接收') ? '/' : (testMan(index) ? (testMan(index) + ' / '+item.factEndTime):'/') }} -->
曹鹏飞2/2025-06-28
</td>
</tr>
<tr v-if="item.deviceCode && item.deviceCode != ''">
<td colspan="1">设备编号</td>
@ -103,7 +117,7 @@
<td colspan="1">有效期</td>
<td colspan="3"></td>
</tr>
<tr v-if="item.tankInfo && JSON.stringify(item.tankInfo) != {}">
<tr v-if="item.slotList && item.slotList.length>0">
<td colspan="9" >同槽信息</td>
</tr>
<tr v-if="item.tankInfo && JSON.stringify(item.tankInfo) != {}">
@ -114,7 +128,7 @@
<td colspan="1">挂具面积(dm²)</td>
<td colspan="3">{{item.tankInfo.gjArea}}</td>
</tr>
<template v-if="item.tankInfo && JSON.stringify(item.tankInfo) != {} && item.tankInfo.slotList && item.tankInfo.slotList.length != 0">
<template v-if="item.slotList && item.slotList.length>0">
<tr>
<td colspan="1">同槽编号</td>
<td colspan="2">零件号</td>
@ -124,8 +138,8 @@
<td>面积(dm²)</td>
<td colspan="2">总面积(dm²)</td>
</tr>
<tr v-for="(slot,index) in item.tankInfo.slotList">
<td v-if="index === 0" :rowspan="item.tankInfo.slotList.length">{{slot.mtnCode || '/'}}</td>
<tr v-for="(slot,index) in item.slotList">
<td v-if="index === 0" :rowspan="item.slotList.length">{{slot.mtnCode || '/'}}</td>
<td v-if="!slot.cdj" colspan="2">{{slot.partCode || '/'}}</td>
<td v-if="!slot.cdj" colspan="1">{{slot.batchNo || '/'}}</td>
<td v-if="!slot.cdj" >{{slot.workQty || '/'}}</td>
@ -133,7 +147,7 @@
<td v-if="!slot.cdj" >{{slot.area || '/'}}</td>
<td v-if="slot.cdj" colspan="5">{{slot.cdj}}</td>
<td v-if="slot.cdj">{{slot.cdjArea}}</td>
<td v-if="index === 0" :rowspan="item.tankInfo.slotList.length" colspan="2">{{slot.sumArea || '/'}}</td>
<td v-if="index === 0" :rowspan="item.slotList.length" colspan="2">{{slot.sumArea || '/'}}</td>
</tr>
</template>
<template v-if="item.dsRbFilePreserveSlotList && item.dsRbFilePreserveSlotList.length>0">
@ -540,17 +554,44 @@ export default {
}
},
created(){
console.log('check---------',this.checkedList)
console.log('printType---------',this.printType)
const { modelOne, modelTwo, modelThree, modelFour, modelFive } =
printOrderJson.data;
this.modelOne = modelOne
this.modelTwo = modelTwo
console.log('modelOne----------',this.modelOne)
console.log('modelTwo----------',this.modelTwo)
this.modelThree = modelThree
getWordDetail({
woId:this.woId,
moduleList:this.rbChecked,
planList:this.checkedList
}).then(res =>{
console.log('res----------',res)
})
},
methods:{
//
testMan(index) {
let testWorkPlan = null;
for (var i = index; i < this.modelTwo.length; i++) {
if (this.modelTwo[i].procedureSet.ppsName.indexOf('检验') != -1) {
if (testWorkPlan == null) {
testWorkPlan = this.modelTwo[i];
if (this.modelThree && this.modelThree.checkList) {
const item = this.modelThree.checkList.find(
(item) =>
item.testOrders.indexOf(testWorkPlan.orders + '-') != -1
);
let checkInfo = this.modelTwo[i].procedureSet.ppsName=='荧光检测'?item.imgUrl:item.checkName
return checkInfo;
} else {
return null;
}
}
}
}
},
getTemplateComponent(type) {
const componentName = getTemplateComponent(type);
return componentName;
@ -676,13 +717,17 @@ export default {
}
table {
width: 100%;
table-layout: fixed;
tr {
width: 100%;
// table-layout: fixed;
page-break-inside: avoid;
break-inside: avoid;
// break-inside: avoid;
}
td {
width: 11.1%;
// width: 11.1%;
width: 168px;
height: 30px;
border: 1px solid #000;
background: transparent;
@ -752,13 +797,31 @@ export default {
table {
width: 98% !important;
table-layout: fixed;
border-collapse: collapse;
tr {
page-break-inside: avoid;
break-inside: avoid;
// break-inside: avoid;
td {
width: 8.1%;
// &:first-child{
// width: 55px;
// }
}
}
}
.print-table,
.print-table td,
.print-table th {
border-collapse: collapse !important;
box-sizing: border-box !important;
page-break-inside: avoid !important;
}
}
}
</style>

@ -4262,7 +4262,7 @@
"rfpsId": null,
"rfpsType": 7,
"slotIndex": 21.0,
"slotName": "34#溢流双水洗"
"slotName": "34#溢流双水洗22"
},
{
"childrenList": [
@ -28612,7 +28612,7 @@
"rfpsId": null,
"rfpsType": 7,
"slotIndex": 21.0,
"slotName": "34#溢流双水洗"
"slotName": "34#溢流双水洗33"
},
{
"childrenList": [
@ -50628,7 +50628,7 @@
"rfpsId": null,
"rfpsType": 7,
"slotIndex": 21.0,
"slotName": "34#溢流双水洗"
"slotName": "34#溢流双水洗1qqqq"
},
{
"childrenList": [
@ -65575,7 +65575,7 @@
"tempRange": null,
"tempSlot": null,
"vSpeed": null,
"workSlot": "35#溢流纯水洗"
"workSlot": "35#溢流纯水洗11"
},
{
"createMan": null,
@ -70149,7 +70149,7 @@
"rfpsId": null,
"rfpsType": 7,
"slotIndex": 21.0,
"slotName": "34#溢流双水洗"
"slotName": "34#溢流双"
},
{
"childrenList": [

@ -0,0 +1,568 @@
<template>
<el-dialog title="打印预览" append-to-body :modelValue="showPrint" fullscreen width="85%"
@close="closeDialog" :custom-class="isPrint ? 'noprint' : 'rbdyBox'">
<!-- @click="printData" -->
<el-button v-print="printConfig" type="primary" class="printButton no-print"> </el-button>
<div v-loading="loading" id="printMe" ref="printContent" class="printBox">
<!-- <div class="printTitle">
<div style="text-align:left;">JONHON受控</div>
<div style="width: 88%;text-align:center;">热表分厂质量记录卡</div>
</div> -->
<div class="fixTopLeft">JONHON受控</div>
<div class="printTitle">热表分厂质量记录卡</div>
<div class="tableNo">表号</div>
<table id="cus-table" cellspacing="0" style="width:100%">
<template v-if="dsPart!= null">
<tr>
<td colspan="1">零件号</td>
<td colspan="2">{{dsPart.partCode || '/'}}</td>
<td colspan="1">产品型号</td>
<td colspan="2">{{ dsPart.productType || '/' }}</td>
<td colspan="1">生产标识</td>
<td colspan="2">{{dsPart.prodIdent || '/'}}</td>
</tr>
<tr>
<td colspan="1">批次号</td>
<td colspan="1">{{dsPart.batchNo || '/'}}</td>
<td colspan="1">名称</td>
<td colspan="1">{{dsPart.partName || '/'}}</td>
<td colspan="1">是否印字</td>
<td colspan="1">{{dsPart.isWording || '/'}}</td>
<td colspan="1">数量</td>
<td colspan="2">{{ dsPart.qty || '/' }}</td>
</tr>
<tr>
<td colspan="1">壳体面积(dm²)</td>
<td colspan="1">{{dsPart.batchNo || '/'}}</td>
<td colspan="1">壳体材料</td>
<td colspan="1">{{dsPart.partName || '/'}}</td>
<td colspan="1">插针面积(dm²)</td>
<td colspan="1">{{dsPart.isWording || '/'}}</td>
<td colspan="1">插针材料</td>
<td colspan="2">{{ dsPart.qty || '/' }}</td>
</tr>
<tr>
<td colspan="1">壳体镀种</td>
<td colspan="5">{{dsPart.hardness || '/'}}</td>
<td colspan="1">插针镀种</td>
<td colspan="2">{{ dsPart.area || '/' }}</td>
</tr>
<tr>
<td colspan="1">镀种</td>
<td colspan="5">{{ dsPart.plate || '/' }}</td>
<td colspan="1">材料</td>
<td colspan="2">{{ dsPart.material || '/' }}</td>
</tr>
<tr>
<td colspan="1">工艺路线</td>
<td colspan="8">{{ dsPart.craftWay || '/' }}</td>
</tr>
<tr>
<td colspan="1">质量信息</td>
<td colspan="8">{{ dsPart.keyInfo || '/' }}</td>
</tr>
<tr>
<td colspan="1">色标色带</td>
<td colspan="8">{{ dsPart.keyInfo || '/' }}</td>
</tr>
</template>
<template v-if="prWorkPlanList && prWorkPlanList.length>0">
<tr>
<td colspan="9" style="font-size:21px;">生产过程</td>
</tr>
<template v-for="(item,index) in prWorkPlanList" >
<tr v-if="index != 0" style="height: 20px;"></tr>
<tr>
<td colspan="9" style="font-size:16px;">
{{item.orders}} - {{item.procedureSet.ppsName}} 工序详情
</td>
</tr>
<tr v-if="item.selfInspection && JSON.stringify(item.selfInspection) != '{}'">
<td colspan="1">自检</td>
<td colspan="4">{{item.selfInspection.content}}</td>
<td colspan="1">结论</td>
<td colspan="3">{{item.selfInspection.conclusion}}</td>
</tr>
<template v-if="item.auditFile && JSON.stringify(item.auditFile) != '{}'">
<tr>
<td colspan="5">工艺文件编号/版本号</td>
<td colspan="4">{{item.auditFile.papers || '/'}}</td>
</tr>
<tr>
<td colspan="5">CPS文件编号/版本号</td>
<td colspan="4">{{item.auditFile.referenceFile || '/'}}</td>
</tr>
</template>
<tr v-if="item.procedureSet.ppsName == '玻璃封接组装' || item.procedureSet.ppsName == '玻璃封接卸模' || item.procedureSet.ppsName == '玻璃封接(链式炉)'">
<td colspan="1">操作者</td>
<td colspan="1">{{item.createMan || '/'}}</td>
<td colspan="1" v-if="item.qualifiedQty">数量</td>
<td colspan="1" v-if="item.qualifiedQty">{{item.qualifiedQty}}</td>
<td colspan="1" v-if="item.fbCode">飞拔编号</td>
<td colspan="1" v-if="item.fbCode">{{item.fbCode}}</td>
<td colspan="2">检验员确认</td>
<td colspan="3">曹鹏飞1/2025-06-28</td>
</tr>
<!-- <tr v-if="(item.gjCode && !item.fbCode && !item.deviceCode) || item.fbCode">
<td colspan="1">操作者</td>
<td colspan="1">{{item.createMan || '/'}}</td>
<td colspan="1" v-if="item.gjCode && !item.fbCode && !item.deviceCode ">挂具编号</td>
<td colspan="1" v-if="item.gjCode && !item.fbCode && !item.deviceCode">{{item.gjCode || '/'}}</td>
<td colspan="1" v-if="item.fbCode">飞拔编号</td>
<td colspan="1" v-if="item.fbCode">{{item.fbCode || '/'}}</td>
<td colspan="1" v-if="item.procedureSet.ppsName=='荧光检测'">
{{ (item.procedureSet.ppsName.indexOf('检验') != -1 || item.procedureSet.ppsName == '镀后接收') ? '/' : '检验员确认' }}
</td>
<td v-else>{{ (item.procedureSet.ppsName.indexOf('检验') != -1 || item.procedureSet.ppsName == '镀后接收') ? '/' : '检验员确认' }}</td>
<template v-if="item.procedureSet.ppsName=='荧光检测'">
<td colspan="4"><img :src="testManImg(index) ? testManImg(index):'/'" style="width:70px;height:25px;margin:6px 0 6px 0"></br>{{ item.factEndTime || '/' }}</td>
</template>
<td colspan="4" v-else>
曹鹏飞1/2025-06-28
</td>
</tr>
<tr v-else>
<td colspan="1">操作者</td>
<td colspan="4">{{item.createMan || '/'}}</td>
<td colspan="1" v-if="item.procedureSet.ppsName=='荧光检测'">
{{ (item.procedureSet.ppsName.indexOf('检验') != -1 || item.procedureSet.ppsName == '镀后接收') ? '/' : '检验员确认' }}
</td>
<td v-else>{{ (item.procedureSet.ppsName.indexOf('检验') != -1 || item.procedureSet.ppsName == '镀后接收') ? '/' : '检验员确认' }}</td>
<template v-if="item.procedureSet.ppsName=='荧光检测'">
<td colspan="3"><img :src="testManImg(index) ? testManImg(index):'/'" style="width:70px;height:25px;margin:6px 0 6px 0"></br>{{ item.factEndTime || '/' }}</td>
</template>
<td colspan="3" v-else>
曹鹏飞2/2025-06-28
</td>
</tr> -->
<tr v-if="item.deviceCode && item.deviceCode != ''">
<td colspan="1">设备编号</td>
<td colspan="3">{{item.deviceCode || '/'}}</td>
<td colspan="2">有效期</td>
<td colspan="3"></td>
</tr>
<template v-if="item.procedureSet.ppsName == '玻璃封接(链式炉)'">
<tr>
<td>数量</td>
<td>封接温度/</td>
<td colspan="2">入炉时间</td>
<td colspan="2">出炉时间</td>
<td colspan="3">链速</td>
</tr>
<template v-if="item.totalPrList>0 && item.prList.length>0">
<tr v-for="(prLItem,prLIndex) in item.prList" :key="Math.floor(Math.random()*100000)+1+prWpIndex+prLIndex">
<td>{{prLItem.dataThree}}</td>
<td>{{prLItem.tempSlot}}</td>
<td colspan="2">{{prLItem.inDate}}</td>
<td colspan="2">{{prLItem.outDate}}</td>
<td colspan="3">{{prLItem.vSpeed}}</td>
</tr>
</template>
</template>
<tr v-if="item.slotList && item.slotList.length>0">
<td colspan="9" >同槽信息</td>
</tr>
<tr v-if="item.tankInfo && JSON.stringify(item.tankInfo) != {}">
<td colspan="1">掺镀件面积(dm²)</td>
<td colspan="2">{{item.tankInfo.cdjArea}}</td>
<td colspan="1">陪镀件面积(dm²)</td>
<td colspan="1">{{item.tankInfo.pdjArea}}</td>
<td colspan="1">挂具面积(dm²)</td>
<td colspan="3">{{item.tankInfo.gjArea}}</td>
</tr>
<template v-if="item.slotList && item.slotList.length>0">
<tr>
<td colspan="1">同槽编号</td>
<td colspan="2">零件号</td>
<td colspan="1">批次号</td>
<td>数量</td>
<td>生产标识</td>
<td>面积(dm²)</td>
<td colspan="2">总面积(dm²)</td>
</tr>
<tr v-for="(slot,index) in item.slotList">
<td v-if="index === 0" :rowspan="item.slotList.length">{{slot.mtnCode || '/'}}</td>
<td v-if="!slot.cdj" colspan="2">{{slot.partCode || '/'}}</td>
<td v-if="!slot.cdj" colspan="1">{{slot.batchNo || '/'}}</td>
<td v-if="!slot.cdj" >{{slot.workQty || '/'}}</td>
<td v-if="!slot.cdj" >{{slot.prodIdent || '/'}}</td>
<td v-if="!slot.cdj" >{{slot.area || '/'}}</td>
<td v-if="slot.cdj" colspan="5">{{slot.cdj}}</td>
<td v-if="slot.cdj">{{slot.cdjArea}}</td>
<td v-if="index === 0" :rowspan="item.slotList.length" colspan="2">{{slot.sumArea || '/'}}</td>
</tr>
</template>
<template v-if="item.dsRbFilePreserveSlotList && item.dsRbFilePreserveSlotList.length>0">
<tr >
<td colspan="1">槽位/工步</td>
<td colspan="4">工艺要求</td>
<td colspan="4">实际参数</td>
</tr>
<template v-for="(itemSlot, indexSlot) in item.dsRbFilePreserveSlotList" :key="itemSlot.slotName + indexSlot">
<component
:is="getTemplateComponent(itemSlot.rfpsType)"
:itemSlot="itemSlot"
:indexSlot="indexSlot"
:quality="true"
/>
</template>
</template>
</template>
</template>
</table>
</div>
</el-dialog>
</template>
<script>
import {getBurnDetail} from '@/api/qualityManagement/inspectionArchiving/eRecord'
import Templates from "@/views/qualityTemplate/index.js";
import { getTemplateComponent } from '@/utils/templateMapper.js';
import glassSealing from "./json/glassSealing"
export default {
props:{
showPrint: {
type: Boolean,
default: false
},
checkedList: {
type: Array,
default: () => []
},
printType:{
type:String,
default:''
},
woId:{
type:String,
default:''
},
rbChecked:{
type:Array,
default:() =>[]
},
planList:{
type:Array,
default:() =>[]
},
checkRow:{
type:Object,
default:() =>{}
}
},
components: {
...Templates,
},
data(){
return{
// printObj: {
// id: 'printMe',
// popTitle: '66',
// ignoreClass: 'noprint',
// endCallback: (e) => {
// console.log(e, 5555);
// }
// },
printConfig :{
id: 'printMe',
extraCss: 'https://cdn.bootcdn.net/ajax/libs/animate.css/4.1.1/animate.compat.css',
extraHead: '<meta http-equiv="Content-Language" content="zh-cn"/>',
// preview: true,
},
dsPart:{},
prWorkPlanList:[],
modelOne: {},
isPrint:false,
modelTwo: [],
modelThree: { checkList: [], procedureSet: {}},
modelFour: { procedureSet: {}, prWorkOrder: { pjYieldOrder: {}}},
}
},
created(){
console.log('check---------',this.checkedList)
console.log('printType---------',this.printType)
// const {sunPrWorkOrderList,prWorkPlanList,prWorkOrder,dsPart,qcReviewSheetList} =
// glassSealing.data
// this.dsPart = dsPart
// this.prWorkPlanList = prWorkPlanList
// console.log('prWorkPlanList=======',this.prWorkPlanList)
getBurnDetail({
"woId":'2019646268865155074',
// woId:this.checkRow.woId,
"yieldType":2,
// yieldType:this.checkRow.yieldType,
"planList":this.planList,
"moduleList":[true]
}).then(res =>{
console.log('res==========',res)
this.dsPart = res.data.data.dsPart
this.prWorkPlanList = res.data.data.prWorkPlanList
})
},
methods:{
//
testMan(index) {
let testWorkPlan = null;
for (var i = index; i < this.modelTwo.length; i++) {
if (this.modelTwo[i].procedureSet.ppsName.indexOf('检验') != -1) {
if (testWorkPlan == null) {
testWorkPlan = this.modelTwo[i];
if (this.modelThree && this.modelThree.checkList) {
const item = this.modelThree.checkList.find(
(item) =>
item.testOrders.indexOf(testWorkPlan.orders + '-') != -1
);
let checkInfo = this.modelTwo[i].procedureSet.ppsName=='荧光检测'?item.imgUrl:item.checkName
return checkInfo;
} else {
return null;
}
}
}
}
},
getTemplateComponent(type) {
const componentName = getTemplateComponent(type);
return componentName;
},
printData(){
// exportEchartsToPdf('printMe','')
// window.print()
const overflowInfo = this.checkPrintOverflow();
console.log('打印页数:', overflowInfo.pageCount);
if (overflowInfo.isOverflow) {
this.addPageBreaks();
}
window.print();
//
setTimeout(() => {
this.removePageBreaks();
}, 1000);
},
closeDialog(){
this.$emit('closeDialog');
},
// A4
checkPrintOverflow() {
const A4_HEIGHT = 297; // A4 (mm)
const PRINT_MARGIN = 20; // (mm)
// const AVAILABLE_HEIGHT = (A4_HEIGHT - PRINT_MARGIN) * 3.78; // (1mm 3.78px)
const AVAILABLE_HEIGHT = 880
console.log('AVA============',AVAILABLE_HEIGHT)
const printContent = this.$refs.printContent;
console.log('dom-----------',document.getElementById('printMe'))
console.log('hei-------',document.getElementById('printMe').offsetHeight)
console.log('prine---------',printContent)
if (!printContent) return false;
const contentHeight = printContent.scrollHeight;
const pageCount = Math.ceil(contentHeight / AVAILABLE_HEIGHT);
console.log('cont-------------',contentHeight)
console.log('pageCount-------------',pageCount)
return {
isOverflow: contentHeight > AVAILABLE_HEIGHT,
pageCount,
contentHeight,
availableHeight: AVAILABLE_HEIGHT
};
},
//
addPageBreaks() {
const A4_HEIGHT_PX = 1123; // A4 ( 297mm - 20mm )
const table = document.getElementById('cus-table');
if (!table) return;
const rows = table.querySelectorAll('tr');
let currentHeight = 0;
let page = 1;
rows.forEach((row, index) => {
const rowHeight = row.offsetHeight;
currentHeight += rowHeight;
//
if (currentHeight > A4_HEIGHT_PX * page && index > 0) {
row.style.pageBreakBefore = 'always';
page++;
//
this.insertPageBreakRow(table, row, page);
}
});
},
//
insertPageBreakRow(table, referenceRow, pageNum) {
const pageBreakRow = document.createElement('tr');
pageBreakRow.className = 'page-break-tip';
pageBreakRow.innerHTML = `
<td colspan="12" style="text-align:right;font-size:12px;color:#666;">
--- ${pageNum} ---
</td>
`;
referenceRow.parentNode.insertBefore(pageBreakRow, referenceRow);
},
//
removePageBreaks() {
const pageBreakTips = document.querySelectorAll('.page-break-tip');
pageBreakTips.forEach(tip => tip.remove());
const rows = document.querySelectorAll('#cus-table tr');
rows.forEach(row => {
row.style.pageBreakBefore = '';
});
},
}
}
</script>
<style lang="scss" >
.printButton {
float: right;
margin-right: 8px;
margin-top: 16px;
}
.printBox {
width: 100%;
padding: 6px;
text-align: center;
.printTitle {
font-size: 22px;
font-weight: 700;
padding: 8px;
color:#606266
// margin-bottom: 6px;
}
.tableNo{
text-align: right;
margin-bottom: 10px;
}
table {
width: 100%;
table-layout: fixed;
tr {
width: 100%;
// table-layout: fixed;
page-break-inside: avoid;
// break-inside: avoid;
}
td {
// width: 11.1%;
width: 168px;
height: 30px;
border: 1px solid #000;
background: transparent;
color: #000;
font-size: 14px;
text-align: center;
padding: 0;
margin: 0;
}
//
.page-break-tip {
page-break-before: always;
break-before: always;
height: 20px;
border: none !important;
}
}
}
.fixTopLeft{
// position: fixed;
float: left;
top: 1;
left: 0;
font-family: 'SimHei';
font-size: 24px;
color: black;
}
@media print {
/* 隐藏不需要打印的元素:按钮、导航栏、侧边栏等 */
.no-print, header, footer, .sidebar, button {
display: none !important;
}
@page {
size: auto;
margin: 6mm;
}
}
// @media print { @page { size:21cm 29.7cm } }
</style>
<style lang="scss">
@media print {
.no-print {
display: none !important;
}
.print-btn {
display: none !important;
}
body {
margin: 0;
// padding: 20px;
// font-size: 12pt;
background: white !important;
}
@page {
size: auto;
margin: 6mm;
}
.printBox {
width: 100% !important;
overflow: visible !important;
table {
width: 98% !important;
table-layout: fixed;
border-collapse: collapse;
tr {
page-break-inside: avoid;
// break-inside: avoid;
td {
width: 8.1%;
// &:first-child{
// width: 55px;
// }
}
}
}
.print-table,
.print-table td,
.print-table th {
border-collapse: collapse !important;
box-sizing: border-box !important;
page-break-inside: avoid !important;
}
}
}
</style>

@ -274,7 +274,8 @@ export const erpOption = {
column: [
{
label: '审理单号',
prop: 'rsCode',
// prop: 'rsCode',
prop: 'sheetNo',
// bind: 'dsPart.partCode',
search: true,
sortable: true,
@ -284,7 +285,8 @@ export const erpOption = {
},
{
label: '责任零件',
prop: 'dutyPart',
// prop: 'dutyPart',
prop:'p5layer1',
// bind: 'dsPart.partCode',
search: true,
sortable: true,
@ -295,7 +297,8 @@ export const erpOption = {
{
label: '责任批号',
prop: 'dutyBatNo',
// prop: 'dutyBatNo',
prop: 'p5layer3',
// bind: 'dsPart.plate',
search: true,
sortable: true,
@ -305,7 +308,8 @@ export const erpOption = {
},
{
label: '工序号',
prop: 'processNo',
prop: 'process',
// prop: 'processNo',
// bind: 'dsPart.plate',
search: false,
sortable: true,
@ -316,6 +320,7 @@ export const erpOption = {
{
label: '工序名称',
prop: 'processName',
// prop: 'processName',
// bind: 'dsPart.plate',
search: false,
sortable: true,
@ -325,7 +330,8 @@ export const erpOption = {
},
{
label: '上级编号',
prop: 'upCode',
prop: 'precode',
// prop: 'upCode',
// bind: 'dsPart.plate',
search: false,
sortable: true,
@ -335,7 +341,8 @@ export const erpOption = {
},
{
label: '返修路线',
prop: 'reDoPath',
prop: 'reworkLine',
// prop: 'reDoPath',
// bind: 'dsPart.plate',
search: false,
sortable: true,
@ -345,7 +352,8 @@ export const erpOption = {
},
{
label: '发生单位',
prop: 'ngOrg',
prop: 'deptcode',
// prop: 'ngOrg',
// bind: 'dsPart.plate',
search: false,
sortable: true,
@ -355,7 +363,8 @@ export const erpOption = {
},
{
label: '责任部门',
prop: 'dutyDeptName',
prop: 'layer1',
// prop: 'dutyDeptName',
// bind: 'dsPart.plate',
search: false,
sortable: true,
@ -365,7 +374,8 @@ export const erpOption = {
},
{
label: '审理人',
prop: 'reviewUserRealName',
prop: 'usercode',
// prop: 'reviewUserRealName',
// bind: 'dsPart.plate',
search: false,
sortable: true,
@ -376,6 +386,7 @@ export const erpOption = {
{
label: '零件号',
prop: 'partCode',
// prop: 'partCode',
// bind: 'dsPart.plate',
search: false,
sortable: true,
@ -385,7 +396,8 @@ export const erpOption = {
},
{
label: '批次号',
prop: 'batchNo',
prop: 'lotno',
// prop: 'batchNo',
// bind: 'dsPart.plate',
search: false,
sortable: true,

Loading…
Cancel
Save