| | |
| | | import http from '@/api/http.js'; |
| | | import VolBox from '@/components/basic/VolBox.vue'; |
| | | |
| | | // 鲿彿°ä¿æä¸å |
| | | // 鲿彿° |
| | | function debounce(func, wait) { |
| | | let timeout; |
| | | return function () { |
| | |
| | | isSubmitting: false, |
| | | palletGroupedBarcodes: {}, |
| | | |
| | | // é³é¢é
ç½® |
| | | audioConfig: { |
| | | successPath: '/assets/audio/success.mp3', // å¯¹åº public ä¸çè·¯å¾ |
| | | errorPath: '/assets/audio/error.mp3' |
| | | }, |
| | | // ç¼åé³é¢å®ä¾ï¼é¿å
éå¤å建 |
| | | successAudio: null, |
| | | errorAudio: null, |
| | | |
| | | totalStockSum: 0, |
| | | totalStockCount: 0, |
| | | uniqueUnit: '', |
| | |
| | | trigger: 'change' |
| | | } |
| | | ] |
| | | } |
| | | }, |
| | | |
| | | // æ°å¢ï¼é®çäºä»¶ç嬿 è®° |
| | | keyPressListenerAdded: false, |
| | | isDialogClosing: false |
| | | } |
| | | }, |
| | | |
| | |
| | | }, |
| | | |
| | | watch: { |
| | | // çå¬showåéåå |
| | | show(newVal) { |
| | | if (newVal === true) { |
| | | console.log('å¼¹æ¡æå¼ï¼éç½®æ°æ®'); |
| | | this.isDialogClosing = false; |
| | | this.resetData(); |
| | | this.$nextTick(() => { |
| | | setTimeout(() => { |
| | | this.fetchUnpalletMaterialDetails(); |
| | | this.addKeyPressListener(); // æ·»å é®çäºä»¶çå¬ |
| | | }, 300); |
| | | }); |
| | | } else if (newVal === false && !this.isDialogClosing) { |
| | | console.log('å¼¹æ¡å
³éï¼ç§»é¤äºä»¶çå¬'); |
| | | this.isDialogClosing = true; |
| | | this.removeKeyPressListener(); // ç§»é¤é®çäºä»¶çå¬ |
| | | this.resetData(); |
| | | } |
| | | }, |
| | | |
| | | visible(newVal, oldVal) { |
| | | this.palletVisible = newVal; |
| | | |
| | |
| | | }, |
| | | |
| | | mounted() { |
| | | document.addEventListener('keypress', this.handleKeyPress); |
| | | // ä¸å¨mountedæ¶æ·»å çå¬ï¼å¨å¼¹çªæå¼æ¶æ·»å |
| | | }, |
| | | |
| | | beforeDestroy() { |
| | | document.removeEventListener('keypress', this.handleKeyPress); |
| | | // ç¡®ä¿ç»ä»¶éæ¯æ¶ç§»é¤çå¬ |
| | | this.removeKeyPressListener(); |
| | | this.clearAllTimers(); |
| | | |
| | | this.removeKeyPressListener(); |
| | | this.clearAllTimers(); |
| | | |
| | | //鿝é³é¢å®ä¾ |
| | | this.successAudio = null; |
| | | this.errorAudio = null; |
| | | }, |
| | | |
| | | methods: { |
| | | |
| | | /** |
| | | * åå§åé³é¢å®ä¾ï¼æå è½½ï¼åªåå»ºä¸æ¬¡ï¼ |
| | | * @param {String} type - é³é¢ç±»åï¼success/error |
| | | * @returns {Audio} é³é¢å®ä¾ |
| | | */ |
| | | initAudioInstance(type) { |
| | | if (type === 'success' && this.successAudio) { |
| | | return this.successAudio; |
| | | } |
| | | if (type === 'error' && this.errorAudio) { |
| | | return this.errorAudio; |
| | | } |
| | | |
| | | const audioPath = type === 'success' |
| | | ? this.audioConfig.successPath |
| | | : this.audioConfig.errorPath; |
| | | |
| | | const audioInstance = new Audio(audioPath); |
| | | |
| | | // ç¼åé³é¢å®ä¾ |
| | | if (type === 'success') { |
| | | this.successAudio = audioInstance; |
| | | } else { |
| | | this.errorAudio = audioInstance; |
| | | } |
| | | |
| | | // é³é¢å 载失败åè°ï¼å¯éï¼ç¨äºè°è¯ï¼ |
| | | audioInstance.onerror = (err) => { |
| | | console.error(`ã${type} é³é¢ãå 载失败`, err); |
| | | }; |
| | | |
| | | return audioInstance; |
| | | }, |
| | | |
| | | /** |
| | | * ææ¾é³é¢ |
| | | * @param {String} type - é³é¢ç±»åï¼success/error |
| | | */ |
| | | playAudio(type) { |
| | | try { |
| | | const audioInstance = this.initAudioInstance(type); |
| | | |
| | | // éç½®ææ¾è¿åº¦ï¼é¿å
éå¤ææ¾æ¶é³é¢æªç»æï¼ |
| | | audioInstance.currentTime = 0; |
| | | |
| | | // ææ¾é³é¢ï¼è¿å Promise å¤çææ¾ç»æï¼å
¼å®¹é¨åæµè§å¨éå¶ï¼ |
| | | audioInstance.play().catch((err) => { |
| | | console.warn('é³é¢ææ¾å¤±è´¥ï¼å¯è½æ¯æµè§å¨èªå¨ææ¾çç¥éå¶ï¼', err); |
| | | }); |
| | | } catch (err) { |
| | | console.error('ææ¾é³é¢æ¶åçå¼å¸¸', err); |
| | | } |
| | | }, |
| | | |
| | | /** |
| | | * ææ¾æåé³é¢ |
| | | */ |
| | | playSuccessAudio() { |
| | | this.playAudio('success'); |
| | | }, |
| | | |
| | | /** |
| | | * ææ¾å¤±è´¥é³é¢ |
| | | */ |
| | | playErrorAudio() { |
| | | this.playAudio('error'); |
| | | }, |
| | | // æ·»å é®çäºä»¶çå¬ |
| | | addKeyPressListener() { |
| | | if (!this.keyPressListenerAdded) { |
| | | document.addEventListener('keypress', this.handleKeyPress); |
| | | this.keyPressListenerAdded = true; |
| | | console.log('é®çäºä»¶çå¬å·²æ·»å '); |
| | | } |
| | | }, |
| | | |
| | | // ç§»é¤é®çäºä»¶çå¬ |
| | | removeKeyPressListener() { |
| | | if (this.keyPressListenerAdded) { |
| | | document.removeEventListener('keypress', this.handleKeyPress); |
| | | this.keyPressListenerAdded = false; |
| | | console.log('é®çäºä»¶çå¬å·²ç§»é¤'); |
| | | } |
| | | }, |
| | | |
| | | open() { |
| | | this.show = true; |
| | | this.orderNo = ""; |
| | |
| | | this.initLocationTypes(); |
| | | this.initwarehouseTypes(); |
| | | this.fetchUnpalletMaterialDetails(); |
| | | |
| | | // å¼¹çªæå¼æ¶æ·»å é®çäºä»¶çå¬ |
| | | this.$nextTick(() => { |
| | | setTimeout(() => { |
| | | this.addKeyPressListener(); |
| | | }, 100); |
| | | }); |
| | | }, |
| | | |
| | | validateLocationType(rule, value, callback) { |
| | |
| | | }, |
| | | |
| | | handleDialogClose() { |
| | | // å
ç§»é¤é®çäºä»¶çå¬ |
| | | this.removeKeyPressListener(); |
| | | this.show = false; |
| | | this.resetData(); |
| | | }, |
| | |
| | | this.error = `æ¡ç ${currentBarcode} 已被å½åæçç»çï¼è¯·å¿é夿ä½`; |
| | | this.barcode = ''; |
| | | this.focusBarcodeInput(); |
| | | this.playErrorAudio(); |
| | | return; |
| | | } |
| | | |
| | |
| | | .then(valid => { |
| | | if (!valid) { |
| | | this.isSubmitting = false; |
| | | this.playErrorAudio(); |
| | | return; |
| | | } |
| | | |
| | |
| | | this.scanCode = ''; |
| | | this.isScanning = false; |
| | | |
| | | this.playSuccessAudio(); |
| | | |
| | | setTimeout(() => { |
| | | this.focusBarcodeInput(); |
| | | }, 100); |
| | |
| | | |
| | | // å¤çæ«ç æªè¾å
¥ |
| | | handleKeyPress(event) { |
| | | // æ£æ¥å¼¹çªæ¯å¦æ¾ç¤º |
| | | if (!this.show || this.isDialogClosing) { |
| | | return; |
| | | } |
| | | |
| | | if (this.isManualInput || this.isSubmitting) { |
| | | return; |
| | | } |