<template>
  <el-drawer
    title="外协单信息"
    :with-header="false"
    v-model="visible"
    direction="rtl"
    size="100%"
  >
    <div class="form-container column-container">
      <div class="form-btns-container">
        <span class="title-label">
          <el-icon>
            <Document />
          </el-icon>
          <span>外协单信息</span>
        </span>
        <el-button
          v-show="editStatus && form.isSubmit == 1"
          type="primary"
          icon="Download"
          @click="handleExport"
          v-hasPermi="['business:outsource:export']"
          >导出</el-button
        >
        <el-button
          v-show="editStatus && form.isSubmit == 1"
          type="warning"
          icon="Download"
          @click="handlePrint"
          v-hasPermi="['business:outsource:export']"
        >
          打印
        </el-button>
        <el-button
          v-if="editStatus"
          type="primary"
          icon="Finished"
          @click="handleSubmit"
          >保存</el-button
        >
        <el-button
          v-if="editStatus && form.isSubmit == 1"
          type="info"
          icon="Calendar"
          @click="handleViewRecords"
          >历史记录</el-button
        >
        <div class="close-btn" @click="cancel">
          <i class="fa fa-times" aria-hidden="true" />
          <!-- <span>关闭</span> -->
        </div>
      </div>
      <el-form
        ref="formRef"
        class="master-container"
        :model="form"
        v-loading="loading"
        :rules="rules"
        label-width="120px"
      >
        <el-row :gutter="20">
          <el-col :span="6">
            <el-form-item label="单据号" prop="formCode">
              <el-input
                v-if="editStatus"
                v-model="form.formCode"
                disabled
                placeholder="系统自动生成"
              />
              <span v-else>{{ form.formCode }}</span>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="表单日期" prop="formDate">
              <el-date-picker
                v-if="editStatus && hasReturnReceiptDetailFlag"
                :clearable="false"
                v-model="form.formDate"
                type="date"
                value-format="YYYY-MM-DD"
                placeholder="请选择表单日期"
                style="width: 100%"
              >
              </el-date-picker>
              <span v-else>{{ parseTime(form.formDate, "{y}-{m}-{d}") }}</span>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="外协工段" prop="outsourceDeptId">
              <el-select
                v-if="editStatus &&form.isSubmit ==0"
                v-model="form.outsourceDeptId "
                placeholder="请选择"
                @change="handleChangeDept"
              >
                <el-option
                  v-for="dict in outsourceDeptList"
                  :key="dict.value"
                  :label="dict.label"
                  :value="dict.value"
                />
                </el-select>
              <span v-else>{{ form.outsourceDeptName }}</span>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="外协商名称" prop="supplierName">
              <el-input
                v-if="editStatus"
                v-model="form.supplierName"
                disabled
              />
              <span v-else >{{ form.supplierName }}</span>
            </el-form-item>
          </el-col>
          <el-col :span="6" v-if="false">
            <el-form-item label="运费单价" prop="freightPrice">
              <el-input-number
                v-if="editStatus && hasReturnReceiptDetailFlag"
                v-model="form.freightPrice"
                :min="0"
                :precision="2"
                controls-position="right"
              />
              <span v-else>{{ form.freightPrice }}</span>
            </el-form-item>
          </el-col>
          <el-col :span="6" v-if="false">
            <el-form-item label="运费总价" prop="freightAmount">
              <el-input-number
                v-if="editStatus && hasReturnReceiptDetailFlag"
                v-model="form.freightAmount"
                :min="0"
                :precision="2"
                controls-position="right"
              />
              <span v-else>{{ form.freightAmount }}</span>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="送货方式" prop="deliveryMethod">
              <el-select
                v-if="editStatus && hasReturnReceiptDetailFlag"
                v-model="form.deliveryMethod"
                placeholder="请选择"
                @change="handleChangeDeliveryMethod"
              >
                <el-option
                  v-for="dict in deliveryMethod"
                  :key="dict.value"
                  :label="dict.label"
                  :value="dict.value"
                />
              </el-select>
              <span v-else>{{
                selectText(form.deliveryMethod, deliveryMethod)
              }}</span>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="带箱方式" prop="packagingMethod">
              <el-select
                v-if="editStatus && hasReturnReceiptDetailFlag"
                v-model="form.packagingMethod"
                placeholder="请选择"
                @change="handleChangePackagingMethod"
              >
                <el-option
                  v-for="dict in packagingMethod"
                  :key="dict.value"
                  :label="dict.label"
                  :value="dict.value"
                />
              </el-select>
              <span v-else>{{
                selectText(form.packagingMethod, packagingMethod)
              }}</span>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="结算方式" prop="settlementType">
              <el-select
                v-if="editStatus && hasReturnReceiptDetailFlag"
                v-model="form.settlementType"
                placeholder="请选择"
              >
                <el-option
                  v-for="dict in settlementType"
                  :key="dict.value"
                  :label="dict.label"
                  :value="dict.value"
                />
              </el-select>
              <span v-else>{{
                selectText(form.settlementType, settlementType)
              }}</span>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="备注" prop="remark">
              <el-input
                v-if="editStatus"
                v-model.trim="form.remark"
                placeholder="请输入备注"
              />
              <span v-else>{{ form.remark }}</span>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="总箱数" prop="remark">
              <span>{{ totalCarriersNum }}</span>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <!-- 渲染数据区 -->
      <div class="form-details-btns-container">
        <el-button
          v-show="editStatus"
          type="primary"
          icon="Plus"
          @click="handleShowDialogProducts"
          v-hasPermi="['business:innerOutsource:add']"
        >
          添加外协产品明细
        </el-button>
        <el-button
          v-show="editStatus"
          type="success"
          icon="Check"
          :disabled="form.details.length === 0"
          @click="handleCheckPackage"
          v-hasPermi="['business:innerOutsource:add']"
        >
        一键包装签票
        </el-button>
      </div>
      <div class="el-table-container">
        <div class="el-table-inner-container">
          <el-table
            v-loading="loading"
            :data="form.details"
            size="small"
            border
            height="100%"
          >
            <el-table-column
              label="行号"
              type="index"
              align="center"
              width="48"
            />
            <el-table-column
              label="批次号"
              align="center"
              prop="lotCode"
              width="104"
            />
            <el-table-column
              label="产品描述"
              align="center"
              prop="productDescription"
              width="300"
            />
            <el-table-column
              label="产品数"
              align="center"
              width="160"
              prop="productNum"
            >
              <template #default="scope">
                <el-input-number
                   v-if="editStatus && !scope.row.hasNextInfo"
                  :min="0"
                  v-model="scope.row.productNum"
                  placeholder="产品数"
                  :controls="false"
                />
                <span v-else>{{ scope.row.productNum }}</span>
              </template>
            </el-table-column>
            <el-table-column
              label="箱数"
              align="center"
              prop="carrierNum"
              width="50"
            />
            <el-table-column
              :label="form.packagingMethod === '0' ? '箱号' : '原箱号'"
              align="center"
              prop="originalCarrier"
              width="320"
            />
            <el-table-column
              label="新箱号"
              align="center"
              prop="newCarrier"
              width="320"
            >
            <template #default="scope">
                <el-button
                  link
                  type="primary"
                  icon="Refresh"
                  v-if="!scope.row.editStatus && editStatus"
                  @click="handleChangeCarrier(scope.row)"
                  >换箱</el-button
                >
                <el-select
                  v-if="
                    editStatus &&
                    scope.row.editStatus &&
                  !scope.row.hasNextInfo
                  "
                  v-model="scope.row.carrierIds"
                  multiple
                  filterable
                  remote
                  reserve-keyword
                  placeholder="请选择箱号"
                  :remote-method="
                    (arg) =>
                      remoteCarriers(arg, scope.row.newCarriers, scope.row)
                  "
                  :loading="loadingCarrier"
                  @change="(arg) => handleCarrierChange(arg, scope.row)"
                >
                  <el-option
                    v-for="item in scope.row.carriers"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value"
                  />
                </el-select>
                <span v-if="!editStatus">{{ scope.row.newCarrier }}</span>
              </template>
            </el-table-column>
            <el-table-column
              label="外协工序"
              align="center"
              prop="processNames"
              width="320"
            >
              <template #default="scope">
                <el-input
                   v-if="editStatus && !scope.row.hasNextInfo"
                  v-model="scope.row.processNames"
                  readonly
                  placeholder="请选择工序"
                >
                  <template #append>
                    <el-button
                      icon="Search"
                      @click="handleShowDialogProcesses(scope.row)"
                    />
                  </template>
                </el-input>
                <span v-else>{{ scope.row.processNames }}</span>
              </template>
            </el-table-column>
            <el-table-column label="是否包装签票" align="center" prop="isPackage" >
              <template #default="scope">
                <el-switch :disabled="!editStatus || scope.row.hasNextInfo" v-model="scope.row.isPackage" style="
                    --el-switch-on-color: #13ce66;
                    --el-switch-off-color: #ff4949;
                  " :active-value="1" :inactive-value="0" active-text="是" inactive-text="否" />
              </template>
            </el-table-column>
            <el-table-column label="备注" align="center" prop="remark">
              <template #default="scope">
                <el-input
                  v-if="editStatus && !scope.row.hasNextInfo"
                  v-model="scope.row.remark"
                  placeholder="备注"
                />
                <span v-else>{{ scope.row.remark }}</span>
              </template>
            </el-table-column>
            <el-table-column
              v-if="editStatus"
              label="操作"
              align="center"
              class-name="small-padding fixed-width"
              width="64"
            >
              <template #default="scope">
                <el-button
                  circle
                  type="danger"
                   v-if="editStatus && !scope.row.hasNextInfo"
                  icon="Delete"
                  @click="handleDelete(scope.$index)"
                  v-hasPermi="['business:outsource:remove']"
                />
              </template>
            </el-table-column>
          </el-table>
        </div>
      </div>
    </div>
    <!-- 外协商选择 -->
    <dialog-suppliers
      ref="dialogSuppliersRef"
      :single-selected="handleSingleSelectedSupplier"
    />
    <!-- 产品选择 -->
    <dialog-products
      ref="dialogProductsRef"
      :supplier-id="form.supplierId"
      :multiple-selected="handleMultipleSelectedProducts"
    />
    <!-- 工序选择 -->
    <dialog-processes
      ref="dialogProcessesRef"
      :multiple-selected="handleMultipleSelectedProcesses"
    />
    <!-- 新箱号选择 -->
    <dialog-carrier
      ref="dialogCarrierRef"
      :multiple-selected="handleMultipleSelectedOutsourceCarriers"
    />
    <!-- 历史记录弹窗 -->
    <dialog-outsourced-records ref="dialogOutsourcedRecordsRef" />
  </el-drawer>
</template>
<script setup>
import {
  getInnerOrder,
  saveOrder,
  carrierForOutsource,
  submitOrder,
  exportOutsource,
  printOutsource,
  submitInnerDetails,
} from "@/api/business/outsourcedOrder";
import {
  listOutsourceDeptList
} from "@/api/business/supplier"
import dialogCarrier from "./DialogCarrier";
import dialogSuppliers from "./DialogSuppliers";
import dialogProducts from "./DialogProducts";
import dialogProcesses from "./DialogProcesses";
import dialogOutsourcedRecords from "./DialogOutsourcedRecords";
// import FormDetailsRecycling from "./detailsRecyclingForm";
const { proxy } = getCurrentInstance();
/** 父组件传参 */
const props = defineProps({
  getList: {
    type: Function,
    default: () => {},
  },
  deliveryMethod: {
    type: Array,
    default: [],
  },
  settlementType: {
    type: Array,
    default: [],
  },
  packagingMethod: {
    type: Array,
    default: [],
  },
});
const { getList, deliveryMethod, packagingMethod, settlementType } =
  toRefs(props);
/** 字典数组区 */
/** 表单抽屉 页变量 */

const loading = ref(false);
const multiple = ref(true);
const visible = ref(false);
const editStatus = ref(true);
const hasReturnReceiptDetailFlag = ref(true);
const totalCarriersNum = ref(0);
const detailInfo = ref({});
const loadingCarrier = ref(false);
const carriers = ref([]);
const details = ref([]);
const form = ref({});
const outsourceDeptList = ref([])
const deptList = ref([])
// const formatDetails = ref([])
const currentDetail = ref({});
const rules = {
  supplierName: [
    { required: true, message: "外协商名称不能为空", trigger:"" },
  ],
};

/***********************  方法区  ****************************/
/** 导出按钮操作 */
function handleExport() {
  exportOutsource({ id: form.value.id });
}

/** 打印按钮操作 */
function handlePrint() {
  printOutsource({ id: form.value.id });
}

/** 打开抽屉 */
function open(row) {
  reset();
  totalCarriersNum.value = 0;
  getOutsorceDeptList()
  visible.value = true;
  if (row) {
    console.log(row);
    detailInfo.value = row;
    form.value.id = row.id;
    getForm();
  } else {
    editStatus.value = true;
    hasReturnReceiptDetailFlag.value = true;
  }
}
/** 查询表单信息  */
function getForm() {
  loading.value = true;
  getInnerOrder({id:form.value.id}).then((response) => {
    form.value = response.data;
    details.value = proxy.deepClone(response.data.details);
    console.log(details.value);
    //如果发出单明细里收回单，主表除了备注之外不能编辑
    form.value.details.forEach((item) => {
      item.hasReturnReceiptDetailFlag = true;
      if (
        item.returnReceiptDetailList &&
        item.returnReceiptDetailList.length > 0
      ) {
        hasReturnReceiptDetailFlag.value = false;
      }
      if (
        item.returnReceiptDetailList &&
        item.returnReceiptDetailList.length > 0 &&
        item.returnReceiptDetailList[0].status == 1
      ) {
        item.hasReturnReceiptDetailFlag = false;
      }
    });
    form.value.details.forEach((item) => {
      item.editStatus = false;
      if (!form.value.id) {
        item.carrierNum = item.originalCarrier.split(",").length;
      } else {
        if (item.newCarrier != null) {
          item.carrierNum = item.newCarrier.split(",").length;
        } else {
          item.carrierNum = item.originalCarrier.split(",").length;
        }
      }
      totalCarriersNum.value += item.carrierNum;
    });

    editStatus.value = form.value.isSubmit == 1;
    if (!detailInfo.value.flag) {
      editStatus.value = false;
      console.log(editStatus.value);
    }
    console.log(hasReturnReceiptDetailFlag.value);
    loading.value = false;
  });
}
//改变带箱方式
function handleChangePackagingMethod() {
  totalCarriersNum.value = 0;
  if (!editStatus) {
    if (form.value.packagingMethod == 1 && form.value.details.length > 0) {
      form.value.details.forEach((item) => {
        item.newCarriers = [];
        item.carrierIds = [];
        item.carriers = carriers.value;
      });
    }
    if (form.value.packagingMethod == 0 && form.value.details.length > 0) {
      form.value.details.forEach((item) => {
        item.carriers = carriers.value;
        item.newCarriers = [];
        item.carrierIds = [];
        item.newCarriers.push(
          ...item.originalCarrierList.map((v) => ({
            id: v.carrierId,
            code: v.carrierCode,
          }))
        );
        item.carriers.push(
          ...item.originalCarrierList.map((v) => ({
            value: v.carrierId,
            label: v.carrierCode,
          }))
        );
        item.carrierIds = item.originalCarrierList.map((info) => {
          return info.carrierId;
        });
      });
    }
  } else {
    form.value.details.forEach((item) => {
      console.log(item.editStatus);
      if (item.editStatus) {
        item.newCarriers = [];
        item.carrierIds = [];
        item.carriers = carriers.value;
      }
    });
  }
  console.log(form.value.details);
  for (let i = 0; i < form.value.details.length; i++) {
    if (form.value.packagingMethod == 1) {
      form.value.details[i].carrierNum = form.value.details[i].newCarriers
        ? form.value.details[i].newCarriers.length
        : 0;
    } else {
      form.value.details[i].carrierNum =
        form.value.details[i].newCarriers &&
        form.value.details[i].newCarriers.length > 0
          ? form.value.details[i].newCarriers.length
          : form.value.details[i].originalCarrier.split(",").length;
    }
    console.log(form.value.details);
    totalCarriersNum.value += form.value.details[i].carrierNum;
  }
}
//改变送货方式
function handleChangeDeliveryMethod() {
  if (form.value.deliveryMethod == 1) {
    form.value.freightAmount = form.value.freightPrice * totalCarriersNum.value;
  } else {
    form.value.freightAmount = 0.0;
  }
}
//外协工段
function getOutsorceDeptList() {
  listOutsourceDeptList({}).then((response) => {
    if(response.data && response.data.length > 0) {
      deptList.value = response.data
        outsourceDeptList.value = response.data.map(item => {
            return {
                value: item.outsourceDeptId,
                label: item.outsourceDeptName
            }
        })
    }
    form.value.outsourceDeptList = response.data;
  });
}
//外协工段选择事件
function handleChangeDept(){
  let data = deptList.value.filter(item => item.outsourceDeptId == form.value.outsourceDeptId)[0]
  form.value.isInnerOutsource = 1
  form.value.outsourceDeptName = data.outsourceDeptName
  form.value.supplierName = data.supplierName
  form.value.supplierId = data.id;
  form.value.lossLimit = data.lossLimit;
  form.value.supplierName = data.name;
  form.value.supplierCode = data.mnemonicCode;
  form.value.deliveryMethod = data.deliveryMethod;
  form.value.freightPrice = data.freightPrice;
  form.value.settlementType = data.settlementType;
}
//一键包装签票
function handleCheckPackage(){
  form.value.details.forEach((item) => {
    if(!item.hasNextInfo){
      item.isPackage = 1
    }
   
  })
}
//打开历史记录弹窗
function handleViewRecords() {
  proxy.$refs.dialogOutsourcedRecordsRef.open(form.value.id);
}

function selectText(value, data) {
  if (value) {
    return data.filter((item) => item.value == value)[0].label;
  }
}

/** 取消按钮 */
function cancel() {
  visible.value = false;
  // reset();
}

const handleDelete = (index) => {
  totalCarriersNum.value -= form.value.details[index].carrierNum;
  if (form.value.deliveryMethod == 1) {
    form.value.freightAmount = form.value.freightPrice * totalCarriersNum.value;
  } else {
    form.value.freightAmount = 0.0;
  }
  form.value.details.splice(index, 1);
};

/** 表单重置 */
function reset() {
  // console.log(proxy.parseTime(new Date(), "{y}-{m}-{d}"))
  form.value = {
    id: null,
    tenantId: null,
    formCode: null,
    formDate: proxy.parseTime(new Date(), "{y}-{m}-{d}"),
    supplierId: "0",
    supplierName: "",
    deliveryMethod: "0",
    freightPrice: 0.0,
    freightAmount: 0.0,
    packagingMethod: "0",
    remark: null,
    details: [],
    isSubmit: 0,
  };
  proxy.resetForm("formRef");
}
/** 保存 */
function saveFrom() {
  if (!form.value.details || form.value.details.length == 0) {
    proxy.$modal.msgError("请添加产品明细");
    return;
  }

  proxy.$refs["formRef"].validate((valid) => {
    for (const item of form.value.details) {
      if (!item.processNames) {
        proxy.$modal.msgError("请选择" + item.lotCode + "批次的工序");
        return;
      }
    }

    if (form.value.packagingMethod == 1) {
      console.log("form.value.details", form.value.details);
      for (const item of form.value.details) {
        if (item.newCarriers.length == 0) {
          proxy.$modal.msgError("请选择" + item.lotCode + "批次的新箱号");
          return;
        }
      }
    }
    if (valid) {
      saveOrder(form.value).then((response) => {
        if (response.code == 200) {
          proxy.$modal.msgSuccess("保存成功");
          visible.value = false;
          getList.value();
        }
      });
    }
  });
}

/** 保存并提交 */
function submitFrom() {
  console.log("from", form.value);
  proxy.$modal
    .confirm("是否确定提交，提交后不可修改，删除")
    .then(function () {
      return;
    })
    .then(() => {
      if (!form.value.details || form.value.details.length == 0) {
        proxy.$modal.msgError("请添加产品明细");
        return;
      }

      proxy.$refs["formRef"].validate((valid) => {
        for (const item of form.value.details) {
          if (!item.processNames) {
            proxy.$modal.msgError("请选择" + item.lotCode + "批次的工序");
            return;
          }
        }
        if (form.value.packagingMethod == 1) {
          console.log("form.value.details", form.value.details);
          for (const item of form.value.details) {
            if (item.newCarriers.length == 0) {
              proxy.$modal.msgError("请选择" + item.lotCode + "批次的新箱号");
              return;
            }
          }
        }
        if (valid) {
          console.log(form.value);
          submitOrder(form.value).then((response) => {
            proxy.$modal.msgSuccess("提交成功");
            visible.value = false;
            getList.value();
          });
        }
      });
    })
    .catch(() => {});
}
//5.29保存
function handleSubmit() {
  if (form.value.isSubmit == 0) {
    proxy.$modal
      .confirm("是否确定保存，保存后外协商不可编辑！")
      .then(function () {
        return;
      })
      .then(() => {
        if (!form.value.details || form.value.details.length == 0) {
          proxy.$modal.msgError("请添加产品明细");
          return;
        }
        if (form.value.supplierName == "") {
          proxy.$modal.msgError("外协商名称不能为空");
          return;
        }

        proxy.$refs["formRef"].validate((valid) => {
          for (const item of form.value.details) {
            if (!item.processNames) {
              proxy.$modal.msgError("请选择" + item.lotCode + "批次的工序");
              return;
            }
          }
          if (form.value.packagingMethod == 1) {
            console.log("form.value.details", form.value.details);
            for (const item of form.value.details) {
              if (item.newCarriers.length == 0) {
                proxy.$modal.msgError("请选择" + item.lotCode + "批次的新箱号");
                return;
              }
            }
          }
          if (valid) {
            console.log(form.value);
            submitInnerDetails(form.value).then((response) => {
              proxy.$modal.msgSuccess("提交成功");
              visible.value = false;
              getList.value();
            });
          }
        });
      });
  } else {
    if (!form.value.details || form.value.details.length == 0) {
      proxy.$modal.msgError("请添加产品明细");
      return;
    }

    proxy.$refs["formRef"].validate((valid) => {
      for (const item of form.value.details) {
        if (!item.processNames) {
          proxy.$modal.msgError("请选择" + item.lotCode + "批次的工序");
          return;
        }
      }
      if (form.value.packagingMethod == 1) {
        console.log("form.value.details", form.value.details);
        for (const item of form.value.details) {
          if (item.newCarriers.length == 0) {
            proxy.$modal.msgError("请选择" + item.lotCode + "批次的新箱号");
            return;
          }
        }
      }
      if (valid) {
        console.log(form.value);
        submitInnerDetails(form.value).then((response) => {
          proxy.$modal.msgSuccess("提交成功");
          visible.value = false;
          getList.value();
        });
      }
    });
  }
}

/***************************** 外协商对话框相关 *****************************/
// 打开外协商选择对话框
const handleShowDialogSuppliers = () => {
  proxy.$refs.dialogSuppliersRef.open();
};
// 外协商选择带回
const handleSingleSelectedSupplier = (data) => {
  console.log(data);
  form.value.supplierId = data.id;
  form.value.lossLimit = data.lossLimit;
  form.value.supplierName = data.name;
  form.value.supplierCode = data.mnemonicCode;
  form.value.deliveryMethod = data.deliveryMethod;
  form.value.freightPrice = data.freightPrice;
  form.value.settlementType = data.settlementType;
  if (form.value.deliveryMethod == 1) {
    form.value.freightAmount = form.value.freightPrice * totalCarriersNum.value;
  } else {
    form.value.freightAmount = 0.0;
  }
};
/***************************** 外协收回明细相关 *****************************/
//打开收回明细表单
function handleDetailsRecycling() {
  proxy.$refs.formDetailsRecyclingRef.open(row);
}
function handleSingleSelectedRecycling() {}
/***************************** 产品对话框相关 *****************************/
// 打开产品选择对话框
const handleShowDialogProducts = () => {
  const dayworkIds = form.value.details.map((item) => item.dayworkId);
  // console.log(dayworkIds);
  proxy.$refs.dialogProductsRef.open(dayworkIds);
};
// 产品选择带回
const handleMultipleSelectedProducts = (selection) => {
  selection.forEach((item) => {
    const newDetail = {
      lotId: item.lotId,
      lotCode: item.lotCode,
      dayworkId: item.id,
      productId: item.productId,
      productDescription: item.productDescription,
      technologicalProcessId: item.technologicalProcessId,
      technologicalProcessDetailId: item.lastDayworkItem.technologicalProcessDetailId,
      productionPlanDetailId: item.lastDayworkItem.productionPlanDetailId,
      processId: item.lastDayworkItem.processId,
      processAlias:item.lastDayworkItem.processAlias,
      dayworkItemId: item.lastDayworkItem.id,
      technologyVersion: item.technologyVersion,
      productionPlanDetailId: item.productionPlanDetailId,
      productionPlanNo: item.productionPlanNo,
      lineNumber:item.lineNumber,
      originalCarrier: item.originalCarrier,
      originalCarrierCount: item.originalCarrier.split(",").length,
      carrierNum: item.originalCarrier.split(",").length,
      originalCarrierList: item.originalCarrierList,
      productNum: item.productNum,
      productCode: item.productCode,
      newCarrier: "",
      carriers: [],
      newCarrierCount: 0,
      newCarriers: [],
      processNames: "",
      remark: item.remark,
      processes: [],
      hasReturnReceiptDetailFlag: true,
    };
    form.value.details.push(newDetail);
    console.log(newDetail);
    totalCarriersNum.value += newDetail.originalCarrierCount;
    if (form.value.deliveryMethod == 1) {
      form.value.freightAmount =
        form.value.freightPrice * totalCarriersNum.value;
    } else {
      form.value.freightAmount = 0.0;
    }
    // console.log("form.value.details", form.value.details);
  });
};

/***************************** 外协箱子对话框相关 *****************************/
// 打开外协箱子选择对话框
const handleShowDialogOutsourceCarriers = (row) => {};

function remoteCarriers(code, newCarrier, row) {
  loadingCarrier.value = true;
  // console.log(row, carriers.value)
  console.log("row", row);
  // if (true) {
  //   carriers.value = [{ value: '"1747500987856662535"', label: '000319' }]
  //   return
  // }
  let categoryId;
  if (form.value.packagingMethod == 1) {
    categoryId = "1783783697558847489";
  } else {
    categoryId = "2";
  }
  if (code == "") {
    return;
  }
  carrierForOutsource({
    categoryId: categoryId,
    code: code,
    dayworkId: row.dayworkId,
  }).then((res) => {
    if (res.code === 200) {
      carriers.value = res.rows.map((v) => ({ value: v.id, label: v.code }));
      row.carriers = res.rows.map((v) => ({ value: v.id, label: v.code }));
      if (Array.isArray(newCarrier)) {
        // 安全地更新 carriers
        row.carriers.push(
          ...newCarrier
            .filter((v) => !row.carriers.map((e) => e.value).includes(v.id))
            .map((v) => ({ value: v.id, label: v.code }))
        );
      }
    } else {
      row.carriers = [];
      row.carriers.push(...newCarrier);
    }
    loadingCarrier.value = false;
  });
}
//换箱
function handleChangeCarrier(row) {
  console.log(row);
  if (editStatus.value && !form.value.id) {
    if (form.value.packagingMethod == 0) {
      row.newCarriers.push(
        ...row.originalCarrierList.map((v) => ({
          id: v.carrierId,
          code: v.carrierCode,
        }))
      );
      row.carriers.push(
        ...row.originalCarrierList.map((v) => ({
          value: v.carrierId,
          label: v.carrierCode,
        }))
      );
      row.carrierIds = row.originalCarrierList.map((info) => {
        return info.carrierId;
      });
    } else {
      row.newCarriers = null;
    }
  }
  if (editStatus.value && form.value.id) {
    row.carriers = [];
    row.newCarriers.map((v) => ({ id: v.value, code: v.label }));
    console.log(row.newCarriers);
    row.carriers = row.newCarriers.map((v) => ({ value: v.id, label: v.code }));
    row.carrierIds = row.newCarriers.map((info) => {
      return info.id;
    });
    console.log(row);
  }
  row.editStatus = true;
}
function handleCarrierChange(arg, item) {
  totalCarriersNum.value = 0;
  item.newCarriers = item.carriers
    .filter((v) => arg.includes(v.value))
    .map((v) => ({ id: v.value, code: v.label }));
  console.log(item.newCarriers);
  item.carrierNum = item.newCarriers.length;

  for (let i = 0; i < form.value.details.length; i++) {
    if (form.value.packagingMethod == 1) {
      form.value.details[i].carrierNum = form.value.details[i].newCarriers
        ? form.value.details[i].newCarriers.length
        : 0;
    } else {
      //原厂蓝箱
      form.value.details[i].carrierNum = form.value.details[i].newCarriers
        ? form.value.details[i].newCarriers.length
        : form.value.details[i].originalCarrier.split(",").length;
    }
    console.log(form.value.details);
    totalCarriersNum.value += form.value.details[i].carrierNum;
  }
  if (form.value.deliveryMethod == 1) {
    form.value.freightAmount = form.value.freightPrice * totalCarriersNum.value;
  } else {
    form.value.freightAmount = 0.0;
  }
}

/** 使用新方式 */
// const handleShowDialogOutsourceCarriers = (row) => {
//   // 确保 form.details 存在且不是 undefined
//   let allNewCarriers;
//   if (form.value && form.value.details && Array.isArray(form.value.details)) {
//     allNewCarriers = form.value.details
//       .flatMap((detail) =>
//         detail.newCarriers ? detail.newCarriers.filter((item) => item) : []
//       )
//       .filter(Boolean);

//     // 现在 allNewCarriers 包含了所有非空的 newCarriers 数组的元素
//   }
//   // form.value.details.newCarriers
//   // const allNewCarriers = form.details.flatMap((detail) => detail.newCarriers);
//   console.log("allNewCarriers", allNewCarriers);
//   proxy.$refs.dialogCarrierRef.open(row.lotId, from.value.deliveryMethod);
// };

// 箱子选择带回
const handleMultipleSelectedOutsourceCarriers = (selection, lotId) => {
  const carrierNames = selection.map((item) => item.code);
  let carrierNamesString = carrierNames.join(",");
  form.value.details.map((item) => {
    if (item.lotId == lotId) {
      item.newCarrier = carrierNamesString;
      item.newCarrierCount = selection.length;
      item.newCarriers = selection;
    }
  });
};

/***************************** 外协工序对话框相关 *****************************/
// 打开外协工序选择对话框
const handleShowDialogProcesses = (row) => {
  currentDetail.value = row;
  proxy.$refs.dialogProcessesRef.open(row);
};

// 工序选择带回
const handleMultipleSelectedProcesses = (selection) => {
  let currentOriginal = details.value.filter(
    (item) => (item.id = currentDetail.value.id)
  );
  let flag = true;
  if (
    currentDetail.value.returnReceiptDetailList &&
    currentDetail.value.returnReceiptDetailList.length > 0
  ) {
    selection.forEach((item) => {
      if (
        currentOriginal[0].processes.findIndex(
          (info) => info.processStepNumber == item.processStepNumber
        ) < 0
      ) {
        flag = false;
      }
    });
  }
  if (flag) {
    const processNames = selection
      .sort((a, b) => a.processStepNumber - b.processStepNumber)
      .map((item) => item.processAlias);
    // 使用join方法将数组转换为以逗号分隔的字符串
    let commaSeparatedString = processNames.join(",");
    currentDetail.value.processes = [];
    currentDetail.value.processNames = commaSeparatedString;
    selection.forEach((item) => {
      const newProcess = {
        processId: item.processId,
        processCode: item.processCode,
        processAlias: item.processAlias,
        processStepNumber: item.processStepNumber,
        technologicalProcessDetailId: item.id,
      };
      currentDetail.value.processes.push(newProcess);
    });
  } else {
    proxy.$modal.msgError("外协厂/德迈仕已收回，不可添加新工序");
  }
};

/** 暴露给父组件的方法 */
defineExpose({
  open,
});
</script>
