<template>
  <ele-modal
    custom-class="ele-dialog-form long-dialog-form"
    :centered="true"
    :visible.sync="addAccountDialogFlag"
    :title="title"
    :close-on-click-modal="false"
    width="70%"
    :maxable="true"
    :resizable="true"
    :before-close="cancel"
  >

    <!--采购表单表单-->
    <purchase-form
      @handleSearch="handleSearch"
      :dataForm.sync="dataForm"
      :datasource.sync="datasource"
      :recorpayList.sync="recorpayList"

      :dialogType="dialogType"
    ></purchase-form>
    <headerTitle title="对账明细" style="margin-top: 30px">
      <template v-slot>
        <el-row style="font-weight: 700; color: red">
          <span>总金额：</span>
          <span>{{ dataForm.orderTotalAmount || 0 }}</span>
          <el-divider direction="vertical"></el-divider>
          <span>已对账金额：</span>
          <span>{{ dataForm.amountCompletePrice || 0 }}</span>
          <el-divider direction="vertical"></el-divider>
          <span>未对账金额：</span>
          <span>{{ dataForm.amountUnCompletePrice || 0 }}</span>
          <el-divider direction="vertical"></el-divider>
          <span>本次对账总金额：</span>
          <span>{{ dataForm.amountTotalPrice || 0 }}</span>
        </el-row>
      </template>
    </headerTitle>
    <!-- <recorpayTableList
      ref="recorpayListRef"
      :dataForm="dataForm"
      :recorpayList.sync="recorpayList"
      :dialogType="dialogType"
    ></recorpayTableList> -->
    <inventoryTable
      ref="inventoryTableref"
      :datasource.sync="datasource"
      :dialogType="dialogType"
      type="purchase"
    ></inventoryTable>
    <div slot="footer" class="footer">
      <el-button
        v-if="dialogType !== 'view'"
        type="primary"
        @click="save"
        v-click-once
        >保存</el-button
      >
      <el-button
        v-if="dialogType !== 'view'"
        type="primary"
        @click="save('sub')"
        v-click-once
        >提交</el-button
      >
      <el-button @click="cancel">返回</el-button>
    </div>
    <process-submit-dialog
      :processSubmitDialogFlag.sync="processSubmitDialogFlag"
      v-if="processSubmitDialogFlag"
      ref="processSubmitDialogRef"
      @reload="reload"
    ></process-submit-dialog>
  </ele-modal>
</template>

<script>
  // import recorpayTableList from '@/views/saleManage/saleOrder/accountstatement/components/recorpayTableList.vue';
  // import InventoryTable from './inventoryTable.vue';
  import InventoryTable from '@/views/saleManage/saleOrder/accountstatement/components/inventoryTable.vue';
  import purchaseForm from './purchaseForm.vue';
  import {
    getStatementRecordListAPI,
    createAccountStatementAPI,
    accountstatementInfoAPI,
    accountstatementUpdateAPI
  } from '@/api/saleManage/accountstatement';
  import processSubmitDialog from '@/BIZComponents/processSubmitDialog/processSubmitDialog.vue';

  export default {
    name: 'addAccountDialog',
    props: ['addAccountDialogFlag'],
    components: {
      processSubmitDialog,
      InventoryTable,
      purchaseForm,
      // recorpayTableList
    },
    data() {
      return {
        businessId: '',
        fullscreen: false,
        datasource: [],
        recorpayList: [],
        dataForm: {
          sourceType: 1,
          dateType: 1,
          dateValue: '',
          contactId: '',
          contactName: '',
          sourceName: '',
          sourceId: '',
          type: '',
          year: '',
          quarter: '',
          month: '',
          dateTimeRange: [],
          orderNo: '',
          orderId: '',
          id: '',
          startDate: '',
          endDate: '',
          repliedFiles: [],
          queryDimension: 3,
        },
        title: '',
        processSubmitDialogFlag: false,
        dialogType: ''
      };
    },
    computed: {},
    methods: {
      open(dialogType, row, type = '') {
        this.businessId = row?.id || '';
        this.dialogType = dialogType;
        this.title =
          dialogType == 'add'
            ? '新增'
            : dialogType == 'update'
            ? '修改'
            : '详情';
        this.dataForm.type = type;
        if (this.dialogType !== 'add') {
          this.getInfo(row);
        }
      },
      //获取对账单详情
      async getInfo(row) {
        let data = await accountstatementInfoAPI(row.id);
        // this.recorpayList = data.recorpayList || [];
        data.orderTotalAmount = data.orderList.reduce((pre, cur) => pre + Math.round(+cur.orderAmount * 100), 0) / 100;
        data.amountTotalPrice = data.orderList.reduce((pre, cur) => pre + Math.round(+cur.amountTotalPrice * 100), 0) / 100;
        data.amountCompletePrice = data.orderList.reduce((pre, cur) => pre + Math.round(+cur.statementAmount * 100), 0) / 100;
        data.amountUnCompletePrice = data.orderList.reduce((pre, cur) => pre + Math.round(+cur.unStatementAmount * 100), 0) / 100;
        this.datasource = data.orderList || [];
        this.dataForm = data;
        switch (this.dataForm.dateType) {
          case 1:
            this.$set(this.dataForm,'year',this.dataForm.dateValue)
          
            break;
          case 2:
            //2023年-四季度
            let data = this.dataForm.dateValue.split('年-');
            this.$set(this.dataForm,'year',data[0])
            this.$set(this.dataForm,'quarter',data[1])

            break;
          case 3:
            this.$set(this.dataForm,'month',this.dataForm.dateValue)
            break;
          default:
            this.dataForm.dateValue = '';
            this.$set(this.dataForm,'dateTimeRange',[
              this.dataForm.startDate,
              this.dataForm.endDate
            ])

        }
        this.$forceUpdate()
      },
      //关闭弹窗
      cancel() {
        this.$emit('update:addAccountDialogFlag', false);
      },
      //查询获取订单数据
      async handleSearch(params) {
        let searchQuery = {
          endDate: params.endDate,
          sourceId: params.sourceId,
          sourceType: params.sourceType,
          startDate: params.startDate,
          queryDimension: params.queryDimension,
          type: 2
        };
        let data = await getStatementRecordListAPI(searchQuery);
        // this.recorpayList = data.recorpayList || [];
        this.datasource = data || [];
        this.dataForm = {
          ...this.dataForm,
          // amountPayablePrice: data.amountPayablePrice,
          // amountReceivablePrice: data.amountReceivablePrice,
          // amountTotalPrice: data.amountTotalPrice,
          // amountPayablePass: data.amountPayablePass,
          // amountReceivablePass: data.amountReceivablePass
          orderTotalAmount: data.reduce((pre, cur) => pre + Math.round(+cur.orderAmount * 100), 0) / 100,
          amountTotalPrice: data.reduce((pre, cur) => pre + Math.round(+cur.amountTotalPrice * 100), 0) / 100,
          amountCompletePrice: data.reduce((pre, cur) => pre + Math.round(+cur.statementAmount * 100), 0) / 100,
          amountUnCompletePrice: data.reduce((pre, cur) => pre + Math.round(+cur.unStatementAmount * 100), 0) / 100
        };
        // if (!this.datasource.length) this.$message.warning('暂无订单信息');
      },
      //保存
      async save(is) {
        if (!this.datasource.length&&!this.recorpayList.length)
        return this.$message.warning('暂无对账信息');

        let api =
          this.dialogType == 'add'
            ? createAccountStatementAPI
            : accountstatementUpdateAPI;
        let params = {
          ...this.dataForm,
          orderList: this.datasource,
          recorpayList:this.recorpayList
        };
        let data = await api(params);
        if (is == 'sub') {
          await this.submit(data);
          return;
          // await submitAccountStatementApproveAPI(
          //   {
          //     businessId: data,
          //     type: this.dataForm.type
          //   }
          // )
        }
        this.$message.success('操作成功');
        this.reload();
      },
      async submit(res) {
        let data = await accountstatementInfoAPI(this.businessId || res);
        this.processSubmitDialogFlag = true;
        this.$nextTick(() => {
          let params = {
            businessId: data.id,
            businessKey: 'purchase_account_statement_approve',
            formCreateUserId: data.createUserId,
            variables: {
              businessCode: data.statementNo,
              type: data.type,
              businessName: data.contactName,
              businessType: '对账单'
            }
            // callBackMethodType : '1',
            // callBackMethod : 'proTargetPlanApproveApiImpl.updatePlanApprovalStatus',
            // pcHandle : '/bpm/handleTask/components/project-manage/plan-manage/submit.vue',
            // pcView : '/bpm/handleTask/components/project-manage/plan-manage/detailDialog.vue',
            // miniHandle : '',
            // miniView : '',
          };

          this.$refs.processSubmitDialogRef.init(params);
        });
      },
      reload() {
        this.cancel();
        //刷新主页面
        this.$emit('done');
      }
    }
  };
</script>
<style scoped lang="scss">
  ::v-deep.el-divider {
    margin: 10px;
    font-weight: bold;
  }
</style>
