<template>
  <div class="app-container">
    <!-- 搜索 -->
    <el-card>
      <el-form
        :model="queryParams"
        ref="queryForm"
        size="small"
        inline
        class="card"
      >
        <el-form-item :label="$t('自编号')" prop="selfNo">
          <el-input v-model="queryParams.selfNo" clearable></el-input>
        </el-form-item>
        <el-form-item
          :label="$t('始发仓')"
          :rules="{ required: true, message: $t('请选择始发仓') }"
          prop="startWarehouseIdList"
          @change="handleSelect"
        >
          <el-select
            v-model="queryParams.startWarehouseIdList"
            
            multiple
            :placeholder="$t('请选择')"
            clearable
          >
            <el-option
              v-for="item in exportWarehouseList"
              :key="item.id"
              :label="$l(item, 'title')"
              :value="item.id"
            />
          </el-select>
        </el-form-item>
        <el-form-item
          :label="$t('目的国')"
          :rules="{ required: true, message: $t('请选择目的国') }"
          prop="destCountryId"
        >
          <el-select
            v-model="queryParams.destCountryId"
            :placeholder="$t('请选择')"
            filterable
            default-first-option
          >
            <el-option
              v-for="item in countryList"
              :key="item.id"
              :label="$l(item, 'title')"
              :value="item.id"
            />
          </el-select>
        </el-form-item>
        <el-form-item :label="$t('目的仓')" prop="destWarehouseIdList">
          <el-select
            v-model="queryParams.destWarehouseIdList"
            multiple
            :placeholder="
              queryParams.destCountryId ? $t('请选择') : $t('请先选择目的国')
            "
            clearable
          >
            <el-option
              v-for="item in importWarehouseList"
              :key="item.id"
              :label="$l(item, 'title')"
              :value="item.id"
            />
          </el-select>
        </el-form-item>
        <el-form-item :label="$t('自编号状态')" prop="boxStatus">
          <dict-selector
            :type="DICT_TYPE.BOX_ORDER_SHIPMENT_STATE"
            v-model="queryParams.boxStatus"
            clearable
          ></dict-selector>
        </el-form-item>
        <el-form-item :label="$t('结算时间')" prop="dateFilter">
          <el-date-picker
            v-model="dateFilter"
            type="datetimerange"
            range-separator="-"
            :start-placeholder="$t('开始日期')"
            :end-placeholder="$t('结束日期')"
            value-format="yyyy-MM-dd HH:mm:ss"
            @change="handleQuery"
          >
          </el-date-picker>
        </el-form-item>
        <el-form-item :label="$t('是否结算')" prop="slStatus">
          <dict-selector
            :type="DICT_TYPE.SETTLEMENT_STATUS"
            v-model="queryParams.slStatus"
            clearable
          ></dict-selector>
        </el-form-item>

        <el-form-item :label="$t('到港时间')" prop="daogangTime">
          <el-date-picker
            v-model="daogangTime"
            type="datetimerange"
            range-separator="-"
            :start-placeholder="$t('开始日期')"
            :end-placeholder="$t('结束日期')"
            value-format="yyyy-MM-dd HH:mm:ss"
            
          >
          </el-date-picker>
        </el-form-item>

        <el-form-item :label="$t('卸柜/到仓时间')" prop="ulWarehouseTime">
          <el-date-picker
            v-model="ulWarehouseTime"
            type="datetimerange"
            range-separator="-"
            :start-placeholder="$t('开始日期')"
            :end-placeholder="$t('结束日期')"
            value-format="yyyy-MM-dd HH:mm:ss"
           
          >
          </el-date-picker>
        </el-form-item>

        <el-form-item :label="$t('清关时间')" prop="qingguanTime">
          <el-date-picker
            v-model="qingguanTime"
            type="datetimerange"
            range-separator="-"
            :start-placeholder="$t('开始日期')"
            :end-placeholder="$t('结束日期')"
            value-format="yyyy-MM-dd HH:mm:ss"
          
          >
          </el-date-picker>
        </el-form-item>

        <el-form-item>
          <el-button
            type="primary"
            icon="el-icon-search"
            @click="handleQuery"
            :loading="loading"
            >{{ $t("查询") }}</el-button
          >
          <el-button
            type="primary"
            :loading="exporting"
            icon="el-icon-download"
            @click="handleExport"
            >{{ $t("导出搜索") }}</el-button
          >
        </el-form-item>
      </el-form>
    </el-card>
    <el-table
      v-loading="loading"
      :data="list"
      border
      class="card"
      :element-loading-text="$t('汇总计算中...')"
      show-summary
      :summary-method="getSummary"
    >
      <el-table-column :label="$t('是否结算')" align="center">
        <template slot-scope="scope">
          <dict-tag
            :type="DICT_TYPE.SETTLEMENT_STATUS"
            :value="scope.row.slStatus"
          ></dict-tag>
        </template>
      </el-table-column>
      <el-table-column :label="$t('No.柜号')" align="center" prop="selfNo">
        <template slot-scope="scope">
          <el-button
            v-if="permissions.indexOf('selfno:report:detail') > -1"
            type="text"
            @click="
              $router.push(
                './self_no_report_detail?containerNumber=' + scope.row.selfNo
              )
            "
            >{{ scope.row.selfNo }}</el-button
          >
          <span v-else>{{ scope.row.selfNo }}</span>
        </template>
      </el-table-column>
      <el-table-column
        :label="$t('应收款(Accounts receivable)USD')"
        prop="summaryInfo.netReceiptsCollectFreightFeeGroup"
      >
        <template slot-scope="{ row }">
          {{ row.summaryInfo.receivableTotalFee
          }}{{ row.summaryInfo.receivableTotalFeeCurrency }}
        </template>
      </el-table-column>
      <el-table-column
        :label="$t('应收款 RECEIVABLE')"
        align="center"
        prop="summaryInfo.receivableTotalFeeGroup"
      >
        <el-table-column
          :label="$t('运费 FREIGHT') + ColumnCurrencyName('Freight')"
          prop="summaryInfo.netReceiptsCollectFreightFeeGroup"
        >
          <template slot-scope="{ row }">
            {{ row.summaryInfo.totalReceivableFreightFee
            }}{{ row.summaryInfo.totalFreightFeeCurrency }}
          </template>
        </el-table-column>
        <el-table-column
          :label="$t('清关费 CLEARING FEE') + ColumnCurrencyName('Clearance')"
        >
          <template slot-scope="{ row }">
            {{ row.summaryInfo.totalReceivableClearanceFee
            }}{{ row.summaryInfo.totalClearanceFeeCurrency }}
          </template>
        </el-table-column>
        <el-table-column
          :label="$t('额外费用 EXTRAL FEE') + ColumnCurrencyName('Other')"
        >
          <template slot-scope="{ row }">
            {{ row.summaryInfo.totalReceivableOtherFee
            }}{{ row.summaryInfo.totalOtherFeeCurrency }}
          </template>
        </el-table-column>
      </el-table-column>
      <el-table-column
        :label="
          'received in ' +
          (dstCountryName || $t('目的国')) +
          `(${$t('目的地实收')})`
        "
        align="center"
        prop=""
      >
        <el-table-column
          :label="$t('运费') + ColumnCurrencyName('Freight')"
          prop="summaryInfo.netReceiptsCollectFreightFeeGroup"
        >
          <template slot-scope="{ row }">
            {{ row.summaryInfo.totalNetReceiptsCollectFreightFee
            }}{{ row.summaryInfo.totalFreightFeeCurrency }}
          </template>
        </el-table-column>
        <el-table-column
          :label="$t('清关费') + ColumnCurrencyName('Clearance')"
          prop="summaryInfo.netReceiptsCollectClearanceFeeGroup"
        >
          <template slot-scope="{ row }">
            {{ row.summaryInfo.totalNetReceiptsCollectClearanceFee
            }}{{ row.summaryInfo.totalClearanceFeeCurrency }}
          </template>
        </el-table-column>
        <el-table-column
          :label="$t('额外费用') + ColumnCurrencyName('Other')"
          prop="summaryInfo.netReceiptsCollectOtherFeeGroup"
        >
          <template slot-scope="{ row }">
            {{ row.summaryInfo.totalNetReceiptsCollectOtherFee
            }}{{ row.summaryInfo.totalOtherFeeCurrency }}
          </template>
        </el-table-column>
      </el-table-column>
      <el-table-column
        :label="$t('received in China(中国实收)')"
        align="center"
        prop=""
      >
        <el-table-column
          :label="$t('运费') + ColumnCurrencyName('Freight')"
          prop="summaryInfo.netReceiptsAdvanceFreightFeeGroup"
        >
          <template slot-scope="{ row }">
            {{ row.summaryInfo.netReceiptsAdvanceFreightFee
            }}{{ row.summaryInfo.totalFreightFeeCurrency }}
          </template>
        </el-table-column>
        <el-table-column
          :label="$t('清关费') + ColumnCurrencyName('Clearance')"
          prop="summaryInfo.netReceiptsAdvanceClearanceFeeGroup"
        >
          <template slot-scope="{ row }">
            {{ row.summaryInfo.totalNetReceiptsAdvanceClearanceFee
            }}{{ row.summaryInfo.totalClearanceFeeCurrency }}
          </template>
        </el-table-column>
        <el-table-column
          :label="$t('额外费用') + ColumnCurrencyName('Other')"
          prop="summaryInfo.netReceiptsAdvanceOtherFeeGroup"
        >
          <template slot-scope="{ row }">
            {{ row.summaryInfo.totalNetReceiptsAdvanceOtherFee
            }}{{ row.summaryInfo.totalOtherFeeCurrency }}
          </template>
        </el-table-column>
      </el-table-column>
      <el-table-column :label="$t('Discounts 折扣')" align="center" prop="">
        <el-table-column
          :label="$t('运费') + ColumnCurrencyName('Freight')"
          prop="summaryInfo.discountFreightFeeGroup"
        >
          <template slot-scope="{ row }">
            {{ row.summaryInfo.discountFreightFee
            }}{{ row.summaryInfo.totalFreightFeeCurrency }}
          </template>
        </el-table-column>
        <el-table-column
          :label="$t('清关费') + ColumnCurrencyName('Clearance')"
          prop="summaryInfo.discountClearanceFeeGroup"
        >
          <template slot-scope="{ row }">
            {{ row.summaryInfo.discountClearanceFee
            }}{{ row.summaryInfo.totalClearanceFeeCurrency }}
          </template>
        </el-table-column>
        <el-table-column
          :label="$t('额外费用') + ColumnCurrencyName('Other')"
          prop="summaryInfo.discountOtherFeeGroup"
        >
          <template slot-scope="{ row }">
            {{ row.summaryInfo.discountOtherFee
            }}{{ row.summaryInfo.totalOtherFeeCurrency }}
          </template>
        </el-table-column>
      </el-table-column>
      <el-table-column
        :label="$t('操作')"
        v-if="permissions.indexOf('selfno:report:detail') > -1"
      >
        <template slot-scope="scope">
          <el-button
            type="text"
            @click="
              $router.push(
                './self_no_report_detail?containerNumber=' + scope.row.selfNo
              )
            "
            >{{ $t("查看") }}</el-button
          >
        </template>
      </el-table-column>
    </el-table>
    <!-- 分页组件 -->
    <pagination
      :total="total"
      :page.sync="queryParams.page"
      :limit.sync="queryParams.rows"
      @pagination="getList"
    />
  </div>
</template>

<script>
import { getCurrencyPage } from "@/api/ecw/currency";
import { getWarehouseList } from "@/api/ecw/warehouse";
import store from "@/store";
import { boxSettlementPage, exportSettlementExcel } from "@/api/ecw/box";
import { getListTree } from "@/api/ecw/region";
import Decimal from "decimal.js";
export default {
  name: "EcwFinancialSelfnoreport",
  data() {
    return {
      loading: false, // 是否加载中
      dateFilter: [], // 筛选时间
      qingguanTime:[],
      daogangTime:[],
      ulWarehouseTime:[],
      list: [],
      total: 0,
      queryParams: {
        page: 1,
        rows: 10,
        startWarehouseIdList: [],
        destWarehouseIdList: [],
      },
      exportWarehouseList:[],
      // tradeCityList: [],
      currencyList: [],
      warehouseList: [],
      countryList: [],
      // 导出中状态
      exporting: false,
    };
  },

  activated() {
    // 如果有必须的条件则查询
    if (
      this.queryParams.startWarehouseIdList.length &&
      this.queryParams.dstCountryId
    ) {
      this.getList();
    }
  },
  created() {
  this.handleSelect();

    getCurrencyPage(this.params).then(
      (res) => (this.currencyList = res.data.list)
    );
    // getTradeCityList().then((res) => (this.tradeCityList = res.data));
    // 默认不查询,必须选择目的国以后才可以查询 this.getList();
    getWarehouseList().then((res) =>{
      this.warehouseList = res.data
      let da=  res.data.filter(
        (item) => +item.tradeType === 2 || +item.tradeType === 3
      );
    
      let ids = da.map(item => item.id);   
  
      this.$set(this.queryParams, "startWarehouseIdList", ids);
      
      this.exportWarehouseList = da;//下拉框数据
     
    } 
    
    );
    getListTree({ treeType: 1 }).then((r) => {
      this.countryList = r.data;
    });
    
  },
  watch: {
    // 目的国变更后要重置目的仓
    "queryParams.destCountryId": function () {
      this.$set(this.queryParams, "destWarehouseId", "");
    },
  },
  computed: {
    permissions() {
      return store.getters.permissions;
    },
    /*exportCityList() {
      return this.tradeCityList.filter((item) => item.type === 2);
    },
    importCityList() {
      return this.tradeCityList.filter((item) => item.type === 1);
    },*/
    // exportWarehouseList() {
    //   /* tradeType 1 进口,2出口,3进出口 */
    //   return this.warehouseList.filter(
    //     (item) => +item.tradeType === 2 || +item.tradeType === 3
    //   );
    // },
    t() {
      /* tradeType 1 进口,2出口,3进出口 */
      return this.warehouseList.filter(
        (item) => +item.tradeType === 2 || +item.tradeType === 3
      );
    },

    importWarehouseList() {
      // 目的仓根据选择的目的国过滤
      if (!this.queryParams.destCountryId) return [];
      return this.warehouseList.filter((item) => {
        return (
          this.queryParams.destCountryId === item.guojia &&
          (+item.tradeType === 1 || +item.tradeType === 3)
        );
      });
    },
    // 目的国名称
    dstCountryName() {
      if (!this.queryParams.destCountryId) return null;
      const country = this.countryList.find(
        (item) => item.id == this.queryParams.destCountryId
      );
      if (!country) return null;
      return this.$l(country, "title");
    },
    // 获取列的货币名称 columnName 取值为Other, Freight, Clearance
    ColumnCurrencyName() {
      return (columnName, wrapper = true) => {
        if (!this.list.length) return "";
        let field = `total${columnName}FeeCurrency`;
        return wrapper
          ? `(${this.list[0]["summaryInfo"][field]})`
          : this.list[0]["summaryInfo"][field];
      };
    },
  },
  methods: {

    handleSelect(val){
      console.log("带")
      //console.log(this.currencyList)
    }, 
   
    getCurrencyLabel(id) {
      const item = this.currencyList.find((item) => item.id === id);
      if (!item) return "";
      return this.$l(item, "title");
    },
    /** 查询列表 */
    getList() {
      this.loading = true;
      let params = {
        ...this.queryParams,
        startWarehouseIdList: this.queryParams.startWarehouseIdList.join(","),
        destWarehouseIdList: this.queryParams.destWarehouseIdList.join(","),
      };
      this.addBeginAndEndTime(params, this.dateFilter, "JsDate", false);
      this.addBeginAndEndTime(params, this.ulWarehouseTime, "UlWarehouseTime", false);

      this.addBeginAndEndTime(params, this.daogangTime, "DaogangTime", false);
      this.addBeginAndEndTime(params, this.qingguanTime, "QingguanTime", false);
      
      // 执行查询
      boxSettlementPage(params)
        .then((response) => {
          this.list = response.data.list;
          this.total = response.data.total;
        })
        .finally(() => {
          this.loading = false;
        });
    },
    getTotal(field) {
      let total = new Decimal(0);
      this.list.forEach((item) => {
        total = total.plus(item.summaryInfo[field] || 0);
      });
      return total.toNumber();
    },
    // 返回汇总行数据
    getSummary() {
      const FreightCurrencyName = this.ColumnCurrencyName("Freight", false);
      const ClearanceCurrencyName = this.ColumnCurrencyName("Clearance", false);
      const OtherCurrencyName = this.ColumnCurrencyName("Other", false);
      const data = [
        this.$t("合计"),
        "",
        // 应收款
        this.getTotal("receivableTotalFee") + "USD",
        // 应收运费
        this.getTotal("totalReceivableFreightFee") + FreightCurrencyName,
        // 应收清关费
        this.getTotal("totalReceivableClearanceFee") + ClearanceCurrencyName,
        // 应收其他费用
        this.getTotal("totalReceivableOtherFee") + OtherCurrencyName,
        // 目的地实收运费
        this.getTotal("totalNetReceiptsCollectFreightFee") +
          FreightCurrencyName,
        // 目的地实收清关费
        this.getTotal("totalNetReceiptsCollectClearanceFee") +
          ClearanceCurrencyName,
        // 目的地实收其他费用
        this.getTotal("totalNetReceiptsCollectOtherFee") + OtherCurrencyName,
        // 中国实收运费
        this.getTotal("netReceiptsAdvanceFreightFee") + FreightCurrencyName,
        // 中国实收清关费
        this.getTotal("netReceiptsAdvanceClearanceFee") + ClearanceCurrencyName,
        // 中国实收其他费用
        this.getTotal("netReceiptsAdvanceOtherFee") + OtherCurrencyName,
        // 运费折扣
        this.getTotal("discountFreightFee") + FreightCurrencyName,
        // 清关费折扣
        this.getTotal("discountClearanceFee") + ClearanceCurrencyName,
        // 其他费用折扣
        this.getTotal("discountOtherFee") + OtherCurrencyName,
      ];
     
      return data;
    },
    /** 搜索按钮操作 */
    handleQuery() {
      this.$refs.queryForm.validate().then(() => {
        this.queryParams.page = 1;
        this.getList();
      });
    },
    handleReset() {
      this.$refs["queryForm"].resetFields();
      this.dateFilter = [];
      this.handleQuery();
    },
    // 导出搜索
    handleExport() {
      this.$refs.queryForm.validate().then(() => {
        this.exporting = true;
        let params = { ...this.queryParams };
        this.addBeginAndEndTime(params, this.dateFilter, "JsDate", false);

        this.addBeginAndEndTime(params, this.ulWarehouseTime, "UlWarehouseTime", false);

        this.addBeginAndEndTime(params, this.daogangTime, "DaogangTime", false);
        this.addBeginAndEndTime(params, this.qingguanTime, "QingguanTime", false);

        exportSettlementExcel(params)
          .then((res) => {
            //this.$download.excel(res, 'shipment-summary.xls');
            this.$message.success(
              this.$t("已加入导出队列,请稍后在下载日志中下载")
            );
          })
          .finally(() => {
            this.exporting = false;
          });
      });
    },
  },
};
</script>

<style scoped>
.card {
  margin-top: 20px;
}
.dialog-footer {
  padding: 40px;
}
.card-title {
  font-size: 18px;
  font-weight: bold;
  display: inline-block;
}
</style>