doway-coms 1.4.98 → 1.4.99

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