647556386
2026-01-09 7354151f37391cc27462bc9d787c79f624f6e50e
ÏîÄ¿´úÂë/WIDESEA_WMSClient/src/extension/inbound/extend/TakeStockSelect.vue
@@ -12,44 +12,46 @@
      <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>
@@ -57,15 +59,15 @@
              </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>
@@ -78,23 +80,26 @@
    <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);
@@ -106,6 +111,8 @@
const selectedItem = ref(null);
// åŠ è½½çŠ¶æ€
const loading = ref(false);
// å£°æ˜Žæ‰“印组件的ref引用(关键:替代this.$refs.printView)
const printViewRef = ref(null);
// æ‰“开弹窗方法(供父组件调用)
const open = (row, data) => {
@@ -126,55 +133,83 @@
  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;
  }
@@ -182,11 +217,12 @@
// æš´éœ²æ–¹æ³•给父组件
defineExpose({
  open
  open,
});
</script>
<style scoped>
/* æ ·å¼éƒ¨åˆ†ä¸å˜ï¼Œçœç•¥é‡å¤ä»£ç  */
.reconciliation-container {
  padding: 10px 0;
}
@@ -219,7 +255,7 @@
}
.selected-order {
  color: #409EFF;
  color: #409eff;
  font-weight: 600;
}
@@ -244,7 +280,7 @@
}
.data-item.selected {
  border-color: #409EFF;
  border-color: #409eff;
  background-color: #f0f7ff;
}