doway-coms 1.6.40 → 1.6.41

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