Переглянути джерело

大件单-自动打印清单

zhaohuanhuan 5 місяців тому
батько
коміт
df6755efc4

+ 8 - 1
src/api/check/index.ts

@@ -104,5 +104,12 @@ export function reversePicking(data:reversePickingType) {
   })
 }
 
-
+//打印策略
+export function listEnableCheckDocumentPrint(params:any) {
+  return request({
+    url: '/api/wms/product/listEnableCheckDocumentPrint',
+    method: 'get',
+    params
+  })
+}
 

+ 4 - 7
src/views/outbound/check/components/BatchPacking.vue

@@ -65,7 +65,7 @@ const confirmPacking = () => {
   const dataList = createPackingList(packingBarcode, count.value)
   recursiveRequest(0, dataList, packingBarcode)
 }
-const emit = defineEmits(['loadData', 'print'])
+const emit = defineEmits(['loadData', 'print','printPickingList'])
 const recursiveRequest = async (index, dataList, item) => {
   if (index >= dataList.length) {
     countTrueFalseBy.value = false
@@ -89,17 +89,13 @@ const recursiveRequest = async (index, dataList, item) => {
       // 是否需要打印面单
       if (res.data.includes('#')) {
         showNotify({ type: 'success', duration: 3000, message: res.data + '已设置不获取新面单' })
+        emit('printPickingList',res.data,[dataList[index]])
       } else if (res.data == item.deliveryNo) {
+        emit('printPickingList',res.data,[dataList[index]])
         showNotify({ type: 'success', duration: 3000, message: res.data + '本单为初始单号,不打印面单' })
       } else {
         emit('print', 'PRINT_WAYBILL', res.data)
       }
-      const curQualityCheck= packingList.value.some(item => item.qualityCheck === true)
-      if(curQualityCheck){
-        setTimeout(()=>{
-          emit('print','A3014_PACK_CARTON_QC',res.data)
-        },300)
-      }
       await recursiveRequest(index + 1, dataList, item)
       closeLoading()
     } else {
@@ -129,6 +125,7 @@ const createPackingList = (item, count) => {
     result.push({
       lotNum: item.lotNum,
       qty: qty,
+      qualityCheck:item.qualityCheck
     })
     // 更新剩余数量
     remainingQuantity -= qty

+ 3 - 7
src/views/outbound/check/components/CheckPacking.vue

@@ -52,7 +52,7 @@ const beforeClose = (action) =>
     }
     resolve(true)
   })
-const emit = defineEmits(['print','cancelOrder','resetPackingStatus','getOrderPacking'])
+const emit = defineEmits(['print','cancelOrder','resetPackingStatus','getOrderPacking','printPickingList'])
 const setPacking = () => {
   const groupDetailList = packingList.value.map(items => {
     return {
@@ -76,12 +76,6 @@ const setPacking = () => {
       // 冻结
       emit('cancelOrder',orderDetail.value,'release')
     }else {
-      const curQualityCheck= packingList.value.some(item => item.qualityCheck === true)
-      if(curQualityCheck){
-        setTimeout(()=>{
-          emit('print','A3014_PACK_CARTON_QC',res.data)
-        },300)
-      }
       showNotify({ type: 'success', duration: 3000, message: res.data + '装箱成功'})
       scanSuccess()
       emit('resetPackingStatus')
@@ -92,8 +86,10 @@ const setPacking = () => {
       // 是否需要打印面单
       if (res.data.includes('#') ) {
         showNotify({ type: 'success', duration: 3000, message: res.data + '已设置不获取新面单'})
+        emit('printPickingList',res.data,packingList.value)
       } else if(res.data==orderDetail.value.deliveryNo ){
         showNotify({ type: 'success', duration: 3000, message: res.data + '本单为初始单号,不打印面单'})
+        emit('printPickingList',res.data,packingList.value)
       } else {
         emit('print','PRINT_WAYBILL',res.data)
       }

+ 79 - 5
src/views/outbound/check/large/index.vue

@@ -115,9 +115,9 @@
       </van-row>
     </van-dialog>
     <!--    装箱-->
-    <check-packing ref="checkPackingRef" @cancelOrder="cancelOrder"  @resetPackingStatus="resetPackingStatus" @getOrderPacking="_getOrderPacking"  @print="print"/>
+    <check-packing ref="checkPackingRef" @cancelOrder="cancelOrder"  @resetPackingStatus="resetPackingStatus" @getOrderPacking="_getOrderPacking" @print-picking-list="printPickingList"  @print="print"/>
     <!--    批量装箱-->
-    <batch-packing ref="batchPackingRef"   @print="print" @loadData="loadData" />
+    <batch-packing ref="batchPackingRef"   @print="print" @loadData="loadData"  @print-picking-list="printPickingList" />
     <!--    重置装箱-->
     <packing-list ref="packingListRef"  @loadData="loadData" />
   </div>
@@ -129,7 +129,7 @@ import { closeListener, openListener, scanInit } from '@/utils/keydownListener'
 import InputBarcode from '@/views/outbound/picking/components/InputBarcode.vue'
 import { useStore } from '@/store/modules/user'
 import { closeLoading, showLoading } from '@/utils/loading'
-import { getOrderPacking, getPendingReviewTask, reversePicking } from '@/api/check'
+import { getOrderPacking, getPendingReviewTask, listEnableCheckDocumentPrint, reversePicking } from '@/api/check'
 import { barcodeToUpperCase } from '@/utils/dataType'
 import { showConfirmDialog, showDialog, showNotify, showToast } from 'vant'
 import { fluxPrint } from '@/api/picking'
@@ -462,14 +462,88 @@ const print=(templateCode,code)=>{
     .then(res => {
       scanSuccess()
       showNotify({ type: 'success', duration: 3000, message: '打印已发起,请检查打印情况' });
+      printPickingList(code,currPackingList.value)
     })
     .catch(err => {
       scanError()
       tips.value=err.message || '系统异常,请联系技术支持!'
     }).finally(() => {
-    closeLoading()
+      closeLoading()
   })
-
+}
+// 打印装箱清单
+// 查询打印策略
+const printConfig=ref([])
+listEnableCheckDocumentPrint({ 'name': '', 'owner': '' }).then(res => {
+  printConfig.value= res.data
+})
+const printPickingList=(deliveryNo,curPackingList)=> {
+  // 打印装箱清单
+  let printData=[]
+  const findIndex = printConfig.value.findIndex(item => item.ownerList.includes(orderDetail.value.customerId));
+  // 检查质检数据并添加质检打印任务
+  const hasQualityCheck = curPackingList.some(item => item.qualityCheck === true);
+  if (hasQualityCheck) {
+    const qcData = {
+      warehouse: orderDetail.value.warehouseId,
+      code: deliveryNo,
+      printServer: printer.value.server,
+      printName: printer.value.printer,
+      templateCode: 'A3014_PACK_CARTON_QC'
+    };
+    printData.push(qcData);
+  }
+  if (findIndex === -1) {
+    printRequests(0, printData);
+    return;
+  }
+  printConfig.value.forEach((item,index) => {
+    const isOwner = item.ownerList.includes(orderDetail.value.customerId);
+    const printMap = item.printer && item.printer !== '' ? item.printer.split('+') : [printer.value.server,printer.value.printer];
+    // 判断 店铺和承运商是否匹配
+    const isShop = item.shop ? item.shop.includes(orderDetail.value.shop) : true;
+    const isCarrier =item.carriers? item.carriers.includes(orderDetail.value.carrierId):true
+    if (isOwner && isShop && isCarrier  ) {
+      const data = {
+        warehouse: orderDetail.value.warehouseId,
+        code: deliveryNo,
+        printServer: printMap[0],
+        printName: printMap[1],
+        templateCode: item.templateCode
+      };
+      const printCount = Math.max(item.printNum, 1)
+      printData.push(...new Array(printCount).fill(data));
+    }
+    if(index==printConfig.value.length-1){
+      printRequests(0,printData)
+    }
+  });
+}
+const printRequests = async(index, dataList)=> {
+  if (index >= dataList.length) {
+    // if (this.orderList.length == 0) {
+    //   this.getOrderList();
+    // }
+    return;
+  }
+  try {
+    const res = await _printMode(dataList[index]);
+    if (res) {
+      this.$message.success('打印成功');
+    }
+  } catch (error) {
+    console.error('打印请求发生错误:', error);
+  } finally {
+    closeLoading();
+    await printRequests(index + 1, dataList);
+  }
+}
+const _printMode=(data)=> {
+  return new Promise((resolve, reject) => {
+    fluxPrint(data)
+      .then(res => resolve(res))
+      .catch(err => reject(`打印失败: ${err}`));
+  });
 }
 const onPrint=(code)=>{
   printer.value=code