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/productsales/modules/form.vue | 28 +++++++++++++---------------
1 files changed, 13 insertions(+), 15 deletions(-)
diff --git a/src/views/wls/productsales/modules/form.vue b/src/views/wls/productsales/modules/form.vue
index 27ee471..c05ba79 100644
--- a/src/views/wls/productsales/modules/form.vue
+++ b/src/views/wls/productsales/modules/form.vue
@@ -23,6 +23,7 @@
submitProductSales,
updateProductSales,
} from '#/api/mes/wm/productsales';
+import TraceScanInput from '#/components/TraceScanInput.vue';
import { $t } from '#/locales';
import { useFormSchema } from '../data';
@@ -33,7 +34,7 @@
const formType = ref<FormType>('create');
const formData = ref<MesWmProductSalesApi.ProductSales>();
const scanContent = ref('');
-const scanType = ref<'BAG' | 'PALLET' | 'BATCH'>('BAG');
+const scanType = ref<'' | 'BAG' | 'BATCH' | 'PALLET'>('');
const scanPreview = ref<MesWmProductSalesApi.ProductSalesScanResponse>();
const selectedBagIds = ref<number[]>([]);
const scanLoading = ref(false);
@@ -108,16 +109,18 @@
}
}
-/** 鍏堣瘑鍒璞″苟閫夋嫨琚嬬爜锛屽洖杞︿笉浼氱洿鎺ュ啓鍏ユ嫞璐с�� */
-async function handleScan() {
- if (!formData.value?.id || !scanContent.value.trim() || scanLoading.value) {
+/** 鍏堣瘑鍒璞″苟閫夋嫨琚嬬爜锛岀‘璁ゅ悗鎵嶅啓鍏ユ嫞璐с�� */
+async function handleScan(raw?: string) {
+ const content = (raw ?? scanContent.value).trim();
+ if (!formData.value?.id || !content || scanLoading.value) {
return;
}
+ scanContent.value = content;
scanLoading.value = true;
try {
scanPreview.value = undefined;
selectedBagIds.value = [];
- const result = await previewProductSalesScan(scanContent.value.trim(), scanType.value, formData.value.id);
+ const result = await previewProductSalesScan(content, scanType.value || undefined, formData.value.id);
scanPreview.value = result;
if (result.scanType === 'BAG') selectedBagIds.value = result.bags?.filter(b => b.selectable).map(b => b.id) || [];
if (!result.scanQuantity) message.warning('褰撳墠瀵硅薄娌℃湁鍙嫞琚嬬爜锛岃鏍稿璐ㄦ鍜屽簱瀛樼姸鎬�');
@@ -291,19 +294,14 @@
<div v-if="isStock" class="mb-3 flex items-center gap-2 px-4">
<label for="sales-picking-type" class="sr-only">鎷h揣鎵爜绫诲瀷</label>
<a-select id="sales-picking-type" v-model:value="scanType" :disabled="scanLoading" style="width:140px" @change="scanPreview = undefined; selectedBagIds = []">
- <a-select-option value="BAG">琚嬬爜</a-select-option><a-select-option value="PALLET">鎵樼洏鐮�</a-select-option><a-select-option value="BATCH">鐢熶骇鎵规鐮�</a-select-option>
+ <a-select-option value="">鑷姩璇嗗埆</a-select-option><a-select-option value="BAG">琚嬬爜</a-select-option><a-select-option value="PALLET">鎵樼洏鐮�</a-select-option><a-select-option value="BATCH">鐢熶骇鎵规鐮�</a-select-option>
</a-select>
- <a-input
- v-model:value="scanContent"
- :disabled="scanLoading"
- autofocus
+ <TraceScanInput
class="flex-1"
- placeholder="鎵弿鎵�閫夌被鍨嬬爜锛屽洖杞﹁瘑鍒�"
- @press-enter="handleScan"
+ :disabled="scanLoading"
+ placeholder="鎵弿杩芥函浜岀淮鐮佹垨杈撳叆杩芥函鐮侊紝鍥炶溅璇嗗埆"
+ @code="handleScan"
/>
- <Button :loading="scanLoading" type="default" @click="handleScan">
- 璇嗗埆鐮佸��
- </Button>
</div>
<section v-if="isStock && scanPreview" class="mb-4 rounded-lg border border-border p-4">
<h3 class="font-semibold">鏍稿鎷h揣瀵硅薄</h3><p>鎵规 {{scanPreview.batchCode}} 路 鍙嫞 {{scanPreview.scanQuantity}} 琚�</p>
--
Gitblit v1.9.3