<template>
  <div class="eibs-tab">
    <div style="text-align: right">
      <c-button size="small" type="primary" @click="adrAdd()"> 新增 </c-button>
    </div>
    <el-form-item label="" label-width="0" prop="ptaList">
      <c-table :columnsConfig="columns" :list="model.ptaList">
        <c-table-column fixed="right" prop="op" label="操作" width="200px">
          <template slot-scope="{ scope }">
            <button
              class="el-button el-button--default el-button--small"
              style="margin-left: 0"
              size="small"
              :disabled="false"
              @click.prevent="adrInfo(scope.$index, scope.row)"
            >
              <span>详情</span>
            </button>
            <c-button
              style="margin-left: 5px"
              size="small"
              type="primary"
              @click="adrEdit(scope.$index, scope.row)"
            >
              修改
            </c-button>
            <c-button
              style="margin-left: 5px"
              size="small"
              type="primary"
              @click="adrDelete(scope.$index, scope.row)"
            >
              删除
            </c-button>
          </template>
        </c-table-column>
      </c-table>
    </el-form-item>

    <el-dialog
      :title="
        '地址信息:' +
        (operate === 'details' ? '详情' : operate === 'edit' ? '修改' : '新增')
      "
      :visible.sync="adrDialog"
      top="10vh"
      width="80%"
      :destroy-on-close="true"
      :before-close="handleClose"
    >
      <m-adr-info ref="adr" :adr="adr" :operate="operate"></m-adr-info>
      <span slot="footer" class="dialog-footer">
        <button
          class="el-button el-button--default el-button--small"
          style="margin-left: 0"
          size="small"
          :disabled="false"
          @click.prevent="cancel"
        >
          <span>取 消</span>
        </button>
        <c-button type="primary" @click="cancel" v-if="operate === 'details'"
          >确 定</c-button
        >
        <c-button type="primary" @click="editAdr" v-if="operate === 'edit'"
          >保 存</c-button
        >
        <c-button type="primary" @click="saveAdr" v-if="operate === 'add'"
          >保 存</c-button
        >
      </span>
    </el-dialog>
  </div>
</template>

<script>
import Adr from "./Adr.js";
import AdrInfo from "./AdrInfo.vue";

import {
  addAdrData,
  updateAdrData,
  deleteAdrData,
} from "~/service/test/pty.js";

export default {
  name: "AdrList",
  components: {
    "m-adr-info": AdrInfo,
  },
  inject: ["root"],
  props: ["model"],
  data() {
    return {
      adrDialog: false,
      adr: null,
      operate: "",
      operateIdx: 0,
      columns: [
        { label: "地址使用代码", prop: "usgpat", width: "auto" },
        { label: "地址状态", prop: "adrstapat", width: "auto" },
        { label: "地址关键字", prop: "extkey", width: "auto" },
        { label: "通知行SWIFT代码", prop: "bic", width: "auto" },
        { label: "名称1", prop: "nam1", width: "auto" },
        { label: "名称2", prop: "nam2", width: "auto" },
        { label: "名称3", prop: "nam3", width: "auto" },
        { label: "街道1", prop: "str1", width: "auto" },
        { label: "街道2", prop: "str2", width: "auto" },
        { label: "地址1", prop: "adr1", width: "auto" },
        { label: "地址2", prop: "adr2", width: "auto" },
        { label: "地址3", prop: "adr3", width: "auto" },
      ],
    };
  },
  methods: {
    /**
     * 详情
     */
    adrInfo(index, row) {
      this.adr = { ...row };
      this.operate = "details";
      this.operateIdx = index;
      this.adrDialog = true;
    },
    /**
     * 新增
     */
    adrAdd() {
      this.adr = new Adr().data;
      this.operate = "add";
      this.adrDialog = true;
    },
    /**
     * 修改
     */
    adrEdit(index, row) {
      this.adr = { ...row };
      this.operate = "edit";
      this.operateIdx = index;
      this.adrDialog = true;
    },
    /**
     * 删除
     */
    adrDelete(index, row) {
      this.$confirm("是否真的删除?", "提示", {
        confirmButtonText: "确认",
        cancelButtonText: "取消",
        type: "warning",
      }).then((res) => {
        deleteAdrData(row).then((res) => {
          if (res) {
            this.model.ptaList.splice(index, 1);
            this.$message.success("删除成功!");
          } else {
            this.$message.error("删除失败!");
          }
        });
      });
    },
    cancel() {
      this.handleClose();
    },
    editAdr() {
      this.$refs.adr.$refs.modelForm.validate((validated) => {
        if (validated) {
          updateAdrData(this.model.inr, this.adr)
            .then((res) => {
              if (res.inr) {
                this.$message.success("修改地址信息成功!");
                // this.model.ptaList.splice(this.operateIdx, 1, this.adr);
                this.model.ptaList = res.ptaList;
                this.handleClose();
              }
            })
            .catch((error) => {
              this.$message.error("修改地址信息失败!");
            });
        }
      });
    },
    /**
     * Adr新增有2种情况
     * 1. pty的新增界面下,此时pty的inr为空,adr需要在pty插入之后,才能执行新增,
     *    所以我们在这里不能直接调用新增接口,将adr添加到ptaList中,随着这个pty一起传入接口。
     * 2. pty的修改界面下,可直接新增 ;
     */
    saveAdr() {
      for (const key in this.adr) {
        if (Object.hasOwnProperty.call(this.adr, key)) {
          const v = this.adr[key];
          if (typeof v === 'string' && v === '') {
            this.adr[key] = " "
          }
        }
      }
      if (this.root.type === "add") {
        this.model.ptaList.push(this.adr);
        this.handleClose();
      } else {
        this.$refs.adr.$refs.modelForm.validate((validated) => {
          if (validated) {
            addAdrData(this.model.inr, this.adr)
              .then((res) => {
                if (res && res.inr) {
                  this.$message.success("保存地址信息成功!");
                  this.model.ptaList = res.ptaList;
                  this.handleClose();
                }
              })
              .catch((error) => {
                this.$message.error("保存地址信息失败!");
              });
          }
        });
      }
    },
    handleClose(done) {
      this.adrDialog = false;
      if (done && typeof done === "function") {
        done();
      }
    },
  },
};
</script>

<style>
.paginationLable {
  display:none;
}
</style>