doway-coms 2.11.11 → 2.11.13

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 (91) hide show
  1. package/.browserslistrc +2 -2
  2. package/README.md +28 -28
  3. package/dist/css/chunk-vendors.7f83d8f9.css +8 -0
  4. package/dist/css/index.7946d50b.css +1 -0
  5. package/dist/favicon.ico +0 -0
  6. package/dist/js/chunk-vendors.28fda91d.js +340 -0
  7. package/dist/js/index.49bc6add.js +2 -0
  8. package/lib/doway-coms.common.js +120397 -0
  9. package/lib/doway-coms.css +1 -0
  10. package/lib/doway-coms.umd.js +120407 -0
  11. package/lib/doway-coms.umd.min.js +328 -0
  12. package/package.json +62 -62
  13. package/packages/AuditsList/index.js +7 -7
  14. package/packages/AuditsList/src/index.vue +314 -314
  15. package/packages/BaseButton/index.js +7 -7
  16. package/packages/BaseButton/src/index.vue +242 -242
  17. package/packages/BaseCheckbox/index.js +7 -7
  18. package/packages/BaseCheckbox/src/index.vue +134 -134
  19. package/packages/BaseDate/index.js +7 -7
  20. package/packages/BaseDate/src/index.vue +197 -197
  21. package/packages/BaseDateWeek/index.js +7 -7
  22. package/packages/BaseDateWeek/src/index.vue +163 -163
  23. package/packages/BaseDatetime/index.js +7 -7
  24. package/packages/BaseDatetime/src/index.vue +196 -196
  25. package/packages/BaseFileGroup/index.js +7 -7
  26. package/packages/BaseFileGroup/src/index.vue +724 -724
  27. package/packages/BaseForm/index.js +7 -7
  28. package/packages/BaseForm/src/index.vue +895 -895
  29. package/packages/BaseGantt/index.js +9 -9
  30. package/packages/BaseGantt/src/index.vue +617 -617
  31. package/packages/BaseGrid/index.js +9 -9
  32. package/packages/BaseGrid/src/exportCmp.vue +105 -105
  33. package/packages/BaseGrid/src/gridApi.js +32 -32
  34. package/packages/BaseGrid/src/index.vue +4242 -4230
  35. package/packages/BaseGridAdjust/index.js +9 -9
  36. package/packages/BaseGridAdjust/src/index.vue +482 -482
  37. package/packages/BaseInput/index.js +7 -7
  38. package/packages/BaseInput/src/index.vue +195 -195
  39. package/packages/BaseIntervalInput/index.js +7 -7
  40. package/packages/BaseIntervalInput/src/index.vue +310 -310
  41. package/packages/BaseKanbanEmpty/index.js +7 -7
  42. package/packages/BaseKanbanEmpty/src/index.vue +176 -176
  43. package/packages/BaseNumberInput/index.js +7 -7
  44. package/packages/BaseNumberInput/src/index.vue +291 -291
  45. package/packages/BasePagination/index.js +7 -7
  46. package/packages/BasePagination/src/index.vue +91 -91
  47. package/packages/BasePictureCard/index.js +7 -7
  48. package/packages/BasePictureCard/src/index.vue +671 -671
  49. package/packages/BasePrintPreview/index.js +7 -7
  50. package/packages/BasePrintPreview/src/index.vue +150 -150
  51. package/packages/BasePulldown/index.js +7 -7
  52. package/packages/BasePulldown/src/index.vue +1395 -1395
  53. package/packages/BaseSearch/index.js +7 -7
  54. package/packages/BaseSearch/src/index.vue +935 -935
  55. package/packages/BaseSelect/index.js +7 -7
  56. package/packages/BaseSelect/src/index.vue +155 -155
  57. package/packages/BaseSelectMulti/index.js +7 -7
  58. package/packages/BaseSelectMulti/src/index.vue +148 -148
  59. package/packages/BaseTextArea/index.js +7 -7
  60. package/packages/BaseTextArea/src/index.vue +187 -187
  61. package/packages/BaseTime/index.js +7 -7
  62. package/packages/BaseTime/src/index.vue +166 -166
  63. package/packages/BaseTool/index.js +7 -7
  64. package/packages/BaseTool/src/index.vue +353 -353
  65. package/packages/BaseToolStatus/index.js +7 -7
  66. package/packages/BaseToolStatus/src/ApprovalPersonsGroup.vue +41 -41
  67. package/packages/BaseToolStatus/src/index.vue +439 -439
  68. package/packages/BaseTreeSelect/index.js +8 -8
  69. package/packages/BaseTreeSelect/src/index.vue +437 -437
  70. package/packages/HistoryModal/index.js +8 -8
  71. package/packages/HistoryModal/src/index.vue +144 -144
  72. package/packages/LeaveAMessage/index.js +7 -7
  73. package/packages/LeaveAMessage/src/index.vue +601 -601
  74. package/packages/directive/clickoutside.js +44 -44
  75. package/packages/index.js +197 -197
  76. package/packages/styles/default.css +78 -78
  77. package/packages/styles/default.less +91 -91
  78. package/packages/utils/api.js +122 -122
  79. package/packages/utils/auth.js +38 -38
  80. package/packages/utils/common.js +703 -703
  81. package/packages/utils/dom.js +181 -181
  82. package/packages/utils/enum.js +86 -86
  83. package/packages/utils/filters.js +495 -485
  84. package/packages/utils/gridFormat.js +66 -66
  85. package/packages/utils/msg.js +103 -103
  86. package/packages/utils/patchFiles.js +44 -44
  87. package/packages/utils/request.js +181 -181
  88. package/packages/utils/store.js +372 -372
  89. package/packages/utils/tscPrinter.js +101 -101
  90. package/sync.bash +6 -6
  91. package/vue.config.js +59 -59
@@ -1,895 +1,895 @@
1
- <template>
2
- <div :style="computedformStyle" class="form-container">
3
- <a-button v-if="showFold===true"
4
- class="collapse-btn"
5
- type="link"
6
- @click="collapseChange()"
7
- >
8
- <a-icon :type="hiddenDetail ? 'down' : 'up'" class="collapse-icon" />
9
- <!-- {{ hiddenDetail ? '展开' : '收起' }} -->
10
- </a-button>
11
- <div
12
- :style="getFieldStyle(col)"
13
- v-for="(col) in internalComputedHiddenCols"
14
- :key="col.field"
15
- v-show="hiddenDetail ? col.foldVisible===true : true"
16
- >
17
- <!-- 文本框输入控件 -->
18
- <BaseInput
19
- v-if="
20
- col.controlType === 'text' &&
21
- (col.isButtonShow == false || col.isButtonShow == undefined)
22
- "
23
- :label="col.title"
24
- v-model="row[col.field]"
25
- :edit="col.edit"
26
- :tooltip="col.tooltip"
27
- :rules="col.rules"
28
- :route="col.route"
29
- :row="row"
30
- @change="
31
- () => {
32
- inputChange(col)
33
- }
34
- "
35
- @blur="
36
- () => {
37
- blurChange(col)
38
- }
39
- "
40
- >
41
- <template #right="slotProps">
42
- <slot :name="'right-' + col.field" v-bind="slotProps"></slot>
43
- </template>
44
- </BaseInput>
45
- <!-- 按钮弹出框输入控件 -->
46
- <!-- isButtonShow字段是额外添加字段,用于控制区分输入框控件 -->
47
- <BaseButton
48
- v-if="col.isButtonShow == true"
49
- v-model="row[col.field]"
50
- :colInfo="col"
51
- :row="row"
52
- :formRow="formRow"
53
- @preSearch="preSearch"
54
- @handleOk="
55
- (value) => {
56
- buttonHandleOk(col, value)
57
- }
58
- "
59
- />
60
- <!-- 文本框输入控件 -->
61
- <BaseTextArea
62
- v-if="
63
- col.controlType === 'textarea' &&
64
- (col.isButtonShow == false || col.isButtonShow == undefined)
65
- "
66
- :label="col.title"
67
- v-model="row[col.field]"
68
- :edit="col.edit"
69
- :tooltip="col.tooltip"
70
- :rules="col.rules"
71
- @change="
72
- () => {
73
- inputChange(col)
74
- }
75
- "
76
- />
77
- <!-- 数字输入 -->
78
- <BaseNumberInput
79
- v-if="
80
- col.controlType === 'number' &&
81
- (col.isButtonShow == false || col.isButtonShow == undefined)
82
- "
83
- :label="col.title"
84
- v-model="row[col.field]"
85
- :edit="col.edit"
86
- :rules="col.rules"
87
- :min="col.min"
88
- :tooltip="col.tooltip"
89
- :warnTooltip="col.warnTooltip"
90
- :max="col.max"
91
- :precision="col.precision"
92
- :percent="col.percent"
93
- :doFormat="col.doFormat"
94
- @change="
95
- () => {
96
- numberChange(col)
97
- }
98
- "
99
- @blur="
100
- () => {
101
- blurChange(col)
102
- }
103
- "
104
- >
105
- <template #right="slotProps">
106
- <slot :name="'right-' + col.field" v-bind="slotProps"></slot>
107
- </template>
108
- </BaseNumberInput>
109
- <BaseIntervalInput
110
- v-if="
111
- col.controlType === 'interval' &&
112
- (col.isButtonShow == false || col.isButtonShow == undefined)
113
- "
114
- :label="col.title"
115
- v-model="row[col.field]"
116
- :edit="col.edit"
117
- :rules="col.rules"
118
- :tooltip="col.tooltip"
119
- :displayType="col.displayType"
120
- :valueType="col.valueType"
121
- @change="
122
- () => {
123
- numberChange(col)
124
- }
125
- "
126
- />
127
- <!-- 日期选择控件 -->
128
- <BaseDate
129
- v-if="
130
- col.controlType === 'date' &&
131
- (col.isButtonShow == false || col.isButtonShow == undefined)
132
- "
133
- :label="col.title"
134
- v-model="row[col.field]"
135
- :edit="col.edit"
136
- :tooltip="col.tooltip"
137
- :pastDate="col.pastDate"
138
- :rules="col.rules"
139
- :disabledDateValue="col.disabledDateValue"
140
- @change="
141
- () => {
142
- inputChange(col)
143
- }
144
- "
145
- />
146
- <!-- 日期时间控件 -->
147
- <BaseDatetime
148
- v-if="
149
- col.controlType === 'datetime' &&
150
- (col.isButtonShow == false || col.isButtonShow == undefined)
151
- "
152
- :label="col.title"
153
- v-model="row[col.field]"
154
- :pastDate="col.pastDate"
155
- :tooltip="col.tooltip"
156
- :edit="col.edit"
157
- :rules="col.rules"
158
- :disabledDateValue="col.disabledDateValue"
159
- @change="
160
- () => {
161
- inputChange(col)
162
- }
163
- "
164
- />
165
- <!-- 单选框 -->
166
- <BaseCheckbox
167
- v-if="
168
- col.controlType === 'checkbox' &&
169
- (col.isButtonShow == false || col.isButtonShow == undefined)
170
- "
171
- :label="col.title"
172
- v-model="row[col.field]"
173
- :edit="col.edit"
174
- :tooltip="col.tooltip"
175
- :rules="col.rules"
176
- @change="
177
- (rowInfo) => {
178
- checkboxChange(col)
179
- }
180
- "
181
- />
182
- <BaseTime
183
- v-if="
184
- col.controlType === 'time' &&
185
- (col.isButtonShow == false || col.isButtonShow == undefined)
186
- "
187
- :label="col.title"
188
- v-model="row[col.field]"
189
- :tooltip="col.tooltip"
190
- :edit="col.edit"
191
- :rules="col.rules"
192
- @change="
193
- () => {
194
- inputChange(col)
195
- }
196
- "
197
- />
198
- <BaseDateWeek
199
- v-if="
200
- col.controlType === 'dateweek' &&
201
- (col.isButtonShow == false || col.isButtonShow == undefined)
202
- "
203
- :label="col.title"
204
- v-model="row[col.field]"
205
- :edit="col.edit"
206
- :tooltip="col.tooltip"
207
- :rules="col.rules"
208
- @change="
209
- () => {
210
- inputChange(col)
211
- }
212
- "
213
- />
214
- <BaseDateMonth
215
- v-if="
216
- col.controlType === 'datemonth' &&
217
- (col.isButtonShow == false || col.isButtonShow == undefined)
218
- "
219
- :label="col.title"
220
- v-model="row[col.field]"
221
- :edit="col.edit"
222
- :tooltip="col.tooltip"
223
- :rules="col.rules"
224
- @change="
225
- () => {
226
- inputChange(col)
227
- }
228
- "
229
- />
230
- <BaseSelect
231
- v-if="
232
- col.controlType === 'select' &&
233
- (col.isButtonShow == false || col.isButtonShow == undefined)
234
- "
235
- :label="col.title"
236
- v-model="row[col.field]"
237
- :edit="col.edit"
238
- :rules="col.rules"
239
- :tooltip="col.tooltip"
240
- :showSearch="true"
241
- :dataSource="col.dataSource"
242
- @change="
243
- (rowInfo) => {
244
- selectChange(col)
245
- }
246
- "
247
- />
248
- <BaseSelectMulti
249
- v-if="
250
- col.controlType === 'dropmulti' &&
251
- (col.isButtonShow == false || col.isButtonShow == undefined)
252
- "
253
- :label="col.title"
254
- v-model="row[col.field]"
255
- :edit="col.edit"
256
- :tooltip="col.tooltip"
257
- :rules="col.rules"
258
- @change="
259
- (rowInfo) => {
260
- selectMultiChange(col)
261
- }
262
- "
263
- :dataSource="col.dataSource"
264
- />
265
- <BasePulldown
266
- v-if="
267
- col.controlType === 'pulldown' &&
268
- (col.isButtonShow == false || col.isButtonShow == undefined)
269
- "
270
- :formRow="formRow"
271
- :isOld="isOld"
272
- :edit="col.edit"
273
- :defaultExpression="col.defaultExpression"
274
- :row="row"
275
- :api="col.api"
276
- :tooltip="col.tooltip"
277
- :optBtns="col.optBtns"
278
- :linkData="col.linkData"
279
- :popupAddName="col.popupAddName"
280
- :popupAddPath="col.popupAddPath"
281
- @pulldownBtnClick="pulldownBtnClick"
282
- :label="col.title"
283
- :rules="col.rules"
284
- :route="col.route"
285
- v-model="row[col.field]"
286
- :field="col.field"
287
- :columns="col.columns"
288
- :pageSize="col.pageSize"
289
- :immediate="col.immediate"
290
- :allowAutoClear="col.allowAutoClear"
291
- @preSearch="preSearch"
292
- @selectChanged="
293
- (rowInfo) => {
294
- pullDownChange(col, rowInfo)
295
- }
296
- "
297
- @confirmMultiSelect="
298
- (pulldownView, selectRows) =>
299
- pulldownMultiSelect(col, pulldownView, selectRows)
300
- "
301
- :dataSource="col.dataSource"
302
- :isMultiSelect="col.isMultiSelect"
303
- :isLocalData="col.isLocalData"
304
- />
305
- <BaseTreeSelect
306
- v-if="
307
- col.controlType === 'treeSelect' &&
308
- (col.isButtonShow == false || col.isButtonShow == undefined)
309
- "
310
- :formRow="formRow"
311
- :api="col.api"
312
- :tooltip="col.tooltip"
313
- :row="row"
314
- :edit="col.edit"
315
- :label="col.title"
316
- :rules="col.rules"
317
- :route="col.route"
318
- :field="col.field"
319
- :columns="col.columns"
320
- @preSearch="preSearch"
321
- :replaceFields="col.replaceFields"
322
- :treeWidth="col.treeWidth"
323
- :width="col.width"
324
- :linkedField="col.linkedField"
325
- :showSearch="col.showSearch"
326
- :allowClear="col.allowClear"
327
- :placeholder="col.placeholder"
328
- :linkedTitle="col.linkedTitle"
329
- :method="col.method"
330
- v-model="row[col.field]"
331
- @change="
332
- () => {
333
- inputChange(col)
334
- }
335
- "
336
- />
337
- <!-- 在最后添加自定义插槽 -->
338
- </div>
339
- <template v-if="layoutType==='default'">
340
- <!-- <div class="d-form-item-ghost"></div>
341
- <div class="d-form-item-ghost"></div>
342
- <div class="d-form-item-ghost"></div>
343
- <div class="d-form-item-ghost"></div> -->
344
- </template>
345
- </div>
346
- </template>
347
-
348
- <script>
349
- import XEUtils from 'xe-utils'
350
- import { sysFormState, sysRowState } from '../../utils/enum'
351
- import BaseInput from '../../BaseInput/index'
352
- import BaseCheckbox from '../../BaseCheckbox/index'
353
- import BaseDate from '../../BaseDate/index'
354
- import BaseDatetime from '../../BaseDatetime/index'
355
- import BaseDateWeek from '../../BaseDateWeek/index'
356
- import BaseTextArea from '../../BaseTextArea/index'
357
- import BaseButton from '../../BaseButton/index'
358
- import BaseSelect from '../../BaseSelect/index'
359
- import BaseSelectMulti from '../../BaseSelectMulti/index'
360
- import BaseTime from '../../BaseTime/index'
361
- import BasePulldown from '../../BasePulldown/index'
362
- import BaseIntervalInput from '../../BaseIntervalInput/index'
363
- import BaseNumberInput from '../../BaseNumberInput/index'
364
- import BaseTreeSelect from '../../BaseTreeSelect'
365
-
366
- import moment from 'moment'
367
- import BaseDateMonth from '../../BaseDateMonth'
368
- export default {
369
- components: {
370
- BaseInput,
371
- BaseCheckbox,
372
- BaseDate,
373
- BaseDatetime,
374
- BaseDateWeek,
375
- BaseDateMonth,
376
- BaseTextArea,
377
- BaseButton,
378
- BaseSelect,
379
- BaseSelectMulti,
380
- BaseTime,
381
- BasePulldown,
382
- BaseIntervalInput,
383
- BaseNumberInput,
384
- BaseTreeSelect,
385
- },
386
- name: 'BaseForm',
387
- props: {
388
- showFold:{
389
- type: Boolean,
390
- default: function () {
391
- return false
392
- },
393
- },
394
- layoutType: {
395
- // 布局方式。默认布局是flex自动换行布局,grid网格固定布局
396
- type: String,
397
- default: function () {
398
- return 'default'
399
- },
400
- },
401
- updateDatas: {
402
- // 更新的数据
403
- type: Object,
404
- default: function () {
405
- return {}
406
- },
407
- },
408
- showLoading: {
409
- // 是否显示加载信息
410
- type: Boolean,
411
- default: false,
412
- },
413
- isOld: {
414
- // 是否老系统
415
- type: Boolean,
416
- default: false,
417
- },
418
- valueState: {
419
- type: Object,
420
- default: function () {
421
- return {}
422
- },
423
- },
424
- formState: {
425
- type: String,
426
- default: sysFormState.view,
427
- },
428
- formRow: {
429
- // 当前页面数据集
430
- type: Object,
431
- default: () => {
432
- return {}
433
- },
434
- },
435
- row: {
436
- // 当前行,如果是表单的话当前行和当前页面数据集是一样的
437
- type: Object,
438
- default: () => {
439
- return {}
440
- },
441
- },
442
- columns: {
443
- // 表格列信息
444
- type: Array,
445
- default: function () {
446
- return []
447
- },
448
- },
449
- dataName: {
450
- type: String,
451
- default: function () {
452
- return ''
453
- },
454
- },
455
- background: {
456
- type: String,
457
- default: function () {
458
- return ''
459
- },
460
- },
461
- },
462
- computed: {
463
- computedformStyle(){
464
- let layoutFormStyle = {
465
- display: 'flex',
466
- columnGap: this.flexGap+ 'px',
467
- rowGap:'7px',
468
- flexFlow: 'row wrap',
469
- justifyContent: 'flex-start',
470
- padding: '5px 5px 0px 5px',
471
- overflowY: 'auto',
472
- paddingBottom:'7px'
473
- }
474
- if(this.background){
475
- layoutFormStyle['background'] = this.background
476
- }
477
-
478
- if(this.layoutType==='grid'){
479
- // 计算最大的行和列
480
- let maxRow = XEUtils.max(this.columns,p=>p.row)
481
- let maxCol = XEUtils.max(this.columns,p=>p.col)
482
- layoutFormStyle = {
483
- display: 'grid',
484
- gridTemplateRows: `repeat(${maxRow}, auto)`,
485
- gridTemplateColumns: `repeat(${maxCol}, 1fr)`,
486
- columnGrap: this.flexGap + 'px'
487
- }
488
- }
489
- //默认布局
490
- return layoutFormStyle
491
-
492
- },
493
- internalComputedHiddenCols: function () {
494
- let vm = this
495
- return this.columns.filter((item) => {
496
- // if (item.isTitle === true) {
497
- // // vm.titleCol = item
498
- // return false
499
- // }
500
- // if (item.controlType === controlType.image) {
501
- // vm.logoCol = item
502
- // return false
503
- // }
504
- return item.visible === true
505
- })
506
- },
507
- },
508
- filters: {},
509
- data() {
510
- return {
511
- flexGap:10,
512
- hiddenDetail: false,
513
- moment,
514
- editFormName: '',
515
- internalEdit: false,
516
- internalCols: [],
517
- internalValueState: {},
518
- internalFormState: sysFormState.view,
519
- rules: {},
520
- titleCols: [],
521
- logoCol: null,
522
- isShowEditForm: false,
523
- ref: '',
524
- }
525
- },
526
- watch: {
527
- // row: {
528
- // handler: function (newVal) {
529
- // },
530
- // deep: true
531
- // },
532
- // cols: {
533
- // handler: function (newVal) {
534
- // this.internalCols = newVal
535
- // },
536
- // deep: true
537
- // },
538
- // valueState: { // 表单值状态,更新,还是插入
539
- // handler: function (newVal) {
540
- // this.internalValueState = newVal
541
- // },
542
- // deep: true
543
- // },
544
- // formState: {
545
- // handler: function (newVal) {
546
- // this.internalFormState = newVal
547
- // this.setColState()
548
- // },
549
- // deep: true
550
- // }
551
- },
552
- created() {
553
- for (let i = 0; i < this.columns.length; i++) {
554
- // if (this.columns[i].isLogo === true) {
555
- // this.logoCol = this.columns[i]
556
- // continue
557
- // }
558
- // if (this.columns[i].isTitle === true) {
559
- // this.titleCols.push(this.columns[i])
560
- // continue
561
- // }
562
- if (this.columns[i].controlType === 'popup') {
563
- let formUrl =
564
- process.env[
565
- 'VUE_APP_' +
566
- this.columns[i].linkModuleData.objectService.toUpperCase() +
567
- '_SERVICE_URL'
568
- ] +
569
- '/' +
570
- this.columns[i].linkModuleData.objectApiVersion +
571
- '/' +
572
- this.columns[i].linkModuleData.objectName +
573
- '/'
574
- this.columns[i]['api'] = this.columns[i].linkModuleData.objectApiRoute
575
- ? formUrl + this.columns[i].linkModuleData.objectApiRoute
576
- : formUrl + 'Search'
577
-
578
- this.columns[i]['columns'] = {}
579
-
580
- for (
581
- let x = 0;
582
- x < this.columns[i].linkModuleData.moduleFields.length;
583
- x++
584
- ) {
585
- let tempField = this.columns[i].linkModuleData.moduleFields[x]
586
- this.columns[i]['columns'][tempField.field] = {
587
- title: tempField.caption,
588
- width: tempField.width,
589
- visible: tempField.visible,
590
- linkField: tempField.linkValueField,
591
- filter: tempField.isFilter,
592
- }
593
- if (tempField.field === this.columns[i].linkCaptionField) {
594
- this.columns[i]['columns'][tempField.field].linkField =
595
- this.columns[i].field
596
- this.columns[i]['columns'][tempField.field].filter = true
597
- }
598
- }
599
- }
600
-
601
- // this.columns[i]['rules'] = {}
602
- // if (this.columns[i].isRequire === true) {
603
- // this.columns[i].rules['required'] = true
604
- // }
605
- // if (this.columns[i].maxLength) {
606
- // this.columns[i].rules['length'] = [0, this.columns[i].maxLength]
607
- // }
608
- }
609
- },
610
-
611
- mounted() {
612
- //let letterLength = this.$refs.content.value
613
- //letterLength = this.$refs['content'].innerText.substr(0, 6) + '...'
614
- window.addEventListener('beforeunload', (e) => this.beforeunloadHandler(e))
615
- },
616
- destroyed() {
617
- window.removeEventListener('beforeunload', (e) =>
618
- this.beforeunloadHandler(e)
619
- )
620
- },
621
- activated() {},
622
- methods: {
623
- collapseChange(){
624
- this.hiddenDetail = !this.hiddenDetail
625
- this.$emit('collapseChange',this.hiddenDetail)
626
- },
627
- getFieldStyle(colInfo){
628
- // console.debug('0 0 calc('+colInfo.colSpan*250+'px -'+(colInfo.colSpan-1)*this.flexGap +'px)')
629
- let fieldStyle ={
630
- // width: colInfo.colSpan ? ('calc('+colInfo.colSpan*250+'px + '+(colInfo.colSpan-1)*16+'px)'): '250px',
631
- flex: '0 0 ' + (colInfo.width && colInfo.width>200?colInfo.width:250)+'px', //colInfo.colSpan ? '0 0 '+(colInfo.colSpan*250+(colInfo.colSpan-1)*this.flexGap)+'px': '0 0 250px',
632
-
633
- // flexGrow: 0,
634
- // flexShrink: 0,
635
- // flexBasis: colInfo.colSpan? (colInfo.colSpan*250)+'px':'250px',
636
- // flexGrow: '1',
637
- // flexShrink: '1',
638
- // flexBasis:'250px', //colInfo.colSpan ? ('calc('+colInfo.colSpan*250+'px + '+(colInfo.colSpan-1)*16+'px)'): '250px',
639
- marginTop: '0px',
640
- // marginRight: '8px',
641
- marginBottom: '0px',
642
- // marginLeft: '8px',
643
- // padding: '2px 8px 2px 8px',
644
- // minWidth: '250px',
645
- borderRadius: '6px',
646
- maxWidth:'100%'
647
- }
648
- if(this.layoutType==='grid'){
649
- fieldStyle = {
650
- gridRow: colInfo.row,
651
- gridColumn: colInfo.col
652
- }
653
- }
654
- return fieldStyle
655
- },
656
- preSearch(searchInfo, repeatRowInfo) {
657
- this.$emit('preSearch', searchInfo, repeatRowInfo)
658
- },
659
- beforeunloadHandler(e) {
660
- if (this.formState !== 'view') {
661
- e = e || window.event
662
- e.returnValue = '提示'
663
- return confirm('确认退出')
664
- } else {
665
- return
666
- }
667
- },
668
- pulldownBtnClick(btnInfo) {
669
- this.$emit('pulldownBtnClick', btnInfo)
670
- },
671
- showToolTip() {},
672
- fieldCaptionClick(col) {
673
- // 下拉框
674
- if (
675
- col.linkModuleData &&
676
- col.linkModuleData.linkModuleId &&
677
- col.linkModuleData.linkModuleOperate.indexOf(sysFormState.view) >= 0
678
- ) {
679
- // 查找模块信息
680
- let linkModule = this.$store.getters.addRouters.filter((filterItem) => {
681
- return (
682
- filterItem.meta &&
683
- filterItem.meta.moduleId === col.linkModuleData.linkModuleId
684
- )
685
- })
686
- if (linkModule.length > 0) {
687
- this.$router.pushRoute({
688
- name: linkModule[0].name,
689
- query: { id: this.row[col.field] },
690
- })
691
- }
692
- }
693
- },
694
- // selectChange(col) {
695
- // if (col.field.indexOf('.') < 0) {
696
- // this.updateDatas[col.field] = this.row[col.field]
697
- // }
698
- // if (
699
- // this.row['sysRowState'] === sysRowState.add ||
700
- // this.row['sysRowState'] === sysRowState.update
701
- // ) {
702
- // return
703
- // }
704
- // this.row['sysRowState'] = sysRowState.update
705
- // },
706
- pullDownChange(colInfo, row) {
707
- this.$emit('change', colInfo,row)
708
- },
709
- selectMultiChange(colInfo, row) {
710
- this.$emit('change', colInfo)
711
- },
712
- selectChange(colInfo) {
713
- this.$emit('change', colInfo)
714
- },
715
- checkboxChange(colInfo) {
716
- this.$emit('change', colInfo)
717
- },
718
- checkBoxChange(col) {
719
- if (col.field.indexOf('.') < 0) {
720
- this.updateDatas[col.field] = this.row[col.field]
721
- }
722
- this.$emit('change', col)
723
- if (
724
- this.row['sysRowState'] === sysRowState.add ||
725
- this.row['sysRowState'] === sysRowState.update
726
- ) {
727
- return
728
- }
729
- this.row['sysRowState'] = sysRowState.update
730
- },
731
- dateChange(col) {
732
- if (col.field.indexOf('.') < 0) {
733
- this.updateDatas[col.field] = this.row[col.field]
734
- }
735
- this.$emit('change', col)
736
- if (
737
- this.row['sysRowState'] === sysRowState.add ||
738
- this.row['sysRowState'] === sysRowState.update
739
- ) {
740
- return
741
- }
742
- this.row['sysRowState'] = sysRowState.update
743
- },
744
- inputChange(colInfo) {
745
- // 输入框改变
746
- this.$emit('change', colInfo)
747
- },
748
- // 按钮弹出组件返回输入的值
749
- buttonHandleOk(colInfo, value) {
750
- // 按钮弹出确定改变内容改变
751
- this.$emit('buttonHandleOk', colInfo, value)
752
- },
753
- blurChange(colInfo) {
754
- // 输入框失去焦点
755
- this.$emit('blur', colInfo)
756
- },
757
- numberChange(colInfo) {
758
- // 输入框改变
759
- this.$emit('change', colInfo)
760
- },
761
- longtimeChange(data, col) {
762
- this.row[col.field] = data
763
- this.$emit('change', col)
764
- if (
765
- this.row['sysRowState'] === sysRowState.add ||
766
- this.row['sysRowState'] === sysRowState.update
767
- ) {
768
- return
769
- }
770
- this.row['sysRowState'] = sysRowState.update
771
- },
772
- changeControlType(field, controlType) {
773
- let col = this.internalComputedHiddenCols.find(
774
- (col) => col.field === field
775
- )
776
- col.controlType = controlType
777
- },
778
- pulldownMultiSelect(col,pulldownView,selectRows){
779
- //第一行选中
780
- // pulldownView.setLinkValue(selectRows[0], this.row)
781
-
782
- // this.cellValueChange(scope)
783
- // let vm = this
784
- // for (let i = 1; i < selectRows.length; i++) {
785
- // let tempSelectRow = selectRows[i]
786
- // this.$emit('defaultRow', (newRow) => {
787
- // pulldownView.setLinkValue(tempSelectRow, newRow)
788
- // vm.insertAt(newRow, -1, false, (insertRow) => {
789
- // vm.cellValueChange({ row: insertRow, column: scope.column })
790
- // })
791
- // })
792
- // }
793
- this.$emit('selectRows', selectRows)
794
- }
795
- },
796
- }
797
- </script>
798
-
799
- <style lang="less" scoped>
800
- .form-container{
801
- position: relative
802
- }
803
- .d-form-item-ghost{
804
- visibility: hidden;
805
- height: 0;
806
- min-height: 0px !important;
807
- flex-grow: 1;
808
- flex-shrink: 1;
809
- flex-basis: auto;
810
- border: 1px solid #9ad4dc;
811
- min-width: 150px;
812
- width: 280px;
813
- margin-right: 8px;
814
- margin-left: 8px;
815
- border-radius: 6px;
816
- }
817
- .form-head {
818
- display: flex;
819
- flex-flow: row wrap;
820
- margin-bottom: 10px;
821
- .form-title {
822
- margin-left: 10px;
823
- }
824
- }
825
- .input-span {
826
- // line-height: 33px;
827
- color: #0b0b0b;
828
- font-size: 12px;
829
- font-weight: normal;
830
- overflow: hidden;
831
- text-overflow: ellipsis;
832
- -o-text-overflow: ellipsis;
833
- display: inline-block;
834
- width: 100%;
835
- height: 32.8px;
836
- white-space: nowrap;
837
- // font-family: "Arial", "Microsoft YaHei";
838
- }
839
- .title-first-input {
840
- width: 200px;
841
- height: 25px;
842
- font-size: 15px;
843
- margin-left: 10px;
844
- font-weight: 500;
845
- }
846
- .title-second-input {
847
- width: 200px;
848
- height: 25px;
849
- font-size: 15px;
850
- margin-left: 10px;
851
- font-weight: 500;
852
- }
853
- .title-first-value {
854
- width: 200px;
855
- height: 40px;
856
- font-size: 24px;
857
- margin-left: 10px;
858
- font-weight: 700;
859
- }
860
- .title-second-value {
861
- width: 200px;
862
- height: 26px;
863
- font-size: 18px;
864
- margin-left: 10px;
865
- font-weight: 600;
866
- }
867
- .option:hover {
868
- background-color: #219bff;
869
- }
870
- .form {
871
- margin-left: 30px;
872
- }
873
-
874
- .collapse-btn {
875
- position: absolute;
876
- top: 0px;
877
- right: 0px;
878
- padding: 4px 8px;
879
- z-index: 100;
880
- background-color: #fff; // 添加背景色使按钮更突出
881
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); // 添加阴影效果
882
- border-radius: 4px;
883
- .collapse-icon {
884
- transition: transform 0.3s;
885
- }
886
- &:hover {
887
- background-color: #f0f0f0;
888
- }
889
- }
890
-
891
-
892
- </style>
893
- <style lang="less">
894
- @import '../../styles/default.less';
895
- </style>
1
+ <template>
2
+ <div :style="computedformStyle" class="form-container">
3
+ <a-button v-if="showFold===true"
4
+ class="collapse-btn"
5
+ type="link"
6
+ @click="collapseChange()"
7
+ >
8
+ <a-icon :type="hiddenDetail ? 'down' : 'up'" class="collapse-icon" />
9
+ <!-- {{ hiddenDetail ? '展开' : '收起' }} -->
10
+ </a-button>
11
+ <div
12
+ :style="getFieldStyle(col)"
13
+ v-for="(col) in internalComputedHiddenCols"
14
+ :key="col.field"
15
+ v-show="hiddenDetail ? col.foldVisible===true : true"
16
+ >
17
+ <!-- 文本框输入控件 -->
18
+ <BaseInput
19
+ v-if="
20
+ col.controlType === 'text' &&
21
+ (col.isButtonShow == false || col.isButtonShow == undefined)
22
+ "
23
+ :label="col.title"
24
+ v-model="row[col.field]"
25
+ :edit="col.edit"
26
+ :tooltip="col.tooltip"
27
+ :rules="col.rules"
28
+ :route="col.route"
29
+ :row="row"
30
+ @change="
31
+ () => {
32
+ inputChange(col)
33
+ }
34
+ "
35
+ @blur="
36
+ () => {
37
+ blurChange(col)
38
+ }
39
+ "
40
+ >
41
+ <template #right="slotProps">
42
+ <slot :name="'right-' + col.field" v-bind="slotProps"></slot>
43
+ </template>
44
+ </BaseInput>
45
+ <!-- 按钮弹出框输入控件 -->
46
+ <!-- isButtonShow字段是额外添加字段,用于控制区分输入框控件 -->
47
+ <BaseButton
48
+ v-if="col.isButtonShow == true"
49
+ v-model="row[col.field]"
50
+ :colInfo="col"
51
+ :row="row"
52
+ :formRow="formRow"
53
+ @preSearch="preSearch"
54
+ @handleOk="
55
+ (value) => {
56
+ buttonHandleOk(col, value)
57
+ }
58
+ "
59
+ />
60
+ <!-- 文本框输入控件 -->
61
+ <BaseTextArea
62
+ v-if="
63
+ col.controlType === 'textarea' &&
64
+ (col.isButtonShow == false || col.isButtonShow == undefined)
65
+ "
66
+ :label="col.title"
67
+ v-model="row[col.field]"
68
+ :edit="col.edit"
69
+ :tooltip="col.tooltip"
70
+ :rules="col.rules"
71
+ @change="
72
+ () => {
73
+ inputChange(col)
74
+ }
75
+ "
76
+ />
77
+ <!-- 数字输入 -->
78
+ <BaseNumberInput
79
+ v-if="
80
+ col.controlType === 'number' &&
81
+ (col.isButtonShow == false || col.isButtonShow == undefined)
82
+ "
83
+ :label="col.title"
84
+ v-model="row[col.field]"
85
+ :edit="col.edit"
86
+ :rules="col.rules"
87
+ :min="col.min"
88
+ :tooltip="col.tooltip"
89
+ :warnTooltip="col.warnTooltip"
90
+ :max="col.max"
91
+ :precision="col.precision"
92
+ :percent="col.percent"
93
+ :doFormat="col.doFormat"
94
+ @change="
95
+ () => {
96
+ numberChange(col)
97
+ }
98
+ "
99
+ @blur="
100
+ () => {
101
+ blurChange(col)
102
+ }
103
+ "
104
+ >
105
+ <template #right="slotProps">
106
+ <slot :name="'right-' + col.field" v-bind="slotProps"></slot>
107
+ </template>
108
+ </BaseNumberInput>
109
+ <BaseIntervalInput
110
+ v-if="
111
+ col.controlType === 'interval' &&
112
+ (col.isButtonShow == false || col.isButtonShow == undefined)
113
+ "
114
+ :label="col.title"
115
+ v-model="row[col.field]"
116
+ :edit="col.edit"
117
+ :rules="col.rules"
118
+ :tooltip="col.tooltip"
119
+ :displayType="col.displayType"
120
+ :valueType="col.valueType"
121
+ @change="
122
+ () => {
123
+ numberChange(col)
124
+ }
125
+ "
126
+ />
127
+ <!-- 日期选择控件 -->
128
+ <BaseDate
129
+ v-if="
130
+ col.controlType === 'date' &&
131
+ (col.isButtonShow == false || col.isButtonShow == undefined)
132
+ "
133
+ :label="col.title"
134
+ v-model="row[col.field]"
135
+ :edit="col.edit"
136
+ :tooltip="col.tooltip"
137
+ :pastDate="col.pastDate"
138
+ :rules="col.rules"
139
+ :disabledDateValue="col.disabledDateValue"
140
+ @change="
141
+ () => {
142
+ inputChange(col)
143
+ }
144
+ "
145
+ />
146
+ <!-- 日期时间控件 -->
147
+ <BaseDatetime
148
+ v-if="
149
+ col.controlType === 'datetime' &&
150
+ (col.isButtonShow == false || col.isButtonShow == undefined)
151
+ "
152
+ :label="col.title"
153
+ v-model="row[col.field]"
154
+ :pastDate="col.pastDate"
155
+ :tooltip="col.tooltip"
156
+ :edit="col.edit"
157
+ :rules="col.rules"
158
+ :disabledDateValue="col.disabledDateValue"
159
+ @change="
160
+ () => {
161
+ inputChange(col)
162
+ }
163
+ "
164
+ />
165
+ <!-- 单选框 -->
166
+ <BaseCheckbox
167
+ v-if="
168
+ col.controlType === 'checkbox' &&
169
+ (col.isButtonShow == false || col.isButtonShow == undefined)
170
+ "
171
+ :label="col.title"
172
+ v-model="row[col.field]"
173
+ :edit="col.edit"
174
+ :tooltip="col.tooltip"
175
+ :rules="col.rules"
176
+ @change="
177
+ (rowInfo) => {
178
+ checkboxChange(col)
179
+ }
180
+ "
181
+ />
182
+ <BaseTime
183
+ v-if="
184
+ col.controlType === 'time' &&
185
+ (col.isButtonShow == false || col.isButtonShow == undefined)
186
+ "
187
+ :label="col.title"
188
+ v-model="row[col.field]"
189
+ :tooltip="col.tooltip"
190
+ :edit="col.edit"
191
+ :rules="col.rules"
192
+ @change="
193
+ () => {
194
+ inputChange(col)
195
+ }
196
+ "
197
+ />
198
+ <BaseDateWeek
199
+ v-if="
200
+ col.controlType === 'dateweek' &&
201
+ (col.isButtonShow == false || col.isButtonShow == undefined)
202
+ "
203
+ :label="col.title"
204
+ v-model="row[col.field]"
205
+ :edit="col.edit"
206
+ :tooltip="col.tooltip"
207
+ :rules="col.rules"
208
+ @change="
209
+ () => {
210
+ inputChange(col)
211
+ }
212
+ "
213
+ />
214
+ <BaseDateMonth
215
+ v-if="
216
+ col.controlType === 'datemonth' &&
217
+ (col.isButtonShow == false || col.isButtonShow == undefined)
218
+ "
219
+ :label="col.title"
220
+ v-model="row[col.field]"
221
+ :edit="col.edit"
222
+ :tooltip="col.tooltip"
223
+ :rules="col.rules"
224
+ @change="
225
+ () => {
226
+ inputChange(col)
227
+ }
228
+ "
229
+ />
230
+ <BaseSelect
231
+ v-if="
232
+ col.controlType === 'select' &&
233
+ (col.isButtonShow == false || col.isButtonShow == undefined)
234
+ "
235
+ :label="col.title"
236
+ v-model="row[col.field]"
237
+ :edit="col.edit"
238
+ :rules="col.rules"
239
+ :tooltip="col.tooltip"
240
+ :showSearch="true"
241
+ :dataSource="col.dataSource"
242
+ @change="
243
+ (rowInfo) => {
244
+ selectChange(col)
245
+ }
246
+ "
247
+ />
248
+ <BaseSelectMulti
249
+ v-if="
250
+ col.controlType === 'dropmulti' &&
251
+ (col.isButtonShow == false || col.isButtonShow == undefined)
252
+ "
253
+ :label="col.title"
254
+ v-model="row[col.field]"
255
+ :edit="col.edit"
256
+ :tooltip="col.tooltip"
257
+ :rules="col.rules"
258
+ @change="
259
+ (rowInfo) => {
260
+ selectMultiChange(col)
261
+ }
262
+ "
263
+ :dataSource="col.dataSource"
264
+ />
265
+ <BasePulldown
266
+ v-if="
267
+ col.controlType === 'pulldown' &&
268
+ (col.isButtonShow == false || col.isButtonShow == undefined)
269
+ "
270
+ :formRow="formRow"
271
+ :isOld="isOld"
272
+ :edit="col.edit"
273
+ :defaultExpression="col.defaultExpression"
274
+ :row="row"
275
+ :api="col.api"
276
+ :tooltip="col.tooltip"
277
+ :optBtns="col.optBtns"
278
+ :linkData="col.linkData"
279
+ :popupAddName="col.popupAddName"
280
+ :popupAddPath="col.popupAddPath"
281
+ @pulldownBtnClick="pulldownBtnClick"
282
+ :label="col.title"
283
+ :rules="col.rules"
284
+ :route="col.route"
285
+ v-model="row[col.field]"
286
+ :field="col.field"
287
+ :columns="col.columns"
288
+ :pageSize="col.pageSize"
289
+ :immediate="col.immediate"
290
+ :allowAutoClear="col.allowAutoClear"
291
+ @preSearch="preSearch"
292
+ @selectChanged="
293
+ (rowInfo) => {
294
+ pullDownChange(col, rowInfo)
295
+ }
296
+ "
297
+ @confirmMultiSelect="
298
+ (pulldownView, selectRows) =>
299
+ pulldownMultiSelect(col, pulldownView, selectRows)
300
+ "
301
+ :dataSource="col.dataSource"
302
+ :isMultiSelect="col.isMultiSelect"
303
+ :isLocalData="col.isLocalData"
304
+ />
305
+ <BaseTreeSelect
306
+ v-if="
307
+ col.controlType === 'treeSelect' &&
308
+ (col.isButtonShow == false || col.isButtonShow == undefined)
309
+ "
310
+ :formRow="formRow"
311
+ :api="col.api"
312
+ :tooltip="col.tooltip"
313
+ :row="row"
314
+ :edit="col.edit"
315
+ :label="col.title"
316
+ :rules="col.rules"
317
+ :route="col.route"
318
+ :field="col.field"
319
+ :columns="col.columns"
320
+ @preSearch="preSearch"
321
+ :replaceFields="col.replaceFields"
322
+ :treeWidth="col.treeWidth"
323
+ :width="col.width"
324
+ :linkedField="col.linkedField"
325
+ :showSearch="col.showSearch"
326
+ :allowClear="col.allowClear"
327
+ :placeholder="col.placeholder"
328
+ :linkedTitle="col.linkedTitle"
329
+ :method="col.method"
330
+ v-model="row[col.field]"
331
+ @change="
332
+ () => {
333
+ inputChange(col)
334
+ }
335
+ "
336
+ />
337
+ <!-- 在最后添加自定义插槽 -->
338
+ </div>
339
+ <template v-if="layoutType==='default'">
340
+ <!-- <div class="d-form-item-ghost"></div>
341
+ <div class="d-form-item-ghost"></div>
342
+ <div class="d-form-item-ghost"></div>
343
+ <div class="d-form-item-ghost"></div> -->
344
+ </template>
345
+ </div>
346
+ </template>
347
+
348
+ <script>
349
+ import XEUtils from 'xe-utils'
350
+ import { sysFormState, sysRowState } from '../../utils/enum'
351
+ import BaseInput from '../../BaseInput/index'
352
+ import BaseCheckbox from '../../BaseCheckbox/index'
353
+ import BaseDate from '../../BaseDate/index'
354
+ import BaseDatetime from '../../BaseDatetime/index'
355
+ import BaseDateWeek from '../../BaseDateWeek/index'
356
+ import BaseTextArea from '../../BaseTextArea/index'
357
+ import BaseButton from '../../BaseButton/index'
358
+ import BaseSelect from '../../BaseSelect/index'
359
+ import BaseSelectMulti from '../../BaseSelectMulti/index'
360
+ import BaseTime from '../../BaseTime/index'
361
+ import BasePulldown from '../../BasePulldown/index'
362
+ import BaseIntervalInput from '../../BaseIntervalInput/index'
363
+ import BaseNumberInput from '../../BaseNumberInput/index'
364
+ import BaseTreeSelect from '../../BaseTreeSelect'
365
+
366
+ import moment from 'moment'
367
+ import BaseDateMonth from '../../BaseDateMonth'
368
+ export default {
369
+ components: {
370
+ BaseInput,
371
+ BaseCheckbox,
372
+ BaseDate,
373
+ BaseDatetime,
374
+ BaseDateWeek,
375
+ BaseDateMonth,
376
+ BaseTextArea,
377
+ BaseButton,
378
+ BaseSelect,
379
+ BaseSelectMulti,
380
+ BaseTime,
381
+ BasePulldown,
382
+ BaseIntervalInput,
383
+ BaseNumberInput,
384
+ BaseTreeSelect,
385
+ },
386
+ name: 'BaseForm',
387
+ props: {
388
+ showFold:{
389
+ type: Boolean,
390
+ default: function () {
391
+ return false
392
+ },
393
+ },
394
+ layoutType: {
395
+ // 布局方式。默认布局是flex自动换行布局,grid网格固定布局
396
+ type: String,
397
+ default: function () {
398
+ return 'default'
399
+ },
400
+ },
401
+ updateDatas: {
402
+ // 更新的数据
403
+ type: Object,
404
+ default: function () {
405
+ return {}
406
+ },
407
+ },
408
+ showLoading: {
409
+ // 是否显示加载信息
410
+ type: Boolean,
411
+ default: false,
412
+ },
413
+ isOld: {
414
+ // 是否老系统
415
+ type: Boolean,
416
+ default: false,
417
+ },
418
+ valueState: {
419
+ type: Object,
420
+ default: function () {
421
+ return {}
422
+ },
423
+ },
424
+ formState: {
425
+ type: String,
426
+ default: sysFormState.view,
427
+ },
428
+ formRow: {
429
+ // 当前页面数据集
430
+ type: Object,
431
+ default: () => {
432
+ return {}
433
+ },
434
+ },
435
+ row: {
436
+ // 当前行,如果是表单的话当前行和当前页面数据集是一样的
437
+ type: Object,
438
+ default: () => {
439
+ return {}
440
+ },
441
+ },
442
+ columns: {
443
+ // 表格列信息
444
+ type: Array,
445
+ default: function () {
446
+ return []
447
+ },
448
+ },
449
+ dataName: {
450
+ type: String,
451
+ default: function () {
452
+ return ''
453
+ },
454
+ },
455
+ background: {
456
+ type: String,
457
+ default: function () {
458
+ return ''
459
+ },
460
+ },
461
+ },
462
+ computed: {
463
+ computedformStyle(){
464
+ let layoutFormStyle = {
465
+ display: 'flex',
466
+ columnGap: this.flexGap+ 'px',
467
+ rowGap:'7px',
468
+ flexFlow: 'row wrap',
469
+ justifyContent: 'flex-start',
470
+ padding: '5px 5px 0px 5px',
471
+ overflowY: 'auto',
472
+ paddingBottom:'7px'
473
+ }
474
+ if(this.background){
475
+ layoutFormStyle['background'] = this.background
476
+ }
477
+
478
+ if(this.layoutType==='grid'){
479
+ // 计算最大的行和列
480
+ let maxRow = XEUtils.max(this.columns,p=>p.row)
481
+ let maxCol = XEUtils.max(this.columns,p=>p.col)
482
+ layoutFormStyle = {
483
+ display: 'grid',
484
+ gridTemplateRows: `repeat(${maxRow}, auto)`,
485
+ gridTemplateColumns: `repeat(${maxCol}, 1fr)`,
486
+ columnGrap: this.flexGap + 'px'
487
+ }
488
+ }
489
+ //默认布局
490
+ return layoutFormStyle
491
+
492
+ },
493
+ internalComputedHiddenCols: function () {
494
+ let vm = this
495
+ return this.columns.filter((item) => {
496
+ // if (item.isTitle === true) {
497
+ // // vm.titleCol = item
498
+ // return false
499
+ // }
500
+ // if (item.controlType === controlType.image) {
501
+ // vm.logoCol = item
502
+ // return false
503
+ // }
504
+ return item.visible === true
505
+ })
506
+ },
507
+ },
508
+ filters: {},
509
+ data() {
510
+ return {
511
+ flexGap:10,
512
+ hiddenDetail: false,
513
+ moment,
514
+ editFormName: '',
515
+ internalEdit: false,
516
+ internalCols: [],
517
+ internalValueState: {},
518
+ internalFormState: sysFormState.view,
519
+ rules: {},
520
+ titleCols: [],
521
+ logoCol: null,
522
+ isShowEditForm: false,
523
+ ref: '',
524
+ }
525
+ },
526
+ watch: {
527
+ // row: {
528
+ // handler: function (newVal) {
529
+ // },
530
+ // deep: true
531
+ // },
532
+ // cols: {
533
+ // handler: function (newVal) {
534
+ // this.internalCols = newVal
535
+ // },
536
+ // deep: true
537
+ // },
538
+ // valueState: { // 表单值状态,更新,还是插入
539
+ // handler: function (newVal) {
540
+ // this.internalValueState = newVal
541
+ // },
542
+ // deep: true
543
+ // },
544
+ // formState: {
545
+ // handler: function (newVal) {
546
+ // this.internalFormState = newVal
547
+ // this.setColState()
548
+ // },
549
+ // deep: true
550
+ // }
551
+ },
552
+ created() {
553
+ for (let i = 0; i < this.columns.length; i++) {
554
+ // if (this.columns[i].isLogo === true) {
555
+ // this.logoCol = this.columns[i]
556
+ // continue
557
+ // }
558
+ // if (this.columns[i].isTitle === true) {
559
+ // this.titleCols.push(this.columns[i])
560
+ // continue
561
+ // }
562
+ if (this.columns[i].controlType === 'popup') {
563
+ let formUrl =
564
+ process.env[
565
+ 'VUE_APP_' +
566
+ this.columns[i].linkModuleData.objectService.toUpperCase() +
567
+ '_SERVICE_URL'
568
+ ] +
569
+ '/' +
570
+ this.columns[i].linkModuleData.objectApiVersion +
571
+ '/' +
572
+ this.columns[i].linkModuleData.objectName +
573
+ '/'
574
+ this.columns[i]['api'] = this.columns[i].linkModuleData.objectApiRoute
575
+ ? formUrl + this.columns[i].linkModuleData.objectApiRoute
576
+ : formUrl + 'Search'
577
+
578
+ this.columns[i]['columns'] = {}
579
+
580
+ for (
581
+ let x = 0;
582
+ x < this.columns[i].linkModuleData.moduleFields.length;
583
+ x++
584
+ ) {
585
+ let tempField = this.columns[i].linkModuleData.moduleFields[x]
586
+ this.columns[i]['columns'][tempField.field] = {
587
+ title: tempField.caption,
588
+ width: tempField.width,
589
+ visible: tempField.visible,
590
+ linkField: tempField.linkValueField,
591
+ filter: tempField.isFilter,
592
+ }
593
+ if (tempField.field === this.columns[i].linkCaptionField) {
594
+ this.columns[i]['columns'][tempField.field].linkField =
595
+ this.columns[i].field
596
+ this.columns[i]['columns'][tempField.field].filter = true
597
+ }
598
+ }
599
+ }
600
+
601
+ // this.columns[i]['rules'] = {}
602
+ // if (this.columns[i].isRequire === true) {
603
+ // this.columns[i].rules['required'] = true
604
+ // }
605
+ // if (this.columns[i].maxLength) {
606
+ // this.columns[i].rules['length'] = [0, this.columns[i].maxLength]
607
+ // }
608
+ }
609
+ },
610
+
611
+ mounted() {
612
+ //let letterLength = this.$refs.content.value
613
+ //letterLength = this.$refs['content'].innerText.substr(0, 6) + '...'
614
+ window.addEventListener('beforeunload', (e) => this.beforeunloadHandler(e))
615
+ },
616
+ destroyed() {
617
+ window.removeEventListener('beforeunload', (e) =>
618
+ this.beforeunloadHandler(e)
619
+ )
620
+ },
621
+ activated() {},
622
+ methods: {
623
+ collapseChange(){
624
+ this.hiddenDetail = !this.hiddenDetail
625
+ this.$emit('collapseChange',this.hiddenDetail)
626
+ },
627
+ getFieldStyle(colInfo){
628
+ // console.debug('0 0 calc('+colInfo.colSpan*250+'px -'+(colInfo.colSpan-1)*this.flexGap +'px)')
629
+ let fieldStyle ={
630
+ // width: colInfo.colSpan ? ('calc('+colInfo.colSpan*250+'px + '+(colInfo.colSpan-1)*16+'px)'): '250px',
631
+ flex: '0 0 ' + (colInfo.width && colInfo.width>200?colInfo.width:250)+'px', //colInfo.colSpan ? '0 0 '+(colInfo.colSpan*250+(colInfo.colSpan-1)*this.flexGap)+'px': '0 0 250px',
632
+
633
+ // flexGrow: 0,
634
+ // flexShrink: 0,
635
+ // flexBasis: colInfo.colSpan? (colInfo.colSpan*250)+'px':'250px',
636
+ // flexGrow: '1',
637
+ // flexShrink: '1',
638
+ // flexBasis:'250px', //colInfo.colSpan ? ('calc('+colInfo.colSpan*250+'px + '+(colInfo.colSpan-1)*16+'px)'): '250px',
639
+ marginTop: '0px',
640
+ // marginRight: '8px',
641
+ marginBottom: '0px',
642
+ // marginLeft: '8px',
643
+ // padding: '2px 8px 2px 8px',
644
+ // minWidth: '250px',
645
+ borderRadius: '6px',
646
+ maxWidth:'100%'
647
+ }
648
+ if(this.layoutType==='grid'){
649
+ fieldStyle = {
650
+ gridRow: colInfo.row,
651
+ gridColumn: colInfo.col
652
+ }
653
+ }
654
+ return fieldStyle
655
+ },
656
+ preSearch(searchInfo, repeatRowInfo) {
657
+ this.$emit('preSearch', searchInfo, repeatRowInfo)
658
+ },
659
+ beforeunloadHandler(e) {
660
+ if (this.formState !== 'view') {
661
+ e = e || window.event
662
+ e.returnValue = '提示'
663
+ return confirm('确认退出')
664
+ } else {
665
+ return
666
+ }
667
+ },
668
+ pulldownBtnClick(btnInfo) {
669
+ this.$emit('pulldownBtnClick', btnInfo)
670
+ },
671
+ showToolTip() {},
672
+ fieldCaptionClick(col) {
673
+ // 下拉框
674
+ if (
675
+ col.linkModuleData &&
676
+ col.linkModuleData.linkModuleId &&
677
+ col.linkModuleData.linkModuleOperate.indexOf(sysFormState.view) >= 0
678
+ ) {
679
+ // 查找模块信息
680
+ let linkModule = this.$store.getters.addRouters.filter((filterItem) => {
681
+ return (
682
+ filterItem.meta &&
683
+ filterItem.meta.moduleId === col.linkModuleData.linkModuleId
684
+ )
685
+ })
686
+ if (linkModule.length > 0) {
687
+ this.$router.pushRoute({
688
+ name: linkModule[0].name,
689
+ query: { id: this.row[col.field] },
690
+ })
691
+ }
692
+ }
693
+ },
694
+ // selectChange(col) {
695
+ // if (col.field.indexOf('.') < 0) {
696
+ // this.updateDatas[col.field] = this.row[col.field]
697
+ // }
698
+ // if (
699
+ // this.row['sysRowState'] === sysRowState.add ||
700
+ // this.row['sysRowState'] === sysRowState.update
701
+ // ) {
702
+ // return
703
+ // }
704
+ // this.row['sysRowState'] = sysRowState.update
705
+ // },
706
+ pullDownChange(colInfo, row) {
707
+ this.$emit('change', colInfo,row)
708
+ },
709
+ selectMultiChange(colInfo, row) {
710
+ this.$emit('change', colInfo)
711
+ },
712
+ selectChange(colInfo) {
713
+ this.$emit('change', colInfo)
714
+ },
715
+ checkboxChange(colInfo) {
716
+ this.$emit('change', colInfo)
717
+ },
718
+ checkBoxChange(col) {
719
+ if (col.field.indexOf('.') < 0) {
720
+ this.updateDatas[col.field] = this.row[col.field]
721
+ }
722
+ this.$emit('change', col)
723
+ if (
724
+ this.row['sysRowState'] === sysRowState.add ||
725
+ this.row['sysRowState'] === sysRowState.update
726
+ ) {
727
+ return
728
+ }
729
+ this.row['sysRowState'] = sysRowState.update
730
+ },
731
+ dateChange(col) {
732
+ if (col.field.indexOf('.') < 0) {
733
+ this.updateDatas[col.field] = this.row[col.field]
734
+ }
735
+ this.$emit('change', col)
736
+ if (
737
+ this.row['sysRowState'] === sysRowState.add ||
738
+ this.row['sysRowState'] === sysRowState.update
739
+ ) {
740
+ return
741
+ }
742
+ this.row['sysRowState'] = sysRowState.update
743
+ },
744
+ inputChange(colInfo) {
745
+ // 输入框改变
746
+ this.$emit('change', colInfo)
747
+ },
748
+ // 按钮弹出组件返回输入的值
749
+ buttonHandleOk(colInfo, value) {
750
+ // 按钮弹出确定改变内容改变
751
+ this.$emit('buttonHandleOk', colInfo, value)
752
+ },
753
+ blurChange(colInfo) {
754
+ // 输入框失去焦点
755
+ this.$emit('blur', colInfo)
756
+ },
757
+ numberChange(colInfo) {
758
+ // 输入框改变
759
+ this.$emit('change', colInfo)
760
+ },
761
+ longtimeChange(data, col) {
762
+ this.row[col.field] = data
763
+ this.$emit('change', col)
764
+ if (
765
+ this.row['sysRowState'] === sysRowState.add ||
766
+ this.row['sysRowState'] === sysRowState.update
767
+ ) {
768
+ return
769
+ }
770
+ this.row['sysRowState'] = sysRowState.update
771
+ },
772
+ changeControlType(field, controlType) {
773
+ let col = this.internalComputedHiddenCols.find(
774
+ (col) => col.field === field
775
+ )
776
+ col.controlType = controlType
777
+ },
778
+ pulldownMultiSelect(col,pulldownView,selectRows){
779
+ //第一行选中
780
+ // pulldownView.setLinkValue(selectRows[0], this.row)
781
+
782
+ // this.cellValueChange(scope)
783
+ // let vm = this
784
+ // for (let i = 1; i < selectRows.length; i++) {
785
+ // let tempSelectRow = selectRows[i]
786
+ // this.$emit('defaultRow', (newRow) => {
787
+ // pulldownView.setLinkValue(tempSelectRow, newRow)
788
+ // vm.insertAt(newRow, -1, false, (insertRow) => {
789
+ // vm.cellValueChange({ row: insertRow, column: scope.column })
790
+ // })
791
+ // })
792
+ // }
793
+ this.$emit('selectRows', selectRows)
794
+ }
795
+ },
796
+ }
797
+ </script>
798
+
799
+ <style lang="less" scoped>
800
+ .form-container{
801
+ position: relative
802
+ }
803
+ .d-form-item-ghost{
804
+ visibility: hidden;
805
+ height: 0;
806
+ min-height: 0px !important;
807
+ flex-grow: 1;
808
+ flex-shrink: 1;
809
+ flex-basis: auto;
810
+ border: 1px solid #9ad4dc;
811
+ min-width: 150px;
812
+ width: 280px;
813
+ margin-right: 8px;
814
+ margin-left: 8px;
815
+ border-radius: 6px;
816
+ }
817
+ .form-head {
818
+ display: flex;
819
+ flex-flow: row wrap;
820
+ margin-bottom: 10px;
821
+ .form-title {
822
+ margin-left: 10px;
823
+ }
824
+ }
825
+ .input-span {
826
+ // line-height: 33px;
827
+ color: #0b0b0b;
828
+ font-size: 12px;
829
+ font-weight: normal;
830
+ overflow: hidden;
831
+ text-overflow: ellipsis;
832
+ -o-text-overflow: ellipsis;
833
+ display: inline-block;
834
+ width: 100%;
835
+ height: 32.8px;
836
+ white-space: nowrap;
837
+ // font-family: "Arial", "Microsoft YaHei";
838
+ }
839
+ .title-first-input {
840
+ width: 200px;
841
+ height: 25px;
842
+ font-size: 15px;
843
+ margin-left: 10px;
844
+ font-weight: 500;
845
+ }
846
+ .title-second-input {
847
+ width: 200px;
848
+ height: 25px;
849
+ font-size: 15px;
850
+ margin-left: 10px;
851
+ font-weight: 500;
852
+ }
853
+ .title-first-value {
854
+ width: 200px;
855
+ height: 40px;
856
+ font-size: 24px;
857
+ margin-left: 10px;
858
+ font-weight: 700;
859
+ }
860
+ .title-second-value {
861
+ width: 200px;
862
+ height: 26px;
863
+ font-size: 18px;
864
+ margin-left: 10px;
865
+ font-weight: 600;
866
+ }
867
+ .option:hover {
868
+ background-color: #219bff;
869
+ }
870
+ .form {
871
+ margin-left: 30px;
872
+ }
873
+
874
+ .collapse-btn {
875
+ position: absolute;
876
+ top: 0px;
877
+ right: 0px;
878
+ padding: 4px 8px;
879
+ z-index: 100;
880
+ background-color: #fff; // 添加背景色使按钮更突出
881
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); // 添加阴影效果
882
+ border-radius: 4px;
883
+ .collapse-icon {
884
+ transition: transform 0.3s;
885
+ }
886
+ &:hover {
887
+ background-color: #f0f0f0;
888
+ }
889
+ }
890
+
891
+
892
+ </style>
893
+ <style lang="less">
894
+ @import '../../styles/default.less';
895
+ </style>