refactor(coil): 移除只读模式并优化酸连轧工序处理逻辑

- 删除所有只读模式相关代码和条件判断
- 重构酸连轧工序的数据预填逻辑
- 添加点击表格行自动填充表单功能
- 优化界面布局和组件结构
This commit is contained in:
砂糖
2026-02-07 17:30:24 +08:00
parent 353f26f1d5
commit 3d672acc66

View File

@@ -7,19 +7,12 @@
<span>钢卷信息更新</span> <span>钢卷信息更新</span>
</div> </div>
<div class="header-actions"> <div class="header-actions">
<el-button v-if="!readonly" type="primary" size="small" @click="handleSave" :loading="loading">保存更新</el-button> <el-button type="primary" size="small" @click="handleSave" :loading="loading">保存更新</el-button>
<el-button size="small" @click="handleCancel" :disabled="loading">{{ readonly ? '返回' : '取消' }}</el-button>
</div> </div>
</div> </div>
<el-alert <el-alert v-if="acidPrefill.visible" :title="acidPrefill.title" :type="acidPrefill.type" :closable="false" show-icon
v-if="acidPrefill.visible" style="margin-bottom: 20px;" />
:title="acidPrefill.title"
:type="acidPrefill.type"
:closable="false"
show-icon
style="margin-bottom: 20px;"
/>
<!-- 主内容区 - 左右布局 --> <!-- 主内容区 - 左右布局 -->
<div class="content-wrapper"> <div class="content-wrapper">
@@ -91,15 +84,15 @@
<div class="right-panel"> <div class="right-panel">
<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> {{ readonly ? '查看信息' : '更新信息' }}</span> <span><i class="el-icon-edit-outline"></i> {{ '更新信息' }}</span>
<el-button v-if="!readonly" type="text" size="mini" @click="copyFromCurrent" icon="el-icon-document-copy"> <!-- <el-button type="text" size="mini" @click="copyFromCurrent" icon="el-icon-document-copy">
复制当前信息 复制当前信息
</el-button> </el-button> -->
</div> </div>
<el-form ref="updateForm" :model="updateForm" :rules="rules" label-width="120px" size="small"> <el-form ref="updateForm" :model="updateForm" :rules="rules" label-width="120px" size="small">
<el-form-item label="当前钢卷号" prop="currentCoilNo"> <el-form-item label="当前钢卷号" prop="currentCoilNo">
<el-input v-model="updateForm.currentCoilNo" placeholder="请输入当前钢卷号" :disabled="readonly"> <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>
</template> </template>
@@ -107,56 +100,48 @@
</el-form-item> </el-form-item>
<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%">
:disabled="readonly">
<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-form-item label="材料类型" prop="materialType"> <el-form-item label="材料类型" prop="materialType">
<el-select v-model="updateForm.materialType" placeholder="请选择材料类型" style="width: 100%" <el-select v-model="updateForm.materialType" placeholder="请选择材料类型" style="width: 100%" @change="handleMaterialTypeChange">
:disabled="readonly" @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-form-item :label="getItemLabel" prop="itemId" <el-form-item :label="getItemLabel" prop="itemId" :rules="rules.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="readonly || !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 placeholder="请选择成品" style="width: 100%" clearable :disabled="!updateForm.materialType" />
:disabled="readonly || !updateForm.materialType" />
<div v-else>请先选择物料类型</div> <div v-else>请先选择物料类型</div>
</el-form-item> </el-form-item>
<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%">
:disabled="readonly"> <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-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%">
:disabled="readonly">
<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-form-item label="打包状态" prop="packingStatus"> <el-form-item label="打包状态" prop="packingStatus">
<el-input v-model="updateForm.packingStatus" placeholder="请输入打包状态" <el-input v-model="updateForm.packingStatus" placeholder="请输入打包状态">
:disabled="readonly">
</el-input> </el-input>
</el-form-item> </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%">
:disabled="readonly">
<el-option label="裸包" value="裸包" /> <el-option label="裸包" value="裸包" />
<el-option label="普包" value="普包" /> <el-option label="普包" value="普包" />
<el-option label="简包" value="简包" /> <el-option label="简包" value="简包" />
@@ -164,21 +149,21 @@
</el-form-item> </el-form-item>
<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="请输入毛重" type="number" :step="0.01" <el-input-number :precision="3" :controls="false" v-model="updateForm.grossWeight" placeholder="请输入毛重"
:disabled="readonly"> type="number" :step="0.01">
</el-input-number> </el-input-number>
</el-form-item> </el-form-item>
<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="请输入净重" type="number" :step="0.01" <el-input-number :precision="3" :controls="false" v-model="updateForm.netWeight" placeholder="请输入净重"
:disabled="readonly"> type="number" :step="0.01">
<template slot="append"></template> <template slot="append"></template>
</el-input-number> </el-input-number>
</el-form-item> </el-form-item>
<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" :step="0.01" <el-input-number :controls="false" v-model="updateForm.length" placeholder="请输入长度" type="number"
:disabled="readonly"> :step="0.01">
<template slot="append"></template> <template slot="append"></template>
</el-input-number> </el-input-number>
</el-form-item> </el-form-item>
@@ -192,25 +177,16 @@
</el-form-item> </el-form-item>
<el-form-item label="逻辑库区" prop="warehouseId"> <el-form-item label="逻辑库区" prop="warehouseId">
<WarehouseSelect <WarehouseSelect v-model="updateForm.warehouseId" placeholder="请选择逻辑库区" />
v-model="updateForm.warehouseId"
placeholder="请选择逻辑库区"
:disabled="readonly"
/>
</el-form-item> </el-form-item>
<el-form-item label="真实库区" prop="actualWarehouseId"> <el-form-item label="真实库区" prop="actualWarehouseId">
<ActualWarehouseSelect <ActualWarehouseSelect v-model="updateForm.actualWarehouseId" placeholder="请选择真实库区" block />
v-model="updateForm.actualWarehouseId"
placeholder="请选择真实库区"
block
:disabled="readonly"
/>
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model="updateForm.remark" type="textarea" :rows="4" placeholder="请输入备注信息(非必填)" maxlength="500" <el-input v-model="updateForm.remark" type="textarea" :rows="4" placeholder="请输入备注信息(非必填)" maxlength="500"
show-word-limit :disabled="readonly" /> show-word-limit />
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
@@ -221,8 +197,8 @@
<span><i class="el-icon-time"></i> 酸连轧最近记录</span> <span><i class="el-icon-time"></i> 酸连轧最近记录</span>
</div> </div>
<el-table :data="acidRecentRecords" stripe size="small"> <el-table :data="acidRecentRecords" stripe size="small" @row-click="handleClickRecord">
<el-table-column prop="currentCoilNo" label="当前钢卷号" width="150" show-overflow-tooltip></el-table-column> <el-table-column prop="currentCoilNo" label="加工前卷号" width="150" show-overflow-tooltip></el-table-column>
<el-table-column prop="excoilId" label="出口卷号" width="150" show-overflow-tooltip></el-table-column> <el-table-column prop="excoilId" label="出口卷号" width="150" show-overflow-tooltip></el-table-column>
<el-table-column prop="exitWeight" label="出口重量(t)" width="100"> <el-table-column prop="exitWeight" label="出口重量(t)" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
@@ -241,7 +217,7 @@
</div> </div>
<!-- 变更历史占满整行 --> <!-- 变更历史占满整行 -->
<div class="history-section"> <!-- <div class="history-section">
<el-card class="history-card"> <el-card class="history-card">
<div slot="header" class="card-header"> <div slot="header" class="card-header">
<span><i class="el-icon-time"></i> 变更历史</span> <span><i class="el-icon-time"></i> 变更历史</span>
@@ -252,8 +228,8 @@
<el-timeline v-if="historySteps.length > 0"> <el-timeline v-if="historySteps.length > 0">
<el-timeline-item v-for="(step, index) in historySteps" :key="index" <el-timeline-item v-for="(step, index) in historySteps" :key="index"
:timestamp="`步骤 ${step.display_step || step.step}`" placement="top" :timestamp="`步骤 ${step.display_step || step.step}`" placement="top"
:type="step.operation === '新增' ? 'success' : 'primary'"> :type="step.operation === '新增' ? 'success' : 'primary'">
<div class="history-item"> <div class="history-item">
<div class="history-title">{{ step.operation || step.action }}</div> <div class="history-title">{{ step.operation || step.action }}</div>
<div class="history-detail" v-if="step.operator"> <div class="history-detail" v-if="step.operator">
@@ -277,13 +253,13 @@
<p>暂无变更历史</p> <p>暂无变更历史</p>
</div> </div>
</el-card> </el-card>
</div> </div> -->
</div> </div>
</template> </template>
<script> <script>
import { getMaterialCoil, updateMaterialCoil, getMaterialCoilTrace, checkCoilNo } from '@/api/wms/coil'; import { getMaterialCoil, updateMaterialCoil, getMaterialCoilTrace, checkCoilNo } from '@/api/wms/coil';
import { completeAction } from '@/api/wms/pendingAction'; import { completeAction, getPendingAction } from '@/api/wms/pendingAction';
import { listWarehouse } from '@/api/wms/warehouse'; import { listWarehouse } from '@/api/wms/warehouse';
import { listRawMaterialWithBom } from '@/api/wms/rawMaterial'; import { listRawMaterialWithBom } from '@/api/wms/rawMaterial';
import { listProductWithBom } from '@/api/wms/product'; import { listProductWithBom } from '@/api/wms/product';
@@ -401,8 +377,6 @@ export default {
rawMaterialList: [], rawMaterialList: [],
productList: [], productList: [],
itemSearchLoading: false, itemSearchLoading: false,
// 只读模式
readonly: false,
// 酸连轧最近记录 // 酸连轧最近记录
acidRecentRecords: [] acidRecentRecords: []
}; };
@@ -446,16 +420,14 @@ export default {
// 先加载库区列表 // 先加载库区列表
await this.loadWarehouses(); await this.loadWarehouses();
// 不再一次性加载所有数据,改为实时搜索
// await this.loadAllItems();
// 从路由参数获取coilId和actionId // 从路由参数获取coilId和actionId
const coilId = this.$route.query.coilId; const coilId = this.$route.query.coilId;
const actionId = this.$route.query.actionId; const actionId = this.$route.query.actionId;
const actionType = this.$route.query.actionType; let actionType = ''
const readonly = this.$route.query.readonly; const pendingActionRes = await getPendingAction(actionId)
actionType = pendingActionRes.data.actionType
this.isAcidRolling = actionType === '酸连轧工序' this.isAcidRolling = actionType == 11
if (this.isAcidRolling) { if (this.isAcidRolling) {
this.acidPrefill.visible = true this.acidPrefill.visible = true
@@ -468,7 +440,6 @@ export default {
if (this.isAcidRolling) { if (this.isAcidRolling) {
const currentCoilNo = this.currentInfo && this.currentInfo.currentCoilNo const currentCoilNo = this.currentInfo && this.currentInfo.currentCoilNo
console.log('[typing] acid rolling actionType detected, will call prefill API with currentCoilNo (encoilid)=', currentCoilNo)
if (!currentCoilNo) { if (!currentCoilNo) {
this.acidPrefill.type = 'warning' this.acidPrefill.type = 'warning'
@@ -478,7 +449,17 @@ export default {
const prefillRes = await getAcidTypingPrefill(currentCoilNo) const prefillRes = await getAcidTypingPrefill(currentCoilNo)
const prefill = prefillRes && prefillRes.data const prefill = prefillRes && prefillRes.data
if (!prefill) { // this.acidRecentRecords = [
// {
// currentCoilNo: '12345678',
// excoilId: '12345678',
// exitWeight: 245.567,
// exitLength: 1490,
// team: '甲'
// }
// ]
// return;
if (!prefill || prefill.length === 0) {
this.acidPrefill.type = 'info' this.acidPrefill.type = 'info'
this.acidPrefill.title = '未在二级系统中查找到对应信息,请自行填写' this.acidPrefill.title = '未在二级系统中查找到对应信息,请自行填写'
} else { } else {
@@ -546,11 +527,6 @@ export default {
if (actionId) { if (actionId) {
this.actionId = actionId; this.actionId = actionId;
} }
// 设置只读模式
if (readonly === 'true' || readonly === true) {
this.readonly = true;
}
}, },
methods: { methods: {
// 处理材料类型变化 // 处理材料类型变化
@@ -570,6 +546,16 @@ export default {
} }
}, },
handleClickRecord(row) {
this.updateForm = {
currentCoilNo: row.excoilId,
team: row.team,
netWeight: row.exitWeight,
grossWeight: row.exitWeight,
length: row.exitLength,
}
},
// 加载钢卷信息 // 加载钢卷信息
async loadCoilInfo(coilId) { async loadCoilInfo(coilId) {
try { try {
@@ -885,7 +871,6 @@ export default {
.right-panel { .right-panel {
min-width: 0; min-width: 0;
display: flex; display: flex;
flex-direction: column;
gap: 20px; // 添加间距 gap: 20px; // 添加间距
} }