@nstc-business/imes 1.0.4 → 1.0.5

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,1566 @@
1
+ <template>
2
+ <Page>
3
+ <expandable-pane 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
+ modelId: String,
882
+ logId: String
883
+ },
884
+ watch: {
885
+ logId: {
886
+ handler(value) {
887
+ if (value) {
888
+ this.init()
889
+ }
890
+ },
891
+ immediate: true
892
+ }
893
+ },
894
+ components: {Page, ExpandablePane, Descriptions, TablePro},
895
+ data() {
896
+ return {
897
+ // 拆分数结构为三类数据
898
+ typeObj: {
899
+ // 指标数组
900
+ targetArray: [],
901
+ // 统计模型数组
902
+ statisticsArray: [],
903
+ // 计算模型数组
904
+ evalModelArray: [],
905
+ // 评价模型数组
906
+ assessModelArray: []
907
+ },
908
+ tabelHeadersAssessModel: [
909
+ {
910
+ label: '分组',
911
+ prop: 'pName',
912
+ align: 'center',
913
+ minWidth: 150,
914
+ 'show-overflow-tooltip': true
915
+ },
916
+ {
917
+ label: '序号',
918
+ prop: 'serialNumber',
919
+ align: 'center',
920
+ minWidth: 100,
921
+ 'show-overflow-tooltip': true
922
+ },
923
+ {
924
+ label: '指标名称',
925
+ prop: 'name',
926
+ align: 'center',
927
+ minWidth: 150,
928
+ 'show-overflow-tooltip': true
929
+ },
930
+ {
931
+ label: '指标编号',
932
+ prop: 'code',
933
+ align: 'center',
934
+ minWidth: 150,
935
+ 'show-overflow-tooltip': true
936
+ },
937
+ {
938
+ label: '占模型权重(%)',
939
+ prop: 'weight',
940
+ align: 'center',
941
+ minWidth: 150,
942
+ formatter: 'formatRate',
943
+ 'show-overflow-tooltip': true
944
+ },
945
+ {
946
+ label: '指标满分值',
947
+ prop: 'fullScore',
948
+ align: 'center',
949
+ minWidth: 150,
950
+ formatter: 'formatRate',
951
+ 'show-overflow-tooltip': true
952
+ },
953
+ {
954
+ label: '指标调整项',
955
+ prop: 'modifyRank',
956
+ align: 'center',
957
+ minWidth: 100,
958
+ 'show-overflow-tooltip': true,
959
+ formatter: [
960
+ 'formatSelect',
961
+ [
962
+ {label: '不调整', value: 0},
963
+ {
964
+ label: '指标得分',
965
+ value: 1
966
+ },
967
+ {label: '指标值', value: 2}
968
+ ]
969
+ ]
970
+ },
971
+ {
972
+ label: '指标值',
973
+ prop: 'indicatorResult',
974
+ slotName: 'indicatorResult',
975
+ align: 'center',
976
+ minWidth: 150,
977
+ 'show-overflow-tooltip': false
978
+ },
979
+ {
980
+ label: '调整后指标值',
981
+ prop: 'modifiedVal',
982
+ align: 'center',
983
+ minWidth: 150,
984
+ 'show-overflow-tooltip': true,
985
+ type: 'html',
986
+ formatter: ({cellValue, row}) => {
987
+ return `<span>${
988
+ row.modifyRank === 2
989
+ ? row.displayStyle === 1
990
+ ? formatFloat2(cellValue / 100, this.modelData.digits) + '%'
991
+ : cellValue
992
+ : '--'
993
+ }</span>`
994
+ }
995
+ },
996
+ {
997
+ label: '指标得分',
998
+ prop: 'value',
999
+ slotName: 'value',
1000
+ align: 'center',
1001
+ minWidth: 150,
1002
+ 'show-overflow-tooltip': false
1003
+ },
1004
+ {
1005
+ label: '模型指标得分',
1006
+ prop: 'result',
1007
+ slotName: 'result',
1008
+ align: 'center',
1009
+ minWidth: 150,
1010
+ 'show-overflow-tooltip': false
1011
+ },
1012
+ {
1013
+ label: '调整后模型指标得分',
1014
+ prop: 'modifiedResult',
1015
+ align: 'center',
1016
+ minWidth: 150,
1017
+ 'show-overflow-tooltip': false
1018
+ }
1019
+ ],
1020
+ tabelHeadersEvalModel: [
1021
+ {
1022
+ label: '分组',
1023
+ prop: 'pName',
1024
+ align: 'center',
1025
+ minWidth: 150,
1026
+ 'show-overflow-tooltip': true
1027
+ },
1028
+ {
1029
+ label: '序号',
1030
+ prop: 'serialNumber',
1031
+ align: 'center',
1032
+ minWidth: 100,
1033
+ 'show-overflow-tooltip': true
1034
+ },
1035
+ {
1036
+ label: '指标名称',
1037
+ prop: 'name',
1038
+ align: 'center',
1039
+ minWidth: 150,
1040
+ 'show-overflow-tooltip': true
1041
+ },
1042
+ {
1043
+ label: '指标编号',
1044
+ prop: 'code',
1045
+ align: 'center',
1046
+ minWidth: 150,
1047
+ 'show-overflow-tooltip': true
1048
+ },
1049
+ {
1050
+ label: '模型指标系数名称',
1051
+ prop: 'ratioName',
1052
+ align: 'center',
1053
+ minWidth: 150,
1054
+ 'show-overflow-tooltip': false
1055
+ },
1056
+ {
1057
+ label: '指标调整项',
1058
+ prop: 'modifyRank',
1059
+ align: 'center',
1060
+ minWidth: 100,
1061
+ 'show-overflow-tooltip': true,
1062
+ formatter: [
1063
+ 'formatSelect',
1064
+ [
1065
+ {label: '不调整', value: 0},
1066
+ {
1067
+ label: '指标得分',
1068
+ value: 1
1069
+ },
1070
+ {label: '指标值', value: 2}
1071
+ ]
1072
+ ]
1073
+ },
1074
+ {
1075
+ label: '指标值',
1076
+ prop: 'indicatorResult',
1077
+ slotName: 'indicatorResult',
1078
+ align: 'center',
1079
+ minWidth: 150,
1080
+ 'show-overflow-tooltip': false
1081
+ },
1082
+ {
1083
+ label: '调整后指标值',
1084
+ prop: 'modifiedVal',
1085
+ align: 'center',
1086
+ minWidth: 150,
1087
+ 'show-overflow-tooltip': true,
1088
+ type: 'html',
1089
+ formatter: ({cellValue, row}) => {
1090
+ return `<span>${
1091
+ row.modifyRank === 2
1092
+ ? row.displayStyle === 1
1093
+ ? formatFloat2(cellValue / 100, this.modelData.digits) + '%'
1094
+ : cellValue
1095
+ : '--'
1096
+ }</span>`
1097
+ }
1098
+ },
1099
+ {
1100
+ label: '模型指标取值结果',
1101
+ prop: 'result',
1102
+ slotName: 'result',
1103
+ align: 'center',
1104
+ minWidth: 150,
1105
+ 'show-overflow-tooltip': false
1106
+ }
1107
+ ],
1108
+ tabelHeadersStatistics: [
1109
+ {
1110
+ label: '指标项',
1111
+ prop: 'pName',
1112
+ align: 'center',
1113
+ minWidth: 150,
1114
+ 'show-overflow-tooltip': true
1115
+ },
1116
+ {
1117
+ label: '统计项名称',
1118
+ prop: 'statsName',
1119
+ align: 'center',
1120
+ minWidth: 150,
1121
+ 'show-overflow-tooltip': true
1122
+ },
1123
+ {
1124
+ label: '指标名称',
1125
+ prop: 'name',
1126
+ align: 'center',
1127
+ minWidth: 150,
1128
+ 'show-overflow-tooltip': true
1129
+ },
1130
+ {
1131
+ label: '指标编号',
1132
+ prop: 'code',
1133
+ align: 'center',
1134
+ minWidth: 150,
1135
+ 'show-overflow-tooltip': true
1136
+ },
1137
+ {
1138
+ label: '指标值',
1139
+ prop: 'indicatorResult',
1140
+ slotName: 'indicatorResult',
1141
+ align: 'center',
1142
+ minWidth: 250,
1143
+ 'show-overflow-tooltip': false
1144
+ },
1145
+ {
1146
+ label: '指标值显示',
1147
+ prop: 'indicatorValText',
1148
+ align: 'center',
1149
+ minWidth: 150,
1150
+ 'show-overflow-tooltip': false
1151
+ },
1152
+ {
1153
+ label: '统计结果',
1154
+ prop: 'result',
1155
+ slotName: 'result',
1156
+ align: 'center',
1157
+ minWidth: 150,
1158
+ 'show-overflow-tooltip': false
1159
+ }
1160
+ ],
1161
+ modelData: {},
1162
+ model: {}
1163
+ }
1164
+ },
1165
+ computed: {
1166
+ tabelHeadersTarget() {
1167
+ if (this.modelData.type === 1) {
1168
+ return this.tabelHeadersAssessModel
1169
+ } else if (this.modelData.type === 2) {
1170
+ return this.tabelHeadersEvalModel
1171
+ } else if (this.modelData.type === 3) {
1172
+ return this.tabelHeadersStatistics
1173
+ } else {
1174
+ return []
1175
+ }
1176
+ }
1177
+ },
1178
+ methods: {
1179
+ toFixedTrunc,
1180
+ addThousands,
1181
+ N_add(a, b, w) {
1182
+ return N.add(a, b, w)
1183
+ },
1184
+ N_mul(a, b, w) {
1185
+ return N.mul(a, b, w)
1186
+ },
1187
+ N_div(a, b, w) {
1188
+ return N.div(a, b, w)
1189
+ },
1190
+ async init() {
1191
+ await this.getModelById()
1192
+ if (this.model.showLevel !== 1) {
1193
+ this.tabelHeadersAssessModel = this.tabelHeadersAssessModel.filter(
1194
+ item => item.prop !== 'serialNumber'
1195
+ )
1196
+ this.tabelHeadersEvalModel = this.tabelHeadersEvalModel.filter(
1197
+ item => item.prop !== 'serialNumber'
1198
+ )
1199
+ }
1200
+ switch (this.model.type) {
1201
+ case 1:
1202
+ case 2:
1203
+ if (this.model.code) {
1204
+ this.processingData(this.model)
1205
+ await this.queryCalcResultDetail()
1206
+ this.comFn(this.modelData)
1207
+ }
1208
+ break
1209
+ case 3:
1210
+ await this.queryCalcResultDetail()
1211
+ this.recursionFn([this.modelData.modelTreeVO])
1212
+ const modelTreeVO = JSON.parse(
1213
+ JSON.stringify(this.modelData.modelTreeVO)
1214
+ )
1215
+ modelTreeVO.itemID = modelTreeVO.modelID
1216
+ modelTreeVO.tableData = []
1217
+ modelTreeVO.children = []
1218
+ this.typeObj.statisticsArray.push({...modelTreeVO})
1219
+ this.comFn(this.modelData)
1220
+ break
1221
+ default:
1222
+ break
1223
+ }
1224
+ },
1225
+ async getModelById() {
1226
+ if (!this.modelId) {
1227
+ this.$message.warning('modelId不能为空')
1228
+ return
1229
+ }
1230
+ const {code, data} = await this.$axios.post(
1231
+ '/imes/v1/indicatorModel/getModelById',
1232
+ {
1233
+ id: this.modelId
1234
+ }
1235
+ )
1236
+ if (code === 0) {
1237
+ this.model = data || {}
1238
+ }
1239
+ },
1240
+ async queryCalcResultDetail() {
1241
+ const {code, data} = await this.$axios.post(
1242
+ '/imes/v2/models/queryCalcResultDetail',
1243
+ {id: this.logId}
1244
+ )
1245
+ if (code == 0) {
1246
+ this.modelData = data
1247
+ }
1248
+ },
1249
+ /** 统计模型专用 处理叶子节点为2 */
1250
+ recursionFn(arr) {
1251
+ if (arr.length === 0) return arr
1252
+ arr.forEach(item => {
1253
+ item.label = item.name
1254
+ if (item.isLeaf === 2) {
1255
+ this.$set(
1256
+ item,
1257
+ 'indicatorDeepList',
1258
+ item.children.map(item2 => {
1259
+ return {...item2, label: item.name}
1260
+ })
1261
+ )
1262
+ item.children = []
1263
+ } else {
1264
+ if (item.children?.length) {
1265
+ this.recursionFn(item.children)
1266
+ }
1267
+ }
1268
+ })
1269
+ },
1270
+ /** 页面渲染函数 */
1271
+ comFn(data) {
1272
+ const modelTreeVO = data.modelTreeVO
1273
+ this.typeObj.statisticsArray.forEach(statistics => {
1274
+ this.$set(statistics, 'children', [])
1275
+ this.$set(statistics, 'tableData', [])
1276
+ return statistics
1277
+ })
1278
+ this.typeObj.evalModelArray.forEach(evalModel => {
1279
+ this.$set(evalModel, 'children', [])
1280
+ this.$set(evalModel, 'tableData', [])
1281
+ return evalModel
1282
+ })
1283
+ this.typeObj.assessModelArray.forEach(evalModel => {
1284
+ this.$set(evalModel, 'children', [])
1285
+ this.$set(evalModel, 'tableData', [])
1286
+ return evalModel
1287
+ })
1288
+ const digui = data => {
1289
+ if (data.children && data.children.length > 0) {
1290
+ data.children.map(async item => {
1291
+ // 统计模型 找到先关模型下面的指标项
1292
+ if (item.isLeaf == 2) {
1293
+ if (this.modelData.type == 3) {
1294
+ this.typeObj.statisticsArray.forEach(async statistics => {
1295
+ if (statistics.itemID == item.modelID) {
1296
+ statistics.children.push(item)
1297
+ if (
1298
+ item.indicatorDeepList &&
1299
+ item.indicatorDeepList.length &&
1300
+ item.indicatorDeepList.length > 0
1301
+ ) {
1302
+ const promiseAll = item.indicatorDeepList.map(
1303
+ async itemc => this.itemDataFn(itemc, data)
1304
+ )
1305
+ const objArr = await Promise.all(promiseAll)
1306
+ objArr.map(obj => {
1307
+ statistics.tableData.push({
1308
+ ...obj,
1309
+ pName: item.folderName || item.name
1310
+ })
1311
+ })
1312
+ }
1313
+ }
1314
+ return statistics
1315
+ })
1316
+ } else {
1317
+ this.typeObj.statisticsArray.forEach(async statistics => {
1318
+ if (statistics.itemID == item.modelID) {
1319
+ statistics.children.push(item)
1320
+ if (
1321
+ item.children &&
1322
+ item.children.length &&
1323
+ item.children.length > 0
1324
+ ) {
1325
+ const promiseAll = item.children.map(async itemc =>
1326
+ this.itemDataFn(itemc, data)
1327
+ )
1328
+ const objArr = await Promise.all(promiseAll)
1329
+ objArr.map(obj => {
1330
+ statistics.tableData.push({
1331
+ ...obj,
1332
+ pName: item.folderName || item.name
1333
+ })
1334
+ })
1335
+ }
1336
+ }
1337
+ return statistics
1338
+ })
1339
+ }
1340
+ }
1341
+ // 计算/评价模型
1342
+ if (item.isLeaf == 0) {
1343
+ this.typeObj.evalModelArray.forEach(async evalModel => {
1344
+ if (evalModel.itemID == item.modelID) {
1345
+ evalModel.children.push(item)
1346
+ if (
1347
+ item.children &&
1348
+ item.children.length &&
1349
+ item.children.length > 0
1350
+ ) {
1351
+ const promiseAll = item.children.map(async itemc =>
1352
+ this.itemDataFn(itemc, data)
1353
+ )
1354
+ const objArr = await Promise.all(promiseAll)
1355
+ objArr.map(obj => {
1356
+ evalModel.tableData.push({
1357
+ ...obj,
1358
+ pName: item.folderName || item.name
1359
+ })
1360
+ })
1361
+ }
1362
+ }
1363
+ return evalModel
1364
+ })
1365
+ this.typeObj.assessModelArray.forEach(async assessModel => {
1366
+ if (assessModel.itemID == item.modelID) {
1367
+ assessModel.children.push(item)
1368
+ if (
1369
+ item.children &&
1370
+ item.children.length &&
1371
+ item.children.length > 0
1372
+ ) {
1373
+ const promiseAll = item.children.map(async itemc =>
1374
+ this.itemDataFn(itemc, data)
1375
+ )
1376
+ const objArr = await Promise.all(promiseAll)
1377
+ objArr.map(obj => {
1378
+ assessModel.tableData.push({
1379
+ ...obj,
1380
+ pName: item.folderName || item.name
1381
+ })
1382
+ })
1383
+ }
1384
+ }
1385
+ return assessModel
1386
+ })
1387
+ }
1388
+ // 指标
1389
+ if (item.isLeaf == 1) {
1390
+ this.typeObj.targetArray.forEach(itemc => {
1391
+ if (itemc.itemID === item.itemID && itemc.tid === item.tid) {
1392
+ itemc.result = item.result
1393
+ itemc.indicatorResult = item.indicatorResult
1394
+ itemc.relFormula = item.relFormula
1395
+ itemc.serialNumber = item.serialNumber
1396
+ this.itemDataFn(itemc, data)
1397
+ }
1398
+
1399
+ return itemc
1400
+ })
1401
+ }
1402
+ digui(item)
1403
+ })
1404
+ }
1405
+ }
1406
+
1407
+ digui(modelTreeVO)
1408
+ },
1409
+
1410
+ /** 给指标值赋值 */
1411
+ async itemDataFn(item, data, len) {
1412
+ let value
1413
+ let valueScore
1414
+ if (item.sourceType == 3) {
1415
+ value = item.indicatorResult
1416
+ } else {
1417
+ // 指标项取值方式
1418
+ switch (item.rankType) {
1419
+ // 手工录入
1420
+ case 10:
1421
+ value = item.formula
1422
+ break
1423
+ // 统计项运算
1424
+ case 9:
1425
+ value = item.result
1426
+ break
1427
+ default:
1428
+ value = item.indicatorResult
1429
+ break
1430
+ }
1431
+ }
1432
+ // 不可量化指标 查询选项
1433
+ if (item.itemType == 22) {
1434
+ item.optionList = []
1435
+ // 获取当前时间戳
1436
+ const timestamp = Date.now()
1437
+ // 生成一个随机数
1438
+ const randomNum = Math.floor(Math.random() * 1000000) // 这里生成一个 0 到 999999 之间的整数
1439
+ // 组合时间戳和随机数
1440
+ const randomNumStr = `${timestamp}${randomNum}`
1441
+ const {code, data: optionList} = await this.$axios.post(
1442
+ `/imes/v1/indicator/getScoreMap?randomNumStr=${randomNumStr}`,
1443
+ {id: item.itemID}
1444
+ )
1445
+ if (code == 0) {
1446
+ item.optionList = optionList
1447
+ if (item?.optionList?.length > 0) {
1448
+ value = item.optionList.find(
1449
+ item2 => item2.scoreValue == item.indicatorResult
1450
+ )
1451
+ }
1452
+ }
1453
+ }
1454
+ if (item.weight) {
1455
+ valueScore =
1456
+ item.result || item.result === 0
1457
+ ? this.N_div(
1458
+ this.N_mul(
1459
+ item.result,
1460
+ 100,
1461
+ this.digitsCalc(item.showDigits) + 2
1462
+ ),
1463
+ item.weight,
1464
+ this.digitsCalc(item.showDigits)
1465
+ )
1466
+ : ''
1467
+ } else {
1468
+ valueScore = ''
1469
+ }
1470
+ item.value = value
1471
+ item.valueScore = valueScore
1472
+ item.pName = data.serialNumber
1473
+ ? `${data.serialNumber}. ${data.name}`
1474
+ : data.name
1475
+ return item
1476
+ },
1477
+ // 指标table :isLeaf =1 itemType = [21,22]
1478
+ // 统计模型table : isLeaf=2 itemType = 13
1479
+ // 计算模型table : isLeaf=0 itemType = 11
1480
+ // 评价模型table: isLeaf=0 itemType = 12
1481
+ processingData(modelData) {
1482
+ const modelTreeVO = JSON.parse(JSON.stringify(modelData.modelTreeVO))
1483
+ const digui = data => {
1484
+ if (data.children && data.children.length > 0) {
1485
+ data.children.map(async item => {
1486
+ if (item.isLeaf === 1 || item.isLeaf === 2) {
1487
+ switch (item.itemType) {
1488
+ // 可量化指标
1489
+ case 21: {
1490
+ this.typeObj.targetArray.push({})
1491
+ this.typeObj.targetArray[this.typeObj.targetArray.length - 1] = await this.itemDataFn(item, data)
1492
+ }
1493
+ break
1494
+ // 不可量化指标
1495
+ case 22: {
1496
+ item.optionList = []
1497
+ this.typeObj.targetArray.push({})
1498
+ this.typeObj.targetArray[this.typeObj.targetArray.length - 1] = await this.itemDataFn(item, data)
1499
+ }
1500
+ break
1501
+ // 计算模型
1502
+ case 11: {
1503
+ item.children = []
1504
+ item.tableData = []
1505
+ this.typeObj.evalModelArray.push({...item})
1506
+ this.typeObj.targetArray.push({})
1507
+ this.typeObj.targetArray[this.typeObj.targetArray.length - 1] = await this.itemDataFn(item, data)
1508
+ }
1509
+ break
1510
+ // 评价模型
1511
+ case 12: {
1512
+ item.children = []
1513
+ item.tableData = []
1514
+ this.typeObj.assessModelArray.push({...item})
1515
+ this.typeObj.targetArray.push({})
1516
+ this.typeObj.targetArray[this.typeObj.targetArray.length - 1] = await this.itemDataFn(item, data)
1517
+ }
1518
+
1519
+ break
1520
+ // 统计模型
1521
+ case 13: {
1522
+ item.children = []
1523
+ item.tableData = []
1524
+ this.typeObj.statisticsArray.push({...item})
1525
+ this.typeObj.targetArray.push({})
1526
+ this.typeObj.targetArray[this.typeObj.targetArray.length - 1] = await this.itemDataFn(item, data)
1527
+ }
1528
+ break
1529
+ default:
1530
+ break
1531
+ }
1532
+ } else if (item.isLeaf === 0) {
1533
+ digui(item)
1534
+ }
1535
+ })
1536
+ }
1537
+ }
1538
+ digui(modelTreeVO)
1539
+ },
1540
+ /** 统计模型表头合并 */
1541
+ mergeCells(table, columns) {
1542
+ const arr1 = setMergeCells({
1543
+ list: table,
1544
+ columns: columns,
1545
+ merges: ['pName'],
1546
+ condition: ['pid'],
1547
+ field: 'prop'
1548
+ })
1549
+ return [...arr1]
1550
+ },
1551
+ digitsCalc(showDigits) {
1552
+ if (showDigits || showDigits === 0) {
1553
+ return showDigits
1554
+ } else {
1555
+ return this.modelData.digits
1556
+ }
1557
+ }
1558
+ }
1559
+ }
1560
+ </script>
1561
+
1562
+ <style scoped lang="less">
1563
+ .el-form-item {
1564
+ margin-bottom: 0;
1565
+ }
1566
+ </style>