|
|
@@ -48,6 +48,21 @@
|
|
|
</view>
|
|
|
</view>
|
|
|
|
|
|
+ <!-- 不良品是否入库单选按钮 - 仅在 businessType 为 '0' 时显示 -->
|
|
|
+ <view class="bad-material-radio" v-if="businessType == '0'">
|
|
|
+ <text class="radio-label">不良品是否入库:</text>
|
|
|
+ <radio-group @change="handleBadMaterialChange" class="radio-group">
|
|
|
+ <label class="radio-item">
|
|
|
+ <radio value="1" :checked="badMaterialInStockFlag === '1'" color="#00a0e9" />
|
|
|
+ <text>是</text>
|
|
|
+ </label>
|
|
|
+ <label class="radio-item">
|
|
|
+ <radio value="0" :checked="badMaterialInStockFlag === '0'" color="#00a0e9" />
|
|
|
+ <text>否</text>
|
|
|
+ </label>
|
|
|
+ </radio-group>
|
|
|
+ </view>
|
|
|
+
|
|
|
<!-- 仓库和货位信息展示 -->
|
|
|
<view class="info-row">
|
|
|
<text class="info-label">仓库:</text>
|
|
|
@@ -223,11 +238,14 @@ export default defineComponent({
|
|
|
const submitDisabled = ref(false)
|
|
|
const receiveList = ref([])
|
|
|
|
|
|
+ /* -------------------- 不良品是否入库字段 -------------------- */
|
|
|
+ const badMaterialInStockFlag = ref(null)
|
|
|
+
|
|
|
/* -------------------- FIFO相关变量 -------------------- */
|
|
|
const fifoPopup = ref(null) // 弹窗实例
|
|
|
const fifoMsg = ref('') // 提示语
|
|
|
let fifoQrCode = '' // 缓存本次二维码
|
|
|
- const fifoGo = ref(false) // 用户是否点了“继续”
|
|
|
+ const fifoGo = ref(false) // 用户是否点了"继续"
|
|
|
// 存储fifo_check_order_type字典数据
|
|
|
const fifoCheckOrderTypeDict = ref([])
|
|
|
// 标记businessType是否在fifo_check_order_type字典内
|
|
|
@@ -379,7 +397,7 @@ const checkFifo = (qrCode) => {
|
|
|
|
|
|
// 2. FIFO 校验(暂时注释)
|
|
|
// const pass = await checkFifo(qrCode)
|
|
|
- // if (!pass) return // 用户点了“取消”
|
|
|
+ // if (!pass) return // 用户点了"取消"
|
|
|
const pass = true // FIFO校验直接放行
|
|
|
|
|
|
// 3. 业务接口
|
|
|
@@ -409,7 +427,7 @@ const checkFifo = (qrCode) => {
|
|
|
const row = tableData.value[fdIndex.value]
|
|
|
if (row.nowDeliveredQty > row.completedQty) {
|
|
|
/* ******** 前端暂存开始 ******** */
|
|
|
- // 1) 累加到“已备数”
|
|
|
+ // 1) 累加到"已备数"
|
|
|
row.completedQty += currentScanMaterial.value.receiptQty || 1
|
|
|
|
|
|
// 2) 扔进本地已扫池(用于已扫物料列表展示)
|
|
|
@@ -512,7 +530,7 @@ const checkFifo = (qrCode) => {
|
|
|
const row = tableData.value[fdIndex.value]
|
|
|
if (row.nowDeliveredQty > row.completedQty) {
|
|
|
/* ******** 前端暂存开始 ******** */
|
|
|
- // 1) 累加到“已备数”
|
|
|
+ // 1) 累加到"已备数"
|
|
|
row.completedQty += currentScanMaterial.value.receiptQty || 1
|
|
|
|
|
|
// 2) 扔进本地已扫池(用于已扫物料列表展示)
|
|
|
@@ -585,7 +603,7 @@ const checkFifo = (qrCode) => {
|
|
|
const flushBeforeTableData = function() {
|
|
|
const map = new Map()
|
|
|
localScannedList.value.forEach(it => {
|
|
|
- // 用“物料编码+批号”当唯一键
|
|
|
+ // 用"物料编码+批号"当唯一键
|
|
|
const key = `${it.materialNo}__${it.batchNumber}`
|
|
|
if (map.has(key)) {
|
|
|
map.get(key).batchQty += it.batchQty // 同批号累加
|
|
|
@@ -664,7 +682,7 @@ const checkFifo = (qrCode) => {
|
|
|
// 2.2 重新合并生成 beforeTableData
|
|
|
flushBeforeTableData();
|
|
|
|
|
|
- // 2.3 把对应物料的“已备数”回退
|
|
|
+ // 2.3 把对应物料的"已备数"回退
|
|
|
const row = tableData.value.find(r => r.materialNo === target.materialNo);
|
|
|
if (row) row.completedQty -= target.batchQty;
|
|
|
};
|
|
|
@@ -810,6 +828,7 @@ const checkFifo = (qrCode) => {
|
|
|
businessSubType: receiveList.value?.businessSubType,
|
|
|
status: receiveList.value?.status,
|
|
|
priority: receiveList.value?.priority,
|
|
|
+ badMaterialInStockFlag: badMaterialInStockFlag.value,
|
|
|
inRequestDetailPDAList: mergedData
|
|
|
})
|
|
|
.then(({ code, data, msg }) => {
|
|
|
@@ -852,6 +871,7 @@ const checkFifo = (qrCode) => {
|
|
|
businessSubType: receiveList.value?.businessSubType,
|
|
|
status: receiveList.value?.status,
|
|
|
priority: receiveList.value?.priority,
|
|
|
+ badMaterialInStockFlag: badMaterialInStockFlag.value,
|
|
|
inRequestDetailPDAList: mergedData
|
|
|
})
|
|
|
.then(({ code, data, msg }) => {
|
|
|
@@ -899,6 +919,11 @@ const checkFifo = (qrCode) => {
|
|
|
color: submitDisabled.value ? '#ccc' : (isSubmitLight.value ? 'rgba(0,160,233,1)' : '')
|
|
|
}))
|
|
|
|
|
|
+ // 处理不良品是否入库单选按钮变化
|
|
|
+ const handleBadMaterialChange = function(e) {
|
|
|
+ badMaterialInStockFlag.value = e.detail.value
|
|
|
+ }
|
|
|
+
|
|
|
// 移除status监听,提交按钮和保存按钮均始终可用
|
|
|
// watch(() => receiveList.value?.status, (newStatus) => {
|
|
|
// submitDisabled.value = newStatus !== 0
|
|
|
@@ -949,7 +974,11 @@ const checkFifo = (qrCode) => {
|
|
|
fifoPopup,
|
|
|
fifoMsg,
|
|
|
fifoContinue,
|
|
|
- fifoCancel
|
|
|
+ fifoCancel,
|
|
|
+ // 不良品是否入库相关
|
|
|
+ businessType,
|
|
|
+ badMaterialInStockFlag,
|
|
|
+ handleBadMaterialChange
|
|
|
}
|
|
|
}
|
|
|
})
|
|
|
@@ -1200,6 +1229,44 @@ const checkFifo = (qrCode) => {
|
|
|
font-weight: 500;
|
|
|
}
|
|
|
|
|
|
+ /* 不良品是否入库单选按钮样式 */
|
|
|
+ .bad-material-radio {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ padding: 10rpx 24rpx;
|
|
|
+ background-color: #fff;
|
|
|
+ margin: 0 24rpx 10rpx 24rpx;
|
|
|
+ border-radius: 6px;
|
|
|
+
|
|
|
+ .radio-label {
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #333;
|
|
|
+ margin-right: 20rpx;
|
|
|
+ white-space: nowrap;
|
|
|
+ }
|
|
|
+
|
|
|
+ .radio-group {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ }
|
|
|
+
|
|
|
+ .radio-item {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ margin-right: 30rpx;
|
|
|
+
|
|
|
+ radio {
|
|
|
+ transform: scale(0.8);
|
|
|
+ }
|
|
|
+
|
|
|
+ text {
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #333;
|
|
|
+ margin-left: 8rpx;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
.modal-btns {
|
|
|
height: 100rpx;
|
|
|
line-height: 100rpx;
|
|
|
@@ -1321,4 +1388,4 @@ const checkFifo = (qrCode) => {
|
|
|
// line-height: 1.2;
|
|
|
// padding: 4px 2px; /* 上下留一点空隙,视觉更舒服 */
|
|
|
// }
|
|
|
-</style>
|
|
|
+</style>
|