Browse Source

新增扫码出入库搜索跳转功能,新增扫码入库不良品是否入库

chensibo 2 months ago
parent
commit
6821d8f653

+ 15 - 11
pages/workbranch/warehouse/scanInOut/In/scanInPage.vue

@@ -98,17 +98,21 @@
 
 			const search = function(pageNo) {
 				uni.$reqGet('getScanInList', {
-						...queryParams.value,
-						businessType: selectedBusinessType.value,
-						requestNo: requestNo.value,
-						pageNo
-					})
-					.then(({
-						data,
-						msg
-					}) => {
-						cardList.value = data?.list ?? []
-					})
+					...queryParams.value,
+					businessType: selectedBusinessType.value,
+					requestNo: requestNo.value,
+					pageNo
+				})
+				.then(({
+					data,
+					msg
+				}) => {
+					cardList.value = data?.list ?? []
+					// 如果是通过申请单号搜索且有结果,直接跳转到scannedMaterials页面
+					if (requestNo.value && cardList.value.length === 1) {
+						handleToScanMaterials(cardList.value[0])
+					}
+				})
 			}
 
 			onMounted(() => {

+ 75 - 8
pages/workbranch/warehouse/scanInOut/In/scannedMaterials.vue

@@ -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>

+ 16 - 12
pages/workbranch/warehouse/scanInOut/Out/scanOutPage.vue

@@ -97,18 +97,22 @@
 		const requestNo = ref('')
 
 			const search = function(pageNo) {
-					uni.$reqGet('getScanOutList', {
-							...queryParams.value,
-							businessType: selectedBusinessType.value,
-							requestNo: requestNo.value,
-							pageNo
-						})
-						.then(({
-							data,
-							msg
-						}) => {
-							cardList.value = data?.list ?? []
-						})
+				uni.$reqGet('getScanOutList', {
+					...queryParams.value,
+					businessType: selectedBusinessType.value,
+					requestNo: requestNo.value,
+					pageNo
+				})
+				.then(({
+					data,
+					msg
+				}) => {
+					cardList.value = data?.list ?? []
+					// 如果是通过申请单号搜索且有结果,直接跳转到scannedMaterials页面
+					if (requestNo.value && cardList.value.length === 1) {
+						handleToScanMaterials(cardList.value[0])
+					}
+				})
 			}
 
 	onMounted(() => {

+ 3 - 1
pages/workbranch/warehouse/scanInOut/Out/scannedMaterials.vue

@@ -244,7 +244,9 @@ export default defineComponent({
       masterId.value = parsedData?.id
       businessType.value = parsedData?.businessType || '0'
       console.log('获取到的businessType:', businessType.value)
-      
+      if (businessType.value == '5') {
+          submitDisabled.value = true
+        }
       
       // 获取fifo_check_order_type字典数据
       getFifoCheckOrderTypeDict()