doway-coms 2.11.95 → 2.11.97

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