Browse Source

2025-11-25

过站采集-》材料上机增加物料编码和物料名称
master
fengyuan_yang 2 months ago
parent
commit
8d907b92c8
  1. 21
      src/api/qc/qc.js
  2. 336
      src/views/modules/yieldReport/com_produce_material.vue

21
src/api/qc/qc.js

@ -254,3 +254,24 @@ export const routingListSearch = data => createAPI(`/pms/qc/routingListSearch`,'
export const getStandardOperation = data => createAPI(`/pms/qc/getStandardOperation`,'post',data) export const getStandardOperation = data => createAPI(`/pms/qc/getStandardOperation`,'post',data)
// ===================================== IQC检验项目操作和模板导入 =====================================
export const getIQCItemList = data => createAPI(`/pms/qc/getIQCItemList`,'post',data)
export const addIQCItemDetails = data => createAPI(`/pms/qc/addIQCItemDetails`,'post',data)
export const deleteIQCItemDetails = data => createAPI(`/pms/qc/deleteIQCItemDetails`,'post',data)
export const getIQCTemplateList = data => createAPI(`/pms/qc/getIQCTemplateList`,'post',data)
export const importIQCTemplateItems = data => createAPI(`/pms/qc/importIQCTemplateItems`,'post',data)
// ===================================== FQC检验项目操作和模板导入 =====================================
export const getFQCItemList = data => createAPI(`/pms/qc/getFQCItemList`,'post',data)
export const addFQCItemDetails = data => createAPI(`/pms/qc/addFQCItemDetails`,'post',data)
export const deleteFQCItemDetails = data => createAPI(`/pms/qc/deleteFQCItemDetails`,'post',data)
export const getFQCTemplateList = data => createAPI(`/pms/qc/getFQCTemplateList`,'post',data)
export const importFQCTemplateItems = data => createAPI(`/pms/qc/importFQCTemplateItems`,'post',data)
// ===================================== OQC检验项目操作和模板导入 =====================================
export const getOQCItemList = data => createAPI(`/pms/qc/getOQCItemList`,'post',data)
export const addOQCItemDetails = data => createAPI(`/pms/qc/addOQCItemDetails`,'post',data)
export const deleteOQCItemDetails = data => createAPI(`/pms/qc/deleteOQCItemDetails`,'post',data)
export const getOQCTemplateList = data => createAPI(`/pms/qc/getOQCTemplateList`,'post',data)
export const importOQCTemplateItems = data => createAPI(`/pms/qc/importOQCTemplateItems`,'post',data)

336
src/views/modules/yieldReport/com_produce_material.vue

@ -1,41 +1,66 @@
<template> <template>
<div class="customer-css"> <div class="customer-css">
<el-dialog :title="titleCon" v-drag v-bind="$attrs" v-on="$listeners" <el-dialog :title="titleCon" v-drag v-bind="$attrs" v-on="$listeners"
width="200px" style="height: 580px;" class="customer-dialog">
<el-container style="height: 105px;">
<el-form :inline="true" label-position="top" label-width="80px">
<!-- 材料卷号和BOM序号 -->
<el-row>
<el-col :span="16">
<el-form-item :label=labels.rmRollNo>
<el-input ref="scanRmRollNo" @keyup.native="recordTime"
@keyup.enter.native="checkRmRollNo"
v-model="pageData.scanRmRollNo"
style="width: 120px">
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
width="520px" class="material-dialog">
<div class="material-content">
<el-form ref="materialForm" :model="pageData" label-position="top" label-width="100px">
<!-- 材料卷号和BOM序号在同一行 -->
<el-row :gutter="15">
<el-col :span="16"> <el-col :span="16">
<el-form-item :label=labels.bomItemNo>
<el-select v-model="pageData.bomItemNo" :disabled="selectFlag" style="width: 120px">
<el-form-item :label="labels.rmRollNo" class="form-item-enhanced">
<el-input
ref="scanRmRollNo"
v-model="pageData.scanRmRollNo"
@keyup.native="recordTime"
@keyup.enter.native="checkRmRollNo"
placeholder="请扫描或输入材料卷号"
size="large"
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="labels.bomItemNo" class="form-item-enhanced">
<el-select
v-model="pageData.bomItemNo"
:disabled="selectFlag"
placeholder="请选择"
size="large"
style="width: 100%">
<el-option <el-option
v-for="(item, index) in bomList" v-for="(item, index) in bomList"
:key="index" :key="index"
:label="item.itemNo"
:label="`${item.itemNo}`"
:value="item.itemNo"> :value="item.itemNo">
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-form>
</el-container>
<!-- 物料信息显示区域 -->
<div v-if="materialInfo.partNo" class="material-info-card">
<div class="info-header">
<i class="el-icon-document"></i>
<span>物料信息</span>
</div>
<div class="info-content">
<div class="info-row">
<label class="info-label">物料编码</label>
<span class="info-value">{{ materialInfo.partNo }}</span>
</div>
<div class="info-row">
<label class="info-label">物料名称</label>
<span class="info-value">{{ materialInfo.partDesc || '暂无' }}</span>
</div>
</div>
</div>
</el-form>
</div>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button type="primary" @click="feedingMaterialRollFun">{{ buttons.confirmButton }}</el-button>
<el-button type="primary" @click="closeDialog">{{buttons.closeButton}}</el-button>
<!-- <el-button v-if="showDefault" @click="saveMultiLanguage()" type="primary">多语言设置</el-button>-->
<el-button type="primary" @click="feedingMaterialRollFun" icon="el-icon-check">{{ buttons.confirmButton }}</el-button>
<el-button @click="closeDialog" icon="el-icon-close">{{ buttons.closeButton }}</el-button>
</span> </span>
</el-dialog> </el-dialog>
</div> </div>
@ -65,10 +90,14 @@ var functionId = 'C10000013';
export default { export default {
data() { data() {
return { return {
titleCon: '材料',
titleCon: '材料上机',
showDefault: false, showDefault: false,
sfdcTimeList: [], sfdcTimeList: [],
selectFlag: true, selectFlag: true,
materialInfo: {
partNo: '',
partDesc: ''
},
scheduleData: { scheduleData: {
site: this.$store.state.user.site, site: this.$store.state.user.site,
username: this.$store.state.user.name, username: this.$store.state.user.name,
@ -145,9 +174,9 @@ export default {
objectType: 'button' objectType: 'button'
}, },
labels: { labels: {
titleCon: '材料',
rmRollNo: '材料卷号:',
bomItemNo: 'BOM序号:',
titleCon: '材料上机',
rmRollNo: '材料卷号',
bomItemNo: 'BOM序号',
pleaseScanEnter: '请扫码输入!', pleaseScanEnter: '请扫码输入!',
materialRollCantBeNull: '材料卷号不能为空!', materialRollCantBeNull: '材料卷号不能为空!',
pleaseScanMaterialRollNo: '请扫描材料卷号!', pleaseScanMaterialRollNo: '请扫描材料卷号!',
@ -156,19 +185,19 @@ export default {
labelsList: [ labelsList: [
{ {
functionId: functionId, functionId: functionId,
languageValue: '材料',
languageValue: '材料上机',
objectId: 'titleCon', objectId: 'titleCon',
objectType: 'label', objectType: 'label',
tableId: '*' tableId: '*'
}, { }, {
functionId: functionId, functionId: functionId,
languageValue: '材料卷号:',
languageValue: '材料卷号',
objectId: 'rmRollNo', objectId: 'rmRollNo',
objectType: 'label', objectType: 'label',
tableId: '*' tableId: '*'
}, { }, {
functionId: functionId, functionId: functionId,
languageValue: 'BOM序号:',
languageValue: 'BOM序号',
objectId: 'bomItemNo', objectId: 'bomItemNo',
objectType: 'label', objectType: 'label',
tableId: '*' tableId: '*'
@ -224,6 +253,13 @@ export default {
this.pageData.bomItemNo = ''; this.pageData.bomItemNo = '';
this.pageData.histSeqNo = -1; this.pageData.histSeqNo = -1;
this.pageData.operatorId = operatorData.operatorId; this.pageData.operatorId = operatorData.operatorId;
//
this.materialInfo = {
partNo: '',
partDesc: ''
};
// //
// this.getMultiLanguageList(); // // this.getMultiLanguageList(); //
// //
@ -257,13 +293,13 @@ export default {
/*检查材料卷号的数据*/ /*检查材料卷号的数据*/
checkRmRollNo() { checkRmRollNo() {
//100
let len = this.timeArray.length;
let timeDiff = this.timeArray[len - 1] - this.timeArray[0];
//
if(timeDiff > 1000){
this.$message.error(this.labels.pleaseScanEnter);
}
// //100
// let len = this.timeArray.length;
// let timeDiff = this.timeArray[len - 1] - this.timeArray[0];
// //
// if(timeDiff > 1000){
// this.$message.error(this.labels.pleaseScanEnter);
// }
//null //null
if (this.pageData.scanRmRollNo == null || this.pageData.scanRmRollNo == '') { if (this.pageData.scanRmRollNo == null || this.pageData.scanRmRollNo == '') {
this.$message.error(this.labels.materialRollCantBeNull); this.$message.error(this.labels.materialRollCantBeNull);
@ -281,9 +317,23 @@ export default {
// //
if(data.code == 500){ if(data.code == 500){
this.$message.error(data.msg); this.$message.error(data.msg);
//
this.materialInfo = {
partNo: '',
partDesc: ''
};
return false; return false;
} }
this.bomList = data.rows;
this.bomList = data.rows;
//
if(this.bomList.length > 0) {
this.materialInfo = {
partNo: this.bomList[0].partNo || '',
partDesc: this.bomList[0].partDesc || ''
};
}
// //
if(this.bomList.length == 1){ if(this.bomList.length == 1){
// //
@ -367,6 +417,214 @@ export default {
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
//
.material-dialog {
::v-deep .el-dialog {
border-radius: 8px;
overflow: hidden;
.el-dialog__header {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
padding: 18px 20px;
.el-dialog__title {
color: #fff;
font-size: 16px;
font-weight: 600;
}
.el-dialog__headerbtn {
.el-dialog__close {
color: #fff;
font-size: 18px;
&:hover {
color: #f0f0f0;
}
}
}
}
.el-dialog__body {
padding: 25px;
background-color: #f8f9fa;
}
.el-dialog__footer {
padding: 15px 20px;
background-color: #fff;
border-top: 1px solid #e9ecef;
}
}
}
.material-content {
.form-item-enhanced {
margin-bottom: 20px;
::v-deep .el-form-item__label {
color: #495057;
font-weight: 500;
font-size: 14px;
margin-bottom: 8px;
}
::v-deep .el-input__inner {
border-radius: 6px;
border: 1px solid #dee2e6;
transition: all 0.3s;
height: 42px;
line-height: 42px;
font-size: 15px;
&:focus {
border-color: #667eea;
box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
}
}
::v-deep .el-input__prefix,
::v-deep .el-input__suffix {
line-height: 42px;
}
::v-deep .el-input__icon {
line-height: 42px;
}
::v-deep .el-input-group__append {
background-color: #667eea;
color: #fff;
border: none;
border-radius: 0 6px 6px 0;
transition: all 0.3s;
height: 42px;
line-height: 42px;
padding: 0 15px;
&:hover {
background-color: #5568d3;
}
i {
font-size: 18px;
}
}
// Select
::v-deep .el-select {
.el-input__inner {
height: 42px;
line-height: 42px;
font-size: 15px;
}
}
}
}
//
.material-info-card {
background: linear-gradient(135deg, #667eea15 0%, #764ba215 100%);
border-radius: 8px;
padding: 16px;
margin-bottom: 20px;
border: 1px solid #e3e8f0;
box-shadow: 0 2px 8px rgba(102, 126, 234, 0.08);
animation: fadeInDown 0.5s ease-out;
.info-header {
display: flex;
align-items: center;
margin-bottom: 12px;
padding-bottom: 10px;
border-bottom: 1px solid #dee2e6;
i {
font-size: 18px;
color: #667eea;
margin-right: 8px;
}
span {
font-size: 14px;
font-weight: 600;
color: #495057;
}
}
.info-content {
.info-row {
display: flex;
align-items: center;
margin-bottom: 8px;
&:last-child {
margin-bottom: 0;
}
.info-label {
font-size: 13px;
color: #6c757d;
min-width: 90px;
font-weight: 500;
}
.info-value {
font-size: 13px;
color: #212529;
font-weight: 600;
flex: 1;
padding: 4px 10px;
background-color: rgba(255, 255, 255, 0.8);
border-radius: 4px;
}
}
}
}
//
.dialog-footer {
display: flex;
justify-content: center;
gap: 10px;
.el-button {
border-radius: 6px;
padding: 10px 24px;
font-size: 14px;
transition: all 0.3s;
&:not(.el-button--primary) {
border-color: #dee2e6;
&:hover {
color: #667eea;
border-color: #667eea;
background-color: rgba(102, 126, 234, 0.05);
}
}
&.el-button--primary {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border: none;
&:hover {
background: linear-gradient(135deg, #5568d3 0%, #65408d 100%);
box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);
}
}
}
}
//
@keyframes fadeInDown {
from {
opacity: 0;
transform: translateY(-10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
</style> </style>
Loading…
Cancel
Save