<template>
  <div class="app-container">
    <el-form
        ref="form"
        :model="form"
        label-width="120px"
        label-position="left"
        :inline="true"
      >
      <el-card>
        <div v-if="id" slot="header" class="card-title">{{ $t('修改收款单') }}</div>
        <div v-else slot="header" class="card-title">{{ $t('新增收款单') }}</div>
        <!-- <el-descriptions :column="3" border> -->
          <!-- <el-descriptions-item > -->
            <el-form-item
              :label="$t('客户')"
              style="margin-bottom: 0;margin-top: 20px;"
              prop="customerId"
              :span="4"
              :rules="{ required: true, trigger: ['blur', 'change'], message: $t('客户不能为空') }"
            >
              <customer-selector
                v-model="form.customerId"
                @change="customerChange"
              />
            </el-form-item>
  <!--        </el-descriptions-item>
          <el-descriptions-item > -->
            <el-form-item
              :label="$t('部门')"
              style="margin-bottom: 0;margin-top: 20px;"
              prop="departmentId"
              :span="4"
              :rules="{ required: true, trigger: ['blur', 'change'], message: $t('部门不能为空') }"
            >
              <el-select
                v-model="form.departmentId"
                style="width: 300px"
                :placeholder="$t('请选择部门')"
              >
                <el-option
                  v-for="item in deptData"
                  :key="item.id"
                  :label="item.name"
                  :value="item.id"
                />
              </el-select>
            </el-form-item>
            <el-form-item
              :label="$t('业务员')"
              style="margin-bottom: 0;margin-top: 20px;"
              prop="salesmanId"
              :span="4"
              :rules="{ required: true, trigger: ['blur', 'change'], message: $t('业务员不能为空') }"
            >
              <el-select v-model="form.salesmanId" filterable :placeholder="$t('请选择业务员')" @change="v => form.salesmanName = creatorData.find(t => t.id === v).nickname">
                <el-option
                  v-for="item in creatorData"
                  :key="item.id"
                  :label="item.nickname"
                  :value="item.id"
                />
              </el-select>
            </el-form-item>
          <!-- </el-descriptions-item> -->
          <!-- <el-descriptions-item > -->
<!--            <el-form-item
              :label="$t('手续费(RMB)')"
              style="margin-bottom: 0;margin-top: 20px;"
              prop="feeRate"
              :rules="{ required: true, trigger: ['blur', 'change'], message: $t('手续费不能为空') }"
            >
              <el-input
                v-model="form.feeRate"
                :placeholder="$t('请输入手续费')"
              ></el-input>
            </el-form-item> -->
<!--          </el-descriptions-item>
          <el-descriptions-item > -->
            <el-form-item
              :label="$t('备注')"
              style="margin-bottom: 0;margin-top: 20px;"
              prop="remark"
            >
              <el-input v-model="form.remark" :placeholder="$t('备注')"></el-input>
            </el-form-item>
          <!-- </el-descriptions-item> -->
        <!-- </el-descriptions> -->
      </el-card>
      <el-card class="card amountCard">
        <div slot="header" class="card-title">{{ $t('应收明细') }}</div>
        <el-col :span="1.5">
          <el-button
            type="primary"
            plain
            icon="el-icon-plus"
            size="mini"
            @click="handleAdd"
            style="padding: 10px; margin-bottom: 10px"
            >{{ $t('添加未收客户款项') }}</el-button
          >
        </el-col>
        <el-table v-loading="loadings" :data="list" border>
          <el-table-column :label="$t('订单号')" align="center" prop="orderNo" />
          <el-table-column :label="$t('唛头')" align="center" prop="marks" />
          <el-table-column :label="$t('品名')" align="center" prop="title">
            <template slot-scope="scope">
             {{ scope.row.titleZh?(scope.row.titleZh + "(" + scope.row.titleEn + ")"): ''}}
            </template>
          </el-table-column>
          <el-table-column :label="$t('箱数')" align="center" prop="num" />
            <el-table-column :label="$t('体积/重量')" align="center" prop="weight">
              <template slot-scope="scope">
                 {{ scope.row.volume}}/{{ scope.row.weight}}
                </template>
              </el-table-column>
          <el-table-column :label="$t('收入类型')" align="center" prop="feeType">
            <template slot-scope="scope">
              <dict-tag
                :type="DICT_TYPE.FEE_TYPE"
                :value="scope.row.feeType"
              ></dict-tag>
            </template>
          </el-table-column>
          <el-table-column :label="$t('单价金额')" align="center" prop="unitPrice">
            <template slot-scope="scope">
              <span>{{ scope.row.unitPrice }}{{getCurrencyLabel(scope.row.currencyId)}}</span>
              <!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> -->
            </template>
          </el-table-column>
          <el-table-column :label="$t('总金额')" align="center" prop="totalAmount">
            <template slot-scope="scope">
              <span>{{ scope.row.totalAmount }}{{getCurrencyLabel(scope.row.currencyId)}}</span>

              <!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> -->
            </template>
          </el-table-column>
          <el-table-column :label="$t('优惠金额')" align="center">
            <template slot-scope="scope">
             <span> {{ scope.row.discountTotal ? `${scope.row.discountTotal}`:0}}</span>
              {{getCurrencyLabel(scope.row.currencyId)}}
			  <!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> -->
              <span v-if="scope.row.discountTotal">{{scope.row.discountRemark?('('+scope.row.discountRemark+')'): '' }}</span>
            </template>
          </el-table-column>
          <el-table-column :label="$t('操作')" align="center">
            <template slot-scope="scope">
              <el-button v-if="scope.row.type !== 'total'" type="text" @click="addDiscount(scope.row, scope.$index)">{{ scope.row.discountTotal ? $t('修改优惠') : $t('新增优惠') }}</el-button>
              <el-button v-if="scope.row.type !== 'total'" type="text" @click="deleteListRow(scope.$index)">{{ $t('删除') }}</el-button>
            </template>
          </el-table-column>
        </el-table>
<!--        <el-descriptions :column="2" border class="card">
          <el-descriptions-item > -->
            <el-form-item
              :label="$t('是否需要开票')+':'"
              style="margin-bottom: 0;margin-top: 20px;"
              prop="openInvoice"
              required
              :rules="{ required: true, trigger: ['blur', 'change'], message: $t('请选择是否需要开票') }"
            >
              <el-select
                v-model="form.openInvoice"
                :placeholder="$t('请选择是否需要开票')"
              >
                <el-option :value="1" :label="$t('是')"></el-option>
                <el-option :value="0" :label="$t('否')"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item
              :label="$t('核销基准币种')+':'"
              style="margin-bottom: 0;margin-top: 20px;"
            >
			{{getCurrencyLabel(showCurrencyId)}}
             <!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="showCurrencyId" /> -->
            </el-form-item>
<!--          </el-descriptions-item>
          <el-descriptions-item :label="$t('核销基准币种')">

          </el-descriptions-item>
        </el-descriptions> -->
      </el-card>
      <el-card v-if="showInvoice" class="card">
        <div slot="header" class="card-title">{{ $t('开票资料') }}</div>
        <el-descriptions :column="3" border>
          <el-descriptions-item :label="$t('发票抬头')">
            <el-form-item
              label=""
              label-width="0"
              style="margin-bottom: 0"
              prop="invoice"
              :rules="{ required: true, trigger: ['blur', 'change'], message: $t('请输入发票抬头') }"
            >
              <el-input v-model="form.invoice"></el-input>
            </el-form-item>
          </el-descriptions-item>
          <el-descriptions-item :label="$t('纳税人识别号')">
            <el-form-item
              label=""
              label-width="0"
              style="margin-bottom: 0"
              prop="taxpayer"
              :rules="{ required: true, trigger: ['blur', 'change'], message: $t('请输入纳税人识别号') }"
            >
              <el-input v-model="form.taxpayer"></el-input>
            </el-form-item>
          </el-descriptions-item>
          <el-descriptions-item :label="$t('开户行')">
            <el-form-item
              label=""
              label-width="0"
              style="margin-bottom: 0"
              prop="accountBank"
              :rules="{ required: true, trigger: ['blur', 'change'], message: $t('请输入开户行') }"
            >
              <el-input v-model="form.accountBank"></el-input>
            </el-form-item>
          </el-descriptions-item>
          <el-descriptions-item :label="$t('账号')">
            <el-form-item
              label=""
              label-width="0"
              style="margin-bottom: 0"
              prop="accountName"
              :rules="{ required: true, trigger: ['blur', 'change'], message: $t('请输入账号') }"
            >
              <el-input v-model="form.accountName"></el-input>
            </el-form-item>
          </el-descriptions-item>
          <el-descriptions-item :label="$t('项目')">
            <el-form-item
              label=""
              label-width="0"
              style="margin-bottom: 0"
              prop="projectName"
              :rules="{ required: true, trigger: ['blur', 'change'], message: $t('请输入项目') }"
            >
              <el-input v-model="form.projectName"></el-input>
            </el-form-item>
          </el-descriptions-item>
          <el-descriptions-item :label="$t('税率%')">
            <el-form-item
              label=""
              label-width="0"
              style="margin-bottom: 0"
              prop="taxRate"
              :rules="{ required: true, trigger: ['blur', 'change'], message: $t('请输入税率') }"
            >
              <el-input v-model="form.taxRate"></el-input>
            </el-form-item>
          </el-descriptions-item>
          <el-descriptions-item :label="$t('开票地址/电话')">
            <el-form-item
              label=""
              label-width="0"
              style="margin-bottom: 0"
              prop="addressPhone"
              :rules="{ required: true, trigger: ['blur', 'change'], message: $t('请输入开票地址/电话') }"
            >
              <el-input v-model="form.addressPhone"></el-input>
            </el-form-item>
          </el-descriptions-item>
        </el-descriptions>
      </el-card>
      <el-card class="card">
        <div slot="header" class="card-title">{{ $t('收款信息') }}</div>
        <el-table :data="form.receiptAccountList" border :key="form.receiptAccountList.length">
          <el-table-column :label="$t('应收币种')" align="center">
            <template slot-scope="scope">
              {{getCurrencyLabel(scope.row.currencyId)}}
            </template>
          </el-table-column>
          <el-table-column :label="$t('应收金额')" align="center" prop="receivableAmount">
            <template slot-scope="scope" v-if="scope.row.type !== 'total'">
              {{ `${NP.minus(scope.row.receivableAmount, scope.row.discountTotal || 0)}${scope.row.discountTotal > 0 ? `(${scope.row.receivableAmount} - ${scope.row.discountTotal})` : ''}` }}
            </template>
          </el-table-column>
          <el-table-column align="center">
            <template #header>
              {{ $t('核销基准币种')+'（'+getCurrencyLabel(showCurrencyId)+'）'+ $t('汇率') }}
            </template>
            <template slot-scope="scope">
              <template v-if="scope.row.type !== 'total'">
                <span v-if="showCurrencyId === scope.row.currencyId">{{ scope.row.writeOffRate }}</span>
                <el-form-item
                  v-else
                  label=""
                  label-width="0"
                  style="margin-bottom: 0"
                  :prop="`receiptAccountList.${scope.$index}.writeOffRate`"
                >
                  <el-input v-model="scope.row.writeOffRate" @input="() => writeOffRateChange(scope.row, scope.$index)"></el-input>
                </el-form-item>
              </template>
              <template v-else>
                {{ $t('应核销总金额')+'（'+getCurrencyLabel(showCurrencyId)+'）'}}
              </template>
            </template>
          </el-table-column>
          <el-table-column align="center" prop="writeOffAmount">
            <template #header>
              {{ $t('核销基准金额')+'（'+getCurrencyLabel(showCurrencyId)+'）'}}
            </template>
          </el-table-column>
          <el-table-column :label="$t('期望收款账户')" align="center">
            <template slot-scope="scope">
              <el-form-item
                v-if="scope.row.type !== 'total'"
                label=""
                label-width="0"
                style="margin-bottom: 0"
                :prop="`receiptAccountList.${scope.$index}.platformAccountId`"
              >
                <el-select
                  v-model="scope.row.platformAccountId"
                  :placeholder="$t('请选择收款账户')"
                >
                  <el-option
                    v-for="item in bankData"
                    :key="item.id"
                    :label="item.baAccountName + '(' + item.baAccountNum + ')'"
                    :value="item.id"
                  />
                </el-select>
              </el-form-item>
            </template>
          </el-table-column>
          <el-table-column :label="$t('期望收款币种')" align="center">
            <template slot-scope="scope">
              <el-form-item
                v-if="scope.row.type !== 'total'"
                label=""
                label-width="0"
                style="margin-bottom: 0"
                :prop="`receiptAccountList.${scope.$index}.collectionCurrencyId`"
              >
              <el-select
                v-model="scope.row.collectionCurrencyId"
                :placeholder="$t('请选择')"
                @change="val => currencyIdChange(val, scope.row, scope.$index)"
              >
                <el-option
                  v-for="item in currencyList"
                  :key="item.id"
                  :label="$i18n.locale=='zh_CN'?item.titleZh:item.titleEn"
                  :value="item.id"
                />
              </el-select>
              </el-form-item>
            </template>
          </el-table-column>
          <el-table-column :label="$t('期望收款汇率')" align="center">
            <template slot-scope="scope">
              <el-form-item
                v-if="scope.row.type !== 'total'"
                label=""
                label-width="0"
                style="margin-bottom: 0"
                :prop="`receiptAccountList.${scope.$index}.collectionRate`"
              >
                <el-input v-model="scope.row.collectionRate" @input="() => rateChange(scope.row, scope.$index)"></el-input>
              </el-form-item>
              <span v-else>{{ $t('期望收费金额') }}</span>
            </template>
          </el-table-column>
          <el-table-column :label="$t('期望收款金额')" align="center" prop="collectionAmount">
            <template slot-scope="scope">
              <span v-if="scope.row.type !== 'total'">{{ scope.row.collectionAmount }}</span>
              <div v-else>
                <div v-for="itemAmount in scope.row.collectionAmount">{{$i18n.locale=='zh_CN'?itemAmount.currencyNameZh:itemAmount.currencyNameEn}}: {{ itemAmount.amount}}</div>
<!--                <div v-if="scope.row.collectionAmount[1]">{{ $t('人民币') }}: {{ scope.row.collectionAmount[1].toFixed(6) }}</div>
                <div v-if="scope.row.collectionAmount[2]">{{ $t('奈拉') }}: {{ scope.row.collectionAmount[2].toFixed(6) }}</div>
                <div v-if="scope.row.collectionAmount[3]">{{ $t('西非法郎') }}: {{ scope.row.collectionAmount[3].toFixed(6) }}</div> -->
              </div>
              <!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> -->
            </template>
          </el-table-column>
        </el-table>
        <el-descriptions :column="2" border class="card">
          <el-descriptions-item :label="$t('账单汇率有效期')">
            <el-form-item
              label=""
              label-width="0"
              style="margin-bottom: 0"
              prop="rateValidateDate"
            >
              <el-date-picker
                v-model="form.rateValidateDate"
                type="datetime"
                value-format="yyyy-MM-dd HH:mm:ss"
                :placeholder="$t('选择日期时间')">
              </el-date-picker>
            </el-form-item>
          </el-descriptions-item>
        </el-descriptions>
      </el-card>
    </el-form>
    <div slot="footer" style="margin: 20px 0">
      <el-button v-if="id==0||form.state==0" type="primary" :loading="saveBtnLoading" @click="submitForm(1)">{{ $t('保存草稿') }}</el-button>
      <el-button v-else type="primary" :loading="saveBtnLoading" @click="$store.dispatch('tagsView/delCurrentView')">{{ $t('返回') }}</el-button>
      <el-button type="primary" :loading="saveBtnLoading" @click="submitForm(0)">{{ id&&form.state!=0 ? $t('修改') : $t('新增收款单') }}</el-button>
    </div>
    <el-dialog
      :visible.sync="open"
      :title="$t('添加未收客户款项')"
      width="80%"
      append-to-body
      @open="getList"
    >
      <div>
        <!-- <div slot="header" class="card-title">{{ $t('添加未收客户款项') }}</div> -->
        <!-- 搜索工作栏 -->
        <el-form
          v-if="open"
          :model="queryParams"
          ref="queryForm"
          size="small"
          :inline="true"
          label-width="80px"
        >
          <el-row>
            <el-form-item :label="$t('始发仓')">
              <el-select
                v-model="queryParams.departureId"
                :placeholder="$t('请选择始发地')"
              >
                <el-option
                  v-for="item in expoerCityList"
                  :label="item.titleZh"
                  :value="item.id"
                  :key="item.id"
                ></el-option>
              </el-select>
            </el-form-item>
            <el-form-item :label="$t('目的仓')">
              <el-select
                v-model="queryParams.objectiveId"
                :placeholder="$t('请选择始发地')"
              >
                <el-option
                  v-for="item in importCityList"
                  :label="item.titleZh"
                  :value="item.id"
                  :key="item.id"
                ></el-option>
              </el-select>
            </el-form-item>
            <el-form-item :label="$t('运输方式')">
              <dict-selector
                :type="DICT_TYPE.ECW_TRANSPORT_TYPE"
                v-model="queryParams.transportId"
                formatter="number"
              />
            </el-form-item>
            <el-form-item :label="$t('出货渠道')">
              <el-select
                v-model="queryParams.channelId"
                :placeholder="$t('请选择出货渠道')"
              >
                <el-option
                  v-for="item in channelList"
                  :label="item.nameZh"
                  :value="item.channelId"
                  :key="item.channelId"
                ></el-option>
              </el-select>
            </el-form-item>
          </el-row>
          <el-row>
            <el-form-item :label="$t('报关方式')">
              <dict-selector
                :type="DICT_TYPE.ECW_CUSTOMS_TYPE"
                v-model="queryParams.customsType"
              />
            </el-form-item>
            <el-form-item :label="$t('控货')">
              <dict-selector
                :type="DICT_TYPE.INFRA_BOOLEAN_STRING"
                v-model="queryParams.control"
              />
            </el-form-item>
            <el-form-item :label="$t('客户名称')">
              <customer-selector
                v-model="queryParams.consignorId"
                @change="consignor = $event"
              />
            </el-form-item>
          </el-row>
          <el-form-item :label="$t('订单编号')" prop="orderNo">
            <el-input
              v-model="queryParams.orderNo"
              :placeholder="$t('请输入订单编号')"
              clearable
              @keyup.enter.native="handleQuery"
            />
          </el-form-item>

          <el-form-item :label="$t('自编号')" prop="selfNo">
            <el-input
              v-model="queryParams.selfNo"
              :placeholder="$t('请输入自编号')"
              clearable
              @keyup.enter.native="handleQuery"
            />
          </el-form-item>

          <el-form-item>
            <el-button type="primary" icon="el-icon-search" @click="handleQuery"
              >{{$t('查询')}}</el-button
            >
          </el-form-item>
        </el-form>
        <el-table
          ref="multipleTable"
          v-loading="loading1"
          :data="orderData"
          border
          @selection-change="handleSelectionChange"
          row-key="id"
          height="calc(100vh - 480px)"
        >
          <el-table-column type="selection" width="55" :reserve-selection="true"> </el-table-column>
          <el-table-column :label="$t('订单号')" align="center" prop="orderNo" />
          <el-table-column :label="$t('唛头')" align="center" prop="marks" />
          <el-table-column :label="$t('品名')" align="center" prop="title">
            <template slot-scope="scope">
              {{ scope.row.titleZh?(scope.row.titleZh + "(" + scope.row.titleEn + ")"): ''}}
            </template>
          </el-table-column>
          <el-table-column :label="$t('箱数')" align="center" prop="num" />
          <el-table-column :label="$t('体积/重量')" align="center" prop="weight">
            <template slot-scope="scope">
               {{ scope.row.volume}}/{{ scope.row.weight}}
              </template>
            </el-table-column>
          <el-table-column :label="$t('发货人')" align="center" prop="consignorName" />
          <el-table-column :label="$t('收货人')" align="center" prop="consigneeName" />
          <el-table-column :label="$t('订单状态')" align="center" prop="status">
            <template slot-scope="scope">
              <dict-tag
                :type="DICT_TYPE.ORDER_STATUS"
                :value="scope.row.status"
              />
            </template>
          </el-table-column>
          <el-table-column :label="$t('收入类型')" align="center" prop="feeType">
            <template slot-scope="scope">
              <dict-tag
                :type="DICT_TYPE.FEE_TYPE"
                :value="scope.row.feeType"
              ></dict-tag>
            </template>
          </el-table-column>
          <!-- <el-table-column :label="$t('单价美元')" align="center" prop="unitPrice" /> -->
          <el-table-column :label="$t('单价')" align="center" prop="unitPrice">
            <template slot-scope="scope">
              <span>{{ scope.row.unitPrice }}{{getCurrencyLabel(scope.row.currencyId)}}</span>
              <!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> -->
            </template>
          </el-table-column>
          <el-table-column :label="$t('总金额')" align="center" prop="totalAmount">
            <template slot-scope="scope">
              <span>{{ scope.row.totalAmount }}{{getCurrencyLabel(scope.row.currencyId)}}</span>
              <!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> -->
            </template>
          </el-table-column>
        </el-table>
        <pagination
          v-show="total > 0"
          :total="total"
          :page.sync="queryParams.page"
          :limit.sync="queryParams.rows"
          @pagination="getList"
        />
        <!-- </el-card> -->
        <div slot="footer" class="dialog-footer">
          <el-button type="primary" @click="saveSelectList">{{ $t('确认添加') }}</el-button>
          <el-button @click="hiddenDialog">{{ $t('取消') }}</el-button>
        </div>
      </div>
    </el-dialog>
    <el-dialog v-if="discountVisible" :visible.sync="discountVisible" :title="$t('优惠信息确认')" width="60%" append-to-body>
      <el-form label-width="120px">
        <el-form-item v-if="form.receiptNo" :label="$t('收款单号')">
          {{ form.receiptNo }}
        </el-form-item>
        <el-table :data="[selectListRow]" border style="margin-bottom: 22px">
          <el-table-column :label="$t('订单号')" align="center" prop="orderNo" />
          <el-table-column :label="$t('唛头')" align="center" prop="marks" />
          <el-table-column :label="$t('品名')" align="center" prop="title">
            <template slot-scope="scope">
              {{ scope.row.titleZh?(scope.row.titleZh + "(" + scope.row.titleEn + ")"): ''}}
            </template>
          </el-table-column>
          <el-table-column :label="$t('箱数')" align="center" prop="num" />
          <el-table-column :label="$t('体积/重量')" align="center" prop="weight">
            <template slot-scope="scope">
               {{ scope.row.volume}}/{{ scope.row.weight}}
              </template>
            </el-table-column>
          <el-table-column :label="$t('收入类型')" align="center" prop="feeType">
            <template slot-scope="scope">
              <dict-tag
                :type="DICT_TYPE.FEE_TYPE"
                :value="scope.row.feeType"
              ></dict-tag>
            </template>
          </el-table-column>
          <el-table-column :label="$t('单价金额')" align="center" prop="unitPrice">
            <template slot-scope="scope">
              <span>{{ scope.row.unitPrice }}{{getCurrencyLabel(scope.row.currencyId)}}</span>
              <!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> -->
            </template>
          </el-table-column>
          <el-table-column :label="$t('总金额')" align="center" prop="totalAmount">
            <template slot-scope="scope">
              <span>{{ scope.row.totalAmount }}{{getCurrencyLabel(scope.row.currencyId)}}</span>
              <!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> -->
            </template>
          </el-table-column>
        </el-table>
        <el-form-item :label="$t('总金额')">
          {{ selectListRow.totalAmount }}{{getCurrencyLabel(selectListRow.currencyId)}}
        </el-form-item>
        <el-form-item :label="$t('优惠金额')">
          <el-input v-model="discountForm.discountTotal" type="number" min="0" :max="selectListRow.totalAmount" @input="checkDiscount" style="width: 300px" ></el-input>
          &nbsp;&nbsp;{{getCurrencyLabel(selectListRow.currencyId)}}

        </el-form-item>
        <el-form-item :label="$t('优惠原因')">
          <el-input v-model="discountForm.discountRemark" type="textarea" style="width: 300px"></el-input>
        </el-form-item>
        <el-form-item :label="$t('优惠后')">
          {{ (selectListRow.totalAmount - (discountForm.discountTotal || 0)).toFixed(2)}}
		  {{getCurrencyLabel(selectListRow.currencyId)}}
        </el-form-item>
        <el-form-item v-if="opnotice" :label="$t('操作人')">
          {{ discountForm.author }}
        </el-form-item>
        <el-form-item v-if="opnotice" :label="$t('操作时间')">
          {{ discountForm.time }}
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="saveDiscount">{{$t('提交')  }}</el-button>
        <el-button @click="cancelDiscount">{{ $t('取消') }}</el-button>
      </div>
    </el-dialog>
  </div>
</template>

<script>
import { listSimpleUsers } from "@/api/system/user";
import { DICT_TYPE } from "@/utils/dict";
import { getToken } from "@/utils/auth";
import CustomerSelector from "@/components/CustomerSelector";
import { getBankAccountPage } from "@/api/ecw/bankAccount";
import { listSimpleDepts } from "@/api/system/dept";
import { getChannelList } from "@/api/ecw/channel";
import { getTradeCityList } from "@/api/ecw/region";
import { createReceipt, getReceivableList, getReceivableInfoByIds, getReceiptInfoByIds, getReceiptAccountList, getInvoicingItem, updateReceipt, updateReceivableDiscountById, getReceivableDiscountLogById } from "@/api/ecw/financial";
import {getCustomer} from '@/api/ecw/customer'
import NP from 'number-precision'
  import {getOrder} from '@/api/ecw/order'
import { getCurrencyPage } from "@/api/ecw/currency";
import ret from "bluebird/js/release/util";
import dayjs from "dayjs";
import { getUserProfile } from "@/api/system/user";
import {getWarehouseList} from '@/api/ecw/warehouse'

export default {
  name: "CreatCollection",
  components: {
    CustomerSelector,
  },
  data() {
    return {
      NP,
      loadings: false,
      loading1: false,
      uploadFileUrl: process.env.VUE_APP_BASE_API + "/app-api/file/upload", // 上传的图片服务器地址
      form: {
        receiptAccountList: []
      },
      creatorData: [],
      list: [],
      // fileList: [],
      orderData: [],
      opnotice:false,
      dialogTableKey: 0,
      total: 0,
      headers: {
        Authorization: "Bearer " + getToken(),
      },
      loading: "",
      open: false,
      bankData: [],
      params: {
        page: 1,
        rows: 20,
      },
      deptData: [],
      deptArr: [],
      oadings: false,
      channelList: [],
      queryParams: {
        page: 1,
        rows: 20,
      },
      multipleSelection: [],
      tradeCityList: [],
      id: 0,
      receiptId: 0,
      currencyList: [],
      saveBtnLoading: false,
      discountVisible: false,
      discountForm: {},
      selectListRow: {},
      selectListIndex: 0,
      flag: false,
      warehouseList:[]
    };
  },
  async created() {
    getUserProfile().then(res => {
      this.discountForm.author = res.data.username
    })
    // 获取汇率
    await getCurrencyPage(this.params).then(res => this.currencyList = res.data.list)
    getWarehouseList().then(res => this.warehouseList = res.data)
    let that = this;
    if (that.$route.query.id) {
      this.flag = true
      this.id = this.$route.query.id;
      console.log(this.id)
      getReceiptInfoByIds({ id: this.id }).then(res => {
        res.data.rateValidateDate = dayjs(res.data.rateValidateDate).format('YYYY-MM-DD HH:mm:ss')
        this.form = Object.assign({}, this.form, res.data)
      })
      await getInvoicingItem({ id: this.id }).then(res => {
        this.list = [...res.data]
      })
      getReceiptAccountList({ id: this.id }).then(res => {
        if (res.data.length > 0) {
          // totalAmount
          res.data = [...res.data, {
            type: 'total',
            writeOffAmount: res.data.reduce((total, currentValue) => NP.plus(total, currentValue.writeOffAmount || 0), 0),
            collectionAmount: []
          }]
        }
        this.$set(this.form, 'receiptAccountList', [...res.data])
        this.$nextTick(() => {
          // const dollarList = this.list.filter(v => v.currencyId === 1)
          // const discountDollar = dollarList.reduce((total, currentValue) => NP.plus(total, currentValue.discountTotal || 0), 0)
          // const d = this.form.receiptAccountList.find(v => v.currencyId == 1)
          // d && (d.discountTotal = discountDollar)

          // const rmbList = this.list.filter(v => v.currencyId === 2)
          // const discountRmb = rmbList.reduce((total, currentValue) => NP.plus(total, currentValue.discountTotal || 0), 0)
          // const r = this.form.receiptAccountList.find(v => v.currencyId == 2)
          // r && (r.discountTotal = discountRmb)

          // const nairaList = this.list.filter(v => v.currencyId === 3)
          // const discountNaira = nairaList.reduce((total, currentValue) => NP.plus(total, currentValue.discountTotal || 0), 0)
          // const n = this.form.receiptAccountList.find(v => v.currencyId == 3)
          // n && (n.discountTotal = discountNaira)

          this.form.receiptAccountList.forEach((item, index) => {
            this.rateChange(item, index)
            // this.calculation()
          });
        })
      })
    }
    if (that.$route.query.receiptId && that.$route.query.receiptId !== '0') {
      this.receiptId = this.$route.query.receiptId;
      getReceivableInfoByIds({ id: this.receiptId }).then(res => {
        this.list = [{...res.data}]
        this.calculation()

          getOrder(res.data.orderId).then(response => {
            // console.log(response.data)
            if(response.data.customerId) this.$set(this.form,'customerId',response.data.customerId)
          })
      })
    }

    // this.getList();
    // if(that.$route.query.consignorId){
    //   this.queryParams.consignorId = this.$route.query.consignorId
    // }
    // if(that.$route.query.writeOffName){
    //   this.form.writeOffName = this.$route.query.writeOffName
    // }
    listSimpleUsers().then((res) => (that.creatorData = res.data));
    getChannelList().then((res) => (that.channelList = res.data));
    getTradeCityList().then((res) => (that.tradeCityList = res.data));
    getBankAccountPage(that.params).then(
      (res) => (that.bankData = res.data.list)
    );
    listSimpleDepts().then((res) => {
      res.data.forEach((item) => {
        if (item.parentId == 0) {
          that.deptArr.push(item);
        } else {
          that.deptData.push(item);
        }
      });

      that.deptData.forEach((value) => {
        var dept = that.deptArr.filter((itt) => itt.id == value.parentId);
        if (dept.length > 0) {
          value.name = dept[0].name + " | " + value.name;
        }
      });
    });
  },
  computed: {
    expoerCityList() {
      // return this.tradeCityList.filter((item) => item.type == 2);
      return this.warehouseList.filter(item => item.tradeType == 2 || item.tradeType == 3)
    },
    importCityList() {
      // return this.tradeCityList.filter((item) => item.type == 1);
      return this.warehouseList.filter(item => item.tradeType == 1 || item.tradeType == 3)
    },
    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
    },
    showInvoice() {
      return this.form.openInvoice == 1
    }
  },
  methods: {
	  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 ''
	  },
    checkDiscount(e){
      if(e>this.selectListRow.totalAmount){
        this.discountForm.discountTotal = this.selectListRow.totalAmount
      }
    },
    currencyIdChange(val, row, index) {
      row.collectionCurrencyId = val
      if (val == row.currencyId) row.collectionRate = 1
      else {
        // if (row.currencyId == 1 && val == 3) row.collectionRate = this.UStoRMB()
        // if (row.currencyId == 1 && val == 2) row.collectionRate = this.UStoNAN()
        // if (row.currencyId == 3 && val == 1) row.collectionRate = this.RMBtoUS()
        // if (row.currencyId == 3 && val == 2) row.collectionRate = this.RMBtoNAN()
        // if (row.currencyId == 2 && val == 1) row.collectionRate = this.NANtoUS()
        // if (row.currencyId == 2 && val == 3) row.collectionRate = this.NANtoRMB()
         row.collectionRate = NP.divide(this.currencyList.find(v => v.id === row.currencyId).huilv, this.currencyList.find(v => v.id === val).huilv).toFixed(6)
      }

      this.rateChange(row, index)
    },
    writeOffRateChange(row, index) {
      row.writeOffAmount = NP.times(row.writeOffRate || 0, NP.minus(row.receivableAmount, row.discountTotal))

      const writeOffAmountTotal = this.form.receiptAccountList.filter(v => v.type !== 'total').reduce((total, currentValue) => NP.plus(total, currentValue.writeOffAmount || 0), 0)
      this.form.receiptAccountList[this.form.receiptAccountList.length -1].writeOffAmount = writeOffAmountTotal
    },
    rateChange(row, index) {
      console.log(row)
      row.receivableAmount && (row.collectionAmount = NP.times(row.collectionRate || 0, NP.minus(row.receivableAmount, row.discountTotal||0)).toFixed(6))
      this.form.receiptAccountList[index] = {...row}

      setTimeout(() => {
        // 收款总计
        var amountList =[]
        this.currencyList.forEach((item,index)=>{
          var dollarList = this.form.receiptAccountList.filter(v => v.collectionCurrencyId == item.id)
          if(dollarList.length>0){
            var dollar = dollarList.reduce((total, currentValue) => NP.plus(total, currentValue.collectionAmount), 0).toFixed(6)
            amountList.push({currencyId:item.id,currencyNameEn:item.titleEn,currencyNameZh:item.titleZh,amount:dollar})
          }
        })
        // const dollarList = this.form.receiptAccountList.filter(v => v.collectionCurrencyId == 1)
        // const dollar = dollarList.reduce((total, currentValue) => NP.plus(total, currentValue.collectionAmount), 0)

        // const rmbList = this.form.receiptAccountList.filter(v => v.collectionCurrencyId == 3)
        // const rmb = rmbList.reduce((total, currentValue) => NP.plus(total, currentValue.collectionAmount), 0)

        // const nairaList = this.form.receiptAccountList.filter(v => v.collectionCurrencyId == 2)
        // const naira = nairaList.reduce((total, currentValue) => NP.plus(total, currentValue.collectionAmount), 0)
        // const faList = this.form.receiptAccountList.filter(v => v.collectionCurrencyId == 6)
        // const fa = faList.reduce((total, currentValue) => NP.plus(total, currentValue.collectionAmount), 0)
        this.form.receiptAccountList[this.form.receiptAccountList.length -1].collectionAmount = amountList
        this.$set(this.form, 'receiptAccountList', [...this.form.receiptAccountList])
      }, 100)
    },
    calculation() {
      const copyList = this.form.receiptAccountList
      this.form.receiptAccountList = []
      this.currencyList.forEach((item,index)=>{
        var dollarList = this.list.filter(v => v.currencyId === item.id)
        if(dollarList.length>0){
          let dollar,discountDollar
            dollar = dollarList.reduce((total, currentValue) => NP.plus(total, currentValue.totalAmount || 0), 0)
            discountDollar = dollarList.reduce((total, currentValue) => NP.plus(total, currentValue.discountTotal || 0), 0)
            var t = copyList.find(v => v.currencyId == item.id)
            this.form.receiptAccountList.push(
              {
                discountTotal: discountDollar,
                currencyId: item.id,
                receivableAmount: dollar,
                writeOffRate:  NP.divide(this.currencyList.find(v => v.id === item.id).huilv, this.currencyList.find(v => v.id === this.showCurrencyId).huilv).toFixed(6),
                platformAccountId: t?.platformAccountId || '',
                collectionCurrencyId:  item.id,
                collectionRate: 1
              }
            )
            this.calculationCount(NP.minus(dollar, discountDollar), item.id)
        }
      })

      // let dollar,discountDollar
      // if (dollarList.length > 0) {
      //   dollar = dollarList.reduce((total, currentValue) => NP.plus(total, currentValue.totalAmount || 0), 0)
      //   discountDollar = dollarList.reduce((total, currentValue) => NP.plus(total, currentValue.discountTotal || 0), 0)
      //   const t = copyList.find(v => v.currencyId == 1)
      //   this.form.receiptAccountList = [
      //     {
      //       discountTotal: discountDollar,
      //       currencyId: 1,
      //       receivableAmount: dollar,
      //       writeOffRate: t?.writeOffRate || (this.showCurrencyId === 1 ? 1 : this.showCurrencyId === 2 ? this.UStoRMB() : this.UStoNAN()),
      //       platformAccountId: t?.platformAccountId || '',
      //       collectionCurrencyId: t?.collectionCurrencyId || 1,
      //       collectionRate: t?.collectionRate || 1
      //     }
      //   ]
      //   this.calculationCount(NP.minus(dollar, discountDollar), 1)
      // }
      // const rmbList = this.list.filter(v => v.currencyId === 2)
      // let rmb,discountRmb
      // if (rmbList.length > 0) {
      //   rmb = rmbList.reduce((total, currentValue) => NP.plus(total, currentValue.totalAmount || 0), 0)
      //   discountRmb = rmbList.reduce((total, currentValue) => NP.plus(total, currentValue.discountTotal || 0), 0)
      //   const t = copyList.find(v => v.currencyId == 2)
      //   this.form.receiptAccountList = [
      //     ...this.form.receiptAccountList,
      //     {
      //       discountTotal: discountRmb,
      //       currencyId: 2,
      //       receivableAmount: rmb,
      //       writeOffRate: t?.writeOffRate || (this.showCurrencyId === 1 ? this.RMBtoUS() : this.showCurrencyId === 2 ? 1 : this.RMBtoNAN()),
      //       platformAccountId: t?.platformAccountId || '',
      //       collectionCurrencyId: t?.collectionCurrencyId || '',
      //       collectionRate: t?.collectionRate || ''
      //     }
      //   ]
      //   this.calculationCount(NP.minus(rmb, discountRmb), 2)
      // }
      // const nairaList = this.list.filter(v => v.currencyId === 3)
      // let naira,discountNaira
      // if (nairaList.length > 0) {
      //   naira = nairaList.reduce((total, currentValue) => NP.plus(total, currentValue.totalAmount || 0), 0)
      //   discountNaira = nairaList.reduce((total, currentValue) => NP.plus(total, currentValue.discountTotal || 0), 0)
      //   const t = copyList.find(v => v.currencyId == 3)
      //   this.form.receiptAccountList = [
      //     ...this.form.receiptAccountList,
      //     {
      //       discountTotal: discountNaira,
      //       currencyId: 3,
      //       receivableAmount: naira,
      //       writeOffRate: t?.writeOffRate || (this.showCurrencyId === 1 ? this.NANtoUS() : this.showCurrencyId === 2 ? this.NANtoRMB() : 1),
      //       platformAccountId: t?.platformAccountId || '',
      //       collectionCurrencyId: t?.collectionCurrencyId || '',
      //       collectionRate: t?.collectionRate || '',
      //       collectionAmount:discountNaira
      //     }
      //   ]
      //   this.calculationCount(NP.minus(naira, discountNaira), 3)
      // }
      if (this.form.receiptAccountList.length > 0) {
        // totalAmount
        const totalt = this.form.receiptAccountList.reduce((total, currentValue) => NP.plus(total, currentValue.writeOffAmount || 0), 0)
        this.form.receiptAccountList = [...this.form.receiptAccountList, {
          type: 'total',
          writeOffAmount: totalt,
          collectionAmount: [this.form.receiptAccountList.discountNaira, 0, 0]
        }]

        this.form.receivableTotalAmount = totalt
      }
      // receiptAccountList: [
          // { currencyId: 1, receivableAmount: 0, writeOffRate: 1, writeOffAmount: 999, platformAccountId: '', currencyId: '', rate: 1, collectionAmount: 0 },
          // { currencyId: 2, receivableAmount: 0, writeOffRate: 1, writeOffAmount: 999, platformAccountId: '', currencyId: '', rate: 1, collectionAmount: 0 },
          // { currencyId: 3, receivableAmount: 0, writeOffRate: 1, writeOffAmount: 999, platformAccountId: '', currencyId: '', rate: 1, collectionAmount: 0 },
        // ]

      if (this.showCurrencyId === 1) { // 美元
        // const usCount = NP.plus(dollar, NP.times(this.RMBtoUS(), rmb),  NP.times(this.NANtoUS(), naira))
        // this.form.receivableDetailList[0].rate = 1
        // this.form.receivableDetailList[0].amount = usCount
        // this.form.receivableDetailList[1].rate || (this.form.receivableDetailList[1].rate = this.UStoRMB())
        // this.form.receivableDetailList[2].rate || (this.form.receivableDetailList[2].rate = this.UStoNAN())
        // this.form.receivableTotalAmount = usCount
        // this.calculationCount(usCount)
      } else if (this.showCurrencyId === 2) { // 人民币
        // const rmbCount = NP.plus(rmb, NP.times(this.UStoRMB(), dollar),  NP.times(this.NANtoRMB(), naira))
        // this.form.receivableDetailList[1].rate = 1
        // this.form.receivableDetailList[1].amount = usCount
        // this.form.receivableDetailList[0].rate || (this.form.receivableDetailList[0].rate = this.RMBtoUS())
        // this.form.receivableDetailList[2].rate || (this.form.receivableDetailList[2].rate = this.RMBtoNAN())
        // this.form.receivableTotalAmount = rmbCount
        // this.calculationCount(rmbCount)
      } else if (this.showCurrencyId === 3) { // 奈拉
        // const nairaCount = NP.plus(naira, NP.times(this.UStoNAN(), dollar),  NP.times(this.RMBtoNAN(), rmb))
        // this.form.receivableDetailList[2].rate = 1
        // this.form.receivableDetailList[2].amount = nairaCount
        // this.form.receivableDetailList[0].rate || (this.form.receivableDetailList[0].rate = this.NANtoUS())
        // this.form.receivableDetailList[1].rate || (this.form.receivableDetailList[1].rate = this.NANtoRMB())
        // this.form.receivableTotalAmount = nairaCount
        // this.calculationCount(nairaCount)
      }

      this.$set(this.form, 'receiptAccountList', [...this.form.receiptAccountList])
    },
    calculationCount(usCount, type) {
      const index = this.form.receiptAccountList.findIndex(v => v.currencyId == type)
      const t = this.form.receiptAccountList[index]
      if (t) {
        t.writeOffAmount = NP.times(t.writeOffRate || 0, usCount)
        this.rateChange(t, index)
      }
    },
    RMBtoUS() {
      return NP.divide(100, this.currencyList.find(v => v.titleEn === 'USD').huilv).toFixed(6)
    },
    NANtoUS() {
      return NP.times(this.RMBtoUS(), this.NANtoRMB()).toFixed(6)
    },
    UStoRMB() {
      return NP.divide(this.currencyList.find(v => v.titleEn === 'USD').huilv, 100).toFixed(6)
    },
    UStoNAN() {
      return NP.times(this.RMBtoNAN(), this.UStoRMB()).toFixed(6)
    },
    RMBtoNAN() {
      return NP.divide(100, this.currencyList.find(v => v.titleEn === 'NGN').huilv).toFixed(6)
    },
    NANtoRMB() {
      return NP.divide(this.currencyList.find(v => v.titleEn === 'NGN').huilv, 100).toFixed(6)
    },
    customerChange(value) {
      if (this.flag) {
        this.flag = false
        return
      }
      this.form.customerName = value.name
      this.form.customerId && getCustomer(this.form.customerId).then(res => {
        this.form = {
          ...this.form,
          invoice: res.data.invoiceTitle,
          taxpayer: res.data.licenseNumber,
          accountBank: res.data.bank,
          accountName: res.data.bankNumber,
          projectName: res.data.project,
          taxRate: res.data.taxRate,
          addressPhone: `${res.data.billingAddress || ''}/${res.data.billingTell || ''}`,
        }
      })
    },
    cancelDiscount() {
      this.discountVisible = false
      this.discountForm = {}
      this.selectListRow = {}
    },
    addDiscount(row, index) {
      this.discountVisible = true
      this.selectListRow = { ...row }
      console.log(this.selectListRow)
      this.selectListIndex = index
      this.$set(this.discountForm, 'time', dayjs().format('YYYY-MM-DD HH:mm:ss'))
      getReceivableDiscountLogById({ id: row.id }).then(res => {
        if (res.data?.creatorName) {
          this.$set(this.discountForm, 'time', dayjs(res.data.createTime).format('YYYY-MM-DD HH:mm:ss'))
          this.$set(this.discountForm, 'discountTotal', res.data.discountTotal)
          this.$set(this.discountForm, 'discountRemark', res.data.discountRemark)
          this.$set(this.discountForm, 'author', res.data.creatorName)
          this.opnotice = true
        }else{
          this.opnotice = false
        }
      })
    },
    saveDiscount() {
      console.log(this.discountForm)
      // this.selectListRow.id
      if (this.discountForm.discountTotal === 0||!this.discountForm.discountTotal) {
        this.$modal.msgError(this.$t('优惠金额不能为空'));
        return
      }
      if (this.discountForm.discountRemark === 0||!this.discountForm.discountRemark) {
        this.$modal.msgError(this.$t('优惠原因不能为空'));
        return
      }
      const params = {
        id: this.selectListRow.id,
        discountTotal: this.discountForm.discountTotal,
        discountRemark: this.discountForm.discountRemark,
        orderNo: this.selectListRow.orderNo,
        orderId: this.selectListRow.orderId,
      }
       updateReceivableDiscountById(params).then(res => {
        if (this.selectListRow.discountTotal) {
          this.$modal.msgSuccess(this.$t('修改成功'));
        } else {
          this.$modal.msgSuccess(this.$t('新增成功'));
        }
        // if(this.id>0){
        //    getInvoicingItem({ id: this.id }).then(res => {
        //     this.list = [...res.data]
        //     this.cancelDiscount()
        //     this.calculation()
        //   })
        // }else{
          setTimeout(()=>{
            getReceivableInfoByIds({ id: this.selectListRow.id }).then(res => {
              this.$set(this.list, this.selectListIndex, {...res.data})
              this.cancelDiscount()
              this.calculation()
            })
          },1000)


        // }


      })
    },
    getList() {
      this.loading1 = true;
      // 处理查询参数
      let params = { ...this.queryParams };
      this.addBeginAndEndTime(params, this.dateType, "createTime");
      // 执行查询
      getReceivableList(params).then((response) => {
        this.orderData = response.data.list;
        this.dialogTableKey ++
        this.total = response.data.total;
        this.loading1 = false;
        this.$nextTick(() => {
          this.list.forEach(itm => {
            const t = this.orderData.find(v => v.id == itm.id)
            t && this.$refs.multipleTable.toggleRowSelection(t, true)
          })
        })
      });
    },
    /** 新增按钮操作 */
    handleAdd() {
      this.open = true;
    },
    hiddenDialog() {
      this.open = false;
    },
    submitForm(addType) {
      const params = {...this.form}
      params.addType = addType

      // params.receiptAccountList = params.receiptAccountList.map(v => Object.assign(v, {  }))

      if (this.list && this.list.length > 0) {
        params.receivableVOList = this.list
      }else{
        this.saveBtnLoading = false
        this.$modal.msgError(this.$t('请添加未收客户款项'));
        return
      }

      // params.receiptAccountList.length = params.receiptAccountList.length - 1

      var saveStatus = true
      params.receiptAccountList.forEach(v => {
        if(v.type!='total'){
          if(!v.platformAccountId){
            saveStatus = false
          }
          var bankname = this.bankData.filter(item=>item.id == v.platformAccountId)
          if(bankname.length>0){
            v.platformAccountName = bankname[0].baAccountName
            v.platformAccountNo = bankname[0].baAccountNum
            v.platformAccountBlankName = bankname[0].baBankName
          }
          delete v.discountTotal
          v.writeOffRate = Number(v.writeOffRate)
        }
      })
      if(!saveStatus){
        this.$modal.msgError(this.$t('请添加收款账户'));
        return
      }
      delete params.receivableDetail


      if (addType === 1) {
        let fieldsToValidate = ['customerId', 'departmentId', 'salesmanId']; // 部分字段校验 保存草稿用
        Promise.all(
          fieldsToValidate.map((field) => {
            return new Promise((resolve, reject) => {
              this.$refs['form'].validateField(field, (errorMessage) => {
                resolve(errorMessage);
              });
            });
          })
        ).then((errorMessages) => {
          let valid = errorMessages.every((errorMessage) => {
            return errorMessage == '';
          });
          if (valid) {
            this.saveBtnLoading = true
            params.receiptAccountList.splice(params.receiptAccountList.length - 1,1)
            if (this.id && this.id != 0) {
              updateReceipt(params).then(res => {
                this.$modal.msgSuccess(this.$t('修改成功'));
                this.$store.dispatch('tagsView/delCurrentView')
              }).finally(() => {
                this.saveBtnLoading = false
              })
            } else {
              params.currencyId = this.showCurrencyId
              createReceipt(params).then(res => {
                this.$modal.msgSuccess(this.$t('保存成功'));
                this.$store.dispatch('tagsView/delCurrentView')
              }).finally(() => {
                this.saveBtnLoading = false
              })
            }
          }
        });
        return
      }
       this.$refs.form.validate ((valid)=>{
        if (valid) {
          this.saveBtnLoading = true
          params.receiptAccountList.splice(params.receiptAccountList.length - 1,1)
          if (this.id && this.id != 0) {
            if(params.state==0) params.state = 1
            updateReceipt(params).then(res => {
              this.$modal.msgSuccess(this.$t('修改成功'));
              this.$store.dispatch('tagsView/delCurrentView')
            }).finally(() => {
              this.saveBtnLoading = false
            })
          } else {
            params.currencyId = this.showCurrencyId
            createReceipt(params).then(res => {
              this.$modal.msgSuccess(this.$t('新增成功'));
               this.$store.dispatch('tagsView/delCurrentView')
            }).finally(() => {
              this.saveBtnLoading = false
            })
          }
        }
      })
    },
    handleSelectionChange(val) {
      this.multipleSelection = val;
    },
    saveSelectList() {
      this.list = this.multipleSelection
      this.open = false;
      this.calculation()
    },
    deleteListRow(index) {
      const list = [...this.list]
      delete list[index]
      this.list = list.filter(v => v)
    },
    /** 搜索按钮操作 */
    handleQuery() {
      this.queryParams.page = 1;
      this.getList()
    },
  },
};
</script>

<style scoped lang="scss">
.card {
  margin-top: 20px;
}
.dialog-footer {
  // padding: 40px;
  text-align: left;
}
.card-title {
  font-size: 18px;
  font-weight: bold;
}
::v-deep .el-descriptions-item__label {
  width: 200px;
}
.amountCard {
  ::v-deep .el-descriptions-item__label {
    width: 20%;
  }
  ::v-deep .el-descriptions-item__content {
    width: 30%;
  }
}
</style>
