vue2-client 1.8.147 → 1.8.149
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.
- package/package.json +1 -1
- package/src/base-client/components/common/XReport/XReport.vue +38 -14
- package/src/base-client/components/common/XReport/XReportDesign.vue +105 -96
- package/src/base-client/components/common/XReport/XReportJsonRender.vue +161 -0
- package/src/base-client/components/common/XTable/XTable.vue +3 -1
- package/src/pages/Example/index.vue +42 -1
package/package.json
CHANGED
|
@@ -7,14 +7,14 @@
|
|
|
7
7
|
<a-card v-else>
|
|
8
8
|
<!-- 切换菜单 -->
|
|
9
9
|
<a-radio-group v-model="type" default-value="a" button-style="solid" @change="tabChanged">
|
|
10
|
-
<a-radio-button value="design">
|
|
10
|
+
<a-radio-button value="design" v-if="!onlyDisplay">
|
|
11
11
|
设计
|
|
12
12
|
</a-radio-button>
|
|
13
13
|
<a-radio-button value="display" style="border-radius: 0">
|
|
14
14
|
预览
|
|
15
15
|
</a-radio-button>
|
|
16
16
|
</a-radio-group>
|
|
17
|
-
<a-radio-button @click="saveConfig" style="border-radius: 0 4px 4px 0">
|
|
17
|
+
<a-radio-button @click="saveConfig" style="border-radius: 0 4px 4px 0" v-if="!onlyDisplay">
|
|
18
18
|
保存
|
|
19
19
|
</a-radio-button>
|
|
20
20
|
<!-- 主体表格 -->
|
|
@@ -90,6 +90,7 @@ export default {
|
|
|
90
90
|
showSkeleton: true,
|
|
91
91
|
config: undefined,
|
|
92
92
|
type: 'design',
|
|
93
|
+
onlyDisplay: false,
|
|
93
94
|
maxColSpan: 12,
|
|
94
95
|
// 定义是否完成配置的扫描,未完成不要渲染子组件
|
|
95
96
|
scanFinish: false,
|
|
@@ -531,21 +532,29 @@ export default {
|
|
|
531
532
|
})
|
|
532
533
|
}
|
|
533
534
|
}, 100)
|
|
534
|
-
}
|
|
535
|
+
},
|
|
536
|
+
// 初始化JSON配置
|
|
537
|
+
jsonConfigInit () {
|
|
538
|
+
if (this.configData === undefined) {
|
|
539
|
+
console.error('未找到数据!')
|
|
540
|
+
} else {
|
|
541
|
+
this.originalConfig = Object.assign({}, this.localConfig)
|
|
542
|
+
this.originalConfig.data = JSON.parse(JSON.stringify(this.configData))
|
|
543
|
+
this.type = 'display'
|
|
544
|
+
this.onlyDisplay = true
|
|
545
|
+
this.showSkeleton = false
|
|
546
|
+
this.$nextTick(() => {
|
|
547
|
+
this.scanFinish = true
|
|
548
|
+
})
|
|
549
|
+
}
|
|
550
|
+
},
|
|
535
551
|
},
|
|
536
552
|
beforeMount () {
|
|
537
553
|
if (this.localConfig) {
|
|
538
|
-
this.
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
if (this.config.data.images === undefined) {
|
|
543
|
-
this.config.data.images = {}
|
|
544
|
-
}
|
|
545
|
-
this.configInit()
|
|
546
|
-
} else {
|
|
547
|
-
getConfigByName(this.configName, 'af-system', res => {
|
|
548
|
-
this.config = res
|
|
554
|
+
if (this.localConfig.designMode === 'json') {
|
|
555
|
+
this.jsonConfigInit()
|
|
556
|
+
} else {
|
|
557
|
+
this.config = this.localConfig
|
|
549
558
|
if (this.configData !== undefined) {
|
|
550
559
|
this.config.data = this.configData
|
|
551
560
|
}
|
|
@@ -553,6 +562,21 @@ export default {
|
|
|
553
562
|
this.config.data.images = {}
|
|
554
563
|
}
|
|
555
564
|
this.configInit()
|
|
565
|
+
}
|
|
566
|
+
} else {
|
|
567
|
+
getConfigByName(this.configName, 'af-system', res => {
|
|
568
|
+
this.config = res
|
|
569
|
+
if (this.config.designMode === 'json') {
|
|
570
|
+
this.jsonConfigInit()
|
|
571
|
+
} else {
|
|
572
|
+
if (this.configData !== undefined) {
|
|
573
|
+
this.config.data = this.configData
|
|
574
|
+
}
|
|
575
|
+
if (this.config.data.images === undefined) {
|
|
576
|
+
this.config.data.images = {}
|
|
577
|
+
}
|
|
578
|
+
this.configInit()
|
|
579
|
+
}
|
|
556
580
|
})
|
|
557
581
|
}
|
|
558
582
|
}
|
|
@@ -1,113 +1,121 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
<
|
|
7
|
-
<div class="
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
<
|
|
12
|
-
<div class="
|
|
13
|
-
<
|
|
14
|
-
<span
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
2
|
+
<div>
|
|
3
|
+
<template v-if="this.activatedConfig.designMode === 'json'">
|
|
4
|
+
<XReportJsonRender :config="activatedConfig"/>
|
|
5
|
+
</template>
|
|
6
|
+
<template v-else>
|
|
7
|
+
<div class="reportMain" :style="activatedConfig.width > 0 ? ('width:' + activatedConfig.width + 'px') : undefined">
|
|
8
|
+
<!-- 大标题 -->
|
|
9
|
+
<h2 class="reportTitle" v-if="activatedConfig.title" v-html="activatedConfig.title"></h2>
|
|
10
|
+
<!-- 小标题 / 介乎于标题与表格之间的内容 -->
|
|
11
|
+
<div class="subTitle" v-if="activatedConfig.subTitle">
|
|
12
|
+
<div class="subTitleItems" v-for="(item, itemIndex) in activatedConfig.subTitle" :key="itemIndex">
|
|
13
|
+
<template v-if="item.type === 'column'">
|
|
14
|
+
<span>{{ item.text }}</span>
|
|
15
|
+
</template>
|
|
16
|
+
<template v-else-if="item.type === 'inputs'">
|
|
17
|
+
<div class="inputsDiv">
|
|
18
|
+
<div class="inputsDivItem" v-for="(num, index) of calcFormatInputNum(item.format)" :key="index">
|
|
19
|
+
<span class="inputsDivItemLabel">{{ displayFormatStartText(item.format) }}</span>
|
|
20
|
+
<template v-if="!forDisplay">
|
|
21
|
+
<template v-if="item.inputReadOnly === true">
|
|
22
|
+
<a-input v-model="data[item.dataIndex][index]" :style="'width:' + (item.inputWidth ? item.inputWidth : '100') + '%'" :disabled="true"/>
|
|
23
|
+
</template>
|
|
24
|
+
<template v-else>
|
|
25
|
+
<a-input v-model="data[item.dataIndex][index]" :style="'width:' + (item.inputWidth ? item.inputWidth : '100') + '%'"/>
|
|
26
|
+
</template>
|
|
27
|
+
</template>
|
|
28
|
+
<template v-else>
|
|
29
|
+
{{ activatedConfig.data[item.dataIndex][index] }}
|
|
30
|
+
</template>
|
|
31
|
+
<span class="inputsDivItemLabel">{{ displayFormatText(item.format, index) }}</span>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
</template>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
<!-- 主体表格 -->
|
|
38
|
+
<table class="reportTable" v-if="render" :style="activatedConfig.style ? activatedConfig.style : undefined">
|
|
39
|
+
<tbody class="reportTable">
|
|
40
|
+
<template v-for="(row, rowIndex) in activatedConfig.columns">
|
|
41
|
+
<!-- 插槽展示 -->
|
|
42
|
+
<!-- <template v-if="row[0].type === 'slot'">-->
|
|
43
|
+
<!-- <XReportSlot :config="activatedConfig" v-if="render" :slot-config-name="row[0].slotConfig" :key="rowIndex" :for-display="forDisplay"></XReportSlot>-->
|
|
44
|
+
<!-- </template>-->
|
|
45
|
+
<!-- 普通行 -->
|
|
46
|
+
<template v-if="row[0].type !== 'inputColumns' && row[0].type !== 'list'">
|
|
47
|
+
<template v-if="!forDisplay">
|
|
48
|
+
<x-report-tr-group :key="rowIndex" :columns="row" :config-data="activatedConfig.data"></x-report-tr-group>
|
|
18
49
|
</template>
|
|
19
50
|
<template v-else>
|
|
20
|
-
<
|
|
51
|
+
<x-report-tr-group :config="activatedConfig" :key="rowIndex" :columns="row" :config-data="activatedConfig.data" :display="true"></x-report-tr-group>
|
|
21
52
|
</template>
|
|
22
53
|
</template>
|
|
54
|
+
<!-- 列表 -->
|
|
55
|
+
<template v-else-if="row[0].type === 'list'" v-for="(num, listIndex) in row[0].listLength">
|
|
56
|
+
<template v-if="!forDisplay">
|
|
57
|
+
<x-report-tr-group
|
|
58
|
+
:key="rowIndex + listIndex"
|
|
59
|
+
:columns="row"
|
|
60
|
+
:config-data="activatedConfig.data"
|
|
61
|
+
:list-index="listIndex">
|
|
62
|
+
</x-report-tr-group>
|
|
63
|
+
</template>
|
|
64
|
+
<template v-else>
|
|
65
|
+
<x-report-tr-group
|
|
66
|
+
:config="activatedConfig"
|
|
67
|
+
:key="rowIndex + listIndex"
|
|
68
|
+
:columns="row"
|
|
69
|
+
:config-data="activatedConfig.data"
|
|
70
|
+
:list-index="listIndex"
|
|
71
|
+
:display="true">
|
|
72
|
+
</x-report-tr-group>
|
|
73
|
+
</template>
|
|
74
|
+
</template>
|
|
75
|
+
<!-- 动态行 -->
|
|
23
76
|
<template v-else>
|
|
24
|
-
|
|
77
|
+
<template v-if="forDisplay">
|
|
78
|
+
<x-report-tr-group
|
|
79
|
+
:columns="row[0].definition"
|
|
80
|
+
:config-data="{arr: activatedConfig.data[row[0].dataIndex]}"
|
|
81
|
+
:input-columns="true"
|
|
82
|
+
v-for="(item, definitionIndex) in activatedConfig.data[row[0].dataIndex]"
|
|
83
|
+
:input-columns-definition-index="definitionIndex"
|
|
84
|
+
:display="true"
|
|
85
|
+
:key="row[0].dataIndex + definitionIndex + rowIndex"></x-report-tr-group>
|
|
86
|
+
</template>
|
|
87
|
+
<template v-if="!forDisplay">
|
|
88
|
+
<x-report-tr-group
|
|
89
|
+
:columns="row[0].definition"
|
|
90
|
+
:config-data="{arr: activatedConfig.data[row[0].dataIndex]}"
|
|
91
|
+
:input-columns="true"
|
|
92
|
+
v-for="(item, definitionIndex) in activatedConfig.data[row[0].dataIndex]"
|
|
93
|
+
:input-columns-definition-index="definitionIndex"
|
|
94
|
+
:key="row[0].dataIndex + definitionIndex + rowIndex"></x-report-tr-group>
|
|
95
|
+
<!-- 动态行交互按钮 -->
|
|
96
|
+
<x-report-tr-group :key="rowIndex" :columns="row" :config-data="activatedConfig.data" :input-columns-button="true" :input-columns="true"></x-report-tr-group>
|
|
97
|
+
</template>
|
|
25
98
|
</template>
|
|
26
|
-
<span class="inputsDivItemLabel">{{ displayFormatText(item.format, index) }}</span>
|
|
27
|
-
</div>
|
|
28
|
-
</div>
|
|
29
|
-
</template>
|
|
30
|
-
</div>
|
|
31
|
-
</div>
|
|
32
|
-
<!-- 主体表格 -->
|
|
33
|
-
<table class="reportTable" v-if="render" :style="activatedConfig.style ? activatedConfig.style : undefined">
|
|
34
|
-
<tbody class="reportTable">
|
|
35
|
-
<template v-for="(row, rowIndex) in activatedConfig.columns">
|
|
36
|
-
<!-- 插槽展示 -->
|
|
37
|
-
<!-- <template v-if="row[0].type === 'slot'">-->
|
|
38
|
-
<!-- <XReportSlot :config="activatedConfig" v-if="render" :slot-config-name="row[0].slotConfig" :key="rowIndex" :for-display="forDisplay"></XReportSlot>-->
|
|
39
|
-
<!-- </template>-->
|
|
40
|
-
<!-- 普通行 -->
|
|
41
|
-
<template v-if="row[0].type !== 'inputColumns' && row[0].type !== 'list'">
|
|
42
|
-
<template v-if="!forDisplay">
|
|
43
|
-
<x-report-tr-group :key="rowIndex" :columns="row" :config-data="activatedConfig.data"></x-report-tr-group>
|
|
44
|
-
</template>
|
|
45
|
-
<template v-else>
|
|
46
|
-
<x-report-tr-group :config="activatedConfig" :key="rowIndex" :columns="row" :config-data="activatedConfig.data" :display="true"></x-report-tr-group>
|
|
47
|
-
</template>
|
|
48
|
-
</template>
|
|
49
|
-
<!-- 列表 -->
|
|
50
|
-
<template v-else-if="row[0].type === 'list'" v-for="(num, listIndex) in row[0].listLength">
|
|
51
|
-
<template v-if="!forDisplay">
|
|
52
|
-
<x-report-tr-group
|
|
53
|
-
:key="rowIndex + listIndex"
|
|
54
|
-
:columns="row"
|
|
55
|
-
:config-data="activatedConfig.data"
|
|
56
|
-
:list-index="listIndex">
|
|
57
|
-
</x-report-tr-group>
|
|
58
|
-
</template>
|
|
59
|
-
<template v-else>
|
|
60
|
-
<x-report-tr-group
|
|
61
|
-
:config="activatedConfig"
|
|
62
|
-
:key="rowIndex + listIndex"
|
|
63
|
-
:columns="row"
|
|
64
|
-
:config-data="activatedConfig.data"
|
|
65
|
-
:list-index="listIndex"
|
|
66
|
-
:display="true">
|
|
67
|
-
</x-report-tr-group>
|
|
68
|
-
</template>
|
|
69
|
-
</template>
|
|
70
|
-
<!-- 动态行 -->
|
|
71
|
-
<template v-else>
|
|
72
|
-
<template v-if="forDisplay">
|
|
73
|
-
<x-report-tr-group
|
|
74
|
-
:columns="row[0].definition"
|
|
75
|
-
:config-data="{arr: activatedConfig.data[row[0].dataIndex]}"
|
|
76
|
-
:input-columns="true"
|
|
77
|
-
v-for="(item, definitionIndex) in activatedConfig.data[row[0].dataIndex]"
|
|
78
|
-
:input-columns-definition-index="definitionIndex"
|
|
79
|
-
:display="true"
|
|
80
|
-
:key="row[0].dataIndex + definitionIndex + rowIndex"></x-report-tr-group>
|
|
81
|
-
</template>
|
|
82
|
-
<template v-if="!forDisplay">
|
|
83
|
-
<x-report-tr-group
|
|
84
|
-
:columns="row[0].definition"
|
|
85
|
-
:config-data="{arr: activatedConfig.data[row[0].dataIndex]}"
|
|
86
|
-
:input-columns="true"
|
|
87
|
-
v-for="(item, definitionIndex) in activatedConfig.data[row[0].dataIndex]"
|
|
88
|
-
:input-columns-definition-index="definitionIndex"
|
|
89
|
-
:key="row[0].dataIndex + definitionIndex + rowIndex"></x-report-tr-group>
|
|
90
|
-
<!-- 动态行交互按钮 -->
|
|
91
|
-
<x-report-tr-group :key="rowIndex" :columns="row" :config-data="activatedConfig.data" :input-columns-button="true" :input-columns="true"></x-report-tr-group>
|
|
92
99
|
</template>
|
|
100
|
+
</tbody>
|
|
101
|
+
</table>
|
|
102
|
+
<div v-if="showImages" style="margin-top: 5%; display: flex;margin-bottom: 5%">
|
|
103
|
+
<p>图片:</p>
|
|
104
|
+
<template v-for="(img,imgIndex) in imageList">
|
|
105
|
+
<div :key="imgIndex" style="margin-left: 3%;width: 200px">
|
|
106
|
+
<img :src="img.url" class="img" :alt="img.name"/>
|
|
107
|
+
<p style="overflow: hidden;text-overflow: ellipsis;white-space: nowrap;width: 100%;">{{ img.name }}</p>
|
|
108
|
+
</div>
|
|
93
109
|
</template>
|
|
94
|
-
</template>
|
|
95
|
-
</tbody>
|
|
96
|
-
</table>
|
|
97
|
-
<div v-if="showImages" style="margin-top: 5%; display: flex;margin-bottom: 5%">
|
|
98
|
-
<p>图片:</p>
|
|
99
|
-
<template v-for="(img,imgIndex) in imageList">
|
|
100
|
-
<div :key="imgIndex" style="margin-left: 3%;width: 200px">
|
|
101
|
-
<img :src="img.url" class="img" :alt="img.name"/>
|
|
102
|
-
<p style="overflow: hidden;text-overflow: ellipsis;white-space: nowrap;width: 100%;">{{img.name}}</p>
|
|
103
110
|
</div>
|
|
104
|
-
</
|
|
105
|
-
</
|
|
111
|
+
</div>
|
|
112
|
+
</template>
|
|
106
113
|
</div>
|
|
107
114
|
</template>
|
|
108
115
|
|
|
109
116
|
<script>
|
|
110
117
|
import XReportTrGroup from '@vue2-client/base-client/components/common/XReport/XReportTrGroup.vue'
|
|
118
|
+
import XReportJsonRender from '@vue2-client/base-client/components/common/XReport/XReportJsonRender.vue'
|
|
111
119
|
import { getConfigByName } from '@vue2-client/services/api/common'
|
|
112
120
|
|
|
113
121
|
export default {
|
|
@@ -136,7 +144,8 @@ export default {
|
|
|
136
144
|
}
|
|
137
145
|
},
|
|
138
146
|
components: {
|
|
139
|
-
XReportTrGroup
|
|
147
|
+
XReportTrGroup,
|
|
148
|
+
XReportJsonRender
|
|
140
149
|
},
|
|
141
150
|
data () {
|
|
142
151
|
return {
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="reportMain">
|
|
3
|
+
<table class="reportTable">
|
|
4
|
+
<tbody class="reportTable">
|
|
5
|
+
<tr v-if="config.title.type && config.title.type !== ''">
|
|
6
|
+
<th class="tdWithBorder" colspan="12">
|
|
7
|
+
<template v-if="config.title.type === 'titleKey'">
|
|
8
|
+
{{ config.data[config.title.value] }}
|
|
9
|
+
</template>
|
|
10
|
+
<template v-else-if="config.title.type === 'titleValue'">
|
|
11
|
+
{{ config.title.value }}
|
|
12
|
+
</template>
|
|
13
|
+
</th>
|
|
14
|
+
</tr>
|
|
15
|
+
<template v-for="(row, rowIndex) in config.content">
|
|
16
|
+
<template v-if="row.type === 'jsonKey'">
|
|
17
|
+
<tr :key="rowIndex">
|
|
18
|
+
<!-- 表头 -->
|
|
19
|
+
<td class="tdWithBorder" colspan="6">
|
|
20
|
+
<template v-if="receivedFunction[rowIndex].labelFunction(config).type === 'key'">
|
|
21
|
+
{{ config.data[receivedFunction[rowIndex].labelFunction(config).content] }}
|
|
22
|
+
</template>
|
|
23
|
+
<template v-else-if="receivedFunction[rowIndex].labelFunction(config).type === 'value'">
|
|
24
|
+
{{ receivedFunction[rowIndex].labelFunction(config).content }}
|
|
25
|
+
</template>
|
|
26
|
+
</td>
|
|
27
|
+
<!-- 内容 -->
|
|
28
|
+
<td class="tdWithBorder" colspan="6">
|
|
29
|
+
<template v-if="receivedFunction[rowIndex].valueFunction(config).type === 'key'">
|
|
30
|
+
{{ config.data[receivedFunction[rowIndex].valueFunction(config).content] }}
|
|
31
|
+
</template>
|
|
32
|
+
<template v-else-if="receivedFunction[rowIndex].valueFunction(config).type === 'value'">
|
|
33
|
+
{{ receivedFunction[rowIndex].valueFunction(config).content }}
|
|
34
|
+
</template>
|
|
35
|
+
<template v-else-if="receivedFunction[rowIndex].valueFunction(config).type === 'img'">
|
|
36
|
+
<template v-for="(img, imgIndex) in receivedFunction[rowIndex].valueFunction(config).content">
|
|
37
|
+
<span :key="imgIndex" class="imgText">
|
|
38
|
+
<a-icon type="link"/>
|
|
39
|
+
<span @click="openImgModal(img)">{{ formatImgName(img) }}</span>
|
|
40
|
+
<br/>
|
|
41
|
+
</span>
|
|
42
|
+
</template>
|
|
43
|
+
</template>
|
|
44
|
+
</td>
|
|
45
|
+
</tr>
|
|
46
|
+
</template>
|
|
47
|
+
<template v-else-if="row.type === 'jsonArray'">
|
|
48
|
+
<tr :key="rowIndex + '' + jsonArrayItemIndex" v-for="(item, jsonArrayItemIndex) in config.data[row.jsonArrayDataIndex]">
|
|
49
|
+
<!-- 表头 -->
|
|
50
|
+
<td class="tdWithBorder" colspan="6">
|
|
51
|
+
<template v-if="receivedFunction[rowIndex].labelFunction(config).type === 'key'">
|
|
52
|
+
{{ item[receivedFunction[rowIndex].labelFunction(config).content] }}
|
|
53
|
+
</template>
|
|
54
|
+
<template v-if="receivedFunction[rowIndex].labelFunction(config).type === 'value'">
|
|
55
|
+
{{ receivedFunction[rowIndex].labelFunction(config).content }}
|
|
56
|
+
</template>
|
|
57
|
+
</td>
|
|
58
|
+
<!-- 内容 -->
|
|
59
|
+
<td class="tdWithBorder" colspan="6">
|
|
60
|
+
<template v-if="receivedFunction[rowIndex].valueFunction(config).type === 'key'">
|
|
61
|
+
{{ item[receivedFunction[rowIndex].valueFunction(config).content] }}
|
|
62
|
+
</template>
|
|
63
|
+
<template v-if="receivedFunction[rowIndex].valueFunction(config).type === 'value'">
|
|
64
|
+
{{ receivedFunction[rowIndex].valueFunction(config).content }}
|
|
65
|
+
</template>
|
|
66
|
+
</td>
|
|
67
|
+
</tr>
|
|
68
|
+
</template>
|
|
69
|
+
</template>
|
|
70
|
+
</tbody>
|
|
71
|
+
</table>
|
|
72
|
+
<a-modal
|
|
73
|
+
title="图片"
|
|
74
|
+
width="80%"
|
|
75
|
+
:visible="showImgModal"
|
|
76
|
+
@ok="handleShowImgOk"
|
|
77
|
+
@cancel="handleShowImgCancel"
|
|
78
|
+
:z-index="1001"
|
|
79
|
+
:destroyOnClose="true">
|
|
80
|
+
<div style="width: 100%;display: flex;justify-content: center;align-items: center">
|
|
81
|
+
<img :src="showImageSrc" alt="图片"/>
|
|
82
|
+
</div>
|
|
83
|
+
</a-modal>
|
|
84
|
+
</div>
|
|
85
|
+
</template>
|
|
86
|
+
|
|
87
|
+
<script>
|
|
88
|
+
|
|
89
|
+
export default {
|
|
90
|
+
name: 'XReportJsonRender',
|
|
91
|
+
props: {
|
|
92
|
+
config: {
|
|
93
|
+
type: Object,
|
|
94
|
+
required: true
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
data () {
|
|
98
|
+
return {
|
|
99
|
+
receivedFunction: [],
|
|
100
|
+
showImgModal: false,
|
|
101
|
+
showImageSrc: undefined
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
methods: {
|
|
105
|
+
handleShowImgOk () {
|
|
106
|
+
this.showImgModal = false
|
|
107
|
+
this.showImageSrc = undefined
|
|
108
|
+
},
|
|
109
|
+
handleShowImgCancel () {
|
|
110
|
+
this.showImgModal = false
|
|
111
|
+
this.showImageSrc = undefined
|
|
112
|
+
},
|
|
113
|
+
openImgModal (img) {
|
|
114
|
+
this.showImageSrc = img
|
|
115
|
+
this.showImgModal = true
|
|
116
|
+
},
|
|
117
|
+
formatImgName (imgSrc) {
|
|
118
|
+
return imgSrc.split('/').pop()
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
beforeMount () {
|
|
122
|
+
for (let i = 0; i < this.config.content.length; i++) {
|
|
123
|
+
this.receivedFunction.push({
|
|
124
|
+
// eslint-disable-next-line no-eval
|
|
125
|
+
labelFunction: eval('(' + this.config.content[i].customFunctionForLabel + ')'),
|
|
126
|
+
// eslint-disable-next-line no-eval
|
|
127
|
+
valueFunction: eval('(' + this.config.content[i].customFunctionForValue + ')')
|
|
128
|
+
})
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
</script>
|
|
133
|
+
|
|
134
|
+
<style scoped lang="less">
|
|
135
|
+
.reportMain {
|
|
136
|
+
text-align: center;
|
|
137
|
+
margin: 0 auto;
|
|
138
|
+
font-size: 16px;
|
|
139
|
+
color: #000;
|
|
140
|
+
background-color: #fff;
|
|
141
|
+
padding: 15px;
|
|
142
|
+
border-radius: 8px;
|
|
143
|
+
}
|
|
144
|
+
.reportTitle {
|
|
145
|
+
font-weight: bold;
|
|
146
|
+
}
|
|
147
|
+
.reportTable {
|
|
148
|
+
width: 100%;
|
|
149
|
+
border-collapse: collapse;
|
|
150
|
+
table-layout:fixed;
|
|
151
|
+
word-break:break-all;
|
|
152
|
+
}
|
|
153
|
+
.tdWithBorder {
|
|
154
|
+
border: 1px solid #000;
|
|
155
|
+
padding: 8px;
|
|
156
|
+
}
|
|
157
|
+
.imgText:hover {
|
|
158
|
+
color: rgb( 24,144,255);
|
|
159
|
+
cursor: pointer;
|
|
160
|
+
}
|
|
161
|
+
</style>
|
|
@@ -229,6 +229,7 @@ export default {
|
|
|
229
229
|
}),
|
|
230
230
|
}
|
|
231
231
|
},
|
|
232
|
+
...mapState('account', { currUser: 'user' }),
|
|
232
233
|
...mapState('setting', ['compatible'])
|
|
233
234
|
},
|
|
234
235
|
mounted () {},
|
|
@@ -294,7 +295,7 @@ export default {
|
|
|
294
295
|
}
|
|
295
296
|
}
|
|
296
297
|
if (!this.isTableTemp) {
|
|
297
|
-
result = query(requestParameters, this.serviceName, this.env === 'dev')
|
|
298
|
+
result = query(Object.assign(requestParameters, { userId: this.currUser.id }), this.serviceName, this.env === 'dev')
|
|
298
299
|
}
|
|
299
300
|
this.clearRowKeys()
|
|
300
301
|
this.$emit('afterQuery', result, requestParameters.conditionParams)
|
|
@@ -386,6 +387,7 @@ export default {
|
|
|
386
387
|
queryParamsName: that.queryParamsName,
|
|
387
388
|
queryParams: that.queryParams,
|
|
388
389
|
form: conditionParams,
|
|
390
|
+
userId: this.currUser.id
|
|
389
391
|
}, that.serviceName, that.env === 'dev').then(res => {
|
|
390
392
|
let value = res
|
|
391
393
|
if (that.compatible === 'V4') {
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
<div>
|
|
3
3
|
<!-- <XReport :config-name="'test_tableConfig'" :activated-slot-name="'test_tableConfig_slot'"/>-->
|
|
4
4
|
<!-- <XReport :config-name="'test_tableConfig'" :local-config="test_config_withoutSlot" :config-data="test_config_data"/>-->
|
|
5
|
-
|
|
5
|
+
<!-- <XReport :config-name="'test_tableConfig'" :local-config="test_config_list" :dont-format="true"/>-->
|
|
6
6
|
<!-- <XReport :config-name="'test_tableConfig'" />-->
|
|
7
|
+
<XReport config-name="test_tableConfig" :local-config="test_config_json" :config-data="test_config_json_data"/>
|
|
7
8
|
</div>
|
|
8
9
|
</template>
|
|
9
10
|
|
|
@@ -623,6 +624,46 @@ export default {
|
|
|
623
624
|
]
|
|
624
625
|
],
|
|
625
626
|
cardMode: false
|
|
627
|
+
},
|
|
628
|
+
test_config_json: {
|
|
629
|
+
title: {
|
|
630
|
+
type: 'titleKey',
|
|
631
|
+
value: 'f_title'
|
|
632
|
+
},
|
|
633
|
+
content: [
|
|
634
|
+
{
|
|
635
|
+
customFunctionForLabel: "function (config) {\n return { type: 'key', content: 'f_project' }\n}",
|
|
636
|
+
customFunctionForValue: "function (config) {\n if (config.f_content === null) {\n return { type: 'value', content: '无' }\n } else {\n return { type: 'key', content: 'f_content' }\n }\n}",
|
|
637
|
+
type: 'jsonKey'
|
|
638
|
+
},
|
|
639
|
+
{
|
|
640
|
+
customFunctionForLabel: "function (config) {\n return { type: 'key', content: 'f_name' }\n}",
|
|
641
|
+
customFunctionForValue: "function (config) {\n return { type: 'key', content: 'f_content' }\n}",
|
|
642
|
+
jsonArrayDataIndex: 'f_service',
|
|
643
|
+
type: 'jsonArray'
|
|
644
|
+
},
|
|
645
|
+
{
|
|
646
|
+
customFunctionForLabel: "function (config) {\n return { type: 'value', content: '图片' }\n}",
|
|
647
|
+
customFunctionForValue: "function (config) {\n return { type: 'img', content: ['/resource/webmeter/cs/20240419/f73770a2f84749ff82a57c5b708d6a8e.png', '/resource/webmeter/cs/20240419/c15564df1ca840ff9d285b6b240207b1.png'] }\n}",
|
|
648
|
+
type: 'jsonKey'
|
|
649
|
+
}
|
|
650
|
+
],
|
|
651
|
+
designMode: 'json'
|
|
652
|
+
},
|
|
653
|
+
test_config_json_data: {
|
|
654
|
+
f_title: '我是标题',
|
|
655
|
+
f_project: '服务',
|
|
656
|
+
f_content: null,
|
|
657
|
+
f_service: [
|
|
658
|
+
{
|
|
659
|
+
f_name: '维修1',
|
|
660
|
+
f_content: '第一次上门维修'
|
|
661
|
+
},
|
|
662
|
+
{
|
|
663
|
+
f_name: '保养1',
|
|
664
|
+
f_content: '第一次上门保养'
|
|
665
|
+
}
|
|
666
|
+
]
|
|
626
667
|
}
|
|
627
668
|
}
|
|
628
669
|
},
|