chenlu
8 小时以前 33dbc6a161554f3a897f9e9273feb4f2c1b47381
north-glass-erp/northglass-erp/src/views/sd/delivery/CreateDelivery.vue
@@ -19,6 +19,8 @@
import {multiply} from "@/utils/decimal";
import MaterialAddition from "@/views/mm/ingredientStock/MaterialAddition.vue";
import {copyTableCellValue} from "@/hook/copyTableCellValue";
import SelectOrderList from "@/views/sd/delivery/SelectOrderList.vue";
import { ElDialog } from "element-plus";
//语言获取
const { t } = useI18n()
@@ -35,6 +37,19 @@
let otherMoneyVisible = ref(false)
let otherMoney = ref(null)
const dialogSelectOrderVisible = ref(false); // 控制弹窗显示
const currentOrderIds = ref([]); // 已有的订单ID,用于排除
// 初始化已选订单ID(在onMounted中调用)
const initCurrentOrderIds = () => {
  if (produceList && produceList.length > 0) {
    const orderIds = produceList.map(item => item.orderId);
    currentOrderIds.value = [...new Set(orderIds)];
  }else {
    currentOrderIds.value = [];
  }
};
const hasDecimal=(value)=>{
  const regex=/\./ // 定义正则表达式,查找小数点
@@ -209,6 +224,7 @@
        //禁用按钮
        gridOptions.toolbarConfig.buttons[2].disabled  = true
        gridOptions.toolbarConfig.buttons[3].disabled = true
        //gridOptions.toolbarConfig.buttons[4].disabled = false
        //显示复选框
        xGrid.value.showColumn("select")
        gridOptions.loading=false
@@ -245,6 +261,7 @@
        if(titleUploadData.value.deliveryState!==0){
          gridOptions.toolbarConfig.buttons[2].disabled = true
          gridOptions.toolbarConfig.buttons[1].disabled = true
          //gridOptions.toolbarConfig.buttons[4].disabled = true
        }
        if(titleUploadData.value.deliveryState===0){
          gridOptions.toolbarConfig.buttons[3].disabled = true
@@ -316,6 +333,9 @@
    resizable: true,
    useKey: true
  },
  sortConfig: {
    multiple: true,
  },
  filterConfig: {   //筛选配置项
    //remote: true
  },
@@ -370,6 +390,7 @@
      {'code': 'addToExamine', 'name': t('reportingWorks.saveAndReview'),status: 'primary',icon: 'vxe-icon-save'},
      {'code': 'toExamine', 'name': t('basicData.review'),status: 'primary'},
      {'code': 'CounterExamination', 'name': t('basicData.cancelReview'),status: 'primary'},
      //{'code': 'addOtherOrders','name': t('delivery.orderAdd'),'status': 'primary'}
      //{'code': 'glassShelf', 'name': t('finishedGlassShelf.finishedGlassShelfEmit'),status: 'primary'}
    ],
    /*import: false,
@@ -447,7 +468,7 @@
            otherMoney:otherMoney.value,
            deliveryIdType:company.deliveryIdType,
            deliveryOutbound:company.deliveryOutbound,
            type:2
            type:1
          })
          gridOptions.toolbarConfig.buttons[0].disabled = true
@@ -615,6 +636,13 @@
            gridOptions.toolbarConfig.buttons[1].disabled = false
          })
          break
        }
        case 'addOtherOrders': {
          // 显示弹窗前更新已选订单ID
          initCurrentOrderIds();
          // 显示弹窗
          dialogSelectOrderVisible.value = true;
          break;
        }
      }
    }
@@ -826,7 +854,83 @@
};
// 处理从SelectOrderList选中的订单
const handleSelectedOrders = async (selectedOrders) => {
  if (!selectedOrders || selectedOrders.length === 0) return;
  // 关闭弹窗
  dialogSelectOrderVisible.value = false;
  // 验证选中的订单是否符合条件
  const { customerId, project } = titleUploadData.value;
  const invalidOrders = selectedOrders.filter(order =>
      order.customerId !== parseInt(customerId) || order.project !== project
  );
  if (invalidOrders.length > 0) {
    ElMessage.warning(t('delivery.onlySameCustomerProject'));
    return;
  }
  try {
    // 显示加载状态
    gridOptions.loading = true;
    // 批量查询订单明细(按订单ID)
    const orderIds = selectedOrders.map(order => order.orderId).join('|');
    filterData.value.orderId=orderIds
    request.post("/delivery/getSelectShippingOrderDetails/1/100",filterData.value).then((res) => {
      if (res.code == 200) {
        // 处理返回的明细数据
        const orderDetails = res.data.data || [];
        //合并数据
        mergeData(orderDetails);
      } else {
        ElMessage.warning(res.msg || t('basicData.msg.data获取失败'));
      }
    })
  } catch (error) {
    ElMessage.error(t('basicData.msg.ServerConnectionError'));
    console.error('查询订单明细失败:', error);
  } finally {
    // 关闭加载状态
    gridOptions.loading = false;
  }
};
// 合并数据:判断orderId、orderNumber、boxNo是否相同,相同则累加数量,不同则新增
const mergeData = (newDataList) => {
  // 复制现有数据(避免直接修改响应式源数据)
  const currentList = [...produceList];
  newDataList.forEach(newItem => {
    // 提取新数据的关键比对字段
    const newOrderId = newItem.orderId;
    const newOrderNumber = newItem.orderNumber;
    const newBoxNo = newItem.finishedGoodsInventory?.boxNo || ''; // 处理可能的undefined
    // 在现有数据中查找匹配项(三个字段完全相同)
    const matchedItem = currentList.find(item =>
        item.orderId === newOrderId &&
        item.orderNumber === newOrderNumber &&
        (item.finishedGoodsInventory?.boxNo || '') === newBoxNo
    );
    if (matchedItem) {
      // 找到匹配项:累加数量(确保是数值类型)
      matchedItem.deliveryDetail.quantity = (Number(matchedItem.deliveryDetail.quantity) || 0) +
          (Number(newItem.deliveryDetail.quantity) || 0);
    } else {
      // 未找到匹配项:新增一条数据
      currentList.push(newItem);
    }
  });
  // 更新响应式数据
  produceList = currentList;
  // 刷新表格
  xGrid.value.reloadData(produceList);
};
</script>
@@ -997,6 +1101,22 @@
          @handle-result="handleChildResult2"
      />
    </el-dialog>
    <el-dialog
        v-model="dialogSelectOrderVisible"
        :title="t('delivery.orderAdd')"
        style="width: 70%;height:75% "
        destroy-on-close
        :close-on-click-modal="false"
        :close-on-press-escape="false">
      <SelectOrderList
          style="width: 100%;height: 600px"
          :customer-id="titleUploadData.customerId"
          :project="titleUploadData.project"
          :exclude-order-ids="currentOrderIds"
          @select-orders="handleSelectedOrders"
      />
    </el-dialog>
  </div>
</template>