<template>
  <!-- 自定义表单 -->
  <el-divider content-position="left"
    >项目阶段名称: {{ stageName
    }}<a-button type="link" @click="hdDetail">详情</a-button></el-divider
  >
  <el-divider content-position="left">项目名称: {{ dataTo.record.projectName }} </el-divider>
  <BasicForm @register="registerApprovalMoneyForm" v-if="taskName == '立项审批'" />
  <div v-if="showMoneyForm">
    <el-divider content-position="left">计划金额</el-divider>
    <ContractPay
      :projectid="pjid"
      :taskName="taskName"
      :isModify="false"
      :isEdit="false"
      :isJiHua="true"
      v-if="pjid"
      ref="contractRef1"
    />
    <el-divider content-position="left">实际金额</el-divider>
  </div>

  <BasicForm @register="registerContractMoneyForm" v-if="taskName == '合同签订'" />
  <div v-if="showMoneyForm || taskName == '合同签订'">
    <ContractPay
      :projectid="pjid"
      :taskName="taskName"
      :isModify="resButton.isEdit"
      :isEdit="resButton.isEdit"
      :isJiHua="taskName == '合同签订'?true:false"
      v-if="pjid"
      ref="contractRef"
    />
  </div>
  <el-divider content-position="left">项目计划详情</el-divider>
  <BasicTable @register="registerplaninfoTable"> </BasicTable>
  <el-divider content-position="left">项目计划资料详情</el-divider>
  <PlanFileDetail :planinfoid="planinfoid" :stage="1" :key="planFileDetailKey" />
  <el-divider content-position="left">项目计划审批文件列表</el-divider>
  <PlanFileDetail :planinfoid="planinfoid" :stage="2" />
  <ApprovalDetails :processInstanceId="processInstanceId" />
  <ApprovalFromPage
    :showApprovalForm="showApprovalForm"
    :buttons="resButton.buttons"
    ref="ApprovalFromPageRef"
    :rowData="dataTo.record"
    @submit="handleSubmit"
    @exit="exit"
  >
    <div>
      <el-divider content-position="left" v-if="resButton.isEdit">重新上传项目计划资料</el-divider>
      <div
        v-if="resButton.isEdit"
        style="display: flex; justify-content: center; align-items: center; height: 100px"
      >
        <el-form ref="importFormRef">
          <el-form-item
            v-for="(item, index) in tableDataFiles"
            :key="index"
            :label="item"
            label-width="auto"
          >
            <el-upload
              class="upload-demo"
              ref="upload"
              action
              :http-request="httpRequest"
              :before-upload="
                (file) => {
                  return beforeUpload(file, item);
                }
              "
              :on-exceed="handleExceed"
              :limit="1"
              :on-remove="removeFile"
            >
              <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
              <div slot="tip" class="el-upload__tip">只能上传{{ item }}且不超过500M</div>
            </el-upload>
          </el-form-item>
        </el-form>
      </div>

      <div
        v-if="taskName == '首付支付' && resButton.isEdit"
        style="display: flex; justify-content: center; align-items: center; height: 100px"
      >
        <el-form ref="importFormRef">
          <el-form-item v-for="(item, index) in tableDataFiles" :key="index" label-width="auto">
            <el-upload
              class="upload-demo"
              ref="upload"
              action
              :http-request="httpRequest"
              :before-upload="
                (file) => {
                  return beforeUpload(file, 'all');
                }
              "
              :on-exceed="handleExceed"
              :limit="50"
              :on-remove="removeFile"
            >
              <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
              <div slot="tip" class="el-upload__tip">上传其他文件且不超过500M</div>
            </el-upload>
          </el-form-item>
        </el-form>
      </div>

      <div v-if="procesType == '0' && !resButton.isEdit">
        <el-divider content-position="left">上传意见文件</el-divider>
        <div style="display: flex; justify-content: center; align-items: center; height: 100px">
          <el-upload
            class="upload-demo"
            ref="upload"
            action
            :http-request="httpRequestadvice"
            :before-upload="beforeAdviceUpload"
            :on-exceed="handleExceed"
            :limit="5"
            :on-remove="removeFile"
          >
            <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
            <div slot="tip" class="el-upload__tip">文件大小且不超过500M</div>
          </el-upload>
        </div>
      </div>
    </div>
  </ApprovalFromPage>
  <BasicModal
    @register="registerProjectPlan"
    title="发起项目计划审批"
    width="1200px"
    :showOkBtn="false"
    :showCancelBtn="false"
  >
    <showtu :res="showtuList" />
  </BasicModal>
</template>
<script lang="ts" name="planFileApproval" setup>
  import { onMounted, ref, reactive, h } from 'vue';
  import { useModal, BasicModal } from '@/components/Modal';
  import { BasicTable, ActionItem, TableAction, useTable } from '@/components/Table';
  import { approvePlanFile, getActionParam } from '../myWork/inComplete/inComplete.api';
  import {
    PlaninfoFiletableColumns,
    PlaninfoColumn,
  } from '@/views/projectLib/projectPlan/projectPlan.data';
  import {
    planFilePageList,
    getplaninfoByid,
  } from '@/views/projectLib/projectPlan/projectPlan.api';
  import { downloadFile } from '../../api/common/api';
  import { message } from 'ant-design-vue';
  import ContractPay from '@/views/projectLib/projectContract/ContractPay.vue';
  import ApprovalDetails from '../ProcessApprovalSubPage/component/ApprovalDetails.vue';
  import ApprovalFromPage from '../ProcessApprovalSubPage/component/ApprovalFromPage.vue';
  import PlanFileDetail from '@/views/ProcessApprovalSubPage/component/PlanFileDetail.vue';
  import { queryProjectInfoById } from '@/views/projectLib/projectInfo/projectInfo.api';
  import showtu from '@/views/projectLib/projectPlan/showtu.vue';
  import { useForm, BasicForm } from '@/components/Form';
  import {
    getProjectinfoMoneyInfo,
    queryPlanInfoMainTimeline,
    getContractinfoByTaskName,
  } from '@/views/projectLib/projectPlan/projectPlan.api';
  import {
    ApprovalMoneyFormSchemas,
    ContractMoneyFormSchemas,
  } from '@/views/projectLib/projectPlan/projectPlan.data';
  const [registerProjectPlan, { openModal: openProjectPlan }] = useModal(); //发起计划审批的

  const [
    registerApprovalMoneyForm,
    {
      setFieldsValue: setApprovalMoneyFieldsValue,
      setProps: setApprovalMoneyProps,
      validate: validateApprovalMoneyForm,
      getFieldsValue: getApprovalMoneyFieldsValue,
    },
  ] = useForm({
    //注册表单列
    schemas: ApprovalMoneyFormSchemas,
    showActionButtonGroup: false,
    //回车提交
    // autoSubmitOnEnter: true,
    // //不显示重置按钮
    // showResetButton: false,
    //自定义提交按钮文本和图标
    // submitButtonOptions: { text: '提交', preIcon: '' },
    //查询列占比 24代表一行 取值范围 0-24
    // actionColOptions: { span: 17 },
    // size: "small",
    // labelCol: { style: { width: '120px' } },
    disabled: true,
    wrapperCol: { style: { width: 'auto' } },
  });
  const [
    registerContractMoneyForm,
    {
      setProps: setContractMoneyProps,
      validate: validateContractMoneyForm,
      getFieldsValue: getContractMoneyFieldsValue,
      setFieldsValue: setContractMoneyFieldsValue,
      updateSchema: updateContractMoneySchema,
    },
  ] = useForm({
    //注册表单列
    schemas: ContractMoneyFormSchemas,
    showActionButtonGroup: false,
    //回车提交
    // autoSubmitOnEnter: true,
    // //不显示重置按钮
    // showResetButton: false,
    //自定义提交按钮文本和图标
    // submitButtonOptions: { text: '提交', preIcon: '' },
    //查询列占比 24代表一行 取值范围 0-24
    // actionColOptions: { span: 17 },
    // size: "small",
    // labelCol: { style: { width: '120px' } },
    disabled: true,
    wrapperCol: { style: { width: 'auto' } },
  });
  let dataTo = defineProps(['record']);
  const emit = defineEmits(['close']);
  console.log('routerouterouteroute', dataTo.record);
  let procesType = dataTo.record.procesType;
  let planinfoid = dataTo.record.projectId as string;
  let processInstanceId = dataTo.record.processInstanceId;
  let taskid = dataTo.record.taskId as string;
  let showApprovalForm = ref();
  let ApprovalFromPageRef = ref();
  let tableDataFiles = ref();
  let planFileDetailKey = ref(0);
  let stageName = ref('');
  let contractRef = ref();
  let showtuList = ref<Array<Object>>();
  let resButton = reactive({
    showApprovalForm: false,
    isEdit: false,
    buttons: [],
  });
  let fileList = reactive<Array<any>>([]);
  let fileAdviceList = reactive<Array<any>>([]);
  let taskName = ref('');
  let pjid = ref('');
  const showMoneyForm = ref(false);
  onMounted(async () => {
    resButton = await getActionParam({
      processInstanceId: processInstanceId,
      taskId: taskid,
      procesType: dataTo.record.procesType,
    });
    showApprovalForm.value = resButton.showApprovalForm;
    planFileDetailKey.value += 1;
    let resList = await getplaninfoByid({ planinfoid: planinfoid });
    let taskLevel = resList[0].taskLevel.split('.')[0];
    console.log('taskLevel', taskLevel, resList);
    let res2 = await queryPlanInfoMainTimeline({ projectid: resList[0].projectId });
    for (let i = 0; i < res2.length; i++) {
      if (res2[i].taskLevel == taskLevel) {
        stageName.value = res2[i].taskName;
      }
    }
    showtuList.value = res2;
  });

  const [registerplaninfoTable, { getDataSource }] = useTable({
    size: 'small', //紧凑型表格
    title: '项目计划详情',
    api: getplaninfoByid,
    columns: PlaninfoColumn,
    // showActionColumn: false,
    useSearchForm: false,
    beforeFetch(params) {
      params.planinfoid = planinfoid;
    },
    afterFetch: async function (data) {
      if (data[0].taskFile.indexOf(',') == -1) {
        tableDataFiles.value = data[0].taskFile.split(',');
      } else {
        tableDataFiles.value = data[0].taskFile.split(',');
      }
      if (data[0].taskName.indexOf('可研报告初稿编制') >= 0) {
        tableDataFiles.value.push('《项目建议书》');
      } else if (data[0].taskName.indexOf('可研报告送审稿编制') >= 0) {
        tableDataFiles.value.push('《项目建议书》');
        tableDataFiles.value.push('《补充说明》');
      }
      taskName.value = data[0].taskName;
      pjid.value = data[0].projectId;
      if (taskName.value == '立项审批') {
        let res = await getProjectinfoMoneyInfo({
          projectid: pjid.value,
        });
        setApprovalMoneyFieldsValue(res);
        setApprovalMoneyProps({ disabled: resButton.isEdit == true ? false : true });
      } else if (taskName.value == '合同签订') {
        let res = await getProjectinfoMoneyInfo({
          projectid: pjid.value,
        });
        setContractMoneyFieldsValue(res);
        setContractMoneyProps({ disabled: resButton.isEdit == true ? false : true });
      }
      let contract = await getContractinfoByTaskName({
        taskName: taskName.value,
        projectId: pjid.value,
      });
      if (contract.realList != null && contract.realList.length > 0) {
        showMoneyForm.value = true;
        setContractMoneyProps({ disabled: resButton.isEdit == true ? false : true });
      }
    },
  });

  //项目资料table
  const [registerResourceTable] = useTable({
    size: 'small', //紧凑型表格
    title: '项目计划资料详情',
    api: planFilePageList,
    columns: PlaninfoFiletableColumns,
    useSearchForm: false,
    actionColumn: {
      width: 140,
      title: '操作',
      dataIndex: 'action',
      slots: { customRender: 'action' },
    },
    beforeFetch(params) {
      params.planinfoid = planinfoid;
      params.stage = '1';
    },
  });
  function hdDetail() {
    openProjectPlan();
  }
  function getTableAction(record): ActionItem[] {
    return [
      {
        label: '下载',
        ifShow: true,
        onClick: handleDetailpage.bind(null, record),
      },
    ];
  }
  function handleDetailpage(record) {
    console.log('我这一行的数据是', record);
    let param = {
      path: record.documentPath,
      fileName: record.documentName,
    };
    //
    console.log('我这一行的数据是', param);

    downloadFile('/huzhouUploadfileinfo/downloadfile', record.documentName, param);
  }
  function removeFile(option) {
    for (let i = 0; i < fileList.length; i++) {
      if (fileList[i].file.name == option.name) {
        fileList.splice(i, 1);
      }
    }
    for (let i = 0; i < fileAdviceList.length; i++) {
      if (fileAdviceList[i].file.name == option.name) {
        fileAdviceList.splice(i, 1);
      }
    }
  }
  function httpRequest(option) {
    fileList.push(option);
  }
  function httpRequestadvice(option) {
    fileAdviceList.push(option);
  }

  // 上传前处理
  async function beforeUpload(file, item) {
    console.log('file,item', file, item);
    let fileSize = file.size;
    const FIVE_M = 500 * 1024 * 1024;
    //大于5M,不允许上传
    if (fileSize > FIVE_M) {
      message.error('最大上传500M');
      return false;
    }
    //不做检测'
    if (item == 'all') {
      return true;
    }
    let geShi = ['xlx', 'xlsx', 'docx', 'doc', 'pdf'] as Array<string>;
    if (geShi.indexOf(file.name.substring(file.name.lastIndexOf('.') + 1)) == -1) {
      message.error('文件格式错误!仅支持' + 'xlx,xlsx, docx, doc, pdf');
      console.log('文件格式错误!仅支持' + 'xlsx', 'docx', 'doc', 'pdf');
      return false;
    }
    let dataSource = await getDataSource();
    if (
      dataSource[0].taskName.indexOf('可研技术审查报告确认') == -1 &&
      dataSource[0].taskName.indexOf('造价评估报告确认') == -1
    ) {
      if (item.indexOf(file.name.substring(0, file.name.indexOf('.'))) == -1) {
        message.error('请上传文件:' + item);
        return false;
      }
    }

    console.log('文件上传成功');

    return true;
  }
  // 文件数量过多时提醒
  function handleExceed() {
    message.warning('最多只能上传一个文件');
  }
  function beforeAdviceUpload(file) {
    console.log('file,item', file);
    let fileSize = file.size;
    const FIVE_M = 500 * 1024 * 1024;
    //大于5M,不允许上传
    if (fileSize > FIVE_M) {
      message.error('最大上传500M');
      return false;
    }
    let geShi = ['xlx', 'xlsx', 'docx', 'doc', 'pdf'] as Array<string>;
    if (geShi.indexOf(file.name.substring(file.name.indexOf('.') + 1)) == -1) {
      message.error('文件格式错误!仅支持' + 'xlx,xlsx, docx, doc, pdf');
      console.log('文件格式错误!仅支持' + 'xlsx', 'docx', 'doc', 'pdf');
      return false;
    }
    console.log('文件上传成功');

    return true;
  }

  async function handleSubmit() {
    const params = new FormData();

    if (taskName.value == '立项审批') {
      if (await validateApprovalMoneyForm()) {
        const approvalMoneyFieldsValue = getApprovalMoneyFieldsValue();
        const {
          approvalTotalMoney,
          approvalCentralMoney,
          approvalProvincialMoney,
          approvalCityMoney,
          approvalCountyMoney,
          approvalSelfMoney,
        } = approvalMoneyFieldsValue;

        // 计算其他金额之和
        const sumOfOtherAmounts =
          approvalCentralMoney +
          approvalProvincialMoney +
          approvalCityMoney +
          approvalCountyMoney +
          approvalSelfMoney;
        // 校验总金额是否等于其他金额之和
        if (Math.abs(approvalTotalMoney - sumOfOtherAmounts) < Number.EPSILON) {
          approvalMoneyFieldsValue['id'] = pjid.value;
          params.append('approvalMoneyFieldsValue', JSON.stringify(approvalMoneyFieldsValue));
        } else {
          message.error('总金额与其他金额之和不相等,请重新输入!');
          return;
        }
      } else {
        return;
      }
    } else if (taskName.value == '合同签订') {
      if (await validateContractMoneyForm()) {
        const contractMoneyFieldsValue = getContractMoneyFieldsValue();
        const {
          contractTotalMoney,
          contractCentralMoney,
          contractProvincialMoney,
          contractCityMoney,
          contractCountyMoney,
          contractSelfMoney,
        } = contractMoneyFieldsValue;

        // 计算其他金额之和
        const sumOfOtherAmounts =
          contractCentralMoney +
          contractProvincialMoney +
          contractCityMoney +
          contractCountyMoney +
          contractSelfMoney;

        // 校验总金额是否等于其他金额之和,使用Number.EPSILON进行比较
        if (Math.abs(contractTotalMoney - sumOfOtherAmounts) < Number.EPSILON) {
          contractMoneyFieldsValue['id'] = pjid.value;
          params.append('contractMoneyFieldsValue', JSON.stringify(contractMoneyFieldsValue));
        } else {
          message.error('总金额与其他金额之和不相等,请重新输入!');
          return;
        }
      } else {
        return;
      }
      let fromdate = await contractRef.value.getFieldsValuetoRef();
      params.append('contractinfoList', JSON.stringify(fromdate));
    }else if(showMoneyForm.value){
      let fromdate = await contractRef.value.getFieldsValuetoRef();
      params.append('contractinfoList', JSON.stringify(fromdate));
    }
    if (resButton.isEdit) {
      if (fileList.length == 0) {
        message.error('未选择任何文件,无法上传!');
        return;
      }
      // type ==0新增,type ==1 是修改
      let dataSource = await getDataSource();
      if (
        dataSource[0].taskName.indexOf('可研技术审查报告确认') == -1 &&
        dataSource[0].taskName.indexOf('可研报告初稿编制') == -1 &&
        dataSource[0].taskName.indexOf('可研报告送审稿编制') == -1
      ) {
        if (fileList.length != tableDataFiles.value.length && taskName.value != '首付支付') {
          message.error('上传的文件数量与项目计划资料数量不一致,请检查');
          return;
        }
      }
    }

    let approvalform = await ApprovalFromPageRef.value.getFieldsValueApprovalForm();
    params.append('flag', approvalform.flag);
    params.append('planinfoid', planinfoid);
    params.append('comment', approvalform.comment);
    if (approvalform.modifyNum) {
      params.append('modifyNum', approvalform.modifyNum);
    }
    params.append('taskId', taskid);
    if (fileList.length > 0) {
      fileList.forEach((x) => {
        params.append('file', x.file);
      });
    }
    if (fileAdviceList.length > 0) {
      fileAdviceList.forEach((x) => {
        params.append('adviceFile', x.file);
      });
    }
    console.log('param', params, 'approvalform', approvalform);
    if (await ApprovalFromPageRef.value.validateApprovalForm()) {
      let res = await approvePlanFile(params);
      console.log('提交成功!', res);
      emit('close');
    }
  }
  async function exit() {
    emit('close');
  }
</script>
<style></style>