doway-coms 1.1.52 → 1.1.55

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