<template>
  <div class="app-container">
      <el-descriptions :column="4" >
        <el-descriptions-item :label="$t('收款单编号')">{{ form.receiptNo }}</el-descriptions-item>
        <el-descriptions-item :label="$t('客户')">{{ form.customerName }}</el-descriptions-item>
        <el-descriptions-item :label="$t('创建时间')">
          <template >
            <span>{{ parseTime(form.createTime, '{y}-{m}-{d}') }}</span>
          </template></el-descriptions-item>
        <el-descriptions-item :label="$t('业务员')">{{ form.salesmanName }}</el-descriptions-item>
        <el-descriptions-item v-if="reason" :label="$t('申请理由')">{{reason}}</el-descriptions-item>
      </el-descriptions>
    <div class="btn">
      <el-table ref="multipleTable" :data="detailed" border row-key="id">
              <!-- <el-table-column :label="$t('序号')" type="index" align="center" width="50"></el-table-column> -->
              <el-table-column :label="$t('收款账户')" align="center" prop="accountName" />
              <el-table-column :label="$t('实收金额')" align="center" prop="amount" />
              <el-table-column :label="$t('实收币种')" align="center" prop="marks">
                <template slot-scope="scope">
                  {{getCurrencyLabel(scope.row.currencyId)}}
                </template>
              </el-table-column>
              <el-table-column :label="$t('汇率')" align="center" prop="rate" />
              <el-table-column align="center" prop="writeOffAmount" >
                <template #header>
                  {{ $t('兑核销基准金额') }}（{{getCurrencyLabel(showCurrencyId)}}）
                </template>
              </el-table-column>
              <el-table-column :label="$t('实收日期')" align="center" prop="amountDate">
              </el-table-column>
              <el-table-column :label="$t('水单号')" align="center" prop="billNo" />
              <el-table-column :label="$t('水单附件')" align="center" prop="attr">
                <template slot-scope="scope" v-if="scope.row.attr">
                  <div v-for="(v, i) in scope.row.attr" :key="i"><el-link :href="v.url" type="primary" target="_blank">{{ v.name }}</el-link></div>
                </template>
              </el-table-column>
            </el-table>
    </div>
    <div class="btn">
      <el-button
        size="mini"
        type="primary"
        @click="$router.push('/financial/receiptDetail?id=' + receiptId)"
        >{{ $t('查看收款单')}}</el-button>
        <el-button
          size="mini"
          type="primary"
          @click="openAddDialog=true"
          >{{ $t('查看银行实收明细')}}</el-button>
    </div>
    <el-dialog v-if="openAddDialog" :visible.sync="openAddDialog" :title="this.$t('银行实收明细详情')" width="50%" append-to-body>
          <div style="padding: 0 24px">
            <el-form ref="addForm" :model="addForm" label-width="250px">
              <el-form-item :label="$t('收款单号')+':'">{{ form.receiptNo }}</el-form-item>
              <el-form-item :label="$t('剩余应收金额')+':'">
                <template >
                  <div v-if="surplusData.length==0">0</div>
                  <div v-else>
                    <div v-for="(amount, currency) in surplusData" :key="currency">
                       <span v-if="amount"> {{amount}}{{getCurrencyLabel(currency)}}</span>
                    </div>
                  </div>
                </template>

              </el-form-item>
              <el-form-item :label="$t('收款账户')+':'" prop="accountNo">
                <span>{{ addForm.accountNo }}</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"
                >
                <el-select
                  v-model="addForm.currencyId"
                  :placeholder="$t('请选择')"
                  :disabled="true"
                  @change="val => currencyIdChange(val)"
                >
                  <el-option
                    v-for="item in currencyList"
                    :key="item.id"
                    :label="$i18n.locale=='zh_CN'?item.titleZh:item.titleEn"
                    :value="item.id"
                  />
                </el-select>
                  <!-- <dict-selector v-if="!isView" :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" v-model="addForm.currencyId" @change="val => currencyIdChange(val)"/> -->
                  <!-- <span v-else>{{ addForm.currencyId }}</span> -->
                  <!-- <dict-tag v-else :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="addForm.currencyId" /> -->
                </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(6):'' }}</span>
              </el-form-item>
              <el-form-item
                :label="$t('水单附件')+':'"
                prop="attr"
              >
                <div v-if="addForm.attr.length>0">
                  <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>
                <div v-else>{{$t('无')}}</div>
              </el-form-item>
              <el-form-item :label="$t('水单号')+':'" prop="billNo">
                <span>{{ addForm.billNo }}</span>
              </el-form-item>
            </el-form>
          </div>
        </el-dialog>
  </div>
</template>

<script>

import { getCustomer } from '@/api/ecw/customer'
import {
  getReceiptInfoByIds,
  getReceivableItem,
  getInvoicingItem,
  getReceiptAccountList,
  getReceiptApprove
} from "@/api/ecw/financial";
import { getCurrencyPage } from "@/api/ecw/currency";
import NP from 'number-precision'


export default {
  props:{
      id: [String, Number],
  },
  data() {
    return {
      form: {},
      currencyList:[],
      list:[],
      detailed: [],
      showCurrencyId:0,
      surplusData:[],
      openAddDialog:false,
      collectionAmount: [],
      addForm:{},
      receiptId:0,
      receiptItemId:0,
      reason:''
    }
  },
  watch:{
      id(){
          this.getCurrencyData()
      },
      currencyList(){
        this.getData()
      },
      form(){
        this.getList()
        this.getListData()
      },
  },
  created() {
      if(this.id){
        this.getCurrencyData()
      }
  },
  methods: {
    getData(){
      getReceiptApprove(this.id).then(res => {
          if(res.data.receiptId){
            this.receiptId = res.data.receiptId
            this.receiptItemId = res.data.receiptItemId
            this.reason = res.data.reason
             this.getReceiptInfo()
          }
      })

    },
    // 获取汇率
   getCurrencyData(){
     getCurrencyPage(this.params).then(res => {this.currencyList = res.data.list})
   },
   getList() {
     getReceivableItem({ id: this.receiptId }).then(res => {
       res.data = res.data.map(v => ({
         ...v,
         amountDate: this.parseTime(v.amountDate, '{y}-{m}-{d}'),
         accountNo: +v.accountNo,
         rate:parseFloat(v.rate).toFixed(6),
         attr: v.attr ? v.attr.split(',').map(t => ({ name: t.slice(t.lastIndexOf('/') + 1), url: t })) : []
       }))
       this.addForm = res.data.find(v=>v.id==this.receiptItemId)
       this.detailed = []
       this.detailed.push(this.addForm)
       this.getCollectionData()
     })
   },
   getReceiptInfo(){
       getReceiptInfoByIds({ id: this.receiptId }).then(res => {
        this.form = res.data
        getCustomer(this.form.customerId).then(res => {
          this.form.customerName = res?.data?.name
        })
      })
    },
    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 ''
    },
    getListData(){
      getInvoicingItem({ id: this.receiptId }).then(res => {

        this.list = [...res.data]
        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
          })
        }
        this.showCurrencyId = 1
        if (groupList.length === 1) this.showCurrencyId = groupList[0].currencyId
      })
    },
    getCollectionData(){
      getReceiptAccountList({ id: this.receiptId }).then(res => {
        var n
        // 收款总计
        var amountList =[]
        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)
            n = res.data.find(v => v.currencyId == item.id)
            n && (n.discountTotal = discountNaira)
          }
          var dollarList = res.data.filter(v => v.collectionCurrencyId == item.id)

          if(dollarList.length>0){
            var dollar = dollarList.reduce((total, currentValue) => NP.plus(total, currentValue.collectionAmount), 0).toFixed(2)
             amountList.push({currencyId:item.id,currencyNameEn:item.titleEn,currencyNameZh:item.titleZh,amount:dollar})
          }

        })
        this.$set(this,'collectionAmount',amountList)
        this.handleAddReceiptItem()
      })
      },
    handleAddReceiptItem() {
      // 已收
      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)
      })
      // 应收
      let collom = []
      // 从期望收费金额中提取应收币种和金额
      this.collectionAmount.forEach(item => {
        collom[item.currencyId] = item.amount
      })
      console.log(recepted)
        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
            }
          }

        })
         console.log(collom)
        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
            }
            }
          }
        })
        console.log(this.surplusData)
    },
  }
}
</script>

<style scoped lang="scss">
  .btn{
    margin-top: 20px;
  }
  .app-container {
    ::v-deep .el-descriptions-item__label {
      font-size:16px;
      font-weight:600;
    }
    ::v-deep .el-descriptions-item__content {
      font-size:16px;
      font-weight:600;
    }
  }
</style>
