doway-coms 1.4.91 → 1.4.92

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 (70) 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 +664 -664
  16. package/packages/BaseGantt/index.js +9 -9
  17. package/packages/BaseGantt/src/index.vue +604 -604
  18. package/packages/BaseGrid/index.js +9 -9
  19. package/packages/BaseGrid/src/index.vue +2674 -2674
  20. package/packages/BaseGridAdjust/index.js +9 -9
  21. package/packages/BaseGridAdjust/src/index.vue +455 -455
  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 +561 -561
  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 +829 -829
  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 +153 -153
  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 -165
  53. package/packages/styles/default.less +80 -80
  54. package/packages/utils/api.js +45 -45
  55. package/packages/utils/auth.js +38 -38
  56. package/packages/utils/common.js +583 -583
  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 +52 -52
  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 +246 -246
  65. package/vue.config.js +59 -59
  66. package/dist/css/chunk-vendors.7f83d8f9.css +0 -8
  67. package/dist/css/index.86478f73.css +0 -3
  68. package/dist/favicon.ico +0 -0
  69. package/dist/js/chunk-vendors.307eaa8f.js +0 -347
  70. package/dist/js/index.48e7f7ac.js +0 -2
@@ -1,2675 +1,2675 @@
1
- <template>
2
- <div :style="{ height: height + 'px' }">
3
- <VxeGrid
4
- ref="baseGrid"
5
- border
6
- keep-source
7
- :loading="loading"
8
- auto-resize
9
- :edit-config="{
10
- trigger: 'manual',
11
- mode: 'row',
12
- activeMethod: activeCellMethod,
13
- showStatus: true,
14
- showUpdateStatus: true,
15
- showInsertStatus: true,
16
- showIcon: !showFilter,
17
- }"
18
- :filter-config="{
19
- remote: filterRemote,
20
- filterMethod: filterMethod
21
- }"
22
- :menu-config="menuConfig"
23
- @menu-click="contextMenuClickEvent"
24
- @filter-change="filterChange"
25
- :footer-method="footerMethod"
26
- @cell-click="cellClick"
27
- resizable
28
- :show-overflow="showOverFlow"
29
- :show-header-overflow="showHeaderOverflow"
30
- show-footer-overflow
31
- highlight-current-row
32
- highlight-hover-row
33
- :span-method="rowspanMethod"
34
- @current-change="currentChange"
35
- @sort-change="sortChange"
36
- @cellValueChange="cellValueChange"
37
- @operationButtonClick="operationButtonClick"
38
- @preSearch="preSearch"
39
- @pulldownBtnClick="pulldownBtnClick"
40
- @pulldownMultiSelect="pulldownMultiSelect"
41
- :edit-rules="validRules"
42
- :tree-config="treeConfig"
43
- :row-config="rowConfig"
44
- @resizable-change="resizableChange"
45
- :checkbox-config="checkboxConfig"
46
- :expand-config="expandConfig"
47
- @edit-closed="editClosedEvent"
48
- @edit-actived="editActived"
49
- @filter-visible="filterVisible"
50
- :sort-config="{
51
- multiple: true,
52
- remote: sortRemote,
53
- chronological: true,
54
- defaultSort: defaultSort,
55
- }"
56
- @checkbox-all="checkBoxAllChanged"
57
- @checkbox-change="checkBoxChanged"
58
- :cell-class-name="cellClassName"
59
- :row-style="rowStyle"
60
- :cell-style="cellStyle"
61
- :size="'mini'"
62
- :data="rows"
63
- :columns="internalColumns"
64
- class="base-grid-view"
65
- :height="'auto'"
66
- :show-footer="showFooter"
67
- @scroll="bodyScroll"
68
- >
69
- <template v-for="item in internalColumns" #[item.field]>
70
- <div :key="item.field">
71
- <span v-if="item.visible !== false">{{item.title}}</span>
72
- <Tooltip :title="item.tooltip" v-if="item.tooltip && item.visible !== false" style="margin: 0 2px">
73
- <img src="../../styles/icon/help.png" alt="" style="width: 14px">
74
- </Tooltip>
75
- <!-- {{item}}-->
76
- </div>
77
- </template>
78
- <!-- <template #toolbar_buttons>-->
79
- <!-- <div>-->
80
- <!-- <span v-for="loopFilterStr in filterStr" :key="loopFilterStr.field">-->
81
- <!-- {{ loopFilterStr.title }} {{ loopFilterStr.exp }} 并且</span-->
82
- <!-- >-->
83
- <!-- </div>-->
84
- <!-- </template>-->
85
- <template #seqHeader>
86
- <div
87
- @click="clickHeader"
88
- v-if="moduleCode && dataCode"
89
- style="color: #219bff"
90
- >
91
- <a-icon
92
- type="ordered-list"
93
- style="font-size: 25px; cursor: pointer"
94
- />
95
- </div>
96
- </template>
97
- <template #empty>
98
- <span v-if="emptyText">{{ emptyText }}</span>
99
- <a-empty v-else size="small" />
100
- </template>
101
-
102
- <template #default="scope">
103
- <div v-if="scope.column.params" class="grid-valid-display">
104
- <!-- {{ scope.row[scope.column.field] }} -->
105
- {{ gridDefaultValueDisplay(scope.row, scope.column) }}
106
- <!-- {{ defaultValueDisplay(scope.row, scope.column) }} -->
107
- </div>
108
- </template>
109
-
110
- <template #text_edit="scope">
111
- <div class="interceptor-class">
112
- <a-input
113
- class="inner-cell-control"
114
- size="small"
115
- v-model="scope.row[scope.column.property]"
116
- @change="cellValueChange(scope)"
117
- type="text"
118
- />
119
- </div>
120
- </template>
121
- <template #checkbox_edit="scope">
122
- <div class="interceptor-class">
123
- <a-checkbox
124
- class="inner-cell-control"
125
- size="small"
126
- @change="cellValueChange(scope)"
127
- v-model="scope.row[scope.column.property]"
128
- />
129
- </div>
130
- </template>
131
- <template #number_edit="scope">
132
- <div class="interceptor-class">
133
- <a-input-number
134
- class="inner-cell-control"
135
- size="small"
136
- @change="cellValueChange(scope)"
137
- v-model="scope.row[scope.column.property]"
138
- :formatter="value => numberFormatter(value, scope)"
139
- :parser="value => numberParse(value, scope)"
140
- :min="scope.column.numberMin"
141
- :max="scope.column.numberMax"
142
- />
143
- </div>
144
- </template>
145
- <template #date_edit="scope">
146
- <div class="interceptor-class">
147
- <a-date-picker
148
- v-model="scope.row[scope.column.property]"
149
- class="inner-cell-control"
150
- size="small"
151
- @change="cellValueChange(scope)"
152
- value-format="YYYY-MM-DD"
153
- />
154
- </div>
155
- </template>
156
- <template #datetime_edit="scope">
157
- <div class="interceptor-class">
158
- <a-date-picker
159
- v-model="scope.row[scope.column.property]"
160
- format="YYYY-MM-DD HH:mm:ss"
161
- size="small"
162
- value-format="YYYY-MM-DD HH:mm:ss"
163
- class="inner-cell-control"
164
- :showTime="true"
165
- @change="cellValueChange(scope)"
166
- />
167
- </div>
168
- </template>
169
- <template #select_edit="scope">
170
- <div class="interceptor-class">
171
- <a-select
172
- v-model="scope.row[scope.column.property]"
173
- @change="cellValueChange(scope)"
174
- size="small"
175
- class="inner-cell-control"
176
- >
177
- <a-select-option
178
- v-for="loopSource in scope.column.params.dataSource"
179
- :key="loopSource.value"
180
- :value="loopSource.value"
181
- >{{ loopSource.caption }}</a-select-option
182
- >
183
- </a-select>
184
- </div>
185
- </template>
186
- <template #time_edit="scope" class="interceptor-class">
187
- <div class="interceptor-class">
188
- <a-time-picker
189
- v-model="scope.row[scope.column.property]"
190
- format="HH:mm:ss"
191
- value-format="HH:mm:ss"
192
- size="small"
193
- class="inner-cell-control"
194
- @change="cellValueChange(scope)"
195
- />
196
- </div>
197
- </template>
198
-
199
- <template #pulldown_edit="scope" class="interceptor-class">
200
- <div class="interceptor-class">
201
- <BasePulldown
202
- v-model="scope.row[scope.column.property]"
203
- :field="scope.column.property"
204
- :formRow="formRow"
205
- :edit="scope.column.params.controlEdit === true"
206
- :showLabel="false"
207
- :row="scope.row"
208
- :api="scope.column.params.api"
209
- :isLocalData="scope.column.params.isLocalData"
210
- :localDataSource="scope.column.params.localDataSource"
211
- :isMultiSelect="scope.column.params.isMultiSelect"
212
- :defaultExpression="scope.column.params.defaultExpression"
213
- :columns="scope.column.params.columns"
214
- :pageSize="scope.column.params.pageSize"
215
- :optBtns="scope.column.params.optBtns"
216
- :popupAddName="scope.column.params.popupAddName"
217
- :popupAddPath="scope.column.params.popupAddPath"
218
- @preSearch="(searchInfo) => preSearch(searchInfo, scope)"
219
- @selectChanged="cellValueChange(scope)"
220
- @confirmMultiSelect="
221
- (pulldownView, selectRows) =>
222
- pulldownMultiSelect(scope, pulldownView, selectRows)
223
- "
224
- @pulldownBtnClick="pulldownBtnClick"
225
- />
226
- </div>
227
- </template>
228
-
229
- <template #expandContent="{ row, column, $table }">
230
- <slot name="expandContent" :item="{ row, column, $table }"></slot>
231
- </template>
232
- <template #expandDefault="{ row, column }">
233
- <slot name="expandDefault" :item="{ row, column }"></slot>
234
- </template>
235
- <template #linkCell="{ row, column }">
236
- <span
237
- ><a>{{ row[column.property] }}</a></span
238
- >
239
- </template>
240
- <template #operation_edit="scope">
241
- <div>
242
- <!-- 2个显示限制:页面状态visibleStatuss数组;根据其他字段限制visibleState对象 -->
243
- <a-button
244
- type="link"
245
- @click="operationButtonClick(item, scope)"
246
- v-show="operationEdit(item, scope)"
247
- v-for="item in scope.column.params.columns"
248
- :key="item.field"
249
- >
250
- {{ item.title }}
251
- </a-button>
252
- </div>
253
- </template>
254
- <template #customCell="{ row, column }">
255
- <slot name="customCell" :item="{ row, column }"></slot>
256
- </template>
257
- <template #customRadio="{ row, checked }">
258
- <slot name="customRadio" :item="{ row, checked }"></slot>
259
- </template>
260
- <template #customFooter="{ column, items, _columnIndex }">
261
- <slot
262
- name="customFooter"
263
- :item="{ column, items, _columnIndex }"
264
- ></slot>
265
- </template>
266
- <template #pager v-if="pager && !pager.notShow">
267
- <a-row>
268
- <a-col :span="8" style="text-align: left; padding: 10px">
269
- <a-space>
270
- <template v-for="loopPagerBtn in pager.buttons">
271
- <a-button
272
- :key="loopPagerBtn.field"
273
- v-if="loopPagerBtn.visible"
274
- type="primary"
275
- size="small"
276
- :disabled="loopPagerBtn.edit === false"
277
- @click="pagerBtnClick(loopPagerBtn)"
278
- >{{ loopPagerBtn.title }}</a-button
279
- >
280
- </template>
281
- </a-space>
282
- </a-col>
283
- <a-col :span="16" style="text-align: right">
284
- <BasePagination
285
- v-if="pager.size"
286
- :totalRows="pager.totalRows"
287
- :pageSize="pager.size"
288
- :currentPage="pager.current"
289
- @pageChange="pageChange"
290
- @pageSizeChange="pageSizeChange"
291
- />
292
- </a-col>
293
- </a-row>
294
- </template>
295
-
296
- <!-- 筛选过滤 -->
297
- <template #text_filter="scope">
298
- <div class="interceptor-class">
299
- <div
300
- :class="scope.column.field + '_filter_' + $index"
301
- v-for="(loopFilterValue, $index) in scope.column.filters[0].data
302
- .displayValues"
303
- :key="$index"
304
- >
305
- <a-input allowClear v-model="loopFilterValue.value[0]" @keyup.enter.native="filterConfirm(scope.column)" />
306
- </div>
307
- <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
308
- <a-button @click="filterConfirm(scope.column)">确认</a-button>
309
- </div>
310
- </template>
311
- <template #customCell_filter="scope">
312
- <div class="interceptor-class">
313
- <div
314
- :class="scope.column.field + '_filter_' + $index"
315
- v-for="(loopFilterValue, $index) in scope.column.filters[0].data
316
- .displayValues"
317
- :key="$index"
318
- >
319
- <a-input allowClear v-model="loopFilterValue.value[0]" @keyup.enter.native="filterConfirm(scope.column)" />
320
- </div>
321
- <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
322
- <a-button @click="filterConfirm(scope.column)">确认</a-button>
323
- </div>
324
- </template>
325
- <template #pulldown_filter="scope">
326
- <div class="interceptor-class">
327
- <div
328
- :class="scope.column.field + '_filter_' + $index"
329
- v-for="(loopFilterValue, $index) in scope.column.filters[0].data
330
- .displayValues"
331
- :key="$index"
332
- >
333
- <a-input allowClear v-model="loopFilterValue.value[0]" @keyup.enter.native="filterConfirm(scope.column)" />
334
- </div>
335
- <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
336
- <a-button @click="filterConfirm(scope.column)">确认</a-button>
337
- </div>
338
- </template>
339
- <template #number_filter="scope">
340
- <div class="interceptor-class">
341
- <div
342
- :class="scope.column.field + '_filter_' + $index"
343
- v-for="(loopFilterValue, $index) in scope.column.filters[0].data
344
- .displayValues"
345
- :key="$index"
346
- >
347
- <a-input-number
348
- :precision="0"
349
- size="small"
350
- v-model="loopFilterValue.value[0]"
351
- @keyup.enter.native="filterConfirm(scope.column)"
352
- />~
353
- <a-input-number
354
- :precision="0"
355
- size="small"
356
- v-model="loopFilterValue.value[1]"
357
- @keyup.enter.native="filterConfirm(scope.column)"
358
- />
359
- </div>
360
- <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
361
- <a-button @click="filterConfirm(scope.column)">确认</a-button>
362
- </div>
363
- </template>
364
- <template #select_filter="scope">
365
- <div class="interceptor-class">
366
- <a-checkbox-group
367
- v-model="scope.column.filters[0].data.displayValues"
368
- :style="{
369
- display: 'flex',
370
- flexWrap: 'wrap',
371
- justifyContent: 'left',
372
- alignItems: 'center',
373
- maxHeight: '150px',
374
- overflow: 'auto',
375
- maxWidth: '100px'
376
- }"
377
- @keyup.enter.native="filterConfirm(scope.column)"
378
- >
379
- <br />
380
- <a-checkbox
381
- v-for="loopSource in scope.column.params.dataSource"
382
- :key="loopSource.value"
383
- :value="loopSource.value"
384
- style="margin: 5px 0;"
385
- >{{ loopSource.caption }}
386
- </a-checkbox>
387
- </a-checkbox-group>
388
- <!-- <a-select-->
389
- <!-- v-model="scope.column.filters[0].data.displayValues"-->
390
- <!-- mode="multiple"-->
391
- <!-- allowClear-->
392
- <!-- style="width: 300px;"-->
393
- <!-- placeholder="筛选条件"-->
394
- <!-- showArrow-->
395
- <!-- >-->
396
- <!-- <a-select-option-->
397
- <!-- v-for="loopSource in scope.column.params.dataSource"-->
398
- <!-- :key="loopSource.value"-->
399
- <!-- :value="loopSource.value"-->
400
- <!-- >{{ loopSource.caption }}</a-select-option-->
401
- <!-- >-->
402
- <!-- </a-select>-->
403
- <br>
404
- <a-button @click="filterConfirm(scope.column)">确认</a-button>
405
- </div>
406
- </template>
407
- <template #datetime_filter="scope">
408
- <div class="interceptor-class">
409
- <div
410
- :class="scope.column.field + '_filter_' + $index"
411
- v-for="(loopFilterValue, $index) in scope.column.filters[0].data
412
- .displayValues"
413
- :key="$index"
414
- >
415
- <a-date-picker
416
- valueFormat="YYYY-MM-DD HH:mm:ss"
417
- format="YYYY-MM-DD HH:mm:ss"
418
- :show-time="{
419
- defaultValue: moment(
420
- '2000-01-01 00:00:00',
421
- 'YYYY-MM-DD HH:mm:ss'
422
- ),
423
- }"
424
- placeholder="开始时间"
425
- v-model="loopFilterValue.value[0]"
426
- @keyup.enter.native="filterConfirm(scope.column)"
427
- />
428
- <a-date-picker
429
- valueFormat="YYYY-MM-DD HH:mm:ss"
430
- format="YYYY-MM-DD HH:mm:ss"
431
- :show-time="{
432
- defaultValue: moment(
433
- '2000-01-01 23:59:59',
434
- 'YYYY-MM-DD HH:mm:ss'
435
- ),
436
- }"
437
- placeholder="结束时间"
438
- v-model="loopFilterValue.value[1]"
439
- @keyup.enter.native="filterConfirm(scope.column)"
440
- />
441
- </div>
442
- <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
443
- <a-button @click="filterConfirm(scope.column)">确认</a-button>
444
- </div>
445
- </template>
446
- <template #date_filter="scope">
447
- <div class="interceptor-class">
448
- <div
449
- :class="scope.column.field + '_filter_' + $index"
450
- v-for="(loopFilterValue, $index) in scope.column.filters[0].data
451
- .displayValues"
452
- :key="$index"
453
- >
454
- <a-range-picker v-model:value="loopFilterValue.value"
455
- valueFormat="YYYY-MM-DD"
456
- format="YYYY-MM-DD"
457
- @keyup.enter.native="filterConfirm(scope.column)"
458
-
459
- />
460
- </div>
461
- <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
462
- <a-button @click="filterConfirm(scope.column)">确认</a-button>
463
- </div>
464
- </template>
465
- </VxeGrid>
466
- <VxeModal
467
- v-model="showGridColumnUserDefine"
468
- title="表格布局设置"
469
- width="70%"
470
- height="70%"
471
- show-zoom
472
- transfer
473
- resize
474
- :zIndex="15"
475
- show-footer
476
- destroy-on-close
477
- >
478
- <BaseGridAdjust
479
- :userDefineColumns="userDefineColumns"
480
- ref="baseAdjustGridView"
481
- ></BaseGridAdjust>
482
- <template #footer>
483
- <a-button
484
- type="primary"
485
- :size="'small'"
486
- @click="confirmUserDefineColumn"
487
- >
488
- 确认
489
- </a-button>
490
- </template>
491
- </VxeModal>
492
- </div>
493
- </template>
494
- <script>
495
- //轻量级剪贴板复制函数
496
- import XEClipboard from "xe-clipboard";
497
- //引入全局文件
498
- import { controlType } from "../../utils/enum";
499
- //日期处理类库
500
- import moment from "moment";
501
- //拖拽排序功能
502
- //辅助函数 将store 中的 getter 映射到局部计算属性
503
- import { mapGetters } from "vuex";
504
- //xe-utils提供了一套实用的基础函数、任意格式的日期转换函数,浏览器相关操作函数等,详细使用百度
505
- import XEUtils from "xe-utils";
506
- //VXETable插件
507
- import VXETable from "vxe-table";
508
- import { Tooltip } from 'ant-design-vue'
509
- //ant的空状态展示占位图
510
- import {
511
- Empty,
512
- Row,
513
- Col,
514
- Space,
515
- Input,
516
- Select,
517
- DatePicker,
518
- Checkbox,
519
- InputNumber,
520
- TimePicker,
521
- Button,
522
- } from "ant-design-vue";
523
- import BasePagination from "../../BasePagination/index";
524
- import BasePulldown from "../../BasePulldown/index";
525
- import BaseGridAdjust from "../../BaseGridAdjust/index";
526
- import { saveUserModuleDataFieldApi } from "../../utils/api";
527
- import { gridDefaultValueDisplay } from "../../utils/filters";
528
- export default {
529
- name: "BaseGrid",
530
- components: {
531
- "a-empty": Empty,
532
- "a-row": Row,
533
- "a-col": Col,
534
- "a-space": Space,
535
- "a-input": Input,
536
- "a-select": Select,
537
- "a-select-option": Select.Option,
538
- "a-date-picker": DatePicker,
539
- "a-checkbox": Checkbox,
540
- "a-input-number": InputNumber,
541
- "a-time-picker": TimePicker,
542
- "a-button": Button,
543
- BasePagination,
544
- BasePulldown,
545
- BaseGridAdjust,
546
- Tooltip,
547
- },
548
- data() {
549
- return {
550
- gridDefaultValueDisplay: gridDefaultValueDisplay,
551
- showFooter: false,
552
- showGridColumnUserDefine: false,
553
- userDefineColumns: [],
554
- loading: false,
555
- internalCols: {},
556
- moment,
557
- internalColumns: [],
558
- gridEdit: false,
559
- addBtnEdit: true,
560
- validRules: {},
561
- footerSum: [],
562
- mergeFields: [],
563
- simpleImage: null,
564
- dragOptions: {
565
- animation: 0,
566
- group: "description",
567
- disabled: false,
568
- ghostClass: "ghost",
569
- },
570
- menuConfig: {
571
- header: {
572
- options: [
573
- [
574
- {
575
- code: "clearFilter",
576
- name: "清空筛选",
577
- visible: true,
578
- disabled: false,
579
- },
580
- ],
581
- ],
582
- },
583
- body: {
584
- options: [
585
- [
586
- {
587
- code: "refresh",
588
- name: "刷新",
589
- visible: true,
590
- },
591
- {
592
- code: "copy",
593
- name: "复制",
594
- visible: true,
595
- disabled: false,
596
- },
597
- {
598
- code: "sort",
599
- name: "排序",
600
- prefixIcon: "fa fa-sort color-blue",
601
- children: [
602
- { code: "clearSort", name: "清除排序" },
603
- {
604
- code: "asc",
605
- name: "升序",
606
- prefixIcon: "fa fa-sort-alpha-asc color-orange",
607
- },
608
- {
609
- code: "desc",
610
- name: "倒序",
611
- prefixIcon: "fa fa-sort-alpha-desc color-orange",
612
- },
613
- ],
614
- },
615
- ],
616
- ],
617
- },
618
- },
619
- toolBarConfig: {
620
- custom: true,
621
- slots: { buttons: "toolbar_buttons" },
622
- enabled: false,
623
- },
624
- filterExpression: [],
625
- filterStr: [],
626
- };
627
- },
628
- computed: {
629
- //使用对象展开运算符 将 getter 混入 computer 对象中
630
- ...mapGetters(["controlSize"]),
631
- },
632
- filters: {
633
- displayText: function (row, column) {
634
- if (column.params.controlType === "select") {
635
- let tempItem = XEUtils.find(
636
- column.params.dataSource,
637
- (p) => p.value === row[column.property]
638
- );
639
- // let tempItems = column.params.dataSource.filter(filterItem => {
640
- // return filterItem.value === row[column.property]
641
- // })
642
- if (tempItem) {
643
- return tempItem.caption;
644
- } else {
645
- return row[column.property];
646
- }
647
- }
648
-
649
- let linkField = column.property.split(".");
650
- if (linkField.length > 1) {
651
- let fieldValue = row;
652
- for (let i = 0; i < linkField.length; i++) {
653
- if (
654
- fieldValue[linkField[i]] === undefined ||
655
- fieldValue[linkField[i]] === null
656
- ) {
657
- return null;
658
- }
659
- fieldValue = fieldValue[linkField[i]];
660
- }
661
- return fieldValue;
662
- }
663
- if (column.params.controlType === "checkbox") {
664
- return row[column.property] === true ? "是" : "否";
665
- }
666
-
667
- if (column.params.displayField) {
668
- return row[column.params.displayField];
669
- }
670
- return row[column.property];
671
- },
672
- },
673
- props: {
674
- showOverFlow: {
675
- type: Boolean,
676
- default: true,
677
- },
678
- defaultSort: {
679
- type: Array,
680
- default: function () {
681
- return [];
682
- },
683
- },
684
- showFilter: {
685
- type: Boolean,
686
- default: true,
687
- },
688
- showHeaderOverflow: {
689
- type: Boolean,
690
- default: true,
691
- },
692
- cellClassName: {
693
- type: Function,
694
- default: null,
695
- },
696
- sortRemote: {
697
- type: Boolean,
698
- default: () => {
699
- return true;
700
- },
701
- },
702
- //筛选判断是否远程
703
- filterRemote: {
704
- type: Boolean,
705
- default: () => {
706
- return false;
707
- },
708
- },
709
- checkboxConfig: {
710
- type: Object,
711
- default: () => {
712
- return null;
713
- },
714
- deep: true,
715
- },
716
- treeConfig: {
717
- type: Object,
718
- default: () => {
719
- return null;
720
- },
721
- deep: true,
722
- },
723
- rowConfig: {
724
- type: Object,
725
- default: () => {
726
- return null;
727
- },
728
- deep: true,
729
- },
730
- expandConfig: {
731
- type: Object,
732
- default: () => {
733
- return null;
734
- },
735
- deep: true,
736
- },
737
- rowStyle: {
738
- type: Function,
739
- },
740
- cellStyle: {
741
- type: Function,
742
- },
743
- height: {
744
- default: null,
745
- },
746
- pager: {
747
- type: Object,
748
- default: () => {
749
- return null;
750
- },
751
- deep: true,
752
- },
753
- showSeq: {
754
- type: Boolean,
755
- default: () => {
756
- return true;
757
- },
758
- },
759
- showMenu: {
760
- type: Boolean,
761
- default: () => {
762
- return true;
763
- },
764
- },
765
- showExpand: {
766
- type: Boolean,
767
- default: () => {
768
- return false;
769
- },
770
- },
771
- isOld: {
772
- type: Boolean,
773
- default: () => {
774
- return false;
775
- },
776
- },
777
- emptyText: {
778
- type: String,
779
- default: () => {
780
- return "";
781
- },
782
- },
783
- columns: {
784
- type: Array,
785
- default: () => {
786
- return [];
787
- },
788
- deep: true,
789
- },
790
- editStates: {
791
- type: Array,
792
- default: () => {
793
- return null;
794
- },
795
- deep: true,
796
- },
797
- edit: {
798
- type: Boolean,
799
- default: false,
800
- },
801
- formRow: {
802
- type: Object,
803
- default: () => {
804
- return {};
805
- },
806
- deep: true,
807
- },
808
- editStatuss: {
809
- type: Array,
810
- default: () => {
811
- return null;
812
- },
813
- deep: true,
814
- },
815
- showCheckBox: {
816
- type: Boolean,
817
- default: false,
818
- },
819
- showRadio: {
820
- type: Boolean,
821
- default: false,
822
- },
823
- // checkboxConfigReserve: {
824
- // type: Boolean,
825
- // default: false
826
- // },
827
- dataName: {
828
- type: String,
829
- default: "",
830
- },
831
- moduleCode: {
832
- type: String,
833
- default: "",
834
- },
835
- dataCode: {
836
- type: String,
837
- default: "",
838
- },
839
- rows: {
840
- type: Array,
841
- default: () => {
842
- return [];
843
- },
844
- deep: true,
845
- },
846
- },
847
- beforeCreate() {
848
- this.simpleImage = Empty.PRESENTED_IMAGE_SIMPLE;
849
- },
850
-
851
- created() {
852
-
853
- //拖动后输入框有错位问题,暂时不启用
854
- // this.initColumnDrop()
855
-
856
- // this.internalColumns.push({
857
- // field: 'sysRowState',
858
- // visible:false,
859
- // filterMethod:this.sysRowStateFilter,
860
- // filters:[{label:'筛选删除行',value:'delete',checked:true}]
861
- // })
862
- for (let i = 0; i < this.columns.length; i++) {
863
- this.internalColumns.push(this.initColumns(this.columns[i]));
864
- if(this.columns[i].visible !== false && this.columns[i].controlType !== 'operation') {
865
- this.internalColumns[i].slots.header = this.columns[i].field;
866
- }
867
- }
868
-
869
- // 初始化排序和筛选
870
- if (this.sortRemote) {
871
- let data = []
872
- this.defaultSort.forEach(x => {
873
- data.push([x.field, x.order])
874
- })
875
- this.$emit("sortModify", data);
876
-
877
- //设置筛选过滤条件
878
- this.setFilterExpression(this.internalColumns);
879
- }
880
-
881
- if (this.showSeq) {
882
- this.internalColumns.push(
883
- // {
884
- // children: [
885
- {
886
- type: "seq",
887
- fixed: "left",
888
- width: 50,
889
- slots: {
890
- header: "seqHeader",
891
- },
892
- params: {
893
- disableUserVisible: true,
894
- },
895
- }
896
- // ],
897
- // slots: {
898
- // header: 'seqHeader'
899
- // }
900
- // }
901
- );
902
- }
903
-
904
- if (this.showCheckBox) {
905
- this.internalColumns.push({
906
- type: "checkbox",
907
- fixed: "left",
908
- width: 40,
909
- params: {
910
- disableUserVisible: true,
911
- },
912
- });
913
- }
914
- this.gridEdit = this.edit;
915
- },
916
-
917
- mounted() {
918
- // this.toggleFixedColumn('operation','right')
919
- //设置默认筛选的到表格
920
- // let filterCol = this.internalColumns.filter(
921
- // x =>
922
- // (x.filters && x.filters.length > 0) ||
923
- // (x.children &&
924
- // x.children.length > 0 &&
925
- // x.children[0].filters &&
926
- // x.children[0].filters.length > 0)
927
- // )
928
- // for (let i = 0; i < filterCol.length; i++) {
929
- // this.$refs.baseGrid
930
- // .setFilter(filterCol[i].field, filterCol[i].filters)
931
- // .then(() => {
932
- // // if (i == filterCol.length - 1) {
933
- // // }
934
- // })
935
- // }
936
- },
937
- methods: {
938
- getExpTags(filterList) {
939
- //构造查询条件
940
- let returnExp = [];
941
- for (let loopProp in filterList) {
942
- let tempExpTag = {
943
- expressions: [],
944
- operator: "or",
945
- };
946
- let tempControlType = filterList[loopProp].column.params.controlType;
947
- let tempIsAddTime = filterList[loopProp].isAddTime;
948
- for (let i = 0; i < filterList[loopProp].column.filters.length; i++) {
949
- let tempValue = filterList[loopProp].column.filters[i];
950
-
951
- if (tempControlType === controlType.text) {
952
- // 文本框
953
- tempExpTag.expressions.push({
954
- field: filterList[loopProp].property,
955
- operator: "CO",
956
- value: tempValue.value,
957
- });
958
- }
959
- // if (tempControlType === controlType.date)
960
- // {
961
- // //日期
962
- // if (tempExpTag.value) {
963
- // tempExpTag.value.push(tempValue.value)
964
- // } else {
965
- // tempExpTag.value = [tempValue.value]
966
- // tempExpTag.operator = 'IN'
967
- // tempExpTag.field = filterList[loopProp].property
968
- // }
969
- // }
970
- // else
971
- else if (tempControlType === controlType.number) {
972
- // 数字范围
973
- tempExpTag.expressions.push({
974
- field: filterList[loopProp].property,
975
- operator: "RA",
976
- value: [tempValue.value.min, tempValue.value.max],
977
- });
978
- } else if (
979
- tempControlType === controlType.datetime ||
980
- tempControlType === controlType.date
981
- ) {
982
- //日期范围
983
- // if (tempIsAddTime === true) {
984
- tempExpTag.expressions.push({
985
- field: filterList[loopProp].property,
986
- operator: "RA",
987
- value: [
988
- // tempValue.value[0] + ' 00:00:00',
989
- // tempValue.value[1] + ' 23:59:59'
990
- tempValue.value[0],
991
- tempValue.value[1],
992
- ],
993
- });
994
- // } else {
995
- // tempExpTag.expressions.push({
996
- // field: filterList[loopProp].property,
997
- // operator: 'RA',
998
- // value: tempValue.value
999
- // })
1000
- // }
1001
- } else if (
1002
- tempControlType === controlType.dropmulti ||
1003
- tempControlType === controlType.select
1004
- ) {
1005
- //下拉多选
1006
- tempExpTag.expressions.push({
1007
- field: filterList[loopProp].property,
1008
- operator: "IN",
1009
- value: filterList[loopProp].datas[0],
1010
- });
1011
- } else if (tempControlType === controlType.checkbox) {
1012
- //实际上checkbox的value数组里就一个值 这边是为了兼容select的结构
1013
- tempExpTag.expressions.push({
1014
- field: filterList[loopProp].property,
1015
- operator: "EQ",
1016
- value: tempValue.value.indexOf("true") >= 0 ? true : false,
1017
- });
1018
- } else {
1019
- // 文本框
1020
- tempExpTag.expressions.push({
1021
- field: filterList[loopProp].property,
1022
- operator: "CO",
1023
- value: tempValue.value,
1024
- });
1025
- }
1026
- }
1027
- if (tempExpTag.expressions.length > 0 || tempExpTag.field) {
1028
- returnExp.push(tempExpTag);
1029
- }
1030
- }
1031
- return returnExp;
1032
- },
1033
- rangeChange(column) {
1034
- let vm = this;
1035
- if (vm.filterRemote) {
1036
- column.filters.forEach((f) => {
1037
- f.checked = true;
1038
- });
1039
- vm.$refs.baseGrid.setFilter(column.field, column.filters).then(() => {
1040
- this.$emit("filterChange");
1041
- });
1042
- } else {
1043
- const xTable = this.$refs.baseGrid;
1044
- // 设置为选中状态
1045
- for (let i = 0; i < column.filters.length; i++) {
1046
- if (!column.filters[i].value) {
1047
- column.filters[i].checked = false;
1048
- } else {
1049
- column.filters[i].checked = true;
1050
- }
1051
- }
1052
- // 修改条件之后,需要手动调用 updateData 处理表格数据
1053
- xTable.updateData();
1054
- }
1055
- },
1056
- //日期筛选变化
1057
- dateChange(column, dates) {
1058
- let vm = this;
1059
- if (vm.filterRemote) {
1060
- if (dates.length > 0) {
1061
- column.filters[0].checked = true;
1062
- column.filters[0].data.range = dates; //显示的值
1063
- column.filters[0].data.beginDate = dates[0];
1064
- column.filters[0].data.endDate = dates[1];
1065
- vm.$refs.baseGrid.setFilter(column.field, column.filters);
1066
- } else {
1067
- column.filters[0].checked = false;
1068
- column.filters[0].data.range = dates;
1069
- vm.$refs.baseGrid
1070
- .setFilter(column.field, column.filters)
1071
- .then((res) => {
1072
- this.$emit("filterChange");
1073
- });
1074
- }
1075
- } else {
1076
- const xTable = this.$refs.baseGrid;
1077
- // 设置为选中状态
1078
- for (let i = 0; i < column.filters.length; i++) {
1079
- if (!column.filters[i].value) {
1080
- column.filters[i].checked = false;
1081
- } else {
1082
- column.filters[i].checked = true;
1083
- }
1084
- }
1085
- // 修改条件之后,需要手动调用 updateData 处理表格数据
1086
- xTable.updateData();
1087
- }
1088
- },
1089
- inputChange(column) {
1090
- let vm = this;
1091
- if (vm.filterRemote) {
1092
- for (let i = 0; i < column.filters.length; i++) {
1093
- if (!column.filters[i].value) {
1094
- column.filters[i].checked = false;
1095
- } else {
1096
- column.filters[i].checked = true;
1097
- }
1098
- }
1099
- vm.$refs.baseGrid
1100
- .setFilter(column.field, column.filters)
1101
- .then((res) => {
1102
- this.$emit("filterChange");
1103
- });
1104
- } else {
1105
- const xTable = this.$refs.baseGrid;
1106
- // 设置为选中状态
1107
- for (let i = 0; i < column.filters.length; i++) {
1108
- if (!column.filters[i].value) {
1109
- column.filters[i].checked = false;
1110
- } else {
1111
- column.filters[i].checked = true;
1112
- }
1113
- }
1114
- // 修改条件之后,需要手动调用 updateData 处理表格数据
1115
- xTable.updateData();
1116
- }
1117
- },
1118
- textEditEnter(valueInfo) {
1119
- if (this.textValue) {
1120
- valueInfo.visible = false;
1121
- valueInfo.value = this.textValue;
1122
- this.textValue = "";
1123
- }
1124
- this.$emit("searchBtnClick", null);
1125
- },
1126
- editPopupVisibleChange(editKey, originValue, valueIndex, visible) {
1127
- if (visible === true) {
1128
- let vm = this;
1129
- this.textValue = originValue.value;
1130
- setTimeout(() => {
1131
- vm.$refs[editKey + "_edit_" + valueIndex][0].$el.focus();
1132
- vm.$refs[editKey + "_edit_" + valueIndex][0].$el.select();
1133
- }, 10);
1134
- }
1135
- },
1136
- closeTagPreventDefault(colValue, valueIndex, event) {
1137
- colValue.values.splice(valueIndex, 1);
1138
- event.preventDefault();
1139
- this.$emit("searchBtnClick", null);
1140
- },
1141
- //右键菜单事件
1142
- contextMenuClickEvent({ menu, row, column }) {
1143
- let vm = this;
1144
- const $table = this.$refs.baseGrid;
1145
- if (column && column.field) {
1146
- if (
1147
- menu.code !== "sort" &&
1148
- menu.code !== "copy" &&
1149
- menu.code !== "refresh"
1150
- ) {
1151
- $table.sort(column.field, menu.code);
1152
- }
1153
- }
1154
- switch (menu.code) {
1155
- case "copy":
1156
- // 示例
1157
- if (row && column) {
1158
- if (XEClipboard.copy(row[column.property])) {
1159
- VXETable.modal.message({
1160
- content: "已复制到剪贴板!",
1161
- status: "success",
1162
- });
1163
- }
1164
- }
1165
- break;
1166
- case "clearFilter":
1167
- // 示例
1168
- const filterList = this.$refs.baseGrid.getCheckedFilters();
1169
- filterList.forEach((col) => {
1170
- this.$refs.baseGrid.clearFilter(col.column);
1171
- this.internalColumns.forEach(column => {
1172
- if(column.field==col.property){
1173
- this.$set(column.filters[0].data,'displayValues',[])
1174
- this.$set(column.filters[0].data,'bindingValues',[])
1175
- }
1176
- });
1177
- //这个col和 internalColumn之间没有绑定上
1178
- col.column.filters = [
1179
- {
1180
- data: {
1181
- bindingValues: [],
1182
- displayValues: []
1183
- }
1184
- }
1185
- ]
1186
- });
1187
- // this.$refs.baseGrid.clearFilter();
1188
- XEUtils.clear(this.filterExpression)
1189
- vm.$emit("filterChange");
1190
- break;
1191
- case "desc":
1192
- if (this.sortRemote) {
1193
- let data = []
1194
- $table.getSortColumns().forEach(x=> {
1195
- data.push([x.field,x.order])
1196
- })
1197
- this.$emit("sortChange", data);
1198
- }
1199
- break;
1200
- case "asc":
1201
- if (this.sortRemote) {
1202
- let data = []
1203
- $table.getSortColumns().forEach(x=> {
1204
- data.push([x.field,x.order])
1205
- })
1206
- this.$emit("sortChange", data);
1207
- }
1208
- break;
1209
- case "clearSort":
1210
- let sortColumns = $table.getSortColumns();
1211
- sortColumns.forEach((col) => {
1212
- col.column.order = "";
1213
- });
1214
- if (this.sortRemote) {
1215
- this.$emit("sortChange", []);
1216
- }
1217
- break;
1218
- case "refresh":
1219
- let data = []
1220
- $table.getSortColumns().forEach(x=> {
1221
- data.push([x.field,x.order])
1222
- })
1223
- this.$emit("sortChange", data);
1224
- break;
1225
- default:
1226
- }
1227
- },
1228
- getFiltersList() {
1229
- return this.filterExpression;
1230
- // let vm = this
1231
- // const filterList = vm.$refs.baseGrid.getCheckedFilters()
1232
-
1233
- // let expList = []
1234
- // expList = vm.getExpTags(filterList)
1235
- // return expList
1236
- },
1237
- filterChange({ column, property, values, datas, filterList, $event }) {
1238
- let vm = this;
1239
- //如果不是远程筛选 就不emit了
1240
- if (!this.filterRemote) {
1241
- return;
1242
- }
1243
- vm.$emit("filterChange");
1244
- },
1245
- // sysRowStateFilter(scope){
1246
- // return scope.row.sysRowState!==scope.value
1247
- // },
1248
- initColumns(originCol) {
1249
- let vm = this;
1250
- let colParams = {};
1251
-
1252
- let colInfo = {
1253
- field: originCol.field,
1254
- title: originCol.title,
1255
- tooltip: originCol.tooltip,
1256
- visible: true,
1257
- };
1258
-
1259
- if(XEUtils.has(originCol,'showOverflow')){
1260
- colInfo['showOverflow'] = originCol.showOverflow
1261
- }
1262
-
1263
-
1264
- let customSlot = {
1265
- default: "default",
1266
- };
1267
-
1268
- if (originCol.slots) {
1269
- customSlot = originCol.slots;
1270
- }
1271
-
1272
- if (originCol.treeNode === true) {
1273
- colInfo["treeNode"] = true;
1274
- }
1275
- if (originCol.isMerge === true) {
1276
- //合并行
1277
- this.mergeFields.push(originCol.field);
1278
- }
1279
- //判断originCol的showHeaderOverflow是否为true
1280
- // if (originCol.showHeaderOverflow) {
1281
- // //当表头内容过长时显示为省略号
1282
- // colInfo['showHeaderOverflow'] = false
1283
- // }
1284
- //判断组件传递自定义属性filterRemote值是否为true
1285
- // if (this.filterRemote) {
1286
- // //是就给colInfo加一个属性showHeaderOverflow并赋值false,这样当表头内容过长时就不会显示为省略
1287
- // colInfo['showHeaderOverflow'] = false
1288
- // }
1289
- //判断originCol的filters是否为数组 暂时不知道是否有被用到
1290
- if (XEUtils.isArray(originCol.filters)) {
1291
- //是就给colInfo加一个属性filters并把传入的形参传给新加的属性
1292
- colInfo["filters"] = originCol.filters;
1293
- }
1294
- //vxe-table列配置
1295
- //判断originCol的filterMethod是否为true
1296
- if (originCol.filterMethod) {
1297
- //是就给colInfo加一个属性filterMethod并把形参赋值给新加的属性,这样
1298
- colInfo["filterMethod"] = originCol.filterMethod;
1299
- }
1300
- if (originCol.align) {
1301
- colInfo["align"] = originCol.align;
1302
- }
1303
- if (originCol.visible === false) {
1304
- colInfo.visible = false;
1305
- }
1306
- //在不启用 筛选框的情况下 可以显示 因为 表头分组的关系
1307
- if (originCol.sortable === true) {
1308
- colInfo["sortable"] = true;
1309
- colInfo["sortType"] = "auto";
1310
- if (originCol.order){
1311
- this.defaultSort.push({
1312
- field: originCol.field,
1313
- order: originCol.order
1314
- })
1315
- }
1316
- }
1317
- if (originCol.fixed) {
1318
- colInfo["fixed"] = originCol.fixed === "left" ? "left" : "right";
1319
- }
1320
- if (originCol.formatter) {
1321
- colInfo["formatter"] = originCol.formatter;
1322
- }
1323
- if (originCol.params) {
1324
- colParams = originCol.params;
1325
- }
1326
-
1327
- if (originCol.footerSum === true) {
1328
- this.showFooter = true;
1329
- this.footerSum.push(colInfo.field);
1330
- }
1331
- if (originCol.route) {
1332
- colParams["route"] = originCol.route;
1333
- customSlot["default"] = "linkCell";
1334
- }
1335
- //默认text
1336
- if (!originCol.controlType) {
1337
- originCol.controlType = controlType.text;
1338
- }
1339
-
1340
- if (originCol.controlType === controlType.customRadio) {
1341
- colInfo["type"] = "radio";
1342
- customSlot["radio"] = "customRadio";
1343
- customSlot["footer"] = "customFooter";
1344
- }
1345
- if (originCol.isExpand === true) {
1346
- colInfo["type"] = "expand";
1347
- customSlot["content"] = "expandContent";
1348
- customSlot["default"] = "expandDefault";
1349
- }
1350
- if (originCol.controlType === controlType.customCell) {
1351
- customSlot["default"] = "customCell";
1352
- customSlot["footer"] = "customFooter";
1353
- }
1354
- if (originCol.isCheckbox === true) {
1355
- colInfo["type"] = "checkbox";
1356
- // colInfo['field'] = 'matCode'
1357
- }
1358
- colParams.dataSource = originCol.dataSource;
1359
- if (originCol.rules) {
1360
- this.validRules[colInfo.field] = originCol.rules;
1361
- }
1362
- if (originCol.precision) {
1363
- colParams["precision"] = originCol.precision;
1364
- //加入验证逻辑
1365
- // if(!this.validRules[colInfo.field]){
1366
- // this.validRules[colInfo.field] = []
1367
- // }
1368
- // this.validRules[colInfo.field].push({
1369
- // validator: this.validPrecision
1370
- // })
1371
- }
1372
- if (XEUtils.isInteger(originCol.min)) {
1373
- colParams["min"] = originCol.min;
1374
- }
1375
- if (XEUtils.isInteger(originCol.max)) {
1376
- colParams["max"] = originCol.max;
1377
- }
1378
- // else{
1379
- // colParams['precision'] = 10 //默认十位小数
1380
- // }
1381
- colParams["le"] = originCol.le;
1382
- colParams["controlType"] = originCol.controlType;
1383
- colParams["edit"] = false;
1384
- if (originCol.editStates) {
1385
- colParams["editStates"] = originCol.editStates;
1386
- }
1387
- if (originCol.editStatuss) {
1388
- colParams["editStatuss"] = originCol.editStatuss;
1389
- }
1390
- if (originCol.width) {
1391
- colInfo.width = originCol.width;
1392
- } else {
1393
- colInfo.width = 100;
1394
- }
1395
-
1396
- if (originCol.controlType === "operation") {
1397
- customSlot["default"] = "operation_edit";
1398
- }
1399
-
1400
- if (
1401
- originCol.editStates &&
1402
- originCol.editStates.length > 0 &&
1403
- originCol.edit === true
1404
- ) {
1405
- let tempAutoSelect = true;
1406
- let tempAutoFocus = ".inner-cell-control";
1407
- switch (originCol.controlType) {
1408
- case controlType.number:
1409
- tempAutoFocus = ".ant-input-number-input";
1410
- break;
1411
- case controlType.pulldown:
1412
- tempAutoFocus = ".inner-cell-control>input";
1413
- break;
1414
- case controlType.date:
1415
- tempAutoFocus = ".ant-calendar-picker-input";
1416
- break;
1417
- case controlType.time:
1418
- tempAutoFocus = ".ant-time-picker-input";
1419
- tempAutoSelect = false;
1420
- break;
1421
- case controlType.checkbox:
1422
- tempAutoFocus = ".ant-checkbox-input";
1423
- break;
1424
- case controlType.select:
1425
- tempAutoSelect = false;
1426
- break;
1427
- }
1428
-
1429
- //可以编辑
1430
- colInfo.editRender = {
1431
- // autofocus: tempAutoSelect,
1432
- // autoselect:tempAutoSelect,
1433
- // name:'$input' //originCol.controlType + '_edit',
1434
- };
1435
- //编辑插槽
1436
- customSlot["edit"] = originCol.controlType + "_edit";
1437
- // colInfo['editRender'] = {
1438
- // name: originCol.controlType + '_edit',
1439
- // autofocus: tempAutoFocus,
1440
- // autoselect: tempAutoSelect
1441
- // }
1442
- // if (this.edit === true) {
1443
- // colParams['edit'] = true
1444
- // colInfo['editRender']['enabled'] = true
1445
- // }
1446
- }
1447
- if (originCol.controlType === controlType.pulldown) {
1448
- colParams["api"] = originCol.api;
1449
- colParams["defaultExpression"] = originCol.defaultExpression;
1450
- colParams["pageSize"] = originCol.pageSize;
1451
- colParams["optBtns"] = originCol.optBtns;
1452
- colParams["displayField"] = originCol.displayField;
1453
- colParams["popupAddName"] = originCol.popupAddName;
1454
- colParams["popupAddPath"] = originCol.popupAddPath;
1455
- colParams["columns"] = originCol.columns;
1456
- colParams["isLocalData"] = originCol.isLocalData;
1457
- colParams["isMultiSelect"] = originCol.isMultiSelect;
1458
- colParams["controlEdit"] = true;
1459
- }
1460
- if (originCol.controlType === controlType.text) {
1461
- colParams["controlEdit"] = true;
1462
- }
1463
- if (originCol.controlType === controlType.select) {
1464
- colParams["controlEdit"] = true;
1465
- }
1466
- if (originCol.controlType === controlType.checkbox) {
1467
- colParams["controlEdit"] = true;
1468
- }
1469
- if (originCol.controlType === controlType.date) {
1470
- colParams["pastDate"] = originCol.pastDate;
1471
- }
1472
- colParams["disableUserVisible"] = originCol.disableUserVisible === true;
1473
- colInfo["params"] = colParams;
1474
- colInfo["params"]["sysOriValue"] = {};
1475
- if (originCol.children) {
1476
- colInfo["children"] = [];
1477
- for (let x = 0; x < originCol.children.length; x++) {
1478
- colInfo["children"].push(this.initColumns(originCol.children[i]));
1479
- }
1480
- }
1481
- //防止报错 有slots值就走前面 没有slots这个键key就走后面
1482
- if (
1483
- originCol.controlType !== controlType.operation &&
1484
- originCol.filters === true
1485
- ) {
1486
- let filterTypeName = `${originCol.controlType}_filter`;
1487
- //网格筛选
1488
- colInfo["filters"] = [
1489
- { data: { bindingValues: [], displayValues: [] }, checked: false },
1490
- ];
1491
- if (originCol.filterExpression) {
1492
- colInfo["filters"] = originCol.filterExpression
1493
- }
1494
- colInfo["filterMultiple"] = false;
1495
- // colInfo['filterRender'] ={name: filterTypeName,showFilterFooter:false}
1496
- customSlot["filter"] = filterTypeName;
1497
- }
1498
- // console.debug(customSlot)
1499
- colInfo.slots = customSlot;
1500
- // console.debug(colInfo)
1501
- return colInfo;
1502
- },
1503
- validPrecision({ cellValue, column }) {
1504
- if (XEUtils.isNumber(cellValue)) {
1505
- let reg = new RegExp(
1506
- "^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0," +
1507
- column.params.precision +
1508
- "})?$"
1509
- );
1510
- if (!reg.test(cellValue)) {
1511
- return new Error("超过小数点" + column.params.precision + "位");
1512
- }
1513
- }
1514
- },
1515
- numberInputKeyDown(scope, event) {
1516
- let rowTag = scope.row;
1517
- let columnTag = scope.column;
1518
- let ROW_XIDS = scope.data.map((mapItem) => mapItem._XID);
1519
- let currentRowIndex = ROW_XIDS.indexOf(rowTag._XID);
1520
- let targetRow;
1521
- switch (event.keyCode) {
1522
- case 39: //向右
1523
- //当前光标已在输入文本末尾,向右找到第一个可编辑的列,设为编辑状态
1524
- break;
1525
- case 37: //向左
1526
- //当前光标已在输入文本开头,向左找到第一个可编辑的列,设为编辑状态
1527
- break;
1528
- case 38: //向上
1529
- if (0 < currentRowIndex - 1) {
1530
- targetRow = scope.data[currentRowIndex - 1];
1531
- this.$refs.baseGrid.setActiveCell(targetRow, columnTag);
1532
- }
1533
- break;
1534
- case 40: //向下
1535
- if (scope.data.length > currentRowIndex + 1) {
1536
- targetRow = scope.data[currentRowIndex + 1];
1537
- this.$refs.baseGrid.setActiveCell(targetRow, columnTag);
1538
- }
1539
- break;
1540
- }
1541
- },
1542
- getValid(column, row) {
1543
- if (column.params.rules) {
1544
- v.verify(row[column.property], column.params.rules).then(
1545
- (validData) => {
1546
- return "davis";
1547
- }
1548
- );
1549
- }
1550
- },
1551
- getGridView() {
1552
- return this.$refs.baseGrid;
1553
- },
1554
- //拖动输入框功能 未启用
1555
- initColumnDrop() {
1556
- this.$nextTick(() => {
1557
- const $table = this.$refs.baseGrid;
1558
- this.sortable2 = Sortable.create(
1559
- $table.$el.querySelector(
1560
- ".body--wrapper>.vxe-table--header .vxe-header--row"
1561
- ),
1562
- {
1563
- handle: ".vxe-header--column:not(.col--fixed)",
1564
- onEnd: ({ item, newIndex, oldIndex }) => {
1565
- const { fullColumn, tableColumn } = $table.getTableColumn();
1566
- const targetThElem = item;
1567
- const wrapperElem = targetThElem.parentNode;
1568
- const newColumn = fullColumn[newIndex];
1569
- if (newColumn.fixed) {
1570
- // 错误的移动
1571
- if (newIndex > oldIndex) {
1572
- wrapperElem.insertBefore(
1573
- targetThElem,
1574
- wrapperElem.children[oldIndex]
1575
- );
1576
- } else {
1577
- wrapperElem.insertBefore(
1578
- wrapperElem.children[oldIndex],
1579
- targetThElem
1580
- );
1581
- }
1582
- return this.$XModal.message({
1583
- content: "固定列不允许拖动!",
1584
- status: "error",
1585
- });
1586
- }
1587
- // 转换真实索引
1588
- const oldColumnIndex = $table.getColumnIndex(
1589
- tableColumn[oldIndex]
1590
- );
1591
- const newColumnIndex = $table.getColumnIndex(
1592
- tableColumn[newIndex]
1593
- );
1594
- // 移动到目标列
1595
- const currRow = fullColumn.splice(oldColumnIndex, 1)[0];
1596
- fullColumn.splice(newColumnIndex, 0, currRow);
1597
- $table.loadColumn(fullColumn);
1598
- },
1599
- }
1600
- );
1601
- });
1602
- },
1603
- sortChange({ column, property, order, sortBy, sortList, $event }) {
1604
- if (this.filterRemote) {
1605
- let tempSortList = [];
1606
- XEUtils.arrayEach(sortList, (loopSort) => {
1607
- tempSortList.push([loopSort.field, loopSort.order]);
1608
- });
1609
- this.$emit("sortChange", tempSortList);
1610
- }
1611
- },
1612
- currentChange(scope) {
1613
- this.$emit("currentChange", scope.row);
1614
- },
1615
- pageSizeChange(page, pageSize) {
1616
- this.$emit("pageSizeChange", page, pageSize);
1617
- },
1618
- pageChange(page, pageSize) {
1619
- this.$emit("pageChange", page, pageSize);
1620
- },
1621
- getCheckboxRecords() {
1622
- return this.$refs.baseGrid.getCheckboxRecords(true);
1623
- },
1624
- setCheckboxRow(rows, checked) {
1625
- this.$refs.baseGrid.setCheckboxRow(rows, checked);
1626
- },
1627
- setAllCheckboxRow(checked) {
1628
- return this.$refs.baseGrid.setAllCheckboxRow(checked);
1629
- },
1630
- reloadRow(rows, record) {
1631
- return this.$refs.baseGrid.reloadRow(rows, record);
1632
- },
1633
- /**
1634
- * 确认保存用户自定义表格信息
1635
- */
1636
- confirmUserDefineColumn() {
1637
- let vm = this;
1638
- let postData = {
1639
- moduleCode: this.moduleCode,
1640
- dataCode: this.dataCode,
1641
- fields: [],
1642
- };
1643
- let tableCollectColumn = this.$refs.baseGrid.getTableColumn().collectColumn;
1644
- const baseAdjustGridColumn = this.$refs.baseAdjustGridView.getTableColumn();
1645
-
1646
- XEUtils.arrayEach(baseAdjustGridColumn, (loopCol) => {
1647
- let tempData = {
1648
- field: loopCol.field,
1649
- sort: postData.fields.length + 1,
1650
- hidden: loopCol.visible !== true,
1651
- width: loopCol.width,
1652
- extraInfo:{}
1653
- };
1654
- if (loopCol.filters[0].data.bindingValues.length) {
1655
- loopCol.filters[0].checked = true;
1656
- tempData.extraInfo.filterExpression = loopCol.filters
1657
- }
1658
- if (loopCol.order) {
1659
- tempData.extraInfo.order = loopCol.order
1660
- }
1661
-
1662
- postData.fields.push(tempData);
1663
- let tempCol = XEUtils.findTree(
1664
- tableCollectColumn,
1665
- (p) => p.field === loopCol.field
1666
- ).item;
1667
- tempCol.visible = loopCol.visible;
1668
- tempCol.width = loopCol.width;
1669
- // tempCol.width = colWidth;
1670
- //设置顺序
1671
- tempCol.params["tempCustomSort"] = tempData.sort;
1672
- this.setCustomGridParentSort(
1673
- tableCollectColumn,
1674
- tempCol.parentId,
1675
- tempData.sort
1676
- );
1677
- });
1678
- saveUserModuleDataFieldApi(postData)
1679
- .then((res) => {
1680
- //设置表格顺序
1681
- tableCollectColumn = XEUtils.orderBy(
1682
- tableCollectColumn,
1683
- (p) => p.params.tempCustomSort
1684
- );
1685
- vm.$refs.baseGrid.reloadColumn(tableCollectColumn);
1686
- XEUtils.arrayEach(tableCollectColumn, (loopCol) => {
1687
- const find = XEUtils.find(baseAdjustGridColumn, item => loopCol.field === item.field)
1688
- if (find) {
1689
- loopCol.order = find.order
1690
- loopCol.filters = find.filters
1691
- }
1692
- })
1693
- //设置筛选过滤条件
1694
- this.setFilterExpression();
1695
- let data = []
1696
- this.$refs.baseGrid.getSortColumns().forEach(x=> {
1697
- data.push([x.field,x.order])
1698
- })
1699
- this.$emit("sortChange", data);
1700
-
1701
- //清空store缓存
1702
- vm.$store.commit(
1703
- "SET_MODULE_VIEW_INFO",{
1704
- moduleCode:this.moduleCode,
1705
- info:res.content
1706
- }
1707
- );
1708
- vm.showGridColumnUserDefine = false;
1709
- })
1710
- .catch((err) => console.error(err));
1711
- },
1712
- setCustomGridParentSort(tableCollectColumn, parentId, sort) {
1713
- let tempParentCol = XEUtils.findTree(
1714
- tableCollectColumn,
1715
- (p) => p.id === parentId
1716
- );
1717
- if (tempParentCol) {
1718
- tempParentCol.item.params["tempCustomSort"] = sort;
1719
- this.setCustomGridParentSort(
1720
- tableCollectColumn,
1721
- tempParentCol.item.parentId,
1722
- sort
1723
- );
1724
- }
1725
- },
1726
- getFetchField() {
1727
- let tempStr = "";
1728
- let tempFullColumn = this.$refs.baseGrid.getTableColumn().fullColumn;
1729
- XEUtils.arrayEach(tempFullColumn, (loopCol) => {
1730
- if (!loopCol.field) {
1731
- return;
1732
- }
1733
- if (
1734
- loopCol.visible === true ||
1735
- loopCol.params.disableUserVisible === true
1736
- ) {
1737
- tempStr = tempStr + loopCol.field + ",";
1738
- }
1739
- });
1740
- return tempStr.substring(0, tempStr.length - 1);
1741
- },
1742
- clickHeader() {
1743
- let tableCollectColumn = XEUtils.toTreeArray(
1744
- this.$refs.baseGrid.getTableColumn().collectColumn
1745
- );
1746
- this.userDefineColumns = XEUtils.filter(
1747
- tableCollectColumn,
1748
- (p) => !p.children && p.params.disableUserVisible !== true && p.field !== 'operation'
1749
- );
1750
- this.showGridColumnUserDefine = true;
1751
- },
1752
- operationButtonClick(btn, scope) {
1753
- if (btn.edit === false) {
1754
- return;
1755
- }
1756
- this.$emit("operationBtnClick", btn, scope.row, this);
1757
- },
1758
- operationEdit(item, scope) {
1759
- let isShow =
1760
- item.visible === true &&
1761
- !(scope.row["sysOperationDisVisible_" + item.field] === true) &&
1762
- (item.visibleState != undefined &&
1763
- item.visibleState.field != undefined &&
1764
- item.visibleState.visibleStatuss != undefined
1765
- ? item.visibleState.visibleStatuss.indexOf(
1766
- scope.row[item.visibleState.field]
1767
- ) != -1
1768
- : true);
1769
- return isShow;
1770
- },
1771
- activeCellMethod({ row, column }) {
1772
- let emitData ={
1773
- row:row,
1774
- column:column,
1775
- edit:column.params.edit
1776
- }
1777
- this.$emit('activeCellMethod',emitData)
1778
-
1779
- if (row["sysDisableEdit"] === true) {
1780
- //禁止编辑
1781
- return false;
1782
- }
1783
- return emitData.edit;
1784
- },
1785
- editActived(scope) {
1786
- let colElId = scope.column.id;
1787
- let rowElId = scope.row._X_ROW_KEY;
1788
- //延迟设置输入框自动获取焦点以及选中
1789
- this.$nextTick(() => {
1790
- let cellEl = scope.$table.$el.querySelector(
1791
- '[rowid="' + rowElId + '"]>[colid="' + colElId + '"]'
1792
- );
1793
- let inputEl = cellEl.querySelector("input");
1794
- if (inputEl) {
1795
- inputEl.focus();
1796
- inputEl.select();
1797
- }
1798
- });
1799
- this.$emit("editActived", scope);
1800
- },
1801
- setColumnEdit(field, edit) {
1802
- for (let i = 0; i < this.internalColumns.length; i++) {
1803
- if (this.internalColumns[i].field == field) {
1804
- let colInfo = this.internalColumns[i]
1805
- if (colInfo) {
1806
- colInfo.editRender.enabled = edit
1807
- colInfo.params.edit = edit
1808
- }
1809
- }
1810
- }
1811
- this.$refs.baseGrid.refreshColumn()
1812
- },
1813
- setEdit(currentState, currentStatus) {
1814
- //设置添加按钮
1815
- if (this.pager.buttons) {
1816
- for (let i = 0; i < this.pager.buttons.length; i++) {
1817
- let editVisible = this.getColumnEdit(
1818
- this.pager.buttons[i].edit,
1819
- currentState,
1820
- currentStatus,
1821
- this.pager.buttons[i].editStates,
1822
- this.pager.buttons[i].editStatuss,
1823
- this.pager.buttons[i].visibleStates,
1824
- this.pager.buttons[i].visibleStatuss
1825
- );
1826
- this.$set(this.pager.buttons[i], "visible", editVisible.visible);
1827
- this.$set(this.pager.buttons[i], "edit", editVisible.edit);
1828
- this.$forceUpdate();
1829
- }
1830
- }
1831
- // if (this.pager.add) {
1832
- // this.addBtnEdit = false
1833
- // this.addBtnEdit = this.getColumnEdit(
1834
- // this.addBtnEdit,
1835
- // currentState,
1836
- // currentStatus,
1837
- // this.pager.add.editStates,
1838
- // this.pager.add.editStatuss
1839
- // )
1840
- // }
1841
- //设置网格可编辑状态
1842
-
1843
- if (this.editStates.indexOf(currentState) > -1) {
1844
- this.gridEdit = true;
1845
- } else {
1846
- this.gridEdit = false;
1847
- }
1848
- if (currentStatus && this.editStatuss) {
1849
- if (this.editStatuss.indexOf(currentStatus) > -1) {
1850
- this.gridEdit = true;
1851
- } else {
1852
- this.gridEdit = false;
1853
- }
1854
- }
1855
- for (let i = 0; i < this.internalColumns.length; i++) {
1856
- if (!this.internalColumns[i].params) {
1857
- continue;
1858
- }
1859
- this.internalColumns[i].params.edit = false;
1860
- if (
1861
- this.internalColumns[i].params.controlType === controlType.operation
1862
- ) {
1863
- for (
1864
- let j = 0;
1865
- j < this.internalColumns[i].params.columns.length;
1866
- j++
1867
- ) {
1868
- this.internalColumns[i].params.columns[j].edit = false;
1869
- //设置工具栏可编辑状态
1870
- let editVisible = this.getColumnEdit(
1871
- this.internalColumns[i].params.columns[j].edit,
1872
- currentState,
1873
- currentStatus,
1874
- this.internalColumns[i].params.columns[j].editStates,
1875
- this.internalColumns[i].params.columns[j].editStatuss,
1876
- this.internalColumns[i].params.columns[j].visibleStates,
1877
- this.internalColumns[i].params.columns[j].visibleStatuss
1878
- );
1879
- this.$set(
1880
- this.internalColumns[i].params.columns[j],
1881
- "visible",
1882
- editVisible.visible
1883
- );
1884
- this.$set(
1885
- this.internalColumns[i].params.columns[j],
1886
- "edit",
1887
- editVisible.edit
1888
- );
1889
- }
1890
- continue;
1891
- }
1892
- //设置网格列编辑状态
1893
- if (this.gridEdit === true) {
1894
- let editVisible = this.getColumnEdit(
1895
- this.internalColumns[i].params.edit,
1896
- currentState,
1897
- currentStatus,
1898
- this.internalColumns[i].params.editStates,
1899
- this.internalColumns[i].params.editStatuss,
1900
- this.internalColumns[i].params.visibleStates,
1901
- this.internalColumns[i].params.visibleStatuss
1902
- );
1903
- this.internalColumns[i].params.edit = editVisible.edit;
1904
- if (this.internalColumns[i].editRender) {
1905
- this.internalColumns[i].editRender.enabled = editVisible.edit;
1906
- }
1907
- }
1908
- }
1909
- },
1910
- getColumnEdit(
1911
- originEdit,
1912
- currentState,
1913
- currentStatus,
1914
- editStates,
1915
- editStatuss,
1916
- visibleStates,
1917
- visibleStatuss
1918
- ) {
1919
- //显示状态控制
1920
- let fieldVisible = true;
1921
- if (currentState && visibleStates && visibleStates.length > 0) {
1922
- //有显示状态控制
1923
- if (visibleStates.indexOf(currentState) < 0) {
1924
- fieldVisible = false;
1925
- }
1926
- }
1927
- if (currentStatus && visibleStatuss && visibleStatuss.length > 0) {
1928
- if (visibleStatuss.indexOf(currentStatus) < 0) {
1929
- fieldVisible = false;
1930
- }
1931
- }
1932
-
1933
- //编辑状态控制
1934
- if (currentState && editStates) {
1935
- originEdit = editStates.indexOf(currentState) > -1;
1936
- }
1937
- if (currentStatus && editStatuss) {
1938
- originEdit = editStatuss.indexOf(currentStatus) > -1;
1939
- }
1940
- return { visible: fieldVisible, edit: originEdit };
1941
- },
1942
- cellValueChange(scope, e) {
1943
- console.debug(scope.column.field + "value change");
1944
- if (
1945
- scope.row["sysRowState"] !== "add" &&
1946
- scope.row["sysRowState"] !== "delete"
1947
- ) {
1948
- scope.row["sysRowState"] = "update";
1949
- }
1950
- this.$emit("valueChange", scope, this.dataName);
1951
- this.$refs.baseGrid.updateStatus(scope);
1952
- },
1953
- /**
1954
- * 异步插入
1955
- */
1956
- async insertAtAsync(row, index, autoSelect = true) {
1957
- let vm = this;
1958
- row["sysRowState"] = "add";
1959
- if (!row["id"]) {
1960
- row["id"] = this.$store.getters.newId() + "";
1961
- }
1962
- let insertRow = await this.$refs.baseGrid.insertAt(row, index);
1963
- if (autoSelect === true) {
1964
- this.$refs.baseGrid.setActiveRow(row);
1965
- this.$refs.baseGrid.setCurrentRow(row);
1966
- this.$emit("currentChange", row);
1967
- }
1968
- return insertRow;
1969
- },
1970
- insertAt(row, index, autoSelect = true, callback) {
1971
- let vm = this;
1972
- row["sysRowState"] = "add";
1973
- if (!row["id"]) {
1974
- row["id"] = this.$store.getters.newId() + "";
1975
- }
1976
- this.$refs.baseGrid.insertAt(row, index).then(({ row }) => {
1977
- if (callback) {
1978
- callback(row);
1979
- }
1980
-
1981
- if (autoSelect === true) {
1982
- vm.$refs.baseGrid.setActiveRow(row);
1983
- vm.$refs.baseGrid.setCurrentRow(row);
1984
- // vm.rows.push(row)
1985
- vm.$emit("currentChange", row);
1986
- }
1987
- });
1988
- },
1989
- // insertTree(row,)
1990
- setCurrentRow(rowInfo) {
1991
- let vm = this;
1992
- this.$refs.baseGrid.setCurrentRow(rowInfo).then(() => {
1993
- vm.$emit("currentChange", vm.$refs.baseGrid.getCurrentRecord());
1994
- });
1995
- },
1996
- getCurrentRow() {
1997
- return this.$refs.baseGrid.getCurrentRecord();
1998
- },
1999
- checkBoxChanged({ checked, records, row }) {
2000
- this.$emit("checkBoxChanged", checked, records, row);
2001
- },
2002
- checkBoxAllChanged({ checked, records }) {
2003
- this.$emit("checkBoxAllChanged", checked, records);
2004
- },
2005
- clearCurrentRow() {
2006
- this.$refs.baseGrid.clearCurrentRow();
2007
- },
2008
- clearCheckboxReserve() {
2009
- this.$refs.baseGrid.clearCheckboxReserve();
2010
- },
2011
- /**
2012
- * 表尾按钮操作
2013
- */
2014
- pagerBtnClick(pagerBtnInfo) {
2015
- this.$emit("pagerButtonClick", pagerBtnInfo, this);
2016
- },
2017
- /**
2018
- * 删除行
2019
- */
2020
- removeRow(row) {
2021
- return this.$refs.baseGrid.remove(row);
2022
- },
2023
- /**
2024
- * 删除所有行
2025
- */
2026
- removeAll() {
2027
- return this.$refs.baseGrid.remove();
2028
- },
2029
- getTableData() {
2030
- return this.$refs.baseGrid.getTableData().fullData;
2031
- },
2032
- getVisibleData() {
2033
- return this.$refs.baseGrid.getTableData().visibleData;
2034
- },
2035
- /**
2036
- * 获取更新的行
2037
- */
2038
- getUpdateRows() {
2039
- let tempRows = [];
2040
- //先获取删除数据,因为前台删除一个明细后又添加相同的明细后台会
2041
- //报唯一索引错误,因为后台也是先添加然后再是删除的会照成问题
2042
- //所有就要把删除的放在数组的第一个传递过去,这样后台就先删除然后再新增了
2043
- let tempRemoveRows = this.$refs.baseGrid.getRemoveRecords();
2044
- for (let i = 0; i < tempRemoveRows.length; i++) {
2045
- let tempRow = tempRemoveRows[i];
2046
- tempRow["sysRowState"] = "delete";
2047
- tempRows.push(tempRow);
2048
- }
2049
-
2050
- let tempTableData = this.$refs.baseGrid.getTableData().fullData;
2051
- for (let i = 0; i < tempTableData.length; i++) {
2052
- let tempRow = tempTableData[i];
2053
- if (this.$refs.baseGrid.isInsertByRow(tempRow) === true) {
2054
- tempRow["sysRowState"] = "add";
2055
- tempRows.push(tempRow);
2056
- }
2057
- //判断子项
2058
- // if(tempRow.children && tempRow.children.length>0){
2059
- // //添加子项数据
2060
- // XEUtils.arrayEach(tempRow.children,loopChild=>{
2061
- // if (this.$refs.baseGrid.isInsertByRow(loopChild) === true){
2062
- // loopChild["sysRowState"] = "add";
2063
- // tempRows.push(loopChild);
2064
- // }
2065
- // })
2066
- // }
2067
- }
2068
-
2069
- let tempUpdateRows = this.$refs.baseGrid.getUpdateRecords();
2070
- for (let i = 0; i < tempUpdateRows.length; i++) {
2071
- let tempRow = tempUpdateRows[i];
2072
- tempRow["sysRowState"] = "update";
2073
- tempRows.push(tempRow);
2074
- }
2075
-
2076
- return tempRows;
2077
- },
2078
- async fullValidate() {
2079
- const errMap = await this.$refs.baseGrid
2080
- .fullValidate(true)
2081
- .catch((errMap) => errMap);
2082
- let errorMsgList = [];
2083
- if (errMap) {
2084
- Object.values(errMap).forEach((errList) => {
2085
- errList.forEach((params) => {
2086
- const { rowIndex, column, rules, row } = params;
2087
- let tempRowIndex = this.$refs.baseGrid.getVTRowIndex(row);
2088
- rules.forEach((rule) => {
2089
- errorMsgList.push(
2090
- `第 ${tempRowIndex + 1} 行 ${column.title} 校验错误:${
2091
- rule.message
2092
- }`
2093
- );
2094
- });
2095
- });
2096
- });
2097
- }
2098
-
2099
- return errorMsgList;
2100
- },
2101
- preSearch(searchInfo, scope) {
2102
- this.$emit("preSearch", searchInfo, scope);
2103
- },
2104
- pulldownBtnClick(btn) {
2105
- this.$emit("pulldownBtnClick", btn);
2106
- },
2107
- pulldownMultiSelect(scope, pulldownView, selectRows) {
2108
- //第一行选中
2109
- pulldownView.setLinkValue(selectRows[0], scope.row);
2110
- this.cellValueChange(scope);
2111
- let vm = this;
2112
- for (let i = 1; i < selectRows.length; i++) {
2113
- let tempSelectRow = selectRows[i];
2114
- this.$emit("defaultRow", (newRow) => {
2115
- pulldownView.setLinkValue(tempSelectRow, newRow);
2116
- vm.insertAt(newRow, -1, false, (insertRow) => {
2117
- vm.cellValueChange({ row: insertRow, column: scope.column });
2118
- });
2119
- });
2120
- }
2121
- },
2122
- resizableChange(scope) {
2123
- this.$emit("resizableChange", scope);
2124
- },
2125
- setVisiable(fields, visible) {
2126
- fields.forEach((field) => {
2127
- let column = this.$refs.baseGrid.getColumnByField(field);
2128
- column.visible = visible;
2129
- });
2130
- this.$refs.baseGrid.refreshColumn();
2131
- },
2132
- reloadColumn(columns) {
2133
- this.internalColumns = [];
2134
- if (this.showSeq) {
2135
- this.internalColumns.push({
2136
- type: "seq",
2137
- fixed: "left",
2138
- width: 50,
2139
- slots: {
2140
- header: "seqHeader",
2141
- },
2142
- params: {
2143
- disableUserVisible: true,
2144
- },
2145
- });
2146
- }
2147
- if (this.showCheckBox) {
2148
- this.internalColumns.push({
2149
- type: "checkbox",
2150
- fixed: "left",
2151
- width: 40,
2152
- params: {
2153
- disableUserVisible: true,
2154
- },
2155
- });
2156
- }
2157
- columns.forEach((column) => {
2158
- this.internalColumns.push(this.initColumns(column));
2159
- });
2160
- this.$refs.baseGrid.refreshColumn();
2161
- },
2162
- addRules(fields, rules) {
2163
- fields.forEach((field) => {
2164
- this.$set(this.validRules, field, rules);
2165
- });
2166
- this.$refs.baseGrid.refreshColumn();
2167
- },
2168
- /**
2169
- * 表尾
2170
- */
2171
- footerMethod({ columns, data }) {
2172
- if (this.footerSum.length > 0) {
2173
- return [
2174
- columns.map((column, columnIndex) => {
2175
- if (columnIndex === 0) {
2176
- return "合计";
2177
- }
2178
- if (this.footerSum.includes(column.property)) {
2179
- let tempSumVal = XEUtils.sum(data, column.property);
2180
- if (
2181
- column.formatter &&
2182
- column.formatter !== "defaultFormat" &&
2183
- VXETable.formats.store[column.formatter]
2184
- ) {
2185
- tempSumVal = VXETable.formats.store[column.formatter]({
2186
- cellValue: tempSumVal,
2187
- });
2188
- }
2189
- return tempSumVal;
2190
- }
2191
- return null;
2192
- }),
2193
- ];
2194
- } else {
2195
- return [];
2196
- }
2197
- },
2198
- cellClick({ row, column }) {
2199
- this.$emit("cellClick", { row, column });
2200
- //判断是否可以跳转
2201
- if (
2202
- this.gridEdit != true ||
2203
- !(column.editRender && column.editRender.enabled === true)
2204
- ) {
2205
- if (column.params && column.params.route) {
2206
- let tempRouteName = column.params.route.name;
2207
- if (XEUtils.isArray(tempRouteName)) {
2208
- //需要不同条件跳转不同页面
2209
- for (let i = 0; i < tempRouteName.length; i++) {
2210
- if (tempRouteName[i].value === row[tempRouteName[i].field]) {
2211
- tempRouteName = tempRouteName[i].name;
2212
- break;
2213
- }
2214
- }
2215
- }
2216
-
2217
- this.$router.pushRoute({
2218
- name: tempRouteName,
2219
- query: { id: row[column.params.route.field] },
2220
- });
2221
- return;
2222
- }
2223
- }
2224
- // 判断当前网格是否可以编辑状态
2225
- if (this.gridEdit !== true) {
2226
- return;
2227
- }
2228
- if (this.$refs.baseGrid.isActiveByRow(row) === true) {
2229
- //判断当前行是否是编辑行
2230
- return;
2231
- }
2232
- // column.editRender.enabled = false
2233
- if (column.editRender && column.editRender.enabled === true) {
2234
- this.$refs.baseGrid.setActiveCell(row, column);
2235
- } else {
2236
- this.$refs.baseGrid.setActiveRow(row);
2237
- }
2238
- },
2239
- customSetActive(id) {
2240
- let fullData = this.$refs.baseGrid.getTableData().fullData;
2241
- let row = fullData.find((x) => x.id == id);
2242
- this.$refs.baseGrid.setCurrentRow(row);
2243
- },
2244
- gridRowStyle(scope) {},
2245
- bodyScroll(scrollInfo) {
2246
- this.$emit("scroll", scrollInfo);
2247
- // if (scrollInfo.isX === true) {
2248
- // // this.$refs.lineArea.style.marginLeft =
2249
- // // (scrollInfo.scrollLeft-(this.fixedColWidth-this.colWidth)) * -1 + 'px'
2250
-
2251
- // // this.$refs.headMonth.scrollTo(scrollInfo.scrollLeft)
2252
- // this.$refs.headDay.scrollTo(scrollInfo.scrollLeft)
2253
- // this.$refs.headHour.scrollTo(scrollInfo.scrollLeft)
2254
- // }
2255
- },
2256
- getRadioRecord(isFull) {
2257
- return this.$refs.baseGrid.getRadioRecord(isFull);
2258
- },
2259
- setRadioRow(rowInfo) {
2260
- this.$refs.baseGrid.setRadioRow(rowInfo);
2261
- },
2262
- editClosedEvent({ row, column }) {
2263
- // const $table = this.$refs.baseGrid
2264
- // const field = column.property
2265
- // const cellValue = row[field]
2266
- // $table.reloadRow(row, null, field)
2267
- // 判断单元格值是否被修改
2268
- // if ($table.isUpdateByRow(row, field)) {
2269
- // $table.reloadRow(row, null, field)
2270
- // // setTimeout(() => {
2271
- // // this.$XModal.message({
2272
- // // content: `局部保存成功! ${field}=${cellValue}`,
2273
- // // status: 'success'
2274
- // // })
2275
- // // // 局部更新单元格为已保存状态
2276
- // // $table.reloadRow(row, null, field)
2277
- // // }, 300)
2278
- // }
2279
- },
2280
- // 通用行合并函数(将相同多列数据合并为一行)
2281
- rowspanMethod({ row, _rowIndex, column, visibleData }) {
2282
- // let fields = ['role']
2283
- let cellValue = row[column.property];
2284
- if (cellValue && this.mergeFields.includes(column.property)) {
2285
- let prevRow = visibleData[_rowIndex - 1];
2286
- let nextRow = visibleData[_rowIndex + 1];
2287
- if (prevRow && prevRow[column.property] === cellValue) {
2288
- return { rowspan: 0, colspan: 0 };
2289
- } else {
2290
- let countRowspan = 1;
2291
- while (nextRow && nextRow[column.property] === cellValue) {
2292
- nextRow = visibleData[++countRowspan + _rowIndex];
2293
- }
2294
- if (countRowspan > 1) {
2295
- return { rowspan: countRowspan, colspan: 1 };
2296
- }
2297
- }
2298
- }
2299
- },
2300
- clearAll() {
2301
- let vm = this;
2302
- vm.$refs.baseGrid.clearAll();
2303
- },
2304
- reloadData(data) {
2305
- let vm = this;
2306
- vm.$refs.baseGrid.reloadData(data);
2307
- },
2308
- setLoading(e) {
2309
- this.loading = e;
2310
- },
2311
- //清空筛选
2312
- clearFilter() {
2313
- let vm = this;
2314
- // 示例
2315
- const filterList = vm.$refs.baseGrid.getCheckedFilters();
2316
- filterList.forEach((col) => {
2317
- col.column.filters = [];
2318
- });
2319
- vm.$refs.baseGrid.clearFilter();
2320
- },
2321
- filterAddExp(colInfo) {
2322
- colInfo.filters[0].data.displayValues.push({
2323
- value: [null, null],
2324
- });
2325
- },
2326
- filterConfirm(colInfo) {
2327
- let col= this.internalColumns.find(x=>x.field==colInfo.property)
2328
- this.$set(col.filters[0].data,'bindingValues',[])
2329
- colInfo.filters[0].data.bindingValues = [];
2330
- XEUtils.arrayEach(colInfo.filters[0].data.displayValues, (item) => {
2331
- if (colInfo.params.controlType === controlType.select) {
2332
- colInfo.filters[0].data.bindingValues.push(item);
2333
- this.$set(col.filters[0].data,'bindingValues',colInfo.filters[0].data.bindingValues)
2334
- } else {
2335
- if (item.value[0] || item.value[1]) {
2336
- colInfo.filters[0].data.bindingValues.push(item);
2337
- this.$set(col.filters[0].data,'bindingValues',colInfo.filters[0].data.bindingValues)
2338
- }
2339
- }
2340
- });
2341
- colInfo.filters[0].checked =
2342
- colInfo.filters[0].data.bindingValues.length > 0;
2343
- if (this.filterRemote) {
2344
- //设置筛选过滤条件
2345
- this.setFilterExpression();
2346
- //通知外部筛选改变事件
2347
- this.$emit("filterChange", { filterCol: colInfo });
2348
- } else {
2349
- // 手动触发重新筛选filterMethod()方法
2350
- this.$refs.baseGrid.updateData()
2351
- }
2352
- this.$refs.baseGrid.closeFilter()
2353
- },
2354
- filterMethod({ options, values, cellValue, row, column }) {
2355
- // 如果是服务端筛选,不会跳入该方法
2356
- let currentVisible = false
2357
- // 获取所有筛选数据,加入data数组进行比对
2358
- const data = []
2359
- XEUtils.arrayEach(options[0].data.displayValues, (item) => {
2360
- if(column.params.controlType === controlType.number) {
2361
- // 数字范围选择
2362
- item.value.sort((a,b)=> a-b)
2363
- if ( item.value[0] <= cellValue && cellValue <= item.value[1]) {
2364
- currentVisible = true
2365
- }
2366
- } else if(
2367
- column.params.controlType === controlType.date ||
2368
- column.params.controlType === controlType.datetime ||
2369
- column.params.controlType === controlType.time
2370
- ) {
2371
- // 日期范围选择
2372
- let tempDate = []
2373
- tempDate.push(XEUtils.timestamp(item.value[0])),
2374
- tempDate.push(XEUtils.timestamp(item.value[1])),
2375
- cellValue = XEUtils.timestamp(cellValue)
2376
- tempDate.sort((a,b)=> a-b)
2377
- if ( tempDate[0] <= cellValue && cellValue <= tempDate[1]) {
2378
- currentVisible = true
2379
- }
2380
- } else if (column.params.controlType === controlType.select) {
2381
- // 下拉
2382
- data.push(item)
2383
- } else {
2384
- // 其余字符串
2385
- let tempData = item.value.find(x => x !== null)
2386
- if (tempData) {
2387
- data.push(tempData)
2388
- }
2389
- }
2390
- });
2391
- if (cellValue && !currentVisible) {
2392
- currentVisible = data.find(x => cellValue.indexOf(x) > -1)?true:false
2393
- }
2394
- return currentVisible
2395
- },
2396
- setFilterExpression(columns = this.$refs.baseGrid.getTableColumn().collectColumn) {
2397
- XEUtils.clear(this.filterExpression);
2398
- XEUtils.clear(this.filterStr);
2399
- XEUtils.arrayEach(columns, (loopColInfo) => {
2400
- if (!loopColInfo.filters) {
2401
- return;
2402
- }
2403
- if (loopColInfo.filters[0].data.bindingValues.length === 0) {
2404
- return;
2405
- }
2406
- //开始构造条件
2407
- let tempStr = {
2408
- field: loopColInfo.field,
2409
- title: loopColInfo.title,
2410
- exp: "",
2411
- };
2412
- let expStr = "";
2413
- let filterBindingValues = loopColInfo.filters[0].data.bindingValues;
2414
- //筛选条件过滤
2415
- let colFilterExpression = { operator: "or", expressions: [] };
2416
-
2417
- if (loopColInfo.params.controlType === controlType.select) {
2418
- colFilterExpression.expressions.push({
2419
- field: loopColInfo.field,
2420
- operator: "IN",
2421
- value: filterBindingValues,
2422
- });
2423
- this.filterExpression.push(colFilterExpression);
2424
- tempStr.exp = "存在于 " + filterBindingValues;
2425
- this.filterStr.push(tempStr);
2426
- return;
2427
- }
2428
-
2429
- XEUtils.arrayEach(filterBindingValues, (loopBindingValue) => {
2430
- let tempPushExp = {
2431
- field: loopColInfo.field,
2432
- operator: "CO",
2433
- value: [],
2434
- };
2435
- switch (loopColInfo.params.controlType) {
2436
- case controlType.date:
2437
- case controlType.datetime:
2438
- if (loopBindingValue.value[0] && loopBindingValue.value[1]) {
2439
- tempPushExp.operator = "RA";
2440
- tempPushExp.value = loopBindingValue.value;
2441
- expStr = "范围";
2442
- tempStr.exp =
2443
- tempStr.exp +
2444
- loopBindingValue.value[0] +
2445
- "到" +
2446
- loopBindingValue.value[1] +
2447
- "或";
2448
- } else if (loopBindingValue.value[0]) {
2449
- tempPushExp.operator = "GE";
2450
- tempPushExp.value = loopBindingValue.value[0];
2451
- tempStr.exp = tempStr.exp + tempPushExp.value + "或";
2452
- expStr = "大于等于";
2453
- } else {
2454
- tempPushExp.operator = "LE";
2455
- tempPushExp.value = loopBindingValue.value[1];
2456
- tempStr.exp = tempStr.exp + tempPushExp.value + "或";
2457
- expStr = "小于等于";
2458
- }
2459
- break;
2460
- case controlType.number:
2461
- tempPushExp.operator = "RA";
2462
- tempPushExp.value = loopBindingValue.value;
2463
- expStr = "范围";
2464
- tempStr.exp =
2465
- tempStr.exp +
2466
- loopBindingValue.value[0] +
2467
- "到" +
2468
- loopBindingValue.value[1] +
2469
- "或";
2470
- break;
2471
- default:
2472
- tempPushExp.value = loopBindingValue.value[0];
2473
- expStr = "包含";
2474
- tempStr.exp = tempStr.exp + loopBindingValue.value[0] + "或";
2475
- }
2476
- colFilterExpression.expressions.push(tempPushExp);
2477
- });
2478
- this.filterExpression.push(colFilterExpression);
2479
- tempStr.exp = expStr + tempStr.exp.substring(0, tempStr.exp.length - 1);
2480
- this.filterStr.push(tempStr);
2481
- });
2482
-
2483
- this.toolBarConfig.enabled = this.filterExpression.length > 0;
2484
- },
2485
- filterVisible({ column, visible }) {
2486
- if (visible) {
2487
- //重新赋值过滤的显示值
2488
- column.filters[0].data.displayValues = [];
2489
- XEUtils.arrayEach(column.filters[0].data.bindingValues, (item) => {
2490
- column.filters[0].data.displayValues.push(item);
2491
- });
2492
- if (column.params.controlType !== controlType.select) {
2493
- column.filters[0].data.displayValues.push({
2494
- value: [null, null],
2495
- });
2496
- }
2497
- //设置第一个输入框光标选中
2498
- let tempClassName = column.field + "_filter_0";
2499
- setTimeout(() => {
2500
- // document
2501
- // .getElementsByClassName(tempClassName)[0]
2502
- // .children[0].select();
2503
- // document.getElementsByClassName(tempClassName)[0].children[0].focus();
2504
- }, 10);
2505
- }
2506
- },
2507
- numberFormatter(value, scope){
2508
- return value
2509
- },
2510
- numberParse(value, scope){
2511
- if (scope.column.params.le) {
2512
- //小于等于
2513
- if (value > scope.row[scope.column.params.le]) {
2514
- return scope.row[scope.column.params.le]
2515
- }
2516
- }
2517
- let returnValue = value
2518
- let tempPrecision = XEUtils.toNumber(scope.column.params.precision)
2519
- let reg = new RegExp(
2520
- '^((-?)|(-?([1-9]{1}\\d*)|-?([0]{1})))(\\.(\\d){0,' + tempPrecision + '})?$'
2521
- )
2522
- if (!reg.test(value)) {
2523
- //小数点验证不通过
2524
- // console.debug('验证不通过')
2525
- returnValue = XEUtils.floor(value, tempPrecision)
2526
- }
2527
- if (
2528
- XEUtils.isInteger(scope.column.params.max) &&
2529
- XEUtils.toNumber(returnValue) > scope.column.params.max
2530
- ) {
2531
- returnValue = scope.column.params.max
2532
- }
2533
- if (
2534
- XEUtils.isInteger(scope.column.params.min) &&
2535
- XEUtils.toNumber(returnValue) < scope.column.params.min
2536
- ) {
2537
- returnValue = scope.column.params.min
2538
- }
2539
- return returnValue
2540
- }
2541
- },
2542
- };
2543
- </script>
2544
-
2545
- <style>
2546
- .base-grid-view .ant-btn-link {
2547
- padding: 0 6px;
2548
- }
2549
- .base-grid-view .vxe-body--column.col-red {
2550
- background-color: rgb(227, 9, 53);
2551
- color: rgb(55, 55, 55);
2552
- /* font-weight: bold; */
2553
- }
2554
- .base-grid-view .vxe-body--column.col-orange {
2555
- background-color: rgb(237, 216, 20);
2556
- color: rgb(55, 55, 55);
2557
- /* font-weight: bold; */
2558
- }
2559
- .base-grid-view .vxe-body--column.col-grey {
2560
- background-color: rgb(140, 140, 138);
2561
- color: rgb(55, 55, 55);
2562
- /* font-weight: bold; */
2563
- }
2564
- .base-grid-view .vxe-body--column.col-blue {
2565
- background-color: #1890ff;
2566
- color: rgb(55, 55, 55);
2567
- /* font-weight: bold; */
2568
- }
2569
-
2570
- .base-grid-view .vxe-icon--caret-top {
2571
- color: "#c0c4cc" !important;
2572
- }
2573
- .base-grid-view .vxe-icon--caret-bottom {
2574
- color: "#c0c4cc" !important;
2575
- }
2576
- .vxe-icon--caret-top:hover {
2577
- color: #409eff;
2578
- }
2579
- .vxe-icon--caret-bottom:hover {
2580
- color: #409eff;
2581
- }
2582
- </style>
2583
- <style lang="scss" scoped>
2584
- .base-grid-view .vxe-header--row .vxe-header--column.sortable-ghost,
2585
- .base-grid-view .vxe-header--row .vxe-header--column.sortable-chosen {
2586
- background-color: #dfecfb;
2587
- }
2588
- .base-grid-view .vxe-header--row .vxe-header--column.col--fixed {
2589
- cursor: no-drop;
2590
- }
2591
- .inner-cell-control {
2592
- width: 100% !important;
2593
- min-width:unset!important;
2594
- }
2595
- .input-box {
2596
- width: 100%;
2597
- border: 1px solid;
2598
- min-height: 24px;
2599
- border-radius: 4px;
2600
- border-color: rgb(217, 217, 217);
2601
- padding-left: 5px;
2602
- line-height: 24px !important;
2603
- }
2604
- .test_filter {
2605
- text-align: left;
2606
- // display: inline-block;
2607
- // width:90%
2608
- }
2609
- .test_filter_title {
2610
- margin-left: 2%;
2611
- }
2612
- /*滚动条整体部分*/
2613
- .base-grid-view ::-webkit-scrollbar {
2614
- width: 10px;
2615
- height: 10px;
2616
- z-index: 10;
2617
- }
2618
- /*滚动条的轨道*/
2619
- .base-grid-view ::-webkit-scrollbar-track {
2620
- background-color: #ffffff;
2621
- z-index: 10;
2622
- }
2623
- /*滚动条里面的小方块,能向上向下移动*/
2624
- .base-grid-view ::-webkit-scrollbar-thumb {
2625
- background-color: #bfbfbf;
2626
- border-radius: 5px;
2627
- border: 1px solid #f1f1f1;
2628
- box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
2629
- z-index: 10;
2630
- }
2631
- .base-grid-view ::-webkit-scrollbar-thumb:hover {
2632
- background-color: #a8a8a8;
2633
- z-index: 10;
2634
- }
2635
- .base-grid-view ::-webkit-scrollbar-thumb:active {
2636
- background-color: #787878;
2637
- z-index: 10;
2638
- }
2639
- /*边角,即两个滚动条的交汇处*/
2640
- .base-grid-view ::-webkit-scrollbar-corner {
2641
- background-color: #ffffff;
2642
- z-index: 10;
2643
- }
2644
- .draggableItem {
2645
- display: inline-block;
2646
- height: 100%;
2647
- line-height: 30px;
2648
- border: 1.3px solid #e8eaec;
2649
- margin: 0 !important;
2650
- margin: 0 10px;
2651
- // overflow: hidden;
2652
- // text-overflow: ellipsis;
2653
- // white-space: nowrap;
2654
- }
2655
- .sortable-column-demo .vxe-header--row .vxe-header--column.sortable-ghost,
2656
- .sortable-column-demo .vxe-header--row .vxe-header--column.sortable-chosen {
2657
- background-color: #dfecfb;
2658
- }
2659
- .sortable-column-demo .vxe-header--row .vxe-header--column.col--fixed {
2660
- cursor: no-drop;
2661
- }
2662
-
2663
- .interceptor-class {
2664
- padding: 10px;
2665
- ::v-deep .ant-btn {
2666
- margin: 10px 10px 0;
2667
- }
2668
- ::v-deep .ant-input {
2669
- margin-bottom: 5px;
2670
- }
2671
- ::v-deep .ant-calendar-picker {
2672
- margin: 0 5px;
2673
- }
2674
- }
1
+ <template>
2
+ <div :style="{ height: height + 'px' }">
3
+ <VxeGrid
4
+ ref="baseGrid"
5
+ border
6
+ keep-source
7
+ :loading="loading"
8
+ auto-resize
9
+ :edit-config="{
10
+ trigger: 'manual',
11
+ mode: 'row',
12
+ activeMethod: activeCellMethod,
13
+ showStatus: true,
14
+ showUpdateStatus: true,
15
+ showInsertStatus: true,
16
+ showIcon: !showFilter,
17
+ }"
18
+ :filter-config="{
19
+ remote: filterRemote,
20
+ filterMethod: filterMethod
21
+ }"
22
+ :menu-config="menuConfig"
23
+ @menu-click="contextMenuClickEvent"
24
+ @filter-change="filterChange"
25
+ :footer-method="footerMethod"
26
+ @cell-click="cellClick"
27
+ resizable
28
+ :show-overflow="showOverFlow"
29
+ :show-header-overflow="showHeaderOverflow"
30
+ show-footer-overflow
31
+ highlight-current-row
32
+ highlight-hover-row
33
+ :span-method="rowspanMethod"
34
+ @current-change="currentChange"
35
+ @sort-change="sortChange"
36
+ @cellValueChange="cellValueChange"
37
+ @operationButtonClick="operationButtonClick"
38
+ @preSearch="preSearch"
39
+ @pulldownBtnClick="pulldownBtnClick"
40
+ @pulldownMultiSelect="pulldownMultiSelect"
41
+ :edit-rules="validRules"
42
+ :tree-config="treeConfig"
43
+ :row-config="rowConfig"
44
+ @resizable-change="resizableChange"
45
+ :checkbox-config="checkboxConfig"
46
+ :expand-config="expandConfig"
47
+ @edit-closed="editClosedEvent"
48
+ @edit-actived="editActived"
49
+ @filter-visible="filterVisible"
50
+ :sort-config="{
51
+ multiple: true,
52
+ remote: sortRemote,
53
+ chronological: true,
54
+ defaultSort: defaultSort,
55
+ }"
56
+ @checkbox-all="checkBoxAllChanged"
57
+ @checkbox-change="checkBoxChanged"
58
+ :cell-class-name="cellClassName"
59
+ :row-style="rowStyle"
60
+ :cell-style="cellStyle"
61
+ :size="'mini'"
62
+ :data="rows"
63
+ :columns="internalColumns"
64
+ class="base-grid-view"
65
+ :height="'auto'"
66
+ :show-footer="showFooter"
67
+ @scroll="bodyScroll"
68
+ >
69
+ <template v-for="item in internalColumns" #[item.field]>
70
+ <div :key="item.field">
71
+ <span v-if="item.visible !== false">{{item.title}}</span>
72
+ <Tooltip :title="item.tooltip" v-if="item.tooltip && item.visible !== false" style="margin: 0 2px">
73
+ <img src="../../styles/icon/help.png" alt="" style="width: 14px">
74
+ </Tooltip>
75
+ <!-- {{item}}-->
76
+ </div>
77
+ </template>
78
+ <!-- <template #toolbar_buttons>-->
79
+ <!-- <div>-->
80
+ <!-- <span v-for="loopFilterStr in filterStr" :key="loopFilterStr.field">-->
81
+ <!-- {{ loopFilterStr.title }} {{ loopFilterStr.exp }} 并且</span-->
82
+ <!-- >-->
83
+ <!-- </div>-->
84
+ <!-- </template>-->
85
+ <template #seqHeader>
86
+ <div
87
+ @click="clickHeader"
88
+ v-if="moduleCode && dataCode"
89
+ style="color: #219bff"
90
+ >
91
+ <a-icon
92
+ type="ordered-list"
93
+ style="font-size: 25px; cursor: pointer"
94
+ />
95
+ </div>
96
+ </template>
97
+ <template #empty>
98
+ <span v-if="emptyText">{{ emptyText }}</span>
99
+ <a-empty v-else size="small" />
100
+ </template>
101
+
102
+ <template #default="scope">
103
+ <div v-if="scope.column.params" class="grid-valid-display">
104
+ <!-- {{ scope.row[scope.column.field] }} -->
105
+ {{ gridDefaultValueDisplay(scope.row, scope.column) }}
106
+ <!-- {{ defaultValueDisplay(scope.row, scope.column) }} -->
107
+ </div>
108
+ </template>
109
+
110
+ <template #text_edit="scope">
111
+ <div class="interceptor-class">
112
+ <a-input
113
+ class="inner-cell-control"
114
+ size="small"
115
+ v-model="scope.row[scope.column.property]"
116
+ @change="cellValueChange(scope)"
117
+ type="text"
118
+ />
119
+ </div>
120
+ </template>
121
+ <template #checkbox_edit="scope">
122
+ <div class="interceptor-class">
123
+ <a-checkbox
124
+ class="inner-cell-control"
125
+ size="small"
126
+ @change="cellValueChange(scope)"
127
+ v-model="scope.row[scope.column.property]"
128
+ />
129
+ </div>
130
+ </template>
131
+ <template #number_edit="scope">
132
+ <div class="interceptor-class">
133
+ <a-input-number
134
+ class="inner-cell-control"
135
+ size="small"
136
+ @change="cellValueChange(scope)"
137
+ v-model="scope.row[scope.column.property]"
138
+ :formatter="value => numberFormatter(value, scope)"
139
+ :parser="value => numberParse(value, scope)"
140
+ :min="scope.column.numberMin"
141
+ :max="scope.column.numberMax"
142
+ />
143
+ </div>
144
+ </template>
145
+ <template #date_edit="scope">
146
+ <div class="interceptor-class">
147
+ <a-date-picker
148
+ v-model="scope.row[scope.column.property]"
149
+ class="inner-cell-control"
150
+ size="small"
151
+ @change="cellValueChange(scope)"
152
+ value-format="YYYY-MM-DD"
153
+ />
154
+ </div>
155
+ </template>
156
+ <template #datetime_edit="scope">
157
+ <div class="interceptor-class">
158
+ <a-date-picker
159
+ v-model="scope.row[scope.column.property]"
160
+ format="YYYY-MM-DD HH:mm:ss"
161
+ size="small"
162
+ value-format="YYYY-MM-DD HH:mm:ss"
163
+ class="inner-cell-control"
164
+ :showTime="true"
165
+ @change="cellValueChange(scope)"
166
+ />
167
+ </div>
168
+ </template>
169
+ <template #select_edit="scope">
170
+ <div class="interceptor-class">
171
+ <a-select
172
+ v-model="scope.row[scope.column.property]"
173
+ @change="cellValueChange(scope)"
174
+ size="small"
175
+ class="inner-cell-control"
176
+ >
177
+ <a-select-option
178
+ v-for="loopSource in scope.column.params.dataSource"
179
+ :key="loopSource.value"
180
+ :value="loopSource.value"
181
+ >{{ loopSource.caption }}</a-select-option
182
+ >
183
+ </a-select>
184
+ </div>
185
+ </template>
186
+ <template #time_edit="scope" class="interceptor-class">
187
+ <div class="interceptor-class">
188
+ <a-time-picker
189
+ v-model="scope.row[scope.column.property]"
190
+ format="HH:mm:ss"
191
+ value-format="HH:mm:ss"
192
+ size="small"
193
+ class="inner-cell-control"
194
+ @change="cellValueChange(scope)"
195
+ />
196
+ </div>
197
+ </template>
198
+
199
+ <template #pulldown_edit="scope" class="interceptor-class">
200
+ <div class="interceptor-class">
201
+ <BasePulldown
202
+ v-model="scope.row[scope.column.property]"
203
+ :field="scope.column.property"
204
+ :formRow="formRow"
205
+ :edit="scope.column.params.controlEdit === true"
206
+ :showLabel="false"
207
+ :row="scope.row"
208
+ :api="scope.column.params.api"
209
+ :isLocalData="scope.column.params.isLocalData"
210
+ :localDataSource="scope.column.params.localDataSource"
211
+ :isMultiSelect="scope.column.params.isMultiSelect"
212
+ :defaultExpression="scope.column.params.defaultExpression"
213
+ :columns="scope.column.params.columns"
214
+ :pageSize="scope.column.params.pageSize"
215
+ :optBtns="scope.column.params.optBtns"
216
+ :popupAddName="scope.column.params.popupAddName"
217
+ :popupAddPath="scope.column.params.popupAddPath"
218
+ @preSearch="(searchInfo) => preSearch(searchInfo, scope)"
219
+ @selectChanged="cellValueChange(scope)"
220
+ @confirmMultiSelect="
221
+ (pulldownView, selectRows) =>
222
+ pulldownMultiSelect(scope, pulldownView, selectRows)
223
+ "
224
+ @pulldownBtnClick="pulldownBtnClick"
225
+ />
226
+ </div>
227
+ </template>
228
+
229
+ <template #expandContent="{ row, column, $table }">
230
+ <slot name="expandContent" :item="{ row, column, $table }"></slot>
231
+ </template>
232
+ <template #expandDefault="{ row, column }">
233
+ <slot name="expandDefault" :item="{ row, column }"></slot>
234
+ </template>
235
+ <template #linkCell="{ row, column }">
236
+ <span
237
+ ><a>{{ row[column.property] }}</a></span
238
+ >
239
+ </template>
240
+ <template #operation_edit="scope">
241
+ <div>
242
+ <!-- 2个显示限制:页面状态visibleStatuss数组;根据其他字段限制visibleState对象 -->
243
+ <a-button
244
+ type="link"
245
+ @click="operationButtonClick(item, scope)"
246
+ v-show="operationEdit(item, scope)"
247
+ v-for="item in scope.column.params.columns"
248
+ :key="item.field"
249
+ >
250
+ {{ item.title }}
251
+ </a-button>
252
+ </div>
253
+ </template>
254
+ <template #customCell="{ row, column }">
255
+ <slot name="customCell" :item="{ row, column }"></slot>
256
+ </template>
257
+ <template #customRadio="{ row, checked }">
258
+ <slot name="customRadio" :item="{ row, checked }"></slot>
259
+ </template>
260
+ <template #customFooter="{ column, items, _columnIndex }">
261
+ <slot
262
+ name="customFooter"
263
+ :item="{ column, items, _columnIndex }"
264
+ ></slot>
265
+ </template>
266
+ <template #pager v-if="pager && !pager.notShow">
267
+ <a-row>
268
+ <a-col :span="8" style="text-align: left; padding: 10px">
269
+ <a-space>
270
+ <template v-for="loopPagerBtn in pager.buttons">
271
+ <a-button
272
+ :key="loopPagerBtn.field"
273
+ v-if="loopPagerBtn.visible"
274
+ type="primary"
275
+ size="small"
276
+ :disabled="loopPagerBtn.edit === false"
277
+ @click="pagerBtnClick(loopPagerBtn)"
278
+ >{{ loopPagerBtn.title }}</a-button
279
+ >
280
+ </template>
281
+ </a-space>
282
+ </a-col>
283
+ <a-col :span="16" style="text-align: right">
284
+ <BasePagination
285
+ v-if="pager.size"
286
+ :totalRows="pager.totalRows"
287
+ :pageSize="pager.size"
288
+ :currentPage="pager.current"
289
+ @pageChange="pageChange"
290
+ @pageSizeChange="pageSizeChange"
291
+ />
292
+ </a-col>
293
+ </a-row>
294
+ </template>
295
+
296
+ <!-- 筛选过滤 -->
297
+ <template #text_filter="scope">
298
+ <div class="interceptor-class">
299
+ <div
300
+ :class="scope.column.field + '_filter_' + $index"
301
+ v-for="(loopFilterValue, $index) in scope.column.filters[0].data
302
+ .displayValues"
303
+ :key="$index"
304
+ >
305
+ <a-input allowClear v-model="loopFilterValue.value[0]" @keyup.enter.native="filterConfirm(scope.column)" />
306
+ </div>
307
+ <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
308
+ <a-button @click="filterConfirm(scope.column)">确认</a-button>
309
+ </div>
310
+ </template>
311
+ <template #customCell_filter="scope">
312
+ <div class="interceptor-class">
313
+ <div
314
+ :class="scope.column.field + '_filter_' + $index"
315
+ v-for="(loopFilterValue, $index) in scope.column.filters[0].data
316
+ .displayValues"
317
+ :key="$index"
318
+ >
319
+ <a-input allowClear v-model="loopFilterValue.value[0]" @keyup.enter.native="filterConfirm(scope.column)" />
320
+ </div>
321
+ <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
322
+ <a-button @click="filterConfirm(scope.column)">确认</a-button>
323
+ </div>
324
+ </template>
325
+ <template #pulldown_filter="scope">
326
+ <div class="interceptor-class">
327
+ <div
328
+ :class="scope.column.field + '_filter_' + $index"
329
+ v-for="(loopFilterValue, $index) in scope.column.filters[0].data
330
+ .displayValues"
331
+ :key="$index"
332
+ >
333
+ <a-input allowClear v-model="loopFilterValue.value[0]" @keyup.enter.native="filterConfirm(scope.column)" />
334
+ </div>
335
+ <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
336
+ <a-button @click="filterConfirm(scope.column)">确认</a-button>
337
+ </div>
338
+ </template>
339
+ <template #number_filter="scope">
340
+ <div class="interceptor-class">
341
+ <div
342
+ :class="scope.column.field + '_filter_' + $index"
343
+ v-for="(loopFilterValue, $index) in scope.column.filters[0].data
344
+ .displayValues"
345
+ :key="$index"
346
+ >
347
+ <a-input-number
348
+ :precision="0"
349
+ size="small"
350
+ v-model="loopFilterValue.value[0]"
351
+ @keyup.enter.native="filterConfirm(scope.column)"
352
+ />~
353
+ <a-input-number
354
+ :precision="0"
355
+ size="small"
356
+ v-model="loopFilterValue.value[1]"
357
+ @keyup.enter.native="filterConfirm(scope.column)"
358
+ />
359
+ </div>
360
+ <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
361
+ <a-button @click="filterConfirm(scope.column)">确认</a-button>
362
+ </div>
363
+ </template>
364
+ <template #select_filter="scope">
365
+ <div class="interceptor-class">
366
+ <a-checkbox-group
367
+ v-model="scope.column.filters[0].data.displayValues"
368
+ :style="{
369
+ display: 'flex',
370
+ flexWrap: 'wrap',
371
+ justifyContent: 'left',
372
+ alignItems: 'center',
373
+ maxHeight: '150px',
374
+ overflow: 'auto',
375
+ maxWidth: '100px'
376
+ }"
377
+ @keyup.enter.native="filterConfirm(scope.column)"
378
+ >
379
+ <br />
380
+ <a-checkbox
381
+ v-for="loopSource in scope.column.params.dataSource"
382
+ :key="loopSource.value"
383
+ :value="loopSource.value"
384
+ style="margin: 5px 0;"
385
+ >{{ loopSource.caption }}
386
+ </a-checkbox>
387
+ </a-checkbox-group>
388
+ <!-- <a-select-->
389
+ <!-- v-model="scope.column.filters[0].data.displayValues"-->
390
+ <!-- mode="multiple"-->
391
+ <!-- allowClear-->
392
+ <!-- style="width: 300px;"-->
393
+ <!-- placeholder="筛选条件"-->
394
+ <!-- showArrow-->
395
+ <!-- >-->
396
+ <!-- <a-select-option-->
397
+ <!-- v-for="loopSource in scope.column.params.dataSource"-->
398
+ <!-- :key="loopSource.value"-->
399
+ <!-- :value="loopSource.value"-->
400
+ <!-- >{{ loopSource.caption }}</a-select-option-->
401
+ <!-- >-->
402
+ <!-- </a-select>-->
403
+ <br>
404
+ <a-button @click="filterConfirm(scope.column)">确认</a-button>
405
+ </div>
406
+ </template>
407
+ <template #datetime_filter="scope">
408
+ <div class="interceptor-class">
409
+ <div
410
+ :class="scope.column.field + '_filter_' + $index"
411
+ v-for="(loopFilterValue, $index) in scope.column.filters[0].data
412
+ .displayValues"
413
+ :key="$index"
414
+ >
415
+ <a-date-picker
416
+ valueFormat="YYYY-MM-DD HH:mm:ss"
417
+ format="YYYY-MM-DD HH:mm:ss"
418
+ :show-time="{
419
+ defaultValue: moment(
420
+ '2000-01-01 00:00:00',
421
+ 'YYYY-MM-DD HH:mm:ss'
422
+ ),
423
+ }"
424
+ placeholder="开始时间"
425
+ v-model="loopFilterValue.value[0]"
426
+ @keyup.enter.native="filterConfirm(scope.column)"
427
+ />
428
+ <a-date-picker
429
+ valueFormat="YYYY-MM-DD HH:mm:ss"
430
+ format="YYYY-MM-DD HH:mm:ss"
431
+ :show-time="{
432
+ defaultValue: moment(
433
+ '2000-01-01 23:59:59',
434
+ 'YYYY-MM-DD HH:mm:ss'
435
+ ),
436
+ }"
437
+ placeholder="结束时间"
438
+ v-model="loopFilterValue.value[1]"
439
+ @keyup.enter.native="filterConfirm(scope.column)"
440
+ />
441
+ </div>
442
+ <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
443
+ <a-button @click="filterConfirm(scope.column)">确认</a-button>
444
+ </div>
445
+ </template>
446
+ <template #date_filter="scope">
447
+ <div class="interceptor-class">
448
+ <div
449
+ :class="scope.column.field + '_filter_' + $index"
450
+ v-for="(loopFilterValue, $index) in scope.column.filters[0].data
451
+ .displayValues"
452
+ :key="$index"
453
+ >
454
+ <a-range-picker v-model:value="loopFilterValue.value"
455
+ valueFormat="YYYY-MM-DD"
456
+ format="YYYY-MM-DD"
457
+ @keyup.enter.native="filterConfirm(scope.column)"
458
+
459
+ />
460
+ </div>
461
+ <a-button @click="filterAddExp(scope.column)">添加条件</a-button>
462
+ <a-button @click="filterConfirm(scope.column)">确认</a-button>
463
+ </div>
464
+ </template>
465
+ </VxeGrid>
466
+ <VxeModal
467
+ v-model="showGridColumnUserDefine"
468
+ title="表格布局设置"
469
+ width="70%"
470
+ height="70%"
471
+ show-zoom
472
+ transfer
473
+ resize
474
+ :zIndex="15"
475
+ show-footer
476
+ destroy-on-close
477
+ >
478
+ <BaseGridAdjust
479
+ :userDefineColumns="userDefineColumns"
480
+ ref="baseAdjustGridView"
481
+ ></BaseGridAdjust>
482
+ <template #footer>
483
+ <a-button
484
+ type="primary"
485
+ :size="'small'"
486
+ @click="confirmUserDefineColumn"
487
+ >
488
+ 确认
489
+ </a-button>
490
+ </template>
491
+ </VxeModal>
492
+ </div>
493
+ </template>
494
+ <script>
495
+ //轻量级剪贴板复制函数
496
+ import XEClipboard from "xe-clipboard";
497
+ //引入全局文件
498
+ import { controlType } from "../../utils/enum";
499
+ //日期处理类库
500
+ import moment from "moment";
501
+ //拖拽排序功能
502
+ //辅助函数 将store 中的 getter 映射到局部计算属性
503
+ import { mapGetters } from "vuex";
504
+ //xe-utils提供了一套实用的基础函数、任意格式的日期转换函数,浏览器相关操作函数等,详细使用百度
505
+ import XEUtils from "xe-utils";
506
+ //VXETable插件
507
+ import VXETable from "vxe-table";
508
+ import { Tooltip } from 'ant-design-vue'
509
+ //ant的空状态展示占位图
510
+ import {
511
+ Empty,
512
+ Row,
513
+ Col,
514
+ Space,
515
+ Input,
516
+ Select,
517
+ DatePicker,
518
+ Checkbox,
519
+ InputNumber,
520
+ TimePicker,
521
+ Button,
522
+ } from "ant-design-vue";
523
+ import BasePagination from "../../BasePagination/index";
524
+ import BasePulldown from "../../BasePulldown/index";
525
+ import BaseGridAdjust from "../../BaseGridAdjust/index";
526
+ import { saveUserModuleDataFieldApi } from "../../utils/api";
527
+ import { gridDefaultValueDisplay } from "../../utils/filters";
528
+ export default {
529
+ name: "BaseGrid",
530
+ components: {
531
+ "a-empty": Empty,
532
+ "a-row": Row,
533
+ "a-col": Col,
534
+ "a-space": Space,
535
+ "a-input": Input,
536
+ "a-select": Select,
537
+ "a-select-option": Select.Option,
538
+ "a-date-picker": DatePicker,
539
+ "a-checkbox": Checkbox,
540
+ "a-input-number": InputNumber,
541
+ "a-time-picker": TimePicker,
542
+ "a-button": Button,
543
+ BasePagination,
544
+ BasePulldown,
545
+ BaseGridAdjust,
546
+ Tooltip,
547
+ },
548
+ data() {
549
+ return {
550
+ gridDefaultValueDisplay: gridDefaultValueDisplay,
551
+ showFooter: false,
552
+ showGridColumnUserDefine: false,
553
+ userDefineColumns: [],
554
+ loading: false,
555
+ internalCols: {},
556
+ moment,
557
+ internalColumns: [],
558
+ gridEdit: false,
559
+ addBtnEdit: true,
560
+ validRules: {},
561
+ footerSum: [],
562
+ mergeFields: [],
563
+ simpleImage: null,
564
+ dragOptions: {
565
+ animation: 0,
566
+ group: "description",
567
+ disabled: false,
568
+ ghostClass: "ghost",
569
+ },
570
+ menuConfig: {
571
+ header: {
572
+ options: [
573
+ [
574
+ {
575
+ code: "clearFilter",
576
+ name: "清空筛选",
577
+ visible: true,
578
+ disabled: false,
579
+ },
580
+ ],
581
+ ],
582
+ },
583
+ body: {
584
+ options: [
585
+ [
586
+ {
587
+ code: "refresh",
588
+ name: "刷新",
589
+ visible: true,
590
+ },
591
+ {
592
+ code: "copy",
593
+ name: "复制",
594
+ visible: true,
595
+ disabled: false,
596
+ },
597
+ {
598
+ code: "sort",
599
+ name: "排序",
600
+ prefixIcon: "fa fa-sort color-blue",
601
+ children: [
602
+ { code: "clearSort", name: "清除排序" },
603
+ {
604
+ code: "asc",
605
+ name: "升序",
606
+ prefixIcon: "fa fa-sort-alpha-asc color-orange",
607
+ },
608
+ {
609
+ code: "desc",
610
+ name: "倒序",
611
+ prefixIcon: "fa fa-sort-alpha-desc color-orange",
612
+ },
613
+ ],
614
+ },
615
+ ],
616
+ ],
617
+ },
618
+ },
619
+ toolBarConfig: {
620
+ custom: true,
621
+ slots: { buttons: "toolbar_buttons" },
622
+ enabled: false,
623
+ },
624
+ filterExpression: [],
625
+ filterStr: [],
626
+ };
627
+ },
628
+ computed: {
629
+ //使用对象展开运算符 将 getter 混入 computer 对象中
630
+ ...mapGetters(["controlSize"]),
631
+ },
632
+ filters: {
633
+ displayText: function (row, column) {
634
+ if (column.params.controlType === "select") {
635
+ let tempItem = XEUtils.find(
636
+ column.params.dataSource,
637
+ (p) => p.value === row[column.property]
638
+ );
639
+ // let tempItems = column.params.dataSource.filter(filterItem => {
640
+ // return filterItem.value === row[column.property]
641
+ // })
642
+ if (tempItem) {
643
+ return tempItem.caption;
644
+ } else {
645
+ return row[column.property];
646
+ }
647
+ }
648
+
649
+ let linkField = column.property.split(".");
650
+ if (linkField.length > 1) {
651
+ let fieldValue = row;
652
+ for (let i = 0; i < linkField.length; i++) {
653
+ if (
654
+ fieldValue[linkField[i]] === undefined ||
655
+ fieldValue[linkField[i]] === null
656
+ ) {
657
+ return null;
658
+ }
659
+ fieldValue = fieldValue[linkField[i]];
660
+ }
661
+ return fieldValue;
662
+ }
663
+ if (column.params.controlType === "checkbox") {
664
+ return row[column.property] === true ? "是" : "否";
665
+ }
666
+
667
+ if (column.params.displayField) {
668
+ return row[column.params.displayField];
669
+ }
670
+ return row[column.property];
671
+ },
672
+ },
673
+ props: {
674
+ showOverFlow: {
675
+ type: Boolean,
676
+ default: true,
677
+ },
678
+ defaultSort: {
679
+ type: Array,
680
+ default: function () {
681
+ return [];
682
+ },
683
+ },
684
+ showFilter: {
685
+ type: Boolean,
686
+ default: true,
687
+ },
688
+ showHeaderOverflow: {
689
+ type: Boolean,
690
+ default: true,
691
+ },
692
+ cellClassName: {
693
+ type: Function,
694
+ default: null,
695
+ },
696
+ sortRemote: {
697
+ type: Boolean,
698
+ default: () => {
699
+ return true;
700
+ },
701
+ },
702
+ //筛选判断是否远程
703
+ filterRemote: {
704
+ type: Boolean,
705
+ default: () => {
706
+ return false;
707
+ },
708
+ },
709
+ checkboxConfig: {
710
+ type: Object,
711
+ default: () => {
712
+ return null;
713
+ },
714
+ deep: true,
715
+ },
716
+ treeConfig: {
717
+ type: Object,
718
+ default: () => {
719
+ return null;
720
+ },
721
+ deep: true,
722
+ },
723
+ rowConfig: {
724
+ type: Object,
725
+ default: () => {
726
+ return null;
727
+ },
728
+ deep: true,
729
+ },
730
+ expandConfig: {
731
+ type: Object,
732
+ default: () => {
733
+ return null;
734
+ },
735
+ deep: true,
736
+ },
737
+ rowStyle: {
738
+ type: Function,
739
+ },
740
+ cellStyle: {
741
+ type: Function,
742
+ },
743
+ height: {
744
+ default: null,
745
+ },
746
+ pager: {
747
+ type: Object,
748
+ default: () => {
749
+ return null;
750
+ },
751
+ deep: true,
752
+ },
753
+ showSeq: {
754
+ type: Boolean,
755
+ default: () => {
756
+ return true;
757
+ },
758
+ },
759
+ showMenu: {
760
+ type: Boolean,
761
+ default: () => {
762
+ return true;
763
+ },
764
+ },
765
+ showExpand: {
766
+ type: Boolean,
767
+ default: () => {
768
+ return false;
769
+ },
770
+ },
771
+ isOld: {
772
+ type: Boolean,
773
+ default: () => {
774
+ return false;
775
+ },
776
+ },
777
+ emptyText: {
778
+ type: String,
779
+ default: () => {
780
+ return "";
781
+ },
782
+ },
783
+ columns: {
784
+ type: Array,
785
+ default: () => {
786
+ return [];
787
+ },
788
+ deep: true,
789
+ },
790
+ editStates: {
791
+ type: Array,
792
+ default: () => {
793
+ return null;
794
+ },
795
+ deep: true,
796
+ },
797
+ edit: {
798
+ type: Boolean,
799
+ default: false,
800
+ },
801
+ formRow: {
802
+ type: Object,
803
+ default: () => {
804
+ return {};
805
+ },
806
+ deep: true,
807
+ },
808
+ editStatuss: {
809
+ type: Array,
810
+ default: () => {
811
+ return null;
812
+ },
813
+ deep: true,
814
+ },
815
+ showCheckBox: {
816
+ type: Boolean,
817
+ default: false,
818
+ },
819
+ showRadio: {
820
+ type: Boolean,
821
+ default: false,
822
+ },
823
+ // checkboxConfigReserve: {
824
+ // type: Boolean,
825
+ // default: false
826
+ // },
827
+ dataName: {
828
+ type: String,
829
+ default: "",
830
+ },
831
+ moduleCode: {
832
+ type: String,
833
+ default: "",
834
+ },
835
+ dataCode: {
836
+ type: String,
837
+ default: "",
838
+ },
839
+ rows: {
840
+ type: Array,
841
+ default: () => {
842
+ return [];
843
+ },
844
+ deep: true,
845
+ },
846
+ },
847
+ beforeCreate() {
848
+ this.simpleImage = Empty.PRESENTED_IMAGE_SIMPLE;
849
+ },
850
+
851
+ created() {
852
+
853
+ //拖动后输入框有错位问题,暂时不启用
854
+ // this.initColumnDrop()
855
+
856
+ // this.internalColumns.push({
857
+ // field: 'sysRowState',
858
+ // visible:false,
859
+ // filterMethod:this.sysRowStateFilter,
860
+ // filters:[{label:'筛选删除行',value:'delete',checked:true}]
861
+ // })
862
+ for (let i = 0; i < this.columns.length; i++) {
863
+ this.internalColumns.push(this.initColumns(this.columns[i]));
864
+ if(this.columns[i].visible !== false && this.columns[i].controlType !== 'operation') {
865
+ this.internalColumns[i].slots.header = this.columns[i].field;
866
+ }
867
+ }
868
+
869
+ // 初始化排序和筛选
870
+ if (this.sortRemote) {
871
+ let data = []
872
+ this.defaultSort.forEach(x => {
873
+ data.push([x.field, x.order])
874
+ })
875
+ this.$emit("sortModify", data);
876
+
877
+ //设置筛选过滤条件
878
+ this.setFilterExpression(this.internalColumns);
879
+ }
880
+
881
+ if (this.showSeq) {
882
+ this.internalColumns.push(
883
+ // {
884
+ // children: [
885
+ {
886
+ type: "seq",
887
+ fixed: "left",
888
+ width: 50,
889
+ slots: {
890
+ header: "seqHeader",
891
+ },
892
+ params: {
893
+ disableUserVisible: true,
894
+ },
895
+ }
896
+ // ],
897
+ // slots: {
898
+ // header: 'seqHeader'
899
+ // }
900
+ // }
901
+ );
902
+ }
903
+
904
+ if (this.showCheckBox) {
905
+ this.internalColumns.push({
906
+ type: "checkbox",
907
+ fixed: "left",
908
+ width: 40,
909
+ params: {
910
+ disableUserVisible: true,
911
+ },
912
+ });
913
+ }
914
+ this.gridEdit = this.edit;
915
+ },
916
+
917
+ mounted() {
918
+ // this.toggleFixedColumn('operation','right')
919
+ //设置默认筛选的到表格
920
+ // let filterCol = this.internalColumns.filter(
921
+ // x =>
922
+ // (x.filters && x.filters.length > 0) ||
923
+ // (x.children &&
924
+ // x.children.length > 0 &&
925
+ // x.children[0].filters &&
926
+ // x.children[0].filters.length > 0)
927
+ // )
928
+ // for (let i = 0; i < filterCol.length; i++) {
929
+ // this.$refs.baseGrid
930
+ // .setFilter(filterCol[i].field, filterCol[i].filters)
931
+ // .then(() => {
932
+ // // if (i == filterCol.length - 1) {
933
+ // // }
934
+ // })
935
+ // }
936
+ },
937
+ methods: {
938
+ getExpTags(filterList) {
939
+ //构造查询条件
940
+ let returnExp = [];
941
+ for (let loopProp in filterList) {
942
+ let tempExpTag = {
943
+ expressions: [],
944
+ operator: "or",
945
+ };
946
+ let tempControlType = filterList[loopProp].column.params.controlType;
947
+ let tempIsAddTime = filterList[loopProp].isAddTime;
948
+ for (let i = 0; i < filterList[loopProp].column.filters.length; i++) {
949
+ let tempValue = filterList[loopProp].column.filters[i];
950
+
951
+ if (tempControlType === controlType.text) {
952
+ // 文本框
953
+ tempExpTag.expressions.push({
954
+ field: filterList[loopProp].property,
955
+ operator: "CO",
956
+ value: tempValue.value,
957
+ });
958
+ }
959
+ // if (tempControlType === controlType.date)
960
+ // {
961
+ // //日期
962
+ // if (tempExpTag.value) {
963
+ // tempExpTag.value.push(tempValue.value)
964
+ // } else {
965
+ // tempExpTag.value = [tempValue.value]
966
+ // tempExpTag.operator = 'IN'
967
+ // tempExpTag.field = filterList[loopProp].property
968
+ // }
969
+ // }
970
+ // else
971
+ else if (tempControlType === controlType.number) {
972
+ // 数字范围
973
+ tempExpTag.expressions.push({
974
+ field: filterList[loopProp].property,
975
+ operator: "RA",
976
+ value: [tempValue.value.min, tempValue.value.max],
977
+ });
978
+ } else if (
979
+ tempControlType === controlType.datetime ||
980
+ tempControlType === controlType.date
981
+ ) {
982
+ //日期范围
983
+ // if (tempIsAddTime === true) {
984
+ tempExpTag.expressions.push({
985
+ field: filterList[loopProp].property,
986
+ operator: "RA",
987
+ value: [
988
+ // tempValue.value[0] + ' 00:00:00',
989
+ // tempValue.value[1] + ' 23:59:59'
990
+ tempValue.value[0],
991
+ tempValue.value[1],
992
+ ],
993
+ });
994
+ // } else {
995
+ // tempExpTag.expressions.push({
996
+ // field: filterList[loopProp].property,
997
+ // operator: 'RA',
998
+ // value: tempValue.value
999
+ // })
1000
+ // }
1001
+ } else if (
1002
+ tempControlType === controlType.dropmulti ||
1003
+ tempControlType === controlType.select
1004
+ ) {
1005
+ //下拉多选
1006
+ tempExpTag.expressions.push({
1007
+ field: filterList[loopProp].property,
1008
+ operator: "IN",
1009
+ value: filterList[loopProp].datas[0],
1010
+ });
1011
+ } else if (tempControlType === controlType.checkbox) {
1012
+ //实际上checkbox的value数组里就一个值 这边是为了兼容select的结构
1013
+ tempExpTag.expressions.push({
1014
+ field: filterList[loopProp].property,
1015
+ operator: "EQ",
1016
+ value: tempValue.value.indexOf("true") >= 0 ? true : false,
1017
+ });
1018
+ } else {
1019
+ // 文本框
1020
+ tempExpTag.expressions.push({
1021
+ field: filterList[loopProp].property,
1022
+ operator: "CO",
1023
+ value: tempValue.value,
1024
+ });
1025
+ }
1026
+ }
1027
+ if (tempExpTag.expressions.length > 0 || tempExpTag.field) {
1028
+ returnExp.push(tempExpTag);
1029
+ }
1030
+ }
1031
+ return returnExp;
1032
+ },
1033
+ rangeChange(column) {
1034
+ let vm = this;
1035
+ if (vm.filterRemote) {
1036
+ column.filters.forEach((f) => {
1037
+ f.checked = true;
1038
+ });
1039
+ vm.$refs.baseGrid.setFilter(column.field, column.filters).then(() => {
1040
+ this.$emit("filterChange");
1041
+ });
1042
+ } else {
1043
+ const xTable = this.$refs.baseGrid;
1044
+ // 设置为选中状态
1045
+ for (let i = 0; i < column.filters.length; i++) {
1046
+ if (!column.filters[i].value) {
1047
+ column.filters[i].checked = false;
1048
+ } else {
1049
+ column.filters[i].checked = true;
1050
+ }
1051
+ }
1052
+ // 修改条件之后,需要手动调用 updateData 处理表格数据
1053
+ xTable.updateData();
1054
+ }
1055
+ },
1056
+ //日期筛选变化
1057
+ dateChange(column, dates) {
1058
+ let vm = this;
1059
+ if (vm.filterRemote) {
1060
+ if (dates.length > 0) {
1061
+ column.filters[0].checked = true;
1062
+ column.filters[0].data.range = dates; //显示的值
1063
+ column.filters[0].data.beginDate = dates[0];
1064
+ column.filters[0].data.endDate = dates[1];
1065
+ vm.$refs.baseGrid.setFilter(column.field, column.filters);
1066
+ } else {
1067
+ column.filters[0].checked = false;
1068
+ column.filters[0].data.range = dates;
1069
+ vm.$refs.baseGrid
1070
+ .setFilter(column.field, column.filters)
1071
+ .then((res) => {
1072
+ this.$emit("filterChange");
1073
+ });
1074
+ }
1075
+ } else {
1076
+ const xTable = this.$refs.baseGrid;
1077
+ // 设置为选中状态
1078
+ for (let i = 0; i < column.filters.length; i++) {
1079
+ if (!column.filters[i].value) {
1080
+ column.filters[i].checked = false;
1081
+ } else {
1082
+ column.filters[i].checked = true;
1083
+ }
1084
+ }
1085
+ // 修改条件之后,需要手动调用 updateData 处理表格数据
1086
+ xTable.updateData();
1087
+ }
1088
+ },
1089
+ inputChange(column) {
1090
+ let vm = this;
1091
+ if (vm.filterRemote) {
1092
+ for (let i = 0; i < column.filters.length; i++) {
1093
+ if (!column.filters[i].value) {
1094
+ column.filters[i].checked = false;
1095
+ } else {
1096
+ column.filters[i].checked = true;
1097
+ }
1098
+ }
1099
+ vm.$refs.baseGrid
1100
+ .setFilter(column.field, column.filters)
1101
+ .then((res) => {
1102
+ this.$emit("filterChange");
1103
+ });
1104
+ } else {
1105
+ const xTable = this.$refs.baseGrid;
1106
+ // 设置为选中状态
1107
+ for (let i = 0; i < column.filters.length; i++) {
1108
+ if (!column.filters[i].value) {
1109
+ column.filters[i].checked = false;
1110
+ } else {
1111
+ column.filters[i].checked = true;
1112
+ }
1113
+ }
1114
+ // 修改条件之后,需要手动调用 updateData 处理表格数据
1115
+ xTable.updateData();
1116
+ }
1117
+ },
1118
+ textEditEnter(valueInfo) {
1119
+ if (this.textValue) {
1120
+ valueInfo.visible = false;
1121
+ valueInfo.value = this.textValue;
1122
+ this.textValue = "";
1123
+ }
1124
+ this.$emit("searchBtnClick", null);
1125
+ },
1126
+ editPopupVisibleChange(editKey, originValue, valueIndex, visible) {
1127
+ if (visible === true) {
1128
+ let vm = this;
1129
+ this.textValue = originValue.value;
1130
+ setTimeout(() => {
1131
+ vm.$refs[editKey + "_edit_" + valueIndex][0].$el.focus();
1132
+ vm.$refs[editKey + "_edit_" + valueIndex][0].$el.select();
1133
+ }, 10);
1134
+ }
1135
+ },
1136
+ closeTagPreventDefault(colValue, valueIndex, event) {
1137
+ colValue.values.splice(valueIndex, 1);
1138
+ event.preventDefault();
1139
+ this.$emit("searchBtnClick", null);
1140
+ },
1141
+ //右键菜单事件
1142
+ contextMenuClickEvent({ menu, row, column }) {
1143
+ let vm = this;
1144
+ const $table = this.$refs.baseGrid;
1145
+ if (column && column.field) {
1146
+ if (
1147
+ menu.code !== "sort" &&
1148
+ menu.code !== "copy" &&
1149
+ menu.code !== "refresh"
1150
+ ) {
1151
+ $table.sort(column.field, menu.code);
1152
+ }
1153
+ }
1154
+ switch (menu.code) {
1155
+ case "copy":
1156
+ // 示例
1157
+ if (row && column) {
1158
+ if (XEClipboard.copy(row[column.property])) {
1159
+ VXETable.modal.message({
1160
+ content: "已复制到剪贴板!",
1161
+ status: "success",
1162
+ });
1163
+ }
1164
+ }
1165
+ break;
1166
+ case "clearFilter":
1167
+ // 示例
1168
+ const filterList = this.$refs.baseGrid.getCheckedFilters();
1169
+ filterList.forEach((col) => {
1170
+ this.$refs.baseGrid.clearFilter(col.column);
1171
+ this.internalColumns.forEach(column => {
1172
+ if(column.field==col.property){
1173
+ this.$set(column.filters[0].data,'displayValues',[])
1174
+ this.$set(column.filters[0].data,'bindingValues',[])
1175
+ }
1176
+ });
1177
+ //这个col和 internalColumn之间没有绑定上
1178
+ col.column.filters = [
1179
+ {
1180
+ data: {
1181
+ bindingValues: [],
1182
+ displayValues: []
1183
+ }
1184
+ }
1185
+ ]
1186
+ });
1187
+ // this.$refs.baseGrid.clearFilter();
1188
+ XEUtils.clear(this.filterExpression)
1189
+ vm.$emit("filterChange");
1190
+ break;
1191
+ case "desc":
1192
+ if (this.sortRemote) {
1193
+ let data = []
1194
+ $table.getSortColumns().forEach(x=> {
1195
+ data.push([x.field,x.order])
1196
+ })
1197
+ this.$emit("sortChange", data);
1198
+ }
1199
+ break;
1200
+ case "asc":
1201
+ if (this.sortRemote) {
1202
+ let data = []
1203
+ $table.getSortColumns().forEach(x=> {
1204
+ data.push([x.field,x.order])
1205
+ })
1206
+ this.$emit("sortChange", data);
1207
+ }
1208
+ break;
1209
+ case "clearSort":
1210
+ let sortColumns = $table.getSortColumns();
1211
+ sortColumns.forEach((col) => {
1212
+ col.column.order = "";
1213
+ });
1214
+ if (this.sortRemote) {
1215
+ this.$emit("sortChange", []);
1216
+ }
1217
+ break;
1218
+ case "refresh":
1219
+ let data = []
1220
+ $table.getSortColumns().forEach(x=> {
1221
+ data.push([x.field,x.order])
1222
+ })
1223
+ this.$emit("sortChange", data);
1224
+ break;
1225
+ default:
1226
+ }
1227
+ },
1228
+ getFiltersList() {
1229
+ return this.filterExpression;
1230
+ // let vm = this
1231
+ // const filterList = vm.$refs.baseGrid.getCheckedFilters()
1232
+
1233
+ // let expList = []
1234
+ // expList = vm.getExpTags(filterList)
1235
+ // return expList
1236
+ },
1237
+ filterChange({ column, property, values, datas, filterList, $event }) {
1238
+ let vm = this;
1239
+ //如果不是远程筛选 就不emit了
1240
+ if (!this.filterRemote) {
1241
+ return;
1242
+ }
1243
+ vm.$emit("filterChange");
1244
+ },
1245
+ // sysRowStateFilter(scope){
1246
+ // return scope.row.sysRowState!==scope.value
1247
+ // },
1248
+ initColumns(originCol) {
1249
+ let vm = this;
1250
+ let colParams = {};
1251
+
1252
+ let colInfo = {
1253
+ field: originCol.field,
1254
+ title: originCol.title,
1255
+ tooltip: originCol.tooltip,
1256
+ visible: true,
1257
+ };
1258
+
1259
+ if(XEUtils.has(originCol,'showOverflow')){
1260
+ colInfo['showOverflow'] = originCol.showOverflow
1261
+ }
1262
+
1263
+
1264
+ let customSlot = {
1265
+ default: "default",
1266
+ };
1267
+
1268
+ if (originCol.slots) {
1269
+ customSlot = originCol.slots;
1270
+ }
1271
+
1272
+ if (originCol.treeNode === true) {
1273
+ colInfo["treeNode"] = true;
1274
+ }
1275
+ if (originCol.isMerge === true) {
1276
+ //合并行
1277
+ this.mergeFields.push(originCol.field);
1278
+ }
1279
+ //判断originCol的showHeaderOverflow是否为true
1280
+ // if (originCol.showHeaderOverflow) {
1281
+ // //当表头内容过长时显示为省略号
1282
+ // colInfo['showHeaderOverflow'] = false
1283
+ // }
1284
+ //判断组件传递自定义属性filterRemote值是否为true
1285
+ // if (this.filterRemote) {
1286
+ // //是就给colInfo加一个属性showHeaderOverflow并赋值false,这样当表头内容过长时就不会显示为省略
1287
+ // colInfo['showHeaderOverflow'] = false
1288
+ // }
1289
+ //判断originCol的filters是否为数组 暂时不知道是否有被用到
1290
+ if (XEUtils.isArray(originCol.filters)) {
1291
+ //是就给colInfo加一个属性filters并把传入的形参传给新加的属性
1292
+ colInfo["filters"] = originCol.filters;
1293
+ }
1294
+ //vxe-table列配置
1295
+ //判断originCol的filterMethod是否为true
1296
+ if (originCol.filterMethod) {
1297
+ //是就给colInfo加一个属性filterMethod并把形参赋值给新加的属性,这样
1298
+ colInfo["filterMethod"] = originCol.filterMethod;
1299
+ }
1300
+ if (originCol.align) {
1301
+ colInfo["align"] = originCol.align;
1302
+ }
1303
+ if (originCol.visible === false) {
1304
+ colInfo.visible = false;
1305
+ }
1306
+ //在不启用 筛选框的情况下 可以显示 因为 表头分组的关系
1307
+ if (originCol.sortable === true) {
1308
+ colInfo["sortable"] = true;
1309
+ colInfo["sortType"] = "auto";
1310
+ if (originCol.order){
1311
+ this.defaultSort.push({
1312
+ field: originCol.field,
1313
+ order: originCol.order
1314
+ })
1315
+ }
1316
+ }
1317
+ if (originCol.fixed) {
1318
+ colInfo["fixed"] = originCol.fixed === "left" ? "left" : "right";
1319
+ }
1320
+ if (originCol.formatter) {
1321
+ colInfo["formatter"] = originCol.formatter;
1322
+ }
1323
+ if (originCol.params) {
1324
+ colParams = originCol.params;
1325
+ }
1326
+
1327
+ if (originCol.footerSum === true) {
1328
+ this.showFooter = true;
1329
+ this.footerSum.push(colInfo.field);
1330
+ }
1331
+ if (originCol.route) {
1332
+ colParams["route"] = originCol.route;
1333
+ customSlot["default"] = "linkCell";
1334
+ }
1335
+ //默认text
1336
+ if (!originCol.controlType) {
1337
+ originCol.controlType = controlType.text;
1338
+ }
1339
+
1340
+ if (originCol.controlType === controlType.customRadio) {
1341
+ colInfo["type"] = "radio";
1342
+ customSlot["radio"] = "customRadio";
1343
+ customSlot["footer"] = "customFooter";
1344
+ }
1345
+ if (originCol.isExpand === true) {
1346
+ colInfo["type"] = "expand";
1347
+ customSlot["content"] = "expandContent";
1348
+ customSlot["default"] = "expandDefault";
1349
+ }
1350
+ if (originCol.controlType === controlType.customCell) {
1351
+ customSlot["default"] = "customCell";
1352
+ customSlot["footer"] = "customFooter";
1353
+ }
1354
+ if (originCol.isCheckbox === true) {
1355
+ colInfo["type"] = "checkbox";
1356
+ // colInfo['field'] = 'matCode'
1357
+ }
1358
+ colParams.dataSource = originCol.dataSource;
1359
+ if (originCol.rules) {
1360
+ this.validRules[colInfo.field] = originCol.rules;
1361
+ }
1362
+ if (originCol.precision) {
1363
+ colParams["precision"] = originCol.precision;
1364
+ //加入验证逻辑
1365
+ // if(!this.validRules[colInfo.field]){
1366
+ // this.validRules[colInfo.field] = []
1367
+ // }
1368
+ // this.validRules[colInfo.field].push({
1369
+ // validator: this.validPrecision
1370
+ // })
1371
+ }
1372
+ if (XEUtils.isInteger(originCol.min)) {
1373
+ colParams["min"] = originCol.min;
1374
+ }
1375
+ if (XEUtils.isInteger(originCol.max)) {
1376
+ colParams["max"] = originCol.max;
1377
+ }
1378
+ // else{
1379
+ // colParams['precision'] = 10 //默认十位小数
1380
+ // }
1381
+ colParams["le"] = originCol.le;
1382
+ colParams["controlType"] = originCol.controlType;
1383
+ colParams["edit"] = false;
1384
+ if (originCol.editStates) {
1385
+ colParams["editStates"] = originCol.editStates;
1386
+ }
1387
+ if (originCol.editStatuss) {
1388
+ colParams["editStatuss"] = originCol.editStatuss;
1389
+ }
1390
+ if (originCol.width) {
1391
+ colInfo.width = originCol.width;
1392
+ } else {
1393
+ colInfo.width = 100;
1394
+ }
1395
+
1396
+ if (originCol.controlType === "operation") {
1397
+ customSlot["default"] = "operation_edit";
1398
+ }
1399
+
1400
+ if (
1401
+ originCol.editStates &&
1402
+ originCol.editStates.length > 0 &&
1403
+ originCol.edit === true
1404
+ ) {
1405
+ let tempAutoSelect = true;
1406
+ let tempAutoFocus = ".inner-cell-control";
1407
+ switch (originCol.controlType) {
1408
+ case controlType.number:
1409
+ tempAutoFocus = ".ant-input-number-input";
1410
+ break;
1411
+ case controlType.pulldown:
1412
+ tempAutoFocus = ".inner-cell-control>input";
1413
+ break;
1414
+ case controlType.date:
1415
+ tempAutoFocus = ".ant-calendar-picker-input";
1416
+ break;
1417
+ case controlType.time:
1418
+ tempAutoFocus = ".ant-time-picker-input";
1419
+ tempAutoSelect = false;
1420
+ break;
1421
+ case controlType.checkbox:
1422
+ tempAutoFocus = ".ant-checkbox-input";
1423
+ break;
1424
+ case controlType.select:
1425
+ tempAutoSelect = false;
1426
+ break;
1427
+ }
1428
+
1429
+ //可以编辑
1430
+ colInfo.editRender = {
1431
+ // autofocus: tempAutoSelect,
1432
+ // autoselect:tempAutoSelect,
1433
+ // name:'$input' //originCol.controlType + '_edit',
1434
+ };
1435
+ //编辑插槽
1436
+ customSlot["edit"] = originCol.controlType + "_edit";
1437
+ // colInfo['editRender'] = {
1438
+ // name: originCol.controlType + '_edit',
1439
+ // autofocus: tempAutoFocus,
1440
+ // autoselect: tempAutoSelect
1441
+ // }
1442
+ // if (this.edit === true) {
1443
+ // colParams['edit'] = true
1444
+ // colInfo['editRender']['enabled'] = true
1445
+ // }
1446
+ }
1447
+ if (originCol.controlType === controlType.pulldown) {
1448
+ colParams["api"] = originCol.api;
1449
+ colParams["defaultExpression"] = originCol.defaultExpression;
1450
+ colParams["pageSize"] = originCol.pageSize;
1451
+ colParams["optBtns"] = originCol.optBtns;
1452
+ colParams["displayField"] = originCol.displayField;
1453
+ colParams["popupAddName"] = originCol.popupAddName;
1454
+ colParams["popupAddPath"] = originCol.popupAddPath;
1455
+ colParams["columns"] = originCol.columns;
1456
+ colParams["isLocalData"] = originCol.isLocalData;
1457
+ colParams["isMultiSelect"] = originCol.isMultiSelect;
1458
+ colParams["controlEdit"] = true;
1459
+ }
1460
+ if (originCol.controlType === controlType.text) {
1461
+ colParams["controlEdit"] = true;
1462
+ }
1463
+ if (originCol.controlType === controlType.select) {
1464
+ colParams["controlEdit"] = true;
1465
+ }
1466
+ if (originCol.controlType === controlType.checkbox) {
1467
+ colParams["controlEdit"] = true;
1468
+ }
1469
+ if (originCol.controlType === controlType.date) {
1470
+ colParams["pastDate"] = originCol.pastDate;
1471
+ }
1472
+ colParams["disableUserVisible"] = originCol.disableUserVisible === true;
1473
+ colInfo["params"] = colParams;
1474
+ colInfo["params"]["sysOriValue"] = {};
1475
+ if (originCol.children) {
1476
+ colInfo["children"] = [];
1477
+ for (let x = 0; x < originCol.children.length; x++) {
1478
+ colInfo["children"].push(this.initColumns(originCol.children[i]));
1479
+ }
1480
+ }
1481
+ //防止报错 有slots值就走前面 没有slots这个键key就走后面
1482
+ if (
1483
+ originCol.controlType !== controlType.operation &&
1484
+ originCol.filters === true
1485
+ ) {
1486
+ let filterTypeName = `${originCol.controlType}_filter`;
1487
+ //网格筛选
1488
+ colInfo["filters"] = [
1489
+ { data: { bindingValues: [], displayValues: [] }, checked: false },
1490
+ ];
1491
+ if (originCol.filterExpression) {
1492
+ colInfo["filters"] = originCol.filterExpression
1493
+ }
1494
+ colInfo["filterMultiple"] = false;
1495
+ // colInfo['filterRender'] ={name: filterTypeName,showFilterFooter:false}
1496
+ customSlot["filter"] = filterTypeName;
1497
+ }
1498
+ // console.debug(customSlot)
1499
+ colInfo.slots = customSlot;
1500
+ // console.debug(colInfo)
1501
+ return colInfo;
1502
+ },
1503
+ validPrecision({ cellValue, column }) {
1504
+ if (XEUtils.isNumber(cellValue)) {
1505
+ let reg = new RegExp(
1506
+ "^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0," +
1507
+ column.params.precision +
1508
+ "})?$"
1509
+ );
1510
+ if (!reg.test(cellValue)) {
1511
+ return new Error("超过小数点" + column.params.precision + "位");
1512
+ }
1513
+ }
1514
+ },
1515
+ numberInputKeyDown(scope, event) {
1516
+ let rowTag = scope.row;
1517
+ let columnTag = scope.column;
1518
+ let ROW_XIDS = scope.data.map((mapItem) => mapItem._XID);
1519
+ let currentRowIndex = ROW_XIDS.indexOf(rowTag._XID);
1520
+ let targetRow;
1521
+ switch (event.keyCode) {
1522
+ case 39: //向右
1523
+ //当前光标已在输入文本末尾,向右找到第一个可编辑的列,设为编辑状态
1524
+ break;
1525
+ case 37: //向左
1526
+ //当前光标已在输入文本开头,向左找到第一个可编辑的列,设为编辑状态
1527
+ break;
1528
+ case 38: //向上
1529
+ if (0 < currentRowIndex - 1) {
1530
+ targetRow = scope.data[currentRowIndex - 1];
1531
+ this.$refs.baseGrid.setActiveCell(targetRow, columnTag);
1532
+ }
1533
+ break;
1534
+ case 40: //向下
1535
+ if (scope.data.length > currentRowIndex + 1) {
1536
+ targetRow = scope.data[currentRowIndex + 1];
1537
+ this.$refs.baseGrid.setActiveCell(targetRow, columnTag);
1538
+ }
1539
+ break;
1540
+ }
1541
+ },
1542
+ getValid(column, row) {
1543
+ if (column.params.rules) {
1544
+ v.verify(row[column.property], column.params.rules).then(
1545
+ (validData) => {
1546
+ return "davis";
1547
+ }
1548
+ );
1549
+ }
1550
+ },
1551
+ getGridView() {
1552
+ return this.$refs.baseGrid;
1553
+ },
1554
+ //拖动输入框功能 未启用
1555
+ initColumnDrop() {
1556
+ this.$nextTick(() => {
1557
+ const $table = this.$refs.baseGrid;
1558
+ this.sortable2 = Sortable.create(
1559
+ $table.$el.querySelector(
1560
+ ".body--wrapper>.vxe-table--header .vxe-header--row"
1561
+ ),
1562
+ {
1563
+ handle: ".vxe-header--column:not(.col--fixed)",
1564
+ onEnd: ({ item, newIndex, oldIndex }) => {
1565
+ const { fullColumn, tableColumn } = $table.getTableColumn();
1566
+ const targetThElem = item;
1567
+ const wrapperElem = targetThElem.parentNode;
1568
+ const newColumn = fullColumn[newIndex];
1569
+ if (newColumn.fixed) {
1570
+ // 错误的移动
1571
+ if (newIndex > oldIndex) {
1572
+ wrapperElem.insertBefore(
1573
+ targetThElem,
1574
+ wrapperElem.children[oldIndex]
1575
+ );
1576
+ } else {
1577
+ wrapperElem.insertBefore(
1578
+ wrapperElem.children[oldIndex],
1579
+ targetThElem
1580
+ );
1581
+ }
1582
+ return this.$XModal.message({
1583
+ content: "固定列不允许拖动!",
1584
+ status: "error",
1585
+ });
1586
+ }
1587
+ // 转换真实索引
1588
+ const oldColumnIndex = $table.getColumnIndex(
1589
+ tableColumn[oldIndex]
1590
+ );
1591
+ const newColumnIndex = $table.getColumnIndex(
1592
+ tableColumn[newIndex]
1593
+ );
1594
+ // 移动到目标列
1595
+ const currRow = fullColumn.splice(oldColumnIndex, 1)[0];
1596
+ fullColumn.splice(newColumnIndex, 0, currRow);
1597
+ $table.loadColumn(fullColumn);
1598
+ },
1599
+ }
1600
+ );
1601
+ });
1602
+ },
1603
+ sortChange({ column, property, order, sortBy, sortList, $event }) {
1604
+ if (this.filterRemote) {
1605
+ let tempSortList = [];
1606
+ XEUtils.arrayEach(sortList, (loopSort) => {
1607
+ tempSortList.push([loopSort.field, loopSort.order]);
1608
+ });
1609
+ this.$emit("sortChange", tempSortList);
1610
+ }
1611
+ },
1612
+ currentChange(scope) {
1613
+ this.$emit("currentChange", scope.row);
1614
+ },
1615
+ pageSizeChange(page, pageSize) {
1616
+ this.$emit("pageSizeChange", page, pageSize);
1617
+ },
1618
+ pageChange(page, pageSize) {
1619
+ this.$emit("pageChange", page, pageSize);
1620
+ },
1621
+ getCheckboxRecords() {
1622
+ return this.$refs.baseGrid.getCheckboxRecords(true);
1623
+ },
1624
+ setCheckboxRow(rows, checked) {
1625
+ this.$refs.baseGrid.setCheckboxRow(rows, checked);
1626
+ },
1627
+ setAllCheckboxRow(checked) {
1628
+ return this.$refs.baseGrid.setAllCheckboxRow(checked);
1629
+ },
1630
+ reloadRow(rows, record) {
1631
+ return this.$refs.baseGrid.reloadRow(rows, record);
1632
+ },
1633
+ /**
1634
+ * 确认保存用户自定义表格信息
1635
+ */
1636
+ confirmUserDefineColumn() {
1637
+ let vm = this;
1638
+ let postData = {
1639
+ moduleCode: this.moduleCode,
1640
+ dataCode: this.dataCode,
1641
+ fields: [],
1642
+ };
1643
+ let tableCollectColumn = this.$refs.baseGrid.getTableColumn().collectColumn;
1644
+ const baseAdjustGridColumn = this.$refs.baseAdjustGridView.getTableColumn();
1645
+
1646
+ XEUtils.arrayEach(baseAdjustGridColumn, (loopCol) => {
1647
+ let tempData = {
1648
+ field: loopCol.field,
1649
+ sort: postData.fields.length + 1,
1650
+ hidden: loopCol.visible !== true,
1651
+ width: loopCol.width,
1652
+ extraInfo:{}
1653
+ };
1654
+ if (loopCol.filters[0].data.bindingValues.length) {
1655
+ loopCol.filters[0].checked = true;
1656
+ tempData.extraInfo.filterExpression = loopCol.filters
1657
+ }
1658
+ if (loopCol.order) {
1659
+ tempData.extraInfo.order = loopCol.order
1660
+ }
1661
+
1662
+ postData.fields.push(tempData);
1663
+ let tempCol = XEUtils.findTree(
1664
+ tableCollectColumn,
1665
+ (p) => p.field === loopCol.field
1666
+ ).item;
1667
+ tempCol.visible = loopCol.visible;
1668
+ tempCol.width = loopCol.width;
1669
+ // tempCol.width = colWidth;
1670
+ //设置顺序
1671
+ tempCol.params["tempCustomSort"] = tempData.sort;
1672
+ this.setCustomGridParentSort(
1673
+ tableCollectColumn,
1674
+ tempCol.parentId,
1675
+ tempData.sort
1676
+ );
1677
+ });
1678
+ saveUserModuleDataFieldApi(postData)
1679
+ .then((res) => {
1680
+ //设置表格顺序
1681
+ tableCollectColumn = XEUtils.orderBy(
1682
+ tableCollectColumn,
1683
+ (p) => p.params.tempCustomSort
1684
+ );
1685
+ vm.$refs.baseGrid.reloadColumn(tableCollectColumn);
1686
+ XEUtils.arrayEach(tableCollectColumn, (loopCol) => {
1687
+ const find = XEUtils.find(baseAdjustGridColumn, item => loopCol.field === item.field)
1688
+ if (find) {
1689
+ loopCol.order = find.order
1690
+ loopCol.filters = find.filters
1691
+ }
1692
+ })
1693
+ //设置筛选过滤条件
1694
+ this.setFilterExpression();
1695
+ let data = []
1696
+ this.$refs.baseGrid.getSortColumns().forEach(x=> {
1697
+ data.push([x.field,x.order])
1698
+ })
1699
+ this.$emit("sortChange", data);
1700
+
1701
+ //清空store缓存
1702
+ vm.$store.commit(
1703
+ "SET_MODULE_VIEW_INFO",{
1704
+ moduleCode:this.moduleCode,
1705
+ info:res.content
1706
+ }
1707
+ );
1708
+ vm.showGridColumnUserDefine = false;
1709
+ })
1710
+ .catch((err) => console.error(err));
1711
+ },
1712
+ setCustomGridParentSort(tableCollectColumn, parentId, sort) {
1713
+ let tempParentCol = XEUtils.findTree(
1714
+ tableCollectColumn,
1715
+ (p) => p.id === parentId
1716
+ );
1717
+ if (tempParentCol) {
1718
+ tempParentCol.item.params["tempCustomSort"] = sort;
1719
+ this.setCustomGridParentSort(
1720
+ tableCollectColumn,
1721
+ tempParentCol.item.parentId,
1722
+ sort
1723
+ );
1724
+ }
1725
+ },
1726
+ getFetchField() {
1727
+ let tempStr = "";
1728
+ let tempFullColumn = this.$refs.baseGrid.getTableColumn().fullColumn;
1729
+ XEUtils.arrayEach(tempFullColumn, (loopCol) => {
1730
+ if (!loopCol.field) {
1731
+ return;
1732
+ }
1733
+ if (
1734
+ loopCol.visible === true ||
1735
+ loopCol.params.disableUserVisible === true
1736
+ ) {
1737
+ tempStr = tempStr + loopCol.field + ",";
1738
+ }
1739
+ });
1740
+ return tempStr.substring(0, tempStr.length - 1);
1741
+ },
1742
+ clickHeader() {
1743
+ let tableCollectColumn = XEUtils.toTreeArray(
1744
+ this.$refs.baseGrid.getTableColumn().collectColumn
1745
+ );
1746
+ this.userDefineColumns = XEUtils.filter(
1747
+ tableCollectColumn,
1748
+ (p) => !p.children && p.params.disableUserVisible !== true && p.field !== 'operation'
1749
+ );
1750
+ this.showGridColumnUserDefine = true;
1751
+ },
1752
+ operationButtonClick(btn, scope) {
1753
+ if (btn.edit === false) {
1754
+ return;
1755
+ }
1756
+ this.$emit("operationBtnClick", btn, scope.row, this);
1757
+ },
1758
+ operationEdit(item, scope) {
1759
+ let isShow =
1760
+ item.visible === true &&
1761
+ !(scope.row["sysOperationDisVisible_" + item.field] === true) &&
1762
+ (item.visibleState != undefined &&
1763
+ item.visibleState.field != undefined &&
1764
+ item.visibleState.visibleStatuss != undefined
1765
+ ? item.visibleState.visibleStatuss.indexOf(
1766
+ scope.row[item.visibleState.field]
1767
+ ) != -1
1768
+ : true);
1769
+ return isShow;
1770
+ },
1771
+ activeCellMethod({ row, column }) {
1772
+ let emitData ={
1773
+ row:row,
1774
+ column:column,
1775
+ edit:column.params.edit
1776
+ }
1777
+ this.$emit('activeCellMethod',emitData)
1778
+
1779
+ if (row["sysDisableEdit"] === true) {
1780
+ //禁止编辑
1781
+ return false;
1782
+ }
1783
+ return emitData.edit;
1784
+ },
1785
+ editActived(scope) {
1786
+ let colElId = scope.column.id;
1787
+ let rowElId = scope.row._X_ROW_KEY;
1788
+ //延迟设置输入框自动获取焦点以及选中
1789
+ this.$nextTick(() => {
1790
+ let cellEl = scope.$table.$el.querySelector(
1791
+ '[rowid="' + rowElId + '"]>[colid="' + colElId + '"]'
1792
+ );
1793
+ let inputEl = cellEl.querySelector("input");
1794
+ if (inputEl) {
1795
+ inputEl.focus();
1796
+ inputEl.select();
1797
+ }
1798
+ });
1799
+ this.$emit("editActived", scope);
1800
+ },
1801
+ setColumnEdit(field, edit) {
1802
+ for (let i = 0; i < this.internalColumns.length; i++) {
1803
+ if (this.internalColumns[i].field == field) {
1804
+ let colInfo = this.internalColumns[i]
1805
+ if (colInfo) {
1806
+ colInfo.editRender.enabled = edit
1807
+ colInfo.params.edit = edit
1808
+ }
1809
+ }
1810
+ }
1811
+ this.$refs.baseGrid.refreshColumn()
1812
+ },
1813
+ setEdit(currentState, currentStatus) {
1814
+ //设置添加按钮
1815
+ if (this.pager.buttons) {
1816
+ for (let i = 0; i < this.pager.buttons.length; i++) {
1817
+ let editVisible = this.getColumnEdit(
1818
+ this.pager.buttons[i].edit,
1819
+ currentState,
1820
+ currentStatus,
1821
+ this.pager.buttons[i].editStates,
1822
+ this.pager.buttons[i].editStatuss,
1823
+ this.pager.buttons[i].visibleStates,
1824
+ this.pager.buttons[i].visibleStatuss
1825
+ );
1826
+ this.$set(this.pager.buttons[i], "visible", editVisible.visible);
1827
+ this.$set(this.pager.buttons[i], "edit", editVisible.edit);
1828
+ this.$forceUpdate();
1829
+ }
1830
+ }
1831
+ // if (this.pager.add) {
1832
+ // this.addBtnEdit = false
1833
+ // this.addBtnEdit = this.getColumnEdit(
1834
+ // this.addBtnEdit,
1835
+ // currentState,
1836
+ // currentStatus,
1837
+ // this.pager.add.editStates,
1838
+ // this.pager.add.editStatuss
1839
+ // )
1840
+ // }
1841
+ //设置网格可编辑状态
1842
+
1843
+ if (this.editStates.indexOf(currentState) > -1) {
1844
+ this.gridEdit = true;
1845
+ } else {
1846
+ this.gridEdit = false;
1847
+ }
1848
+ if (currentStatus && this.editStatuss) {
1849
+ if (this.editStatuss.indexOf(currentStatus) > -1) {
1850
+ this.gridEdit = true;
1851
+ } else {
1852
+ this.gridEdit = false;
1853
+ }
1854
+ }
1855
+ for (let i = 0; i < this.internalColumns.length; i++) {
1856
+ if (!this.internalColumns[i].params) {
1857
+ continue;
1858
+ }
1859
+ this.internalColumns[i].params.edit = false;
1860
+ if (
1861
+ this.internalColumns[i].params.controlType === controlType.operation
1862
+ ) {
1863
+ for (
1864
+ let j = 0;
1865
+ j < this.internalColumns[i].params.columns.length;
1866
+ j++
1867
+ ) {
1868
+ this.internalColumns[i].params.columns[j].edit = false;
1869
+ //设置工具栏可编辑状态
1870
+ let editVisible = this.getColumnEdit(
1871
+ this.internalColumns[i].params.columns[j].edit,
1872
+ currentState,
1873
+ currentStatus,
1874
+ this.internalColumns[i].params.columns[j].editStates,
1875
+ this.internalColumns[i].params.columns[j].editStatuss,
1876
+ this.internalColumns[i].params.columns[j].visibleStates,
1877
+ this.internalColumns[i].params.columns[j].visibleStatuss
1878
+ );
1879
+ this.$set(
1880
+ this.internalColumns[i].params.columns[j],
1881
+ "visible",
1882
+ editVisible.visible
1883
+ );
1884
+ this.$set(
1885
+ this.internalColumns[i].params.columns[j],
1886
+ "edit",
1887
+ editVisible.edit
1888
+ );
1889
+ }
1890
+ continue;
1891
+ }
1892
+ //设置网格列编辑状态
1893
+ if (this.gridEdit === true) {
1894
+ let editVisible = this.getColumnEdit(
1895
+ this.internalColumns[i].params.edit,
1896
+ currentState,
1897
+ currentStatus,
1898
+ this.internalColumns[i].params.editStates,
1899
+ this.internalColumns[i].params.editStatuss,
1900
+ this.internalColumns[i].params.visibleStates,
1901
+ this.internalColumns[i].params.visibleStatuss
1902
+ );
1903
+ this.internalColumns[i].params.edit = editVisible.edit;
1904
+ if (this.internalColumns[i].editRender) {
1905
+ this.internalColumns[i].editRender.enabled = editVisible.edit;
1906
+ }
1907
+ }
1908
+ }
1909
+ },
1910
+ getColumnEdit(
1911
+ originEdit,
1912
+ currentState,
1913
+ currentStatus,
1914
+ editStates,
1915
+ editStatuss,
1916
+ visibleStates,
1917
+ visibleStatuss
1918
+ ) {
1919
+ //显示状态控制
1920
+ let fieldVisible = true;
1921
+ if (currentState && visibleStates && visibleStates.length > 0) {
1922
+ //有显示状态控制
1923
+ if (visibleStates.indexOf(currentState) < 0) {
1924
+ fieldVisible = false;
1925
+ }
1926
+ }
1927
+ if (currentStatus && visibleStatuss && visibleStatuss.length > 0) {
1928
+ if (visibleStatuss.indexOf(currentStatus) < 0) {
1929
+ fieldVisible = false;
1930
+ }
1931
+ }
1932
+
1933
+ //编辑状态控制
1934
+ if (currentState && editStates) {
1935
+ originEdit = editStates.indexOf(currentState) > -1;
1936
+ }
1937
+ if (currentStatus && editStatuss) {
1938
+ originEdit = editStatuss.indexOf(currentStatus) > -1;
1939
+ }
1940
+ return { visible: fieldVisible, edit: originEdit };
1941
+ },
1942
+ cellValueChange(scope, e) {
1943
+ console.debug(scope.column.field + "value change");
1944
+ if (
1945
+ scope.row["sysRowState"] !== "add" &&
1946
+ scope.row["sysRowState"] !== "delete"
1947
+ ) {
1948
+ scope.row["sysRowState"] = "update";
1949
+ }
1950
+ this.$emit("valueChange", scope, this.dataName);
1951
+ this.$refs.baseGrid.updateStatus(scope);
1952
+ },
1953
+ /**
1954
+ * 异步插入
1955
+ */
1956
+ async insertAtAsync(row, index, autoSelect = true) {
1957
+ let vm = this;
1958
+ row["sysRowState"] = "add";
1959
+ if (!row["id"]) {
1960
+ row["id"] = this.$store.getters.newId() + "";
1961
+ }
1962
+ let insertRow = await this.$refs.baseGrid.insertAt(row, index);
1963
+ if (autoSelect === true) {
1964
+ this.$refs.baseGrid.setActiveRow(row);
1965
+ this.$refs.baseGrid.setCurrentRow(row);
1966
+ this.$emit("currentChange", row);
1967
+ }
1968
+ return insertRow;
1969
+ },
1970
+ insertAt(row, index, autoSelect = true, callback) {
1971
+ let vm = this;
1972
+ row["sysRowState"] = "add";
1973
+ if (!row["id"]) {
1974
+ row["id"] = this.$store.getters.newId() + "";
1975
+ }
1976
+ this.$refs.baseGrid.insertAt(row, index).then(({ row }) => {
1977
+ if (callback) {
1978
+ callback(row);
1979
+ }
1980
+
1981
+ if (autoSelect === true) {
1982
+ vm.$refs.baseGrid.setActiveRow(row);
1983
+ vm.$refs.baseGrid.setCurrentRow(row);
1984
+ // vm.rows.push(row)
1985
+ vm.$emit("currentChange", row);
1986
+ }
1987
+ });
1988
+ },
1989
+ // insertTree(row,)
1990
+ setCurrentRow(rowInfo) {
1991
+ let vm = this;
1992
+ this.$refs.baseGrid.setCurrentRow(rowInfo).then(() => {
1993
+ vm.$emit("currentChange", vm.$refs.baseGrid.getCurrentRecord());
1994
+ });
1995
+ },
1996
+ getCurrentRow() {
1997
+ return this.$refs.baseGrid.getCurrentRecord();
1998
+ },
1999
+ checkBoxChanged({ checked, records, row }) {
2000
+ this.$emit("checkBoxChanged", checked, records, row);
2001
+ },
2002
+ checkBoxAllChanged({ checked, records }) {
2003
+ this.$emit("checkBoxAllChanged", checked, records);
2004
+ },
2005
+ clearCurrentRow() {
2006
+ this.$refs.baseGrid.clearCurrentRow();
2007
+ },
2008
+ clearCheckboxReserve() {
2009
+ this.$refs.baseGrid.clearCheckboxReserve();
2010
+ },
2011
+ /**
2012
+ * 表尾按钮操作
2013
+ */
2014
+ pagerBtnClick(pagerBtnInfo) {
2015
+ this.$emit("pagerButtonClick", pagerBtnInfo, this);
2016
+ },
2017
+ /**
2018
+ * 删除行
2019
+ */
2020
+ removeRow(row) {
2021
+ return this.$refs.baseGrid.remove(row);
2022
+ },
2023
+ /**
2024
+ * 删除所有行
2025
+ */
2026
+ removeAll() {
2027
+ return this.$refs.baseGrid.remove();
2028
+ },
2029
+ getTableData() {
2030
+ return this.$refs.baseGrid.getTableData().fullData;
2031
+ },
2032
+ getVisibleData() {
2033
+ return this.$refs.baseGrid.getTableData().visibleData;
2034
+ },
2035
+ /**
2036
+ * 获取更新的行
2037
+ */
2038
+ getUpdateRows() {
2039
+ let tempRows = [];
2040
+ //先获取删除数据,因为前台删除一个明细后又添加相同的明细后台会
2041
+ //报唯一索引错误,因为后台也是先添加然后再是删除的会照成问题
2042
+ //所有就要把删除的放在数组的第一个传递过去,这样后台就先删除然后再新增了
2043
+ let tempRemoveRows = this.$refs.baseGrid.getRemoveRecords();
2044
+ for (let i = 0; i < tempRemoveRows.length; i++) {
2045
+ let tempRow = tempRemoveRows[i];
2046
+ tempRow["sysRowState"] = "delete";
2047
+ tempRows.push(tempRow);
2048
+ }
2049
+
2050
+ let tempTableData = this.$refs.baseGrid.getTableData().fullData;
2051
+ for (let i = 0; i < tempTableData.length; i++) {
2052
+ let tempRow = tempTableData[i];
2053
+ if (this.$refs.baseGrid.isInsertByRow(tempRow) === true) {
2054
+ tempRow["sysRowState"] = "add";
2055
+ tempRows.push(tempRow);
2056
+ }
2057
+ //判断子项
2058
+ // if(tempRow.children && tempRow.children.length>0){
2059
+ // //添加子项数据
2060
+ // XEUtils.arrayEach(tempRow.children,loopChild=>{
2061
+ // if (this.$refs.baseGrid.isInsertByRow(loopChild) === true){
2062
+ // loopChild["sysRowState"] = "add";
2063
+ // tempRows.push(loopChild);
2064
+ // }
2065
+ // })
2066
+ // }
2067
+ }
2068
+
2069
+ let tempUpdateRows = this.$refs.baseGrid.getUpdateRecords();
2070
+ for (let i = 0; i < tempUpdateRows.length; i++) {
2071
+ let tempRow = tempUpdateRows[i];
2072
+ tempRow["sysRowState"] = "update";
2073
+ tempRows.push(tempRow);
2074
+ }
2075
+
2076
+ return tempRows;
2077
+ },
2078
+ async fullValidate() {
2079
+ const errMap = await this.$refs.baseGrid
2080
+ .fullValidate(true)
2081
+ .catch((errMap) => errMap);
2082
+ let errorMsgList = [];
2083
+ if (errMap) {
2084
+ Object.values(errMap).forEach((errList) => {
2085
+ errList.forEach((params) => {
2086
+ const { rowIndex, column, rules, row } = params;
2087
+ let tempRowIndex = this.$refs.baseGrid.getVTRowIndex(row);
2088
+ rules.forEach((rule) => {
2089
+ errorMsgList.push(
2090
+ `第 ${tempRowIndex + 1} 行 ${column.title} 校验错误:${
2091
+ rule.message
2092
+ }`
2093
+ );
2094
+ });
2095
+ });
2096
+ });
2097
+ }
2098
+
2099
+ return errorMsgList;
2100
+ },
2101
+ preSearch(searchInfo, scope) {
2102
+ this.$emit("preSearch", searchInfo, scope);
2103
+ },
2104
+ pulldownBtnClick(btn) {
2105
+ this.$emit("pulldownBtnClick", btn);
2106
+ },
2107
+ pulldownMultiSelect(scope, pulldownView, selectRows) {
2108
+ //第一行选中
2109
+ pulldownView.setLinkValue(selectRows[0], scope.row);
2110
+ this.cellValueChange(scope);
2111
+ let vm = this;
2112
+ for (let i = 1; i < selectRows.length; i++) {
2113
+ let tempSelectRow = selectRows[i];
2114
+ this.$emit("defaultRow", (newRow) => {
2115
+ pulldownView.setLinkValue(tempSelectRow, newRow);
2116
+ vm.insertAt(newRow, -1, false, (insertRow) => {
2117
+ vm.cellValueChange({ row: insertRow, column: scope.column });
2118
+ });
2119
+ });
2120
+ }
2121
+ },
2122
+ resizableChange(scope) {
2123
+ this.$emit("resizableChange", scope);
2124
+ },
2125
+ setVisiable(fields, visible) {
2126
+ fields.forEach((field) => {
2127
+ let column = this.$refs.baseGrid.getColumnByField(field);
2128
+ column.visible = visible;
2129
+ });
2130
+ this.$refs.baseGrid.refreshColumn();
2131
+ },
2132
+ reloadColumn(columns) {
2133
+ this.internalColumns = [];
2134
+ if (this.showSeq) {
2135
+ this.internalColumns.push({
2136
+ type: "seq",
2137
+ fixed: "left",
2138
+ width: 50,
2139
+ slots: {
2140
+ header: "seqHeader",
2141
+ },
2142
+ params: {
2143
+ disableUserVisible: true,
2144
+ },
2145
+ });
2146
+ }
2147
+ if (this.showCheckBox) {
2148
+ this.internalColumns.push({
2149
+ type: "checkbox",
2150
+ fixed: "left",
2151
+ width: 40,
2152
+ params: {
2153
+ disableUserVisible: true,
2154
+ },
2155
+ });
2156
+ }
2157
+ columns.forEach((column) => {
2158
+ this.internalColumns.push(this.initColumns(column));
2159
+ });
2160
+ this.$refs.baseGrid.refreshColumn();
2161
+ },
2162
+ addRules(fields, rules) {
2163
+ fields.forEach((field) => {
2164
+ this.$set(this.validRules, field, rules);
2165
+ });
2166
+ this.$refs.baseGrid.refreshColumn();
2167
+ },
2168
+ /**
2169
+ * 表尾
2170
+ */
2171
+ footerMethod({ columns, data }) {
2172
+ if (this.footerSum.length > 0) {
2173
+ return [
2174
+ columns.map((column, columnIndex) => {
2175
+ if (columnIndex === 0) {
2176
+ return "合计";
2177
+ }
2178
+ if (this.footerSum.includes(column.property)) {
2179
+ let tempSumVal = XEUtils.sum(data, column.property);
2180
+ if (
2181
+ column.formatter &&
2182
+ column.formatter !== "defaultFormat" &&
2183
+ VXETable.formats.store[column.formatter]
2184
+ ) {
2185
+ tempSumVal = VXETable.formats.store[column.formatter]({
2186
+ cellValue: tempSumVal,
2187
+ });
2188
+ }
2189
+ return tempSumVal;
2190
+ }
2191
+ return null;
2192
+ }),
2193
+ ];
2194
+ } else {
2195
+ return [];
2196
+ }
2197
+ },
2198
+ cellClick({ row, column }) {
2199
+ this.$emit("cellClick", { row, column });
2200
+ //判断是否可以跳转
2201
+ if (
2202
+ this.gridEdit != true ||
2203
+ !(column.editRender && column.editRender.enabled === true)
2204
+ ) {
2205
+ if (column.params && column.params.route) {
2206
+ let tempRouteName = column.params.route.name;
2207
+ if (XEUtils.isArray(tempRouteName)) {
2208
+ //需要不同条件跳转不同页面
2209
+ for (let i = 0; i < tempRouteName.length; i++) {
2210
+ if (tempRouteName[i].value === row[tempRouteName[i].field]) {
2211
+ tempRouteName = tempRouteName[i].name;
2212
+ break;
2213
+ }
2214
+ }
2215
+ }
2216
+
2217
+ this.$router.pushRoute({
2218
+ name: tempRouteName,
2219
+ query: { id: row[column.params.route.field] },
2220
+ });
2221
+ return;
2222
+ }
2223
+ }
2224
+ // 判断当前网格是否可以编辑状态
2225
+ if (this.gridEdit !== true) {
2226
+ return;
2227
+ }
2228
+ if (this.$refs.baseGrid.isActiveByRow(row) === true) {
2229
+ //判断当前行是否是编辑行
2230
+ return;
2231
+ }
2232
+ // column.editRender.enabled = false
2233
+ if (column.editRender && column.editRender.enabled === true) {
2234
+ this.$refs.baseGrid.setActiveCell(row, column);
2235
+ } else {
2236
+ this.$refs.baseGrid.setActiveRow(row);
2237
+ }
2238
+ },
2239
+ customSetActive(id) {
2240
+ let fullData = this.$refs.baseGrid.getTableData().fullData;
2241
+ let row = fullData.find((x) => x.id == id);
2242
+ this.$refs.baseGrid.setCurrentRow(row);
2243
+ },
2244
+ gridRowStyle(scope) {},
2245
+ bodyScroll(scrollInfo) {
2246
+ this.$emit("scroll", scrollInfo);
2247
+ // if (scrollInfo.isX === true) {
2248
+ // // this.$refs.lineArea.style.marginLeft =
2249
+ // // (scrollInfo.scrollLeft-(this.fixedColWidth-this.colWidth)) * -1 + 'px'
2250
+
2251
+ // // this.$refs.headMonth.scrollTo(scrollInfo.scrollLeft)
2252
+ // this.$refs.headDay.scrollTo(scrollInfo.scrollLeft)
2253
+ // this.$refs.headHour.scrollTo(scrollInfo.scrollLeft)
2254
+ // }
2255
+ },
2256
+ getRadioRecord(isFull) {
2257
+ return this.$refs.baseGrid.getRadioRecord(isFull);
2258
+ },
2259
+ setRadioRow(rowInfo) {
2260
+ this.$refs.baseGrid.setRadioRow(rowInfo);
2261
+ },
2262
+ editClosedEvent({ row, column }) {
2263
+ // const $table = this.$refs.baseGrid
2264
+ // const field = column.property
2265
+ // const cellValue = row[field]
2266
+ // $table.reloadRow(row, null, field)
2267
+ // 判断单元格值是否被修改
2268
+ // if ($table.isUpdateByRow(row, field)) {
2269
+ // $table.reloadRow(row, null, field)
2270
+ // // setTimeout(() => {
2271
+ // // this.$XModal.message({
2272
+ // // content: `局部保存成功! ${field}=${cellValue}`,
2273
+ // // status: 'success'
2274
+ // // })
2275
+ // // // 局部更新单元格为已保存状态
2276
+ // // $table.reloadRow(row, null, field)
2277
+ // // }, 300)
2278
+ // }
2279
+ },
2280
+ // 通用行合并函数(将相同多列数据合并为一行)
2281
+ rowspanMethod({ row, _rowIndex, column, visibleData }) {
2282
+ // let fields = ['role']
2283
+ let cellValue = row[column.property];
2284
+ if (cellValue && this.mergeFields.includes(column.property)) {
2285
+ let prevRow = visibleData[_rowIndex - 1];
2286
+ let nextRow = visibleData[_rowIndex + 1];
2287
+ if (prevRow && prevRow[column.property] === cellValue) {
2288
+ return { rowspan: 0, colspan: 0 };
2289
+ } else {
2290
+ let countRowspan = 1;
2291
+ while (nextRow && nextRow[column.property] === cellValue) {
2292
+ nextRow = visibleData[++countRowspan + _rowIndex];
2293
+ }
2294
+ if (countRowspan > 1) {
2295
+ return { rowspan: countRowspan, colspan: 1 };
2296
+ }
2297
+ }
2298
+ }
2299
+ },
2300
+ clearAll() {
2301
+ let vm = this;
2302
+ vm.$refs.baseGrid.clearAll();
2303
+ },
2304
+ reloadData(data) {
2305
+ let vm = this;
2306
+ vm.$refs.baseGrid.reloadData(data);
2307
+ },
2308
+ setLoading(e) {
2309
+ this.loading = e;
2310
+ },
2311
+ //清空筛选
2312
+ clearFilter() {
2313
+ let vm = this;
2314
+ // 示例
2315
+ const filterList = vm.$refs.baseGrid.getCheckedFilters();
2316
+ filterList.forEach((col) => {
2317
+ col.column.filters = [];
2318
+ });
2319
+ vm.$refs.baseGrid.clearFilter();
2320
+ },
2321
+ filterAddExp(colInfo) {
2322
+ colInfo.filters[0].data.displayValues.push({
2323
+ value: [null, null],
2324
+ });
2325
+ },
2326
+ filterConfirm(colInfo) {
2327
+ let col= this.internalColumns.find(x=>x.field==colInfo.property)
2328
+ this.$set(col.filters[0].data,'bindingValues',[])
2329
+ colInfo.filters[0].data.bindingValues = [];
2330
+ XEUtils.arrayEach(colInfo.filters[0].data.displayValues, (item) => {
2331
+ if (colInfo.params.controlType === controlType.select) {
2332
+ colInfo.filters[0].data.bindingValues.push(item);
2333
+ this.$set(col.filters[0].data,'bindingValues',colInfo.filters[0].data.bindingValues)
2334
+ } else {
2335
+ if (item.value[0] || item.value[1]) {
2336
+ colInfo.filters[0].data.bindingValues.push(item);
2337
+ this.$set(col.filters[0].data,'bindingValues',colInfo.filters[0].data.bindingValues)
2338
+ }
2339
+ }
2340
+ });
2341
+ colInfo.filters[0].checked =
2342
+ colInfo.filters[0].data.bindingValues.length > 0;
2343
+ if (this.filterRemote) {
2344
+ //设置筛选过滤条件
2345
+ this.setFilterExpression();
2346
+ //通知外部筛选改变事件
2347
+ this.$emit("filterChange", { filterCol: colInfo });
2348
+ } else {
2349
+ // 手动触发重新筛选filterMethod()方法
2350
+ this.$refs.baseGrid.updateData()
2351
+ }
2352
+ this.$refs.baseGrid.closeFilter()
2353
+ },
2354
+ filterMethod({ options, values, cellValue, row, column }) {
2355
+ // 如果是服务端筛选,不会跳入该方法
2356
+ let currentVisible = false
2357
+ // 获取所有筛选数据,加入data数组进行比对
2358
+ const data = []
2359
+ XEUtils.arrayEach(options[0].data.displayValues, (item) => {
2360
+ if(column.params.controlType === controlType.number) {
2361
+ // 数字范围选择
2362
+ item.value.sort((a,b)=> a-b)
2363
+ if ( item.value[0] <= cellValue && cellValue <= item.value[1]) {
2364
+ currentVisible = true
2365
+ }
2366
+ } else if(
2367
+ column.params.controlType === controlType.date ||
2368
+ column.params.controlType === controlType.datetime ||
2369
+ column.params.controlType === controlType.time
2370
+ ) {
2371
+ // 日期范围选择
2372
+ let tempDate = []
2373
+ tempDate.push(XEUtils.timestamp(item.value[0])),
2374
+ tempDate.push(XEUtils.timestamp(item.value[1])),
2375
+ cellValue = XEUtils.timestamp(cellValue)
2376
+ tempDate.sort((a,b)=> a-b)
2377
+ if ( tempDate[0] <= cellValue && cellValue <= tempDate[1]) {
2378
+ currentVisible = true
2379
+ }
2380
+ } else if (column.params.controlType === controlType.select) {
2381
+ // 下拉
2382
+ data.push(item)
2383
+ } else {
2384
+ // 其余字符串
2385
+ let tempData = item.value.find(x => x !== null)
2386
+ if (tempData) {
2387
+ data.push(tempData)
2388
+ }
2389
+ }
2390
+ });
2391
+ if (cellValue && !currentVisible) {
2392
+ currentVisible = data.find(x => cellValue.indexOf(x) > -1)?true:false
2393
+ }
2394
+ return currentVisible
2395
+ },
2396
+ setFilterExpression(columns = this.$refs.baseGrid.getTableColumn().collectColumn) {
2397
+ XEUtils.clear(this.filterExpression);
2398
+ XEUtils.clear(this.filterStr);
2399
+ XEUtils.arrayEach(columns, (loopColInfo) => {
2400
+ if (!loopColInfo.filters) {
2401
+ return;
2402
+ }
2403
+ if (loopColInfo.filters[0].data.bindingValues.length === 0) {
2404
+ return;
2405
+ }
2406
+ //开始构造条件
2407
+ let tempStr = {
2408
+ field: loopColInfo.field,
2409
+ title: loopColInfo.title,
2410
+ exp: "",
2411
+ };
2412
+ let expStr = "";
2413
+ let filterBindingValues = loopColInfo.filters[0].data.bindingValues;
2414
+ //筛选条件过滤
2415
+ let colFilterExpression = { operator: "or", expressions: [] };
2416
+
2417
+ if (loopColInfo.params.controlType === controlType.select) {
2418
+ colFilterExpression.expressions.push({
2419
+ field: loopColInfo.field,
2420
+ operator: "IN",
2421
+ value: filterBindingValues,
2422
+ });
2423
+ this.filterExpression.push(colFilterExpression);
2424
+ tempStr.exp = "存在于 " + filterBindingValues;
2425
+ this.filterStr.push(tempStr);
2426
+ return;
2427
+ }
2428
+
2429
+ XEUtils.arrayEach(filterBindingValues, (loopBindingValue) => {
2430
+ let tempPushExp = {
2431
+ field: loopColInfo.field,
2432
+ operator: "CO",
2433
+ value: [],
2434
+ };
2435
+ switch (loopColInfo.params.controlType) {
2436
+ case controlType.date:
2437
+ case controlType.datetime:
2438
+ if (loopBindingValue.value[0] && loopBindingValue.value[1]) {
2439
+ tempPushExp.operator = "RA";
2440
+ tempPushExp.value = loopBindingValue.value;
2441
+ expStr = "范围";
2442
+ tempStr.exp =
2443
+ tempStr.exp +
2444
+ loopBindingValue.value[0] +
2445
+ "到" +
2446
+ loopBindingValue.value[1] +
2447
+ "或";
2448
+ } else if (loopBindingValue.value[0]) {
2449
+ tempPushExp.operator = "GE";
2450
+ tempPushExp.value = loopBindingValue.value[0];
2451
+ tempStr.exp = tempStr.exp + tempPushExp.value + "或";
2452
+ expStr = "大于等于";
2453
+ } else {
2454
+ tempPushExp.operator = "LE";
2455
+ tempPushExp.value = loopBindingValue.value[1];
2456
+ tempStr.exp = tempStr.exp + tempPushExp.value + "或";
2457
+ expStr = "小于等于";
2458
+ }
2459
+ break;
2460
+ case controlType.number:
2461
+ tempPushExp.operator = "RA";
2462
+ tempPushExp.value = loopBindingValue.value;
2463
+ expStr = "范围";
2464
+ tempStr.exp =
2465
+ tempStr.exp +
2466
+ loopBindingValue.value[0] +
2467
+ "到" +
2468
+ loopBindingValue.value[1] +
2469
+ "或";
2470
+ break;
2471
+ default:
2472
+ tempPushExp.value = loopBindingValue.value[0];
2473
+ expStr = "包含";
2474
+ tempStr.exp = tempStr.exp + loopBindingValue.value[0] + "或";
2475
+ }
2476
+ colFilterExpression.expressions.push(tempPushExp);
2477
+ });
2478
+ this.filterExpression.push(colFilterExpression);
2479
+ tempStr.exp = expStr + tempStr.exp.substring(0, tempStr.exp.length - 1);
2480
+ this.filterStr.push(tempStr);
2481
+ });
2482
+
2483
+ this.toolBarConfig.enabled = this.filterExpression.length > 0;
2484
+ },
2485
+ filterVisible({ column, visible }) {
2486
+ if (visible) {
2487
+ //重新赋值过滤的显示值
2488
+ column.filters[0].data.displayValues = [];
2489
+ XEUtils.arrayEach(column.filters[0].data.bindingValues, (item) => {
2490
+ column.filters[0].data.displayValues.push(item);
2491
+ });
2492
+ if (column.params.controlType !== controlType.select) {
2493
+ column.filters[0].data.displayValues.push({
2494
+ value: [null, null],
2495
+ });
2496
+ }
2497
+ //设置第一个输入框光标选中
2498
+ let tempClassName = column.field + "_filter_0";
2499
+ setTimeout(() => {
2500
+ // document
2501
+ // .getElementsByClassName(tempClassName)[0]
2502
+ // .children[0].select();
2503
+ // document.getElementsByClassName(tempClassName)[0].children[0].focus();
2504
+ }, 10);
2505
+ }
2506
+ },
2507
+ numberFormatter(value, scope){
2508
+ return value
2509
+ },
2510
+ numberParse(value, scope){
2511
+ if (scope.column.params.le) {
2512
+ //小于等于
2513
+ if (value > scope.row[scope.column.params.le]) {
2514
+ return scope.row[scope.column.params.le]
2515
+ }
2516
+ }
2517
+ let returnValue = value
2518
+ let tempPrecision = XEUtils.toNumber(scope.column.params.precision)
2519
+ let reg = new RegExp(
2520
+ '^((-?)|(-?([1-9]{1}\\d*)|-?([0]{1})))(\\.(\\d){0,' + tempPrecision + '})?$'
2521
+ )
2522
+ if (!reg.test(value)) {
2523
+ //小数点验证不通过
2524
+ // console.debug('验证不通过')
2525
+ returnValue = XEUtils.floor(value, tempPrecision)
2526
+ }
2527
+ if (
2528
+ XEUtils.isInteger(scope.column.params.max) &&
2529
+ XEUtils.toNumber(returnValue) > scope.column.params.max
2530
+ ) {
2531
+ returnValue = scope.column.params.max
2532
+ }
2533
+ if (
2534
+ XEUtils.isInteger(scope.column.params.min) &&
2535
+ XEUtils.toNumber(returnValue) < scope.column.params.min
2536
+ ) {
2537
+ returnValue = scope.column.params.min
2538
+ }
2539
+ return returnValue
2540
+ }
2541
+ },
2542
+ };
2543
+ </script>
2544
+
2545
+ <style>
2546
+ .base-grid-view .ant-btn-link {
2547
+ padding: 0 6px;
2548
+ }
2549
+ .base-grid-view .vxe-body--column.col-red {
2550
+ background-color: rgb(227, 9, 53);
2551
+ color: rgb(55, 55, 55);
2552
+ /* font-weight: bold; */
2553
+ }
2554
+ .base-grid-view .vxe-body--column.col-orange {
2555
+ background-color: rgb(237, 216, 20);
2556
+ color: rgb(55, 55, 55);
2557
+ /* font-weight: bold; */
2558
+ }
2559
+ .base-grid-view .vxe-body--column.col-grey {
2560
+ background-color: rgb(140, 140, 138);
2561
+ color: rgb(55, 55, 55);
2562
+ /* font-weight: bold; */
2563
+ }
2564
+ .base-grid-view .vxe-body--column.col-blue {
2565
+ background-color: #1890ff;
2566
+ color: rgb(55, 55, 55);
2567
+ /* font-weight: bold; */
2568
+ }
2569
+
2570
+ .base-grid-view .vxe-icon--caret-top {
2571
+ color: "#c0c4cc" !important;
2572
+ }
2573
+ .base-grid-view .vxe-icon--caret-bottom {
2574
+ color: "#c0c4cc" !important;
2575
+ }
2576
+ .vxe-icon--caret-top:hover {
2577
+ color: #409eff;
2578
+ }
2579
+ .vxe-icon--caret-bottom:hover {
2580
+ color: #409eff;
2581
+ }
2582
+ </style>
2583
+ <style lang="scss" scoped>
2584
+ .base-grid-view .vxe-header--row .vxe-header--column.sortable-ghost,
2585
+ .base-grid-view .vxe-header--row .vxe-header--column.sortable-chosen {
2586
+ background-color: #dfecfb;
2587
+ }
2588
+ .base-grid-view .vxe-header--row .vxe-header--column.col--fixed {
2589
+ cursor: no-drop;
2590
+ }
2591
+ .inner-cell-control {
2592
+ width: 100% !important;
2593
+ min-width:unset!important;
2594
+ }
2595
+ .input-box {
2596
+ width: 100%;
2597
+ border: 1px solid;
2598
+ min-height: 24px;
2599
+ border-radius: 4px;
2600
+ border-color: rgb(217, 217, 217);
2601
+ padding-left: 5px;
2602
+ line-height: 24px !important;
2603
+ }
2604
+ .test_filter {
2605
+ text-align: left;
2606
+ // display: inline-block;
2607
+ // width:90%
2608
+ }
2609
+ .test_filter_title {
2610
+ margin-left: 2%;
2611
+ }
2612
+ /*滚动条整体部分*/
2613
+ .base-grid-view ::-webkit-scrollbar {
2614
+ width: 10px;
2615
+ height: 10px;
2616
+ z-index: 10;
2617
+ }
2618
+ /*滚动条的轨道*/
2619
+ .base-grid-view ::-webkit-scrollbar-track {
2620
+ background-color: #ffffff;
2621
+ z-index: 10;
2622
+ }
2623
+ /*滚动条里面的小方块,能向上向下移动*/
2624
+ .base-grid-view ::-webkit-scrollbar-thumb {
2625
+ background-color: #bfbfbf;
2626
+ border-radius: 5px;
2627
+ border: 1px solid #f1f1f1;
2628
+ box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
2629
+ z-index: 10;
2630
+ }
2631
+ .base-grid-view ::-webkit-scrollbar-thumb:hover {
2632
+ background-color: #a8a8a8;
2633
+ z-index: 10;
2634
+ }
2635
+ .base-grid-view ::-webkit-scrollbar-thumb:active {
2636
+ background-color: #787878;
2637
+ z-index: 10;
2638
+ }
2639
+ /*边角,即两个滚动条的交汇处*/
2640
+ .base-grid-view ::-webkit-scrollbar-corner {
2641
+ background-color: #ffffff;
2642
+ z-index: 10;
2643
+ }
2644
+ .draggableItem {
2645
+ display: inline-block;
2646
+ height: 100%;
2647
+ line-height: 30px;
2648
+ border: 1.3px solid #e8eaec;
2649
+ margin: 0 !important;
2650
+ margin: 0 10px;
2651
+ // overflow: hidden;
2652
+ // text-overflow: ellipsis;
2653
+ // white-space: nowrap;
2654
+ }
2655
+ .sortable-column-demo .vxe-header--row .vxe-header--column.sortable-ghost,
2656
+ .sortable-column-demo .vxe-header--row .vxe-header--column.sortable-chosen {
2657
+ background-color: #dfecfb;
2658
+ }
2659
+ .sortable-column-demo .vxe-header--row .vxe-header--column.col--fixed {
2660
+ cursor: no-drop;
2661
+ }
2662
+
2663
+ .interceptor-class {
2664
+ padding: 10px;
2665
+ ::v-deep .ant-btn {
2666
+ margin: 10px 10px 0;
2667
+ }
2668
+ ::v-deep .ant-input {
2669
+ margin-bottom: 5px;
2670
+ }
2671
+ ::v-deep .ant-calendar-picker {
2672
+ margin: 0 5px;
2673
+ }
2674
+ }
2675
2675
  </style>