feat(coil): 添加钢卷号校验功能并优化表单验证

- 新增检查钢卷号是否合法的API接口
- 在基础信息和入库表单中添加钢卷号格式和重复校验
- 实现根据前缀自动获取最大钢卷号功能
- 优化表单组件布局和样式
This commit is contained in:
砂糖
2026-01-12 16:53:58 +08:00
parent 53dd97a1c0
commit 06411166b5
3 changed files with 157 additions and 18 deletions

View File

@@ -195,7 +195,8 @@
<el-button size="mini" type="text" icon="el-icon-view" @click="handlePreviewLabel(scope.row)">
打印
</el-button>
<el-button v-if="scope.row.actionStatus == 0 || scope.row.actionStatus == 1" size="mini" type="text" icon="el-icon-edit" @click="handleEdit(scope.row)">
<el-button v-if="scope.row.actionStatus == 0 || scope.row.actionStatus == 1" size="mini" type="text"
icon="el-icon-edit" @click="handleEdit(scope.row)">
编辑
</el-button>
<el-button v-if="scope.row.actionStatus == 0 || scope.row.actionStatus == 1" type="primary"
@@ -276,9 +277,9 @@
</el-select>
</el-form-item>
<el-form-item :label="getItemLabel" prop="itemId">
<product-select v-if="editCoil.form.itemType == 'product'" v-model="editCoil.form.itemId" placeholder="请选择成品"
<product-select v-if="editCoil.form.itemType == 'product' && editCoil.form.materialType === '成品'" v-model="editCoil.form.itemId" placeholder="请选择成品"
style="width: 100%;" clearable />
<raw-material-select v-else-if="editCoil.form.itemType == 'raw_material'" v-model="editCoil.form.itemId"
<raw-material-select v-else-if="editCoil.form.itemType == 'raw_material' && (editCoil.form.materialType === '原料' || editCoil.form.materialType === '废品')" v-model="editCoil.form.itemId"
placeholder="请选择原料" style="width: 100%;" clearable />
<div v-else>请先选择材料类型</div>
</el-form-item>
@@ -340,7 +341,7 @@
</template>
<script>
import { getMaterialCoil, listMaterialCoil, updateMaterialCoilSimple } from '@/api/wms/coil'
import { getMaterialCoil, listMaterialCoil, updateMaterialCoilSimple, getMaxCoilNo, checkCoilNo } from '@/api/wms/coil'
import { listPendingAction, delPendingAction, updatePendingAction } from '@/api/wms/pendingAction'
import MaterialSelect from "@/components/KLPService/MaterialSelect";
import ActualWarehouseSelect from "@/components/KLPService/ActualWarehouseSelect";
@@ -402,10 +403,51 @@ export default {
{ required: true, message: "请选择收货计划", trigger: "change" }
],
enterCoilNo: [
{ required: true, message: "入场钢卷号不能为空", trigger: "blur" }
{ required: true, message: "入场钢卷号不能为空", trigger: "blur" },
// 自定义校验必须是8位的阿拉伯数字
{
validator: (rule, value, callback) => {
if (!/^\d{8}$/.test(value)) {
callback(new Error('入场钢卷号必须是8位的阿拉伯数字'));
} else {
callback();
}
}, trigger: 'blur'
},
// 远程校验,检查钢卷号是否存在
{
validator: (rule, value, callback) => {
checkCoilNo({ enterCoilNo: value }).then(res => {
const { duplicateType } = res.data;
if (duplicateType === 'enter' || duplicateType === 'both') {
// alert('入场钢卷号重复,请重新输入');
callback(new Error('入场钢卷号重复,请重新输入'));
} else {
callback();
}
})
}, trigger: 'blur'
},
],
currentCoilNo: [
{ required: true, message: "当前钢卷号不能为空", trigger: "blur" }
{ required: true, message: "当前钢卷号不能为空", trigger: "blur" },
// 远程校验,当前钢卷号不能重复
{
validator: (rule, value, callback) => {
checkCoilNo({ currentCoilNo: value }).then(res => {
const { duplicateType } = res.data;
if (duplicateType === 'current' || duplicateType === 'both') {
// alert('当前钢卷号重复,请重新输入');
callback(new Error('当前钢卷号重复,请重新输入'));
} else {
callback();
}
})
}, trigger: 'blur'
},
],
materialType: [
{ required: true, message: "材料类型不能为空", trigger: "change" }
],
itemId: [
{ required: true, message: "物品ID不能为空", trigger: "blur" }
@@ -453,6 +495,7 @@ export default {
this.getList()
this.getTodayPlan()
this.remoteMethod('')
this.getMaxCoilNoByPrefix()
},
computed: {
// 动态显示标签
@@ -656,6 +699,31 @@ export default {
});
});
},
// 获取入场钢卷号前缀(四位的字符串)两位年份+两位月份
getEnterCoilNoPrefix() {
const date = new Date();
const year = date.getFullYear().toString().slice(-2);
const month = (date.getMonth() + 1).toString().padStart(2, '0');
return year + month;
},
// 获取当前的最大钢卷号
getMaxCoilNoByPrefix() {
const prefix = this.getEnterCoilNoPrefix()
getMaxCoilNo(prefix).then(res => {
console.log(res)
// 扣掉最后一位
this.form.enterCoilNo = res.data.maxEnterCoilNo.slice(0, -1);
})
},
// 检查钢卷号是否合法(后端检查)
checkCoilNo() {
checkCoilNo({ currentCoilNo: this.form.currentCoilNo, entryCoilNo: this.form.enterCoilNo }).then(res => {
console.log(res)
// if (res.data) {
// this.$modal.msgError("钢卷号已存在");
// }
})
},
// 取消操作
cancel() {
this.form = {};