jinhui.wang

无用代码删除,代码更新

1 <template> 1 <template>
2 - <div class="Tables"> 2 + <div class="w-table" :class="{ 'w-table_moving': dragState.dragging }">
3 <el-table 3 <el-table
4 :ref="tableName" 4 :ref="tableName"
5 :data="data" 5 :data="data"
6 - :headerData="headerData"
7 :border="border" 6 :border="border"
8 :stripe="stripe" 7 :stripe="stripe"
9 :size="size" 8 :size="size"
...@@ -25,24 +24,33 @@ ...@@ -25,24 +24,33 @@
25 @select-change="SelectChange" 24 @select-change="SelectChange"
26 > 25 >
27 <el-table-column 26 <el-table-column
28 - v-for="(item, index) in headerData" 27 + v-for="(item, index) in newHeader"
29 - :column-key="item.value"
30 :type="item.type" 28 :type="item.type"
31 :prop="item.value" 29 :prop="item.value"
32 :label="item.name" 30 :label="item.name"
33 :width="item.width" 31 :width="item.width"
34 :align="item.align" 32 :align="item.align"
35 :fixed="item.fixed" 33 :fixed="item.fixed"
34 + :column-key="index.toString()"
36 :show-overflow-tooltip="showOverflowTooltip" 35 :show-overflow-tooltip="showOverflowTooltip"
37 :sortable="item.sorTable" 36 :sortable="item.sorTable"
38 :formatter="formatter" 37 :formatter="formatter"
39 header-align="center" 38 header-align="center"
40 :sort-orders="['descending', 'ascending', null]" 39 :sort-orders="['descending', 'ascending', null]"
41 :slotHeader="slotHeader" 40 :slotHeader="slotHeader"
41 + :render-header="renderHeader"
42 :key="index" 42 :key="index"
43 + v-if="item.disabled"
43 > 44 >
44 - <!-- <template v-if="item.slot" slot-scope=""> 45 + <!-- <template slot-scope="scope">
45 - <Item :dom="item.slot" @change="itemChange"></Item> 46 + <exSlot
47 + v-if="item.render"
48 + :render="item.render"
49 + :row="scope.row"
50 + :index="scope.$index"
51 + :column="item"
52 + ></exSlot>
53 + <span v-else>{{ scope.row[item.value] || "" }}</span>
46 </template> --> 54 </template> -->
47 </el-table-column> 55 </el-table-column>
48 <slot></slot> 56 <slot></slot>
...@@ -52,41 +60,87 @@ ...@@ -52,41 +60,87 @@
52 :page-size.sync="limitSize" 60 :page-size.sync="limitSize"
53 :current-page.sync="pageNum" 61 :current-page.sync="pageNum"
54 background 62 background
55 - layout="prev, pager, next, jumper, ->, total, slot" 63 + layout="prev, pager, next, jumper, ->, sizes, total"
56 class="tablePagination" 64 class="tablePagination"
65 + @size-change="sizeChange"
57 @next-click="nextClick" 66 @next-click="nextClick"
58 @prev-click="prevClick" 67 @prev-click="prevClick"
59 @current-change="currentChange" 68 @current-change="currentChange"
60 > 69 >
61 </el-pagination> 70 </el-pagination>
62 - <!-- <infoTable 71 + <div class="tableInfo" v-if="infoShow">
63 - v-bind="$attrs" 72 + <ul class="tableList" v-show="show">
64 - @checkChange="checkChange" 73 + <el-checkbox-group v-model="checkDisabled">
65 - @top="top" 74 + <li
66 - @bottom="bottom" 75 + class="flexList"
67 - ></infoTable> --> 76 + v-for="(item, index) in newHeader"
77 + :key="index"
78 + v-if="!item.type"
79 + :title="item.name"
80 + >
81 + <div>
82 + <el-checkbox
83 + :label="item.name"
84 + @change="newHeader[index].disabled = !item.disabled"
85 + >{{ item.name }}</el-checkbox
86 + >
87 + </div>
88 + </li>
89 + </el-checkbox-group>
90 + </ul>
91 + <el-button
92 + type="primary"
93 + icon="el-icon-edit"
94 + size="medium"
95 + circle
96 + @click="show = !show"
97 + ></el-button>
98 + </div>
68 </div> 99 </div>
69 </template> 100 </template>
70 101
71 <script> 102 <script>
72 -// import infoTable from "./info.vue"; 103 +let exSlot = {
73 -import Item from "./item.vue"; 104 + fucntional: true,
105 + props: {
106 + row: Object,
107 + render: Function,
108 + index: [Number, String],
109 + column: {
110 + type: Object,
111 + default: null,
112 + },
113 + },
114 + render: (h, data) => {
115 + console.log(data);
116 + if (data) {
117 + const params = {
118 + row: data.props.row,
119 + index: data.props.index,
120 + };
121 + if (data.props.column) params.column = data.props.column;
122 + return data.props.render(h, params);
123 + }
124 + },
125 +};
74 import dictLabels from "../../assets/languages/dictLabels.js"; 126 import dictLabels from "../../assets/languages/dictLabels.js";
75 import { scrollTo } from "@/utils/scroll-to"; 127 import { scrollTo } from "@/utils/scroll-to";
76 export default { 128 export default {
77 name: "Table", 129 name: "Table",
78 components: { 130 components: {
79 - // infoTable, 131 + exSlot,
80 - Item,
81 }, 132 },
82 props: { 133 props: {
134 + //dom名称
83 tableName: { type: String, default: "tables" }, 135 tableName: { type: String, default: "tables" },
136 + //表格数据
84 data: { 137 data: {
85 type: Array, 138 type: Array,
86 default() { 139 default() {
87 return []; 140 return [];
88 }, 141 },
89 }, 142 },
143 + //表头数据
90 headerData: { 144 headerData: {
91 type: Array, 145 type: Array,
92 default: null, 146 default: null,
...@@ -104,7 +158,7 @@ export default { ...@@ -104,7 +158,7 @@ export default {
104 default: "mini", 158 default: "mini",
105 }, 159 },
106 height: { 160 height: {
107 - type: [String, Number], 161 + type: [String,Number],
108 default: "400", 162 default: "400",
109 }, 163 },
110 fit: { 164 fit: {
...@@ -143,18 +197,26 @@ export default { ...@@ -143,18 +197,26 @@ export default {
143 type: Boolean, 197 type: Boolean,
144 default: true, 198 default: true,
145 }, 199 },
200 + //shift键状态
146 shiftKey: { 201 shiftKey: {
147 type: Boolean, 202 type: Boolean,
148 default: false, 203 default: false,
149 }, 204 },
205 + //页数
150 page: { 206 page: {
151 type: Number, 207 type: Number,
152 default: 1, 208 default: 1,
153 }, 209 },
210 + // pageSizes:{
211 + // type:Array,
212 + // default:[10, 20, 30, 40, 50, 100]
213 + // },
214 + //每页长度
154 limitSize: { 215 limitSize: {
155 type: Number, 216 type: Number,
156 default: 20, 217 default: 20,
157 }, 218 },
219 + //开始位置
158 limitStart: { 220 limitStart: {
159 type: Number, 221 type: Number,
160 default: 0, 222 default: 0,
...@@ -167,6 +229,7 @@ export default { ...@@ -167,6 +229,7 @@ export default {
167 type: Number, 229 type: Number,
168 default: 20, 230 default: 20,
169 }, 231 },
232 + //总数量
170 totalCount: { 233 totalCount: {
171 type: Number, 234 type: Number,
172 default: 0, 235 default: 0,
...@@ -179,28 +242,43 @@ export default { ...@@ -179,28 +242,43 @@ export default {
179 type: Boolean, 242 type: Boolean,
180 default: false, 243 default: false,
181 }, 244 },
245 + infoShow:{
246 + type:Boolean,
247 + default:false,
248 + }
182 }, 249 },
183 inheritAttrs: false, 250 inheritAttrs: false,
184 data() { 251 data() {
185 return { 252 return {
186 - newHeader: [], 253 + newHeader: this.headerData,
187 selectTable: [], 254 selectTable: [],
255 + checkDisabled: [],
188 pageNum: 1, 256 pageNum: 1,
189 start: -1, 257 start: -1,
258 + show: false,
259 + dragState: {
260 + start: -9, // 起始元素的 index
261 + end: -9, // 移动鼠标时所覆盖的元素 index
262 + dragging: false, // 是否正在拖动
263 + direction: undefined, // 拖动方向
264 + },
265 + //表头数据格式
190 // { 266 // {
191 - // type: "selection", 267 + // type: "",
192 // name: "", 268 // name: "",
193 // value: "", 269 // value: "",
194 - // slot: null,
195 // width: "", 270 // width: "",
196 // align: "center", 271 // align: "center",
197 // sorTable: false, 272 // sorTable: false,
198 // fixed:false, 273 // fixed:false,
274 + // disabled:true,
199 // }, 275 // },
200 }; 276 };
201 }, 277 },
202 created() { 278 created() {
203 - this.newHeader = this.headerData; 279 + this.newHeader.map((item) => {
280 + this.checkDisabled.push(item.name);
281 + });
204 }, 282 },
205 watch: { 283 watch: {
206 page() { 284 page() {
...@@ -214,9 +292,15 @@ export default { ...@@ -214,9 +292,15 @@ export default {
214 this.$refs.tables.doLayout() 292 this.$refs.tables.doLayout()
215 }) 293 })
216 }, 294 },
295 + headerData(val, oldVal) {
296 + this.newHeader = val;
297 + },
217 }, 298 },
218 - mounted() {},
219 methods: { 299 methods: {
300 + sizeChange(val){
301 + this.$emit("sizeChange",val)
302 + },
303 + //下一页
220 nextClick() { 304 nextClick() {
221 this.$emit("currentChange", { 305 this.$emit("currentChange", {
222 page: this.pageNum + 1, 306 page: this.pageNum + 1,
...@@ -224,6 +308,7 @@ export default { ...@@ -224,6 +308,7 @@ export default {
224 }); 308 });
225 scrollTo(0, 800); 309 scrollTo(0, 800);
226 }, 310 },
311 + //上一页
227 prevClick() { 312 prevClick() {
228 this.$emit("currentChange", { 313 this.$emit("currentChange", {
229 page: this.pageNum - 1, 314 page: this.pageNum - 1,
...@@ -231,6 +316,7 @@ export default { ...@@ -231,6 +316,7 @@ export default {
231 }); 316 });
232 scrollTo(0, 800); 317 scrollTo(0, 800);
233 }, 318 },
319 + //某页
234 currentChange(val) { 320 currentChange(val) {
235 this.$emit("currentChange", { 321 this.$emit("currentChange", {
236 page: val, 322 page: val,
...@@ -238,6 +324,7 @@ export default { ...@@ -238,6 +324,7 @@ export default {
238 }); 324 });
239 scrollTo(0, 800); 325 scrollTo(0, 800);
240 }, 326 },
327 + //表格多选,shift连续选择
241 tableSelect(selection, row) { 328 tableSelect(selection, row) {
242 let end = row.index; 329 let end = row.index;
243 if (this.shiftKey) { 330 if (this.shiftKey) {
...@@ -285,18 +372,23 @@ export default { ...@@ -285,18 +372,23 @@ export default {
285 selection = this.selectTable.sort(this.compare("index", "ascending")); 372 selection = this.selectTable.sort(this.compare("index", "ascending"));
286 this.$emit("tableSelect", { selection, row }); 373 this.$emit("tableSelect", { selection, row });
287 }, 374 },
375 + //表格全选
288 tableSelectAll(selection) { 376 tableSelectAll(selection) {
289 this.selectTable = selection; 377 this.selectTable = selection;
290 this.$emit("tableSelectAll", selection); 378 this.$emit("tableSelectAll", selection);
291 }, 379 },
380 + //多选框改变
292 SelectChange(selection) { 381 SelectChange(selection) {
293 this.$emit("SelectChange", selection); 382 this.$emit("SelectChange", selection);
294 }, 383 },
384 + //表格选择清空
295 clearTable() { 385 clearTable() {
296 this.selectTable = []; 386 this.selectTable = [];
297 this.$refs.tables.clearSelection(); 387 this.$refs.tables.clearSelection();
298 }, 388 },
389 + //排序
299 sortChange({ column, prop, order }) { 390 sortChange({ column, prop, order }) {
391 + this.selectTable = [];
300 this.$emit("sortChange", { prop: prop, order: order }); 392 this.$emit("sortChange", { prop: prop, order: order });
301 }, 393 },
302 compare(propertyName, sort) { 394 compare(propertyName, sort) {
...@@ -315,6 +407,105 @@ export default { ...@@ -315,6 +407,105 @@ export default {
315 } 407 }
316 }; 408 };
317 }, 409 },
410 + //自定义表头
411 + renderHeader(createElement, { column }) {
412 + return createElement(
413 + "div",
414 + {
415 + class: ["thead-cell"],
416 + // on: {
417 + // mousedown: ($event) => {
418 + // this.handleMouseDown($event, column);
419 + // },
420 + // mousemove: ($event) => {
421 + // this.handleMouseMove($event, column);
422 + // },
423 + // },
424 + },
425 + [
426 + // 添加 <a> 用于显示表头 label
427 + createElement("a", column.label),
428 + // 添加一个空标签用于显示拖动动画
429 + createElement("span", {
430 + class: ["virtual"],
431 + }),
432 + ]
433 + );
434 + },
435 +
436 + // 按下鼠标开始拖动
437 + // handleMouseDown(e, column) {
438 + // this.dragState.dragging = true;
439 + // this.dragState.start = parseInt(column.columnKey);
440 + // // 给拖动时的虚拟容器添加宽高
441 + // let table = document.getElementsByClassName("w-table")[0];
442 + // let virtual = document.getElementsByClassName("virtual");
443 + // for (let item of virtual) {
444 + // item.style.height = table.clientHeight - 1 + "px";
445 + // item.style.width = item.parentElement.parentElement.clientWidth + "px";
446 + // }
447 + // document.addEventListener("mouseup", this.handleMouseUp);
448 + // },
449 +
450 + // 鼠标放开结束拖动
451 + // handleMouseUp() {
452 + // this.dragColumn(this.dragState);
453 + // // 初始化拖动状态
454 + // this.dragState = {
455 + // start: -9,
456 + // end: -9,
457 + // dragging: false,
458 + // direction: undefined,
459 + // };
460 + // document.removeEventListener("mouseup", this.handleMouseUp);
461 + // },
462 +
463 + // 拖动中
464 + // handleMouseMove(e, column) {
465 + // if (this.dragState.dragging) {
466 + // let index = parseInt(column.columnKey); // 记录起始列
467 + // if (index - this.dragState.start !== 0) {
468 + // this.dragState.direction =
469 + // index - this.dragState.start < 0 ? "left" : "right"; // 判断拖动方向
470 + // this.dragState.end = parseInt(column.columnKey);
471 + // } else {
472 + // this.dragState.direction = undefined;
473 + // }
474 + // } else {
475 + // return false;
476 + // }
477 + // },
478 +
479 + // 拖动易位
480 + // dragColumn({ start, end, direction }) {
481 + // let tempData = [];
482 + // let left = direction === "left";
483 + // let min = left ? end : start - 1;
484 + // let max = left ? start + 1 : end;
485 + // for (let i = 0; i < this.newHeader.length; i++) {
486 + // if (i === end) {
487 + // tempData.push(this.newHeader[start]);
488 + // } else if (i > min && i < max) {
489 + // tempData.push(this.newHeader[left ? i - 1 : i + 1]);
490 + // } else {
491 + // tempData.push(this.newHeader[i]);
492 + // }
493 + // }
494 + // this.newHeader = tempData;
495 + // },
496 + // headerCellClassName({ column, columnIndex }) {
497 + // let active =
498 + // columnIndex - 1 === this.dragState.end
499 + // ? `darg_active_${this.dragState.direction}`
500 + // : "";
501 + // let start = columnIndex - 1 === this.dragState.start ? `darg_start` : "";
502 + // return `${active} ${start}`;
503 + // },
504 +
505 + // cellClassName({ column, columnIndex }) {
506 + // return columnIndex - 1 === this.dragState.start ? `darg_start` : "";
507 + // },
508 + //数据格式化
318 formatter(row, column, cellValue, index) { 509 formatter(row, column, cellValue, index) {
319 if (dictLabels[column.property]) { 510 if (dictLabels[column.property]) {
320 if (dictLabels[column.property][cellValue]) { 511 if (dictLabels[column.property][cellValue]) {
...@@ -330,14 +521,104 @@ export default { ...@@ -330,14 +521,104 @@ export default {
330 }; 521 };
331 </script> 522 </script>
332 523
333 -<style> 524 +<style lang="scss">
334 -.Tables {
335 - width: 100%;
336 - margin-top: 20px;
337 -}
338 .tablePagination { 525 .tablePagination {
339 margin-top: 40px; 526 margin-top: 40px;
340 text-align: right; 527 text-align: right;
341 } 528 }
529 +.w-table {
530 + height:100%;
531 +  .el-table .darg_start {
532 + background-color: #f3f3f3;
533 + }
534 + .el-table th {
535 + padding: 0;
536 + .virtual {
537 + position: absolute;
538 + display: block;
539 + width: 0;
540 + height: 0;
541 + top: 0px;
542 + left: 0px;
543 + background: none;
544 + border: none;
545 + }
546 + &.darg_active_left {
547 + .virtual {
548 + border-left: 2px dotted #666;
549 + z-index: 99;
550 + }
551 + }
552 + &.darg_active_right {
553 + .virtual {
554 + border-right: 2px dotted #666;
555 + z-index: 99;
556 + }
557 + }
558 + }
559 + .thead-cell {
560 + padding: 0;
561 + display: inline-flex;
562 + flex-direction: column;
563 + align-items: left;
564 + cursor: pointer;
565 + overflow: initial;
566 + &:before {
567 + content: "";
568 + position: absolute;
569 + top: 0;
570 + left: 0;
571 + bottom: 0;
572 + right: 0;
573 + }
574 + }
575 + &.w-table_moving {
576 + .el-table th .thead-cell {
577 + cursor: move !important;
578 + }
579 + .el-table__fixed {
580 + cursor: not-allowed;
581 + }
582 + }
583 +}
584 +.tableInfo {
585 + position: fixed;
586 + right: 30px;
587 + bottom: 100px;
588 + z-index: 99999999;
589 +}
590 +.tableList {
591 + width: 200px;
592 + max-height: 500px;
593 + padding: 5px;
594 + margin: 0;
595 + position: absolute;
596 + bottom: 35px;
597 + right: 0px;
598 + border: 1px solid #ccc;
599 + border-radius: 3%;
600 + background: #fff;
601 + overflow-y: scroll;
602 +}
603 +.tableList::-webkit-scrollbar {
604 + width: 4px;
605 + height: 4px;
606 +}
607 +.tableList::-webkit-scrollbar-thumb {
608 + border-radius: 10px;
609 + -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
610 + background: rgba(0, 0, 0, 0.2);
611 +}
612 +.tableList::-webkit-scrollbar-track {
613 + -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
614 + border-radius: 0;
615 + background: rgba(0, 0, 0, 0.2);
616 +}
617 +.flexList {
618 + width: 100%;
619 + display: flex;
620 + height: 20px;
621 + line-height: 20px;
622 +}
342 </style> 623 </style>
343 624
......
1 -<template>
2 - <div class="tableInfo">
3 - <el-dropdown trigger="click" :hide-on-click="false">
4 - <el-button
5 - type="primary"
6 - icon="el-icon-edit"
7 - size="medium"
8 - circle
9 - ></el-button>
10 - <el-dropdown-menu slot="dropdown">
11 - <el-checkbox-group v-model="checkList">
12 - <el-dropdown-item
13 - v-for="(item, index) in infoData"
14 - :key="index"
15 - v-if="!item.type"
16 - class="dropItem"
17 - >
18 - <el-checkbox
19 - :label="item.name"
20 - :checked="true"
21 - @change="checkChange"
22 - ></el-checkbox>
23 - <span class="itemRight">
24 - <i class="el-icon-caret-top" @click.stop="top(index)"></i>
25 - <i class="el-icon-caret-bottom" @click.stop="bottom(index)"></i>
26 - </span>
27 - </el-dropdown-item>
28 - </el-checkbox-group>
29 - </el-dropdown-menu>
30 - </el-dropdown>
31 - </div>
32 -</template>
33 -
34 -<script>
35 -export default {
36 - props: { infoData: { type: Array, default: null } },
37 - inheritAttrs: false,
38 - data() {
39 - return {
40 - checkList: [],
41 - };
42 - },
43 - methods: {
44 - checkChange(val) {
45 - this.$emit("checkChange", { type: val });
46 - },
47 - top(val) {
48 - this.$emit("top", val);
49 - },
50 - bottom(val) {
51 - this.$emit("bottom", val);
52 - },
53 - },
54 - created() {},
55 -};
56 -</script>
57 -
58 -<style scope lang="scss">
59 -.itemRight {
60 - display: -webkit-inline-box;
61 - display: -ms-inline-flexbox;
62 - display: inline-flex;
63 - -webkit-box-orient: vertical;
64 - -webkit-box-direction: normal;
65 - -ms-flex-direction: column;
66 - flex-direction: column;
67 - -webkit-box-align: center;
68 - -ms-flex-align: center;
69 - align-items: center;
70 - height: 34px;
71 - width: 24px;
72 - vertical-align: middle;
73 - cursor: pointer;
74 - overflow: initial;
75 - position: relative;
76 - .el-icon-caret-bottom,
77 - .el-icon-caret-top {
78 - width: 0;
79 - height: 0;
80 - border: solid 5px transparent;
81 - position: absolute;
82 - left: 10px;
83 - }
84 - .el-icon-caret-bottom {
85 - bottom: 12px;
86 - }
87 - .el-icon-caret-top {
88 - top: 5px;
89 - }
90 -}
91 -.dropItem {
92 - display: flex;
93 - justify-content: space-between;
94 -}
95 -</style>
96 -
97 -<style>
98 -.tableInfo {
99 - position: fixed;
100 - right: 30px;
101 - bottom: 40px;
102 - z-index: 99999999;
103 -}
104 -</style>
...\ No newline at end of file ...\ No newline at end of file
1 -<script>
2 -export default {
3 - name: "Item",
4 - inheritAttrs: false,
5 - props: {
6 - dom: {
7 - type: Object,
8 - default: null,
9 - },
10 - },
11 - render() {
12 - let newDom = [];
13 - newDom.push(this.dom);
14 - return newDom;
15 - },
16 - methods: {
17 - change(val){
18 - this.$emit('change',val)
19 - }
20 - },
21 -};
22 -</script>
...@@ -138,8 +138,6 @@ ...@@ -138,8 +138,6 @@
138 v-hasPermi="['base:flightInfo:close']" 138 v-hasPermi="['base:flightInfo:close']"
139 >自动配舱关闭</el-button 139 >自动配舱关闭</el-button
140 > 140 >
141 - <!-- <el-button type="primary" icon="el-icon-circle-check" size="mini">自动推送开启</el-button>
142 - <el-button type="primary" icon="el-icon-circle-close" size="mini">自动推送关闭</el-button> -->
143 </el-form> 141 </el-form>
144 <Tables 142 <Tables
145 ref="flightInfoTable" 143 ref="flightInfoTable"
...@@ -222,18 +220,6 @@ ...@@ -222,18 +220,6 @@
222 </el-date-picker> 220 </el-date-picker>
223 </el-form-item> 221 </el-form-item>
224 </el-col> 222 </el-col>
225 - <!-- <el-col :span="12">
226 - <el-form-item label="cutOff时间" prop="cutOffTime">
227 - <el-select v-model="form.cutOffTime" clearable placeholder="选择时间" type="string">
228 - <el-option
229 - v-for="item in selectOption.cutOffTime"
230 - :key="item"
231 - :label="item"
232 - :value="item">
233 - </el-option>
234 - </el-select>
235 - </el-form-item>
236 - </el-col> -->
237 <el-col :span="12"> 223 <el-col :span="12">
238 <el-form-item label="航班路线" prop="route"> 224 <el-form-item label="航班路线" prop="route">
239 <el-input 225 <el-input
...@@ -536,16 +522,6 @@ export default { ...@@ -536,16 +522,6 @@ export default {
536 fixed: false, 522 fixed: false,
537 disabled: true, 523 disabled: true,
538 }, 524 },
539 - // {
540 - // type: "",
541 - // name: "cutOff时间",
542 - // value: "cutOffTime",
543 - // width: "110",
544 - // align: "center",
545 - // sorTable: false,
546 - // fixed: false,
547 - // disabled:true
548 - // },
549 { 525 {
550 type: "", 526 type: "",
551 name: "航班号", 527 name: "航班号",
......