| | |
| | | <div class="order-info"> |
| | | <div class="info-row"> |
| | | <span class="label">åæ®IDï¼</span> |
| | | <span class="value">{{ currentRow.id || '-' }}</span> |
| | | <span class="value">{{ currentRow.id || "-" }}</span> |
| | | </div> |
| | | <div class="info-row" v-if="selectedItem"> |
| | | <span class="label">å·²é订åï¼</span> |
| | | <span class="value selected-order">{{ selectedItem.orderId }}</span> |
| | | <span class="value selected-order">{{ selectedItem.id }}</span> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- æ°æ®å表å±ç¤º --> |
| | | <el-scrollbar height="400px" class="custom-scrollbar"> |
| | | <transition-group name="data-item-transition"> |
| | | <div class="data-item" v-for="(item, index) in displayData" :key="`${item.orderId}-${index}`"> |
| | | <div |
| | | class="data-item" |
| | | v-for="(item, index) in displayData" |
| | | :key="`${item.orderId}-${index}`" |
| | | > |
| | | <div class="radio-container"> |
| | | <el-radio |
| | | v-model="selectedItem" |
| | | <el-radio |
| | | v-model="selectedItem" |
| | | :label="item" |
| | | :value="item" |
| | | @change="handleRadioChange(item)" |
| | | > |
| | | <!-- åéæé®çå
容ç空ï¼åªæ¾ç¤ºåéæé® --> |
| | | </el-radio> |
| | | ></el-radio> |
| | | </div> |
| | | <div class="data-detail"> |
| | | <div class="detail-row"> |
| | | <span class="label">订åIDï¼</span> |
| | | <span class="value">{{ item.orderId || '-' }}</span> |
| | | <span class="value">{{ item.id || "-" }}</span> |
| | | </div> |
| | | <div class="detail-row"> |
| | | <span class="label">ç©æç¼ç ï¼</span> |
| | | <span class="value">{{ item.materielCode || '-' }}</span> |
| | | <span class="value">{{ item.materielCode || "-" }}</span> |
| | | </div> |
| | | <div class="detail-row"> |
| | | <span class="label">ç©æåç§°ï¼</span> |
| | | <span class="value">{{ item.materielName || '-' }}</span> |
| | | <span class="value">{{ item.materielName || "-" }}</span> |
| | | </div> |
| | | <div class="detail-row"> |
| | | <span class="label">æ¹æ¬¡å·ï¼</span> |
| | | <span class="value">{{ item.batchNo || '-' }}</span> |
| | | <span class="value">{{ item.batchNo || "-" }}</span> |
| | | </div> |
| | | <div class="detail-row"> |
| | | <span class="label">è®¢åæ°éï¼</span> |
| | |
| | | </div> |
| | | <div class="detail-row"> |
| | | <span class="label">åä½ï¼</span> |
| | | <span class="value">{{ item.unit || '-' }}</span> |
| | | <span class="value">{{ item.unit || "-" }}</span> |
| | | </div> |
| | | <div class="detail-row"> |
| | | <span class="label">ä¾åºåç¼ç ï¼</span> |
| | | <span class="value">{{ item.supplyCode || '-' }}</span> |
| | | <span class="value">{{ item.supplyCode || "-" }}</span> |
| | | </div> |
| | | <div class="detail-row"> |
| | | <span class="label">ä»åºç¼ç ï¼</span> |
| | | <span class="value">{{ item.warehouseCode || '-' }}</span> |
| | | <span class="value">{{ item.warehouseCode || "-" }}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | |
| | | <template #footer> |
| | | <el-button @click="dialogVisible = false">å
³é</el-button> |
| | | <el-button |
| | | type="primary" |
| | | <el-button |
| | | type="primary" |
| | | @click="handleConfirm" |
| | | :disabled="!selectedItem" |
| | | :loading="loading" |
| | | > |
| | | {{ loading ? '平账ä¸...' : '确认平账' }} |
| | | {{ loading ? "平账ä¸..." : "确认平账" }} |
| | | </el-button> |
| | | </template> |
| | | </el-dialog> |
| | | |
| | | <!-- æå°ç»ä»¶ï¼å¿
须卿¨¡æ¿ä¸å£°æï¼æè½éè¿refè·åï¼ --> |
| | | <printView ref="printViewRef" @parentcall="parentcall"></printView> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref } from 'vue'; |
| | | import { ElMessage, ElMessageBox } from 'element-plus'; |
| | | // æ ¹æ®æ¨çå®é
项ç®å¼å
¥è¯·æ±æ¹æ³ï¼è¿é使ç¨axiosä½ä¸ºç¤ºä¾ |
| | | import axios from 'axios'; |
| | | import { ref } from "vue"; |
| | | import printView from "@/extension/outbound/extend/printView.vue"; |
| | | import { ElMessage, ElMessageBox } from "element-plus"; |
| | | import axios from "axios"; |
| | | |
| | | // å¼¹çªæ¾ç¤ºç¶æ |
| | | const dialogVisible = ref(false); |
| | |
| | | const selectedItem = ref(null); |
| | | // å è½½ç¶æ |
| | | const loading = ref(false); |
| | | // 声ææå°ç»ä»¶çrefå¼ç¨ï¼å
³é®ï¼æ¿ä»£this.$refs.printViewï¼ |
| | | const printViewRef = ref(null); |
| | | |
| | | // æå¼å¼¹çªæ¹æ³ï¼ä¾ç¶ç»ä»¶è°ç¨ï¼ |
| | | const open = (row, data) => { |
| | |
| | | loading.value = false; |
| | | }; |
| | | |
| | | // ç¶ç»ä»¶è°ç¨çåè°ï¼å¦æprintViewéè¦ï¼ |
| | | const parentcall = (params) => { |
| | | console.log("printViewåè°åæ°ï¼", params); |
| | | }; |
| | | |
| | | // 确认平账æä½ |
| | | const handleConfirm = async () => { |
| | | if (!selectedItem.value) { |
| | | ElMessage.warning('è¯·éæ©ä¸æ¡æ°æ®è¿è¡å¹³è´¦å¤ç'); |
| | | ElMessage.warning("è¯·éæ©ä¸æ¡æ°æ®è¿è¡å¹³è´¦å¤ç"); |
| | | return; |
| | | } |
| | | |
| | | try { |
| | | // 确认æç¤º |
| | | await ElMessageBox.confirm( |
| | | `ç¡®å®è¦å¯¹è®¢å ${selectedItem.value.orderId} è¿è¡å¹³è´¦å¤çåï¼`, |
| | | '平账确认', |
| | | `ç¡®å®è¦å¯¹è®¢å ${selectedItem.value.id} è¿è¡å¹³è´¦å¤çåï¼`, |
| | | "平账确认", |
| | | { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning', |
| | | confirmButtonText: "ç¡®å®", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning", |
| | | } |
| | | ); |
| | | |
| | | loading.value = true; |
| | | |
| | | |
| | | // è°ç¨å¹³è´¦æ¥å£ |
| | | const params = { |
| | | id: currentRow.value.id, // è¡ID |
| | | orderId: selectedItem.value.orderId // éæ©çåæ®orderId |
| | | orderId: selectedItem.value.id, // éæ©çåæ®orderId |
| | | }; |
| | | |
| | | // æ ¹æ®æ¨çæ¥å£å®é
æ
åµè°æ´è¯·æ±æ¹å¼ |
| | | const response = await axios.get('/api/TakeStockOrder/DocumentReconciliation', { |
| | | params: params // GET请æ±ä¼ å |
| | | // 妿æ¯POST请æ±ï¼å¯ä»¥è¿æ ·åï¼ |
| | | // data: params |
| | | }); |
| | | const response = await axios.get( |
| | | "/api/TakeStockOrder/DocumentReconciliation", |
| | | { |
| | | params: params, |
| | | } |
| | | ); |
| | | |
| | | if (response.status) { |
| | | ElMessage.success('平账æä½æå'); |
| | | dialogVisible.value = false; |
| | | console.log("æ¥å£å®æ´è¿åå¼ï¼", response); // è°è¯ç¨ï¼æå°å®æ´è¿å |
| | | |
| | | // ç¬¬ä¸æ¥ï¼æ ¡éªæå¤å±ç¶æ |
| | | if (response.data?.status) { |
| | | ElMessage.success("平账æä½æå"); |
| | | |
| | | // å¯ä»¥éè¿emitéç¥ç¶ç»ä»¶å·æ°è¡¨æ ¼ |
| | | // emit('refresh-table'); |
| | | // ç¬¬äºæ¥ï¼è§£ææ£ç¡®çscannedDetailå±çº§ï¼ä¸å±dataï¼ |
| | | const thirdLayerData = response.data.data?.data; // å
³é®ä¿®å¤ï¼å第ä¸å±data |
| | | const scannedDetail = thirdLayerData?.scannedDetail; |
| | | |
| | | console.log("è§£æåçscannedDetailï¼", scannedDetail); // è°è¯ç¨ï¼æå°ç®æ æ°æ® |
| | | |
| | | // ç¬¬ä¸æ¥ï¼å¤ææå°æ¡ä»¶ |
| | | if (scannedDetail?.isUnpacked && scannedDetail?.materialCodes?.length > 0) { |
| | | // ç¡®ä¿æå°ç»ä»¶å®ä¾åå¨ |
| | | if (printViewRef.value) { |
| | | console.log("触åæå°æ¹æ³ï¼åæ°ï¼", scannedDetail.materialCodes); |
| | | printViewRef.value.open(scannedDetail.materialCodes); |
| | | } else { |
| | | ElMessage.warning("æå°ç»ä»¶æªå è½½å®æï¼è¯·æ£æ¥ç»ä»¶å¼ç¨"); |
| | | } |
| | | } else { |
| | | ElMessage.info("æ éæå°ï¼æªæ»¡è¶³æå
æ¡ä»¶ææ ç©æç¼ç æ°æ®"); |
| | | } |
| | | |
| | | dialogVisible.value = false; |
| | | } else { |
| | | ElMessage.error(response.data?.message || "平账æä½å¤±è´¥"); |
| | | } |
| | | } catch (error) { |
| | | // 妿æ¯ç¨æ·åæ¶æä½ï¼ä¸æ¾ç¤ºéè¯¯ä¿¡æ¯ |
| | | if (error === 'cancel' || error === 'close') { |
| | | // å®åé误å¤çï¼åºåç¨æ·åæ¶åçå®é误 |
| | | if (error === "cancel" || error === "close") { |
| | | ElMessage.info("å·²åæ¶å¹³è´¦æä½"); |
| | | return; |
| | | } |
| | | |
| | | ElMessage.error('平账æä½å¤±è´¥ï¼è¯·ç¨åéè¯'); |
| | | // æå°é误æ¥å¿ï¼æ¹ä¾¿ææ¥ |
| | | console.error("平账æ¥å£è°ç¨å¤±è´¥ï¼", error); |
| | | ElMessage.error(`平账æä½å¤±è´¥ï¼${error.message || "ç½ç»å¼å¸¸"}`); |
| | | } finally { |
| | | loading.value = false; |
| | | } |
| | |
| | | |
| | | // æ´é²æ¹æ³ç»ç¶ç»ä»¶ |
| | | defineExpose({ |
| | | open |
| | | open, |
| | | }); |
| | | </script> |
| | | |
| | | <style scoped> |
| | | /* æ ·å¼é¨åä¸åï¼çç¥éå¤ä»£ç */ |
| | | .reconciliation-container { |
| | | padding: 10px 0; |
| | | } |
| | |
| | | } |
| | | |
| | | .selected-order { |
| | | color: #409EFF; |
| | | color: #409eff; |
| | | font-weight: 600; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | .data-item.selected { |
| | | border-color: #409EFF; |
| | | border-color: #409eff; |
| | | background-color: #f0f7ff; |
| | | } |
| | | |