Pārlūkot izejas kodu

活动单生成任务优化

zhaohuanhuan 1 gadu atpakaļ
vecāks
revīzija
5fe553f640

+ 3 - 2
src/views/outbound/picking/components/WaveInfo.vue

@@ -3,7 +3,7 @@
     <template  v-for="(wave,index) in bindList" >
       <div class="wave-item" v-if="index < number || (index >= number && isFold)">
         <div>{{ wave.waveNo }}</div>
-        <div v-if="length>1">波次格口:{{ props.waveNoJson[wave.waveNo] }},数量:{{ wave.quantity }}</div>
+        <div v-if="length>1">波次格口:{{ props.waveNoJson[wave.waveNo+'-'+props.barcode] }},数量:{{ wave.quantity }}</div>
         <div v-else>格口:{{ wave.bin}},数量:{{ wave.quantity }}</div>
       </div>
     </template>
@@ -24,7 +24,8 @@ const isFold=ref(false)
 const size=ref(0)
 const props = defineProps({
   binds: Array,
-  waveNoJson:Object
+  waveNoJson:Object,
+  barcode:String
 })
 const length = computed(()=>{
   return Object.keys(props.waveNoJson).length

+ 25 - 9
src/views/outbound/picking/list/index.vue

@@ -75,7 +75,7 @@
                   <van-button  v-if="item.operationTime==null && item.count==0"   size="mini" type="primary"  plain  @click="jump(item)"  :loading="jumpLoading"  loading-text="加载中...">缺货</van-button>
                 </template>
               </van-field>
-              <WaveInfo :binds="item.binds" :waveNoJson="waveNoJson" />
+              <WaveInfo :binds="item.binds" :barcode="item.barcode" :waveNoJson="waveNoJson" />
             </div>
           </div>
         </van-col>
@@ -721,22 +721,38 @@ const allPicking = (location) => {
 }
 //获取拣货任务里的波次号
 const getWave = () => {
-  const uniqueBinds = new Map();
-  // 去重
+  const barcodeGroups = new Map()
+  // 根据条码进行分组
   taskItem.value.forEach(item => {
     item.binds.forEach(bind => {
+      if (!barcodeGroups.has(item.barcode)) {
+        barcodeGroups.set(item.barcode, [])
+      }
+      barcodeGroups.get(item.barcode).push(bind)
+    })
+  })
+  // 合并去重,排序波次号
+  const groupedBinds = [];
+  barcodeGroups.forEach((binds, barcode) => {
+    const uniqueBinds = new Map()
+    binds.forEach(bind => {
       if (!uniqueBinds.has(bind.waveNo)) {
-        uniqueBinds.set(bind.waveNo, bind);
+        uniqueBinds.set(bind.waveNo, { ...bind, barcode })
       }
     });
+    const sortedBinds = Array.from(uniqueBinds.values())
+    groupedBinds.push(...sortedBinds)
   });
-  //排序
-  const sortedBinds = Array.from(uniqueBinds.values())
-    .sort((a, b) => a.waveNo.localeCompare(b.waveNo))
-    .map((item, index) => ({ ...item, index: index + 1 }))
-  return toMap(sortedBinds, 'waveNo', 'index');
+  groupedBinds.sort((a, b) => a.waveNo.localeCompare(b.waveNo))
+  console.log(groupedBinds,"groupedBinds")
+  const resultMap = {}
+  groupedBinds.forEach((item, index) => {
+    resultMap[`${item.waveNo}-${item.barcode}`] = index + 1
+  });
+  return resultMap
 };
 
+
 //库位商品高亮
 const activeClass=(item)=>{
   const modelLocative = locationList.value[activeIndex.value]

+ 61 - 23
src/views/outbound/picking/task/index.vue

@@ -173,7 +173,7 @@
     <picking-no-input  ref="pickingNoInputRef" @loadData="loadTask" />
     <big-picking ref="bigPickingRef" :model="model" :owner-map="ownerMap" :task-detail-list="taskDetailList" :warehouse="warehouse" />
     <select-owner ref="selectOwnerRef" :taskList="allTaskList" :ownerMap="ownerMap" @queryOwner="queryOwner" />
-    <owner-batch-task ref="ownerBatchTaskRef" :ownerMap="ownerMap"  />
+<!--    <owner-batch-task ref="ownerBatchTaskRef" :ownerMap="ownerMap"  />-->
   </div>
 </template>
 
@@ -182,7 +182,7 @@ import nodataUrl from '@/assets/nodata.png'
 import { useRoute, useRouter } from 'vue-router'
 import { getTaskList } from '@/views/outbound/picking/task/hooks/task'
 import { computed, defineAsyncComponent, nextTick, ref } from 'vue'
-import { showDialog, showFailToast, showToast } from 'vant'
+import { showConfirmDialog, showDialog, showFailToast, showToast } from 'vant'
 import { basicStore } from '@/store/modules/basic'
 import { createPickingTask, getBigPickingTaskDetail, getPickingTaskDetail } from '@/api/picking'
 import { useStore } from '@/store/modules/user'
@@ -195,6 +195,7 @@ import { getTimeHours } from '@/utils/date'
 import { fetchPickingData } from '@/views/outbound/picking/list/hooks/list'
 import { getPickingTaskDetailType } from '@/types/picking'
 import OwnerBatchTask from '@/views/outbound/picking/components/OwnerBatchTask.vue'
+import { toMap } from '@/utils/dataType'
 const router = useRouter()
 const store = basicStore()
 const storeUser = useStore()
@@ -354,9 +355,9 @@ const updateOwnerCheckAllStatus=()=>{
 // 查看活动单列表
 const ownerBatchTaskRef=ref(null)
 const queryOwnerTask= (row)=>{
-  let orderNoList = ownerCheckedResult.value.flatMap(item => item.matchedOrderNoList);
-  if(row!=='all'){
-    orderNoList=row.matchedOrderNoList
+  let orderNoList =row.matchedOrderNoList
+  if(row=='all'){
+    orderNoList=typeTaskList().flatMap(item => item.matchedOrderNoList);
   }
   const params = {
     warehouse,
@@ -366,22 +367,59 @@ const queryOwnerTask= (row)=>{
     page:1
   };
   showLoading()
-  getPickingTaskDetail(<getPickingTaskDetailType>params).then(res=>{
+  getPickingTaskDetail(<getPickingTaskDetailType>params).then(res=> {
     closeLoading()
-    if(res.data.length===0){
-      showToast({duration:5000,message:'任务已被获取,请刷新后重新查看!'})
+    if (res.data.length === 0) {
+      showToast({ duration: 5000, message: '任务已被获取,请刷新后重新查看!' })
       return
     }
-    const dataList = res.data.filter(item => item.residualOrderQty <=30 )
-    if(dataList.length==0){
-      showToast({duration:5000,message:'当前选择活动单,没有30单内的数据!'})
+    const dataList = res.data.filter(item => item.residualOrderQty <= 30)
+    if (dataList.length == 0) {
+      showToast({ duration: 5000, message: '当前活动单,没有30单内的数据!' })
       return
     }
-    ownerBatchTaskRef.value?.show(JSON.stringify(dataList))
+    taskList.value.sort((a, b) => {
+      if (a.customerId !== b.customerId) {
+        return a.customerId.localeCompare(b.customerId);
+      }
+      if (a.carrier !== b.carrier) {
+        return a.carrier.localeCompare(b.carrier)
+      }
+      return b.residualOrderQty - a.residualOrderQty
+    });
+    const dataListsSlice=dataList.slice(0, 10)
+    const sumQty = dataListsSlice.reduce((sum, item) => sum + Number(item.residualOrderQty), 0)
+    showConfirmDialog({
+      title: '温馨提示',
+      message:`您正在生成${dataListsSlice.length}个活动波次,共:${sumQty}单是否继续`,
+      allowHtml:true,
+      keyboardEnabled:false
+    }).then(() => {
+      _createPickingTask(dataListsSlice)
+    })
+      .catch(() => {})
   }).catch(()=>{
     closeLoading()
   })
 }
+const _createPickingTask=(dataList)=>{
+  const params = {
+    warehouse,
+    owners: [...new Set(dataList.map(item => item.customerId))],
+    carriers: [...new Set(dataList.map(item => item.carrier))],
+    type:'*',
+    uidMap:toMap(dataList,'uid','residualOrderQty'),
+    enableFlag:false
+  }
+  showLoading()
+  createPickingTask(params).then(res => {
+    closeLoading()
+    router.push({name:'PickingList',query: { code:res.data }})
+  }).catch(err => {
+    closeLoading()
+    showFailToast({duration:5000,message:err.message})
+  })
+}
 /**
  * 查看任务子列表
  */
@@ -585,24 +623,24 @@ const onClickRightIcon = () => {
   actions.value = (modeType.value === 'task') ? taskActions : defaultActions
   modeTrueFalseBy.value = true
 }
-
+const typeTaskList = () => {
+  const list = JSON.parse(JSON.stringify(taskList.value));
+  return list.filter(item => item.type === '*');
+}
 const onSelectMode= async (value) => {
   if (value.key == 'selectOwner') {
     selectOwnerRef.value?.show()
   }else if(value.key == 'task') {
-    const typeTaskList = () => {
-      const list = JSON.parse(JSON.stringify(taskList.value));
-      return list.filter(item => item.type === '*');
-    }
     if(typeTaskList().length==0){
       showToast({duration:3000,message:'当前没有活动单'})
-    }else {
-      modeType.value=value.key
-      taskList.value=typeTaskList()
-      if(typeTaskList().length<=10){
-        ownerCheckAllChange(true)
-      }
+      return
     }
+    queryOwnerTask('all')
+    // modeType.value=value.key
+    // taskList.value=typeTaskList()
+    // if(typeTaskList().length<=10){
+    //   ownerCheckAllChange(true)
+    // }
   }else if(value.key == 'all'){
     queryOwner(value.key)
   }