Procházet zdrojové kódy

大件拣货优化、bug修复

zhaohuanhuan před 1 rokem
rodič
revize
15ece4dfef

+ 0 - 16
index.html

@@ -8,27 +8,11 @@
       content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover"
       content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover"
     />
     />
     <title>h5</title>
     <title>h5</title>
-    <style>
-        #splash {
-            position: fixed;
-            top: 0;
-            left: 0;
-            width: 100%;
-            height: 100%;
-            background: #fff url('src/assets/img.png') no-repeat center center;
-            background-size: contain;
-            z-index: 9999;
-        }
-    </style>
   </head>
   </head>
   <body>
   <body>
     <div id="app"></div>
     <div id="app"></div>
-    <div id="splash"></div>
     <script type="module" src="/src/main.ts"></script>
     <script type="module" src="/src/main.ts"></script>
     <script>
     <script>
-      window.onload = function() {
-        document.getElementById('splash').style.display = 'none'; // 隐藏启动页
-      }
       function getBrowserInfo() {
       function getBrowserInfo() {
         const userAgent = navigator.userAgent;
         const userAgent = navigator.userAgent;
         let browserName = "Unknown";
         let browserName = "Unknown";

+ 1 - 0
src/types/picking.ts

@@ -104,6 +104,7 @@ export interface getBigPickingListType {
   warehouse: string;
   warehouse: string;
   orderNo: string;
   orderNo: string;
   type: string;
   type: string;
+  status:number;
   size: number;
   size: number;
   page: number;
   page: number;
 }
 }

+ 2 - 2
src/utils/android.ts

@@ -32,10 +32,10 @@ export function logout(){
 /**
 /**
  * 关闭当前页面方法(回到首页)
  * 关闭当前页面方法(回到首页)
  */
  */
-export function back(){
+export function goBack(){
   try {
   try {
     // @ts-ignore
     // @ts-ignore
-    window.android.finish()
+    window.android.goBack()
     // store.removeToken()
     // store.removeToken()
   }catch (e){
   }catch (e){
     history.back();
     history.back();

+ 40 - 10
src/views/outbound/components/BigPicking.vue

@@ -28,9 +28,15 @@
               :beforeClose="onBuildTask"
               :beforeClose="onBuildTask"
   >
   >
     <div class="sub-task-list" >
     <div class="sub-task-list" >
-      <van-checkbox  class="sub-task-checkbox" v-model="isCheckAll"  :indeterminate="isIndeterminate"  @change="checkAllChange">全选</van-checkbox>
+      <div style="display: flex;justify-content: space-between;">
+        <div><van-checkbox  class="sub-task-checkbox" v-model="isCheckAll"  :indeterminate="isIndeterminate"  @change="checkAllChange">全选</van-checkbox></div>
+        <div  v-if="taskType==='ITEM_PICK'" >
+          <van-tag type="primary" :plain="sortType==='number'"   @click="onSort('sql')">按排序规则</van-tag>
+          <van-tag type="primary" :plain="sortType==='sql'"  @click="onSort('number')">按库位数量</van-tag>
+        </div>
+      </div>
       <van-checkbox-group  v-model="checkedResult" @change="checkedChange">
       <van-checkbox-group  v-model="checkedResult" @change="checkedChange">
-        <van-checkbox class="sub-task-checkbox" v-for="(item,index) in typeTaskList" :key="index" :name="item" :disabled="(item.allowPick===false && taskType==='AISLE_PICK') || item.status!==40" >
+        <van-checkbox class="sub-task-checkbox" v-for="(item,index) in typeTaskList" :key="index" :name="item"  :disabled="(item.allowPick===false && taskType==='AISLE_PICK') || item.status!==40" >
           <div class="sub-task-item" v-if="taskType==='LOCATION_PICK'">
           <div class="sub-task-item" v-if="taskType==='LOCATION_PICK'">
             <div  style="font-size: 13px;font-weight: bold" >{{item.location}}</div>
             <div  style="font-size: 13px;font-weight: bold" >{{item.location}}</div>
             <div class="sub-task-item-content" >
             <div class="sub-task-item-content" >
@@ -97,6 +103,7 @@ const taskType=ref('LOCATION_PICK')
 const subBigOrderTrueFalseBy=ref(false)
 const subBigOrderTrueFalseBy=ref(false)
 //子任务订单row
 //子任务订单row
 const subModel=ref({})
 const subModel=ref({})
+const sortType=ref('sql')
 const onTypeOrder=(row,type)=>{
 const onTypeOrder=(row,type)=>{
   taskType.value=type
   taskType.value=type
   subModel.value=row
   subModel.value=row
@@ -104,12 +111,17 @@ const onTypeOrder=(row,type)=>{
     warehouse:props.warehouse,
     warehouse:props.warehouse,
     orderNo:row.orderNo,
     orderNo:row.orderNo,
     type,
     type,
+    status:40,
     page:1,
     page:1,
-    size:200,
+    size:2000,
   }
   }
   showLoading()
   showLoading()
   getBigPickingList(params).then(res=>{
   getBigPickingList(params).then(res=>{
+    res.data.records.forEach((item,index)=>{
+      item.sqlIndex=index
+    })
     typeTaskList.value=res.data.records
     typeTaskList.value=res.data.records
+    onSort('sql')
     subBigOrderTrueFalseBy.value=true
     subBigOrderTrueFalseBy.value=true
     isIndeterminate.value = false
     isIndeterminate.value = false
     isCheckAll.value=false
     isCheckAll.value=false
@@ -179,14 +191,31 @@ const onBuildTask=(action)=>
       api = getBigPickingLocation;
       api = getBigPickingLocation;
     }
     }
     showLoading()
     showLoading()
-    api(params).then(data => {
-      showToast('大件任务创建成功!正在跳转')
-      router.push('/picking')
+    api(params).then(res => {
+      console.log(res,"data")
+      closeLoading()
+      showToast({duration:5000,message:'大件任务创建成功!正在跳转'})
+      router.push({name:'PickingList',query: { code:res.data }})
     }).finally(e=>{
     }).finally(e=>{
       closeLoading()
       closeLoading()
     })
     })
   }
   }
 
 
+const onSort = (val) => {
+  sortType.value = val;
+  // 提取排序条件的字段
+  const sortField = val === 'sql' ? 'sqlIndex' : 'locationNum';
+  // 过滤出 status 为 40 的任务并排序
+  const sorted = typeTaskList.value
+    .filter(item => item.status === 40)
+    .sort((a, b) => b[sortField] - a[sortField]);
+  // 合并排序后的数组和 status 不等于 40 的任务
+  typeTaskList.value = [
+    ...sorted,
+    ...typeTaskList.value.filter(item => item.status !== 40)
+  ]
+}
+
 defineExpose({show})
 defineExpose({show})
 </script>
 </script>
 <style lang="sass" scoped>
 <style lang="sass" scoped>
@@ -198,7 +227,7 @@ defineExpose({show})
   padding: 0 10px
   padding: 0 10px
   .big-task-item
   .big-task-item
     margin-bottom: 10px
     margin-bottom: 10px
-    box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.4)
+    //box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.4)
     border-radius: 8px
     border-radius: 8px
     border: 1px solid #d3d3d3
     border: 1px solid #d3d3d3
     .big-task-content
     .big-task-content
@@ -212,14 +241,15 @@ defineExpose({show})
       .big-content
       .big-content
         flex: 1
         flex: 1
     .big-task-button
     .big-task-button
-      font-size: 13px
+      font-size: 14px
+      font-weight: bold
       display: flex
       display: flex
       align-items: center
       align-items: center
       color: #0077ff
       color: #0077ff
       border-top: 1px solid #dfdfdf
       border-top: 1px solid #dfdfdf
       .big-button
       .big-button
-        height: 35px
-        line-height: 35px
+        height: 38px
+        line-height: 38px
         flex: 1
         flex: 1
         border-right: 1px solid #dfdfdf
         border-right: 1px solid #dfdfdf
       .big-button:last-child
       .big-button:last-child

+ 10 - 14
src/views/outbound/picking/list/index.vue

@@ -7,8 +7,8 @@
       placeholder
       placeholder
     >
     >
       <template #left>
       <template #left>
-        <van-icon name="arrow-left" size="25"   @click="back" />
-        <div style="color: #fff" @click="back">返回</div>
+        <van-icon name="arrow-left" size="25"   @click="goBack" />
+        <div style="color: #fff" @click="goBack">返回</div>
       </template>
       </template>
       <template #right>
       <template #right>
         <div style="color: #fff" @click="onSelectMode({key:'picking'})">开始作业</div>
         <div style="color: #fff" @click="onSelectMode({key:'picking'})">开始作业</div>
@@ -69,7 +69,7 @@
                          label="实拣数" placeholder="请输实拣数量"
                          label="实拣数" placeholder="请输实拣数量"
                           >
                           >
                 <template #button>
                 <template #button>
-                  <van-button  v-if="item.operationTime==null"  size="mini" type="primary"  plain  @click="jump(item)"  :loading="jumpLoading"  loading-text="加载中...">跳过</van-button>
+                  <van-button  v-if="item.operationTime==null"   size="mini" type="primary"  plain  @click="jump(item)"  :loading="jumpLoading"  loading-text="加载中...">跳过</van-button>
                 </template>
                 </template>
               </van-field>
               </van-field>
               <div class="wave">
               <div class="wave">
@@ -118,7 +118,7 @@ const route = useRoute()
 import { useStore } from '@/store/modules/user'
 import { useStore } from '@/store/modules/user'
 const store = useStore()
 const store = useStore()
 const basic = basicStore()
 const basic = basicStore()
-import { back, getHeader, playVoicePickNum, scanError, scanSuccess } from '@/utils/android'
+import { goBack, getHeader, playVoicePickNum, scanError, scanSuccess } from '@/utils/android'
 import { closeListener, openListener, scanInit } from '@/utils/keydownListener'
 import { closeListener, openListener, scanInit } from '@/utils/keydownListener'
 import PickingNoInput from '@/views/outbound/components/PickingNoInput.vue'
 import PickingNoInput from '@/views/outbound/components/PickingNoInput.vue'
 import ContainerNoInput from '@/views/outbound/components/ContainerNoInput.vue'
 import ContainerNoInput from '@/views/outbound/components/ContainerNoInput.vue'
@@ -372,7 +372,7 @@ const _handlerScan=(code)=> {
   }
   }
 }
 }
 // 进行条件验证
 // 进行条件验证
-const validate = (data,type) => {
+const validate = (data) => {
   if (containerNo.value === '') {
   if (containerNo.value === '') {
     showToast({duration:5000,message:'请先扫描拣货容器'})
     showToast({duration:5000,message:'请先扫描拣货容器'})
     return false;
     return false;
@@ -381,11 +381,9 @@ const validate = (data,type) => {
     showToast({duration:5000,message:'请先扫描库位'})
     showToast({duration:5000,message:'请先扫描库位'})
     return false;
     return false;
   }
   }
-  if(type==0){
-    if (scanType.value === 3) {
-      showToast({duration:5000,message:'请先扫描条码'})
-      return false;
-    }
+  if(data.quantity!==0 && scanType.value === 3){
+    showToast({duration:5000,message:'请先扫描条码'})
+    return false;
   }
   }
   if (data.count < 0) {
   if (data.count < 0) {
     messageTips.value='拣货数量无效'
     messageTips.value='拣货数量无效'
@@ -418,7 +416,7 @@ const onCount=(item,type)=>{
   }
   }
   const params=[data]
   const params=[data]
   // 验证数据的有效性
   // 验证数据的有效性
-  if (!validate(data,type)) return;
+  if (!validate(data)) return;
   if(type!==0){
   if(type!==0){
     jumpLoading.value=true
     jumpLoading.value=true
   }
   }
@@ -447,9 +445,7 @@ const onCount=(item,type)=>{
       }
       }
       selectTask.value.push(task)
       selectTask.value.push(task)
       locationList.value[activeIndex.value].list[0].operationTime=params[0].operationTime
       locationList.value[activeIndex.value].list[0].operationTime=params[0].operationTime
-      console.log(activeIndex.value.length)
-      console.log(locationList.value)
-      if(type==1 && activeIndex.value==locationList.value.length){
+      if(type==1 && activeIndex.value!=locationList.value.length-1){
         activeIndex.value=activeIndex.value+1
         activeIndex.value=activeIndex.value+1
       }
       }
     }
     }

+ 5 - 11
src/views/outbound/picking/task/index.vue

@@ -7,7 +7,7 @@
       placeholder
       placeholder
       >
       >
       <template #left>
       <template #left>
-        <van-icon name="arrow-left" size="25"   @click="back" />
+        <van-icon name="arrow-left" size="25"   @click="goBack" />
         <div style="color: #fff" @click="onClickLeft">返回</div>
         <div style="color: #fff" @click="onClickLeft">返回</div>
       </template>
       </template>
       <template #right>
       <template #right>
@@ -148,9 +148,9 @@ import { getTaskList } from '@/views/outbound/picking/task/hooks/task'
 import { computed, nextTick, ref } from 'vue'
 import { computed, nextTick, ref } from 'vue'
 import { showDialog, showFailToast, showToast } from 'vant'
 import { showDialog, showFailToast, showToast } from 'vant'
 import { basicStore } from '@/store/modules/basic'
 import { basicStore } from '@/store/modules/basic'
-import { createPickingTask, getBigPickingEquipment, getBigPickingTaskDetail, getPickingTaskDetail } from '@/api/picking'
+import { createPickingTask, getBigPickingTaskDetail, getPickingTaskDetail } from '@/api/picking'
 import { useStore } from '@/store/modules/user'
 import { useStore } from '@/store/modules/user'
-import { back } from '@/utils/android'
+import { goBack } from '@/utils/android'
 import PickingNoInput from '@/views/outbound/components/PickingNoInput.vue'
 import PickingNoInput from '@/views/outbound/components/PickingNoInput.vue'
 import BigPicking from '@/views/outbound/components/BigPicking.vue'
 import BigPicking from '@/views/outbound/components/BigPicking.vue'
 import SelectOwner from '@/views/outbound/components/SelectOwner.vue'
 import SelectOwner from '@/views/outbound/components/SelectOwner.vue'
@@ -227,18 +227,14 @@ const onTaskList=async (row:Object,type)=>{
     const res = await getBigPickingTaskDetail(params)
     const res = await getBigPickingTaskDetail(params)
     data=res.data.records
     data=res.data.records
   }else {
   }else {
-    data= await getPickingTaskDetail(params)
+    const res = await getPickingTaskDetail(params)
+    data=res.data
   }
   }
   closeLoading()
   closeLoading()
   if(data.length==0){
   if(data.length==0){
     showToast({duration:5000,message:'任务已被获取,请刷新后重新查看!'})
     showToast({duration:5000,message:'任务已被获取,请刷新后重新查看!'})
     return
     return
   }
   }
-  if(model.value.type==='*'){
-    data.forEach((item,index)=>{
-      item.taskCount=item.residualOrderQty
-    })
-  }
   taskDetailList.value=data
   taskDetailList.value=data
   if(type=='M'){
   if(type=='M'){
     setTimeout(()=>{
     setTimeout(()=>{
@@ -369,7 +365,6 @@ const createPicking = () => {
   let carriers = [];
   let carriers = [];
   let orderNoList = [];
   let orderNoList = [];
   let counts: number = count.value;
   let counts: number = count.value;
-  let uidMap={};
 
 
   if (['S', 'U', 'M'].includes(model.value.type)) {
   if (['S', 'U', 'M'].includes(model.value.type)) {
     orderNoList = checkedResult.value.map(item => item.orderNo);
     orderNoList = checkedResult.value.map(item => item.orderNo);
@@ -377,7 +372,6 @@ const createPicking = () => {
     counts = orderNoList.length
     counts = orderNoList.length
   }else if(model.value.type=='*'){
   }else if(model.value.type=='*'){
     orderNoList=model.value.matchedOrderNoList
     orderNoList=model.value.matchedOrderNoList
-    uidMap=toMap(checkedResult.value,'uid','taskCount')
     carriers = [...new Set(checkedResult.value.map(item => item.carrier))];
     carriers = [...new Set(checkedResult.value.map(item => item.carrier))];
   } else {
   } else {
     orderNoList=model.value.matchedOrderNoList
     orderNoList=model.value.matchedOrderNoList