<template>
  <div class="table-query">
    <div>
      <el-button type="primary" @click="openCodeDialog">查看代码</el-button>
      <el-button type="primary" @click="handleClipboard(srcTableCode, $event)">
        复制代码
      </el-button>
    </div>
    <el-dialog destroy-on-close title="查看代码" :visible.sync="dialogVisible">
      <textarea v-show="false" ref="code" v-model="srcTableCode"></textarea>

      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 消</el-button>
        <el-button
          type="primary"
          @click="closeCodeDialog(srcTableCode, $event)"
        >
          复制代码
        </el-button>
      </span>
    </el-dialog>
  </div>
</template>

<script>
  import { mapGetters } from "vuex";
  import clipboard from "@/utils/clipboard";
  import CodeMirror from "codemirror";

  export default {
    props: {
      headers: {
        type: Array,
        required: true,
      },
    },
    data() {
      return {
        dialogVisible: false,
      };
    },
    computed: {
      ...mapGetters({ srcTableCode: "table/srcTableCode" }),
    },
    methods: {
      handleClipboard(text, event) {
        clipboard(text, event);
      },
      openCodeDialog() {
        this.dialogVisible = true;
        setTimeout(() => {
          CodeMirror.fromTextArea(this.$refs.code, {
            lineNumbers: true,
            gutters: ["CodeMirror-lint-markers"],
            theme: "rubyblue",
            autoRefresh: true,
            lint: true,
          });
        }, 0);
      },
      closeCodeDialog(text, event) {
        this.handleClipboard(text, event);
        this.dialogVisible = false;
      },
    },
  };
</script>

<style lang="scss" scoped>
  .table-query {
    display: flex;
    justify-content: flex-end;
    height: 45px;

    ::v-deep {
      .CodeMirror {
        height: auto;
        min-height: calc(100vh - 420px);
      }
    }
  }
</style>