refactor(wms/coil): 优化代码格式并新增热轧卷材质自动填充功能
1. 格式化多个vue文件的模板代码,调整长标签换行规范 2. 新增getFirstHeatCoilMaterial接口调用,从接口获取最早热轧卷板材质 3. 在分条、酸洗页面中自动将packingStatus填充为获取到的热轧材质 4. 调整typing页面的布局结构,优化表单排版
This commit is contained in:
@@ -25,7 +25,8 @@
|
|||||||
|
|
||||||
<el-descriptions :column="2" border title="待分条钢卷信息">
|
<el-descriptions :column="2" border title="待分条钢卷信息">
|
||||||
<template slot="extra">
|
<template slot="extra">
|
||||||
<el-button v-if="showSplitForm" type="info" @click="copyFromSourceCoil" icon="el-icon-document-copy">复制源卷信息</el-button>
|
<el-button v-if="showSplitForm" type="info" @click="copyFromSourceCoil"
|
||||||
|
icon="el-icon-document-copy">复制源卷信息</el-button>
|
||||||
</template>
|
</template>
|
||||||
<el-descriptions-item label="入场钢卷号">{{ coilInfo.enterCoilNo || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="入场钢卷号">{{ coilInfo.enterCoilNo || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="当前钢卷号">{{ coilInfo.currentCoilNo || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="当前钢卷号">{{ coilInfo.currentCoilNo || '-' }}</el-descriptions-item>
|
||||||
@@ -271,17 +272,28 @@
|
|||||||
<el-alert title="检测到您之前有暂存的分条数据,是否恢复使用?" type="info" show-icon :closable="false"></el-alert>
|
<el-alert title="检测到您之前有暂存的分条数据,是否恢复使用?" type="info" show-icon :closable="false"></el-alert>
|
||||||
<el-divider content-position="left">暂存的表单数据</el-divider>
|
<el-divider content-position="left">暂存的表单数据</el-divider>
|
||||||
<el-descriptions :column="2" border size="small">
|
<el-descriptions :column="2" border size="small">
|
||||||
<el-descriptions-item label="入场钢卷号">{{ parsedCacheData && parsedCacheData.splitForm && parsedCacheData.splitForm.enterCoilNo || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="入场钢卷号">{{ parsedCacheData && parsedCacheData.splitForm &&
|
||||||
<el-descriptions-item label="当前钢卷号">{{ parsedCacheData && parsedCacheData.splitForm && parsedCacheData.splitForm.currentCoilNo || '-' }}</el-descriptions-item>
|
parsedCacheData.splitForm.enterCoilNo || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="所在库位">{{ parsedCacheData && parsedCacheData.splitForm && parsedCacheData.splitForm.warehouseId || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="当前钢卷号">{{ parsedCacheData && parsedCacheData.splitForm &&
|
||||||
<el-descriptions-item label="班组">{{ parsedCacheData && parsedCacheData.splitForm && parsedCacheData.splitForm.team || '-' }}</el-descriptions-item>
|
parsedCacheData.splitForm.currentCoilNo || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="材料类型">{{ parsedCacheData && parsedCacheData.splitForm && parsedCacheData.splitForm.materialType || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="所在库位">{{ parsedCacheData && parsedCacheData.splitForm &&
|
||||||
<el-descriptions-item label="质量状态">{{ parsedCacheData && parsedCacheData.splitForm && parsedCacheData.splitForm.qualityStatus || '-' }}</el-descriptions-item>
|
parsedCacheData.splitForm.warehouseId || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="净重">{{ parsedCacheData && parsedCacheData.splitForm && parsedCacheData.splitForm.netWeight || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="班组">{{ parsedCacheData && parsedCacheData.splitForm &&
|
||||||
<el-descriptions-item label="备注">{{ parsedCacheData && parsedCacheData.splitForm && parsedCacheData.splitForm.remark || '-' }}</el-descriptions-item>
|
parsedCacheData.splitForm.team
|
||||||
|
|| '-' }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="材料类型">{{ parsedCacheData && parsedCacheData.splitForm &&
|
||||||
|
parsedCacheData.splitForm.materialType || '-' }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="质量状态">{{ parsedCacheData && parsedCacheData.splitForm &&
|
||||||
|
parsedCacheData.splitForm.qualityStatus || '-' }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="净重">{{ parsedCacheData && parsedCacheData.splitForm &&
|
||||||
|
parsedCacheData.splitForm.netWeight || '-' }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="备注">{{ parsedCacheData && parsedCacheData.splitForm &&
|
||||||
|
parsedCacheData.splitForm.remark || '-' }}</el-descriptions-item>
|
||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
<el-divider v-if="parsedCacheData && parsedCacheData.abnormals && parsedCacheData.abnormals.length > 0" content-position="left">暂存的异常信息 ({{ parsedCacheData.abnormals.length }}条)</el-divider>
|
<el-divider v-if="parsedCacheData && parsedCacheData.abnormals && parsedCacheData.abnormals.length > 0"
|
||||||
<div v-if="parsedCacheData && parsedCacheData.abnormals && parsedCacheData.abnormals.length > 0" class="abnormal-container" style="margin-bottom: 20px;">
|
content-position="left">暂存的异常信息 ({{ parsedCacheData.abnormals.length }}条)</el-divider>
|
||||||
|
<div v-if="parsedCacheData && parsedCacheData.abnormals && parsedCacheData.abnormals.length > 0"
|
||||||
|
class="abnormal-container" style="margin-bottom: 20px;">
|
||||||
<div v-for="(abnormal, index) in parsedCacheData.abnormals" :key="index" class="abnormal-item">
|
<div v-for="(abnormal, index) in parsedCacheData.abnormals" :key="index" class="abnormal-item">
|
||||||
<div class="abnormal-content">
|
<div class="abnormal-content">
|
||||||
<div class="abnormal-info">
|
<div class="abnormal-info">
|
||||||
@@ -302,7 +314,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { getMaterialCoil, listMaterialCoil, createSpecialChild, completeSpecialSplit, updateMaterialCoilSimple, checkCoilNo, delMaterialCoil } from '@/api/wms/coil'
|
import { getMaterialCoil, listMaterialCoil, createSpecialChild, completeSpecialSplit, updateMaterialCoilSimple, checkCoilNo, delMaterialCoil, getFirstHeatCoilMaterial } from '@/api/wms/coil'
|
||||||
import { completeAction, getPendingAction, updatePendingAction } from '@/api/wms/pendingAction'
|
import { completeAction, getPendingAction, updatePendingAction } from '@/api/wms/pendingAction'
|
||||||
import { saveCoilCache, getCoilCacheByCoilId, delCoilCache } from '@/api/wms/coilCache'
|
import { saveCoilCache, getCoilCacheByCoilId, delCoilCache } from '@/api/wms/coilCache'
|
||||||
import { getGalvanize1TypingPrefill } from '@/api/pocket/acidTyping';
|
import { getGalvanize1TypingPrefill } from '@/api/pocket/acidTyping';
|
||||||
@@ -440,6 +452,8 @@ export default {
|
|||||||
cacheDialogVisible: false,
|
cacheDialogVisible: false,
|
||||||
currentCache: null,
|
currentCache: null,
|
||||||
parsedCacheData: null,
|
parsedCacheData: null,
|
||||||
|
// 最早的热轧卷板材质
|
||||||
|
firstHeatMaterial: '',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@@ -486,6 +500,16 @@ export default {
|
|||||||
const res = await getMaterialCoil(this.coilId)
|
const res = await getMaterialCoil(this.coilId)
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
this.coilInfo = res.data || {}
|
this.coilInfo = res.data || {}
|
||||||
|
// 获取最早的热轧卷板材质
|
||||||
|
try {
|
||||||
|
const firstHeatMaterial = await getFirstHeatCoilMaterial(this.coilId);
|
||||||
|
if (firstHeatMaterial.code === 200 && firstHeatMaterial.msg) {
|
||||||
|
this.firstHeatMaterial = firstHeatMaterial.msg
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
this.$message.error('查询钢卷信息失败:' + res.msg)
|
this.$message.error('查询钢卷信息失败:' + res.msg)
|
||||||
}
|
}
|
||||||
@@ -610,7 +634,7 @@ export default {
|
|||||||
itemId: '',
|
itemId: '',
|
||||||
qualityStatus: '',
|
qualityStatus: '',
|
||||||
trimmingRequirement: '',
|
trimmingRequirement: '',
|
||||||
packingStatus: '',
|
packingStatus: this.firstHeatMaterial || '',
|
||||||
packagingRequirement: '',
|
packagingRequirement: '',
|
||||||
grossWeight: '',
|
grossWeight: '',
|
||||||
netWeight: '',
|
netWeight: '',
|
||||||
|
|||||||
@@ -193,8 +193,8 @@
|
|||||||
</el-input-number>
|
</el-input-number>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="长度(m)">
|
<el-form-item label="长度(m)">
|
||||||
<el-input-number :controls="false" v-model="item.length" placeholder="请输入长度" type="number" :step="0.01"
|
<el-input-number :controls="false" v-model="item.length" placeholder="请输入长度" type="number"
|
||||||
:disabled="readonly">
|
:step="0.01" :disabled="readonly">
|
||||||
<template slot="append">米</template>
|
<template slot="append">米</template>
|
||||||
</el-input-number>
|
</el-input-number>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -205,8 +205,8 @@
|
|||||||
</el-input-number>
|
</el-input-number>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="实测厚度(mm)" prop="actualThickness" class="form-item-half">
|
<el-form-item label="实测厚度(mm)" prop="actualThickness" class="form-item-half">
|
||||||
<el-input-number :controls="false" v-model="item.actualThickness" placeholder="请输入实测厚度"
|
<el-input-number :controls="false" v-model="item.actualThickness" placeholder="请输入实测厚度" type="number"
|
||||||
type="number" :step="0.01" :disabled="readonly">
|
:step="0.01" :disabled="readonly">
|
||||||
<template slot="append">mm</template>
|
<template slot="append">mm</template>
|
||||||
</el-input-number>
|
</el-input-number>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -229,7 +229,8 @@
|
|||||||
<MemoInput storageKey="coatingType" v-model="item.coatingType" placeholder="请输入镀层种类" />
|
<MemoInput storageKey="coatingType" v-model="item.coatingType" placeholder="请输入镀层种类" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="钢卷表面处理" prop="coilSurfaceTreatment">
|
<el-form-item label="钢卷表面处理" prop="coilSurfaceTreatment">
|
||||||
<MemoInput storageKey="surfaceTreatmentDesc" v-model="item.coilSurfaceTreatment" placeholder="请输入钢卷表面处理" />
|
<MemoInput storageKey="surfaceTreatmentDesc" v-model="item.coilSurfaceTreatment"
|
||||||
|
placeholder="请输入钢卷表面处理" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="逻辑库区" required>
|
<el-form-item label="逻辑库区" required>
|
||||||
<WarehouseSelect v-model="item.warehouseId" placeholder="请选择逻辑库区" :disabled="readonly" />
|
<WarehouseSelect v-model="item.warehouseId" placeholder="请选择逻辑库区" :disabled="readonly" />
|
||||||
@@ -239,10 +240,12 @@
|
|||||||
:disabled="readonly" />
|
:disabled="readonly" />
|
||||||
</el-form-item> -->
|
</el-form-item> -->
|
||||||
<el-form-item label="生产开始时间">
|
<el-form-item label="生产开始时间">
|
||||||
<TimeInput v-model="item.productionStartTime" @input="() => calculateProductionDuration(item)" :disabled="readonly" />
|
<TimeInput v-model="item.productionStartTime" @input="() => calculateProductionDuration(item)"
|
||||||
|
:disabled="readonly" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="生产结束时间">
|
<el-form-item label="生产结束时间">
|
||||||
<TimeInput v-model="item.productionEndTime" @input="() => calculateProductionDuration(item)" :disabled="readonly" :show-now-button="true" />
|
<TimeInput v-model="item.productionEndTime" @input="() => calculateProductionDuration(item)"
|
||||||
|
:disabled="readonly" :show-now-button="true" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="生产耗时">
|
<el-form-item label="生产耗时">
|
||||||
<el-input v-model="item.formattedDuration" placeholder="自动计算" disabled />
|
<el-input v-model="item.formattedDuration" placeholder="自动计算" disabled />
|
||||||
@@ -257,30 +260,18 @@
|
|||||||
|
|
||||||
<el-form-item label="异常信息">
|
<el-form-item label="异常信息">
|
||||||
<div class="abnormal-container">
|
<div class="abnormal-container">
|
||||||
<div
|
<div v-for="(abnormal, abnormalIndex) in item.abnormals" :key="abnormalIndex" class="abnormal-item"
|
||||||
v-for="(abnormal, abnormalIndex) in item.abnormals"
|
@click="editAbnormal(index, abnormalIndex)">
|
||||||
:key="abnormalIndex"
|
|
||||||
class="abnormal-item"
|
|
||||||
@click="editAbnormal(index, abnormalIndex)"
|
|
||||||
>
|
|
||||||
<div class="abnormal-content">
|
<div class="abnormal-content">
|
||||||
<div class="abnormal-info">
|
<div class="abnormal-info">
|
||||||
<div class="abnormal-position">{{ getAbnormalPositionText(abnormal.position) }}</div>
|
<div class="abnormal-position">{{ getAbnormalPositionText(abnormal.position) }}</div>
|
||||||
<div class="abnormal-code">{{ getAbnormalCodeText(abnormal.defectCode) }}</div>
|
<div class="abnormal-code">{{ getAbnormalCodeText(abnormal.defectCode) }}</div>
|
||||||
</div>
|
</div>
|
||||||
<el-button
|
<el-button type="danger" size="mini" icon="el-icon-close" class="abnormal-delete"
|
||||||
type="danger"
|
@click.stop="deleteAbnormal(index, abnormalIndex)"></el-button>
|
||||||
size="mini"
|
|
||||||
icon="el-icon-close"
|
|
||||||
class="abnormal-delete"
|
|
||||||
@click.stop="deleteAbnormal(index, abnormalIndex)"
|
|
||||||
></el-button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="abnormal-add" @click="addAbnormal(index)">
|
||||||
class="abnormal-add"
|
|
||||||
@click="addAbnormal(index)"
|
|
||||||
>
|
|
||||||
<i class="el-icon-plus"></i>
|
<i class="el-icon-plus"></i>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -293,16 +284,9 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 异常表单弹窗 -->
|
<!-- 异常表单弹窗 -->
|
||||||
<el-dialog
|
<el-dialog :title="currentAbnormalIndex === -1 ? '新增异常' : '编辑异常'" :visible.sync="abnormalDialogVisible"
|
||||||
:title="currentAbnormalIndex === -1 ? '新增异常' : '编辑异常'"
|
width="600px">
|
||||||
:visible.sync="abnormalDialogVisible"
|
<abnormal-form ref="abnormalForm" v-model="abnormalForm" :show-coil-selector="false"></abnormal-form>
|
||||||
width="600px"
|
|
||||||
>
|
|
||||||
<abnormal-form
|
|
||||||
ref="abnormalForm"
|
|
||||||
v-model="abnormalForm"
|
|
||||||
:show-coil-selector="false"
|
|
||||||
></abnormal-form>
|
|
||||||
<div slot="footer" class="dialog-footer">
|
<div slot="footer" class="dialog-footer">
|
||||||
<el-button @click="abnormalDialogVisible = false">取 消</el-button>
|
<el-button @click="abnormalDialogVisible = false">取 消</el-button>
|
||||||
<el-button type="primary" @click="saveAbnormal">确 定</el-button>
|
<el-button type="primary" @click="saveAbnormal">确 定</el-button>
|
||||||
@@ -312,7 +296,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { getMaterialCoil, splitMaterialCoil } from '@/api/wms/coil';
|
import { getMaterialCoil, splitMaterialCoil, getFirstHeatCoilMaterial } from '@/api/wms/coil';
|
||||||
import { listWarehouse } from '@/api/wms/warehouse';
|
import { listWarehouse } from '@/api/wms/warehouse';
|
||||||
import { completeAction, getPendingAction } from '@/api/wms/pendingAction';
|
import { completeAction, getPendingAction } from '@/api/wms/pendingAction';
|
||||||
import ActualWarehouseSelect from "@/components/KLPService/ActualWarehouseSelect";
|
import ActualWarehouseSelect from "@/components/KLPService/ActualWarehouseSelect";
|
||||||
@@ -414,7 +398,9 @@ export default {
|
|||||||
defectCode: null,
|
defectCode: null,
|
||||||
degree: null,
|
degree: null,
|
||||||
remark: null
|
remark: null
|
||||||
}
|
},
|
||||||
|
// 最早热轧卷板材质
|
||||||
|
firstHeatMaterial: null,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@@ -549,6 +535,21 @@ export default {
|
|||||||
itemMaterial: data?.material || '',
|
itemMaterial: data?.material || '',
|
||||||
itemSpecification: data?.specification || '',
|
itemSpecification: data?.specification || '',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 获取最早的热轧卷板材质
|
||||||
|
try {
|
||||||
|
const firstHeatMaterial = await getFirstHeatCoilMaterial(this.motherCoil.enterCoilNo);
|
||||||
|
if (firstHeatMaterial.code === 200 && firstHeatMaterial.msg) {
|
||||||
|
this.firstHeatMaterial = firstHeatMaterial.msg
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const item of this.splitList) {
|
||||||
|
item.packingStatus = this.firstHeatMaterial || ''
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
// console.error('获取最早的热轧卷板材质失败', error);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
this.$message.error('加载母卷信息失败');
|
this.$message.error('加载母卷信息失败');
|
||||||
@@ -585,7 +586,7 @@ export default {
|
|||||||
actualWarehouseId: null,
|
actualWarehouseId: null,
|
||||||
qualityStatus: '',
|
qualityStatus: '',
|
||||||
packagingRequirement: '',
|
packagingRequirement: '',
|
||||||
packingStatus: '',
|
packingStatus: this.firstHeatMaterial || '',
|
||||||
trimmingRequirement: '',
|
trimmingRequirement: '',
|
||||||
temperGrade: '',
|
temperGrade: '',
|
||||||
coatingType: '',
|
coatingType: '',
|
||||||
|
|||||||
@@ -1,15 +1,24 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="typing-coil-container">
|
<div class="typing-coil-container">
|
||||||
<!-- 顶部操作栏 -->
|
<!-- 顶部操作栏 -->
|
||||||
<div class="header-bar">
|
<!-- <div class="header-bar">
|
||||||
<div class="header-title">
|
<div class="header-title">
|
||||||
<i class="el-icon-edit"></i>
|
<i class="el-icon-edit"></i>
|
||||||
<span>钢卷信息更新</span>
|
<span>钢卷信息更新</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-actions">
|
<div class="header-actions">
|
||||||
<el-button size="small" @click="saveTemp" :loading="loading">暂存内容</el-button>
|
|
||||||
<el-button type="primary" size="small" @click="handleSave" :loading="loading">保存更新</el-button>
|
|
||||||
</div>
|
</div>
|
||||||
|
</div> -->
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<CoilInfoRender title="原料信息" :coilInfo="currentInfo" border>
|
||||||
|
<template slot="extra">
|
||||||
|
<el-button type="text" size="mini" @click="copyFromCurrent" icon="el-icon-document-copy">
|
||||||
|
复制源卷信息
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</CoilInfoRender>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-alert v-if="acidPrefill.visible" :title="acidPrefill.title" :type="acidPrefill.type" :closable="false" show-icon
|
<el-alert v-if="acidPrefill.visible" :title="acidPrefill.title" :type="acidPrefill.type" :closable="false" show-icon
|
||||||
@@ -17,155 +26,107 @@
|
|||||||
|
|
||||||
<!-- 主内容区 - 左右布局 -->
|
<!-- 主内容区 - 左右布局 -->
|
||||||
<div class="content-wrapper">
|
<div class="content-wrapper">
|
||||||
<!-- 左侧:当前信息 -->
|
<!-- 左侧:酸轧信息推荐 -->
|
||||||
<div class="left-panel">
|
<div>
|
||||||
<el-card class="info-card">
|
<!-- 酸连轧最近10条记录展示 -->
|
||||||
|
<el-card class="recent-records-card" v-if="acidRecentRecords && acidRecentRecords.length > 0">
|
||||||
<div slot="header" class="card-header">
|
<div slot="header" class="card-header">
|
||||||
<span><i class="el-icon-info"></i> 当前信息</span>
|
<span><i class="el-icon-time"></i> 酸连轧最近记录</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="info-section">
|
<el-table :data="acidRecentRecords" stripe size="small" @row-click="handleClickRecord">
|
||||||
<div class="info-row">
|
<el-table-column prop="currentCoilNo" label="加工前卷号" show-overflow-tooltip></el-table-column>
|
||||||
<span class="info-label">入场钢卷号:</span>
|
<el-table-column prop="excoilId" label="出口卷号" show-overflow-tooltip></el-table-column>
|
||||||
<span class="info-value">{{ currentInfo.enterCoilNo || '—' }}</span>
|
<el-table-column prop="exitWeight" label="出口重量(t)" width="100">
|
||||||
</div>
|
<template slot-scope="scope">
|
||||||
<div class="info-row">
|
{{ scope.row.exitWeight ? scope.row.exitWeight + ' t' : '—' }}
|
||||||
<span class="info-label">当前钢卷号:</span>
|
</template>
|
||||||
<span class="info-value">{{ currentInfo.currentCoilNo || '—' }}</span>
|
</el-table-column>
|
||||||
</div>
|
<el-table-column prop="team" label="班组" width="80"></el-table-column>
|
||||||
<div class="info-row">
|
</el-table>
|
||||||
<span class="info-label">厂家原料卷号:</span>
|
|
||||||
<span class="info-value">{{ currentInfo.supplierCoilNo || '—' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="info-row">
|
|
||||||
<span class="info-label">班组:</span>
|
|
||||||
<span class="info-value">{{ currentInfo.team || '—' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="info-row">
|
|
||||||
<span class="info-label">物品类型:</span>
|
|
||||||
<span class="info-value">{{ getItemTypeText(currentInfo.itemType) }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="info-row">
|
|
||||||
<span class="info-label">物料名称:</span>
|
|
||||||
<span class="info-value">{{ currentInfo.itemName || '—' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="info-row">
|
|
||||||
<span class="info-label">规格:</span>
|
|
||||||
<span class="info-value">{{ currentInfo.specification || '—' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="info-row">
|
|
||||||
<span class="info-label">材质:</span>
|
|
||||||
<span class="info-value">{{ currentInfo.material || '—' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="info-row">
|
|
||||||
<span class="info-label">原料材质:</span>
|
|
||||||
<span class="info-value">{{ currentInfo.packingStatus || '—' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="info-row">
|
|
||||||
<span class="info-label">钢卷表面处理:</span>
|
|
||||||
<span class="info-value">{{ currentInfo.coilSurfaceTreatment || '—' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="info-row">
|
|
||||||
<span class="info-label">厂家:</span>
|
|
||||||
<span class="info-value">{{ currentInfo.manufacturer || '—' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="info-row">
|
|
||||||
<span class="info-label">表面处理:</span>
|
|
||||||
<span class="info-value">{{ currentInfo.surfaceTreatmentDesc || '—' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="info-row">
|
|
||||||
<span class="info-label">毛重:</span>
|
|
||||||
<span class="info-value">{{ currentInfo.grossWeight ? currentInfo.grossWeight + ' t' : '—' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="info-row">
|
|
||||||
<span class="info-label">净重:</span>
|
|
||||||
<span class="info-value">{{ currentInfo.netWeight ? currentInfo.netWeight + ' t' : '—' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="info-row">
|
|
||||||
<span class="info-label">长度:</span>
|
|
||||||
<span class="info-value">{{ currentInfo.length ? currentInfo.length + ' m' : '—' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="info-row">
|
|
||||||
<span class="info-label">调制度:</span>
|
|
||||||
<span class="info-value">{{ currentInfo.temperGrade || '—' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="info-row">
|
|
||||||
<span class="info-label">镀层种类:</span>
|
|
||||||
<span class="info-value">{{ currentInfo.coatingType || '—' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="info-row">
|
|
||||||
<span class="info-label">逻辑库区:</span>
|
|
||||||
<span class="info-value">{{ currentInfo.warehouseName || '—' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="info-row" v-if="currentInfo.remark">
|
|
||||||
<span class="info-label">备注:</span>
|
|
||||||
<span class="info-value">{{ currentInfo.remark }}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 右侧:更新表单 -->
|
<!-- 右侧:更新表单 -->
|
||||||
<div class="right-panel">
|
<div>
|
||||||
<el-card class="form-card">
|
<el-card class="form-card">
|
||||||
<div slot="header" class="card-header">
|
<div slot="header" class="card-header">
|
||||||
<span><i class="el-icon-edit-outline"></i> {{ '更新信息' }}</span>
|
<span><i class="el-icon-edit-outline"></i> {{ '更新信息' }}</span>
|
||||||
<el-button type="text" size="mini" @click="copyFromCurrent" icon="el-icon-document-copy">
|
<div>
|
||||||
复制源卷信息
|
<el-button size="small" @click="saveTemp" :loading="loading">暂存内容</el-button>
|
||||||
</el-button>
|
<el-button type="primary" size="small" @click="handleSave" :loading="loading">保存更新</el-button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-form ref="updateForm" :model="updateForm" :rules="rules" label-width="80px" size="small">
|
<el-form ref="updateForm" :model="updateForm" :rules="rules" label-width="86px" size="small">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="16">
|
||||||
<el-form-item label="当前钢卷号" prop="currentCoilNo">
|
<el-form-item label="当前钢卷号" prop="currentCoilNo">
|
||||||
<el-input v-model="updateForm.currentCoilNo" placeholder="请输入当前钢卷号">
|
<el-input v-model="updateForm.currentCoilNo" placeholder="请输入当前钢卷号">
|
||||||
<template slot="prepend">
|
<template slot="prepend">
|
||||||
<i class="el-icon-document"></i>
|
<i class="el-icon-document"></i> <current-coil-no
|
||||||
|
:current-coil-no="updateForm.currentCoilNo"></current-coil-no>
|
||||||
</template>
|
</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
<current-coil-no :current-coil-no="updateForm.currentCoilNo"></current-coil-no>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
|
||||||
|
<el-col :span="8">
|
||||||
<el-form-item label="班组" prop="team">
|
<el-form-item label="班组" prop="team">
|
||||||
<el-select v-model="updateForm.team" placeholder="请选择班组" style="width: 100%">
|
<el-select v-model="updateForm.team" placeholder="请选择班组" style="width: 100%">
|
||||||
<el-option key="甲" label="甲" value="甲" />
|
<el-option key="甲" label="甲" value="甲" />
|
||||||
<el-option key="乙" label="乙" value="乙" />
|
<el-option key="乙" label="乙" value="乙" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="8">
|
||||||
<el-form-item label="材料类型" prop="materialType">
|
<el-form-item label="材料类型" prop="materialType">
|
||||||
<el-select v-model="updateForm.materialType" placeholder="请选择材料类型" style="width: 100%" @change="handleMaterialTypeChange">
|
<el-select v-model="updateForm.materialType" placeholder="请选择材料类型" style="width: 100%"
|
||||||
|
@change="handleMaterialTypeChange">
|
||||||
<el-option label="原料" value="原料" />
|
<el-option label="原料" value="原料" />
|
||||||
<el-option label="成品" value="成品" />
|
<el-option label="成品" value="成品" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
<el-form-item :label="getItemLabel" prop="itemId" :rules="rules.itemId">
|
<el-form-item :label="getItemLabel" prop="itemId" :rules="rules.itemId">
|
||||||
<RawMaterialSelect v-if="updateForm.materialType === '原料'" v-model="updateForm.itemId" placeholder="请选择原料"
|
<RawMaterialSelect v-if="updateForm.materialType === '原料'" v-model="updateForm.itemId"
|
||||||
style="width: 100%" clearable :disabled="!updateForm.materialType" />
|
placeholder="请选择原料" style="width: 100%" clearable :disabled="!updateForm.materialType" />
|
||||||
<ProductSelect v-else-if="updateForm.materialType === '成品'" v-model="updateForm.itemId"
|
<ProductSelect v-else-if="updateForm.materialType === '成品'" v-model="updateForm.itemId"
|
||||||
placeholder="请选择成品" style="width: 100%" clearable :disabled="!updateForm.materialType" />
|
placeholder="请选择成品" style="width: 100%" clearable :disabled="!updateForm.materialType" />
|
||||||
<div v-else>请先选择物料类型</div>
|
<div v-else>请先选择物料类型</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="原料材质" prop="packingStatus">
|
||||||
|
<el-input v-model="updateForm.packingStatus" placeholder="请输入原料材质">
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="8">
|
||||||
<el-form-item label="质量状态" prop="qualityStatus">
|
<el-form-item label="质量状态" prop="qualityStatus">
|
||||||
<el-select v-model="updateForm.qualityStatus" placeholder="请选择质量状态" style="width: 100%">
|
<el-select v-model="updateForm.qualityStatus" placeholder="请选择质量状态" style="width: 100%">
|
||||||
<el-option v-for="item in dict.type.coil_quality_status" :key="item.value" :label="item.label"
|
<el-option v-for="item in dict.type.coil_quality_status" :key="item.value" :label="item.label"
|
||||||
:value="item.value" />
|
:value="item.value" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
<el-form-item label="切边要求" prop="trimmingRequirement">
|
<el-form-item label="切边要求" prop="trimmingRequirement">
|
||||||
<el-select v-model="updateForm.trimmingRequirement" placeholder="请选择切边要求" style="width: 100%">
|
<el-select v-model="updateForm.trimmingRequirement" placeholder="请选择切边要求" style="width: 100%">
|
||||||
<el-option label="净边料" value="净边料" />
|
<el-option label="净边料" value="净边料" />
|
||||||
<el-option label="毛边料" value="毛边料" />
|
<el-option label="毛边料" value="毛边料" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
<el-form-item label="原料材质" prop="packingStatus">
|
<el-col :span="8">
|
||||||
<el-input v-model="updateForm.packingStatus" placeholder="请输入原料材质">
|
|
||||||
</el-input>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<el-form-item label="包装要求" prop="packagingRequirement">
|
<el-form-item label="包装要求" prop="packagingRequirement">
|
||||||
<el-select v-model="updateForm.packagingRequirement" placeholder="请选择包装要求" style="width: 100%">
|
<el-select v-model="updateForm.packagingRequirement" placeholder="请选择包装要求" style="width: 100%">
|
||||||
<el-option label="裸包" value="裸包" />
|
<el-option label="裸包" value="裸包" />
|
||||||
@@ -174,81 +135,139 @@
|
|||||||
<el-option label="精包" value="精包" />
|
<el-option label="精包" value="精包" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="质量状态" prop="qualityStatus">
|
||||||
|
<el-select v-model="updateForm.qualityStatus" placeholder="请选择质量状态" style="width: 100%">
|
||||||
|
<el-option v-for="item in dict.type.coil_quality_status" :key="item.value" :label="item.label"
|
||||||
|
:value="item.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="切边要求" prop="trimmingRequirement">
|
||||||
|
<el-select v-model="updateForm.trimmingRequirement" placeholder="请选择切边要求" style="width: 100%">
|
||||||
|
<el-option label="净边料" value="净边料" />
|
||||||
|
<el-option label="毛边料" value="毛边料" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="包装要求" prop="packagingRequirement">
|
||||||
|
<el-select v-model="updateForm.packagingRequirement" placeholder="请选择包装要求" style="width: 100%">
|
||||||
|
<el-option label="裸包" value="裸包" />
|
||||||
|
<el-option label="普包" value="普包" />
|
||||||
|
<el-option label="简包" value="简包" />
|
||||||
|
<el-option label="精包" value="精包" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="8">
|
||||||
<el-form-item label="毛重(t)" prop="grossWeight">
|
<el-form-item label="毛重(t)" prop="grossWeight">
|
||||||
<el-input-number :precision="3" :controls="false" v-model="updateForm.grossWeight" placeholder="请输入毛重"
|
<el-input-number :precision="3" :controls="false" v-model="updateForm.grossWeight" placeholder="请输入毛重"
|
||||||
type="number" :step="0.01">
|
type="number" :step="0.01">
|
||||||
</el-input-number>
|
</el-input-number>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
<el-form-item label="净重(t)" prop="netWeight">
|
<el-form-item label="净重(t)" prop="netWeight">
|
||||||
<el-input-number :precision="3" :controls="false" v-model="updateForm.netWeight" placeholder="请输入净重"
|
<el-input-number :precision="3" :controls="false" v-model="updateForm.netWeight" placeholder="请输入净重"
|
||||||
type="number" :step="0.001">
|
type="number" :step="0.001">
|
||||||
<template slot="append">吨</template>
|
<template slot="append">吨</template>
|
||||||
</el-input-number>
|
</el-input-number>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
<el-form-item label="参考长度(m)" prop="length">
|
<el-form-item label="参考长度(m)" prop="length">
|
||||||
<el-input-number :controls="false" v-model="updateForm.length" placeholder="请输入参考长度" type="number"
|
<el-input-number :controls="false" v-model="updateForm.length" placeholder="请输入参考长度" type="number"
|
||||||
:step="0.001">
|
:step="0.001">
|
||||||
<template slot="append">米</template>
|
<template slot="append">米</template>
|
||||||
</el-input-number>
|
</el-input-number>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="8">
|
||||||
<el-form-item label="实测长度(m)" prop="actualLength">
|
<el-form-item label="实测长度(m)" prop="actualLength">
|
||||||
<el-input-number :controls="false" v-model="updateForm.actualLength" placeholder="请输入实测长度" type="number"
|
<el-input-number :controls="false" v-model="updateForm.actualLength" placeholder="请输入实测长度"
|
||||||
:step="0.001">
|
type="number" :step="0.001">
|
||||||
<template slot="append">m</template>
|
<template slot="append">m</template>
|
||||||
</el-input-number>
|
</el-input-number>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
<el-form-item label="实测厚度(mm)" prop="actualThickness" class="form-item-half">
|
<el-form-item label="实测厚度(mm)" prop="actualThickness" class="form-item-half">
|
||||||
<el-input-number :controls="false" v-model="updateForm.actualThickness" placeholder="请输入实测厚度"
|
<el-input-number :controls="false" v-model="updateForm.actualThickness" placeholder="请输入实测厚度"
|
||||||
type="number" :step="0.01">
|
type="number" :step="0.01">
|
||||||
<template slot="append">mm</template>
|
<template slot="append">mm</template>
|
||||||
</el-input-number>
|
</el-input-number>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
<el-form-item label="实测宽度(mm)" prop="actualWidth">
|
<el-form-item label="实测宽度(mm)" prop="actualWidth">
|
||||||
<el-input-number :controls="false" v-model="updateForm.actualWidth" placeholder="请输入实测宽度" type="number"
|
<el-input-number :controls="false" v-model="updateForm.actualWidth" placeholder="请输入实测宽度"
|
||||||
:step="0.001">
|
type="number" :step="0.001">
|
||||||
<template slot="append">mm</template>
|
<template slot="append">mm</template>
|
||||||
</el-input-number>
|
</el-input-number>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="8">
|
||||||
<el-form-item label="业务目的" prop="businessPurpose">
|
<el-form-item label="业务目的" prop="businessPurpose">
|
||||||
<el-select v-model="updateForm.businessPurpose" placeholder="请选择业务目的" style="width: 100%">
|
<el-select v-model="updateForm.businessPurpose" placeholder="请选择业务目的" style="width: 100%">
|
||||||
<el-option v-for="item in dict.type.coil_business_purpose" :key="item.value" :value="item.value"
|
<el-option v-for="item in dict.type.coil_business_purpose" :key="item.value" :value="item.value"
|
||||||
:label="item.label" />
|
:label="item.label" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
<el-form-item label="调制度" prop="temperGrade">
|
<el-form-item label="调制度" prop="temperGrade">
|
||||||
<el-input v-model="updateForm.temperGrade" placeholder="请输入调制度" />
|
<el-input v-model="updateForm.temperGrade" placeholder="请输入调制度" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
<el-form-item label="镀层种类" prop="coatingType">
|
<el-form-item label="镀层种类" prop="coatingType">
|
||||||
<MemoInput storageKey="coatingType" v-model="updateForm.coatingType" placeholder="请输入镀层种类" />
|
<MemoInput storageKey="coatingType" v-model="updateForm.coatingType" placeholder="请输入镀层种类" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="8">
|
||||||
<el-form-item label="钢卷表面处理" prop="coilSurfaceTreatment">
|
<el-form-item label="钢卷表面处理" prop="coilSurfaceTreatment">
|
||||||
<MemoInput storageKey="surfaceTreatmentDesc" v-model="updateForm.coilSurfaceTreatment" placeholder="请输入钢卷表面处理" />
|
<MemoInput storageKey="surfaceTreatmentDesc" v-model="updateForm.coilSurfaceTreatment"
|
||||||
|
placeholder="请输入钢卷表面处理" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
<el-form-item label="逻辑库区" prop="warehouseId">
|
<el-form-item label="逻辑库区" prop="warehouseId">
|
||||||
<WarehouseSelect v-model="updateForm.warehouseId" placeholder="请选择逻辑库区" />
|
<WarehouseSelect v-model="updateForm.warehouseId" placeholder="请选择逻辑库区" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
<el-form-item label="真实库区" prop="actualWarehouseId">
|
<el-form-item label="真实库区" prop="actualWarehouseId">
|
||||||
<ActualWarehouseSelect :clearInput="false" clearable v-model="updateForm.actualWarehouseId" placeholder="请选择真实库区" block />
|
<ActualWarehouseSelect :clearInput="false" clearable v-model="updateForm.actualWarehouseId"
|
||||||
|
placeholder="请选择真实库区" block />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
<el-form-item label="生产开始时间" prop="productionStartTime">
|
<el-form-item label="生产开始时间" prop="productionStartTime">
|
||||||
<TimeInput v-model="updateForm.productionStartTime" @input="calculateProductionDuration" />
|
<TimeInput v-model="updateForm.productionStartTime" @input="calculateProductionDuration" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="生产结束时间" prop="productionEndTime">
|
<el-form-item label="生产结束时间" prop="productionEndTime">
|
||||||
<TimeInput v-model="updateForm.productionEndTime" @input="calculateProductionDuration" :show-now-button="true" />
|
<TimeInput v-model="updateForm.productionEndTime" @input="calculateProductionDuration"
|
||||||
|
:show-now-button="true" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="生产耗时" prop="productionDuration">
|
<el-form-item label="生产耗时" prop="productionDuration">
|
||||||
@@ -266,68 +285,31 @@
|
|||||||
|
|
||||||
<el-form-item label="异常信息">
|
<el-form-item label="异常信息">
|
||||||
<div class="abnormal-container">
|
<div class="abnormal-container">
|
||||||
<div
|
<div v-for="(abnormal, index) in abnormals" :key="index" class="abnormal-item"
|
||||||
v-for="(abnormal, index) in abnormals"
|
@click="editAbnormal(index)">
|
||||||
:key="index"
|
|
||||||
class="abnormal-item"
|
|
||||||
@click="editAbnormal(index)"
|
|
||||||
>
|
|
||||||
<div class="abnormal-content">
|
<div class="abnormal-content">
|
||||||
<div class="abnormal-info">
|
<div class="abnormal-info">
|
||||||
<div class="abnormal-position">{{ getAbnormalPositionText(abnormal.position) }}</div>
|
<div class="abnormal-position">{{ getAbnormalPositionText(abnormal.position) }}</div>
|
||||||
<div class="abnormal-code">{{ getAbnormalCodeText(abnormal.defectCode) }}</div>
|
<div class="abnormal-code">{{ getAbnormalCodeText(abnormal.defectCode) }}</div>
|
||||||
</div>
|
</div>
|
||||||
<el-button
|
<el-button type="danger" size="mini" icon="el-icon-close" class="abnormal-delete"
|
||||||
type="danger"
|
@click.stop="deleteAbnormal(index)"></el-button>
|
||||||
size="mini"
|
|
||||||
icon="el-icon-close"
|
|
||||||
class="abnormal-delete"
|
|
||||||
@click.stop="deleteAbnormal(index)"
|
|
||||||
></el-button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="abnormal-add" @click="addAbnormal">
|
||||||
class="abnormal-add"
|
|
||||||
@click="addAbnormal"
|
|
||||||
>
|
|
||||||
<i class="el-icon-plus"></i>
|
<i class="el-icon-plus"></i>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<!-- 酸连轧最近10条记录展示 -->
|
|
||||||
<el-card class="recent-records-card" v-if="acidRecentRecords && acidRecentRecords.length > 0">
|
|
||||||
<div slot="header" class="card-header">
|
|
||||||
<span><i class="el-icon-time"></i> 酸连轧最近记录</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<el-table :data="acidRecentRecords" stripe size="small" @row-click="handleClickRecord">
|
|
||||||
<el-table-column prop="currentCoilNo" label="加工前卷号" width="120" show-overflow-tooltip></el-table-column>
|
|
||||||
<el-table-column prop="excoilId" label="出口卷号" width="120" show-overflow-tooltip></el-table-column>
|
|
||||||
<el-table-column prop="exitWeight" label="出口重量(t)" width="100">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
{{ scope.row.exitWeight ? scope.row.exitWeight + ' t' : '—' }}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="team" label="班组" width="80"></el-table-column>
|
|
||||||
</el-table>
|
|
||||||
</el-card>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 异常表单弹窗 -->
|
<!-- 异常表单弹窗 -->
|
||||||
<el-dialog
|
<el-dialog :title="currentAbnormalIndex === -1 ? '新增异常' : '编辑异常'" :visible.sync="abnormalDialogVisible"
|
||||||
:title="currentAbnormalIndex === -1 ? '新增异常' : '编辑异常'"
|
width="600px">
|
||||||
:visible.sync="abnormalDialogVisible"
|
<abnormal-form ref="abnormalForm" v-model="abnormalForm" :show-coil-selector="false"></abnormal-form>
|
||||||
width="600px"
|
|
||||||
>
|
|
||||||
<abnormal-form
|
|
||||||
ref="abnormalForm"
|
|
||||||
v-model="abnormalForm"
|
|
||||||
:show-coil-selector="false"
|
|
||||||
></abnormal-form>
|
|
||||||
<div slot="footer" class="dialog-footer">
|
<div slot="footer" class="dialog-footer">
|
||||||
<el-button @click="abnormalDialogVisible = false">取 消</el-button>
|
<el-button @click="abnormalDialogVisible = false">取 消</el-button>
|
||||||
<el-button type="primary" @click="saveAbnormal">确 定</el-button>
|
<el-button type="primary" @click="saveAbnormal">确 定</el-button>
|
||||||
@@ -340,15 +322,23 @@
|
|||||||
<el-alert title="检测到您之前有暂存的钢卷信息,是否恢复使用?" type="info" show-icon :closable="false"></el-alert>
|
<el-alert title="检测到您之前有暂存的钢卷信息,是否恢复使用?" type="info" show-icon :closable="false"></el-alert>
|
||||||
<el-divider content-position="left">暂存的表单数据</el-divider>
|
<el-divider content-position="left">暂存的表单数据</el-divider>
|
||||||
<el-descriptions :column="2" border size="small">
|
<el-descriptions :column="2" border size="small">
|
||||||
<el-descriptions-item label="当前钢卷号">{{ parsedCacheData && parsedCacheData.updateForm && parsedCacheData.updateForm.currentCoilNo || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="当前钢卷号">{{ parsedCacheData && parsedCacheData.updateForm &&
|
||||||
<el-descriptions-item label="班组">{{ parsedCacheData && parsedCacheData.updateForm && parsedCacheData.updateForm.team || '-' }}</el-descriptions-item>
|
parsedCacheData.updateForm.currentCoilNo || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="材料类型">{{ parsedCacheData && parsedCacheData.updateForm && parsedCacheData.updateForm.materialType || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="班组">{{ parsedCacheData && parsedCacheData.updateForm &&
|
||||||
<el-descriptions-item label="质量状态">{{ parsedCacheData && parsedCacheData.updateForm && parsedCacheData.updateForm.qualityStatus || '-' }}</el-descriptions-item>
|
parsedCacheData.updateForm.team || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="净重">{{ parsedCacheData && parsedCacheData.updateForm && parsedCacheData.updateForm.netWeight || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="材料类型">{{ parsedCacheData && parsedCacheData.updateForm &&
|
||||||
<el-descriptions-item label="备注">{{ parsedCacheData && parsedCacheData.updateForm && parsedCacheData.updateForm.remark || '-' }}</el-descriptions-item>
|
parsedCacheData.updateForm.materialType || '-' }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="质量状态">{{ parsedCacheData && parsedCacheData.updateForm &&
|
||||||
|
parsedCacheData.updateForm.qualityStatus || '-' }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="净重">{{ parsedCacheData && parsedCacheData.updateForm &&
|
||||||
|
parsedCacheData.updateForm.netWeight || '-' }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="备注">{{ parsedCacheData && parsedCacheData.updateForm &&
|
||||||
|
parsedCacheData.updateForm.remark || '-' }}</el-descriptions-item>
|
||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
<el-divider v-if="parsedCacheData && parsedCacheData.abnormals && parsedCacheData.abnormals.length > 0" content-position="left">暂存的异常信息({{ parsedCacheData.abnormals.length }}条)</el-divider>
|
<el-divider v-if="parsedCacheData && parsedCacheData.abnormals && parsedCacheData.abnormals.length > 0"
|
||||||
<div v-if="parsedCacheData && parsedCacheData.abnormals && parsedCacheData.abnormals.length > 0" class="abnormal-container" style="margin-bottom: 20px;">
|
content-position="left">暂存的异常信息({{ parsedCacheData.abnormals.length }}条)</el-divider>
|
||||||
|
<div v-if="parsedCacheData && parsedCacheData.abnormals && parsedCacheData.abnormals.length > 0"
|
||||||
|
class="abnormal-container" style="margin-bottom: 20px;">
|
||||||
<div v-for="(abnormal, index) in parsedCacheData.abnormals" :key="index" class="abnormal-item">
|
<div v-for="(abnormal, index) in parsedCacheData.abnormals" :key="index" class="abnormal-item">
|
||||||
<div class="abnormal-content">
|
<div class="abnormal-content">
|
||||||
<div class="abnormal-info">
|
<div class="abnormal-info">
|
||||||
@@ -369,9 +359,9 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { getMaterialCoil, updateMaterialCoil, getMaterialCoilTrace } from '@/api/wms/coil';
|
import { getMaterialCoil, updateMaterialCoil, getFirstHeatCoilMaterial } from '@/api/wms/coil';
|
||||||
import { completeAction, getPendingAction } from '@/api/wms/pendingAction';
|
import { completeAction, getPendingAction } from '@/api/wms/pendingAction';
|
||||||
import { listWarehouse } from '@/api/wms/warehouse';
|
// import { getTimingPlanList } from '@/api/l2/timing'
|
||||||
import { getAcidTypingPrefill } from '@/api/pocket/acidTyping';
|
import { getAcidTypingPrefill } from '@/api/pocket/acidTyping';
|
||||||
import { saveCoilCache, getCoilCacheByCoilId, delCoilCache } from '@/api/wms/coilCache';
|
import { saveCoilCache, getCoilCacheByCoilId, delCoilCache } from '@/api/wms/coilCache';
|
||||||
import ActualWarehouseSelect from "@/components/KLPService/ActualWarehouseSelect";
|
import ActualWarehouseSelect from "@/components/KLPService/ActualWarehouseSelect";
|
||||||
@@ -384,6 +374,7 @@ import { generateCoilNoPrefix } from "@/utils/coil/coilNo";
|
|||||||
import { addCoilContractRel } from "@/api/wms/coilContractRel";
|
import { addCoilContractRel } from "@/api/wms/coilContractRel";
|
||||||
import ContractSelect from "@/components/KLPService/ContractSelect";
|
import ContractSelect from "@/components/KLPService/ContractSelect";
|
||||||
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'TypingCoil',
|
name: 'TypingCoil',
|
||||||
components: {
|
components: {
|
||||||
@@ -457,21 +448,6 @@ export default {
|
|||||||
}
|
}
|
||||||
}, trigger: 'blur'
|
}, trigger: 'blur'
|
||||||
},
|
},
|
||||||
// 仅在新增的时候校验
|
|
||||||
// {
|
|
||||||
// validator: (rule, value, callback) => {
|
|
||||||
// // 没有coilId则为新增 触发校验
|
|
||||||
// checkCoilNo({ currentCoilNo: value, coilId: this.updateForm.coilId }).then(res => {
|
|
||||||
// const { duplicateType } = res.data;
|
|
||||||
// if (duplicateType === 'current' || duplicateType === 'both') {
|
|
||||||
// // alert('当前钢卷号重复,请重新输入');
|
|
||||||
// callback(new Error('当前钢卷号重复,请重新输入'));
|
|
||||||
// } else {
|
|
||||||
// callback();
|
|
||||||
// }
|
|
||||||
// })
|
|
||||||
// }, trigger: 'blur'
|
|
||||||
// }
|
|
||||||
],
|
],
|
||||||
team: [
|
team: [
|
||||||
{ required: true, message: '请输入班组', trigger: 'blur' }
|
{ required: true, message: '请输入班组', trigger: 'blur' }
|
||||||
@@ -583,16 +559,6 @@ export default {
|
|||||||
const prefillRes = await getAcidTypingPrefill(currentCoilNo)
|
const prefillRes = await getAcidTypingPrefill(currentCoilNo)
|
||||||
const prefill = prefillRes && prefillRes.data
|
const prefill = prefillRes && prefillRes.data
|
||||||
|
|
||||||
// this.acidRecentRecords = [
|
|
||||||
// {
|
|
||||||
// currentCoilNo: '12345678',
|
|
||||||
// excoilId: '12345678',
|
|
||||||
// exitWeight: 245.567,
|
|
||||||
// exitLength: 1490,
|
|
||||||
// team: '甲'
|
|
||||||
// }
|
|
||||||
// ]
|
|
||||||
// return;
|
|
||||||
if (!prefill || prefill.length === 0) {
|
if (!prefill || prefill.length === 0) {
|
||||||
this.acidPrefill.type = 'info'
|
this.acidPrefill.type = 'info'
|
||||||
this.acidPrefill.title = '未在二级系统中查找到对应信息,请自行填写'
|
this.acidPrefill.title = '未在二级系统中查找到对应信息,请自行填写'
|
||||||
@@ -703,6 +669,7 @@ export default {
|
|||||||
|
|
||||||
handleClickRecord(row) {
|
handleClickRecord(row) {
|
||||||
this.updateForm = {
|
this.updateForm = {
|
||||||
|
...this.updateForm,
|
||||||
currentCoilNo: row.excoilId,
|
currentCoilNo: row.excoilId,
|
||||||
team: row.team,
|
team: row.team,
|
||||||
netWeight: row.exitWeight,
|
netWeight: row.exitWeight,
|
||||||
@@ -724,6 +691,13 @@ export default {
|
|||||||
...data,
|
...data,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const firstHeatMaterial = await getFirstHeatCoilMaterial(this.currentInfo.enterCoilNo);
|
||||||
|
|
||||||
|
console.log(firstHeatMaterial)
|
||||||
|
if (firstHeatMaterial.code === 200 && firstHeatMaterial.msg) {
|
||||||
|
this.$set(this.updateForm, 'packingStatus', firstHeatMaterial.msg)
|
||||||
|
}
|
||||||
|
|
||||||
// 填充时间相关字段
|
// 填充时间相关字段
|
||||||
if (data.productionStartTime) {
|
if (data.productionStartTime) {
|
||||||
this.updateForm.productionStartTime = data.productionStartTime;
|
this.updateForm.productionStartTime = data.productionStartTime;
|
||||||
@@ -743,48 +717,6 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// 获取物品类型文本
|
|
||||||
getItemTypeText(itemType) {
|
|
||||||
if (itemType === 'raw_material') return '原材料';
|
|
||||||
if (itemType === 'product') return '产品';
|
|
||||||
return '—';
|
|
||||||
},
|
|
||||||
|
|
||||||
// 格式化物品名称(添加规格和参数信息)
|
|
||||||
formatItemName(item) {
|
|
||||||
if (!item) return '';
|
|
||||||
|
|
||||||
// 获取名称(原材料或产品)
|
|
||||||
const name = item.rawMaterialName || item.productName || '';
|
|
||||||
if (!name) return '';
|
|
||||||
|
|
||||||
let displayName = name;
|
|
||||||
const specs = [];
|
|
||||||
|
|
||||||
// 1. 优先显示规格(从对象的specification字段)
|
|
||||||
if (item.specification) {
|
|
||||||
specs.push(item.specification);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 2. 添加参数参数(最多2个)
|
|
||||||
if (item.bomItems && item.bomItems.length > 0) {
|
|
||||||
const bomParams = item.bomItems
|
|
||||||
.filter(bomItem => bomItem.attrKey && bomItem.attrValue)
|
|
||||||
.slice(0, 2); // 最多2个参数参数
|
|
||||||
|
|
||||||
bomParams.forEach(param => {
|
|
||||||
specs.push(`${param.attrKey}:${param.attrValue}`);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// 3. 拼接成最终格式
|
|
||||||
if (specs.length > 0) {
|
|
||||||
displayName += `(${specs.join(' ')})`;
|
|
||||||
}
|
|
||||||
|
|
||||||
return displayName;
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
// 复制当前信息到更新表单
|
// 复制当前信息到更新表单
|
||||||
copyFromCurrent() {
|
copyFromCurrent() {
|
||||||
@@ -823,7 +755,6 @@ export default {
|
|||||||
...copiedFields
|
...copiedFields
|
||||||
};
|
};
|
||||||
|
|
||||||
// materialType 会触发 watch,自动设置 itemType 并加载物品列表
|
|
||||||
this.$message.success('已复制源卷信息,请根据需要修改');
|
this.$message.success('已复制源卷信息,请根据需要修改');
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -1118,7 +1049,8 @@ export default {
|
|||||||
/* 主内容区 */
|
/* 主内容区 */
|
||||||
.content-wrapper {
|
.content-wrapper {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 300px 1fr;
|
margin-top: 10px;
|
||||||
|
grid-template-columns: 600px 1fr;
|
||||||
gap: 10px;
|
gap: 10px;
|
||||||
align-items: stretch; // 改为stretch,让子元素高度一致
|
align-items: stretch; // 改为stretch,让子元素高度一致
|
||||||
}
|
}
|
||||||
@@ -1130,13 +1062,6 @@ export default {
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 右侧面板 */
|
|
||||||
.right-panel {
|
|
||||||
min-width: 0;
|
|
||||||
display: flex;
|
|
||||||
gap: 10px; // 添加间距
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 确保两侧卡片高度一致 */
|
/* 确保两侧卡片高度一致 */
|
||||||
.info-card,
|
.info-card,
|
||||||
.form-card {
|
.form-card {
|
||||||
|
|||||||
Reference in New Issue
Block a user