Sfoglia il codice sorgente

手持-盲收-可创建盲收任务

zhaohuanhuan 10 mesi fa
parent
commit
67488dd0d9

+ 1 - 0
package.json

@@ -16,6 +16,7 @@
     "lib-flexible": "^0.3.2",
     "pinia": "^2.3.0",
     "pinia-plugin-persistedstate": "^4.2.0",
+    "pinyin": "^2.11.2",
     "postcss-pxtorem": "^6.1.0",
     "sass": "^1.83.0",
     "vant": "^4.9.10",

+ 11 - 0
src/api/blind/index.ts

@@ -46,6 +46,17 @@ export function setBlindTaskMode(data:any) {
     data:JSON.stringify(data),
   })
 }
+/**
+ * 创建盲收任务
+ */
+export function createBlindTask(data:any) {
+  return request({
+    url: 'api/entryOrder/receive/create',
+    method: 'post',
+    data,
+  })
+}
+
 /**
  * 检查盲收任务条码
  */

+ 78 - 0
src/components/Owner.vue

@@ -0,0 +1,78 @@
+<template>
+  <van-dialog v-model:show="ownerTrueFalseBy"
+              title="货主列表"
+              :show-confirm-button="false"
+              close-on-click-overlay
+  >
+    <van-search v-model="value" @input="onClickButton" @search="onClickButton" show-action placeholder="请输入搜索货主" >
+      <template #action>
+        <div @click="onClickButton">搜索</div>
+      </template>
+    </van-search>
+    <div style="width:100%;max-height:65vh;overflow:auto">
+      <van-radio-group v-model="owner">
+        <van-cell-group inset>
+          <van-cell v-for="(item,i) in ownerFilterList" :title="item.name" clickable @click="onOwner(item)"  :key="i" >
+            <template #right-icon>
+              <van-radio :name="item.code" />
+            </template>
+          </van-cell>
+        </van-cell-group>
+      </van-radio-group>
+    </div>
+  </van-dialog>
+</template>
+<script setup>
+import { ref } from 'vue'
+import { getOwner, getPrinter } from '@/api/basic/index'
+import { closeLoading, showLoading } from '@/utils/loading'
+import pinyin from 'pinyin'
+const value=ref('')
+const ownerTrueFalseBy=ref(false)
+const owner=ref('')
+const ownerList=ref([])
+const ownerFilterList=ref([])
+const onClickButton=()=>{
+  ownerFilterList.value=ownerList.value.filter((item) => {
+    return item.pinyin.includes(value.value) || item.name.includes(value.value)
+  });
+}
+const convertToPinyin = (text) => {
+  return pinyin(text, { style: pinyin.STYLE_NORMAL }).join('');
+};
+const modeType=ref('')
+const show=(type)=>{
+  modeType.value=type
+  owner.value=''
+  value.value=''
+  if(localStorage.getItem('OWNER:KEY')){
+    const list=JSON.parse(localStorage.getItem('OWNER:KEY'))
+    ownerList.value=list
+    ownerFilterList.value=list
+    ownerTrueFalseBy.value=true
+    return
+  }
+  showLoading()
+  getOwner().then(res => {
+    res.data.forEach(item=>{
+      item.pinyin=convertToPinyin(item.name)
+    })
+    ownerList.value=res.data
+    ownerFilterList.value=res.data
+    localStorage.setItem('OWNER:KEY',JSON.stringify(res.data))
+    ownerTrueFalseBy.value=true
+  }).finally(() => {
+    closeLoading()
+  })
+
+}
+const emit = defineEmits()
+const onOwner=(item)=>{
+  owner.value = item.code
+  ownerTrueFalseBy.value=false
+  emit('onOwner', item,modeType.value)
+}
+defineExpose({show})
+</script>
+<style scoped lang="sass">
+</style>

+ 72 - 20
src/views/inbound/blindCollection/mode/index.vue

@@ -19,7 +19,10 @@
     </van-nav-bar>
     <div class="mode">
       <div class="mode-input-box">
-        <div class="mode-input-text">请扫描盲收任务号</div>
+        <div class="mode-input-text">
+          <div>请扫描盲收任务号</div>
+          <div class="mode-task" @click="createTask">创建盲收任务</div>
+        </div>
         <van-field class="mode-input" ref="taskNoRef"
                    :style="taskNo!==''?'border: 2px solid #07c160':''" clearable v-model="taskNo"
                    placeholder="请扫描盲收任务号"
@@ -62,6 +65,7 @@
       </div>
     </div>
     <task-list ref="taskListRef" @selectMode="_selectMode" />
+    <owner ref="ownerRef" @onOwner="onOwner" />
   </div>
 </template>
 <script setup>
@@ -69,10 +73,13 @@ import { androidFocus, getHeader, goBack, scanError, scanSuccess } from '@/utils
 import { useRoute, useRouter } from 'vue-router'
 import { onMounted, onUnmounted, ref } from 'vue'
 import { closeListener, openListener, scanInit } from '@/utils/keydownListener.js'
-import { getBlindTask, getBlindTaskList, getMovingTask, setBlindTaskMode } from '@/api/blind/index.ts'
+import { createBlindTask, getBlindTask, getBlindTaskList, getMovingTask, setBlindTaskMode } from '@/api/blind/index.ts'
 import { showConfirmDialog, showToast } from 'vant'
 import TaskList from '@/views/inbound/blindCollection/components/TaskList.vue'
 import { closeLoading, showLoading } from '@/utils/loading.ts'
+import Owner from '@/components/Owner.vue'
+import { useStore } from '@/store/modules/user.ts'
+const store = useStore()
 const route = useRoute()
 const router = useRouter()
 //任务号
@@ -92,6 +99,7 @@ try {
 }catch (error) {
   router.push('/login')
 }
+const warehouse = store.warehouse
 onUnmounted(() => {
   closeListener()
 })
@@ -130,27 +138,21 @@ const _getBlindTask=()=>{
     return
   }
   taskModel.value={}
-  let url=getBlindTask,data={taskNo:taskNo.value},type=0
+  let url=getBlindTask,data={taskNo:taskNo.value}
   showLoading()
   url(data).then(res=>{
     scanSuccess()
     taskModel.value=res.data
     //盲收任务
       if(res.message=='找不到此盲收任务'){
-        if(taskNo.value.startsWith("P")) {
-          taskModel.value={
-            typeCode:undefined,
-            code:taskNo.value,
-            warehouseCode:undefined,
-            ownerCode:undefined
-          }
-          showToast({duration:5000,message:'该任务未绑定模式,请选择模式!'})
-          return
-        }else {
-          taskModel.value={}
-          showToast({duration:5000,message:'找不到此盲收任务'})
-          return
+        taskModel.value={
+          typeCode:undefined,
+          code:taskNo.value,
+          warehouseCode:warehouse,
+          ownerCode:undefined
         }
+        showToast({duration:5000,message:'该任务未绑定模式,请选择模式!'})
+        return
       }else if(res.data && res.data.type){
         link(res.data.code,res.data.typeCode)
         closeLoading()
@@ -169,8 +171,10 @@ const modeMap={
   5:'按箱清点+分货',
 }
 //设置盲收任务类型
+const selectType=ref(0)
+const ownerItem=ref({})
 const onSelect=(type)=>{
-
+  selectType.value=type
   if(taskNo.value===''){
     showToast({duration:5000,message:'请先扫描盲收任务号'})
     return
@@ -179,13 +183,19 @@ const onSelect=(type)=>{
     showToast({duration:5000,message:'未检测到任务,请检查任务号是否正确!'})
     return
   }
-  const {typeCode,code,warehouseCode,ownerCode}=taskModel.value
+  const {typeCode,code,warehouseCode,ownerCode,ownerName}=taskModel.value
+  if(ownerCode==undefined){
+    ownerItem.value={}
+    ownerRef.value?.show(1)
+    return
+  }
   if(typeCode){
     link(code,typeCode)
     return
   }
+// 《${ownerName ?? ownerItem.value.name}》
   showConfirmDialog({
-    title: '温馨提示',
+    title:`温馨提示`,
     message:
       `是否将盲收任务:${taskNo.value},设置为:${modeMap[type]}`,
   })
@@ -229,6 +239,39 @@ const onClickRight = () => {
   })
 
 };
+const ownerRef=ref(null)
+const onOwner=(item,type)=>{
+  if(type==1){
+    ownerItem.value=item
+    taskModel.value.ownerCode=item.code
+    onSelect(selectType.value)
+  }else if(type==2){
+    showConfirmDialog({
+      title:`创建盲收任务`,
+      message:
+        `货主:《${item.name}》--是否创建盲收任务?`,
+    })
+      .then(() => {
+        const params={
+          type:'盲收',
+          warehouseCode:warehouse,
+          ownerCode:item.code,
+        }
+        showLoading()
+        createBlindTask(params).then(res=>{
+          taskNo.value=res.data
+          _getBlindTask()
+          closeLoading()
+        }).catch(err=>{
+          closeLoading()
+        })
+      })
+  }
+
+}
+const createTask=()=>{
+  ownerRef.value?.show(2)
+}
 
 </script>
 <style scoped lang="sass">
@@ -236,10 +279,18 @@ const onClickRight = () => {
   .mode-input-box
     padding: 10px 5px
     .mode-input-text
+      display: flex
+      justify-content: space-between
+      align-items: center
       font-size: 18px
       font-weight: bold
       margin: 10px 0
-
+      padding: 5px 0
+      .mode-task
+        color: #0077ff
+        font-size: 14px
+        text-decoration: underline
+        justify-content: right
     .mode-input
       background: #eff0f2
       padding: 10px 20px
@@ -278,4 +329,5 @@ const onClickRight = () => {
           font-size: 14px
           color: #666
 
+
 </style>