feat(wms/coil): 增加排产厚度字段

1. 新增排产厚度字段到钢卷信息列表、报表列配置、分条/合并/录入页面
2. 优化部分代码格式与换行,修复多余空格问题
3. 调整表单布局,将排产厚度表单项加入对应页面
This commit is contained in:
2026-06-10 17:22:12 +08:00
parent 4342215c00
commit 87d72b2a0d
6 changed files with 110 additions and 182 deletions

View File

@@ -7,25 +7,14 @@
<div class="coil-info-card">
<el-row :gutter="20" flex justify="end">
<!-- 新增分条按钮 -->
<el-button
v-if="actionStatus != 2"
type="primary"
icon="el-icon-plus"
:loading="buttonLoading"
@click="addSplitForm"
>
<el-button v-if="actionStatus != 2" type="primary" icon="el-icon-plus" :loading="buttonLoading"
@click="addSplitForm">
新增分条
</el-button>
<!-- 完成分条按钮 -->
<el-button
v-if="actionStatus != 2"
type="success"
icon="el-icon-check"
:disabled="splitList.length === 0"
:loading="buttonLoading"
@click="completeSplit"
>
<el-button v-if="actionStatus != 2" type="success" icon="el-icon-check" :disabled="splitList.length === 0"
:loading="buttonLoading" @click="completeSplit">
完成整体分条
</el-button>
@@ -36,12 +25,8 @@
<el-descriptions :column="2" border title="待分条钢卷信息">
<template slot="extra">
<el-button
v-if="showSplitForm"
type="info"
icon="el-icon-document-copy"
@click="copyFromSourceCoil"
>复制源卷信息</el-button>
<el-button v-if="showSplitForm" type="info" icon="el-icon-document-copy"
@click="copyFromSourceCoil">复制源卷信息</el-button>
</template>
<el-descriptions-item label="入场钢卷号">{{ coilInfo.enterCoilNo || '-' }}</el-descriptions-item>
<el-descriptions-item label="当前钢卷号">{{ coilInfo.currentCoilNo || '-' }}</el-descriptions-item>
@@ -63,14 +48,8 @@
<!-- 已分条钢卷列表 -->
<el-descriptions :column="1" border title="已分出的钢卷列表" />
<el-table
v-loading="splitListLoading"
:data="splitList"
highlight-current-row
border
stripe
@row-click="handleSplitItemClick"
>
<el-table v-loading="splitListLoading" :data="splitList" highlight-current-row border stripe
@row-click="handleSplitItemClick">
<el-table-column prop="enterCoilNo" label="入场钢卷号" />
<el-table-column prop="currentCoilNo" label="当前钢卷号" />
@@ -122,7 +101,8 @@
<el-col :span="12">
<div v-if="showSplitForm" class="split-form-card">
<el-card title="分条钢卷信息录入" shadow="hover">
<el-alert v-if="!isExemptFromValidation" type="warning" :closable="false" show-icon style="margin-bottom:12px">
<el-alert v-if="!isExemptFromValidation" type="warning" :closable="false" show-icon
style="margin-bottom:12px">
<template slot="title">
子卷的<b>净重</b><b>实测厚度</b>均不能超过父卷完成分条时所有子卷净重总和不能超过父卷净重
</template>
@@ -139,12 +119,8 @@
<current-coil-no :current-coil-no="splitForm.currentCoilNo" />
</el-form-item>
<el-form-item label="所在库位" prop="warehouseId">
<warehouse-select
v-model="splitForm.warehouseId"
placeholder="请选择仓库/库区/库位"
style="width: 100%;"
clearable
/>
<warehouse-select v-model="splitForm.warehouseId" placeholder="请选择仓库/库区/库位" style="width: 100%;"
clearable />
</el-form-item>
<el-form-item label="班组" prop="team">
<el-select v-model="splitForm.team" placeholder="请选择班组" style="width: 100%">
@@ -159,30 +135,16 @@
</el-select>
</el-form-item>
<el-form-item :label="getItemLabel" prop="itemId">
<product-select
v-if="splitForm.itemType === 'product'"
v-model="splitForm.itemId"
placeholder="请选择成品"
style="width: 100%;"
clearable
/>
<raw-material-select
v-else-if="splitForm.itemType === 'raw_material'"
v-model="splitForm.itemId"
placeholder="请选择原料"
style="width: 100%;"
clearable
/>
<product-select v-if="splitForm.itemType === 'product'" v-model="splitForm.itemId" placeholder="请选择成品"
style="width: 100%;" clearable />
<raw-material-select v-else-if="splitForm.itemType === 'raw_material'" v-model="splitForm.itemId"
placeholder="请选择原料" style="width: 100%;" clearable />
<div v-else>请先选择材料类型</div>
</el-form-item>
<el-form-item label="质量状态" prop="qualityStatus">
<el-select v-model="splitForm.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-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-form-item label="切边要求" prop="trimmingRequirement">
@@ -208,44 +170,26 @@
<el-form-item label="净重" prop="netWeight">
<el-input v-model="splitForm.netWeight" placeholder="请输入净重" type="number" />
</el-form-item>
<el-form-item label="长度" prop="length">
<el-input v-model="splitForm.length" placeholder="请输入长度" type="number" />
<el-form-item label="排产厚度(mm)" prop="scheduleThickness">
<el-input-number v-model="splitForm.scheduleThickness" :controls="false" placeholder="请输入排产厚度"
type="number" :step="0.01" />
</el-form-item>
<el-form-item label="实测长度(m)" prop="actualLength">
<el-input-number
v-model="splitForm.actualLength"
:controls="false"
placeholder="请输入实测长度"
type="number"
:step="0.01"
/>
<el-input-number v-model="splitForm.actualLength" :controls="false" placeholder="请输入实测长度" type="number"
:step="0.01" />
</el-form-item>
<el-form-item label="实测厚度(mm)" prop="actualThickness">
<el-input-number
v-model="splitForm.actualThickness"
:controls="false"
placeholder="请输入实测厚度"
type="number"
:step="0.01"
/>
<el-input-number v-model="splitForm.actualThickness" :controls="false" placeholder="请输入实测厚度"
type="number" :step="0.01" />
</el-form-item>
<el-form-item label="实测宽度(mm)" prop="actualWidth">
<el-input-number
v-model="splitForm.actualWidth"
:controls="false"
placeholder="请输入实测宽度"
type="number"
:step="0.01"
/>
<el-input-number v-model="splitForm.actualWidth" :controls="false" placeholder="请输入实测宽度" type="number"
:step="0.01" />
</el-form-item>
<el-form-item label="业务目的" prop="businessPurpose">
<el-select v-model="splitForm.businessPurpose" placeholder="业务目的" filterable>
<el-option
v-for="item in dict.type.coil_business_purpose"
:key="item.value"
:value="item.value"
:label="item.label"
/>
<el-option v-for="item in dict.type.coil_business_purpose" :key="item.value" :value="item.value"
:label="item.label" />
</el-select>
</el-form-item>
<el-form-item label="调制度" prop="temperGrade">
@@ -255,21 +199,15 @@
<MemoInput v-model="splitForm.coatingType" storage-key="coatingType" placeholder="请输入镀层种类" />
</el-form-item>
<el-form-item label="钢卷表面处理" prop="coilSurfaceTreatment">
<MemoInput
v-model="splitForm.coilSurfaceTreatment"
storage-key="surfaceTreatmentDesc"
placeholder="请输入钢卷表面处理"
/>
<MemoInput v-model="splitForm.coilSurfaceTreatment" storage-key="surfaceTreatmentDesc"
placeholder="请输入钢卷表面处理" />
</el-form-item>
<el-form-item label="生产开始时间" prop="productionStartTime">
<TimeInput v-model="splitForm.productionStartTime" @input="calculateProductionDuration" />
</el-form-item>
<el-form-item label="生产结束时间" prop="productionEndTime">
<TimeInput
v-model="splitForm.productionEndTime"
:show-now-button="true"
@input="calculateProductionDuration"
/>
<TimeInput v-model="splitForm.productionEndTime" :show-now-button="true"
@input="calculateProductionDuration" />
</el-form-item>
<el-form-item label="生产耗时" prop="productionDuration">
<el-input v-model="splitForm.formattedDuration" placeholder="自动计算" disabled />
@@ -285,25 +223,17 @@
<el-form-item label="异常信息">
<div style="display: flex; align-items: center; gap: 8px;">
<div class="abnormal-container">
<div
v-for="(abnormal, index) in abnormals"
:key="index"
:class="['abnormal-item', { inherited: abnormal._inherited }]"
@click="editAbnormal(index)"
>
<div v-for="(abnormal, index) in abnormals" :key="index"
:class="['abnormal-item', { inherited: abnormal._inherited }]" @click="editAbnormal(index)">
<div class="abnormal-content">
<div class="abnormal-info">
<div class="abnormal-position">{{ getAbnormalPositionText(abnormal.position) }}</div>
<div class="abnormal-code">{{ getAbnormalCodeText(abnormal.defectCode) }}</div>
<div v-if="abnormal._inherited" class="abnormal-inherit-tip">继承 · {{ abnormal.processSource }}</div>
<div v-if="abnormal._inherited" class="abnormal-inherit-tip">继承 · {{ abnormal.processSource }}
</div>
</div>
<el-button
type="danger"
size="mini"
icon="el-icon-close"
class="abnormal-delete"
@click.stop="deleteAbnormal(index)"
/>
<el-button type="danger" size="mini" icon="el-icon-close" class="abnormal-delete"
@click.stop="deleteAbnormal(index)" />
</div>
</div>
<div class="abnormal-add" @click="addAbnormal">
@@ -341,12 +271,8 @@
</el-row>
<!-- 异常表单弹窗 -->
<el-dialog
:title="currentAbnormalIndex === -1 ? '新增异常' : '编辑异常'"
:visible.sync="abnormalDialogVisible"
width="600px"
append-to-body
>
<el-dialog :title="currentAbnormalIndex === -1 ? '新增异常' : '编辑异常'" :visible.sync="abnormalDialogVisible"
width="600px" append-to-body>
<abnormal-form ref="abnormalForm" v-model="abnormalForm" :show-coil-selector="false" />
<div slot="footer" class="dialog-footer">
<el-button @click="abnormalDialogVisible = false"> </el-button>
@@ -378,15 +304,10 @@
<el-descriptions-item label="备注">{{ parsedCacheData && parsedCacheData.splitForm &&
parsedCacheData.splitForm.remark || '-' }}</el-descriptions-item>
</el-descriptions>
<el-divider
v-if="parsedCacheData && parsedCacheData.abnormals && parsedCacheData.abnormals.length > 0"
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;"
>
<el-divider v-if="parsedCacheData && parsedCacheData.abnormals && parsedCacheData.abnormals.length > 0"
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 class="abnormal-content">
<div class="abnormal-info">
@@ -409,7 +330,8 @@
:close-on-click-modal="false">
<div v-loading="inheritLoading">
<template v-if="parentCoils.length > 0">
<el-alert title="以下为当前钢卷的异常记录,请选择要继承的异常" type="info" :closable="false" show-icon style="margin-bottom: 16px;" />
<el-alert title="以下为当前钢卷的异常记录,请选择要继承的异常" type="info" :closable="false" show-icon
style="margin-bottom: 16px;" />
<div v-for="(parent, pIdx) in parentCoils" :key="parent.coilId" class="parent-coil-section">
<div class="parent-header">
<span class="parent-title">当前钢卷 #{{ pIdx + 1 }}{{ parent.currentCoilNo || parent.coilId }}</span>
@@ -417,13 +339,11 @@
<el-table :data="parent.abnormalList" border stripe size="small" style="width: 100%">
<el-table-column width="50">
<template slot="header">
<el-checkbox :indeterminate="parent.isIndeterminate"
:value="parent.checkedAll"
<el-checkbox :indeterminate="parent.isIndeterminate" :value="parent.checkedAll"
@change="val => handleParentSelectAll(parent, val)" />
</template>
<template slot-scope="scope">
<el-checkbox v-model="scope.row._selected"
@change="() => recalcParentCheckState(parent)" />
<el-checkbox v-model="scope.row._selected" @change="() => recalcParentCheckState(parent)" />
</template>
</el-table-column>
<el-table-column label="缺陷描述" prop="remark" show-overflow-tooltip />
@@ -742,7 +662,7 @@ export default {
},
async handleDeleteSplit(row) {
this.$modal.confirm('确认删除该分卷吗?').then(async() => {
this.$modal.confirm('确认删除该分卷吗?').then(async () => {
try {
await delMaterialCoil(row.coilId)
this.$message.success('删除成功')
@@ -999,7 +919,7 @@ export default {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning'
}).then(async() => {
}).then(async () => {
const loading = this.$loading({
lock: true,
text: '正在记录分条操作...',
@@ -1233,7 +1153,7 @@ export default {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async() => {
}).then(async () => {
try {
await delCoilCache(this.currentCache.cacheId)
this.$message.success('删除缓存成功')