|
@@ -0,0 +1,179 @@
|
|
|
|
|
+<template>
|
|
|
|
|
+ <div class="container">
|
|
|
|
|
+ <van-nav-bar
|
|
|
|
|
+ title="站点任务"
|
|
|
|
|
+ left-arrow
|
|
|
|
|
+ fixed
|
|
|
|
|
+ placeholder
|
|
|
|
|
+ >
|
|
|
|
|
+ <template #left>
|
|
|
|
|
+ <van-icon name="arrow-left" size="25" @click="goBack" />
|
|
|
|
|
+ <div style="color: #fff;height: 46px;padding-right:20px;line-height: 46px">返回</div>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ <template #right>
|
|
|
|
|
+<!-- <div style="color: #fff;line-height: 46px ">开始作业</div>-->
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </van-nav-bar>
|
|
|
|
|
+ <van-pull-refresh v-model="loading" @refresh="onRefresh" style="min-height: 93.1vh;">
|
|
|
|
|
+ <div v-if="siteTaskList.length>0" class="site-task">
|
|
|
|
|
+ <van-collapse v-model="activeSite" ref="siteTaskRef" >
|
|
|
|
|
+ <van-collapse-item :name="i" v-for="(item,i) in siteTaskList">
|
|
|
|
|
+ <template #title>
|
|
|
|
|
+ <div class="sit-task-title">
|
|
|
|
|
+ 分拨站:{{item.deviceCode}}
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div style="display: flex;justify-content: space-between;">
|
|
|
|
|
+ <div>巷道任务总数:<span class="sit-task-title" style="color: #0077ff">{{item.totalTaskQty}}</span></div>
|
|
|
|
|
+ <div>剩余巷道任务:<span class="sit-task-title" style="color: #0077ff">{{item.remainingTaskQty}}</span></div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ <template #value>
|
|
|
|
|
+ 详情
|
|
|
|
|
+ </template>
|
|
|
|
|
+ <div v-if="item.task.length>0" class="site-task-table">
|
|
|
|
|
+ <table class="task-table-box" >
|
|
|
|
|
+ <thead>
|
|
|
|
|
+ <tr>
|
|
|
|
|
+ <th style="min-width: 40px">巷道</th>
|
|
|
|
|
+ <th style="min-width: 40px">库位数</th>
|
|
|
|
|
+ <th style="min-width: 40px">商品数</th>
|
|
|
|
|
+ <th style="min-width: 40px">状态</th>
|
|
|
|
|
+ <th style="min-width: 40px">操作</th>
|
|
|
|
|
+ </tr>
|
|
|
|
|
+ </thead>
|
|
|
|
|
+ <tbody>
|
|
|
|
|
+ <tr v-if="item.task.length>0" v-for="(items,index) in item.task" :key="index" >
|
|
|
|
|
+ <td>{{ items.aisle }}</td>
|
|
|
|
|
+ <td>{{ items.locationQty }}</td>
|
|
|
|
|
+ <td>{{ items.quantity }}</td>
|
|
|
|
|
+ <td>{{typeMap[items.status] || items.status }}</td>
|
|
|
|
|
+ <td>
|
|
|
|
|
+ <van-button size="mini" type="primary" @click="onCreateTask(items)">获取任务</van-button>
|
|
|
|
|
+ </td>
|
|
|
|
|
+ </tr>
|
|
|
|
|
+ </tbody>
|
|
|
|
|
+ </table>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div v-else>
|
|
|
|
|
+ <van-empty image-size="70" style="padding:0 !important;" :description="'暂无数据'" ></van-empty>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </van-collapse-item>
|
|
|
|
|
+ </van-collapse>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div v-else style="background: #fff">
|
|
|
|
|
+ <van-empty :image="nodataUrl" image-size="160" >
|
|
|
|
|
+ <van-button round type="primary" class="bottom-button" size="small" @click="loadData">刷新</van-button>
|
|
|
|
|
+ </van-empty>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </van-pull-refresh>
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ </div>
|
|
|
|
|
+</template>
|
|
|
|
|
+<script setup>
|
|
|
|
|
+import { getPickingDetailsByAisle, getStationAisleTask, updatePickingDetailOperator } from '@/api/picking/index'
|
|
|
|
|
+import { useStore } from '@/store/modules/user'
|
|
|
|
|
+import { getHeader, goBack } from '@/utils/android'
|
|
|
|
|
+import { useRouter } from 'vue-router'
|
|
|
|
|
+import { ref } from 'vue'
|
|
|
|
|
+import { showToast } from 'vant'
|
|
|
|
|
+import { closeLoading, showLoading } from '@/utils/loading'
|
|
|
|
|
+import nodataUrl from '@/assets/nodata.png'
|
|
|
|
|
+const router = useRouter()
|
|
|
|
|
+try {
|
|
|
|
|
+ getHeader()
|
|
|
|
|
+} catch (error) {
|
|
|
|
|
+ router.push('/login')
|
|
|
|
|
+}
|
|
|
|
|
+const store = useStore()
|
|
|
|
|
+const value = ref('')
|
|
|
|
|
+const warehouse = store.warehouse
|
|
|
|
|
+const siteTaskList = ref([])
|
|
|
|
|
+const siteTaskRef = ref(null)
|
|
|
|
|
+const activeSite = ref([])
|
|
|
|
|
+const typeMap={
|
|
|
|
|
+ CREATE:"未拣",
|
|
|
|
|
+ COMPLETE:"完成",
|
|
|
|
|
+ RUNNING:"拣货中"
|
|
|
|
|
+}
|
|
|
|
|
+const loadData = async () => {
|
|
|
|
|
+ showLoading()
|
|
|
|
|
+ try {
|
|
|
|
|
+ const res = await getStationAisleTask({ warehouse });
|
|
|
|
|
+ const taskDetailsPromises = res.data.map(async (item) => {
|
|
|
|
|
+ const data = await getPickingDetailsByAisle({ warehouse, pickingCode: item.taskCode })
|
|
|
|
|
+ item.task =data.data
|
|
|
|
|
+ return item
|
|
|
|
|
+ });
|
|
|
|
|
+ siteTaskList.value =await Promise.all(taskDetailsPromises)
|
|
|
|
|
+ if(res.data.length===1){
|
|
|
|
|
+ setTimeout(() => {
|
|
|
|
|
+ siteTaskRef.value?.toggleAll(true);
|
|
|
|
|
+ }, 200);
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ console.error('获取数据失败', error);
|
|
|
|
|
+ } finally {
|
|
|
|
|
+ closeLoading();
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+loadData()
|
|
|
|
|
+
|
|
|
|
|
+//获取拣货任务
|
|
|
|
|
+const onCreateTask= async (item)=>{
|
|
|
|
|
+ console.log(item)
|
|
|
|
|
+ showLoading()
|
|
|
|
|
+ const params={warehouse,pickingCode:item.code,aisle:item.aisle}
|
|
|
|
|
+ updatePickingDetailOperator(params).then(res=>{
|
|
|
|
|
+ router.push({name:'PickingList',query:{code:item.code,mode:'AISLE',aisle:item.aisle}})
|
|
|
|
|
+ closeLoading()
|
|
|
|
|
+ }).catch(err=>{
|
|
|
|
|
+ closeLoading()
|
|
|
|
|
+ })
|
|
|
|
|
+}
|
|
|
|
|
+/**
|
|
|
|
|
+ * 下拉刷新
|
|
|
|
|
+ */
|
|
|
|
|
+const loading = ref(false)
|
|
|
|
|
+const onRefresh = () => {
|
|
|
|
|
+ setTimeout(() => {
|
|
|
|
|
+ loadData()
|
|
|
|
|
+ showToast('刷新成功')
|
|
|
|
|
+ loading.value = false
|
|
|
|
|
+ }, 1000)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+window.onRefresh=loadData
|
|
|
|
|
+
|
|
|
|
|
+</script>
|
|
|
|
|
+<style scoped lang="sass">
|
|
|
|
|
+.site-task
|
|
|
|
|
+ ::v-deep(.van-collapse-item__content)
|
|
|
|
|
+ padding: 0
|
|
|
|
|
+ ::v-deep(.van-cell__title)
|
|
|
|
|
+ flex: 80% 0
|
|
|
|
|
+ ::v-deep(.van-cell__value)
|
|
|
|
|
+ flex: 0 20%
|
|
|
|
|
+ .sit-task-title
|
|
|
|
|
+ font-size: 15px
|
|
|
|
|
+ text-align: left
|
|
|
|
|
+ font-weight: 500
|
|
|
|
|
+ .site-task-table
|
|
|
|
|
+ width: 100%
|
|
|
|
|
+ overflow-y: auto
|
|
|
|
|
+ .task-table,.task-table-bin,.task-table-box
|
|
|
|
|
+ width: 100%
|
|
|
|
|
+ table-layout: fixed
|
|
|
|
|
+ border-collapse: collapse
|
|
|
|
|
+ font-size: 15px
|
|
|
|
|
+ .task-table th,.task-table-bin th,.task-table td,.task-table-bin td,.task-table-box th,.task-table-box td
|
|
|
|
|
+ text-align: center
|
|
|
|
|
+ border: 1px solid #ccc
|
|
|
|
|
+ word-wrap: break-word
|
|
|
|
|
+ word-break: break-all
|
|
|
|
|
+ .task-table thead,.task-table-bin thead,.task-table-box thead
|
|
|
|
|
+ position: sticky
|
|
|
|
|
+ top: 0
|
|
|
|
|
+ font-size: 15px
|
|
|
|
|
+</style>
|