@nstc-business/imes 1.0.4 → 1.0.6

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.
@@ -0,0 +1,1570 @@
1
+ <template>
2
+ <Page>
3
+ <expandable-pane v-if="showModelInfo" title="模型信息">
4
+ <descriptions>
5
+ <el-descriptions-item label="模型类型">
6
+ <span v-if="modelData.type === 1">评价模型</span>
7
+ <span v-else-if="modelData.type === 2">计算模型</span>
8
+ <span v-else-if="modelData.type === 3">统计模型</span>
9
+ <span v-else>--</span>
10
+ </el-descriptions-item>
11
+ <el-descriptions-item label="模型编号">
12
+ {{ modelData.code }}
13
+ </el-descriptions-item>
14
+ <el-descriptions-item label="模型名称">
15
+ {{ modelData.name }}
16
+ </el-descriptions-item>
17
+ <el-descriptions-item label="模型版本">
18
+ 版本{{ modelData.version }}
19
+ </el-descriptions-item>
20
+ <el-descriptions-item label="应用业务">
21
+ {{
22
+ modelData.businessCodeVOS
23
+ ? modelData?.businessCodeVOS?.map(item => item.name).join(',')
24
+ : '--'
25
+ }}
26
+ </el-descriptions-item>
27
+ <el-descriptions-item label="统计模式" v-if="modelData.type === 3">
28
+ {{ modelData.sataMode === 1 ? '表模式' : '计算模式' }}
29
+ </el-descriptions-item>
30
+ <el-descriptions-item
31
+ label="是否展示指标权重"
32
+ v-if="modelData.type === 1"
33
+ >
34
+ {{ modelData.showWeight ? '是' : '否' }}
35
+ </el-descriptions-item>
36
+ <el-descriptions-item
37
+ label="同一指标项目是否横向展示"
38
+ v-if="modelData.type === 1"
39
+ >
40
+ {{ modelData.acrossShow ? '是' : '否' }}
41
+ </el-descriptions-item>
42
+ <el-descriptions-item
43
+ label="业务系统显示格式"
44
+ v-if="modelData.type === 2"
45
+ >
46
+ <span v-if="modelData.showStyle === 1">数值格式</span>
47
+ <span v-else-if="modelData.showStyle === 2">货币格式</span>
48
+ <span v-else>--</span>
49
+ </el-descriptions-item>
50
+ <el-descriptions-item label="负责人">
51
+ <div
52
+ class="text-ellipsis"
53
+ show-overflow-tooltip="true"
54
+ v-title="
55
+ modelData?.modelRoleList?.map(item => item.roleName).join(',')
56
+ "
57
+ >
58
+ {{
59
+ modelData.modelRoleList && modelData.modelRoleList.length > 0
60
+ ? modelData?.modelRoleList?.map(item => item.roleName).join(',')
61
+ : '--'
62
+ }}
63
+ </div>
64
+ </el-descriptions-item>
65
+ <el-descriptions-item label="备注">
66
+ {{ modelData.remark }}
67
+ </el-descriptions-item>
68
+ </descriptions>
69
+ </expandable-pane>
70
+ <expandable-pane title="模型测算信息">
71
+ <el-form class="label-width-10em" label-width="10em">
72
+ <el-form-item label="客户名称:">
73
+ <span>{{ modelData.memberName }}</span>
74
+ </el-form-item>
75
+ <el-form-item label="客户编号:">
76
+ <span>{{ modelData.memberNo }}</span>
77
+ </el-form-item>
78
+ <el-form-item label="业务基准时间:">
79
+ <span>{{ modelData.useDate }}</span>
80
+ </el-form-item>
81
+ </el-form>
82
+ <template v-if="typeObj.targetArray.length > 0">
83
+ <el-form>
84
+ <el-form-item label="模型:">
85
+ <span>【{{ modelData.name }}】——模型指标</span>
86
+ </el-form-item>
87
+ </el-form>
88
+ </template>
89
+
90
+ <div>
91
+ <el-form
92
+ class="label-width-10em"
93
+ label-width="10em"
94
+ v-if="modelData.sataMode !== 1"
95
+ >
96
+ <el-form-item label="模型得分:" v-if="modelData.type === 1">
97
+ <span>{{ modelData.result.toFixed(modelData.digits) }}</span>
98
+ </el-form-item>
99
+ <el-form-item label="模型结果:" v-if="modelData.type !== 3">
100
+ <span>{{ modelData.resultText }}</span>
101
+ </el-form-item>
102
+ </el-form>
103
+ <!-- 普通指标 -->
104
+ <div v-if="typeObj.targetArray.length > 0">
105
+ <el-form
106
+ class="label-width-6em"
107
+ label-width="10em"
108
+ v-if="modelData.type === 1"
109
+ >
110
+ <el-form-item label="指标得分结果小计:">
111
+ <span>
112
+ {{
113
+ typeObj.targetArray.reduce(
114
+ (total, item) =>
115
+ N_add(
116
+ item.valueScore ? item.valueScore : 0,
117
+ total,
118
+ modelData.digits
119
+ ),
120
+ 0
121
+ )
122
+ }}
123
+ </span>
124
+ </el-form-item>
125
+ <el-form-item label="模型指标得分小计:">
126
+ <span>
127
+ {{
128
+ typeObj.targetArray.reduce(
129
+ (total, item) =>
130
+ N_add(
131
+ item.modifiedResult ? item.modifiedResult : item.result,
132
+ total,
133
+ modelData.digits
134
+ ),
135
+ 0
136
+ )
137
+ }}
138
+ </span>
139
+ </el-form-item>
140
+ </el-form>
141
+ <table-pro
142
+ border
143
+ :columns="tabelHeadersTarget"
144
+ :data="typeObj.targetArray"
145
+ :merge-cells="mergeCells(typeObj.targetArray, tabelHeadersTarget)"
146
+ :scrollY="{
147
+ enabled: false
148
+ }"
149
+ :cellDefault="false"
150
+ :showSetsize="false"
151
+ :small="{
152
+ border: true,
153
+ size: 'small',
154
+ stripe: false
155
+ }"
156
+ >
157
+ <vxe-column
158
+ slot="indicatorResult"
159
+ slot-scope="{ column }"
160
+ v-bind="{ ...column, field: column.prop, title: column.label }"
161
+ >
162
+ <template slot-scope="{ row }">
163
+ <el-tooltip
164
+ class="item"
165
+ effect="dark"
166
+ :disabled="!row.displayFormula"
167
+ >
168
+ <div slot="content">
169
+ {{ row.displayFormula }}:
170
+ <br/>
171
+ {{ row.relFormula }}
172
+ </div>
173
+ <div
174
+ v-if="
175
+ row.sourceType !== 3 &&
176
+ (!row?.optionList || row?.optionList?.length == 0)
177
+ "
178
+ >
179
+ {{
180
+ row.indicatorResult || row.indicatorResult === 0
181
+ ? row?.indicatorResult?.toFixed(
182
+ digitsCalc(row.showDigits)
183
+ )
184
+ : ''
185
+ }}
186
+ {{
187
+ row.displayStyle === 1 &&
188
+ (row.indicatorResult || row.indicatorResult === 0)
189
+ ? '%'
190
+ : ''
191
+ }}
192
+ </div>
193
+
194
+ <div v-if="row.sourceType == 3 && row.itemType === 21">
195
+ {{
196
+ row.value || row.value === 0
197
+ ? row?.value?.toFixed(digitsCalc(row.showDigits))
198
+ : ''
199
+ }}
200
+ {{
201
+ row.displayStyle === 1 && (row.value || row.value === 0)
202
+ ? '%'
203
+ : ''
204
+ }}
205
+ </div>
206
+ <div v-if="row.itemType === 22 && row.optionList?.length">
207
+ {{
208
+ row.value && row.value.scoreText
209
+ ? row.value.scoreText
210
+ : '--'
211
+ }}
212
+ </div>
213
+ <div
214
+ v-if="
215
+ row.modifyRank == 2 &&
216
+ row.indicatorResult !== '' &&
217
+ row.indicatorResult !== null
218
+ "
219
+ >
220
+ <template v-if="row.itemType === 21">
221
+ <!-- displayStyle 是否百分比展示 -->
222
+ {{
223
+ row.value || row.value === 0
224
+ ? row?.value?.toFixed(digitsCalc(row.showDigits))
225
+ : ''
226
+ }}
227
+ {{
228
+ row.displayStyle === 1 && (row.value || row.value === 0)
229
+ ? '%'
230
+ : ''
231
+ }}
232
+ </template>
233
+
234
+ <template
235
+ v-else-if="row.itemType === 22 && row.optionList?.length"
236
+ >
237
+ {{
238
+ row.value && row.value.scoreText
239
+ ? row.value.scoreText
240
+ : '--'
241
+ }}
242
+ </template>
243
+ </div>
244
+ </el-tooltip>
245
+ </template>
246
+ </vxe-column>
247
+ <vxe-column
248
+ slot="value"
249
+ slot-scope="{ column }"
250
+ v-bind="{ ...column, field: column.prop, title: column.label }"
251
+ >
252
+ <template slot-scope="{ row }">
253
+ <div>
254
+ {{
255
+ row.valueScore || row.valueScore === 0
256
+ ? row.valueScore
257
+ : '--'
258
+ }}
259
+ </div>
260
+ </template>
261
+ </vxe-column>
262
+ <vxe-column
263
+ slot="result"
264
+ slot-scope="{ column }"
265
+ v-bind="{ ...column, field: column.prop, title: column.label }"
266
+ >
267
+ <template slot-scope="{ row }">
268
+ <div>
269
+ {{
270
+ row.result || row.result === 0
271
+ ? Number(row.result).toFixed(modelData.digits)
272
+ : ''
273
+ }}
274
+ </div>
275
+ </template>
276
+ </vxe-column>
277
+ <vxe-column
278
+ slot="modifiedResult"
279
+ slot-scope="{ column }"
280
+ v-bind="{ ...column, field: column.prop, title: column.label }"
281
+ >
282
+ <template slot-scope="{ row }">
283
+ <div>
284
+ {{
285
+ row.result || row.result === 0
286
+ ? Number(row.modifiedResult).toFixed(modelData.digits)
287
+ : ''
288
+ }}
289
+ </div>
290
+ </template>
291
+ </vxe-column>
292
+ </table-pro>
293
+ </div>
294
+ <!-- 评价模型 -->
295
+ <div
296
+ v-for="(item, index) in typeObj.assessModelArray"
297
+ :key="'assessModelArray' + index"
298
+ class="m-t-m"
299
+ >
300
+ <div>子模型【评级模型】--{{ item.name }}--模型指标</div>
301
+ <el-form class="label-width-6em" label-width="10em">
302
+ <el-form-item label="模型得分:">
303
+ <span>{{ item.result.toFixed(item.showDigits) }}</span>
304
+ </el-form-item>
305
+ <el-form-item label="模型结果:">
306
+ <span>{{ item.resultText }}</span>
307
+ </el-form-item>
308
+ </el-form>
309
+ <div class="m-t-s">
310
+ <table-pro
311
+ border
312
+ :columns="tabelHeadersAssessModel"
313
+ :data="item.tableData"
314
+ :merge-cells="mergeCells(item.tableData, tabelHeadersAssessModel)"
315
+ :scrollY="{
316
+ enabled: false
317
+ }"
318
+ :cellDefault="false"
319
+ :showSetsize="false"
320
+ :small="{
321
+ border: true,
322
+ size: 'small',
323
+ stripe: false
324
+ }"
325
+ >
326
+ <vxe-column
327
+ slot-scope="{ column }"
328
+ v-bind="{ ...column, field: column.prop, title: column.label }"
329
+ ></vxe-column>
330
+ <vxe-column
331
+ slot="indicatorResult"
332
+ slot-scope="{ column }"
333
+ v-bind="{ ...column, field: column.prop, title: column.label }"
334
+ >
335
+ <template slot-scope="{ row }">
336
+ <el-tooltip
337
+ class="item"
338
+ effect="dark"
339
+ :disabled="!row.displayFormula"
340
+ >
341
+ <div slot="content">
342
+ {{ row.displayFormula }}:
343
+ <br/>
344
+ {{ row.relFormula }}
345
+ </div>
346
+ <div
347
+ v-if="
348
+ row.sourceType !== 3 &&
349
+ (!row?.optionList || row?.optionList?.length == 0)
350
+ "
351
+ >
352
+ {{
353
+ row.indicatorResult || row.indicatorResult === 0
354
+ ? row?.indicatorResult?.toFixed(
355
+ digitsCalc(row.showDigits)
356
+ )
357
+ : ''
358
+ }}
359
+ {{
360
+ row.displayStyle === 1 &&
361
+ (row.indicatorResult || row.indicatorResult === 0)
362
+ ? '%'
363
+ : ''
364
+ }}
365
+ </div>
366
+
367
+ <div v-if="row.sourceType == 3 && row.itemType === 21">
368
+ {{
369
+ row.value || row.value === 0
370
+ ? row?.value?.toFixed(digitsCalc(row.showDigits))
371
+ : ''
372
+ }}
373
+ {{
374
+ row.displayStyle === 1 && (row.value || row.value === 0)
375
+ ? '%'
376
+ : ''
377
+ }}
378
+ </div>
379
+ <div
380
+ v-else-if="row.itemType === 22 && row.optionList?.length"
381
+ >
382
+ {{
383
+ row.value && row.value.scoreText
384
+ ? row.value.scoreText
385
+ : '--'
386
+ }}
387
+ </div>
388
+ <div
389
+ v-if="
390
+ row.modifyRank == 2 &&
391
+ row.indicatorResult !== '' &&
392
+ row.indicatorResult !== null
393
+ "
394
+ >
395
+ <template v-if="row.itemType === 21">
396
+ <!-- displayStyle 是否百分比展示 -->
397
+ {{
398
+ row.value || row.value === 0
399
+ ? row?.value?.toFixed(digitsCalc(row.showDigits))
400
+ : ''
401
+ }}
402
+ {{
403
+ row.displayStyle === 1 &&
404
+ (row.value || row.value === 0)
405
+ ? '%'
406
+ : ''
407
+ }}
408
+ </template>
409
+ <template
410
+ v-else-if="
411
+ row.itemType === 22 && row.optionList?.length
412
+ "
413
+ >
414
+ {{
415
+ row.value && row.value.scoreText
416
+ ? row.value.scoreText
417
+ : '--'
418
+ }}
419
+ </template>
420
+ </div>
421
+ </el-tooltip>
422
+ </template>
423
+ </vxe-column>
424
+ <vxe-column
425
+ slot="value"
426
+ slot-scope="{ column }"
427
+ v-bind="{ ...column, field: column.prop, title: column.label }"
428
+ >
429
+ <template slot-scope="{ row }">
430
+ <div>
431
+ {{
432
+ row.valueScore || row.valueScore === 0
433
+ ? row.valueScore
434
+ : '--'
435
+ }}
436
+ </div>
437
+ </template>
438
+ </vxe-column>
439
+ <vxe-column
440
+ slot="result"
441
+ slot-scope="{ column }"
442
+ v-bind="{ ...column, field: column.prop, title: column.label }"
443
+ >
444
+ <template slot-scope="{ row }">
445
+ <div>
446
+ {{
447
+ row.result || row.result === 0
448
+ ? row.result.toFixed(modelData.digits)
449
+ : ''
450
+ }}
451
+ </div>
452
+ </template>
453
+ </vxe-column>
454
+ <vxe-column
455
+ slot="modifiedResult"
456
+ slot-scope="{ column }"
457
+ v-bind="{ ...column, field: column.prop, title: column.label }"
458
+ >
459
+ <template slot-scope="{ row }">
460
+ <div>
461
+ {{
462
+ row.result || row.result === 0
463
+ ? Number(row.modifiedResult).toFixed(modelData.digits)
464
+ : ''
465
+ }}
466
+ </div>
467
+ </template>
468
+ </vxe-column>
469
+ </table-pro>
470
+ </div>
471
+ </div>
472
+ <!-- 计算模型 -->
473
+ <div
474
+ v-for="(item, index) in typeObj.evalModelArray"
475
+ :key="'evalModelArray' + index"
476
+ class="m-t-m"
477
+ >
478
+ <div>子模型【计算模型】--{{ item.name }}--模型指标</div>
479
+ <div class="m-t-s">
480
+ <table-pro
481
+ border
482
+ :columns="tabelHeadersEvalModel"
483
+ :data="item.tableData"
484
+ :merge-cells="mergeCells(item.tableData, tabelHeadersEvalModel)"
485
+ :scrollY="{
486
+ enabled: false
487
+ }"
488
+ :cellDefault="false"
489
+ :showSetsize="false"
490
+ :small="{
491
+ border: true,
492
+ size: 'small',
493
+ stripe: false
494
+ }"
495
+ >
496
+ <vxe-column
497
+ slot-scope="{ column }"
498
+ v-bind="{ ...column, field: column.prop, title: column.label }"
499
+ ></vxe-column>
500
+ <vxe-column
501
+ slot="indicatorResult"
502
+ slot-scope="{ column }"
503
+ v-bind="{ ...column, field: column.prop, title: column.label }"
504
+ >
505
+ <template slot-scope="{ row }">
506
+ <el-tooltip
507
+ class="item"
508
+ effect="dark"
509
+ :disabled="!row.displayFormula"
510
+ >
511
+ <div slot="content">
512
+ {{ row.displayFormula }}:
513
+ <br/>
514
+ {{ row.relFormula }}
515
+ </div>
516
+ <div
517
+ v-if="
518
+ row.sourceType !== 3 &&
519
+ (!row?.optionList || row?.optionList?.length == 0)
520
+ "
521
+ >
522
+ {{
523
+ row.indicatorResult || row.indicatorResult === 0
524
+ ? row?.indicatorResult?.toFixed(
525
+ digitsCalc(row.showDigits)
526
+ )
527
+ : ''
528
+ }}
529
+ {{
530
+ row.displayStyle === 1 &&
531
+ (row.indicatorResult || row.indicatorResult === 0)
532
+ ? '%'
533
+ : ''
534
+ }}
535
+ </div>
536
+
537
+ <div v-if="row.sourceType == 3 && row.itemType === 21">
538
+ {{
539
+ row.value || row.value === 0
540
+ ? row?.value?.toFixed(digitsCalc(row.showDigits))
541
+ : ''
542
+ }}
543
+ {{
544
+ row.displayStyle === 1 && (row.value || row.value === 0)
545
+ ? '%'
546
+ : ''
547
+ }}
548
+ </div>
549
+
550
+ <div
551
+ v-else-if="row.itemType === 22 && row.optionList?.length"
552
+ >
553
+ {{
554
+ row.value && row.value.scoreText
555
+ ? row.value.scoreText
556
+ : '--'
557
+ }}
558
+ </div>
559
+
560
+ <div
561
+ v-if="
562
+ row.modifyRank == 2 &&
563
+ row.indicatorResult !== '' &&
564
+ row.indicatorResult !== null
565
+ "
566
+ >
567
+ <template v-if="row.itemType === 21">
568
+ <!-- displayStyle 是否百分比展示 -->
569
+ {{
570
+ row.value || row.value === 0
571
+ ? row?.value?.toFixed(digitsCalc(row.showDigits))
572
+ : ''
573
+ }}
574
+ {{
575
+ row.displayStyle === 1 &&
576
+ (row.value || row.value === 0)
577
+ ? '%'
578
+ : ''
579
+ }}
580
+ </template>
581
+
582
+ <template
583
+ v-else-if="
584
+ row.itemType === 22 && row.optionList?.length
585
+ "
586
+ >
587
+ {{
588
+ row.value && row.value.scoreText
589
+ ? row.value.scoreText
590
+ : '--'
591
+ }}
592
+ </template>
593
+ </div>
594
+ </el-tooltip>
595
+ </template>
596
+ </vxe-column>
597
+ <vxe-column
598
+ slot="value"
599
+ slot-scope="{ column }"
600
+ v-bind="{ ...column, field: column.prop, title: column.label }"
601
+ >
602
+ <template slot-scope="{ row }">
603
+ <div>
604
+ {{
605
+ row.valueScore || row.valueScore === 0
606
+ ? row.valueScore
607
+ : '--'
608
+ }}
609
+ </div>
610
+ </template>
611
+ </vxe-column>
612
+ <vxe-column
613
+ slot="result"
614
+ slot-scope="{ column }"
615
+ v-bind="{ ...column, field: column.prop, title: column.label }"
616
+ >
617
+ <template slot-scope="{ row }">
618
+ <div>
619
+ {{
620
+ row.result || row.result === 0
621
+ ? row.result.toFixed(modelData.digits)
622
+ : ''
623
+ }}
624
+ </div>
625
+ </template>
626
+ </vxe-column>
627
+ <vxe-column
628
+ slot="modifiedResult"
629
+ slot-scope="{ column }"
630
+ v-bind="{ ...column, field: column.prop, title: column.label }"
631
+ >
632
+ <template slot-scope="{ row }">
633
+ <div>
634
+ {{
635
+ row.result || row.result === 0
636
+ ? Number(row.modifiedResult).toFixed(modelData.digits)
637
+ : ''
638
+ }}
639
+ </div>
640
+ </template>
641
+ </vxe-column>
642
+ </table-pro>
643
+ </div>
644
+ </div>
645
+
646
+ <!-- 统计模型 (暂不考虑子模型的情况) -->
647
+ <div
648
+ v-for="(item, index) in typeObj.statisticsArray"
649
+ :key="'statisticsArray' + index"
650
+ class="m-t-m"
651
+ >
652
+ <div v-if="modelData.type !== 3">
653
+ 子模型【统计模型--{{
654
+ item.sataMode === 1 ? '表模式' : '计算模式'
655
+ }}】--{{ item.name }}--模型指标
656
+ </div>
657
+ <div class="m-t-s">
658
+ <table-pro
659
+ border
660
+ :columns="tabelHeadersStatistics"
661
+ :data="item.tableData"
662
+ :merge-cells="mergeCells(item.tableData, tabelHeadersStatistics)"
663
+ :scrollY="{
664
+ enabled: false
665
+ }"
666
+ :cellDefault="false"
667
+ :showSetsize="false"
668
+ :small="{
669
+ border: true,
670
+ size: 'small',
671
+ stripe: false
672
+ }"
673
+ >
674
+ <vxe-column
675
+ slot-scope="{ column }"
676
+ v-bind="{ ...column, field: column.prop, title: column.label }"
677
+ ></vxe-column>
678
+ <vxe-column
679
+ slot="indicatorResult"
680
+ slot-scope="{ column }"
681
+ v-bind="{ ...column, field: column.prop, title: column.label }"
682
+ >
683
+ <template slot-scope="{ row }">
684
+ <el-tooltip
685
+ class="item"
686
+ effect="dark"
687
+ :disabled="!row.displayFormula"
688
+ >
689
+ <div slot="content">
690
+ {{ row.displayFormula }}:
691
+ <br/>
692
+ {{ row.relFormula }}
693
+ </div>
694
+ <div
695
+ v-if="
696
+ row.sourceType !== 3 &&
697
+ (!row?.optionList || row?.optionList?.length == 0)
698
+ "
699
+ >
700
+ {{
701
+ row.indicatorResult || row.indicatorResult === 0
702
+ ? row?.indicatorResult?.toFixed(
703
+ digitsCalc(row.showDigits)
704
+ )
705
+ : ''
706
+ }}
707
+ {{
708
+ row.displayStyle === 1 &&
709
+ (row.indicatorResult || row.indicatorResult === 0)
710
+ ? '%'
711
+ : ''
712
+ }}
713
+ </div>
714
+
715
+ <div v-if="row.sourceType === 3 && row.itemType === 21">
716
+ {{
717
+ row.value || row.value === 0
718
+ ? row?.value?.toFixed(digitsCalc(row.showDigits))
719
+ : ''
720
+ }}
721
+ {{
722
+ row.displayStyle === 1 && (row.value || row.value === 0)
723
+ ? '%'
724
+ : ''
725
+ }}
726
+ </div>
727
+
728
+ <div
729
+ v-else-if="row.itemType === 22 && row.optionList?.length"
730
+ >
731
+ {{
732
+ row.value && row.value.scoreText
733
+ ? row.value.scoreText
734
+ : '--'
735
+ }}
736
+ </div>
737
+
738
+ <div
739
+ v-if="
740
+ row.modifyRank == 2 &&
741
+ row.indicatorResult !== '' &&
742
+ row.indicatorResult !== null
743
+ "
744
+ >
745
+ <template v-if="row.itemType === 21">
746
+ <!-- displayStyle 是否百分比展示 -->
747
+ {{
748
+ row.value || row.value === 0
749
+ ? row?.value?.toFixed(digitsCalc(row.showDigits))
750
+ : ''
751
+ }}
752
+ {{
753
+ row.displayStyle === 1 &&
754
+ (row.value || row.value === 0)
755
+ ? '%'
756
+ : ''
757
+ }}
758
+ </template>
759
+
760
+ <template
761
+ v-else-if="
762
+ row.itemType === 22 && row.optionList?.length
763
+ "
764
+ >
765
+ {{
766
+ row.value && row.value.scoreText
767
+ ? row.value.scoreText
768
+ : '--'
769
+ }}
770
+ </template>
771
+ </div>
772
+ </el-tooltip>
773
+ </template>
774
+ </vxe-column>
775
+ <vxe-column
776
+ slot="value"
777
+ slot-scope="{ column }"
778
+ v-bind="{ ...column, field: column.prop, title: column.label }"
779
+ >
780
+ <template slot-scope="{ row }">
781
+ <div>
782
+ {{
783
+ row.valueScore || row.valueScore === 0
784
+ ? row.valueScore
785
+ : '--'
786
+ }}
787
+ </div>
788
+ </template>
789
+ </vxe-column>
790
+ <vxe-column
791
+ slot="result"
792
+ slot-scope="{ column }"
793
+ v-bind="{ ...column, field: column.prop, title: column.label }"
794
+ >
795
+ <template slot-scope="{ row }">
796
+ <div>
797
+ {{
798
+ row.result
799
+ ? addThousands(
800
+ toFixedTrunc(row?.result, modelData.digits)
801
+ )
802
+ : row.result === 0
803
+ ? row.result
804
+ : ''
805
+ }}
806
+ </div>
807
+ </template>
808
+ </vxe-column>
809
+ <vxe-column
810
+ slot="modifiedResult"
811
+ slot-scope="{ column }"
812
+ v-bind="{ ...column, field: column.prop, title: column.label }"
813
+ >
814
+ <template slot-scope="{ row }">
815
+ <div>
816
+ {{
817
+ row.result || row.result === 0
818
+ ? Number(row.modifiedResult).toFixed(modelData.digits)
819
+ : ''
820
+ }}
821
+ </div>
822
+ </template>
823
+ </vxe-column>
824
+ </table-pro>
825
+ </div>
826
+ </div>
827
+ </div>
828
+ </expandable-pane>
829
+ </Page>
830
+ </template>
831
+ <script>
832
+ import {
833
+ setMergeCells,
834
+ toFixedTrunc,
835
+ addThousands,
836
+ formatFloat2
837
+ } from '../common'
838
+ import {N, Page, ExpandablePane, Descriptions, TablePro} from 'n20-common-lib'
839
+
840
+ /**
841
+ * 关键参数说明 sourceType
842
+ * 0 系统自定义
843
+ * 1 报表取数
844
+ * 2 指标取数
845
+ * 3 手工填报
846
+ * 4 标准值取数
847
+ * 5 系统取值
848
+ * 6 系统取数
849
+ *
850
+ * rankType
851
+ * 0 取指标值
852
+ * 1 分段模糊化打分
853
+ * 2 公式模糊化打分
854
+ * 3 分段模糊化公式打分
855
+ * 4 企业绩效评估标准打分
856
+ * 5 评价等级化取值
857
+ * 6 分段模糊化取值
858
+ * 7 特殊化打分
859
+ * 8 标准值打分
860
+ * 9 统计项运算
861
+ * 10 手工录入
862
+ * 11 分段取值
863
+ *
864
+ * 调整项
865
+ * modifyRank
866
+ * 0 不调整
867
+ * 2 指标值
868
+ * 1 指标得分
869
+ *
870
+ * 模型指标类型
871
+ * itemType
872
+ * 11 计算模型
873
+ * 12 评价模型
874
+ * 13 统计模型
875
+ * 21 可量化指标
876
+ * 22 不可量化指标
877
+ */
878
+ export default {
879
+ name: 'calculateDetail',
880
+ props: {
881
+ showModelInfo: {
882
+ type: Boolean,
883
+ default: true
884
+ },
885
+ modelId: String,
886
+ logId: String
887
+ },
888
+ watch: {
889
+ logId: {
890
+ handler(value) {
891
+ if (value) {
892
+ this.init()
893
+ }
894
+ },
895
+ immediate: true
896
+ }
897
+ },
898
+ components: {Page, ExpandablePane, Descriptions, TablePro},
899
+ data() {
900
+ return {
901
+ // 拆分数结构为三类数据
902
+ typeObj: {
903
+ // 指标数组
904
+ targetArray: [],
905
+ // 统计模型数组
906
+ statisticsArray: [],
907
+ // 计算模型数组
908
+ evalModelArray: [],
909
+ // 评价模型数组
910
+ assessModelArray: []
911
+ },
912
+ tabelHeadersAssessModel: [
913
+ {
914
+ label: '分组',
915
+ prop: 'pName',
916
+ align: 'center',
917
+ minWidth: 150,
918
+ 'show-overflow-tooltip': true
919
+ },
920
+ {
921
+ label: '序号',
922
+ prop: 'serialNumber',
923
+ align: 'center',
924
+ minWidth: 100,
925
+ 'show-overflow-tooltip': true
926
+ },
927
+ {
928
+ label: '指标名称',
929
+ prop: 'name',
930
+ align: 'center',
931
+ minWidth: 150,
932
+ 'show-overflow-tooltip': true
933
+ },
934
+ {
935
+ label: '指标编号',
936
+ prop: 'code',
937
+ align: 'center',
938
+ minWidth: 150,
939
+ 'show-overflow-tooltip': true
940
+ },
941
+ {
942
+ label: '占模型权重(%)',
943
+ prop: 'weight',
944
+ align: 'center',
945
+ minWidth: 150,
946
+ formatter: 'formatRate',
947
+ 'show-overflow-tooltip': true
948
+ },
949
+ {
950
+ label: '指标满分值',
951
+ prop: 'fullScore',
952
+ align: 'center',
953
+ minWidth: 150,
954
+ formatter: 'formatRate',
955
+ 'show-overflow-tooltip': true
956
+ },
957
+ {
958
+ label: '指标调整项',
959
+ prop: 'modifyRank',
960
+ align: 'center',
961
+ minWidth: 100,
962
+ 'show-overflow-tooltip': true,
963
+ formatter: [
964
+ 'formatSelect',
965
+ [
966
+ {label: '不调整', value: 0},
967
+ {
968
+ label: '指标得分',
969
+ value: 1
970
+ },
971
+ {label: '指标值', value: 2}
972
+ ]
973
+ ]
974
+ },
975
+ {
976
+ label: '指标值',
977
+ prop: 'indicatorResult',
978
+ slotName: 'indicatorResult',
979
+ align: 'center',
980
+ minWidth: 150,
981
+ 'show-overflow-tooltip': false
982
+ },
983
+ {
984
+ label: '调整后指标值',
985
+ prop: 'modifiedVal',
986
+ align: 'center',
987
+ minWidth: 150,
988
+ 'show-overflow-tooltip': true,
989
+ type: 'html',
990
+ formatter: ({cellValue, row}) => {
991
+ return `<span>${
992
+ row.modifyRank === 2
993
+ ? row.displayStyle === 1
994
+ ? formatFloat2(cellValue / 100, this.modelData.digits) + '%'
995
+ : cellValue
996
+ : '--'
997
+ }</span>`
998
+ }
999
+ },
1000
+ {
1001
+ label: '指标得分',
1002
+ prop: 'value',
1003
+ slotName: 'value',
1004
+ align: 'center',
1005
+ minWidth: 150,
1006
+ 'show-overflow-tooltip': false
1007
+ },
1008
+ {
1009
+ label: '模型指标得分',
1010
+ prop: 'result',
1011
+ slotName: 'result',
1012
+ align: 'center',
1013
+ minWidth: 150,
1014
+ 'show-overflow-tooltip': false
1015
+ },
1016
+ {
1017
+ label: '调整后模型指标得分',
1018
+ prop: 'modifiedResult',
1019
+ align: 'center',
1020
+ minWidth: 150,
1021
+ 'show-overflow-tooltip': false
1022
+ }
1023
+ ],
1024
+ tabelHeadersEvalModel: [
1025
+ {
1026
+ label: '分组',
1027
+ prop: 'pName',
1028
+ align: 'center',
1029
+ minWidth: 150,
1030
+ 'show-overflow-tooltip': true
1031
+ },
1032
+ {
1033
+ label: '序号',
1034
+ prop: 'serialNumber',
1035
+ align: 'center',
1036
+ minWidth: 100,
1037
+ 'show-overflow-tooltip': true
1038
+ },
1039
+ {
1040
+ label: '指标名称',
1041
+ prop: 'name',
1042
+ align: 'center',
1043
+ minWidth: 150,
1044
+ 'show-overflow-tooltip': true
1045
+ },
1046
+ {
1047
+ label: '指标编号',
1048
+ prop: 'code',
1049
+ align: 'center',
1050
+ minWidth: 150,
1051
+ 'show-overflow-tooltip': true
1052
+ },
1053
+ {
1054
+ label: '模型指标系数名称',
1055
+ prop: 'ratioName',
1056
+ align: 'center',
1057
+ minWidth: 150,
1058
+ 'show-overflow-tooltip': false
1059
+ },
1060
+ {
1061
+ label: '指标调整项',
1062
+ prop: 'modifyRank',
1063
+ align: 'center',
1064
+ minWidth: 100,
1065
+ 'show-overflow-tooltip': true,
1066
+ formatter: [
1067
+ 'formatSelect',
1068
+ [
1069
+ {label: '不调整', value: 0},
1070
+ {
1071
+ label: '指标得分',
1072
+ value: 1
1073
+ },
1074
+ {label: '指标值', value: 2}
1075
+ ]
1076
+ ]
1077
+ },
1078
+ {
1079
+ label: '指标值',
1080
+ prop: 'indicatorResult',
1081
+ slotName: 'indicatorResult',
1082
+ align: 'center',
1083
+ minWidth: 150,
1084
+ 'show-overflow-tooltip': false
1085
+ },
1086
+ {
1087
+ label: '调整后指标值',
1088
+ prop: 'modifiedVal',
1089
+ align: 'center',
1090
+ minWidth: 150,
1091
+ 'show-overflow-tooltip': true,
1092
+ type: 'html',
1093
+ formatter: ({cellValue, row}) => {
1094
+ return `<span>${
1095
+ row.modifyRank === 2
1096
+ ? row.displayStyle === 1
1097
+ ? formatFloat2(cellValue / 100, this.modelData.digits) + '%'
1098
+ : cellValue
1099
+ : '--'
1100
+ }</span>`
1101
+ }
1102
+ },
1103
+ {
1104
+ label: '模型指标取值结果',
1105
+ prop: 'result',
1106
+ slotName: 'result',
1107
+ align: 'center',
1108
+ minWidth: 150,
1109
+ 'show-overflow-tooltip': false
1110
+ }
1111
+ ],
1112
+ tabelHeadersStatistics: [
1113
+ {
1114
+ label: '指标项',
1115
+ prop: 'pName',
1116
+ align: 'center',
1117
+ minWidth: 150,
1118
+ 'show-overflow-tooltip': true
1119
+ },
1120
+ {
1121
+ label: '统计项名称',
1122
+ prop: 'statsName',
1123
+ align: 'center',
1124
+ minWidth: 150,
1125
+ 'show-overflow-tooltip': true
1126
+ },
1127
+ {
1128
+ label: '指标名称',
1129
+ prop: 'name',
1130
+ align: 'center',
1131
+ minWidth: 150,
1132
+ 'show-overflow-tooltip': true
1133
+ },
1134
+ {
1135
+ label: '指标编号',
1136
+ prop: 'code',
1137
+ align: 'center',
1138
+ minWidth: 150,
1139
+ 'show-overflow-tooltip': true
1140
+ },
1141
+ {
1142
+ label: '指标值',
1143
+ prop: 'indicatorResult',
1144
+ slotName: 'indicatorResult',
1145
+ align: 'center',
1146
+ minWidth: 250,
1147
+ 'show-overflow-tooltip': false
1148
+ },
1149
+ {
1150
+ label: '指标值显示',
1151
+ prop: 'indicatorValText',
1152
+ align: 'center',
1153
+ minWidth: 150,
1154
+ 'show-overflow-tooltip': false
1155
+ },
1156
+ {
1157
+ label: '统计结果',
1158
+ prop: 'result',
1159
+ slotName: 'result',
1160
+ align: 'center',
1161
+ minWidth: 150,
1162
+ 'show-overflow-tooltip': false
1163
+ }
1164
+ ],
1165
+ modelData: {},
1166
+ model: {}
1167
+ }
1168
+ },
1169
+ computed: {
1170
+ tabelHeadersTarget() {
1171
+ if (this.modelData.type === 1) {
1172
+ return this.tabelHeadersAssessModel
1173
+ } else if (this.modelData.type === 2) {
1174
+ return this.tabelHeadersEvalModel
1175
+ } else if (this.modelData.type === 3) {
1176
+ return this.tabelHeadersStatistics
1177
+ } else {
1178
+ return []
1179
+ }
1180
+ }
1181
+ },
1182
+ methods: {
1183
+ toFixedTrunc,
1184
+ addThousands,
1185
+ N_add(a, b, w) {
1186
+ return N.add(a, b, w)
1187
+ },
1188
+ N_mul(a, b, w) {
1189
+ return N.mul(a, b, w)
1190
+ },
1191
+ N_div(a, b, w) {
1192
+ return N.div(a, b, w)
1193
+ },
1194
+ async init() {
1195
+ await this.getModelById()
1196
+ if (this.model.showLevel !== 1) {
1197
+ this.tabelHeadersAssessModel = this.tabelHeadersAssessModel.filter(
1198
+ item => item.prop !== 'serialNumber'
1199
+ )
1200
+ this.tabelHeadersEvalModel = this.tabelHeadersEvalModel.filter(
1201
+ item => item.prop !== 'serialNumber'
1202
+ )
1203
+ }
1204
+ switch (this.model.type) {
1205
+ case 1:
1206
+ case 2:
1207
+ if (this.model.code) {
1208
+ this.processingData(this.model)
1209
+ await this.queryCalcResultDetail()
1210
+ this.comFn(this.modelData)
1211
+ }
1212
+ break
1213
+ case 3:
1214
+ await this.queryCalcResultDetail()
1215
+ this.recursionFn([this.modelData.modelTreeVO])
1216
+ const modelTreeVO = JSON.parse(
1217
+ JSON.stringify(this.modelData.modelTreeVO)
1218
+ )
1219
+ modelTreeVO.itemID = modelTreeVO.modelID
1220
+ modelTreeVO.tableData = []
1221
+ modelTreeVO.children = []
1222
+ this.typeObj.statisticsArray.push({...modelTreeVO})
1223
+ this.comFn(this.modelData)
1224
+ break
1225
+ default:
1226
+ break
1227
+ }
1228
+ },
1229
+ async getModelById() {
1230
+ if (!this.modelId) {
1231
+ this.$message.warning('modelId不能为空')
1232
+ return
1233
+ }
1234
+ const {code, data} = await this.$axios.post(
1235
+ '/imes/v1/indicatorModel/getModelById',
1236
+ {
1237
+ id: this.modelId
1238
+ }
1239
+ )
1240
+ if (code === 0) {
1241
+ this.model = data || {}
1242
+ }
1243
+ },
1244
+ async queryCalcResultDetail() {
1245
+ const {code, data} = await this.$axios.post(
1246
+ '/imes/v2/models/queryCalcResultDetail',
1247
+ {id: this.logId}
1248
+ )
1249
+ if (code == 0) {
1250
+ this.modelData = data
1251
+ }
1252
+ },
1253
+ /** 统计模型专用 处理叶子节点为2 */
1254
+ recursionFn(arr) {
1255
+ if (arr.length === 0) return arr
1256
+ arr.forEach(item => {
1257
+ item.label = item.name
1258
+ if (item.isLeaf === 2) {
1259
+ this.$set(
1260
+ item,
1261
+ 'indicatorDeepList',
1262
+ item.children.map(item2 => {
1263
+ return {...item2, label: item.name}
1264
+ })
1265
+ )
1266
+ item.children = []
1267
+ } else {
1268
+ if (item.children?.length) {
1269
+ this.recursionFn(item.children)
1270
+ }
1271
+ }
1272
+ })
1273
+ },
1274
+ /** 页面渲染函数 */
1275
+ comFn(data) {
1276
+ const modelTreeVO = data.modelTreeVO
1277
+ this.typeObj.statisticsArray.forEach(statistics => {
1278
+ this.$set(statistics, 'children', [])
1279
+ this.$set(statistics, 'tableData', [])
1280
+ return statistics
1281
+ })
1282
+ this.typeObj.evalModelArray.forEach(evalModel => {
1283
+ this.$set(evalModel, 'children', [])
1284
+ this.$set(evalModel, 'tableData', [])
1285
+ return evalModel
1286
+ })
1287
+ this.typeObj.assessModelArray.forEach(evalModel => {
1288
+ this.$set(evalModel, 'children', [])
1289
+ this.$set(evalModel, 'tableData', [])
1290
+ return evalModel
1291
+ })
1292
+ const digui = data => {
1293
+ if (data.children && data.children.length > 0) {
1294
+ data.children.map(async item => {
1295
+ // 统计模型 找到先关模型下面的指标项
1296
+ if (item.isLeaf == 2) {
1297
+ if (this.modelData.type == 3) {
1298
+ this.typeObj.statisticsArray.forEach(async statistics => {
1299
+ if (statistics.itemID == item.modelID) {
1300
+ statistics.children.push(item)
1301
+ if (
1302
+ item.indicatorDeepList &&
1303
+ item.indicatorDeepList.length &&
1304
+ item.indicatorDeepList.length > 0
1305
+ ) {
1306
+ const promiseAll = item.indicatorDeepList.map(
1307
+ async itemc => this.itemDataFn(itemc, data)
1308
+ )
1309
+ const objArr = await Promise.all(promiseAll)
1310
+ objArr.map(obj => {
1311
+ statistics.tableData.push({
1312
+ ...obj,
1313
+ pName: item.folderName || item.name
1314
+ })
1315
+ })
1316
+ }
1317
+ }
1318
+ return statistics
1319
+ })
1320
+ } else {
1321
+ this.typeObj.statisticsArray.forEach(async statistics => {
1322
+ if (statistics.itemID == item.modelID) {
1323
+ statistics.children.push(item)
1324
+ if (
1325
+ item.children &&
1326
+ item.children.length &&
1327
+ item.children.length > 0
1328
+ ) {
1329
+ const promiseAll = item.children.map(async itemc =>
1330
+ this.itemDataFn(itemc, data)
1331
+ )
1332
+ const objArr = await Promise.all(promiseAll)
1333
+ objArr.map(obj => {
1334
+ statistics.tableData.push({
1335
+ ...obj,
1336
+ pName: item.folderName || item.name
1337
+ })
1338
+ })
1339
+ }
1340
+ }
1341
+ return statistics
1342
+ })
1343
+ }
1344
+ }
1345
+ // 计算/评价模型
1346
+ if (item.isLeaf == 0) {
1347
+ this.typeObj.evalModelArray.forEach(async evalModel => {
1348
+ if (evalModel.itemID == item.modelID) {
1349
+ evalModel.children.push(item)
1350
+ if (
1351
+ item.children &&
1352
+ item.children.length &&
1353
+ item.children.length > 0
1354
+ ) {
1355
+ const promiseAll = item.children.map(async itemc =>
1356
+ this.itemDataFn(itemc, data)
1357
+ )
1358
+ const objArr = await Promise.all(promiseAll)
1359
+ objArr.map(obj => {
1360
+ evalModel.tableData.push({
1361
+ ...obj,
1362
+ pName: item.folderName || item.name
1363
+ })
1364
+ })
1365
+ }
1366
+ }
1367
+ return evalModel
1368
+ })
1369
+ this.typeObj.assessModelArray.forEach(async assessModel => {
1370
+ if (assessModel.itemID == item.modelID) {
1371
+ assessModel.children.push(item)
1372
+ if (
1373
+ item.children &&
1374
+ item.children.length &&
1375
+ item.children.length > 0
1376
+ ) {
1377
+ const promiseAll = item.children.map(async itemc =>
1378
+ this.itemDataFn(itemc, data)
1379
+ )
1380
+ const objArr = await Promise.all(promiseAll)
1381
+ objArr.map(obj => {
1382
+ assessModel.tableData.push({
1383
+ ...obj,
1384
+ pName: item.folderName || item.name
1385
+ })
1386
+ })
1387
+ }
1388
+ }
1389
+ return assessModel
1390
+ })
1391
+ }
1392
+ // 指标
1393
+ if (item.isLeaf == 1) {
1394
+ this.typeObj.targetArray.forEach(itemc => {
1395
+ if (itemc.itemID === item.itemID && itemc.tid === item.tid) {
1396
+ itemc.result = item.result
1397
+ itemc.indicatorResult = item.indicatorResult
1398
+ itemc.relFormula = item.relFormula
1399
+ itemc.serialNumber = item.serialNumber
1400
+ this.itemDataFn(itemc, data)
1401
+ }
1402
+
1403
+ return itemc
1404
+ })
1405
+ }
1406
+ digui(item)
1407
+ })
1408
+ }
1409
+ }
1410
+
1411
+ digui(modelTreeVO)
1412
+ },
1413
+
1414
+ /** 给指标值赋值 */
1415
+ async itemDataFn(item, data, len) {
1416
+ let value
1417
+ let valueScore
1418
+ if (item.sourceType == 3) {
1419
+ value = item.indicatorResult
1420
+ } else {
1421
+ // 指标项取值方式
1422
+ switch (item.rankType) {
1423
+ // 手工录入
1424
+ case 10:
1425
+ value = item.formula
1426
+ break
1427
+ // 统计项运算
1428
+ case 9:
1429
+ value = item.result
1430
+ break
1431
+ default:
1432
+ value = item.indicatorResult
1433
+ break
1434
+ }
1435
+ }
1436
+ // 不可量化指标 查询选项
1437
+ if (item.itemType == 22) {
1438
+ item.optionList = []
1439
+ // 获取当前时间戳
1440
+ const timestamp = Date.now()
1441
+ // 生成一个随机数
1442
+ const randomNum = Math.floor(Math.random() * 1000000) // 这里生成一个 0 到 999999 之间的整数
1443
+ // 组合时间戳和随机数
1444
+ const randomNumStr = `${timestamp}${randomNum}`
1445
+ const {code, data: optionList} = await this.$axios.post(
1446
+ `/imes/v1/indicator/getScoreMap?randomNumStr=${randomNumStr}`,
1447
+ {id: item.itemID}
1448
+ )
1449
+ if (code == 0) {
1450
+ item.optionList = optionList
1451
+ if (item?.optionList?.length > 0) {
1452
+ value = item.optionList.find(
1453
+ item2 => item2.scoreValue == item.indicatorResult
1454
+ )
1455
+ }
1456
+ }
1457
+ }
1458
+ if (item.weight) {
1459
+ valueScore =
1460
+ item.result || item.result === 0
1461
+ ? this.N_div(
1462
+ this.N_mul(
1463
+ item.result,
1464
+ 100,
1465
+ this.digitsCalc(item.showDigits) + 2
1466
+ ),
1467
+ item.weight,
1468
+ this.digitsCalc(item.showDigits)
1469
+ )
1470
+ : ''
1471
+ } else {
1472
+ valueScore = ''
1473
+ }
1474
+ item.value = value
1475
+ item.valueScore = valueScore
1476
+ item.pName = data.serialNumber
1477
+ ? `${data.serialNumber}. ${data.name}`
1478
+ : data.name
1479
+ return item
1480
+ },
1481
+ // 指标table :isLeaf =1 itemType = [21,22]
1482
+ // 统计模型table : isLeaf=2 itemType = 13
1483
+ // 计算模型table : isLeaf=0 itemType = 11
1484
+ // 评价模型table: isLeaf=0 itemType = 12
1485
+ processingData(modelData) {
1486
+ const modelTreeVO = JSON.parse(JSON.stringify(modelData.modelTreeVO))
1487
+ const digui = data => {
1488
+ if (data.children && data.children.length > 0) {
1489
+ data.children.map(async item => {
1490
+ if (item.isLeaf === 1 || item.isLeaf === 2) {
1491
+ switch (item.itemType) {
1492
+ // 可量化指标
1493
+ case 21: {
1494
+ this.typeObj.targetArray.push({})
1495
+ this.typeObj.targetArray[this.typeObj.targetArray.length - 1] = await this.itemDataFn(item, data)
1496
+ }
1497
+ break
1498
+ // 不可量化指标
1499
+ case 22: {
1500
+ item.optionList = []
1501
+ this.typeObj.targetArray.push({})
1502
+ this.typeObj.targetArray[this.typeObj.targetArray.length - 1] = await this.itemDataFn(item, data)
1503
+ }
1504
+ break
1505
+ // 计算模型
1506
+ case 11: {
1507
+ item.children = []
1508
+ item.tableData = []
1509
+ this.typeObj.evalModelArray.push({...item})
1510
+ this.typeObj.targetArray.push({})
1511
+ this.typeObj.targetArray[this.typeObj.targetArray.length - 1] = await this.itemDataFn(item, data)
1512
+ }
1513
+ break
1514
+ // 评价模型
1515
+ case 12: {
1516
+ item.children = []
1517
+ item.tableData = []
1518
+ this.typeObj.assessModelArray.push({...item})
1519
+ this.typeObj.targetArray.push({})
1520
+ this.typeObj.targetArray[this.typeObj.targetArray.length - 1] = await this.itemDataFn(item, data)
1521
+ }
1522
+
1523
+ break
1524
+ // 统计模型
1525
+ case 13: {
1526
+ item.children = []
1527
+ item.tableData = []
1528
+ this.typeObj.statisticsArray.push({...item})
1529
+ this.typeObj.targetArray.push({})
1530
+ this.typeObj.targetArray[this.typeObj.targetArray.length - 1] = await this.itemDataFn(item, data)
1531
+ }
1532
+ break
1533
+ default:
1534
+ break
1535
+ }
1536
+ } else if (item.isLeaf === 0) {
1537
+ digui(item)
1538
+ }
1539
+ })
1540
+ }
1541
+ }
1542
+ digui(modelTreeVO)
1543
+ },
1544
+ /** 统计模型表头合并 */
1545
+ mergeCells(table, columns) {
1546
+ const arr1 = setMergeCells({
1547
+ list: table,
1548
+ columns: columns,
1549
+ merges: ['pName'],
1550
+ condition: ['pid'],
1551
+ field: 'prop'
1552
+ })
1553
+ return [...arr1]
1554
+ },
1555
+ digitsCalc(showDigits) {
1556
+ if (showDigits || showDigits === 0) {
1557
+ return showDigits
1558
+ } else {
1559
+ return this.modelData.digits
1560
+ }
1561
+ }
1562
+ }
1563
+ }
1564
+ </script>
1565
+
1566
+ <style scoped lang="less">
1567
+ .el-form-item {
1568
+ margin-bottom: 0;
1569
+ }
1570
+ </style>