<template>
  <div class="app-container">

    <!-- 搜索工作栏 -->
    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
      <el-form-item :label="$t('币种1')" prop="sourceCurrencyId">
        <el-select v-model="query.sourceCurrencyId" :placeholder="$t('请选择币种')" clearable size="small">
          <el-option   v-for="dict in currencyList"
                     :key="dict.id" :label="$l(dict,'title') + dict.fuhao" :value="dict.id" />
        </el-select>
      </el-form-item>
      <el-form-item :label="$t('币种2')" prop="targetCurrencyId">
        <el-select v-model="query.targetCurrencyId" :placeholder="$t('请选择币种')" clearable size="small">
          <el-option   v-for="dict in currencyList"
                     :key="dict.id" :label="$l(dict,'title') + dict.fuhao" :value="dict.id" />
        </el-select>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" icon="el-icon-search" @click="handleQuery">{{$t('搜索')}}</el-button>
        <el-button icon="el-icon-refresh" @click="resetQuery">{{$t('重置')}}</el-button>
      </el-form-item>
    </el-form>

    <!-- 操作工具栏 -->
    <el-row :gutter="10" class="mb8">
      <el-col :span="1.5">
        <el-button type="primary"  v-hasPermi="['ecw:exchange-rate:create']" plain icon="el-icon-plus" size="mini" @click="handleAdd">{{$t('新增')}}</el-button>
      </el-col>
<!--      <el-col :span="1.5">-->
<!--        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"-->
<!--                   v-hasPermi="['ecw:exchange-rate:export']">导出</el-button>-->
<!--      </el-col>-->
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>

    <!-- 列表 -->
    <el-table v-loading="loading" :data="list">
      <el-table-column  :label="$t('序号')" align="center" >
        <template v-slot="{row, $index}">
           {{(queryParams.page - 1) * queryParams.rows + ($index + 1)}}
        </template>
      </el-table-column>
      <el-table-column :label="$t('币种1')" align="center" prop="sourceCurrencyId">
        <template slot-scope="scope">
           {{getCurrency(scope.row.sourceCurrencyId)}}
        </template>
      </el-table-column>
       <el-table-column :label="$t('币种2')">
         <template v-slot="{row}">
           {{getCurrency(row.targetCurrencyId)}}
         </template>
       </el-table-column>
       <el-table-column :label="$t('币种1 金额')">
         <template v-slot="{row}">
           1 {{getCurrency(row.sourceCurrencyId, true)}}
         </template>
       </el-table-column>
       <el-table-column :label="$t('币种1金额兑换币种2汇率')" prop="currencyRate"></el-table-column>
       <el-table-column :label="$t('币种2金额')">
         <template v-slot="{row}">
            {{1 * row.currencyRate}}{{getCurrency(row.targetCurrencyId, true)}}
         </template>
       </el-table-column>
       <el-table-column :label="$t('最后修改时间')">
         <template v-slot="{row}">
           {{parseTime(row.updateTime)}}
         </template>
       </el-table-column>
       <el-table-column :label="$t('最后修改人')">
         <template v-slot="{row}">
        {{getOperator(row.updater)}}
         </template>
       </el-table-column>
      <el-table-column label="有效期" v-slot="{row}" >
        {{parseTime(row.expireDate)}}
      </el-table-column>
      <el-table-column label="状态" v-slot="{row}" >
        <span v-if="new Date(row.expireDate).getTime() >= new Date().getTime()">正常</span>
        <span v-else style="color: red" >已过期</span>
      </el-table-column>
       <el-table-column :label="$t('备注')" prop="note"></el-table-column>
      <el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width">
        <template slot-scope="scope">
          <el-button v-hasPermi="['ecw:exchange-rate:update']" size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">{{$t('修改')}}</el-button>
          <el-button v-hasPermi="['ecw:exchange-rate:delete']" size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">{{$t('删除')}}</el-button>
          <el-button v-hasPermi="['ecw:exchange-rate:log']" size="mini" type="text"  @click="formLog.rows = 10;formLog.page=1; handleLog(scope.row)">{{$t('日志')}}</el-button>

        </template>
      </el-table-column>
    </el-table>
    <!-- 分页组件 -->
    <pagination v-show="total > 0" :total="total" :page.sync="queryParams.page" :limit.sync="queryParams.rows"
                @pagination="getList"/>

    <!-- 对话框(添加 / 修改) -->
    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
        <el-form-item :label="$t('币种1')" prop="sourceCurrencyId">
          <el-select  v-model="form.sourceCurrencyId"  :placeholder="$t('请选择币种')">
            <el-option  :disabled="dict.status === 1 || form.targetCurrencyId === dict.id" @click.native="() => form.sourceCurrencyCode = dict.fuhao"   v-for="dict in currencyList"
                       :key="dict.id" :label="$l(dict,'title') + dict.fuhao" :value="dict.id" />
          </el-select>
        </el-form-item>
        <el-form-item :label="$t('币种2')" prop="targetCurrencyId">
          <el-select v-model="form.targetCurrencyId" :placeholder="$t('请选择币种')">
            <el-option  :disabled="dict.status === 1 || form.sourceCurrencyId === dict.id"  @click.native="() => form.targetCurrencyCode = dict.fuhao" v-for="dict in currencyList"
                       :key="dict.id" :label="$l(dict,'title') + dict.fuhao" :value="dict.id" />
          </el-select>
        </el-form-item>
        <el-form-item :label="$t('汇率')" prop="currencyRate">
          <el-input-number  class="el-input-number" :controls="false" v-model="form.currencyRate" :placeholder="$t('请输入汇率')" />
          <p v-if="form.sourceCurrencyId &&  form.currencyRate && form.targetCurrencyCode"  style="margin: 0;">
            {{$t('例子：')}}1{{getCurrency(form.sourceCurrencyId, true)}} = {{ 1 * form.currencyRate}}  {{getCurrency(form.targetCurrencyId, true)}}
          </p>
          <p v-else style="margin: 0;">
            {{$t('例子：1RMB = 0.138611USD')}}
          </p>
        </el-form-item>
        <el-form-item :label="$t('有效期')" prop="expireDate">
          <el-date-picker v-model="form.expireDate" type="datetime" format="yyyy-MM-dd HH:mm:ss"  value-format="yyyy-MM-dd HH:mm:ss"  ></el-date-picker>
        </el-form-item>
        <el-form-item v-if="form.id" :label="$t('状态')">
          <div> {{status ? '已过期' : '正常'}}</div>
        </el-form-item>
        <el-form-item :label="$t('备注')">
        <el-input type="textarea" v-model="form.note"></el-input>
        </el-form-item>
         <template v-if="form.id">
           <el-form-item :label="$t('创建人')">{{form.creatorName}}</el-form-item>
           <el-form-item :label="$t('创建时间')">{{parseTime(form.createTime)}}</el-form-item>
           <el-form-item :label="$t('最后更新时间')">{{parseTime(form.updateTime)}}</el-form-item>
           <el-form-item :label="$t('最后更新人')">{{getOperator(form.updater)}}</el-form-item>
         </template>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm">{{$t('确 定')}}</el-button>
        <el-button @click="cancel">{{$t('取 消')}}</el-button>
      </div>
    </el-dialog>
     <el-dialog :visible.sync="openLog" >
         <el-table :data="listLog">
           <el-table-column :label="$t('修改人')" prop="changeName"></el-table-column>
           <el-table-column :label="$t('修改时间')">
             <template v-slot="{row}">
                {{parseTime(row.createTime)}}
             </template>
           </el-table-column>
           <el-table-column :label="$t('修改前内容')">
             <template v-slot="{row}">
                {{$t('币种1：')}}【{{ getCurrencyLog(row.beforeChangeSourceValue, 'fuhao')}}】<br/>
                {{$t('币种2：')}}【{{getCurrencyLog(row.beforeChangeTargetValue, 'fuhao')}}】<br/>
                {{$t('汇率：')}}【{{row.beforeChangeValue}}】<br/>
             </template>
           </el-table-column>
         </el-table>
       <pagination v-show="totalLog > 0" :total="totalLog" :page.sync="formLog.page" :limit.sync="formLog.rows"
                   @pagination="getListLog"/>
     </el-dialog>
  </div>
</template>

<script>
import {
  createExchangeRate,
  updateExchangeRate,
  deleteExchangeRate,
  getExchangeRate,
  getExchangeRatePage,
  exportExchangeRateExcel,
  getExchangeRateLogList
} from "@/api/ecw/exchangeRate";
import {getCurrencyPage} from "@/api/ecw/currency";
import {listAllSimpl} from "@/api/system/user";
import Template from "@/views/cms/template/index.vue";

export default {
  name: "ExchangeRate",
  components: {
    Template
  },
  watch:{
    'query.targetCurrencyId'(val){
      if(!val){
        this.queryParams.targetCurrencyId = undefined
      }

    },
     'query.sourceCurrencyId'(val){
      if(!val){
        this.queryParams.sourceCurrencyId = undefined
      }
     }
  },
  data() {
    return {
      status:0,
      currencyList:[],
      allSimplList:[],
      listLog:[],
      openLog:false,
      // 遮罩层
      loading:false,
      // 导出遮罩层
      exportLoading: false,
      // 显示搜索条件
      showSearch: true,
      // 总条数
      total: 0,
      // 汇率管理列表
      list: [],
      // 弹出层标题
      title: "",
      // 是否显示弹出层
      open: false,
      dateRangeCreateTime: [],
      // 查询参数
      queryParams: {
        page: 1,
        rows: 10,
        sourceCurrencyId: null,
        targetCurrencyId: null,
      },
      query:{
        sourceCurrencyId:null,
        targetCurrencyId:null,
      },
      // 表单参数
      form: {},
      // 表单校验
      rules: {
        sourceCurrencyId: [{ required: true, message: this.$t('币种1不能为空'), trigger: "change" }],
        sourceCurrencyCode: [{ required: true, message: this.$t('原币种代码不能为空'), trigger: "blur" }],
        targetCurrencyId: [{ required: true, message: this.$t('币种2不能为空'), trigger: "change" }],
        targetCurrencyCode: [{ required: true, message: this.$t('目标种代码不能为空'), trigger: "blur" }],
        currencyRate: [{ required: true, message: this.$t('汇率不能为空'), trigger: "blur" }],
        expireDate: [{ required: true, message: this.$t('有效期不能为空'), trigger: "blur" }],
      },
      formLog:{
        rows:10,
        page:1
      },
      totalLog: 0,
    };
  },
  created() {
    listAllSimpl().then(r => {
      this.allSimplList = r.data
    })
    getCurrencyPage({ pageNo: 1, pageSize: 1000,}).then(res => this.currencyList = res.data.list)
    this.getList();
  },
  methods: {
    change(val){
      console.log(val,'val')
    },
    handleLog(row){
      this.openLog = true;
      this.formLog.rateId = row.id
      this.getListLog()
    },
    getListLog(){
      getExchangeRateLogList(this.formLog).then(r => {
        this.listLog = r.data.list;
        this.totalLog = r.data.total;
      })
    },

    getOperator(val){
      if (val){
       let n = this.allSimplList.find(i => i.id == val)
        return n?.nickname
      }
      return ''
    },
    getCurrency(val, isEn = false , value = 'id'){
      if (val){
       let r =  this.currencyList.find(i => i[value] === val)
        if(isEn){
          return r?.titleEn
        }else {
          return  r?.titleZh +   `(${r?.titleEn})`
        }

      }
      return ''
    },
    getCurrencyLog(val, value = 'fuhao'){
      if (val){
       let r =  this.currencyList.find(i => i[value] === val)

        return this.$l(r,'title')
      }
      return ''
    },
    /** 查询列表 */
    getList() {
      this.loading = true;
      // 处理查询参数
      let params = {...this.queryParams};
      // 执行查询
      getExchangeRatePage(params).then(response => {
        this.list = response.data.list;
        this.total = response.data.total;
        this.loading = false;
      });
    },
    /** 取消按钮 */
    cancel() {
      this.open = false;
      this.reset();
    },
    /** 表单重置 */
    reset() {
      this.form = {
        "currencyRate": "",
        "note": "",
        "sourceCurrencyCode": "",
        "sourceCurrencyId":'' ,
        "targetCurrencyCode": "",
        "targetCurrencyId": '',
        id: null,
        expireDate:""
      };
      this.resetForm("form");
    },
    secondarySelection(){
      this.queryParams.targetCurrencyId = this.query.targetCurrencyId
      this.queryParams.sourceCurrencyId = this.query.sourceCurrencyId
    },
    /** 搜索按钮操作 */
    handleQuery() {
      this.queryParams.page = 1;
     this.secondarySelection()
      this.getList();
    },
    /** 重置按钮操作 */
    resetQuery() {
      // this.dateRangeCreateTime = [];
      // this.resetForm("queryForm");
      // this.handleQuery();
      this.query.targetCurrencyId = undefined
      this.query.sourceCurrencyId = undefined
      this.secondarySelection() //清空选中目标
      this.getList();
    },
    /** 新增按钮操作 */
    handleAdd() {
      this.reset();
      this.open = true;
      this.title = this.$t('新增');
    },
    /** 修改按钮操作 */
    handleUpdate(row) {
      this.reset();
      const id = row.id;
      getExchangeRate(id).then(response => {
        this.form = {...this.form,...response.data};
        this.form.expireDate = this.parseTime(this.form.expireDate);

        if(this.form.expireDate){
          if(new Date(this.form.expireDate).getTime() >= new Date().getTime()){
            this.status = 0
          }else {
            this.status = 1
          }
        }else {
          this.status = 1
        }
        this.open = true;
        this.title = this.$t('修改');
      });
    },
    /** 提交按钮 */
    submitForm() {
      this.$refs["form"].validate(valid => {
        if (!valid) {
          return;
        }
        // 修改的提交
        if (this.form.id != null) {
          let p = {
            currencyRate: Number(this.form.currencyRate),
            id: this.form.id,
            note: this.form.note,
            sourceCurrencyCode: this.form.sourceCurrencyCode,
            sourceCurrencyId: this.form.sourceCurrencyId ,
            targetCurrencyCode:  this.form.targetCurrencyCode,
            targetCurrencyId:  this.form.targetCurrencyId,
            expireDate:this.form.expireDate

          }
          updateExchangeRate(p).then(response => {
            this.$modal.msgSuccess(this.$t('修改成功'));
            this.open = false;
            this.getList();
          });
          return;
        }
        // 添加的提交
        createExchangeRate(this.form).then(response => {
          this.$modal.msgSuccess(this.$t('新增成功'));
          this.open = false;
          this.getList();
        });
      });
    },
    /** 删除按钮操作 */
    handleDelete(row) {
      const id = row.id;
      this.$modal.confirm(this.$t('是否确认删除汇率管理编号为"') + id + this.$t('"的数据项?')).then(function() {
          return deleteExchangeRate(id);
        }).then(() => {
          this.getList();
          this.$modal.msgSuccess(this.$t('删除成功'));
        }).catch(() => {});
    },
    /** 导出按钮操作 */
    handleExport() {
      // 处理查询参数
      let params = {...this.queryParams};
      params.page = undefined;
      params.rows = undefined;
      this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
      // 执行导出
      this.$modal.confirm(this.$t('是否确认导出所有汇率管理数据项?')).then(() => {
          this.exportLoading = true;
          return exportExchangeRateExcel(params);
        }).then(response => {
          // this.$download.excel(response, '${table.classComment}.xls');
          this.exportLoading = false;
        }).catch(() => {});
    }
  }
};
</script>
<style lang="scss" scoped>
 ::v-deep.el-input-number{
    .el-input__inner{
      text-align: left;
    }
 }
</style>
