TableExhibitionHeader.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <template>
  2. <div class="table-header">
  3. <draggable
  4. v-model="tableHeaders"
  5. group="people"
  6. @change="set"
  7. @end="drag = false"
  8. @start="drag = true"
  9. >
  10. <div v-for="header in tableHeaders" :key="header.key">
  11. <el-popover placement="right" trigger="focus">
  12. <el-tooltip
  13. :content="`该字段${
  14. header.opt === '' ? '未' : ''
  15. }置于template标签内,置于template方便自定义`"
  16. class="item"
  17. effect="dark"
  18. placement="top-start"
  19. >
  20. <el-button
  21. v-if="header.opt === ''"
  22. @click="opt(header, 'template')"
  23. >
  24. {{ header.opt ? "点击关闭自定义" : "点击开启自定义" }}
  25. </el-button>
  26. <el-button v-else @click="opt(header, '')">
  27. {{ header.opt ? "点击关闭自定义" : "点击开启自定义" }}
  28. </el-button>
  29. </el-tooltip>
  30. <el-tooltip
  31. :content="`该字段在表格中${header.show ? '显示' : '隐藏'}`"
  32. class="item"
  33. effect="dark"
  34. placement="top-start"
  35. >
  36. <el-button @click="hide(header)">
  37. {{ header.show ? "点击隐藏字段" : "点击显示字段" }}
  38. </el-button>
  39. </el-tooltip>
  40. <div slot="reference" class="table-header-card">
  41. <el-tag>{{ header.key }}对应的标题名称</el-tag>
  42. <div>
  43. <el-input
  44. v-model="header.label"
  45. :placeholder="header.label + '对应的字段名称'"
  46. />
  47. </div>
  48. </div>
  49. </el-popover>
  50. </div>
  51. </draggable>
  52. </div>
  53. </template>
  54. <script>
  55. import draggable from "vuedraggable";
  56. export default {
  57. components: {
  58. draggable,
  59. },
  60. props: {
  61. headers: {
  62. type: Array,
  63. required: true,
  64. },
  65. },
  66. data() {
  67. return {
  68. tableHeaders: this.headers,
  69. };
  70. },
  71. watch: {
  72. headers(val) {
  73. this.tableHeaders = val;
  74. },
  75. },
  76. methods: {
  77. set() {
  78. this.$emit("update:headers", this.tableHeaders);
  79. },
  80. show(header) {
  81. header.show = true;
  82. },
  83. hide(header) {
  84. header.show = !header.show;
  85. },
  86. opt(header, opt) {
  87. header.opt = opt;
  88. },
  89. query(header, query) {
  90. header.query = query;
  91. },
  92. },
  93. };
  94. </script>
  95. <style scoped>
  96. .table-header-card {
  97. display: flex;
  98. align-items: center;
  99. justify-content: space-between;
  100. padding: 10px;
  101. margin-right: 10px;
  102. margin-bottom: 10px;
  103. margin-left: 0;
  104. border: 1px solid #dcdfe6;
  105. border-radius: 4px;
  106. }
  107. .table-header >>> .el-input__inner {
  108. border: none;
  109. border-bottom: 1px solid #9e9e9e;
  110. border-radius: 0;
  111. }
  112. .el-popover {
  113. min-width: 100px !important;
  114. }
  115. </style>