1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
| <!-- 鼠标触发弹出成 -->
| <template>
| <div class="top-right-btn" :style="style">
| <el-row>
| <el-tooltip
| class="item"
| effect="dark"
| :content="showSearch ? '隐藏搜索' : '显示搜索'"
| placement="top"
| v-if="search"
| >
| <el-button
| size="mini"
| circle
| icon="el-icon-search"
| @click="toggleSearch()"
| />
| </el-tooltip>
| <el-tooltip class="item" effect="dark" content="刷新" placement="top">
| <el-button
| size="mini"
| circle
| icon="el-icon-refresh"
| @click="refresh()"
| />
| </el-tooltip>
| <el-tooltip
| class="item"
| effect="dark"
| content="显隐列"
| placement="top"
| v-if="columns"
| >
| <el-button
| size="mini"
| circle
| icon="el-icon-menu"
| @click="showColumn()"
| />
| </el-tooltip>
| </el-row>
| <el-dialog :title="title" :visible.sync="open" append-to-body>
| <el-transfer
| :titles="['显示', '隐藏']"
| v-model="value"
| :data="columns"
| @change="dataChange"
| ></el-transfer>
| </el-dialog>
| </div>
| </template>
| <script>
| export default {
| name: "RightToolbar",
| data() {
| return {
| // 显隐数据
| value: [],
| // 弹出层标题
| title: "显示/隐藏",
| // 是否显示弹出层
| open: false,
| };
| },
| props: {
| showSearch: {
| type: Boolean,
| default: true,
| },
| columns: {
| type: Array,
| },
| search: {
| type: Boolean,
| default: true,
| },
| gutter: {
| type: Number,
| default: 10,
| },
| },
| computed: {
| style() {
| const ret = {};
| if (this.gutter) {
| ret.marginRight = `${this.gutter / 2}px`;
| }
| return ret;
| },
| },
| created() {
| // 显隐列初始默认隐藏列
| for (let item in this.columns) {
| if (this.columns[item].visible === false) {
| this.value.push(parseInt(item));
| }
| }
| },
| methods: {
| // 搜索
| toggleSearch() {
| this.$emit("update:showSearch", !this.showSearch);
| },
| // 刷新
| refresh() {
| this.$emit("queryTable");
| },
| // 右侧列表元素变化
| dataChange(data) {
| for (let item in this.columns) {
| const key = this.columns[item].key;
| this.columns[item].visible = !data.includes(key);
| }
| },
| // 打开显隐列dialog
| showColumn() {
| this.open = true;
| },
| },
| };
| </script>
| <style lang="scss" scoped>
| ::v-deep .el-transfer__button {
| border-radius: 50%;
| padding: 12px;
| display: block;
| margin-left: 0px;
| }
| ::v-deep .el-transfer__button:first-child {
| margin-bottom: 10px;
| }
| </style>
|
|