feat: 修改打包状态为原料材质并优化异常管理功能

修改所有打包状态字段为原料材质,统一业务术语
重构异常管理功能,新增异常记录列表和删除功能
优化分条钢卷面板显示更多物料信息
将切边要求和包装要求改为下拉选择框
This commit is contained in:
砂糖
2026-03-30 13:13:46 +08:00
parent 9cf0d289c3
commit aacf433462
21 changed files with 361 additions and 104 deletions

View File

@@ -355,8 +355,8 @@
</el-select>
</el-form-item>
<el-form-item label="打包状态" prop="packingStatus">
<el-input v-model="form.packingStatus" placeholder="请输入打包状态">
<el-form-item label="原料材质" prop="packingStatus">
<el-input v-model="form.packingStatus" placeholder="请输入原料材质">
</el-input>
</el-form-item>
@@ -791,7 +791,7 @@ export default {
{ label: '毛重', prop: 'grossWeight' },
{ label: '备注', prop: 'remark' },
{ label: '质量状态', prop: 'qualityStatus' },
{ label: '打包状态', prop: 'packingStatus' },
{ label: '原料材质', prop: 'packingStatus' },
{ label: '切边要求', prop: 'edgeRequirement' },
{ label: '包装要求', prop: 'packagingRequirement' },
{ label: '厂家', prop: 'itemManufacturer' },

View File

@@ -84,7 +84,7 @@
<span class="param-value">{{ item.trimmingRequirement }}</span>
</div>
<div class="param-row" v-if="item.packingStatus">
<span class="param-label">打包状态</span>
<span class="param-label">原料材质</span>
<span class="param-value">{{ item.packingStatus }}</span>
</div>
<div class="param-row" v-if="item.packagingRequirement">
@@ -410,13 +410,8 @@
</el-col>
</el-row>
<el-dialog title="新增异常" :visible.sync="exceptionDialogVisible" width="600px">
<abnormal-form ref="abnormalForm" v-model="exceptionForm" :show-coil-selector="false"></abnormal-form>
<div slot="footer" class="dialog-footer">
<el-button type="info" @click="handleAbnormal">查看异常</el-button>
<el-button type="primary" @click="confirmException"> </el-button>
<el-button @click="cancelException"> </el-button>
</div>
<el-dialog title="异常管理" :visible.sync="exceptionDialogVisible" fullscreen>
<exception-manager :coilId="currentCoilId"></exception-manager>
</el-dialog>
<!-- 标签预览弹窗 -->
@@ -439,10 +434,9 @@ import { listPendingAction, startProcess, cancelAction, delPendingAction, addPen
import { parseTime } from '@/utils/klp'
import ProductInfo from '@/components/KLPService/Renderer/ProductInfo'
import RawMaterialInfo from '@/components/KLPService/Renderer/RawMaterialInfo'
import { addCoilAbnormal } from '@/api/wms/coilAbnormal'
import LabelRender from './LabelRender/index.vue'
import StepSplit from './stepSplit.vue'
import AbnormalForm from '../components/AbnormalForm'
import ExceptionManager from '../components/ExceptionManager'
import { getCoilTagPrintType } from '@/views/wms/coil/js/coilPrint'
export default {
@@ -467,7 +461,7 @@ export default {
RawMaterialInfo,
LabelRender,
StepSplit,
AbnormalForm
ExceptionManager
},
data() {
return {
@@ -503,16 +497,7 @@ export default {
},
buttonLoading: false,
exceptionDialogVisible: false,
exceptionForm: {
coilId: null,
position: null,
lengthCoord: null,
startPosition: 0,
endPosition: 0,
defectCode: null,
degree: null,
remark: null
},
currentCoilId: null,
tagSizeMap: {
'2': {
width: 100,
@@ -930,27 +915,14 @@ export default {
return '—'
},
handleAddAbnormal(row) {
this.exceptionForm.coilId = row.coilId
this.currentCoilId = row.coilId
if (!row.coilId) {
this.$message.error('请先选择钢卷')
return
}
// 显示弹窗
this.exceptionDialogVisible = true
},
confirmException() {
this.$refs["abnormalForm"].validate(valid => {
if (valid) {
addCoilAbnormal({
...this.exceptionForm,
length: this.exceptionForm.endPosition - this.exceptionForm.startPosition,
}).then(response => {
this.$message.success('异常记录添加成功')
this.cancelException();
// 重置表单
this.getMaterialCoil()
}).catch(error => {
console.error('异常记录添加失败:', error)
this.$message.error('异常记录添加失败: ' + (error.message || error))
})
}
});
},
handleAbnormal() {
this.$router.push({
path: '/quality/detail',
@@ -1386,4 +1358,16 @@ export default {
}
}
}
// 对话框底部样式
.dialog-footer {
display: flex;
justify-content: center;
gap: 10px;
padding: 16px;
border-top: 1px solid #e4e7ed;
background-color: #fafafa;
}
</style>

View File

@@ -30,16 +30,28 @@
<el-descriptions-item label="所在库位">{{ coilInfo.warehouseName || '-' }}</el-descriptions-item>
<el-descriptions-item label="材料类型">{{ coilInfo.materialType || '-' }}</el-descriptions-item>
<el-descriptions-item label="净重">{{ coilInfo.netWeight || '-' }} T</el-descriptions-item>
<el-descriptions-item label="物料名称">{{ coilInfo.itemName || '-' }}</el-descriptions-item>
<el-descriptions-item label="规格">{{ coilInfo.specification || '-' }}</el-descriptions-item>
<el-descriptions-item label="材质">{{ coilInfo.material || '-' }}</el-descriptions-item>
<el-descriptions-item label="原料材质">{{ coilInfo.packingStatus || '-' }}</el-descriptions-item>
<el-descriptions-item label="净重">{{ coilInfo.netWeight || '-' }} T</el-descriptions-item>
</el-descriptions>
<!-- 已分条钢卷列表 -->
<el-descriptions :column="1" border title="已分出的钢卷列表"></el-descriptions>
<el-table v-loading="splitListLoading" :data="splitList" @row-click="handleSplitItemClick"
highlight-current-row border stripe>
<el-table-column prop="enterCoilNo" label="入场钢卷号" />
<el-table-column prop="currentCoilNo" label="当前钢卷号" />
<el-table-column prop="materialType" label="料类型" />
<el-table-column prop="netWeight" label="净重" />
<el-table-column prop="dataType" label="钢卷状态">
<el-table-column label="料类型">
<template #default="scope">
<ProductInfo v-if="scope.row.itemType == 'product'" :product="scope.row" />
<RawMaterialInfo v-else-if="scope.row.itemType === 'raw_material'" :material="scope.row" />
</template>
</el-table-column>
<el-table-column prop="netWeight" label="净重" width="70" />
<el-table-column prop="dataType" label="钢卷状态" width="80">
<template #default="scope">
<div v-if="scope.row.status == 1">
<el-tag type="info">已发货</el-tag>
@@ -56,7 +68,7 @@
</template>
</el-table-column>
<el-table-column label="操作" width="220">
<el-table-column label="操作" width="180">
<template #default="scope">
<div v-if="scope.row.dataType == 1 && scope.row.status == 0">
<el-button @click.stop="handlePrint(scope.row)">打印</el-button>
@@ -126,8 +138,8 @@
<el-option label="毛边料" value="毛边料" />
</el-select>
</el-form-item>
<el-form-item label="打包状态" prop="packingStatus">
<el-input v-model="splitForm.packingStatus" placeholder="请输入打包状态" />
<el-form-item label="原料材质" prop="packingStatus">
<el-input v-model="splitForm.packingStatus" placeholder="请输入原料材质" />
</el-form-item>
<el-form-item label="包装要求" prop="packagingRequirement">
<el-select v-model="splitForm.packagingRequirement" placeholder="请选择包装要求" style="width: 100%">
@@ -225,13 +237,13 @@
<el-descriptions-item label="厂家">{{ selectedSplitItem.manufacturer || '-' }}</el-descriptions-item>
<el-descriptions-item label="镀层质量">{{ selectedSplitItem.zincLayer || '-' }}</el-descriptions-item>
<el-descriptions-item label="表面处理">{{ selectedSplitItem.surfaceTreatmentDesc || '-'
}}</el-descriptions-item>
}}</el-descriptions-item>
<el-descriptions-item label="质量状态">{{ selectedSplitItem.qualityStatus || '-' }}</el-descriptions-item>
<el-descriptions-item label="切边要求">{{ selectedSplitItem.trimmingRequirement || '-'
}}</el-descriptions-item>
<el-descriptions-item label="打包状态">{{ selectedSplitItem.packingStatus || '-' }}</el-descriptions-item>
<el-descriptions-item label="原料材质">{{ selectedSplitItem.packingStatus || '-' }}</el-descriptions-item>
<el-descriptions-item label="包装要求">{{ selectedSplitItem.packagingRequirement || '-'
}}</el-descriptions-item>
<el-descriptions-item label="实测厚度(m)">{{ selectedSplitItem.actualThickness || '-' }}
@@ -246,12 +258,12 @@
<el-descriptions-item label="调制度">{{ selectedSplitItem.temperGrade || '-' }}</el-descriptions-item>
<el-descriptions-item label="镀层种类">{{ selectedSplitItem.coatingType || '-' }}</el-descriptions-item>
<el-descriptions-item label="生产开始时间">{{ selectedSplitItem.productionStartTime || '-'
}}</el-descriptions-item>
}}</el-descriptions-item>
<el-descriptions-item label="生产结束时间">{{ selectedSplitItem.productionEndTime || '-'
}}</el-descriptions-item>
}}</el-descriptions-item>
<el-descriptions-item label="生产耗时">{{ selectedSplitItem.formattedDuration ||
(selectedSplitItem.productionDuration ? selectedSplitItem.productionDuration + ' 分钟' : '-')
}}</el-descriptions-item>
}}</el-descriptions-item>
<el-descriptions-item label="备注" :span="2">{{ selectedSplitItem.remark || '-' }}</el-descriptions-item>
</el-descriptions>
</el-card>
@@ -287,6 +299,8 @@ import ActualWarehouseSelect from "@/components/KLPService/ActualWarehouseSelect
import TimeInput from "@/components/TimeInput";
import AbnormalForm from '../components/AbnormalForm';
import { generateCoilNoPrefix } from "@/utils/coil/coilNo";
import ProductInfo from "@/components/KLPService/Renderer/ProductInfo";
import RawMaterialInfo from "@/components/KLPService/Renderer/RawMaterialInfo";
export default {
name: 'StepSplit',
@@ -314,7 +328,9 @@ export default {
WarehouseSelect,
ActualWarehouseSelect,
TimeInput,
AbnormalForm
AbnormalForm,
ProductInfo,
RawMaterialInfo,
},
dicts: ['coil_quality_status', 'coil_abnormal_position', 'coil_abnormal_code', 'coil_abnormal_degree'],
data() {