doway-coms 1.6.44 → 1.6.46

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 (72) hide show
  1. package/.browserslistrc +2 -2
  2. package/README.md +28 -28
  3. package/dist/css/chunk-vendors.7f83d8f9.css +8 -0
  4. package/dist/css/index.86478f73.css +3 -0
  5. package/dist/favicon.ico +0 -0
  6. package/dist/js/chunk-vendors.307eaa8f.js +347 -0
  7. package/dist/js/index.48e7f7ac.js +2 -0
  8. package/package.json +52 -52
  9. package/packages/BaseButton/index.js +7 -7
  10. package/packages/BaseButton/src/index.vue +241 -241
  11. package/packages/BaseCheckbox/index.js +7 -7
  12. package/packages/BaseCheckbox/src/index.vue +134 -134
  13. package/packages/BaseDate/index.js +7 -7
  14. package/packages/BaseDate/src/index.vue +197 -197
  15. package/packages/BaseDateWeek/index.js +7 -7
  16. package/packages/BaseDateWeek/src/index.vue +163 -163
  17. package/packages/BaseDatetime/index.js +7 -7
  18. package/packages/BaseDatetime/src/index.vue +196 -196
  19. package/packages/BaseForm/index.js +7 -7
  20. package/packages/BaseForm/src/index.vue +666 -666
  21. package/packages/BaseGantt/index.js +9 -9
  22. package/packages/BaseGantt/src/index.vue +608 -608
  23. package/packages/BaseGrid/index.js +9 -9
  24. package/packages/BaseGrid/src/index.vue +2749 -2746
  25. package/packages/BaseGridAdjust/index.js +9 -9
  26. package/packages/BaseGridAdjust/src/index.vue +482 -455
  27. package/packages/BaseInput/index.js +7 -7
  28. package/packages/BaseInput/src/index.vue +164 -164
  29. package/packages/BaseIntervalInput/index.js +7 -7
  30. package/packages/BaseIntervalInput/src/index.vue +310 -310
  31. package/packages/BaseKanbanEmpty/index.js +7 -7
  32. package/packages/BaseKanbanEmpty/src/index.vue +176 -176
  33. package/packages/BaseNumberInput/index.js +7 -7
  34. package/packages/BaseNumberInput/src/index.vue +229 -229
  35. package/packages/BasePagination/index.js +7 -7
  36. package/packages/BasePagination/src/index.vue +91 -91
  37. package/packages/BasePictureCard/index.js +7 -7
  38. package/packages/BasePictureCard/src/index.vue +580 -580
  39. package/packages/BasePrintPreview/index.js +7 -7
  40. package/packages/BasePrintPreview/src/index.vue +117 -117
  41. package/packages/BasePulldown/index.js +7 -7
  42. package/packages/BasePulldown/src/index.vue +1136 -1136
  43. package/packages/BaseSearch/index.js +7 -7
  44. package/packages/BaseSearch/src/index.vue +935 -935
  45. package/packages/BaseSelect/index.js +7 -7
  46. package/packages/BaseSelect/src/index.vue +155 -155
  47. package/packages/BaseSelectMulti/index.js +7 -7
  48. package/packages/BaseSelectMulti/src/index.vue +148 -148
  49. package/packages/BaseTextArea/index.js +7 -7
  50. package/packages/BaseTextArea/src/index.vue +178 -178
  51. package/packages/BaseTime/index.js +7 -7
  52. package/packages/BaseTime/src/index.vue +166 -166
  53. package/packages/BaseTool/index.js +7 -7
  54. package/packages/BaseTool/src/index.vue +349 -349
  55. package/packages/BaseToolStatus/index.js +7 -7
  56. package/packages/BaseToolStatus/src/index.vue +388 -388
  57. package/packages/LeaveAMessage/index.js +8 -0
  58. package/packages/LeaveAMessage/src/index.vue +386 -0
  59. package/packages/index.js +167 -165
  60. package/packages/styles/default.less +80 -80
  61. package/packages/utils/api.js +74 -45
  62. package/packages/utils/auth.js +38 -38
  63. package/packages/utils/common.js +595 -595
  64. package/packages/utils/dom.js +181 -181
  65. package/packages/utils/enum.js +83 -83
  66. package/packages/utils/filters.js +458 -458
  67. package/packages/utils/gridFormat.js +60 -60
  68. package/packages/utils/msg.js +16 -16
  69. package/packages/utils/patchFiles.js +44 -44
  70. package/packages/utils/request.js +169 -169
  71. package/packages/utils/store.js +261 -261
  72. package/vue.config.js +59 -59
@@ -1,455 +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 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>
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>