From 7a93a85f75bcfc8001ea1d3b921860806a8209ac Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 29 十月 2026 12:28:48 +0800
Subject: [PATCH] feat(mobile): 新增多个移动端功能模块并优化扫码流程

---
 src/views/wls/miscissue/modules/line-list.vue |   42 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 42 insertions(+), 0 deletions(-)

diff --git a/src/views/wls/miscissue/modules/line-list.vue b/src/views/wls/miscissue/modules/line-list.vue
index 8f8e9be..f89b87d 100644
--- a/src/views/wls/miscissue/modules/line-list.vue
+++ b/src/views/wls/miscissue/modules/line-list.vue
@@ -4,6 +4,8 @@
 import type { VxeTableGridOptions } from '#/adapter/vxe-table';
 import type { MesWmMiscIssueLineApi } from '#/api/mes/wm/miscissue/line';
 
+import type { TraceResult } from '#/utils/traceLookup';
+
 import { computed } from 'vue';
 
 import { useVbenModal } from '@vben/common-ui';
@@ -15,7 +17,9 @@
   deleteMiscIssueLine,
   getMiscIssueLinePage,
 } from '#/api/mes/wm/miscissue/line';
+import TraceScanPanel from '#/components/TraceScanPanel.vue';
 import { $t } from '#/locales';
+import { findMaterialStocks, traceQuantity } from '#/utils/traceLookup';
 
 import { useLineGridColumns } from '../data';
 import LineForm from './line-form.vue';
@@ -43,6 +47,39 @@
 /** 娣诲姞鐗╂枡 */
 function handleCreate() {
   lineFormModalApi.setData({ issueId: props.issueId }).open();
+}
+
+/** 鎵爜甯﹀嚭锛氭寜杩芥函鐮佸尮閰嶅簱瀛樿褰曞悗鎵撳紑鏂板琛岃〃鍗� */
+async function handleTraceConfirm(trace: TraceResult) {
+  try {
+    const stocks = await findMaterialStocks(trace);
+    const stock = stocks.find((item) => (item.quantity ?? 0) > 0) ?? stocks[0];
+    if (!stock) {
+      message.warning('鏈壘鍒拌杩芥函鐮佸搴旂殑搴撳瓨璁板綍');
+      return;
+    }
+    const quantity = traceQuantity(trace);
+    lineFormModalApi
+      .setData({
+        defaults: {
+          areaId: stock.areaId,
+          batchCode: stock.batchCode,
+          itemId: stock.itemId,
+          locationId: stock.locationId,
+          materialStockId: stock.id,
+          quantity:
+            quantity && stock.quantity
+              ? Math.min(quantity, stock.quantity)
+              : (quantity ?? stock.quantity),
+          quantityMax: stock.quantity,
+          warehouseId: stock.warehouseId,
+        },
+        issueId: props.issueId,
+      })
+      .open();
+  } catch (e) {
+    message.error(e instanceof Error ? e.message : '鎵爜甯﹀嚭澶辫触');
+  }
 }
 
 /** 缂栬緫鐗╂枡 */
@@ -98,6 +135,11 @@
 <template>
   <div>
     <LineFormModal @success="handleRefresh" />
+    <TraceScanPanel
+      v-if="isEditable"
+      title="鎵爜甯﹀嚭鍑哄簱鏄庣粏"
+      @confirm="handleTraceConfirm"
+    />
     <Grid table-title="鐗╂枡淇℃伅">
       <template v-if="isEditable" #toolbar-tools>
         <TableAction

--
Gitblit v1.9.3