| | |
| | | class="custom-vol-box" |
| | | > |
| | | <div> |
| | | <!-- 忮鿩åºåï¼å¯è¾å
¥æç´¢ï¼ --> |
| | | <el-form :inline="true" :model="orderForm" style="margin-bottom: 20px; align-items: flex-end;"> |
| | | <el-form-item label="åºåºåæ®:" name="outboundOrderId"> |
| | | <el-select |
| | | v-model="orderForm.outboundOrderId" |
| | | placeholder="è¯·éæ©ææ«æåºåºåæ®å·" |
| | | <!-- åæ®è¾å
¥åºåï¼æ¯ææ«ç ï¼ --> |
| | | <el-form |
| | | :inline="true" |
| | | :model="orderForm" |
| | | style="margin-bottom: 20px; align-items: flex-end;" |
| | | @submit.prevent |
| | | > |
| | | <el-form-item label="åºåºåæ®:" name="outboundOrderNo"> |
| | | <el-input |
| | | v-model="orderForm.outboundOrderNo" |
| | | placeholder="请è¾å
¥ææ«æåºåºåæ®å·" |
| | | clearable |
| | | style="width: 220px; margin-right: 10px;" |
| | | @change="handleOrderChange" |
| | | @visible-change="handleOutboundVisibleChange" |
| | | :loading="loading" |
| | | filterable |
| | | :filter-method="filterOutboundOrders" |
| | | @input="handleOutboundScanInput" |
| | | ref="outboundSelectRef" |
| | | > |
| | | <el-option |
| | | v-for="order in filteredOutboundOrders" |
| | | :key="order.id" |
| | | :label="order.orderNo" |
| | | :value="order.id" |
| | | ></el-option> |
| | | </el-select> |
| | | @input="handleOutboundInput" |
| | | @keyup.enter="(e) => { |
| | | e.stopPropagation(); // 黿¢äºä»¶å泡 |
| | | e.preventDefault(); // 黿¢é»è®¤è¡ä¸º |
| | | focusBarcodeInputDirectly(); |
| | | }" |
| | | ref="outboundInputRef" |
| | | ></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="éè´åæ®:" name="purchaseOrderId"> |
| | | <el-select |
| | | v-model="orderForm.purchaseOrderId" |
| | | placeholder="è¯·éæ©ææ«æéè´åæ®å·" |
| | | <el-form-item label="éè´åæ®:" name="purchaseOrderNo"> |
| | | <el-input |
| | | v-model="orderForm.purchaseOrderNo" |
| | | placeholder="æ«ç æ¡ç åèªå¨å¡«å
" |
| | | clearable |
| | | style="width: 220px; margin-right: 10px;" |
| | | @change="handleOrderChange" |
| | | @visible-change="handlePurchaseVisibleChange" |
| | | :loading="loading" |
| | | filterable |
| | | :filter-method="filterPurchaseOrders" |
| | | @input="handlePurchaseScanInput" |
| | | ref="purchaseSelectRef" |
| | | > |
| | | <el-option |
| | | v-for="order in filteredPurchaseOrders" |
| | | :key="order.id" |
| | | :label="order.orderNo" |
| | | :value="order.id" |
| | | ></el-option> |
| | | </el-select> |
| | | @input="handlePurchaseInput" |
| | | readonly |
| | | ref="purchaseInputRef" |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <!-- 䏿¹è¾å
¥æ¡ --> |
| | | <el-form :inline="true" :model="formData" ref="formRef" style="margin-bottom: 20px; align-items: flex-end;"> |
| | | <el-form |
| | | :inline="true" |
| | | :model="formData" |
| | | ref="formRef" |
| | | style="margin-bottom: 20px; align-items: flex-end;" |
| | | @submit.prevent |
| | | > |
| | | <el-form-item |
| | | label="æ«ææ¡ç :" |
| | | style="width: 80%" |
| | |
| | | ref="barcodeInputRef" |
| | | v-model="formData.barcode" |
| | | placeholder="è¯·ä½¿ç¨æ«ç æªæ«ææ¡ç ï¼ææå¨è¾å
¥" |
| | | @keyup.enter="handleScan" |
| | | @keydown.enter="debouncedHandleScan" |
| | | autofocus |
| | | class="custom-input" |
| | | :disabled="!orderForm.outboundOrderId || !orderForm.purchaseOrderId" |
| | | :disabled="!orderForm.outboundOrderNo || loading" |
| | | ></el-input> |
| | | </el-form-item> |
| | | <el-form-item> |
| | |
| | | size="small" |
| | | @click="handleScan" |
| | | class="custom-button" |
| | | :disabled="!orderForm.outboundOrderId || !orderForm.purchaseOrderId || loading" |
| | | :disabled="!orderForm.outboundOrderNo || loading" |
| | | > |
| | | <Search /> ç¡®è®¤æ«æ |
| | | </el-button> |
| | |
| | | </div> |
| | | </transition-group> |
| | | <div class="empty-tip" v-if="scannedBarcodes.length === 0"> |
| | | <span>ææ æ«æè®°å½ï¼è¯·å
éæ©åæ®åæ«ææ¡ç </span> |
| | | <span>ææ æ«æè®°å½ï¼è¯·å
è¾å
¥åºåºåæ®åæ«ææ¡ç </span> |
| | | </div> |
| | | </el-scrollbar> |
| | | </div> |
| | |
| | | type="primary" |
| | | size="small" |
| | | @click="submit" |
| | | :disabled="scannedBarcodes.length === 0 || !orderForm.outboundOrderId || !orderForm.purchaseOrderId || loading" |
| | | :disabled="scannedBarcodes.length === 0 || !orderForm.outboundOrderNo || !orderForm.purchaseOrderNo || loading" |
| | | class="submit-btn" |
| | | > |
| | | <Check /> æäº¤åºåº |
| | | </el-button> |
| | | <el-button type="text" size="small" @click="showDetailBox = false" class="cancel-btn" :disabled="loading"> |
| | | <el-button |
| | | type="text" |
| | | size="small" |
| | | @click="(e) => { |
| | | e.stopPropagation(); |
| | | e.preventDefault(); |
| | | showDetailBox = false; |
| | | }" |
| | | class="cancel-btn" |
| | | :disabled="loading" |
| | | > |
| | | åæ¶ |
| | | </el-button> |
| | | </div> |
| | |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, reactive, onMounted, nextTick } from 'vue'; |
| | | import { ref, reactive, onMounted, nextTick, watch } from 'vue'; |
| | | import { ElMessage } from 'element-plus'; |
| | | import { Search, Check } from '@element-plus/icons-vue'; |
| | | |
| | | import VolBox from "@/components/basic/VolBox.vue"; |
| | | import http from '@/api/http'; |
| | |
| | | // ååºå¼æ°æ® |
| | | const showDetailBox = ref(false); |
| | | const orderForm = reactive({ |
| | | outboundOrderId: "", |
| | | purchaseOrderId: "" |
| | | outboundOrderNo: "", |
| | | purchaseOrderNo: "" |
| | | }); |
| | | const formData = reactive({ |
| | | barcode: "", |
| | | }); |
| | | const scannedBarcodes = ref([]); |
| | | const outboundOrders = ref([]); |
| | | const purchaseOrders = ref([]); |
| | | const filteredOutboundOrders = ref([]); |
| | | const filteredPurchaseOrders = ref([]); |
| | | const loading = ref(false); |
| | | // æ°å¢ï¼åå¨é¦æ¬¡æ«æçéè´åå·ï¼ç¨äºä¸è´æ§æ ¡éªï¼ |
| | | const firstPurchaseOrderNo = ref(null); |
| | | |
| | | // 模æ¿å¼ç¨ |
| | | const formRef = ref(null); |
| | | const barcodeInputRef = ref(null); |
| | | const outboundSelectRef = ref(null); // æ°å¢ï¼åºåºåselectçref |
| | | const purchaseSelectRef = ref(null); // æ°å¢ï¼éè´åselectçref |
| | | const outboundInputRef = ref(null); |
| | | const purchaseInputRef = ref(null); |
| | | |
| | | // ç¨äºé²æ¢è¾å
¥äºä»¶åchangeäºä»¶å²çªçé |
| | | const isProcessingScan = ref(false); |
| | | |
| | | // ç»ä»¶æè½½æ¶åå§åè¿æ»¤åçå表 |
| | | // ç»ä»¶æè½½æ¶èç¦å°åºåºåè¾å
¥æ¡ |
| | | onMounted(() => { |
| | | filteredOutboundOrders.value = [...outboundOrders.value]; |
| | | filteredPurchaseOrders.value = [...purchaseOrders.value]; |
| | | nextTick(() => { |
| | | outboundInputRef.value?.focus(); |
| | | }); |
| | | }); |
| | | |
| | | // ç嬿«æå表ï¼è¥ä¸ºç©ºåéç½®é¦æ¬¡éè´åå· |
| | | watch(scannedBarcodes, (newVal) => { |
| | | if (newVal.length === 0) { |
| | | firstPurchaseOrderNo.value = null; |
| | | orderForm.purchaseOrderNo = ""; // 忥æ¸
空éè´åè¾å
¥æ¡ |
| | | } |
| | | }, { deep: true }); |
| | | |
| | | // ç®å鲿彿°ï¼æ éä¾èµlodashï¼ |
| | | const debounce = (fn, delay = 100) => { |
| | | let timer = null; |
| | | return (...args) => { |
| | | if (timer) clearTimeout(timer); |
| | | timer = setTimeout(() => { |
| | | fn.apply(this, args); |
| | | }, delay); |
| | | }; |
| | | }; |
| | | |
| | | // æå¼å¼¹çª |
| | | const open = () => { |
| | | showDetailBox.value = true; |
| | | scannedBarcodes.value = []; |
| | | formData.barcode = ""; |
| | | orderForm.outboundOrderId = ""; |
| | | orderForm.purchaseOrderId = ""; |
| | | orderForm.outboundOrderNo = ""; |
| | | orderForm.purchaseOrderNo = ""; |
| | | // éç½®é¦æ¬¡éè´åå· |
| | | firstPurchaseOrderNo.value = null; |
| | | nextTick(() => { |
| | | barcodeInputRef.value?.focus(); |
| | | outboundInputRef.value?.focus(); |
| | | }); |
| | | }; |
| | | |
| | | // å è½½åºåºåæ®å表 |
| | | const loadOutboundOrders = async () => { |
| | | if (outboundOrders.value.length > 0) return; |
| | | try { |
| | | loading.value = true; |
| | | const res = await http.get("/api/OutboundPicking/GetAvailablePickingOrders"); |
| | | |
| | | if (res.code === 0) { |
| | | outboundOrders.value = res.data.map(orderNo => ({ |
| | | id: orderNo, |
| | | orderNo: orderNo |
| | | })); |
| | | filteredOutboundOrders.value = [...outboundOrders.value]; |
| | | } else { |
| | | ElMessage.error("å è½½åºåºåæ®å¤±è´¥ï¼" + (res.message || 'æªç¥é误')); |
| | | } |
| | | } catch (error) { |
| | | ElMessage.error("å è½½åºåºåæ®å¼å¸¸ï¼" + error.message); |
| | | } finally { |
| | | loading.value = false; |
| | | // åºåºåè¾å
¥å¤çï¼æ«ç ææå¨è¾å
¥ï¼ |
| | | const handleOutboundInput = (value) => { |
| | | if (value && value.trim()) { |
| | | // åºåºåå·æ ¼å¼éªè¯é»è¾ï¼æéä¿çï¼ |
| | | } |
| | | }; |
| | | |
| | | // å è½½éè´åæ®å表 |
| | | const loadPurchaseOrders = async () => { |
| | | if (purchaseOrders.value.length > 0) return; |
| | | try { |
| | | loading.value = true; |
| | | const res = await http.get("/api/OutboundPicking/GetAvailablePurchaseOrders"); |
| | | |
| | | if (res.status === true) { |
| | | purchaseOrders.value = res.data.map(orderNo => ({ |
| | | id: orderNo, |
| | | orderNo: orderNo |
| | | })); |
| | | filteredPurchaseOrders.value = [...purchaseOrders.value]; |
| | | } else { |
| | | ElMessage.error("å è½½éè´åæ®å¤±è´¥ï¼" + (res.message || 'æªç¥é误')); |
| | | } |
| | | } catch (error) { |
| | | ElMessage.error("å è½½éè´åæ®å¼å¸¸ï¼" + error.message); |
| | | } finally { |
| | | loading.value = false; |
| | | // éè´åè¾å
¥å¤çï¼æ«ç ææå¨è¾å
¥ï¼ |
| | | const handlePurchaseInput = (value) => { |
| | | if (value && value.trim()) { |
| | | // éè´åå·æ ¼å¼éªè¯é»è¾ï¼æéä¿çï¼ |
| | | } |
| | | }; |
| | | |
| | | // åºåºåæ®è¿æ»¤æ¹æ³ |
| | | const filterOutboundOrders = (value) => { |
| | | if (!value) { |
| | | filteredOutboundOrders.value = [...outboundOrders.value]; |
| | | } else { |
| | | const lowerValue = value.toLowerCase(); |
| | | filteredOutboundOrders.value = outboundOrders.value.filter(order => |
| | | order.orderNo.toLowerCase().includes(lowerValue) |
| | | ); |
| | | } |
| | | }; |
| | | |
| | | // éè´åæ®è¿æ»¤æ¹æ³ |
| | | const filterPurchaseOrders = (value) => { |
| | | if (!value) { |
| | | filteredPurchaseOrders.value = [...purchaseOrders.value]; |
| | | } else { |
| | | const lowerValue = value.toLowerCase(); |
| | | filteredPurchaseOrders.value = purchaseOrders.value.filter(order => |
| | | order.orderNo.toLowerCase().includes(lowerValue) |
| | | ); |
| | | } |
| | | }; |
| | | |
| | | // åºåºåæ®ä¸ææ¡æ¾ç¤º/éèæ¶è§¦å |
| | | const handleOutboundVisibleChange = (visible) => { |
| | | if (visible) { |
| | | loadOutboundOrders(); |
| | | } else { |
| | | // å½ä¸ææ¡å
³éæ¶ï¼å¦ææ¯æ«ææä½å¯¼è´çï¼æ¸
空è¾å
¥æ¡ |
| | | if (isProcessingScan.value) { |
| | | nextTick(() => { |
| | | outboundSelectRef.value?.clearInput(); |
| | | isProcessingScan.value = false; |
| | | }); |
| | | } |
| | | } |
| | | }; |
| | | |
| | | // éè´åæ®ä¸ææ¡æ¾ç¤º/éèæ¶è§¦å |
| | | const handlePurchaseVisibleChange = (visible) => { |
| | | if (visible) { |
| | | loadPurchaseOrders(); |
| | | } else { |
| | | // å½ä¸ææ¡å
³éæ¶ï¼å¦ææ¯æ«ææä½å¯¼è´çï¼æ¸
空è¾å
¥æ¡ |
| | | if (isProcessingScan.value) { |
| | | nextTick(() => { |
| | | purchaseSelectRef.value?.clearInput(); |
| | | isProcessingScan.value = false; |
| | | }); |
| | | } |
| | | } |
| | | }; |
| | | |
| | | // 忮鿩ååæ¶è§¦å |
| | | const handleOrderChange = () => { |
| | | // å¦ææ¯æå¨éæ©ï¼å䏿¸
空è¾å
¥æ¡ |
| | | isProcessingScan.value = false; |
| | | |
| | | scannedBarcodes.value = []; |
| | | nextTick(() => { |
| | | // ç´æ¥è·³è½¬å°æ¡ç è¾å
¥æ¡ï¼æ éå
å¡«éè´åï¼ |
| | | const focusBarcodeInputDirectly = () => { |
| | | if (orderForm.outboundOrderNo.trim()) { |
| | | barcodeInputRef.value?.focus(); |
| | | }); |
| | | }; |
| | | |
| | | /** |
| | | * å¤çåºåºåæ«æè¾å
¥ |
| | | * @param {string} scanText - æ«ææªè¾å
¥çææ¬ |
| | | */ |
| | | const handleOutboundScanInput = async (scanText) => { |
| | | // é¿å
å¤ç空å符串æç±changeäºä»¶è§¦åçå
é¨æä½ |
| | | if (!scanText || isProcessingScan.value) return; |
| | | |
| | | // æ¥æ¾å®å
¨å¹é
ç订å |
| | | const matchedOrder = outboundOrders.value.find(order => order.orderNo === scanText); |
| | | |
| | | if (matchedOrder) { |
| | | isProcessingScan.value = true; // æ 记为æ£å¨å¤çæ«æ |
| | | // æå¨èµå¼ |
| | | orderForm.outboundOrderId = matchedOrder.id; |
| | | ElMessage.success(`æåéæ©åºåºåï¼${matchedOrder.orderNo}`); |
| | | |
| | | // å»¶è¿èç¦å°ä¸ä¸ä¸ªè¾å
¥æ¡ï¼ç¡®ä¿èµå¼å®æ |
| | | setTimeout(() => { |
| | | purchaseSelectRef.value?.focus(); |
| | | }, 100); |
| | | } |
| | | // å¦ææ²¡æå¹é
项ï¼ä¸åä»»ä½äºï¼è®©el-selectä¿æè¿æ»¤ç¶æï¼ç¨æ·å¯ä»¥æå¨éæ© |
| | | }; |
| | | |
| | | /** |
| | | * å¤çéè´åæ«æè¾å
¥ |
| | | * @param {string} scanText - æ«ææªè¾å
¥çææ¬ |
| | | */ |
| | | const handlePurchaseScanInput = async (scanText) => { |
| | | if (!scanText || isProcessingScan.value) return; |
| | | |
| | | const matchedOrder = purchaseOrders.value.find(order => order.orderNo === scanText); |
| | | |
| | | if (matchedOrder) { |
| | | isProcessingScan.value = true; // æ 记为æ£å¨å¤çæ«æ |
| | | orderForm.purchaseOrderId = matchedOrder.id; |
| | | ElMessage.success(`æåéæ©éè´åï¼${matchedOrder.orderNo}`); |
| | | |
| | | setTimeout(() => { |
| | | barcodeInputRef.value?.focus(); |
| | | }, 100); |
| | | } else { |
| | | ElMessage.warning("请å
è¾å
¥ææçåºåºåæ®å·"); |
| | | } |
| | | }; |
| | | |
| | | /** |
| | | * æ ¹æ®æ¡ç æ¥è¯¢éè´åæ¥å£ï¼å®å
¨å¯¹é½ç¤ºä¾è¯·æ±æ ¼å¼ï¼ |
| | | * @param {string} barcode æ¡ç |
| | | * @returns {Promise<string>} éè´åå· |
| | | */ |
| | | const getPurchaseOrderByBarcode = async (barcode) => { |
| | | // å®å
¨æç
§ç¤ºä¾æ ¼å¼ï¼urlæ¼æ¥åæ° + 第äºä¸ªåæ°ä¼ æç¤ºææ¬ |
| | | const res = await http.post(`/api/OutboundPicking/GetPurchaseOrderByBarcode?barCode=${encodeURIComponent(barcode)}`, "æ¥è¯¢éè´åä¸..."); |
| | | |
| | | // æ«ææ¡ç å¤ç |
| | | if (res.status !== true) { |
| | | throw new Error(res.message || "æ¥è¯¢éè´å失败"); |
| | | } |
| | | if (!res.data?.purchaseOrderNo) { |
| | | throw new Error("æªæ¥è¯¢å°è¯¥æ¡ç 对åºçéè´å"); |
| | | } |
| | | return res.data.purchaseOrderNo; |
| | | }; |
| | | |
| | | // æ«ææ¡ç æ ¸å¿é»è¾ |
| | | const handleScan = async () => { |
| | | if (!formRef.value) return; |
| | | // éªè¯æ¡ç å¿
å¡« |
| | | await formRef.value.validateField('barcode'); |
| | | |
| | | const barcode = formData.barcode.trim(); |
| | | |
| | | const outboundOrderNo = orderForm.outboundOrderNo.trim(); |
| | | |
| | | // æ£æ¥æ¡ç æ¯å¦å·²æ«æ |
| | | if (scannedBarcodes.value.some(item => item.barcode === barcode)) { |
| | | ElMessage.warning(`æ¡ç ${barcode} å·²æ«æè¿ï¼è¯·å¿é夿«æ`); |
| | | formData.barcode = ""; |
| | |
| | | |
| | | try { |
| | | loading.value = true; |
| | | const res = await http.post("/api/OutboundPicking/BarcodeValidate", { |
| | | outOder: orderForm.outboundOrderId, |
| | | inOder: orderForm.purchaseOrderId, |
| | | |
| | | // æ¥éª¤1ï¼ä»
ä¼ æ¡ç æ¥è¯¢éè´åï¼ä½¿ç¨ç¤ºä¾æ ¼å¼ç请æ±ï¼ |
| | | const purchaseOrderNo = await getPurchaseOrderByBarcode(barcode); |
| | | |
| | | // æ ¸å¿æ ¡éªï¼éè´åä¸è´æ§æ£æ¥ |
| | | if (firstPurchaseOrderNo.value) { |
| | | // é馿¬¡æ«æï¼æ ¡éªéè´åå·æ¯å¦ä¸è´ |
| | | if (purchaseOrderNo !== firstPurchaseOrderNo.value) { |
| | | throw new Error(`å½åæ¡ç 对åºçéè´åã${purchaseOrderNo}ãä¸é¦æ¬¡æ«æçéè´åã${firstPurchaseOrderNo.value}ãä¸ä¸è´ï¼ç¦æ¢æ«æï¼`); |
| | | } |
| | | } else { |
| | | // 馿¬¡æ«æï¼è®°å½éè´åå· |
| | | firstPurchaseOrderNo.value = purchaseOrderNo; |
| | | } |
| | | |
| | | // èµå¼éè´åå°è¾å
¥æ¡ |
| | | orderForm.purchaseOrderNo = purchaseOrderNo; |
| | | ElMessage.success(`æåæ¥è¯¢å°éè´åï¼${purchaseOrderNo}`); |
| | | |
| | | // æ¥éª¤2ï¼è°ç¨åææ¡ç éªè¯æ¥å£ï¼å¦é坹齿 ¼å¼å¯åæ¥ä¿®æ¹ï¼æ¤å¤ä¿çåææ ¼å¼ï¼ |
| | | const validateRes = await http.post("/api/OutboundPicking/BarcodeValidate", { |
| | | outOder: outboundOrderNo, |
| | | inOder: purchaseOrderNo, |
| | | barCode: barcode |
| | | }); |
| | | |
| | | if (res.status === true) { |
| | | if (validateRes.status === true) { |
| | | scannedBarcodes.value.push({ barcode }); |
| | | ElMessage.success("æ«ææå"); |
| | | formData.barcode = ""; |
| | | } else { |
| | | ElMessage.error("æ«æå¤±è´¥ï¼" + (res.message || 'éªè¯å¤±è´¥')); |
| | | ElMessage.error("æ«æå¤±è´¥ï¼" + (validateRes.message || 'æ¡ç éªè¯å¤±è´¥')); |
| | | } |
| | | } catch (error) { |
| | | ElMessage.error("æ«æéªè¯å¼å¸¸ï¼" + error.message); |
| | | // æè·éè´åä¸ä¸è´çé误并æç¤º |
| | | ElMessage.error(error.message); |
| | | // æ¸
空å½åè¾å
¥æ¡ï¼èç¦æ¡ç è¾å
¥æ¡ |
| | | formData.barcode = ""; |
| | | nextTick(() => barcodeInputRef.value?.focus()); |
| | | } finally { |
| | | loading.value = false; |
| | | nextTick(() => barcodeInputRef.value?.focus()); |
| | | // 强å¶èç¦æ¡ç è¾å
¥æ¡ï¼é¿å
ç¦ç¹è·³å°å¼¹çªå¤ |
| | | nextTick(() => { |
| | | if (barcodeInputRef.value) { |
| | | barcodeInputRef.value.focus(); |
| | | // æ¸
空è¾å
¥æ¡éä¸ç¶æï¼æ«ç æªå¯è½æ®çéä¸ï¼ |
| | | if (barcodeInputRef.value.input) { |
| | | barcodeInputRef.value.input.select = () => {}; |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | }; |
| | | |
| | | // 另鲿åäºä»¶æ¦æªçæ«æå¤çï¼éé
æ«ç æªï¼ |
| | | const debouncedHandleScan = debounce(async (e) => { |
| | | // 黿¢äºä»¶å泡åé»è®¤è¡ä¸º |
| | | e.stopPropagation(); |
| | | e.preventDefault(); |
| | | await handleScan(); |
| | | }, 100); |
| | | |
| | | // ç§»é¤åæ¡æ«æè®°å½ |
| | | const removeItem = async (index, barcode) => { |
| | | try { |
| | | loading.value = true; |
| | | const res = await http.post("/api/OutboundPicking/DeleteBarcode", { |
| | | outOder: orderForm.outboundOrderId, |
| | | inOder: orderForm.purchaseOrderId, |
| | | outOder: orderForm.outboundOrderNo, |
| | | inOder: orderForm.purchaseOrderNo, |
| | | barCode: barcode |
| | | }); |
| | | |
| | | if (res.status === true) { |
| | | scannedBarcodes.value.splice(index, 1); |
| | | ElMessage.success("å 餿å"); |
| | | // è¥å é¤åæ æ¡ç ï¼èªå¨éç½®é¦æ¬¡éè´åå·åéè´åè¾å
¥æ¡ |
| | | if (scannedBarcodes.value.length === 0) { |
| | | firstPurchaseOrderNo.value = null; |
| | | orderForm.purchaseOrderNo = ""; |
| | | } |
| | | } else { |
| | | ElMessage.error("å é¤å¤±è´¥ï¼" + (res.message || 'å é¤å¤±è´¥')); |
| | | } |
| | |
| | | try { |
| | | loading.value = true; |
| | | const res = await http.post("/api/OutboundPicking/NoStockOutSubmit", { |
| | | OutOderSubmit: orderForm.outboundOrderId, |
| | | InOderSubmit: orderForm.purchaseOrderId, |
| | | OutOderSubmit: orderForm.outboundOrderNo, |
| | | InOderSubmit: orderForm.purchaseOrderNo, |
| | | BarCodeSubmit: barcodes |
| | | }); |
| | | |
| | | if (res.status === true) { |
| | | ElMessage.success("åºåºæäº¤æå"); |
| | | showDetailBox.value = false; |
| | | // æäº¤æååéç½®ç¶æ |
| | | firstPurchaseOrderNo.value = null; |
| | | scannedBarcodes.value = []; |
| | | } else { |
| | | ElMessage.error("åºåºæäº¤å¤±è´¥ï¼" + (res.message || 'æäº¤å¤±è´¥')); |
| | | } |