doway-coms 1.5.7 → 1.5.9

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 (74) 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.7946d50b.css +1 -0
  5. package/dist/favicon.ico +0 -0
  6. package/dist/js/chunk-vendors.28fda91d.js +340 -0
  7. package/dist/js/index.49bc6add.js +2 -0
  8. package/lib/doway-coms.common.js +120397 -0
  9. package/lib/doway-coms.css +1 -0
  10. package/lib/doway-coms.umd.js +120407 -0
  11. package/lib/doway-coms.umd.min.js +328 -0
  12. package/package.json +52 -52
  13. package/packages/BaseButton/index.js +7 -7
  14. package/packages/BaseButton/src/index.vue +241 -241
  15. package/packages/BaseCheckbox/index.js +7 -7
  16. package/packages/BaseCheckbox/src/index.vue +134 -134
  17. package/packages/BaseDate/index.js +7 -7
  18. package/packages/BaseDate/src/index.vue +197 -197
  19. package/packages/BaseDateWeek/index.js +7 -7
  20. package/packages/BaseDateWeek/src/index.vue +163 -163
  21. package/packages/BaseDatetime/index.js +7 -7
  22. package/packages/BaseDatetime/src/index.vue +196 -196
  23. package/packages/BaseForm/index.js +7 -7
  24. package/packages/BaseForm/src/index.vue +664 -664
  25. package/packages/BaseGantt/index.js +9 -9
  26. package/packages/BaseGantt/src/index.vue +604 -604
  27. package/packages/BaseGrid/index.js +9 -9
  28. package/packages/BaseGrid/src/index.vue +2700 -2690
  29. package/packages/BaseGridAdjust/index.js +9 -9
  30. package/packages/BaseGridAdjust/src/index.vue +455 -455
  31. package/packages/BaseInput/index.js +7 -7
  32. package/packages/BaseInput/src/index.vue +164 -164
  33. package/packages/BaseIntervalInput/index.js +7 -7
  34. package/packages/BaseIntervalInput/src/index.vue +310 -310
  35. package/packages/BaseKanbanEmpty/index.js +7 -7
  36. package/packages/BaseKanbanEmpty/src/index.vue +176 -176
  37. package/packages/BaseNumberInput/index.js +7 -7
  38. package/packages/BaseNumberInput/src/index.vue +229 -229
  39. package/packages/BasePagination/index.js +7 -7
  40. package/packages/BasePagination/src/index.vue +91 -91
  41. package/packages/BasePictureCard/index.js +7 -7
  42. package/packages/BasePictureCard/src/index.vue +561 -561
  43. package/packages/BasePrintPreview/index.js +7 -7
  44. package/packages/BasePrintPreview/src/index.vue +117 -117
  45. package/packages/BasePulldown/index.js +7 -7
  46. package/packages/BasePulldown/src/index.vue +867 -867
  47. package/packages/BaseSearch/index.js +7 -7
  48. package/packages/BaseSearch/src/index.vue +935 -935
  49. package/packages/BaseSelect/index.js +7 -7
  50. package/packages/BaseSelect/src/index.vue +153 -153
  51. package/packages/BaseSelectMulti/index.js +7 -7
  52. package/packages/BaseSelectMulti/src/index.vue +148 -148
  53. package/packages/BaseTextArea/index.js +7 -7
  54. package/packages/BaseTextArea/src/index.vue +178 -178
  55. package/packages/BaseTime/index.js +7 -7
  56. package/packages/BaseTime/src/index.vue +166 -166
  57. package/packages/BaseTool/index.js +7 -7
  58. package/packages/BaseTool/src/index.vue +349 -349
  59. package/packages/BaseToolStatus/index.js +7 -7
  60. package/packages/BaseToolStatus/src/index.vue +383 -383
  61. package/packages/index.js +165 -165
  62. package/packages/styles/default.less +80 -80
  63. package/packages/utils/api.js +45 -45
  64. package/packages/utils/auth.js +38 -38
  65. package/packages/utils/common.js +583 -583
  66. package/packages/utils/dom.js +181 -181
  67. package/packages/utils/enum.js +83 -83
  68. package/packages/utils/filters.js +458 -458
  69. package/packages/utils/gridFormat.js +52 -52
  70. package/packages/utils/msg.js +16 -16
  71. package/packages/utils/patchFiles.js +44 -44
  72. package/packages/utils/request.js +169 -169
  73. package/packages/utils/store.js +254 -257
  74. package/vue.config.js +59 -59
@@ -1,455 +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 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 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>