<template>
  <div class="app-container">
    <el-card>
      <div slot="header" class="card-title">{{ $t("银行实收明细详情") }}</div>
      <el-form ref="addForm" :data="addForm" label-width="250px">
        <el-form-item :label="$t('收款单号')">{{
          form.receiptNo
        }}</el-form-item>
        <el-form-item :label="$t('剩余应收金额')">
          <template v-if="surplusData.length == 0"> 0</template>
          <div v-if="surplusData.length > 0">
            <div v-for="(amount, currency) in surplusData" :key="currency">
              <span v-if="amount">
                {{ amount }}{{ getCurrencyLabel(currency) }}</span
              >
            </div>
          </div>
        </el-form-item>
        <el-form-item :label="$t('收款账户')" prop="accountNo">
          <span
            >{{ addForm.accountNo }}{{ "(" + addForm.accountName + ")" }}</span
          >
        </el-form-item>
        <el-form-item :label="$t('实收日期')" prop="amountDate">
          <span>{{ addForm.amountDate }}</span>
        </el-form-item>
        <div style="display: flex">
          <el-form-item :label="$t('实收')" prop="amount">
            <span>{{ addForm.amount }}</span>
          </el-form-item>
          <el-form-item label-width="0px" prop="currencyId">
            <span>({{ getCurrencyLabel(addForm.currencyId) }})</span>
          </el-form-item>
        </div>
        <el-form-item v-if="showCurrencyId != addForm.currencyId" prop="rate">
          <template slot="label">
            <span
              :title="
                $t(
                  '实收币种与核销基准币种一样时,无需填写汇率,不一样需要填写汇率'
                )
              "
              >{{ $t("兑核销基准币种汇率") }}({{
                getCurrencyLabel(showCurrencyId)
              }})</span
            >
          </template>
          <span>{{ addForm.rate }}</span>
        </el-form-item>
        <el-form-item v-if="showCurrencyId != addForm.currencyId">
          <template slot="label">
            {{ $t("兑核销基准币种金额") }}({{
              getCurrencyLabel(showCurrencyId)
            }})
          </template>
          <span>{{
            addForm.writeOffAmount
              ? parseFloat(addForm.writeOffAmount).toFixed(2)
              : ""
          }}</span>
        </el-form-item>
        <el-form-item :label="$t('水单附件')" prop="attr">
          <div>
            <div v-for="(v, i) in addForm.attr" :key="i">
              <el-link :href="v.url" type="primary" target="_blank">{{
                v.name
              }}</el-link>
            </div>
          </div>
        </el-form-item>
        <el-form-item :label="$t('水单号')" prop="billNo">
          <span>{{ addForm.billNo }}</span>
        </el-form-item>
      </el-form>
    </el-card>
    <div slot="header" class="bpm-title">{{ $t("审核流程") }}</div>
    <work-flow xmlkey="merge_order" v-model="selectedUsers"></work-flow>

    <div slot="footer" style="margin: 20px 0">
      <el-button type="primary" @click="submitForm(0)">{{
        $t("提交审核")
      }}</el-button>
      <el-button
        type="primary"
        @click="$store.dispatch('tagsView/delCurrentView')"
        >{{ $t("关闭") }}</el-button
      >
    </div>
  </div>
</template>

<script>
import {
  getReceivableItem,
  getInvoicingItem,
  getReceiptAccountList,
  getReceiptInfoByIds,
  financeReceiptItemWriteOff,
} from "@/api/ecw/financial";
import { getCurrencyPage } from "@/api/ecw/currency";
import WorkFlow from "@/components/WorkFlow/";
import NP from "number-precision";

export default {
  components: {
    WorkFlow,
  },
  data() {
    return {
      addForm: {},
      id: 0,
      detailed: [],
      currencyList: [],
      surplusData: [],
      receiptAccountList: [],
      selectedUsers: [],
      list: [],
      params: {
        page: 1,
        rows: 20,
      },
      bankId: 0,
      form: {},
    };
  },
  async created() {
    if (this.$route.query.id) {
      this.id = this.$route.query.id;
    }
    if (this.$route.query.bankId) {
      this.bankId = this.$route.query.bankId;
    }
    await getInvoicingItem({ id: this.id }).then((res) => {
      this.list = [...res.data];
    });
    await getReceiptAccountList({ id: this.id }).then((res) => {
      this.receiptAccountList = [...res.data];
    });
    await getCurrencyPage(this.params).then(
      (res) => (this.currencyList = res.data.list)
    );
    await this.getList();
    await getReceiptInfoByIds({ id: this.id }).then((res) => {
      this.form = res.data;
    });
  },
  methods: {
    getList() {
      getReceivableItem({ id: this.id }).then((res) => {
        this.detailed = res.data.map((v) => ({
          ...v,
          amountDate: this.parseTime(v.amountDate, "{y}-{m}-{d}"),
          rate: parseFloat(v.rate).toFixed(2),
          attr: v.attr
            ? v.attr
                .split(",")
                .map((t) => ({ name: t.slice(t.lastIndexOf("/") + 1), url: t }))
            : [],
        }));
        console.log(this.detailed);
        this.addForm = this.detailed.find((itt) => itt.id == this.bankId);
        console.log(this.addForm);
        this.handleAddReceiptItem();
      });
    },
    getCurrencyLabel(id) {
      var label = this.currencyList.filter((item) => item.id == id);
      if (label.length > 0)
        return this.$i18n.locale == "zh_CN"
          ? label[0].titleZh
          : label[0].titleEn;
      return "";
    },
    submitForm() {
      this.$modal
        .confirm(this.$t("您确认要提交审核吗" + "?"))
        .then(() => {
          financeReceiptItemWriteOff({
            receiptId: this.id,
            receiptNo: this.form.receiptNo,
            receiptItemId: this.bankId,
          }).then((res) => {
            this.$message.success(this.$t("提交成功"));
            this.$store.dispatch("tagsView/delCurrentView");
          });
        })
        .catch(() => {});
    },
    handleAddReceiptItem() {
      this.surplusData = [];

      // 已收
      let recepted = [];
      this.detailed.forEach((item) => {
        if (!recepted[item.currencyId]) {
          recepted[item.currencyId] = item.amount;
        } else
          recepted[item.currencyId] = NP.plus(
            recepted[item.currencyId],
            item.amount
          );
      });
      console.log("rece", recepted);

      // 应收
      let collom = [];
      // 从期望收费金额中提取应收币种和金额

      this.currencyList.forEach((item, index) => {
        var nairaListByList = this.list.filter((v) => v.currencyId === item.id);
        if (nairaListByList.length > 0) {
          var discountNaira = nairaListByList.reduce(
            (total, currentValue) =>
              NP.plus(total, currentValue.discountTotal || 0),
            0
          );
        }
        var dollarList = this.receiptAccountList.filter(
          (v) => v.collectionCurrencyId == item.id
        );
        if (dollarList.length > 0) {
          var dollar = dollarList
            .reduce(
              (total, currentValue) =>
                NP.plus(total, currentValue.collectionAmount),
              0
            )
            .toFixed(2);
          if (dollar) {
            collom[item.id] = dollar;
          } else {
            collom.push(0);
          }
        }
      });
      console.log("collom", collom);
      recepted.forEach((amount, currency) => {
        if (amount) {
          if (collom[currency]) {
            if (collom[currency] - amount != 0)
              this.surplusData[currency] = +parseFloat(
                (collom[currency] - amount).toPrecision(12)
              );
          } else {
            this.surplusData[currency] = -amount;
          }
        }
      });
      collom.forEach((amount, currency) => {
        if (amount) {
          if (!this.surplusData[currency]) {
            if (recepted[currency]) {
              if (amount - recepted[currency] != 0)
                this.surplusData[currency] = +parseFloat(
                  (amount - recepted[currency]).toPrecision(12)
                );
            } else {
              this.surplusData[currency] = amount;
            }
          }
        }
      });
    },
  },
  computed: {
    showCurrencyId() {
      let fieldList = [];
      let groupList = [];
      this.list.map((element) => {
        if (fieldList.indexOf(element["currencyId"]) === -1) {
          fieldList.push(element["currencyId"]);
        }
      });
      for (let i = 0; i < fieldList.length; i++) {
        let arr = this.list.filter((element) => {
          return element["currencyId"] === fieldList[i];
        });
        groupList.push({
          currencyId: arr[0].currencyId,
          list: arr,
        });
      }
      if (groupList.length === 1) return groupList[0].currencyId;
      else return 1;
    },
  },
};
</script>

<style>
.card {
  margin-top: 20px;
}
.dialog-footer {
  text-align: left;
}
.card-title {
  font-size: 18px;
  font-weight: bold;
}
.bpm-title {
  font-size: 20px;
  font-weight: bold;
  color: #666;
  margin: 20px 0;
}
</style>