Quellcode durchsuchen

手持-立库退货上架兼容

zhaohuanhuan vor 2 Monaten
Ursprung
Commit
5a0984813e

+ 2 - 2
src/api/haikang/index.ts

@@ -64,11 +64,11 @@ export function setBoxInboundInventory(data:any) {
  * 料箱回库
  * @param params
  */
-export function boxReturn(params:any) {
+export function boxReturn(data:any) {
   return request({
     url: '/api/wms/return/inventory/boxReturn',
     method: 'post',
-    params
+    data
   })
 }
 

+ 6 - 1
src/hooks/basic/menu.js

@@ -115,10 +115,15 @@ export default function() {
               path: 'robot-merge',
             },
             {
-              title: '立库快上',
+              title: '立库V4快上',
               icon: 'newspaper-o',
               path:   'hik-putaway-allocation?type=asrs',
             },
+            {
+              title: '立库V4上架',
+              icon: 'newspaper-o',
+              path:   'hik-putaway?type=asrs',
+            },
           ],
         },
         {

+ 461 - 0
src/views/haikang/putaway/components/Shelf.vue

@@ -0,0 +1,461 @@
+<template>
+  <div class="shelf-container" :style="{ '--cols': cols, '--rows': rows }">
+
+    <!-- 当前显示的面 -->
+    <div class="shelf-rack">
+      <!-- 货架主体 -->
+      <div class="rack-body">
+
+        <!-- 货架支柱 -->
+        <div class="rack-pillars">
+          <div class="rack-main">
+            <!-- 货架层板 -->
+            <div class="rack-shelves">
+              <div
+                v-for="row in reversedRows"
+                :key="`shelf-${row}`"
+                class="rack-shelf"
+              >
+                <!-- 货架板 -->
+                <div class="shelf-board">
+                  <div
+                    v-for="col in cols"
+                    :key="`cell-${shelfName}-${currentFace}${row}${col}`"
+                    class="shelf-cell"
+                    :class="{ 'highlight': isHighlighted(`${shelfName}-${currentFace}${row}${col}`) }"
+                  >
+                    <!-- 完整编号显示 -->
+                    <div class="cell-number">
+                      {{ shelfName }}-{{ currentFace }}{{ row }}{{ col }}
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup>
+import { computed } from 'vue';
+
+// 接收父组件传递的数据
+const props = defineProps({
+  shelfCode: {
+    type: String,
+    default: ''
+  },
+  highlightCells: {
+    type: Array,
+    default: () => []
+  },
+  rows: {
+    type: Number,
+    default: 4
+  },
+  cols: {
+    type: Number,
+    default: 2
+  }
+});
+
+// 计算属性:从大到小排列,让第一层在底部
+const reversedRows = computed(() => {
+  return Array.from({ length: props.rows }, (_, i) => props.rows - i);
+});
+
+// 当前显示的面
+const currentFace = computed(() => {
+  // 优先根据货架编码判断显示的面
+  if (props.shelfCode) {
+    const match = props.shelfCode.match(/^([A-Z]+\d+)-([AB])$/);
+    if (match) {
+      return match[2]; // 返回A或B
+    }
+  }
+
+  // 如果货架编码没有指定面,则根据highlightCells中的编号自动判断显示的面
+  if (props.highlightCells && props.highlightCells.length > 0) {
+    // 检查是否有A面或B面的编号
+    const hasAFace = props.highlightCells.some(cell => cell.includes('-A'));
+    const hasBFace = props.highlightCells.some(cell => cell.includes('-B'));
+
+    // 如果同时有AB面,默认显示A面;如果只有一面,显示那一面
+    if (hasAFace) return 'A';
+    if (hasBFace) return 'B';
+  }
+  return 'A'; // 默认显示A面
+});
+
+// 货架名称
+const shelfName = computed(() => {
+  // 从货架编码中提取货架名称,如 HJ001-A -> HJ001
+  if (props.shelfCode) {
+    const match = props.shelfCode.match(/^([A-Z]+\d+)-[AB]$/);
+    if (match) {
+      return match[1];
+    }
+  }
+  return 'HJ001'; // 默认值
+});
+
+// 判断格口是否需要高亮
+const isHighlighted = (cellId) => {
+  if (!cellId || !props.highlightCells || props.highlightCells.length === 0) return false;
+
+  return props.highlightCells.includes(cellId);
+};
+
+// 暴露高亮方法
+const highlightCell = (cellId) => {
+  // 注意:由于 props 是只读的,这里只是为了保持接口兼容性
+  // 实际的高亮控制应该通过父组件更新 highlightCells prop
+  console.log('Highlight cell:', cellId);
+};
+
+const clearHighlight = () => {
+  // 注意:由于 props 是只读的,这里只是为了保持接口兼容性
+  // 实际的高亮控制应该通过父组件更新 highlightCells prop
+  console.log('Clear highlight');
+};
+
+defineExpose({ highlightCell, clearHighlight });
+</script>
+
+<style scoped>
+.shelf-container {
+  width: 75%;
+  margin: 0;
+  padding: 0;
+  background:
+    linear-gradient(135deg, rgba(248, 249, 250, 0.95) 0%, rgba(233, 236, 239, 0.95) 100%),
+    radial-gradient(circle at 20% 80%, rgba(120, 119, 198, 0.1) 0%, transparent 50%),
+    radial-gradient(circle at 80% 20%, rgba(255, 255, 255, 0.1) 0%, transparent 50%);
+  border-radius: 16px;
+  box-shadow:
+    0 8px 32px rgba(0, 0, 0, 0.12),
+    0 2px 8px rgba(0, 0, 0, 0.06),
+    inset 0 1px 0 rgba(255, 255, 255, 0.3),
+    inset 0 -1px 0 rgba(0, 0, 0, 0.05);
+  overflow: hidden;
+  position: relative;
+  border: 1px solid rgba(255, 255, 255, 0.2);
+}
+
+.shelf-container::before {
+  content: '';
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  height: 2px;
+  background: linear-gradient(90deg,
+    transparent 0%,
+    rgba(255, 255, 255, 0.9) 20%,
+    rgba(255, 255, 255, 0.6) 50%,
+    rgba(255, 255, 255, 0.9) 80%,
+    transparent 100%);
+  border-radius: 16px 16px 0 0;
+}
+
+.shelf-container::after {
+  content: '';
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  height: 1px;
+  background: linear-gradient(90deg,
+    transparent 0%,
+    rgba(0, 0, 0, 0.1) 50%,
+    transparent 100%);
+}
+
+.shelf-rack {
+  background:
+    linear-gradient(135deg, rgba(255, 255, 255, 0.9) 0%, rgba(249, 250, 251, 0.9) 100%),
+    radial-gradient(circle at 30% 40%, rgba(59, 130, 246, 0.05) 0%, transparent 40%),
+    radial-gradient(circle at 70% 60%, rgba(16, 185, 129, 0.05) 0%, transparent 40%);
+  overflow: hidden;
+  position: relative;
+  backdrop-filter: blur(12px) saturate(1.2);
+  border-radius: 14px;
+  margin: 2px;
+}
+
+.rack-title {
+  margin: 0;
+  font-size: 14px;
+  font-weight: 500;
+  letter-spacing: 0.5px;
+}
+
+.rack-footer {
+  background: #f5f5f5;
+  padding: 8px 15px;
+  text-align: center;
+  border-radius: 3px;
+}
+
+.rack-footer .rack-title {
+  margin: 0;
+  font-size: 18px;
+  font-weight: 600;
+  color: #409eff;
+  letter-spacing: 0.5px;
+}
+
+.rack-body {
+  position: relative;
+  display: block;
+  min-height: calc(28px * var(--rows) + 4px);
+}
+
+/* 货架支柱 */
+.rack-pillars {
+  display: flex;
+  align-items: stretch;
+  position: relative;
+}
+
+.rack-pillar {
+  width: 5px;
+  background:
+    linear-gradient(180deg,
+      #9ca3af 0%,
+      #6b7280 20%,
+      #4b5563 50%,
+      #374151 80%,
+      #1f2937 100%);
+  position: relative;
+  border-radius: 2.5px;
+  box-shadow:
+    0 3px 8px rgba(0, 0, 0, 0.2),
+    inset 0 1px 0 rgba(255, 255, 255, 0.15),
+    inset 0 -1px 0 rgba(0, 0, 0, 0.2),
+    inset 1px 0 0 rgba(255, 255, 255, 0.05);
+  border: 1px solid rgba(255, 255, 255, 0.1);
+}
+
+.left-pillar {
+  margin-right: 10px;
+  transform: skewY(-1deg);
+}
+
+.right-pillar {
+  margin-left: 10px;
+  transform: skewY(1deg);
+}
+
+.rack-main {
+  flex: 1;
+  position: relative;
+}
+
+/* 货架层板 */
+.rack-shelves {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+  gap: 0px;
+}
+
+.rack-shelf {
+  position: relative;
+  flex: 1;
+}
+
+.shelf-board {
+  background: #fafafa;
+  padding: 2px 1px;
+  margin: 0;
+  display: flex;
+  gap: 0px;
+  align-items: center;
+  position: relative;
+}
+
+/* 货架格子 */
+.shelf-cell {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  background:
+    linear-gradient(135deg, rgba(255, 255, 255, 0.95) 0%, rgba(248, 249, 250, 0.95) 100%),
+    radial-gradient(circle at 25% 25%, rgba(255, 255, 255, 0.8) 0%, transparent 50%),
+    radial-gradient(circle at 75% 75%, rgba(0, 0, 0, 0.02) 0%, transparent 50%);
+  border: 1px solid rgba(222, 226, 230, 0.8);
+  border-bottom: 2px solid rgba(226, 232, 240, 0.9);
+  border-radius: 6px;
+  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+  position: relative;
+  min-width: 50px;
+  min-height: 24px;
+  margin: 0.5px;
+  box-shadow:
+    0 1px 3px rgba(0, 0, 0, 0.06),
+    inset 0 1px 0 rgba(255, 255, 255, 0.4),
+    inset 0 -1px 0 rgba(0, 0, 0, 0.05);
+  cursor: pointer;
+}
+
+.shelf-cell:hover {
+  transform: translateY(-0.5px) scale(1.01);
+  box-shadow:
+    0 3px 8px rgba(0, 0, 0, 0.1),
+    0 1px 3px rgba(0, 0, 0, 0.06),
+    inset 0 1px 0 rgba(255, 255, 255, 0.5),
+    inset 0 -1px 0 rgba(0, 0, 0, 0.03);
+  border-color: #a0aec0;
+  background:
+    linear-gradient(135deg, rgba(255, 255, 255, 0.98) 0%, rgba(241, 243, 244, 0.98) 100%),
+    radial-gradient(circle at 25% 25%, rgba(255, 255, 255, 0.9) 0%, transparent 50%),
+    radial-gradient(circle at 75% 75%, rgba(0, 0, 0, 0.01) 0%, transparent 50%);
+}
+
+/* 单元格编号 */
+.cell-number {
+  font-size: 16px;
+  font-weight: 600;
+  color: #1a202c;
+  text-align: center;
+  line-height: 1;
+  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
+  letter-spacing: 0.01em;
+  text-shadow: 0 0.5px 1px rgba(0, 0, 0, 0.03);
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.shelf-cell.highlight {
+  background:
+    linear-gradient(135deg, rgba(240, 253, 244, 0.95) 0%, rgba(220, 252, 231, 0.95) 100%),
+    radial-gradient(circle at 30% 30%, rgba(34, 197, 94, 0.1) 0%, transparent 60%),
+    radial-gradient(circle at 70% 70%, rgba(255, 255, 255, 0.3) 0%, transparent 60%);
+  border-color: #22c55e;
+  border-width: 1.5px;
+  box-shadow:
+    0 4px 12px rgba(34, 197, 94, 0.25),
+    0 2px 6px rgba(34, 197, 94, 0.15),
+    0 0 0 1px rgba(34, 197, 94, 0.1),
+    inset 0 1px 0 rgba(255, 255, 255, 0.2);
+  transform: translateY(-0.5px) scale(1.02);
+  animation: highlight-glow 2s ease-in-out infinite alternate;
+}
+
+.shelf-cell.highlight .cell-number {
+  color: #166534;
+  font-weight: 800;
+  text-shadow:
+    0 1px 2px rgba(22, 101, 52, 0.2),
+    0 0 0 1px rgba(34, 197, 94, 0.1);
+  background: linear-gradient(135deg, #166534 0%, #15803d 100%);
+  -webkit-background-clip: text;
+  -webkit-text-fill-color: transparent;
+  background-clip: text;
+}
+
+@keyframes highlight-glow {
+  0% {
+    box-shadow:
+      0 4px 12px rgba(34, 197, 94, 0.25),
+      0 2px 6px rgba(34, 197, 94, 0.15),
+      0 0 0 1px rgba(34, 197, 94, 0.1),
+      inset 0 1px 0 rgba(255, 255, 255, 0.2);
+  }
+  100% {
+    box-shadow:
+      0 6px 16px rgba(34, 197, 94, 0.35),
+      0 3px 8px rgba(34, 197, 94, 0.2),
+      0 0 0 1px rgba(34, 197, 94, 0.15),
+      inset 0 1px 0 rgba(255, 255, 255, 0.3);
+  }
+}
+
+/* 响应式调整 */
+@media (max-width: 768px) {
+  .shelf-container {
+    width: 260px !important;
+    height: 100px !important;
+    padding: 0;
+    margin: 0 auto;
+    border-radius: 12px;
+    box-shadow:
+      0 6px 24px rgba(0, 0, 0, 0.15),
+      0 2px 8px rgba(0, 0, 0, 0.08),
+      inset 0 1px 0 rgba(255, 255, 255, 0.2),
+      inset 0 -1px 0 rgba(0, 0, 0, 0.03);
+    border: 1px solid rgba(255, 255, 255, 0.15);
+  }
+
+  .shelf-rack {
+    background:
+      linear-gradient(135deg, rgba(255, 255, 255, 0.9) 0%, rgba(249, 250, 251, 0.9) 100%),
+      radial-gradient(circle at 30% 40%, rgba(59, 130, 246, 0.03) 0%, transparent 40%),
+      radial-gradient(circle at 70% 60%, rgba(16, 185, 129, 0.03) 0%, transparent 40%);
+    backdrop-filter: blur(8px) saturate(1.1);
+    border-radius: 10px;
+    margin: 1px;
+  }
+
+  .rack-body {
+    min-height: calc(18px * var(--rows) + 4px);
+    height: calc(100% - 8px);
+  }
+
+  .rack-pillars {
+    position: relative;
+    margin-bottom: 3px;
+  }
+
+  .rack-pillar {
+    width: 3px;
+  }
+
+  .left-pillar {
+    margin-right: 3px;
+  }
+
+  .right-pillar {
+    margin-left: 3px;
+  }
+
+  .rack-shelves {
+    gap: 2px;
+  }
+
+  .shelf-board {
+    padding: 1px 0px;
+    gap: 1px;
+  }
+
+  .shelf-cell {
+    min-height: 16px;
+    min-width: 32px;
+    padding: 1px;
+    border-width: 1px;
+    margin: 0.5px;
+    border-radius: 3px;
+  }
+
+  .cell-number {
+    font-size: 11px;
+    font-weight: 600;
+  }
+
+  .shelf-cell:hover {
+    transform: none;
+  }
+
+  .shelf-cell.highlight {
+    border-color: #22c55e;
+    border-width: 1.5px;
+    box-shadow: 0 1px 4px rgba(34, 197, 94, 0.15), 0 0 0 1px rgba(34, 197, 94, 0.08);
+  }
+}
+</style>

+ 1 - 1
src/views/haikang/putaway/dispatch/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="container">
     <van-nav-bar
-      :title="mode?'立库快上':'海康快上'" left-arrow fixed placeholder @click-left="goBack">
+      :title="mode?'立库V4快上':'海康快上'" left-arrow fixed placeholder @click-left="goBack">
       <template #left>
         <van-icon name="arrow-left" size="25" />
         <div style="color: #fff">返回</div>

+ 86 - 20
src/views/haikang/putaway/putaway/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="container">
-    <van-nav-bar title="海康上架" left-arrow fixed placeholder @click-left="goBack">
+    <van-nav-bar :title="mode?'立库V4上架':'海康上架'" left-arrow fixed placeholder @click-left="goBack">
       <template #left>
         <van-icon name="arrow-left" size="25" /><div style="color: #fff">返回</div>
       </template>
@@ -40,9 +40,25 @@
           <van-button type="primary" size="small" block :disabled="searchLocation!=recommendedLocation || searchLocation=='' "   @click="setPutaway(2)" >提交上架</van-button>
         </div>
         <div class="putaway-box" v-if="barcodeActive.bin">
-          <div><box ref="boxRef" :box="{name:workBinNo,category:barcodeActive.gridCount}"></box></div>
+          <div class="shelf-wrapper">
+            <!-- 根据 boxCode 判断使用哪个组件 -->
+            <box
+              v-if="!barcodeActive.boxCode || !barcodeActive.boxCode.startsWith('HJ')"
+              ref="boxRef"
+              :box="{name:workBinNo,category:barcodeActive.gridCount}"
+            ></box>
+            <shelf
+              v-else
+              ref="shelfRef"
+              :shelfCode="workBinNo"
+              :highlightCells="barcodeActive.locationId"
+              :rows="4"
+              :cols="2"
+            ></shelf>
+          </div>
           <div  style="font-size: 14px;" v-if="barcodeActive.gridNum" >料箱格口:{{ barcodeActive.gridNum }}</div>
-          <div  style="font-size: 14px;"  v-else >料箱格口:请手动扫描</div>
+<!--          <div  style="font-size: 14px;"  v-else >料箱格口:请手动扫描</div>-->
+          <!-- 货架组件 -->
         </div>
       </div>
       <div class="putaway-bottom"  v-if="equipmentBarcodeList.length>0">
@@ -83,9 +99,11 @@ import { showConfirmDialog, showNotify } from 'vant'
 import { barcodeToUpperCase, toMap } from '@/utils/dataType'
 import InputBarcode from '@/views/outbound/picking/components/InputBarcode.vue'
 import Box from '@/views/haikang/putaway/components/Box.vue'
+import Shelf from '@/views/haikang/putaway/components/Shelf.vue'
 import GoBoxBack from '@/views/haikang/putaway/components/GoBoxBack.vue'
 import { boxReturn, getShelveItemInfo, outboundEmptyBoxAndBindTask, setBoxInboundInventory } from '@/api/haikang'
 import { closeLoading, showLoading } from '@/utils/loading'
+import {useRoute} from "vue-router";
 try {
   getHeader()
   androidFocus()
@@ -100,7 +118,8 @@ onMounted(() => {
 const store = useStore()
 const warehouse = store.warehouse
 const dataList=ref([])
-
+const route = useRoute()
+const mode=ref(route.query.type)
 //料箱编号
 const workBinNo = ref('')
 //扫描类型
@@ -120,7 +139,19 @@ const searchLocation=ref('')
 const recommendedLocation=ref('')
 const locationList = (data) => {
   return data.reduce((acc, item) => {
-    const key = item.boxCode
+    // 优先使用 locationId(如果存在且符合格口格式),否则使用 boxCode
+    let key = item.locationId || item.boxCode
+
+    // 提取库位key,支持多种格式
+    if (key.match(/^([A-Z]+\d+-[AB])\d+$/)) {
+      // HJ0001-A11 -> HJ0001-A (货架A/B面格式)
+      key = key.replace(/^([A-Z]+\d+-[AB])\d+$/, '$1')
+    } else if (key.match(/^([A-Z]+\d+)-\d+$/)) {
+      // TP000006-1 -> TP000006 (其他库位格式)
+      key = key.replace(/^([A-Z]+\d+)-\d+$/, '$1')
+    }
+    // 其他格式如 TP000007 保持不变
+
     acc[key] = acc[key] || []
     acc[key].push(item)
     return acc
@@ -128,12 +159,25 @@ const locationList = (data) => {
 }
 //料箱库位
 const locationMap = ref({})
-const wallBinList = ref([
-  ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20'],
-  ['21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40'],
-  ['41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60'],
-  ['61', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '80'],
-])
+// 生成分拨格口列表的工具函数
+const generateWallBinList = (rows, cols = 20) => {
+  const result = []
+  for (let i = 0; i < rows; i++) {
+    const row = []
+    for (let j = 0; j < cols; j++) {
+      row.push(String(i * cols + j + 1))
+    }
+    result.push(row)
+  }
+  return result
+}
+
+// 根据模式生成分拨格口列表
+const wallBinList = ref(
+  mode.value === 'asrs'
+    ? generateWallBinList(3)  // ASRS模式:3行
+    : generateWallBinList(4)  // 默认模式:4行
+)
 const getRows = (wall) => {
   let rows = []
   for (let i = 0; i < wall.length; i += 4) {
@@ -156,16 +200,32 @@ const locationScanBarcodeBinList = ref([])
 //料箱内商品所有格口
 const locationBarcodeBinList = ref([])
 const boxRef = ref(null)
+const shelfRef = ref(null)
 const _handlerScan = (code) => {
   if (scanType.value == 1) {
-    workBinNo.value =barcodeToUpperCase(code)
+    // 料箱编号调整时,清除相关状态信息
+    searchBarcode.value = ''
+    equipmentBarcodeList.value = []
+    barcodeActive.value = {}
+    locationBarcodeBinList.value = []
+    locationScanBarcodeBinList.value = []
+    searchLocation.value = ''
+    recommendedLocation.value = ''
+    count.value = ''
+    // 处理扫描的格口编号,支持完整格式(如 HJ0001-A22)和库位格式(如 HJ0001-A)
+    let searchKey = barcodeToUpperCase(code)
+    const gridMatch = searchKey.match(/^([A-Z]+\d+-[AB])\d+$/)
+    if (gridMatch) {
+      searchKey = gridMatch[1] // 转换为库位格式,如 HJ0001-A
+    }
+    workBinNo.value =searchKey
     showLoading()
-    getShelveItemInfo({warehouse, boxCode: code, }).then(res => {
+    getShelveItemInfo({warehouse, boxCode: searchKey,type:mode.value?'ASRS':'HIK' }).then(res => {
       if(res.data.length>0){
         reset()
         dataList.value=res.data
         locationMap.value = locationList(res.data)
-        locationDetailList.value = locationMap.value[barcodeToUpperCase(code)]
+        locationDetailList.value = locationMap.value[searchKey]
         equipmentMap.value=locationDetailList.value.reduce((acc, item) => {
           if (!acc[item.equipment]) {
             acc[item.equipment] = [];
@@ -360,7 +420,7 @@ const setPutaway=async (type)=>{
       .then(() => {
         showLoading()
         const {container,asnCode}=locationDetailList.value[0]
-        boxReturn({warehouse,container,boxCode:workBinNo.value,externalCode:asnCode}).then(res=>{
+        boxReturn({warehouse,container,boxCode:workBinNo.value,externalCode:asnCode,taskType:mode.value?'ASRS':'HIK'}).then(res=>{
           closeLoading()
           scanSuccess()
           tips.value = `料箱回库成功,请继续扫描料箱编号`
@@ -388,7 +448,7 @@ const setGoBack=async (item)=>{
     if(item.active==1){
       const {warehouse,container,boxCode,asnCode}=barcodeActive.value
       showLoading()
-      const boxRes= await boxReturn({warehouse,container,boxCode,externalCode:asnCode}).catch(err=>{
+      const boxRes= await boxReturn({warehouse,container,boxCode,externalCode:asnCode,taskType:mode.value?'ASRS':'HIK'}).catch(err=>{
         closeLoading()
       })
       closeLoading()
@@ -467,18 +527,18 @@ const loadData = () => {
 }
 // 刷新待上架数据
 const refreshPutawayList = (item) => {
-  getShelveItemInfo({warehouse:item.warehouse, boxCode:item.boxCode,}).then(res => {
+  getShelveItemInfo({warehouse:item.warehouse, boxCode:workBinNo.value,type:mode.value?'ASRS':'HIK'}).then(res => {
     if(res.data.length>0) {
       dataList.value = res.data
       locationMap.value = locationList(res.data)
-      locationDetailList.value = locationMap.value[barcodeToUpperCase(item.boxCode)]
+      locationDetailList.value = locationMap.value[workBinNo]
       equipmentMap.value=locationDetailList.value.reduce((acc, item) => {
         if (!acc[item.equipment]) {
           acc[item.equipment] = [];
         }
         acc[item.equipment].push(item);
         return acc;
-      }, {})
+      }, {});
       equipmentBarcodeList.value = equipmentMap.value[item.equipment]
     }
   })
@@ -546,7 +606,13 @@ window.onRefresh = loadData
 
 
     .putaway-button
-      padding: 10px 20px
+      padding: 10px 20px 5px 20px
+
+    .shelf-wrapper
+      display: flex
+      justify-content: center
+      align-items: center
+      margin:  0
 
     .wall-list-box
       background: #646566