gongchunyi
2026-07-05 f383d3f8212e77a45bd6e99b0a4f8b7566f8339c
src/views/salesManagement/returnOrder/components/formDia.vue
@@ -69,6 +69,31 @@
              </el-form-item>
            </el-col>
            <el-col :span="4">
              <el-form-item label="发货类型:" prop="shippingType">
                <el-select v-model="form.shippingType" placeholder="请选择发货类型" @change="handleShippingTypeChange">
                  <el-option label="货车" :value="1" />
                  <el-option label="快递" :value="2" />
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="4" v-if="form.shippingType === 1">
              <el-form-item label="发货车牌号:" prop="truckPlateNo">
                <el-input v-model="form.truckPlateNo" placeholder="请输入发货车牌号" />
              </el-form-item>
            </el-col>
            <template v-else-if="form.shippingType === 2">
              <el-col :span="4">
                <el-form-item label="快递公司:" prop="expressCompany">
                  <el-input v-model="form.expressCompany" placeholder="请输入快递公司" />
                </el-form-item>
              </el-col>
              <el-col :span="4">
                <el-form-item label="快递单号:" prop="expressNo">
                  <el-input v-model="form.expressNo" placeholder="请输入快递单号" />
                </el-form-item>
              </el-col>
            </template>
            <el-col :span="4">
              <el-form-item label="退款总额:" prop="refundAmount">
                <el-input v-model="form.refundAmount" disabled placeholder="自动计算" />
              </el-form-item>
@@ -82,32 +107,29 @@
            <el-button type="primary" @click="openProductSelection" :disabled="!form.shippingId">添加产品</el-button>
          </div>
          <PIMTable :isShowPagination="false" rowKey="id" :column="tableColumn" :tableData="tableData">
            <template #totalReturnNum="{ row }">
              {{ calcAlreadyReturned(row) }}
            </template>
            <template #returnQuantity="{ row }">
              <el-input
                v-model="row.returnQuantity"
                style="width:100px"
                placeholder="请输入"
              <el-input
                v-model="row.returnQuantity"
                style="width:100px"
                placeholder="请输入"
                type="number"
                @input="(val) => handleReturnQuantityChange(val, row)"
              />
            </template>
            <template #price="{ row }">
              <el-input
                v-model="row.price"
                style="width:100px"
                placeholder="请输入"
              <el-input
                v-model="row.price"
                style="width:100px"
                placeholder="请输入"
                type="number"
                @input="(val) => handlePriceChange(val, row)"
              />
            </template>
            <template #amount="{ row }">
              <el-input
                v-model="row.amount"
                style="width:100px"
                placeholder="自动计算"
              <el-input
                v-model="row.amount"
                style="width:100px"
                placeholder="自动计算"
                type="number"
                disabled
              />
@@ -119,10 +141,10 @@
              </el-select>
            </template>
            <template #remark="{ row }">
              <el-input
                v-model="row.remark"
                style="width:130px"
                placeholder="请输入"
              <el-input
                v-model="row.remark"
                style="width:130px"
                placeholder="请输入"
              />
            </template>
            <template #action="{ index }">
@@ -140,9 +162,9 @@
    </el-dialog>
    <el-dialog v-model="productSelectionVisible" title="选择产品" width="70%" append-to-body>
      <el-table
        :data="availableProducts"
        style="width: 100%"
      <el-table
        :data="availableProducts"
        style="width: 100%"
        @selection-change="handleSelectionChange"
        ref="productTableRef"
        row-key="id"
@@ -154,11 +176,9 @@
        <el-table-column align="center" prop="specificationModel" label="规格型号" />
        <el-table-column align="center" prop="unit" label="单位" />
        <el-table-column align="center" prop="stockOutNum" label="总数量" />
        <el-table-column align="center" label="已退货数量" prop="totalReturnNum"></el-table-column>
        <el-table-column align="center" prop="unQuantity" label="未退货数量" />
        <el-table-column align="center" label="已退货数量">
          <template #default="{ row }">{{ calcAlreadyReturned(row) }}</template>
        </el-table-column>
        <el-table-column align="center" prop="pendingReturnNum" label="待处理退货数量" />
      </el-table>
      <template #footer>
        <div class="dialog-footer">
@@ -191,6 +211,10 @@
    returnNo: "",
    customerId: "",
    shippingId: "",
    shippingType: "",
    truckPlateNo: "",
    expressCompany: "",
    expressNo: "",
    projectId: "",
    maker: "",
    makeTime: "",
@@ -208,6 +232,7 @@
    }],
    customerId: [{ required: true, message: "请选择客户", trigger: "change" }],
    shippingId: [{ required: true, message: "请选择关联出库单号", trigger: "change" }],
    shippingType: [{ required: true, message: "请选择发货类型", trigger: "change" }],
  }
});
const { form, rules } = toRefs(data);
@@ -226,7 +251,8 @@
  {align: "center", label: "规格型号", prop: "specificationModel" },
  {align: "center", label: "单位", prop: "unit", width: 80 },
  {align: "center", label: "总数量", prop: "stockOutNum", width: 120 },
  {align: "center", label: "已退货数量", prop: "totalReturnNum", width: 120, dataType: "slot", slot: "totalReturnNum" },
  {align: "center", label: "已退货数量", prop: "totalReturnNum", width: 120 },
  {align: "center", label: "待处理退货数量", prop: "pendingReturnNum", width: 120 },
  {align: "center", label: "未退货数量", prop: "unQuantity", width: 120 },
  {align: "center", label: "退货数量", prop: "returnQuantity", dataType: "slot", slot: "returnQuantity", width: 120 },
  {align: "center", label: "退货产品单价", prop: "price", dataType: "slot", slot: "price", width: 120 },
@@ -495,6 +521,10 @@
      returnNo: "",
      customerId: "",
      shippingId: "",
      shippingType: "",
      truckPlateNo: "",
      expressCompany: "",
      expressNo: "",
      projectId: "",
      maker: "",
      makeTime: "",
@@ -541,6 +571,11 @@
    const payload = { ...form.value, returnSaleProducts };
    delete payload.returnNoCheckbox;
    if (operationType.value === "add" && form.value.returnNoCheckbox) delete payload.returnNo;
    if (payload.shippingType !== 1) payload.truckPlateNo = "";
    if (payload.shippingType !== 2) {
      payload.expressCompany = "";
      payload.expressNo = "";
    }
    if (operationType.value === "add") {
      returnManagementAdd(payload).then(() => {
        proxy.$modal.msgSuccess("新增成功");
@@ -559,6 +594,22 @@
  proxy.resetForm("formRef");
  dialogFormVisible.value = false;
  emit('close');
  data.form = {
        returnNoCheckbox: true,
        returnNo: "",
        customerId: "",
        shippingId: "",
        shippingType: "",
        truckPlateNo: "",
        expressCompany: "",
        expressNo: "",
        projectId: "",
        maker: "",
        makeTime: "",
        status: 0,
        returnReason: "",
        refundAmount: "",
  }
};
const initCustomers = async () => {
@@ -595,13 +646,26 @@
  formRef.value?.validateField('returnNo');
};
const handleShippingTypeChange = (val) => {
  if (val === 1) {
    form.value.expressCompany = "";
    form.value.expressNo = "";
  } else if (val === 2) {
    form.value.truckPlateNo = "";
  } else {
    form.value.truckPlateNo = "";
    form.value.expressCompany = "";
    form.value.expressNo = "";
  }
};
const customerNameChange = async (val, clearDownstream = true) => {
  // val is customerId now
  if (clearDownstream) {
    form.value.shippingId = "";
    outboundOptions.value = [];
  }
  // Find customer name for getSalesLedger if it requires name
  const customer = customerNameOptions.value.find(c => c.id === val);
  if (!customer) return;
@@ -609,7 +673,7 @@
  // Assuming getSalesLedger takes customerName. If it takes ID, adjust accordingly.
  // Previous code used customerName. Let's try passing customerName.
  getSalesLedger({
    customerName: customer.label,
    customerName: customer.label,
  }).then(res => {
    if(res.code === 200){
      outboundOptions.value = res.data.map(item => ({
@@ -626,7 +690,7 @@
  if(res.code === 200){
    // If backend returns project info, set it
    if (res.data.projectId) form.value.projectId = res.data.projectId;
    availableProducts.value = mergeShippingProductLists(res.data);
    if (clearTable) tableData.value = [];
  }
@@ -634,9 +698,12 @@
const handleReturnQuantityChange = (val, row) => {
  if (val === "" || val === null) return;
  const max = row.unQuantity === undefined || row.unQuantity === null ? Infinity : Number(row.unQuantity || 0);
  const unQuantity = row.unQuantity === undefined || row.unQuantity === null ? Infinity : Number(row.unQuantity || 0);//未退货数量
  const pendingReturnNum = row.pendingReturnNum === undefined || row.pendingReturnNum === null ? Infinity : Number(row.pendingReturnNum || 0);//待处理退货数量
  //最大退货数量,如果为编辑状态加上待处理退货数量
  const max = operationType.value === 'edit' ? unQuantity + pendingReturnNum : unQuantity
  const current = Number(val);
  if (current > max) {
    proxy.$nextTick(() => {
      row.returnQuantity = max;
@@ -702,7 +769,7 @@
// Removed checkSelectable to allow toggling existing items
const confirmProductSelection = () => {
  const newTableData = [];
  selectedProducts.value.forEach(product => {
    const existing = tableData.value.find(item => item.id === product.id);
    if (existing) {
@@ -710,7 +777,7 @@
    } else {
      newTableData.push({
        ...product,
        returnSaleLedgerProductId: product.id,
        returnSaleLedgerProductId: product.id,
        productModelId: product.productModelId,
        returnQuantity: 0,
        num: 0,
@@ -728,7 +795,7 @@
      });
    }
  });
  tableData.value = newTableData;
  productSelectionVisible.value = false;
};