<template>
  <div class="eibs-tab">
    <!-- ======-左=======-->
    <c-col :span="12" class="col-left">
      <c-col :span="24">
        <el-form-item label="币种名称">
          <c-select v-model="model.cod" placeholder="请输入币种名称" dbCode="CURTXT" sort="SRT" :isShowKeyAndLabel="true"
            :isCache="false" style="width: 100%" ref="selectCur">
          </c-select>
        </el-form-item>
      </c-col>
    </c-col>

    <c-col :span="24">
      <span style="float: left">
        <el-button size="small" ref="curInsertBtn" type="primary" v-if="isShowAddBtn" @click="toBbacur">新增</el-button>
      </span>
      <span style="float: right">
        <el-button size="small" @click="handleReset">重置</el-button>
        <el-button type="primary" icon="el-icon-search" size="small" :loading="searchLoading" @click="onSearch()">查询
        </el-button>
      </span>
    </c-col>

    <c-col :span="24">
      <c-paging-table :data="curData" :columns="curColumns" :pageNumber="model.pageNum" :pageSize="model.pageSize"
        :total="model.total" v-on:queryFunc="queryFunc" :border="true">
        <c-table-column fixed="right" prop="op" label="操作" width="240px">
          <template slot-scope="{ scope }">
            <c-button style="margin-left: 5px" size="small" ref="curDisplayBtn" type="info"
              @click="curDisplay(scope.row)">详情
            </c-button>
            <c-button style="margin-left: 5px" size="small" v-if="isShowUpdBtn" ref="curUpdateBtn" type="primary"
              @click="curEdit(scope.row)">修改
            </c-button>
            <c-button style="margin-left: 5px" size="small" v-if="isShowDelBtn" ref="curDeleteBtn" type="danger"
              @click="curDelete(scope.row)">删除</c-button>
          </template>
        </c-table-column>
      </c-paging-table>
    </c-col>

    <el-dialog :title="dialogNam[curtyp]" :visible.sync="dialogAdd" :modal-append-to-body="false"
      :close-on-click-modal="false" width="70%" destroy-on-close>
      <el-form ref="modelForm" :model="form" label-suffix=":" :rules="rules" :disabled="isDisabled">
        <c-col :span="24">
          <c-col :span="12">
            <el-form-item label="币种代码" :label-width="formLabelWidth" prop="cod">
              <c-input v-model="form.cod" style="width: 100%" placeholder="请输入币种代码" @change="onChange"
                :disabled="curtyp == 'edit'"></c-input>
            </el-form-item>
          </c-col>
          <c-col :span="12">
            <el-form-item label="币种名称" :label-width="formLabelWidth" prop="curnam">
              <c-input v-model="form.curnam" placeholder="请输入币种名称" @change="onChange2">
              </c-input>
            </el-form-item>
          </c-col>
        </c-col>
        <c-col :span="24">
          <c-col :span="12">
            <el-form-item label="货币数字代号" :label-width="formLabelWidth" prop="altcod">
              <c-input v-model="form.altcod" placeholder="请输入货币数字代号"></c-input>
            </el-form-item>
          </c-col>
          <c-col :span="12">
            <el-form-item label="币种小数位" :label-width="formLabelWidth" prop="dec">
              <c-input type="number" v-model="form.dec" placeholder="请输入币种小数位" min="0" max="9"></c-input>
            </el-form-item>
          </c-col>
        </c-col>
        <c-col :span="24">
          <c-col :span="12">
            <el-form-item label="买价/卖价汇差" :label-width="formLabelWidth" prop="bsrmar">
              <c-input-number v-model="form.bsrmar" placeholder="请输入买价/卖价汇差">
              </c-input-number>
            </el-form-item>
          </c-col>
          <c-col :span="12">
            <el-form-item label="币种四舍五入精度" :label-width="formLabelWidth" prop="rndunt">
              <c-input-number v-model="form.rndunt" placeholder="请输入币种四舍五入精度">
              </c-input-number>
            </el-form-item>
          </c-col>
        </c-col>
        <c-col :span="24">
          <c-col :span="12">
            <el-form-item label="内部汇率汇差" prop="sqrmar" :label-width="formLabelWidth">
              <c-input-number v-model="form.sqrmar" placeholder="请输入内部汇率汇差">
              </c-input-number>
            </el-form-item>
          </c-col>
          <c-col :span="12">
            <el-form-item label="报表折算汇率汇差" :label-width="formLabelWidth" prop="glbrat">
              <c-input-number v-model="form.glbrat" placeholder="请输入报表折算汇率汇差">
              </c-input-number>
            </el-form-item>
          </c-col>
        </c-col>
        <c-col :span="24">
          <c-col :span="12">
            <el-form-item label="汇率折算单位" :label-width="formLabelWidth" prop="bas">
              <c-input v-model="form.bas" placeholder="请输入汇率折算单位">
              </c-input>
            </el-form-item>
          </c-col>
          <c-col :span="12">
            <el-form-item label="汇率最大浮动值" :label-width="formLabelWidth" prop="dif">
              <c-input v-model="form.dif" placeholder="请输入汇率最大浮动值">
              </c-input>
            </el-form-item>
          </c-col>
        </c-col>
        <c-col :span="24">
          <c-col :span="12">
            <el-form-item label="生效日期" prop="begdat" :label-width="formLabelWidth">
              <c-date-picker v-model="form.begdat" type="date" :picker-options="startDatePicker" placeholder="请输入生效日期">
              </c-date-picker>
            </el-form-item>
          </c-col>
          <c-col :span="12">
            <el-form-item label="失效日期" prop="enddat" :label-width="formLabelWidth">
              <c-date-picker type="date" v-model="form.enddat" :picker-options="endDatePicker" placeholder="请输入失效日期">
              </c-date-picker>
            </el-form-item>
          </c-col>
        </c-col>
        <c-col :span="24">
          <c-col :span="12">
            <el-form-item label="借记到账天数" :label-width="formLabelWidth" prop="dbtday">
              <c-input v-model="form.dbtday" placeholder="请输入借记到账天数">
              </c-input>
            </el-form-item>
          </c-col>
          <c-col :span="12">
            <el-form-item label="贷记到账天数" :label-width="formLabelWidth" prop="cdtday">
              <c-input v-model="form.cdtday" placeholder="请输入贷记到账天数">
              </c-input>
            </el-form-item>
          </c-col>
        </c-col>
        <c-col :span="24">
          <c-col :span="12">
            <el-form-item label="存储利率的上限币种" prop="maxcur" :label-width="formLabelWidth">
              <c-select v-model="form.maxcur" placeholder="请选择币种" dbCode="CURTXT" :isShowKeyAndLabel="true"
                :isCache="false" sort="SRT">
              </c-select>
            </el-form-item>
          </c-col>
          <c-col :span="12">
            <el-form-item label="存储利率的上限金额" prop="maxamt" :label-width="formLabelWidth">
              <c-input type="number" v-model="form.maxamt" min="0" :precision="3" :step="0.001" autocomplete="off"
                placeholder="请输入最大金额">
              </c-input>
            </el-form-item>
          </c-col>
        </c-col>
        <c-col :span="24">
          <c-col :span="12">
            <el-form-item label="货币兑换时的账号" :label-width="formLabelWidth" prop="acc1">
              <el-input v-model="form.acc1" placeholder="请输入货币兑换时的账号" maxlength="16">
              </el-input>
            </el-form-item>
          </c-col>
          <c-col :span="12">
            <el-form-item label="货币兑换时的对应账号" :label-width="formLabelWidth" prop="acc2">
              <el-input v-model="form.acc2" placeholder="请输入货币兑换时的对应账号" maxlength="16">
              </el-input>
            </el-form-item>
          </c-col>
        </c-col>
        <c-col :span="24">
          <c-col :span="12">
            <el-form-item label="批量维护牌价时的顺序" :label-width="formLabelWidth" prop="seq">
              <c-select v-model="form.seq" placeholder="请选择批量维护牌价时的顺序" dbCode="CURSEQ" :isShowKeyAndLabel="true"
                sort="SRT" @change="changeNewCur()">
              </c-select>
            </el-form-item>
          </c-col>
          <c-col :span="12">
            <el-form-item label="替换的货币代号" :label-width="formLabelWidth" prop="newcur"
              :rules="(form.seq == '-1') ? rules.newcur : [{required: false}]">
              <c-select v-model="form.newcur" placeholder="请选择替换的货币代号" dbCode="CURTXT" :isShowKeyAndLabel="true"
                :isCache="false" sort="SRT" :disabled="form.seq != '-1'"></c-select>
            </el-form-item>
          </c-col>
        </c-col>
        <c-col :span="24">
          <c-col :span="12">
            <el-form-item label="透支天数" :label-width="formLabelWidth" prop="odrintday">
              <c-input type="number" v-model="form.odrintday" placeholder="请选择透支天数" min="0">
              </c-input>
            </el-form-item>
          </c-col>
        </c-col>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="commitAdd" v-if="curtyp == 'add'">提 交</el-button>
        <el-button type="primary" @click="commitEdit" v-if="curtyp == 'edit'">提 交</el-button>
        <el-button @click="dialogAdd = false">返 回</el-button>
      </div>
    </el-dialog>
  </div>
</template>

<script>
  import Utils from "~/utils";
  import {
    queryByPage,
    deleteById,
    curInfo,
    add,
    edit,
    queryCod
  } from "~/service/manage/cur.js";
  import Cur, {
    Pattern
  } from "../Dblcur/Cur.js";

  import commonFunctions from "~/mixin/commonFunctions.js";

  export default {
    mixins: [commonFunctions],
    name: "",
    props: ["model"],
    inject: [],
    data() {
      return {
        rules: Pattern,
        curData: [],
        curColumns: [{
            label: '币种代码',
            prop: 'cod',
            width: 'auto'
          },
          {
            label: '币种名称',
            prop: 'curnam',
            width: 'auto'
          },
        ],
        dialogNam: {
          'add': '币种信息--新增',
          'edit': '币种信息--编辑',
          'info': '币种信息--查看',
        },
        isDisabled: false,
        isShowUpdBtn: false,
        isShowDelBtn: false,
        isShowAddBtn: false,
        isShowDisplayBtn: false,
        searchLoading: false,
        dialogAdd: false,
        form: new Cur().data,
        curtyp: "",
        formLabelWidth: "150px",
        startDatePicker: this.beginDate(),
        endDatePicker: this.processDate(),
      };
    },
    activated() {
      const {
        update
      } = this.$route.params
      if (update) {
        this.onSearch();
      }
    },
    created() {
      this.onInfcurSearch();
    },
    mounted() {
      this.getHiddenButtonVue();
    },
    methods: {
      getHiddenButtonVue() {
        const loading = this.loading();
        this.$buttonControlService.hiddenBtnList()
          .then((res) => {
            // 【xq】按钮
            let hasDisplay = res.some((item) => {
              return item.ITEMID === 'curDisplayBtn';
            })
            if (hasDisplay) {
              this.isShowDisplayBtn = false;
            } else {
              this.isShowDisplayBtn = true;
            }

            // 【新增】按钮
            let hasInsert = res.some((item) => {
              return item.ITEMID === 'curInsertBtn';
            })
            if (hasInsert) {
              this.isShowAddBtn = false;
            } else {
              this.isShowAddBtn = true;
            }
            // 【修改】按钮
            let hasUpdate = res.some((item) => {
              return item.ITEMID === 'curUpdateBtn';
            })
            if (hasUpdate) {
              this.isShowUpdBtn = false;
            } else {
              this.isShowUpdBtn = true;
            }
            // 【删除】按钮
            let hasDelete = res.some((item) => {
              return item.ITEMID === 'curDeleteBtn';
            })
            if (hasDelete) {
              this.isShowDelBtn = false;
            } else {
              this.isShowDelBtn = true;
            }
            loading.close();
          })
      },
      changeNewCur() {
        if (this.form.seq != '-1') {
          this.form.newcur = '';
        }
      },
      beginDate() {
        const self = this
        return {
          disabledDate(time) {
            if (self.form.enddat) { //如果结束时间不为空,则小于结束时间
              return new Date(self.form.enddat).getTime() < time.getTime()
            } else {
              // return time.getTime() > Date.now()//开始时间不选时,结束时间最大值小于等于当天
            }
          }
        }
      },
      processDate() {
        const self = this
        return {
          disabledDate(time) {
            if (self.form.begdat) { //如果开始时间不为空,则结束时间大于开始时间
              return new Date(self.form.begdat).getTime() > time.getTime()
            } else {
              // return time.getTime() > Date.now()//开始时间不选时,结束时间最大值小于等于当天
            }
          }
        }
      },
      toBbacur() {
        this.dialogAdd = true;
        this.isDisabled = false;
        this.curtyp = "add";
        this.form = new Cur().data;
      },
      async handleReset() {
        this.model.cod = ""
        this.model.curnam = ""
      },
      onSearch() {
        this.model.pageSize = PageSize;
        this.model.pageNum = 1;
        this.onInfcurSearch();
      },
      onInfcurSearch() {
        this.searchLoading = true;
        delete this.model.isModify;
        delete this.model.modifySet;
        queryByPage(this.model).then(res => {
          if (res.respCode == SUCCESS) {
            const list = res.data.list
            this.curData = list
            this.model.pageNum = res.data.pageNumber
            this.model.pageSize = res.data.pageSize
            this.model.total = res.data.total
            this.searchLoading = false;
          } else {
            this.searchLoading = false;
            this.$notify.error("查询失败");
          }
        })
      },
      commitAdd() {
        this.$refs.modelForm.validate((validated) => {
          if (validated) {
            delete this.form.isModify;
            delete this.form.modifySet;
            queryCod(this.form)
              .then(((res) => {
                if (!res.data && res.respCode == SUCCESS) {
                  add(this.form)
                    .then((res) => {
                      if (res.errorCode == "AAAAAA" || res.respCode == "AAAAAA") {
                        this.$notify.success("新增成功!");
                        this.dialogAdd = false;
                        //此方法为了刷新dbCode列表数据
                        this.$refs.selectCur.init();
                        this.onInfcurSearch();
                      } else {
                        this.$notify.error(res.respMsg);
                      }
                    })
                    .catch((err) => {
                      this.$notify.error("新增失败!");
                    });
                } else {
                  return this.$notify.error("币种代码重复")
                }
              }))
          } else {
            this.$notify.error({
              title: '失败',
              message: '请检查必输项!'
            });
          }
        });
      },
      commitEdit() {
        this.$refs.modelForm.validate((validated) => {
          if (validated) {
            delete this.form.isModify;
            delete this.form.modifySet;
            edit(this.form)
              .then((res) => {
                if (res.errorCode == "AAAAAA" || res.respCode == "AAAAAA") {
                  this.$notify.success("保存成功!");
                  this.dialogAdd = false;
                  this.$refs.selectCur.init();
                  this.onInfcurSearch();
                } else {
                  this.$notify.error(res.respMsg);
                }
              })
              .catch((err) => {
                this.$notify.error("保存失败!");
              });
          } else {
            this.$notify.error({
              title: '失败',
              message: '请检查必输项!'
            });
          }
        });
      },
      queryFunc(pageNumber, pageSize) {
        this.model.pageNum = pageNumber
        this.model.pageSize = pageSize
        this.onInfcurSearch()
      },
      onChange() {
        this.form.cod = this.form.cod.trim()
        if (this.form.cod != "") {
          delete this.form.isModify;
          delete this.form.modifySet;
          queryCod(this.form).then((res) => {
            if (res.respCode == "AAAAAA") {
              if (res.data) {
                this.$notify.error("币种代码已存在,请修改")
              }
            } else {
              this.$notify.error("检验唯一性失败")
            }
          });
        }
      },
      onChange2() {
        this.form.curnam = this.form.curnam.trim()
      },
      curDisplay(row) {
        curInfo(row).then((res) => {
          if (res.respCode == SUCCESS) {
            if (res.data.inr) {
              this.form = res.data;
              this.isDisabled = true;
              this.curtyp = "info";
              this.dialogAdd = true;
            }
          } else {
            this.$notify.error("币种不存在")
          }
        });
      },
      curEdit(row) {
        curInfo(row).then((res) => {
          if (res.respCode == SUCCESS) {
            if (res.data.inr) {
              this.isDisabled = false;
              this.form = res.data;
              this.curtyp = "edit";
              this.dialogAdd = true;
            }
          } else {
            this.$notify.error("币种不存在")
          }
        });
      },
      curDelete(row) {
        this.$confirm("是否确认删除?", "提示", {
            confirmButtonText: "确定",
            cancelButtonText: "取消",
            type: "warning",
          })
          .then(() => {
            deleteById(row)
              .then((res) => {
                if (res.errorCode == "AAAAAA" || res.respCode == "AAAAAA") {
                  this.$notify.success("删除成功!");
                  this.$refs.selectCur.init();
                  this.onInfcurSearch();
                } else {
                  this.$notify.error("删除失败!");
                }
              })
              .catch((err) => {
                this.$notify.error("删除失败!");
              });
          })
          .catch(() => {
            this.$message({
              type: "info",
              message: "已取消删除",
            });
          });
      },
    },
  };
</script>

<style scoped>
  .table-button-item-list {
    padding: 0;
    margin: 0;
  }

  .table-button-item-list li {
    list-style: none;
    padding: 5px 0;
    text-align: center;
    color: #606266;
    cursor: pointer;
  }
</style>