<template>
  <ele-modal
    custom-class="ele-dialog-form long-dialog-form"
    :centered="true"
    :visible.sync="addAccountDialogFlag"
    :title="title"
    :append-to-body="true"
    :close-on-click-modal="false"
    :fullscreen="fullscreen"
    width="85%"
    :before-close="cancel"
  >
  <template slot="title">
     <modalTitle :title="title" @setFullscreen="fullscreen=!fullscreen"></modalTitle>
    </template>
    <!--销售表单-->
    <sale-form
      @handleSearch="handleSearch"
      :dataForm.sync="dataForm"
      :datasource.sync="datasource"
      :contactData="contactData"
      :saleOrderData="saleOrderData"
      :dialogType="dialogType"
      ref="saleFormRef"
    ></sale-form>
    <headerTitle title="对账明细" style="margin-top: 30px">
      <template v-slot>
        <el-row style="font-weight: 700; color: red">
          <el-divider direction="vertical"></el-divider>
          <span>总金额：</span>
          <span>{{ dataForm.amountTotalPrice || 0 }}</span>
          <el-divider direction="vertical"></el-divider>
          <span>应收金额：</span>
          <span>{{ dataForm.amountReceivablePrice || 0 }}</span>
          <el-divider direction="vertical"></el-divider>
          <span>应付金额：</span>
          <span>{{ dataForm.amountPayablePrice || 0 }}</span>
        </el-row>
      </template>
    </headerTitle>
    <inventoryTable
      ref="inventoryTableref"
      :dataForm="dataForm"
      :datasource.sync="datasource"
      :dialogType="dialogType"
    ></inventoryTable>
    <div slot="footer" class="footer">
      <el-button v-if="dialogType !== 'view'" type="primary" @click="save"
      >保存
      </el-button
      >
      <el-button
        v-if="dialogType !== 'view'"
        type="primary"
        @click="save('sub')"
      >提交
      </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 InventoryTable from '@/views/saleManage/saleOrder/accountstatement/components/inventoryTable.vue';
import saleForm from '@/views/saleManage/saleOrder/accountstatement/components/saleForm.vue';
import {
  getSearchMergeListByTypeAPI,
  infoAccountStatementAPI,
  saveAccountStatementAPI,
  updateAccountStatementAPI
} from '@/api/saleManage/accountstatement';
import processSubmitDialog from "@/BIZComponents/processSubmitDialog/processSubmitDialog.vue";
import modalTitle from '@/BIZComponents/modalTitle.vue';
export default {
  name: 'addAccountDialog',
  components: {
    processSubmitDialog,
    InventoryTable,
    saleForm,modalTitle
  },
  //客户管理数据
  props: {
    addAccountDialogFlag: {
      type: Boolean,
      default: false
    },
    contactData: {
      type: Object,
      default: () => {
        return {};
      }
    },
    saleOrderData: {
      type: Object,
      default: () => {
        return {};
      }
    }
  },
  data() {
    return {
      fullscreen:false,
      datasource: [],
      dataForm: {
        sourceType: 1,
        dateType: 1,
        dateValue: '',
        contactId: '',
        contactName: '',
        sourceName: '',
        sourceId: '',
        type: '',
        year: '',
        quarter: '',
        month: '',
        dateTimeRange: [],
        orderNo: '',
        orderId: '',
        id: '',
        startDate: '',
        endDate: '',
        repliedFiles: []
      },
      title: '',
      processSubmitDialogFlag:false,
      dialogType: ''
    };
  },
  computed: {},
  methods: {
    open(dialogType, row, type = '') {
      this.dialogType = dialogType;
      this.title =
        dialogType == 'add' ? '新增' : dialogType == 'update' ? '修改' : '详情';
      this.dataForm.type = type;
      this.$nextTick(() => {
        if (this.contactData.id) {
          this.$refs.saleFormRef.getCusInfo(this.contactData);
        }
        if (this.saleOrderData.id) {
          this.$refs.saleFormRef.getOrderInfo(this.saleOrderData);
        }
      });
      if (this.dialogType !== 'add') {
        this.getInfo(row);
      }
    },
    //获取对账单详情
    async getInfo(row) {
      let data = await infoAccountStatementAPI(row.id);
      this.datasource = data.orderList;
      this.dataForm = data;
      switch (this.dataForm.dateType) {
        case 1:
          this.dataForm.year = this.dataForm.dateValue;
          break;
        case 2:
          //2023年-四季度
          let data = this.dataForm.dateValue.split('年-');
          this.dataForm.year = data[0];
          this.dataForm.quarter = data[1];
          break;
        case 3:
          this.dataForm.month = this.dataForm.dateValue;
          break;
        default:
          this.dataForm.dateValue = '';
          this.dataForm.dateTimeRange = [
            this.dataForm.startDate,
            this.dataForm.endDate
          ];
      }
    },
    //关闭弹窗
    cancel() {
      this.$emit('update:addAccountDialogFlag', false);
    },
    //查询获取订单数据
    async handleSearch(params) {
      let searchQuery = {
        endDate: params.endDate,
        sourceId: params.sourceId,
        sourceType: params.sourceType,
        startDate: params.startDate,
        type: 1
      };
      let data = await getSearchMergeListByTypeAPI(searchQuery);
      this.datasource = data.orderList || [];
      this.dataForm = {
        ...this.dataForm,
        amountPayablePrice: data.amountPayablePrice,
        amountReceivablePrice: data.amountReceivablePrice,
        amountTotalPrice: data.amountTotalPrice
      };
      if (!this.datasource.length) this.$message.warning('暂无订单信息');
    },
    //保存
    async save(is) {
      if (!this.datasource.length) return this.$message.warning('暂无订单信息');
      let api =
        this.dialogType == 'add'
          ? saveAccountStatementAPI
          : updateAccountStatementAPI;
      let params = {
        ...this.dataForm,
        orderList: this.datasource
      };
      let data = await api(params);
      if (is == 'sub') {
        await this.submitApprove(data)
        return
        // await submitAccountStatementApproveAPI({
        //   businessId: data,
        //   type: this.dataForm.type
        // });
      }
      this.$message.success('操作成功');
     this.reload()
    },
    async submitApprove(res) {
      let data = await infoAccountStatementAPI(res);
      this.processSubmitDialogFlag = true
      this.$nextTick(() => {
        let params = {
          businessId: res,
          businessKey: 'sales_account_statement_approve',
          formCreateUserId: data.createUserId,
          variables: {
            type: data.type,
            businessCode: data.statementNo
          },
          // 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>
