1
heshaofeng
2026-03-16 569b9900086f06fbd986f69534c8d5af54c4d55b
ÏîÄ¿´úÂë/WIDESEA_WMSClient/src/views/outbound/outPicking.vue
@@ -214,6 +214,19 @@
                            <el-table-column prop="createDate" label="拣选时间" width="160" />
                            <el-table-column prop="originalBarcode" label="原物料码" width="160" />
                            <el-table-column prop="newBarcode" label="新物料码" width="160" />
                            <el-table-column label="操作" width="100" align="center">
                        <template #default="scope">
                            <el-button
                                type="danger"
                                size="small"
                                icon="el-icon-refresh-left"
                                @click="handleReversePicking(scope.row)"
                                :disabled="reverseLoading"
                            >
                                æ’¤é”€
                            </el-button>
                        </template>
                    </el-table-column>
                        </el-table>
                        <div class="table-footer">
@@ -376,7 +389,8 @@
            loadingInstance: null,
            // éŸ³é¢‘实例(缓存,避免重复创建)
            successAudio: null,
            errorAudio: null
            errorAudio: null,
            reverseLoading: false
        }
    },
    computed: {
@@ -412,7 +426,6 @@
            }
        },
        // ============== æ–°å¢žï¼šæ ¹æ®æ‰˜ç›˜å·èŽ·å–è®¢å•å·ï¼ˆæ ¸å¿ƒåŠŸèƒ½ï¼‰ ==============
        async getOrderNoByPallet(palletCode) {
            if (!palletCode) {
                this.$message.warning('托盘号不能为空');
@@ -457,7 +470,7 @@
                this.hideFullScreenLoading();
            }
        },
        // ============== æ–°å¢žç»“束 ==============
        // æ’­æ”¾æˆåŠŸéŸ³é¢‘
        playSuccessAudio() {
@@ -485,14 +498,7 @@
        initPage() {
            // ä»Žè·¯ç”±å‚数获取订单号
            this.orderNo = this.$route.query.orderNo || ''
            // ============== å¾®è°ƒï¼šæ³¨é‡Šå¼ºåˆ¶è¿”回逻辑,兼容托盘号查订单号 ==============
            // if (!this.orderNo) {
            //     this.$message.error('订单号不能为空')
            //     this.$router.back()
            //     return
            // }
            // ============== å¾®è°ƒç»“束 ==============
            // åŠ è½½è®¢å•ä¿¡æ¯
            this.loadOrderInfo()
@@ -694,6 +700,55 @@
            });
        },
        async handleReversePicking(row) {
            // 1. äºŒæ¬¡ç¡®è®¤
            try {
                await this.$confirm(
                    '确定要撤销这条拣选记录吗?撤销后库存将恢复,出库单状态也会同步更新',
                    '撤销确认',
                    {
                        type: 'warning',
                        confirmButtonText: '确认撤销',
                        cancelButtonText: '取消',
                        closeOnClickModal: false
                    }
                );
                // 2. æ‰§è¡Œæ’¤é”€
                this.reverseLoading = true;
                this.showFullScreenLoading();
                // 3. è°ƒç”¨æ’¤é”€æŽ¥å£ï¼ˆé€‚配你后端的撤销接口地址)
                const response = await this.http.post('/api/Outbound/ReversePickingWithBarcode', {
                    Barcode: row.originalBarcode || row.newBarcode, // ä¼˜å…ˆå–原条码,无则取新条码
                    OrderNo: this.orderNo,
                    PalletCode: row.palletCode || this.scanForm.palletCode,
                    Operator: this.getUserName(),
                    OrderType: this.orderInfo?.orderType || 0 // è®¢å•类型,无则传0
                });
                // 4. å¤„理结果
                if (response.status) {
                    this.$message.success('撤销拣选成功');
                    this.playSuccessAudio(); // æ’­æ”¾æˆåŠŸéŸ³é¢‘
                    // åˆ·æ–°æ•°æ®åˆ—表
                    await this.loadPalletData(false);
                } else {
                    this.$message.error(response.message || '撤销拣选失败');
                    this.playErrorAudio();
                }
            } catch (error) {
                // å–消确认不报错
                if (error !== 'cancel') {
                    this.$message.error('撤销拣选失败:' + (error.message || '网络异常'));
                    this.playErrorAudio();
                }
            } finally {
                this.reverseLoading = false;
                this.hideFullScreenLoading();
            }
        },
        handleMaterialScan() {
            if (!this.scanForm.palletCode) {
                this.$message.warning('请先扫描托盘码')