123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- <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>
|