<template> <div class="table-header"> <draggable v-model="tableHeaders" group="people" @change="set" @end="drag = false" @start="drag = true" > <div v-for="header in tableHeaders" :key="header.key"> <el-popover placement="right" trigger="focus"> <el-tooltip :content="`该字段${ header.opt === '' ? '未' : '' }置于template标签内,置于template方便自定义`" class="item" effect="dark" placement="top-start" > <el-button v-if="header.opt === ''" @click="opt(header, 'template')" > {{ header.opt ? "点击关闭自定义" : "点击开启自定义" }} </el-button> <el-button v-else @click="opt(header, '')"> {{ header.opt ? "点击关闭自定义" : "点击开启自定义" }} </el-button> </el-tooltip> <el-tooltip :content="`该字段在表格中${header.show ? '显示' : '隐藏'}`" class="item" effect="dark" placement="top-start" > <el-button @click="hide(header)"> {{ header.show ? "点击隐藏字段" : "点击显示字段" }} </el-button> </el-tooltip> <div slot="reference" class="table-header-card"> <el-tag>{{ header.key }}对应的标题名称</el-tag> <div> <el-input v-model="header.label" :placeholder="header.label + '对应的字段名称'" /> </div> </div> </el-popover> </div> </draggable> </div> </template> <script> import draggable from "vuedraggable"; export default { components: { draggable, }, props: { headers: { type: Array, required: true, }, }, data() { return { tableHeaders: this.headers, }; }, watch: { headers(val) { this.tableHeaders = val; }, }, methods: { set() { this.$emit("update:headers", this.tableHeaders); }, show(header) { header.show = true; }, hide(header) { header.show = !header.show; }, opt(header, opt) { header.opt = opt; }, query(header, query) { header.query = query; }, }, }; </script> <style scoped> .table-header-card { display: flex; align-items: center; justify-content: space-between; padding: 10px; margin-right: 10px; margin-bottom: 10px; margin-left: 0; border: 1px solid #dcdfe6; border-radius: 4px; } .table-header >>> .el-input__inner { border: none; border-bottom: 1px solid #9e9e9e; border-radius: 0; } .el-popover { min-width: 100px !important; } </style>