<!-- <template>
  <BasicModal
    v-bind="$attrs"
    @register="register"
    title="生产对账单"
    width="60%"
    :bodyStyle="{ height: '500px' }"
    @ok="handleOk"
  >
  </BasicModal>
</template> -->
<template>
  <BasicModal
    v-bind="$attrs"
    @register="register"
    title="净利润分析表"
    width="60%"
    :bodyStyle="{ height: '455px' }"
    @visible-change="handleShow"
    @ok="handleOk"
    okText="导出"
  >
    <template #appendFooter>
      <a-button style="background-color: #1890ff; color: white" @click="handleCalculate"
        >计算</a-button
      >
    </template>
    <table
      style="
        width: 100%;
        border-collapse: collapse;
        text-align: center;
        border: 1px solid black;
        font-size: 16px;
      "
    >
      <thead>
        <!-- <tr>
          <th colspan="4" style="border: 1px solid black">净利润分析表</th>
        </tr> -->
      </thead>
      <tbody>
        <tr>
          <td style="border: 1px solid black; width: 25%">项目号</td>
          <td style="border: 1px solid black; width: 25%">{{ projectNo }}</td>
          <td style="border: 1px solid black; width: 25%">开始时间</td>
          <td style="border: 1px solid black; width: 25%">结束时间</td>
        </tr>
        <tr>
          <td style="border: 1px solid black"></td>
          <td style="border: 1px solid black">项目开始时间</td>
          <td style="border: 1px solid black">
            <input type="date" v-model="projectStartTime" style="width: 100%" />
          </td>
          <input type="date" v-model="projectEndTime" style="width: 100%" />
        </tr>
        <tr>
          <td style="border: 1px solid black"></td>
          <td style="border: 1px solid black">生产进行时间</td>
          <td style="border: 1px solid black">
            <input type="date" v-model="produceStartTime" style="width: 100%" />
          </td>
          <td style="border: 1px solid black">
            <input type="date" v-model="produceEndTime" style="width: 100%"
          /></td>
        </tr>
        <tr>
          <td style="border: 1px solid black">客户编码</td>
          <td style="border: 1px solid black">{{ customerCode }}</td>
          <td style="border: 1px solid black"></td>
          <td style="border: 1px solid black">备注</td>
        </tr>
        <tr>
          <td style="border: 1px solid black" colspan="2">客户总金额合计</td>
          <td style="border: 1px solid black">¥{{ customerTotalPrice }}</td>
          <td style="border: 1px solid black">${{ customerTotalPriceUsd }}</td>
        </tr>
        <tr>
          <td style="border: 1px solid black" colspan="2">生产科总价合计</td>
          <td style="border: 1px solid black">¥{{ productionDepartmentTotalPrice }}</td>
          <td style="border: 1px solid black">${{ productionDepartmentTotalPriceUsd }}</td>
        </tr>
        <tr>
          <td style="border: 1px solid black" colspan="2">包装费用合计</td>
          <td style="border: 1px solid black">¥{{ packetTotalPrice }}</td>
          <td style="border: 1px solid black">${{ packetTotalPriceUsd }}</td>
        </tr>
        <tr>
          <td style="border: 1px solid black" colspan="2">研发开发费合计</td>
          <td style="border: 1px solid black"
            ><a-input v-model:value="developTotalPrice" placeholder="请输入"
          /></td>
          <td style="border: 1px solid black"></td>
        </tr>
        <tr>
          <td style="border: 1px solid black" colspan="2">复制费用合计</td>
          <td style="border: 1px solid black"
            ><a-input v-model:value="copyTotalPrice" placeholder="请输入"
          /></td>
          <td style="border: 1px solid black"></td>
        </tr>
        <tr>
          <td style="border: 1px solid black" colspan="2">固定成本</td>
          <td style="border: 1px solid black">¥{{ fixCost }}</td>
          <td style="border: 1px solid black"></td>
        </tr>
        <tr>
          <td style="border: 1px solid black" colspan="2">西班牙提成</td>
          <td style="border: 1px solid black">¥{{ spainRatioProfitPrice }}</td>
          <td style="border: 1px solid black"></td>
        </tr>
        <tr>
          <td style="border: 1px solid black" colspan="2">中国团队提成</td>
          <td style="border: 1px solid black">¥{{ chinaRatioProfitPrice }}</td>
          <td style="border: 1px solid black"></td>
        </tr>
        <tr>
          <td style="border: 1px solid black" colspan="2">支出合计</td>
          <td style="border: 1px solid black">¥{{ outTotalPrice }}</td>
          <td style="border: 1px solid black"></td>
        </tr>
        <tr>
          <td style="border: 1px solid black" colspan="2">毛利润</td>
          <td style="border: 1px solid black">¥{{ grossProfit }}</td>
          <td style="border: 1px solid black"></td>
        </tr>
        <tr>
          <td style="border: 1px solid black" colspan="2">研发贸易净利润</td>
          <td style="border: 1px solid black">¥{{ developProfit }}</td>
          <td style="border: 1px solid black"></td>
        </tr>
        <tr>
          <td style="border: 1px solid black" colspan="2">包装费用合计金额</td>
          <td style="border: 1px solid black">¥{{ packetTotalPrice }}</td>
          <td style="border: 1px solid black"></td>
        </tr>
        <tr>
          <td style="border: 1px solid black" colspan="2">包装费用实际金额</td>
          <td style="border: 1px solid black"
            ><a-input v-model:value="packetActualTotalPrice" placeholder="请输入"
          /></td>
          <td style="border: 1px solid black"></td>
        </tr>
        <tr>
          <td style="border: 1px solid black" colspan="2">订单总数量</td>
          <td style="border: 1px solid black">{{ orderCount }}</td>
          <td style="border: 1px solid black"></td>
        </tr>
        <!-- <tr>
          <td style="border: 1px solid black" colspan="2">实际跟单费用</td>
          <td style="border: 1px solid black"
            ><a-input v-model:value="actualdocumentaryPrice" placeholder="请输入"
          /></td>
          <td style="border: 1px solid black"></td>
        </tr> -->
        <tr>
          <td style="border: 1px solid black" colspan="2">实际跟单单价=实际跟单费用/件数</td>
          <td style="border: 1px solid black">¥{{ actualRmbPrice }}</td>
          <td style="border: 1px solid black"></td>
        </tr>
        <tr>
          <td style="border: 1px solid black" colspan="2">实际跟单单价折算美金</td>
          <td style="border: 1px solid black">${{ actualPrice }}</td>
          <td style="border: 1px solid black"></td>
        </tr>
        <tr>
          <td style="border: 1px solid black" colspan="2">包装费用收益</td>
          <td style="border: 1px solid black">¥{{ packetProfitPrice }}</td>
          <td style="border: 1px solid black"></td>
        </tr>
        <tr>
          <td style="border: 1px solid black" colspan="2">实际汇率</td>
          <td style="border: 1px solid black"
            ><a-input v-model:value="actualRatio" placeholder="请输入"
          /></td>
          <td style="border: 1px solid black"></td>
        </tr>
        <tr>
          <td style="border: 1px solid black" colspan="2">汇率收益</td>
          <td style="border: 1px solid black">¥{{ actualRatioProfitPrice }}</td>
          <td style="border: 1px solid black"></td>
        </tr>
        <tr>
          <td style="border: 1px solid black" colspan="2">综合收益</td>
          <td style="border: 1px solid black">¥{{ totalProfitPrice }}</td>
          <td style="border: 1px solid black"></td>
        </tr>
      </tbody>
    </table>
  </BasicModal>
</template>
<script lang="ts" setup>
  import { BasicModal, useModalInner } from '@/components/Modal';
  import { computed, ref, toRaw } from 'vue';
  // import { payDate, checkCreate } from '@/api/project/invoice';
  import { calculateBusinessProfit, exportBusinessProfit } from '@/api/project/order';
  import { getList } from '/@/api/sys/config';
  import type { Dayjs } from 'dayjs';
  import axios from 'axios';

  const projectStartTime = ref();
  const projectEndTime = ref();
  const produceStartTime = ref();
  const produceEndTime = ref();

  const testinput = ref();
  const Input1 = ref('');
  const Input2 = ref();
  const res = ref();
  const orderList = ref();
  const customerCode = ref();
  const projectNo = ref();
  const developTotalPrice = ref();
  const copyTotalPrice = ref();
  const packetActualTotalPrice = ref();
  const spainRatio = ref(0);
  const chinaRatio = ref(0);
  const actualRmbPrice = ref(0); //实际跟单单价
  const actualPrice = ref(0); //实际跟单单价折算美金
  const actualRatio = ref(); //实际汇率
  const customerTotalPrice = ref(0); //客户总价合计
  const actualdocumentaryPrice = ref(0); //实际跟单费用
  const actualRatioProfitPrice = ref(0); //汇率收益
  const grossProfit = ref(0); //毛利润合计
  const customerTotalPriceUsd = ref(0); //客户总价$
  const productionDepartmentTotalPriceUsd = ref(0); //生产科总价$
  const actualRatiactualRatioProfitPriceo = ref(0); //汇率收益计算
  const packetTotalPriceUsd = ref(0); //汇率收益计算
  const chinaRatioProfitPrice = ref(0); //中国团队提成比例
  const developProfit = ref(0); //研发贸易利润
  const fixCost = ref(0); // 固定成本
  const orderCount = ref(0); //订单总数量
  const outTotalPrice = ref(0); //支出合计计
  const packetProfitPrice = ref(0); //包装费用收益计算
  const packetTotalPrice = ref(0); //包装费用合计¥
  const productionDepartmentTotalPrice = ref(0); //生成科总价¥
  const totalProfitPrice = ref(0); //综合收益计算
  const spainRatioProfitPrice = ref(0); //西班牙提成金额
  const ids = ref();

  // const orderRes = await getOrderList({});
  const [register, { closeModal }] = useModalInner(async (data) => {
    res.value = data.data;
    orderList.value = data.res;
    orderList.value.forEach((item) => {
      orderCount.value += item.orderCount;
    });
    customerCode.value = data.customerCode[0][0];
    ids.value = data.data;
    const extractedValues = ref<string[]>(data.projectNo.map((item) => item[0]));
    projectNo.value = extractedValues.value.join(',');
  });
  async function handleOk() {
    axios
      .post(
        '/basic-api/order/erp/calculate_profit/business_profit_ratio_export',
        {
          customerCode: customerCode.value,
          projectNo: projectNo.value,
          ids: ids.value,
          projectStartTime: projectStartTime.value,
          projectEndTime: projectEndTime.value,
          produceStartTime: produceStartTime.value,
          produceEndTime: produceEndTime.value,
          developTotalPrice: developTotalPrice.value,
          // actualdocumentaryPrice: actualdocumentaryPrice.value,
          copyTotalPrice: copyTotalPrice.value,
          spainRatio: spainRatio.value,
          chinaRatio: chinaRatio.value,
          packetActualTotalPrice: packetActualTotalPrice.value,
          actualRmbPrice: actualRmbPrice.value,
          actualPrice: actualPrice.value,
          actualRatio: actualRatio.value,
        },
        {
          responseType: 'blob', // 设置响应类型为 'blob'
        },
      )
      .then((response) => {
        // 创建一个 Blob 对象来保存二进制数据
        const blob = new Blob([response.data], { type: 'application/octet-stream' });
        const getFormattedDate = (): string => {
          const date = new Date();

          const year = date.getFullYear();
          const month = String(date.getMonth() + 1).padStart(2, '0');
          const day = String(date.getDate()).padStart(2, '0');

          const hours = String(date.getHours()).padStart(2, '0');
          const minutes = String(date.getMinutes()).padStart(2, '0');
          const seconds = String(date.getSeconds()).padStart(2, '0');

          return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
        };
        const date = getFormattedDate();
        // 创建一个链接元素用于下载
        const link = document.createElement('a');
        link.href = window.URL.createObjectURL(blob);
        link.download = `业务/研发净利润分析${date}.xlsx`; // 你可以为文件命名
        document.body.appendChild(link);
        link.click(); // 自动点击链接,触发下载
        document.body.removeChild(link); // 下载完成后移除链接
      })
      .catch((error) => {
        console.error(error);
      });
    closeModal();
  }
  // function handleShow(visible: boolean) {
  //   if (visible) {
  //     projectStartTime.value = null;
  //     projectEndTime.value = null;
  //     produceStartTime.value = null;
  //     produceEndTime.value = null;
  //     customerCode.value = null;
  //     projectNo.value = null;
  //     ids.value = null;
  //     developTotalPrice.value = null;
  //     actualdocumentaryPrice.value = null;
  //     copyTotalPrice.value = null;
  //     packetActualTotalPrice.value = null;
  //     orderCount.value = 0;
  //   }
  // }
  function handleShow(visible: boolean) {
    if (!visible) {
      projectStartTime.value = null; // 项目开发开始时间
      projectEndTime.value = null; // 项目开发结束时间
      produceStartTime.value = null; // 生产开始时间
      produceEndTime.value = null; // 生产结束时间
      customerCode.value = null; // 客户编码
      projectNo.value = null; // 项目号
      ids.value = null; // 假设存在的 ID 列表
      developTotalPrice.value = null; // 开发总价格
      actualdocumentaryPrice.value = null; // 实际跟单费用
      copyTotalPrice.value = null; // 复制总价格
      packetActualTotalPrice.value = null; // 包装实际总价格
      orderCount.value = 0; // 订单总数量

      // 新增的数据 - 修改的位置
      testinput.value = null; // 新增输入框
      Input1.value = ''; // 输入框 1
      Input2.value = null; // 输入框 2
      res.value = null; // 结果
      orderList.value = null; // 订单列表
      spainRatio.value = 0; // 西班牙比例
      chinaRatio.value = 0; // 中国比例
      actualRmbPrice.value = 0; // 实际跟单单价
      actualPrice.value = 0; // 实际跟单单价折算美金
      actualRatio.value = 0; // 实际汇率
      customerTotalPrice.value = 0; // 客户总价合计
      actualRatioProfitPrice.value = 0; // 汇率收益
      grossProfit.value = 0; // 毛利润合计
      chinaRatioProfitPrice.value = 0; // 中国团队提成比例
      developProfit.value = 0; // 研发贸易利润
      fixCost.value = 0; // 固定成本
      outTotalPrice.value = 0; // 支出合计
      packetProfitPrice.value = 0; // 包装费用收益计算
      packetTotalPrice.value = 0; // 包装费用合计
      productionDepartmentTotalPrice.value = 0; // 生成科总价
      totalProfitPrice.value = 0; // 综合收益计算
      spainRatioProfitPrice.value = 0; // 西班牙提成金额
      customerTotalPriceUsd.value = 0;
      productionDepartmentTotalPriceUsd.value = 0;
      packetTotalPriceUsd.value = 0;
    }
  }
  //提成接口
  interface RatioListItem {
    createBy: string;
    createTime: string;
    enableFlag: number;
    id: number;
    modifyBy: string;
    modifyTime: string;
    relationCode: string;
    relationName: string;
    relationValue: string; // 这里 relationValue 是一个字符串,但内部是一个 JSON 数组,需要进一步解析
    settingCode: string;
    settingName: string;
    settingType: number;
    settingValue: string;
  }
  interface RatioList {
    items: RatioListItem[];
  }
  async function handleCalculate() {
    const packetCalculatePrice = ref(0);
    const orderCalculateCount = ref(0);
    const allList = toRaw(orderList.value);
    allList.forEach((item) => {
      packetCalculatePrice.value += item?.profitAnalysisInfo?.packetPrice;
      orderCalculateCount.value += item.orderCount;
      actualRmbPrice.value += packetCalculatePrice.value / orderCalculateCount.value;
    });
    actualPrice.value = actualRmbPrice.value / actualRatio.value;
    // const ratioList = (await getList({ settingType: 3 })) as Array<RatioListItem>;
    const ratioList = (await getList({ settingType: 3 })) as RatioList;
    const ratios = ratioList.items.filter((item) => item.settingValue === customerCode.value);
    const ratioAll = JSON.parse(ratios[0].relationValue);
    chinaRatio.value = ratioAll[1].relationValue;
    spainRatio.value = ratioAll[2].relationValue;
    //提成比例为0,提成设为0
    const params = {
      customerCode: customerCode.value,
      projectNo: projectNo.value,
      ids: ids.value,
      projectStartTime: projectStartTime.value,
      projectEndTime: projectEndTime.value,
      produceStartTime: produceStartTime.value,
      produceEndTime: produceEndTime.value,
      developTotalPrice: developTotalPrice.value,
      // actualdocumentaryPrice: actualdocumentaryPrice.value,
      copyTotalPrice: copyTotalPrice.value,
      spainRatio: spainRatio.value,
      chinaRatio: chinaRatio.value,
      packetActualTotalPrice: packetActualTotalPrice.value,
      actualRmbPrice: actualRmbPrice.value,
      actualPrice: actualPrice.value,
      actualRatio: actualRatio.value,
    };
    const res = await calculateBusinessProfit({
      customerCode: customerCode.value,
      projectNo: projectNo.value,
      ids: ids.value,
      projectStartTime: projectStartTime.value,
      projectEndTime: projectEndTime.value,
      produceStartTime: produceStartTime.value,
      produceEndTime: produceEndTime.value,
      developTotalPrice: developTotalPrice.value,
      // actualdocumentaryPrice: actualdocumentaryPrice.value,
      copyTotalPrice: copyTotalPrice.value,
      spainRatio: spainRatio.value,
      chinaRatio: chinaRatio.value,
      packetActualTotalPrice: packetActualTotalPrice.value,
      actualRmbPrice: actualRmbPrice.value,
      actualPrice: actualPrice.value,
      actualRatio: actualRatio.value,
    });
    customerTotalPrice.value = res.customerTotalPrice.toFixed(2);
    grossProfit.value = res.grossProfit.toFixed(2);
    actualRatioProfitPrice.value = res.actualRatioProfitPrice.toFixed(2);
    actualRmbPrice.value = res.actualRmbPrice.toFixed(2);
    actualPrice.value = res.actualPrice.toFixed(2);
    actualRatio.value = res.actualRatio;
    actualRatiactualRatioProfitPriceo.value = res.actualRatioProfitPrice.toFixed(2); //汇率收益计算
    chinaRatioProfitPrice.value = res.chinaRatioProfitPrice.toFixed(2); //中国团队提成比例
    developProfit.value = res.developProfit.toFixed(2); //研发贸易利润
    developTotalPrice.value = res.developTotalPrice.toFixed(2);
    copyTotalPrice.value = res.copyTotalPrice.toFixed(2);
    packetActualTotalPrice.value = res.packetActualTotalPrice.toFixed(2);
    actualRatio.value = res.actualRatio.toFixed(2);
    fixCost.value = res.fixCost.toFixed(2); // 固定成本
    orderCount.value = res.orderCount; //订单总数量
    outTotalPrice.value = res.outTotalPrice.toFixed(2); //支出合计
    packetProfitPrice.value = res.packetProfitPrice.toFixed(2); //包装费用收益计算
    packetTotalPrice.value = res.packetTotalPrice.toFixed(2); //包装费用合计
    productionDepartmentTotalPrice.value = res.productionDepartmentTotalPrice.toFixed(2); //生成科总价
    totalProfitPrice.value = res.totalProfitPrice.toFixed(2); //综合收益计算
    spainRatioProfitPrice.value = res.spainRatioProfitPrice.toFixed(2); //西班牙提成金额
    customerTotalPriceUsd.value = res.customerTotalPriceUsd.toFixed(2);
    productionDepartmentTotalPriceUsd.value = res.productionDepartmentTotalPriceUsd.toFixed(2);
    packetTotalPriceUsd.value = res.packetTotalPriceUsd.toFixed(2);
  }
</script>
<style scoped>
  .divAll {
    display: flex;
    justify-content: center;
    align-items: center;
  }
</style>