doway-coms 2.2.18 → 2.2.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/.browserslistrc +2 -2
  2. package/README.md +28 -28
  3. package/package.json +53 -53
  4. package/packages/AuditsList/index.js +7 -7
  5. package/packages/AuditsList/src/index.vue +262 -262
  6. package/packages/BaseButton/index.js +7 -7
  7. package/packages/BaseButton/src/index.vue +241 -241
  8. package/packages/BaseCheckbox/index.js +7 -7
  9. package/packages/BaseCheckbox/src/index.vue +134 -134
  10. package/packages/BaseDate/index.js +7 -7
  11. package/packages/BaseDate/src/index.vue +197 -197
  12. package/packages/BaseDateWeek/index.js +7 -7
  13. package/packages/BaseDateWeek/src/index.vue +163 -163
  14. package/packages/BaseDatetime/index.js +7 -7
  15. package/packages/BaseDatetime/src/index.vue +196 -196
  16. package/packages/BaseForm/index.js +7 -7
  17. package/packages/BaseForm/src/index.vue +728 -728
  18. package/packages/BaseGantt/index.js +9 -9
  19. package/packages/BaseGantt/src/index.vue +608 -608
  20. package/packages/BaseGrid/index.js +9 -9
  21. package/packages/BaseGrid/src/SeqSetting.vue +278 -278
  22. package/packages/BaseGrid/src/index.vue +3580 -3580
  23. package/packages/BaseGridAdjust/index.js +9 -9
  24. package/packages/BaseGridAdjust/src/index.vue +482 -482
  25. package/packages/BaseInput/index.js +7 -7
  26. package/packages/BaseInput/src/index.vue +164 -164
  27. package/packages/BaseIntervalInput/index.js +7 -7
  28. package/packages/BaseIntervalInput/src/index.vue +310 -310
  29. package/packages/BaseKanbanEmpty/index.js +7 -7
  30. package/packages/BaseKanbanEmpty/src/index.vue +176 -176
  31. package/packages/BaseNumberInput/index.js +7 -7
  32. package/packages/BaseNumberInput/src/index.vue +293 -293
  33. package/packages/BasePagination/index.js +7 -7
  34. package/packages/BasePagination/src/index.vue +91 -91
  35. package/packages/BasePictureCard/index.js +7 -7
  36. package/packages/BasePictureCard/src/index.vue +580 -580
  37. package/packages/BasePrintPreview/index.js +7 -7
  38. package/packages/BasePrintPreview/src/index.vue +129 -129
  39. package/packages/BasePulldown/index.js +7 -7
  40. package/packages/BasePulldown/src/index.vue +1265 -1265
  41. package/packages/BaseSearch/index.js +7 -7
  42. package/packages/BaseSearch/src/index.vue +935 -935
  43. package/packages/BaseSelect/index.js +7 -7
  44. package/packages/BaseSelect/src/index.vue +155 -155
  45. package/packages/BaseSelectMulti/index.js +7 -7
  46. package/packages/BaseSelectMulti/src/index.vue +148 -148
  47. package/packages/BaseTextArea/index.js +7 -7
  48. package/packages/BaseTextArea/src/index.vue +178 -178
  49. package/packages/BaseTime/index.js +7 -7
  50. package/packages/BaseTime/src/index.vue +166 -166
  51. package/packages/BaseTool/index.js +7 -7
  52. package/packages/BaseTool/src/index.vue +349 -349
  53. package/packages/BaseToolStatus/index.js +7 -7
  54. package/packages/BaseToolStatus/src/index.vue +388 -388
  55. package/packages/BaseTreeSelect/index.js +8 -8
  56. package/packages/BaseTreeSelect/src/index.vue +437 -416
  57. package/packages/LeaveAMessage/index.js +7 -7
  58. package/packages/LeaveAMessage/src/index.vue +597 -597
  59. package/packages/index.js +191 -191
  60. package/packages/styles/default.css +78 -78
  61. package/packages/styles/default.less +84 -84
  62. package/packages/utils/api.js +107 -107
  63. package/packages/utils/auth.js +38 -38
  64. package/packages/utils/common.js +610 -610
  65. package/packages/utils/dom.js +181 -181
  66. package/packages/utils/enum.js +86 -86
  67. package/packages/utils/filters.js +472 -472
  68. package/packages/utils/gridFormat.js +66 -66
  69. package/packages/utils/msg.js +84 -84
  70. package/packages/utils/patchFiles.js +44 -44
  71. package/packages/utils/request.js +178 -178
  72. package/packages/utils/store.js +305 -303
  73. package/vue.config.js +59 -59
@@ -1,482 +1,482 @@
1
- <template>
2
- <div>
3
- <vxe-grid
4
- ref="adjustGrid"
5
- v-bind="adjustGridOptions"
6
- :loading="adjustGridLoading"
7
- @resizable-change="resizableChange"
8
- :filter-config="{
9
- remote: true,
10
- }"
11
- :sort-config="{
12
- multiple: true,
13
- remote: true,
14
- chronological: true,
15
- }"
16
- column-key
17
- :menu-config="menuConfig"
18
- @menu-click="contextMenuClickEvent"
19
- >
20
- <template #empty>
21
- <div>拖拽调整字段位置或者宽度</div>
22
- </template>
23
- <!-- 是否显示字段 -->
24
- <template #checkbox="{ column }">
25
- <a-checkbox
26
- v-model="column.params.show"
27
- @change="changeCheckbox(column)"
28
- ></a-checkbox>
29
- {{ column.title }}
30
- </template>
31
-
32
- <!-- 筛选过滤 -->
33
- <template #text_filter="scope">
34
- <div class="interceptor-class">
35
- <div
36
- :class="scope.column.field + '_filter_' + $index"
37
- v-for="(loopFilterValue, $index) in scope.column.filters[0].data
38
- .displayValues"
39
- :key="$index"
40
- >
41
- <a-input
42
- allowClear
43
- v-model="loopFilterValue.value[0]"
44
- @keyup.enter.native="filterConfirm(scope.column)"
45
- />
46
- </div>
47
- <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
48
- <a-button @click="filterConfirm(scope.column)">确认</a-button>
49
- </div>
50
- </template>
51
- <template #customCell_filter="scope">
52
- <div class="interceptor-class">
53
- <div
54
- :class="scope.column.field + '_filter_' + $index"
55
- v-for="(loopFilterValue, $index) in scope.column.filters[0].data
56
- .displayValues"
57
- :key="$index"
58
- >
59
- <a-input
60
- allowClear
61
- v-model="loopFilterValue.value[0]"
62
- @keyup.enter.native="filterConfirm(scope.column)"
63
- />
64
- </div>
65
- <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
66
- <a-button @click="filterConfirm(scope.column)">确认</a-button>
67
- </div>
68
- </template>
69
- <template #pulldown_filter="scope">
70
- <div class="interceptor-class">
71
- <div
72
- :class="scope.column.field + '_filter_' + $index"
73
- v-for="(loopFilterValue, $index) in scope.column.filters[0].data
74
- .displayValues"
75
- :key="$index"
76
- >
77
- <a-input
78
- allowClear
79
- v-model="loopFilterValue.value[0]"
80
- @keyup.enter.native="filterConfirm(scope.column)"
81
- />
82
- </div>
83
- <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
84
- <a-button @click="filterConfirm(scope.column)">确认</a-button>
85
- </div>
86
- </template>
87
- <template #number_filter="scope">
88
- <div class="interceptor-class">
89
- <div
90
- :class="scope.column.field + '_filter_' + $index"
91
- v-for="(loopFilterValue, $index) in scope.column.filters[0].data
92
- .displayValues"
93
- :key="$index"
94
- >
95
- <a-input-number
96
- :precision="0"
97
- size="small"
98
- v-model="loopFilterValue.value[0]"
99
- @keyup.enter.native="filterConfirm(scope.column)"
100
- />~
101
- <a-input-number
102
- :precision="0"
103
- size="small"
104
- v-model="loopFilterValue.value[1]"
105
- @keyup.enter.native="filterConfirm(scope.column)"
106
- />
107
- </div>
108
- <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
109
- <a-button @click="filterConfirm(scope.column)">确认</a-button>
110
- </div>
111
- </template>
112
- <template #select_filter="scope">
113
- <div class="interceptor-class">
114
- <a-checkbox-group
115
- v-model="scope.column.filters[0].data.displayValues"
116
- :style="{
117
- display: 'flex',
118
- flexWrap: 'wrap',
119
- justifyContent: 'left',
120
- alignItems: 'center',
121
- maxHeight: '150px',
122
- overflow: 'auto',
123
- maxWidth: '100px',
124
- }"
125
- @keyup.enter.native="filterConfirm(scope.column)"
126
- >
127
- <br />
128
- <a-checkbox
129
- v-for="loopSource in scope.column.params.dataSource"
130
- :key="loopSource.value"
131
- :value="loopSource.value"
132
- style="margin: 5px 0"
133
- >{{ loopSource.caption }}
134
- </a-checkbox>
135
- </a-checkbox-group>
136
- <!-- <a-select-->
137
- <!-- v-model="scope.column.filters[0].data.displayValues"-->
138
- <!-- mode="multiple"-->
139
- <!-- allowClear-->
140
- <!-- style="width: 300px;"-->
141
- <!-- placeholder="筛选条件"-->
142
- <!-- showArrow-->
143
- <!-- >-->
144
- <!-- <a-select-option-->
145
- <!-- v-for="loopSource in scope.column.params.dataSource"-->
146
- <!-- :key="loopSource.value"-->
147
- <!-- :value="loopSource.value"-->
148
- <!-- >{{ loopSource.caption }}</a-select-option-->
149
- <!-- >-->
150
- <!-- </a-select>-->
151
- <br />
152
- <a-button @click="filterConfirm(scope.column)">确认</a-button>
153
- </div>
154
- </template>
155
- <template #datetime_filter="scope">
156
- <div class="interceptor-class">
157
- <div
158
- :class="scope.column.field + '_filter_' + $index"
159
- v-for="(loopFilterValue, $index) in scope.column.filters[0].data
160
- .displayValues"
161
- :key="$index"
162
- >
163
- <a-date-picker
164
- valueFormat="YYYY-MM-DD HH:mm:ss"
165
- format="YYYY-MM-DD HH:mm:ss"
166
- :show-time="{
167
- defaultValue: moment(
168
- '2000-01-01 00:00:00',
169
- 'YYYY-MM-DD HH:mm:ss'
170
- ),
171
- }"
172
- placeholder="开始时间"
173
- v-model="loopFilterValue.value[0]"
174
- @keyup.enter.native="filterConfirm(scope.column)"
175
- />
176
- <a-date-picker
177
- valueFormat="YYYY-MM-DD HH:mm:ss"
178
- format="YYYY-MM-DD HH:mm:ss"
179
- :show-time="{
180
- defaultValue: moment(
181
- '2000-01-01 23:59:59',
182
- 'YYYY-MM-DD HH:mm:ss'
183
- ),
184
- }"
185
- placeholder="结束时间"
186
- v-model="loopFilterValue.value[1]"
187
- @keyup.enter.native="filterConfirm(scope.column)"
188
- />
189
- </div>
190
- <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
191
- <a-button @click="filterConfirm(scope.column)">确认</a-button>
192
- </div>
193
- </template>
194
- <template #date_filter="scope">
195
- <div class="interceptor-class">
196
- <div
197
- :class="scope.column.field + '_filter_' + $index"
198
- v-for="(loopFilterValue, $index) in scope.column.filters[0].data
199
- .displayValues"
200
- :key="$index"
201
- >
202
- <a-range-picker
203
- v-model:value="loopFilterValue.value"
204
- valueFormat="YYYY-MM-DD"
205
- format="YYYY-MM-DD"
206
- @keyup.enter.native="filterConfirm(scope.column)"
207
- />
208
- </div>
209
- <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
210
- <a-button @click="filterConfirm(scope.column)">确认</a-button>
211
- </div>
212
- </template>
213
- </vxe-grid>
214
- </div>
215
- </template>
216
- <script>
217
- import Sortable from "sortablejs";
218
- import VXETable from "vxe-table";
219
- import XEUtils from "xe-utils";
220
- import { controlType } from "../../utils/enum";
221
-
222
- export default {
223
- props: {
224
- userDefineColumns: {
225
- type: Array,
226
- default: function () {
227
- return [];
228
- },
229
- },
230
- },
231
- created() {
232
- this.adjustUserDefineColumns = this.userDefineColumns;
233
- this.adjustUserDefineColumns.forEach((item) => {
234
- if (item.visible) {
235
- this.$set(item, "show", true);
236
- } else {
237
- this.$set(item, "show", false);
238
- }
239
- });
240
- this.adjustGridOptions.columns = [];
241
- this.adjustUserDefineColumns.forEach((item) => {
242
- if (item.field === "operation") {
243
- return;
244
- }
245
-
246
- const column = {
247
- field: item.field,
248
- title: item.title,
249
- slots: {
250
- header: "checkbox",
251
- filter: item.slots.filter,
252
- },
253
- params: item.params,
254
- width: item.width,
255
- filters: item.filters,
256
- sortable: item.sortable,
257
- filterResetMethod: ({ options, column }) => {
258
- column.filters = [
259
- {
260
- data: {
261
- bindingValues: [],
262
- displayValues: [],
263
- },
264
- },
265
- ];
266
- },
267
- };
268
- this.$set(column.params, "show", item.show);
269
- this.adjustGridOptions.columns.push(column);
270
- });
271
- },
272
- mounted() {
273
- this.$refs.adjustGrid.getTableColumn().collectColumn.forEach((item) => {
274
- const find = XEUtils.find(
275
- this.adjustUserDefineColumns,
276
- (innerItem) => item.field === innerItem.field
277
- );
278
- item.order = find.order;
279
- });
280
- this.columnDrop(this.adjustUserDefineColumns);
281
- },
282
- beforeDestroy() {
283
- if (this.sortable) {
284
- this.sortable.destroy();
285
- }
286
- },
287
- data() {
288
- return {
289
- menuConfig: {
290
- header: {
291
- options: [
292
- [
293
- {
294
- code: "clearFilter",
295
- name: "清空筛选",
296
- visible: true,
297
- disabled: false,
298
- },
299
- ],
300
- ],
301
- },
302
- enabled: true,
303
- },
304
- adjustGridLoading: false,
305
- adjustUserDefineColumns: null,
306
- adjustGridOptions: {
307
- border: true,
308
- class: "sortable-column-demo",
309
- columnConfig: {
310
- useKey: true,
311
- resizable: true,
312
- },
313
- scrollX: {
314
- enabled: false,
315
- },
316
- columns: [],
317
- data: [],
318
- },
319
- };
320
- },
321
-
322
- methods: {
323
- changeCheckbox(val) {
324
- const find = XEUtils.find(
325
- this.$refs.adjustGrid.getTableColumn().collectColumn,
326
- (item) => item.field === val.field
327
- );
328
- find.visible = val.params.show;
329
- },
330
- //右键菜单事件
331
- contextMenuClickEvent({ menu, row, column }) {
332
- const $table = this.$refs.adjustGrid;
333
- switch (menu.code) {
334
- case "clearFilter":
335
- const filterList = this.$refs.adjustGrid.getCheckedFilters();
336
- filterList.forEach((col) => {
337
- this.getTableColumn().forEach((column) => {
338
- if (column.field == col.property) {
339
- this.$set(column.filters[0].data, "displayValues", []);
340
- this.$set(column.filters[0].data, "bindingValues", []);
341
- this.$refs.adjustGrid.clearFilter(column);
342
- }
343
- });
344
- //这个col和 internalColumn之间没有绑定上
345
- col.column.filters = [
346
- {
347
- data: {
348
- bindingValues: [],
349
- displayValues: [],
350
- },
351
- },
352
- ];
353
- });
354
- // this.$refs.adjustGrid.clearFilter()
355
- // .then(res=>{
356
- // console.log('a',this.$refs.adjustGrid.getCheckedFilters())
357
- // console.log('b',this.getTableColumn())
358
- // })
359
- // XEUtils.clear(this.filterExpression)
360
- // vm.$emit("filterChange");
361
- break;
362
- }
363
- },
364
- resizableChange($rowIndex) {
365
- this.$refs.adjustGrid.getTableColumn().collectColumn.forEach((item) => {
366
- if (item.field === $rowIndex.column.field) {
367
- item.width = $rowIndex.column.resizeWidth;
368
- }
369
- });
370
- },
371
- columnDrop() {
372
- this.$nextTick(() => {
373
- this.adjustGridLoading = true;
374
- const $table = this.$refs.adjustGrid;
375
- this.sortable = Sortable.create(
376
- $table.$el.querySelector(
377
- ".body--wrapper>.vxe-table--header .vxe-header--row"
378
- ),
379
- {
380
- handle: ".vxe-header--column",
381
- onEnd: ({ item, newIndex, oldIndex }) => {
382
- const { fullColumn, tableColumn } = $table.getTableColumn();
383
- const targetThElem = item;
384
- const wrapperElem = targetThElem.parentNode;
385
- const newColumn = fullColumn[newIndex];
386
- if (newColumn.fixed) {
387
- const oldThElem = wrapperElem.children[oldIndex];
388
- // 错误的移动
389
- if (newIndex > oldIndex) {
390
- wrapperElem.insertBefore(targetThElem, oldThElem);
391
- } else {
392
- wrapperElem.insertBefore(
393
- targetThElem,
394
- oldThElem ? oldThElem.nextElementSibling : oldThElem
395
- );
396
- }
397
- VXETable.modal.message({
398
- content: "固定列不允许拖动,即将还原操作!",
399
- status: "error",
400
- });
401
- return;
402
- }
403
- // 获取列索引 columnIndex > fullColumn
404
- const oldColumnIndex = $table.getColumnIndex(
405
- tableColumn[oldIndex]
406
- );
407
- const newColumnIndex = $table.getColumnIndex(
408
- tableColumn[newIndex]
409
- );
410
- // 移动到目标列
411
- const currRow = fullColumn.splice(oldColumnIndex, 1)[0];
412
- fullColumn.splice(newColumnIndex, 0, currRow);
413
- $table.loadColumn(fullColumn);
414
- this.adjustUserDefineColumns = fullColumn;
415
- },
416
- }
417
- );
418
- this.adjustGridLoading = false;
419
- });
420
- },
421
- filterAddExp(colInfo) {
422
- colInfo.filters[0].data.displayValues.push({
423
- value: [null, null],
424
- });
425
- },
426
- filterConfirm(colInfo) {
427
- let col = this.adjustUserDefineColumns.find(
428
- (x) => x.field === colInfo.property
429
- );
430
- this.$set(col.filters[0].data, "bindingValues", []);
431
- colInfo.filters[0].data.bindingValues = [];
432
- XEUtils.arrayEach(colInfo.filters[0].data.displayValues, (item) => {
433
- if (colInfo.params.controlType === controlType.select) {
434
- colInfo.filters[0].data.bindingValues.push(item);
435
- this.$set(
436
- col.filters[0].data,
437
- "bindingValues",
438
- colInfo.filters[0].data.bindingValues
439
- );
440
- } else {
441
- if (item.value[0] || item.value[1]) {
442
- colInfo.filters[0].data.bindingValues.push(item);
443
- this.$set(
444
- col.filters[0].data,
445
- "bindingValues",
446
- colInfo.filters[0].data.bindingValues
447
- );
448
- }
449
- }
450
- });
451
- colInfo.filters[0].checked =
452
- colInfo.filters[0].data.bindingValues.length > 0;
453
- this.$refs.adjustGrid.closeFilter();
454
- },
455
- getTableColumn() {
456
- return this.$refs.adjustGrid.getTableColumn().collectColumn;
457
- },
458
- },
459
- };
460
- </script>
461
- <style scoped lang="less">
462
- .sortable-column-demo .vxe-header--row .vxe-header--column.sortable-ghost,
463
- .sortable-column-demo .vxe-header--row .vxe-header--column.sortable-chosen {
464
- background-color: #dfecfb;
465
- }
466
- .sortable-column-demo .vxe-header--row .vxe-header--column.col--fixed {
467
- cursor: no-drop;
468
- }
469
-
470
- .interceptor-class {
471
- padding: 10px;
472
- ::v-deep .ant-btn {
473
- margin: 10px 10px 0;
474
- }
475
- ::v-deep .ant-input {
476
- margin-bottom: 5px;
477
- }
478
- ::v-deep .ant-calendar-picker {
479
- margin: 0 5px;
480
- }
481
- }
482
- </style>
1
+ <template>
2
+ <div>
3
+ <vxe-grid
4
+ ref="adjustGrid"
5
+ v-bind="adjustGridOptions"
6
+ :loading="adjustGridLoading"
7
+ @resizable-change="resizableChange"
8
+ :filter-config="{
9
+ remote: true,
10
+ }"
11
+ :sort-config="{
12
+ multiple: true,
13
+ remote: true,
14
+ chronological: true,
15
+ }"
16
+ column-key
17
+ :menu-config="menuConfig"
18
+ @menu-click="contextMenuClickEvent"
19
+ >
20
+ <template #empty>
21
+ <div>拖拽调整字段位置或者宽度</div>
22
+ </template>
23
+ <!-- 是否显示字段 -->
24
+ <template #checkbox="{ column }">
25
+ <a-checkbox
26
+ v-model="column.params.show"
27
+ @change="changeCheckbox(column)"
28
+ ></a-checkbox>
29
+ {{ column.title }}
30
+ </template>
31
+
32
+ <!-- 筛选过滤 -->
33
+ <template #text_filter="scope">
34
+ <div class="interceptor-class">
35
+ <div
36
+ :class="scope.column.field + '_filter_' + $index"
37
+ v-for="(loopFilterValue, $index) in scope.column.filters[0].data
38
+ .displayValues"
39
+ :key="$index"
40
+ >
41
+ <a-input
42
+ allowClear
43
+ v-model="loopFilterValue.value[0]"
44
+ @keyup.enter.native="filterConfirm(scope.column)"
45
+ />
46
+ </div>
47
+ <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
48
+ <a-button @click="filterConfirm(scope.column)">确认</a-button>
49
+ </div>
50
+ </template>
51
+ <template #customCell_filter="scope">
52
+ <div class="interceptor-class">
53
+ <div
54
+ :class="scope.column.field + '_filter_' + $index"
55
+ v-for="(loopFilterValue, $index) in scope.column.filters[0].data
56
+ .displayValues"
57
+ :key="$index"
58
+ >
59
+ <a-input
60
+ allowClear
61
+ v-model="loopFilterValue.value[0]"
62
+ @keyup.enter.native="filterConfirm(scope.column)"
63
+ />
64
+ </div>
65
+ <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
66
+ <a-button @click="filterConfirm(scope.column)">确认</a-button>
67
+ </div>
68
+ </template>
69
+ <template #pulldown_filter="scope">
70
+ <div class="interceptor-class">
71
+ <div
72
+ :class="scope.column.field + '_filter_' + $index"
73
+ v-for="(loopFilterValue, $index) in scope.column.filters[0].data
74
+ .displayValues"
75
+ :key="$index"
76
+ >
77
+ <a-input
78
+ allowClear
79
+ v-model="loopFilterValue.value[0]"
80
+ @keyup.enter.native="filterConfirm(scope.column)"
81
+ />
82
+ </div>
83
+ <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
84
+ <a-button @click="filterConfirm(scope.column)">确认</a-button>
85
+ </div>
86
+ </template>
87
+ <template #number_filter="scope">
88
+ <div class="interceptor-class">
89
+ <div
90
+ :class="scope.column.field + '_filter_' + $index"
91
+ v-for="(loopFilterValue, $index) in scope.column.filters[0].data
92
+ .displayValues"
93
+ :key="$index"
94
+ >
95
+ <a-input-number
96
+ :precision="0"
97
+ size="small"
98
+ v-model="loopFilterValue.value[0]"
99
+ @keyup.enter.native="filterConfirm(scope.column)"
100
+ />~
101
+ <a-input-number
102
+ :precision="0"
103
+ size="small"
104
+ v-model="loopFilterValue.value[1]"
105
+ @keyup.enter.native="filterConfirm(scope.column)"
106
+ />
107
+ </div>
108
+ <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
109
+ <a-button @click="filterConfirm(scope.column)">确认</a-button>
110
+ </div>
111
+ </template>
112
+ <template #select_filter="scope">
113
+ <div class="interceptor-class">
114
+ <a-checkbox-group
115
+ v-model="scope.column.filters[0].data.displayValues"
116
+ :style="{
117
+ display: 'flex',
118
+ flexWrap: 'wrap',
119
+ justifyContent: 'left',
120
+ alignItems: 'center',
121
+ maxHeight: '150px',
122
+ overflow: 'auto',
123
+ maxWidth: '100px',
124
+ }"
125
+ @keyup.enter.native="filterConfirm(scope.column)"
126
+ >
127
+ <br />
128
+ <a-checkbox
129
+ v-for="loopSource in scope.column.params.dataSource"
130
+ :key="loopSource.value"
131
+ :value="loopSource.value"
132
+ style="margin: 5px 0"
133
+ >{{ loopSource.caption }}
134
+ </a-checkbox>
135
+ </a-checkbox-group>
136
+ <!-- <a-select-->
137
+ <!-- v-model="scope.column.filters[0].data.displayValues"-->
138
+ <!-- mode="multiple"-->
139
+ <!-- allowClear-->
140
+ <!-- style="width: 300px;"-->
141
+ <!-- placeholder="筛选条件"-->
142
+ <!-- showArrow-->
143
+ <!-- >-->
144
+ <!-- <a-select-option-->
145
+ <!-- v-for="loopSource in scope.column.params.dataSource"-->
146
+ <!-- :key="loopSource.value"-->
147
+ <!-- :value="loopSource.value"-->
148
+ <!-- >{{ loopSource.caption }}</a-select-option-->
149
+ <!-- >-->
150
+ <!-- </a-select>-->
151
+ <br />
152
+ <a-button @click="filterConfirm(scope.column)">确认</a-button>
153
+ </div>
154
+ </template>
155
+ <template #datetime_filter="scope">
156
+ <div class="interceptor-class">
157
+ <div
158
+ :class="scope.column.field + '_filter_' + $index"
159
+ v-for="(loopFilterValue, $index) in scope.column.filters[0].data
160
+ .displayValues"
161
+ :key="$index"
162
+ >
163
+ <a-date-picker
164
+ valueFormat="YYYY-MM-DD HH:mm:ss"
165
+ format="YYYY-MM-DD HH:mm:ss"
166
+ :show-time="{
167
+ defaultValue: moment(
168
+ '2000-01-01 00:00:00',
169
+ 'YYYY-MM-DD HH:mm:ss'
170
+ ),
171
+ }"
172
+ placeholder="开始时间"
173
+ v-model="loopFilterValue.value[0]"
174
+ @keyup.enter.native="filterConfirm(scope.column)"
175
+ />
176
+ <a-date-picker
177
+ valueFormat="YYYY-MM-DD HH:mm:ss"
178
+ format="YYYY-MM-DD HH:mm:ss"
179
+ :show-time="{
180
+ defaultValue: moment(
181
+ '2000-01-01 23:59:59',
182
+ 'YYYY-MM-DD HH:mm:ss'
183
+ ),
184
+ }"
185
+ placeholder="结束时间"
186
+ v-model="loopFilterValue.value[1]"
187
+ @keyup.enter.native="filterConfirm(scope.column)"
188
+ />
189
+ </div>
190
+ <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
191
+ <a-button @click="filterConfirm(scope.column)">确认</a-button>
192
+ </div>
193
+ </template>
194
+ <template #date_filter="scope">
195
+ <div class="interceptor-class">
196
+ <div
197
+ :class="scope.column.field + '_filter_' + $index"
198
+ v-for="(loopFilterValue, $index) in scope.column.filters[0].data
199
+ .displayValues"
200
+ :key="$index"
201
+ >
202
+ <a-range-picker
203
+ v-model:value="loopFilterValue.value"
204
+ valueFormat="YYYY-MM-DD"
205
+ format="YYYY-MM-DD"
206
+ @keyup.enter.native="filterConfirm(scope.column)"
207
+ />
208
+ </div>
209
+ <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
210
+ <a-button @click="filterConfirm(scope.column)">确认</a-button>
211
+ </div>
212
+ </template>
213
+ </vxe-grid>
214
+ </div>
215
+ </template>
216
+ <script>
217
+ import Sortable from "sortablejs";
218
+ import VXETable from "vxe-table";
219
+ import XEUtils from "xe-utils";
220
+ import { controlType } from "../../utils/enum";
221
+
222
+ export default {
223
+ props: {
224
+ userDefineColumns: {
225
+ type: Array,
226
+ default: function () {
227
+ return [];
228
+ },
229
+ },
230
+ },
231
+ created() {
232
+ this.adjustUserDefineColumns = this.userDefineColumns;
233
+ this.adjustUserDefineColumns.forEach((item) => {
234
+ if (item.visible) {
235
+ this.$set(item, "show", true);
236
+ } else {
237
+ this.$set(item, "show", false);
238
+ }
239
+ });
240
+ this.adjustGridOptions.columns = [];
241
+ this.adjustUserDefineColumns.forEach((item) => {
242
+ if (item.field === "operation") {
243
+ return;
244
+ }
245
+
246
+ const column = {
247
+ field: item.field,
248
+ title: item.title,
249
+ slots: {
250
+ header: "checkbox",
251
+ filter: item.slots.filter,
252
+ },
253
+ params: item.params,
254
+ width: item.width,
255
+ filters: item.filters,
256
+ sortable: item.sortable,
257
+ filterResetMethod: ({ options, column }) => {
258
+ column.filters = [
259
+ {
260
+ data: {
261
+ bindingValues: [],
262
+ displayValues: [],
263
+ },
264
+ },
265
+ ];
266
+ },
267
+ };
268
+ this.$set(column.params, "show", item.show);
269
+ this.adjustGridOptions.columns.push(column);
270
+ });
271
+ },
272
+ mounted() {
273
+ this.$refs.adjustGrid.getTableColumn().collectColumn.forEach((item) => {
274
+ const find = XEUtils.find(
275
+ this.adjustUserDefineColumns,
276
+ (innerItem) => item.field === innerItem.field
277
+ );
278
+ item.order = find.order;
279
+ });
280
+ this.columnDrop(this.adjustUserDefineColumns);
281
+ },
282
+ beforeDestroy() {
283
+ if (this.sortable) {
284
+ this.sortable.destroy();
285
+ }
286
+ },
287
+ data() {
288
+ return {
289
+ menuConfig: {
290
+ header: {
291
+ options: [
292
+ [
293
+ {
294
+ code: "clearFilter",
295
+ name: "清空筛选",
296
+ visible: true,
297
+ disabled: false,
298
+ },
299
+ ],
300
+ ],
301
+ },
302
+ enabled: true,
303
+ },
304
+ adjustGridLoading: false,
305
+ adjustUserDefineColumns: null,
306
+ adjustGridOptions: {
307
+ border: true,
308
+ class: "sortable-column-demo",
309
+ columnConfig: {
310
+ useKey: true,
311
+ resizable: true,
312
+ },
313
+ scrollX: {
314
+ enabled: false,
315
+ },
316
+ columns: [],
317
+ data: [],
318
+ },
319
+ };
320
+ },
321
+
322
+ methods: {
323
+ changeCheckbox(val) {
324
+ const find = XEUtils.find(
325
+ this.$refs.adjustGrid.getTableColumn().collectColumn,
326
+ (item) => item.field === val.field
327
+ );
328
+ find.visible = val.params.show;
329
+ },
330
+ //右键菜单事件
331
+ contextMenuClickEvent({ menu, row, column }) {
332
+ const $table = this.$refs.adjustGrid;
333
+ switch (menu.code) {
334
+ case "clearFilter":
335
+ const filterList = this.$refs.adjustGrid.getCheckedFilters();
336
+ filterList.forEach((col) => {
337
+ this.getTableColumn().forEach((column) => {
338
+ if (column.field == col.property) {
339
+ this.$set(column.filters[0].data, "displayValues", []);
340
+ this.$set(column.filters[0].data, "bindingValues", []);
341
+ this.$refs.adjustGrid.clearFilter(column);
342
+ }
343
+ });
344
+ //这个col和 internalColumn之间没有绑定上
345
+ col.column.filters = [
346
+ {
347
+ data: {
348
+ bindingValues: [],
349
+ displayValues: [],
350
+ },
351
+ },
352
+ ];
353
+ });
354
+ // this.$refs.adjustGrid.clearFilter()
355
+ // .then(res=>{
356
+ // console.log('a',this.$refs.adjustGrid.getCheckedFilters())
357
+ // console.log('b',this.getTableColumn())
358
+ // })
359
+ // XEUtils.clear(this.filterExpression)
360
+ // vm.$emit("filterChange");
361
+ break;
362
+ }
363
+ },
364
+ resizableChange($rowIndex) {
365
+ this.$refs.adjustGrid.getTableColumn().collectColumn.forEach((item) => {
366
+ if (item.field === $rowIndex.column.field) {
367
+ item.width = $rowIndex.column.resizeWidth;
368
+ }
369
+ });
370
+ },
371
+ columnDrop() {
372
+ this.$nextTick(() => {
373
+ this.adjustGridLoading = true;
374
+ const $table = this.$refs.adjustGrid;
375
+ this.sortable = Sortable.create(
376
+ $table.$el.querySelector(
377
+ ".body--wrapper>.vxe-table--header .vxe-header--row"
378
+ ),
379
+ {
380
+ handle: ".vxe-header--column",
381
+ onEnd: ({ item, newIndex, oldIndex }) => {
382
+ const { fullColumn, tableColumn } = $table.getTableColumn();
383
+ const targetThElem = item;
384
+ const wrapperElem = targetThElem.parentNode;
385
+ const newColumn = fullColumn[newIndex];
386
+ if (newColumn.fixed) {
387
+ const oldThElem = wrapperElem.children[oldIndex];
388
+ // 错误的移动
389
+ if (newIndex > oldIndex) {
390
+ wrapperElem.insertBefore(targetThElem, oldThElem);
391
+ } else {
392
+ wrapperElem.insertBefore(
393
+ targetThElem,
394
+ oldThElem ? oldThElem.nextElementSibling : oldThElem
395
+ );
396
+ }
397
+ VXETable.modal.message({
398
+ content: "固定列不允许拖动,即将还原操作!",
399
+ status: "error",
400
+ });
401
+ return;
402
+ }
403
+ // 获取列索引 columnIndex > fullColumn
404
+ const oldColumnIndex = $table.getColumnIndex(
405
+ tableColumn[oldIndex]
406
+ );
407
+ const newColumnIndex = $table.getColumnIndex(
408
+ tableColumn[newIndex]
409
+ );
410
+ // 移动到目标列
411
+ const currRow = fullColumn.splice(oldColumnIndex, 1)[0];
412
+ fullColumn.splice(newColumnIndex, 0, currRow);
413
+ $table.loadColumn(fullColumn);
414
+ this.adjustUserDefineColumns = fullColumn;
415
+ },
416
+ }
417
+ );
418
+ this.adjustGridLoading = false;
419
+ });
420
+ },
421
+ filterAddExp(colInfo) {
422
+ colInfo.filters[0].data.displayValues.push({
423
+ value: [null, null],
424
+ });
425
+ },
426
+ filterConfirm(colInfo) {
427
+ let col = this.adjustUserDefineColumns.find(
428
+ (x) => x.field === colInfo.property
429
+ );
430
+ this.$set(col.filters[0].data, "bindingValues", []);
431
+ colInfo.filters[0].data.bindingValues = [];
432
+ XEUtils.arrayEach(colInfo.filters[0].data.displayValues, (item) => {
433
+ if (colInfo.params.controlType === controlType.select) {
434
+ colInfo.filters[0].data.bindingValues.push(item);
435
+ this.$set(
436
+ col.filters[0].data,
437
+ "bindingValues",
438
+ colInfo.filters[0].data.bindingValues
439
+ );
440
+ } else {
441
+ if (item.value[0] || item.value[1]) {
442
+ colInfo.filters[0].data.bindingValues.push(item);
443
+ this.$set(
444
+ col.filters[0].data,
445
+ "bindingValues",
446
+ colInfo.filters[0].data.bindingValues
447
+ );
448
+ }
449
+ }
450
+ });
451
+ colInfo.filters[0].checked =
452
+ colInfo.filters[0].data.bindingValues.length > 0;
453
+ this.$refs.adjustGrid.closeFilter();
454
+ },
455
+ getTableColumn() {
456
+ return this.$refs.adjustGrid.getTableColumn().collectColumn;
457
+ },
458
+ },
459
+ };
460
+ </script>
461
+ <style scoped lang="less">
462
+ .sortable-column-demo .vxe-header--row .vxe-header--column.sortable-ghost,
463
+ .sortable-column-demo .vxe-header--row .vxe-header--column.sortable-chosen {
464
+ background-color: #dfecfb;
465
+ }
466
+ .sortable-column-demo .vxe-header--row .vxe-header--column.col--fixed {
467
+ cursor: no-drop;
468
+ }
469
+
470
+ .interceptor-class {
471
+ padding: 10px;
472
+ ::v-deep .ant-btn {
473
+ margin: 10px 10px 0;
474
+ }
475
+ ::v-deep .ant-input {
476
+ margin-bottom: 5px;
477
+ }
478
+ ::v-deep .ant-calendar-picker {
479
+ margin: 0 5px;
480
+ }
481
+ }
482
+ </style>