vue2-client 1.8.259 → 1.8.261

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/.env +19 -19
  2. package/.eslintrc.js +90 -90
  3. package/CHANGELOG.md +824 -824
  4. package/Components.md +60 -60
  5. package/babel.config.js +21 -21
  6. package/docs/index.md +30 -30
  7. package/docs/lowcode.md +188 -188
  8. package/docs/lowcodeForDeveloper.md +200 -192
  9. package/index.js +31 -31
  10. package/jest-transform-stub.js +8 -8
  11. package/jest.config.js +21 -21
  12. package/jest.setup.js +7 -7
  13. package/package.json +95 -95
  14. package/public/index.html +27 -27
  15. package/src/App.vue +188 -188
  16. package/src/ReportView.js +19 -19
  17. package/src/assets/img/querySlotDemo.svg +15 -15
  18. package/src/assets/svg/badtwo.svg +1 -1
  19. package/src/assets/svg/goodtwo.svg +1 -1
  20. package/src/base-client/components/common/AMisRender/index.js +3 -3
  21. package/src/base-client/components/common/AMisRender/index.vue +263 -263
  22. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +413 -413
  23. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  24. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  25. package/src/base-client/components/common/CitySelect/CitySelect.vue +348 -348
  26. package/src/base-client/components/common/CitySelect/index.js +3 -3
  27. package/src/base-client/components/common/CitySelect/index.md +109 -109
  28. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  29. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  30. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  31. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  32. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  33. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  34. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  35. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  36. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +149 -149
  37. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  38. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  39. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  40. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  41. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  42. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  43. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +394 -355
  44. package/src/base-client/components/common/LowCodePageRender/LowCodePageRender.vue +29 -29
  45. package/src/base-client/components/common/LowCodePageRender/editorPageRender.vue +533 -467
  46. package/src/base-client/components/common/LowCodePageRender/index.js +3 -3
  47. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  48. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  49. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  50. package/src/base-client/components/common/Tree/index.js +2 -2
  51. package/src/base-client/components/common/Upload/Upload.vue +197 -197
  52. package/src/base-client/components/common/Upload/index.js +3 -3
  53. package/src/base-client/components/common/XAddForm/XAddForm.vue +98 -98
  54. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +732 -732
  55. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  56. package/src/base-client/components/common/XAddNativeForm/lowcodeEditorRegister.js +16 -12
  57. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  58. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  59. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  60. package/src/base-client/components/common/XBadge/XBadge.vue +78 -78
  61. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  62. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  63. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  64. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  65. package/src/base-client/components/common/XDescriptions/XDescriptions.vue +167 -167
  66. package/src/base-client/components/common/XDescriptions/XDescriptionsGroup.vue +299 -299
  67. package/src/base-client/components/common/XDescriptions/demo.vue +50 -50
  68. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  69. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  70. package/src/base-client/components/common/XDescriptions/lowcodeEditorRegister.js +15 -5
  71. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +214 -214
  72. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  73. package/src/base-client/components/common/XForm/XForm.vue +281 -281
  74. package/src/base-client/components/common/XForm/XFormItem.vue +807 -807
  75. package/src/base-client/components/common/XForm/XTreeSelect.vue +206 -206
  76. package/src/base-client/components/common/XForm/index.md +178 -178
  77. package/src/base-client/components/common/XFormCol/XFormCol.vue +36 -36
  78. package/src/base-client/components/common/XFormGroup/XFormGroup.vue +241 -241
  79. package/src/base-client/components/common/XFormGroup/demo.vue +40 -40
  80. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  81. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  82. package/src/base-client/components/common/XFormGroupDetails/XFormGroupDetails.vue +72 -72
  83. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  84. package/src/base-client/components/common/XFormTable/XFormTable.vue +519 -519
  85. package/src/base-client/components/common/XFormTable/index.md +98 -98
  86. package/src/base-client/components/common/XFormTable/lowcodeEditorRegister.js +16 -12
  87. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +147 -147
  88. package/src/base-client/components/common/XReport/XReport.vue +843 -843
  89. package/src/base-client/components/common/XReport/XReportDemo.vue +2233 -2233
  90. package/src/base-client/components/common/XReport/XReportDesign.vue +470 -470
  91. package/src/base-client/components/common/XReport/XReportJsonRender.vue +267 -267
  92. package/src/base-client/components/common/XReport/XReportTrGroup.vue +745 -742
  93. package/src/base-client/components/common/XReport/index.js +3 -3
  94. package/src/base-client/components/common/XReport/index.md +44 -44
  95. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  96. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  97. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  98. package/src/base-client/components/common/XStepView/index.js +3 -3
  99. package/src/base-client/components/common/XStepView/index.md +31 -31
  100. package/src/base-client/components/common/XTable/XTable.vue +636 -636
  101. package/src/base-client/components/common/XTable/index.md +255 -255
  102. package/src/base-client/components/common/XTree/XTree.vue +318 -318
  103. package/src/base-client/components/common/XTree/index.js +3 -3
  104. package/src/base-client/components/common/XTree/index.md +36 -36
  105. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +114 -114
  106. package/src/base-client/components/common/XTreeOne/lowcodeEditorRegister.js +11 -9
  107. package/src/base-client/components/index.js +51 -51
  108. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  109. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  110. package/src/base-client/plugins/AppData.js +115 -115
  111. package/src/base-client/plugins/Config.js +19 -19
  112. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  113. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  114. package/src/bootstrap.js +39 -39
  115. package/src/components/CodeMirror/inedx.vue +118 -118
  116. package/src/components/CodeMirror/setting.js +40 -40
  117. package/src/components/FilePreview/FilePreview.vue +166 -166
  118. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  119. package/src/components/STable/index.js +323 -323
  120. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  121. package/src/components/checkbox/ImgCheckbox.vue +163 -163
  122. package/src/components/menu/SideMenu.vue +75 -75
  123. package/src/components/menu/menu.js +273 -273
  124. package/src/components/tool/AStepItem.vue +60 -60
  125. package/src/config/CreateQueryConfig.js +322 -322
  126. package/src/config/default/antd.config.js +89 -89
  127. package/src/config/default/setting.config.js +55 -55
  128. package/src/font-style/font.css +4 -4
  129. package/src/layouts/CommonLayout.vue +56 -56
  130. package/src/layouts/PageLayout.vue +151 -151
  131. package/src/layouts/SinglePageView.vue +138 -138
  132. package/src/layouts/header/AdminHeader.vue +132 -132
  133. package/src/layouts/header/HeaderNotice.vue +177 -177
  134. package/src/layouts/tabs/TabsHead.vue +189 -189
  135. package/src/layouts/tabs/TabsView.vue +387 -387
  136. package/src/lib.js +1 -1
  137. package/src/main.js +26 -26
  138. package/src/mock/extend/index.js +84 -84
  139. package/src/mock/goods/index.js +108 -108
  140. package/src/pages/AMisDemo/AMisDemo.vue +325 -325
  141. package/src/pages/AMisDemo/AMisDemo2.vue +74 -74
  142. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  143. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  144. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  145. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  146. package/src/pages/DynamicStatistics/FavoriteList.vue +51 -51
  147. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  148. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  149. package/src/pages/DynamicStatistics/index.vue +282 -282
  150. package/src/pages/Example/index.vue +32 -32
  151. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  152. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  153. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  154. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  155. package/src/pages/NewDynamicStatistics/FavoriteList.vue +51 -51
  156. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  157. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  158. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  159. package/src/pages/ServiceReview/index.vue +284 -284
  160. package/src/pages/XReportView/index.vue +62 -62
  161. package/src/pages/login/Login.vue +378 -378
  162. package/src/pages/login/LoginV3.vue +389 -389
  163. package/src/pages/lowCode/lowCodeEditor.vue +1501 -1285
  164. package/src/pages/lowCode/lowCodeRender.vue +39 -39
  165. package/src/pages/resourceManage/orgListManage.vue +98 -98
  166. package/src/pages/system/dictionary/index.vue +44 -44
  167. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  168. package/src/pages/system/monitor/operLog/index.vue +37 -37
  169. package/src/pages/system/settings/modifyPassword.vue +117 -117
  170. package/src/pages/system/ticket/index.vue +480 -480
  171. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  172. package/src/router/async/config.async.js +33 -33
  173. package/src/router/async/router.map.js +107 -107
  174. package/src/router/guards.js +220 -220
  175. package/src/router/index.js +27 -27
  176. package/src/router.js +19 -19
  177. package/src/services/api/TicketDetailsViewApi.js +46 -46
  178. package/src/services/api/cas.js +79 -79
  179. package/src/services/api/common.js +284 -284
  180. package/src/services/api/entity.js +18 -18
  181. package/src/services/api/index.js +17 -17
  182. package/src/services/api/restTools.js +46 -46
  183. package/src/services/apiService.js +14 -14
  184. package/src/services/user.js +71 -71
  185. package/src/store/modules/setting.js +119 -119
  186. package/src/theme/default/style.less +57 -57
  187. package/src/theme/global.less +130 -130
  188. package/src/utils/authority-utils.js +85 -85
  189. package/src/utils/errorCode.js +6 -6
  190. package/src/utils/htmlToPDF.js +108 -108
  191. package/src/utils/htmlToPDFApi.js +5 -5
  192. package/src/utils/indexedDB.js +201 -201
  193. package/src/utils/login.js +144 -144
  194. package/src/utils/lowcode/lowcodeComponentMixin.js +112 -78
  195. package/src/utils/lowcode/lowcodeLog.js +29 -29
  196. package/src/utils/lowcode/lowcodeUtils.js +276 -129
  197. package/src/utils/lowcode/registerComponentForEditor.js +11 -11
  198. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  199. package/src/utils/map-utils.js +47 -47
  200. package/src/utils/reg.js +19 -19
  201. package/src/utils/request.js +343 -343
  202. package/src/utils/routerUtil.js +435 -435
  203. package/src/utils/runEvalFunction.js +6 -6
  204. package/src/utils/util.js +241 -241
  205. package/src/utils/waterMark.js +31 -31
  206. package/test/Amis.spec.js +163 -163
  207. package/test/Tree.spec.js +167 -167
  208. package/test/myDialog.spec.js +46 -46
  209. package/vue.config.js +177 -177
  210. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
@@ -1,267 +1,267 @@
1
- <template>
2
- <div :class="noPadding ? 'reportMainNoPadding' : 'reportMain'">
3
- <table class="reportTable" :style="config.style ? config.style : undefined">
4
- <tbody class="'reportTable'">
5
- <!-- 标题 -->
6
- <tr v-if="showTitle && config.title.type && config.title.type !== ''">
7
- <td :class="noTopBorder ? 'tdWithNoTopBorder' : 'tdWithBorder'" colspan="12">
8
- <template v-if="config.title.type === 'titleKey'">
9
- {{ config.data[config.title.value] }}
10
- </template>
11
- <template v-else-if="config.title.type === 'titleValue'">
12
- {{ config.title.value }}
13
- </template>
14
- </td>
15
- </tr>
16
- <template v-for="(row, rowIndex) in config.content">
17
- <!-- 数据对象是一个Obj -->
18
- <template v-if="row.type === 'jsonKey'">
19
- <tr :key="rowIndex">
20
- <!-- 表头 -->
21
- <td
22
- :class="noTopBorder ? 'tdWithNoTopBorder' : 'tdWithBorder'"
23
- :style="determineCellStyle(receivedFunction[rowIndex].labelFunction(config, item))"
24
- colspan="6">
25
- <template v-if="receivedFunction[rowIndex].labelFunction(config).type === 'key'">
26
- {{ config.data[receivedFunction[rowIndex].labelFunction(config).content] }}
27
- </template>
28
- <template v-else-if="receivedFunction[rowIndex].labelFunction(config).type === 'value'">
29
- {{ receivedFunction[rowIndex].labelFunction(config).content }}
30
- </template>
31
- </td>
32
- <!-- 内容 -->
33
- <td
34
- :class="noTopBorder ? 'tdWithNoTopBorder' : 'tdWithBorder'"
35
- :style="determineCellStyle(receivedFunction[rowIndex].valueFunction(config))"
36
- colspan="6">
37
- <template v-if="displayOnly">
38
- <template v-if="receivedFunction[rowIndex].valueFunction(config).type === 'key'">
39
- {{ config.data[receivedFunction[rowIndex].valueFunction(config).content] }}
40
- </template>
41
- <template v-else-if="receivedFunction[rowIndex].valueFunction(config).type === 'value'">
42
- {{ receivedFunction[rowIndex].valueFunction(config).content }}
43
- </template>
44
- </template>
45
- <template v-else>
46
- <a-input v-model="config.data[receivedFunction[rowIndex].valueFunction(config).originalKey]"/>
47
- </template>
48
- <template v-if="receivedFunction[rowIndex].valueFunction(config).type === 'img'">
49
- <template v-for="(img, imgIndex) in receivedFunction[rowIndex].valueFunction(config).content">
50
- <span :key="imgIndex" class="imgText">
51
- <a-icon type="link"/>
52
- <span @click="openImgModal(img)">{{ formatImgName(img) }}</span>
53
- <br/>
54
- </span>
55
- </template>
56
- </template>
57
- </td>
58
- </tr>
59
- </template>
60
- <!-- 数据对象是一个Array -->
61
- <template v-else-if="row.type === 'jsonArray'">
62
- <tr :key="rowIndex + '' + jsonArrayItemIndex" v-for="(item, jsonArrayItemIndex) in config.data[row.jsonArrayDataIndex]">
63
- <!-- 表头 -->
64
- <td
65
- :class="noTopBorder ? 'tdWithNoTopBorder' : 'tdWithBorder'"
66
- :style="determineCellStyle(receivedFunction[rowIndex].labelFunction(config, item))"
67
- colspan="6">
68
- <template v-if="receivedFunction[rowIndex].labelFunction(config, item).type === 'key'">
69
- {{ item[receivedFunction[rowIndex].labelFunction(config, item).content] }}
70
- </template>
71
- <template v-if="receivedFunction[rowIndex].labelFunction(config, item).type === 'value'">
72
- {{ receivedFunction[rowIndex].labelFunction(config, item).content }}
73
- </template>
74
- </td>
75
- <!-- 内容 -->
76
- <td
77
- :class="noTopBorder ? 'tdWithNoTopBorder' : 'tdWithBorder'"
78
- :style="determineCellStyle(receivedFunction[rowIndex].valueFunction(config, item))"
79
- colspan="6">
80
- <template v-if="displayOnly">
81
- <template v-if="receivedFunction[rowIndex].valueFunction(config, item).type === 'key'">
82
- {{ item[receivedFunction[rowIndex].valueFunction(config, item).content] }}
83
- </template>
84
- <template v-if="receivedFunction[rowIndex].valueFunction(config, item).type === 'value'">
85
- {{ receivedFunction[rowIndex].valueFunction(config, item).content }}
86
- </template>
87
- </template>
88
- <template v-else>
89
- <a-input v-model="item[receivedFunction[rowIndex].valueFunction(config, item).originalKey]"/>
90
- </template>
91
- </td>
92
- </tr>
93
- </template>
94
- </template>
95
- </tbody>
96
- </table>
97
- <!-- 图片展示弹框 -->
98
- <a-modal
99
- title="图片"
100
- width="80%"
101
- :visible="showImgModal"
102
- @ok="handleShowImgOk"
103
- @cancel="handleShowImgCancel"
104
- :z-index="1001"
105
- :destroyOnClose="true">
106
- <div style="width: 100%;display: flex;justify-content: center;align-items: center">
107
- <img :src="showImageSrc" alt="图片"/>
108
- </div>
109
- </a-modal>
110
- </div>
111
- </template>
112
-
113
- <script>
114
-
115
- export default {
116
- name: 'XReportJsonRender',
117
- props: {
118
- // 配置
119
- config: {
120
- type: Object,
121
- required: true
122
- },
123
- // 表格没有边距
124
- noPadding: {
125
- type: Boolean,
126
- default: false
127
- },
128
- // 表格没有上边框,与noPadding搭配可以实现连续表格
129
- noTopBorder: {
130
- type: Boolean,
131
- default: false
132
- },
133
- // 是否展示标题
134
- showTitle: {
135
- type: Boolean,
136
- default: true
137
- },
138
- // 是否仅展示
139
- displayOnly: {
140
- type: Boolean,
141
- default: true
142
- }
143
- },
144
- data () {
145
- return {
146
- // 储存所有json传递的函数
147
- receivedFunction: [],
148
- // 控制弹框显隐
149
- showImgModal: false,
150
- // 弹框中图片路径
151
- showImageSrc: undefined
152
- }
153
- },
154
- methods: {
155
- // 判断单元格样式
156
- determineCellStyle (labelFunctionReturn, color = '#000', borderWidth = '1px') {
157
- // 如果声明了边框颜色
158
- if (labelFunctionReturn.style.borderColor) {
159
- color = labelFunctionReturn.style.borderColor
160
- }
161
- // 如果声明了边框宽度
162
- if (labelFunctionReturn.style.borderWidth) {
163
- borderWidth = labelFunctionReturn.style.borderWidth
164
- }
165
- // 正常边框单元格
166
- const withBorder = {
167
- border: borderWidth + ' solid ' + color,
168
- padding: '8px'
169
- }
170
- // 仅没有上边框单元格
171
- const NoTopBorder = {
172
- borderTopStyle: 'none',
173
- borderLeft: borderWidth + ' solid ' + color,
174
- borderRight: borderWidth + ' solid ' + color,
175
- borderBottom: borderWidth + ' solid ' + color,
176
- padding: '8px'
177
- }
178
- let result = {}
179
- // 判断表头是否有声明的样式
180
- if (labelFunctionReturn.style !== undefined) {
181
- if (this.noTopBorder) {
182
- result = { ...NoTopBorder, ...labelFunctionReturn.style }
183
- } else {
184
- result = { ...withBorder, ...labelFunctionReturn.style }
185
- }
186
- } else {
187
- if (this.noTopBorder) {
188
- result = { ...NoTopBorder }
189
- } else {
190
- result = { ...withBorder }
191
- }
192
- }
193
- return result
194
- },
195
- handleShowImgOk () {
196
- this.showImgModal = false
197
- this.showImageSrc = undefined
198
- },
199
- handleShowImgCancel () {
200
- this.showImgModal = false
201
- this.showImageSrc = undefined
202
- },
203
- openImgModal (img) {
204
- this.showImageSrc = img
205
- this.showImgModal = true
206
- },
207
- formatImgName (imgSrc) {
208
- return imgSrc.split('/').pop()
209
- }
210
- },
211
- beforeMount () {
212
- // 遍历配置,将所有JSON传递的方法保存到一个数组中,并用index来一一对应
213
- for (let i = 0; i < this.config.content.length; i++) {
214
- this.receivedFunction.push({
215
- // eslint-disable-next-line no-eval
216
- labelFunction: eval('(' + this.config.content[i].customFunctionForLabel + ')'),
217
- // eslint-disable-next-line no-eval
218
- valueFunction: eval('(' + this.config.content[i].customFunctionForValue + ')')
219
- })
220
- }
221
- }
222
- }
223
- </script>
224
-
225
- <style scoped lang="less">
226
- .reportMain {
227
- text-align: center;
228
- margin: 0 auto;
229
- font-size: 16px;
230
- color: #000;
231
- background-color: #fff;
232
- padding: 15px;
233
- border-radius: 8px;
234
- }
235
- .reportMainNoPadding {
236
- text-align: center;
237
- margin: 0 auto;
238
- font-size: 16px;
239
- color: #000;
240
- background-color: #fff;
241
- border-radius: 8px;
242
- }
243
- .reportTitle {
244
- font-weight: bold;
245
- }
246
- .reportTable {
247
- width: 100%;
248
- border-collapse: collapse;
249
- table-layout:fixed;
250
- word-break:break-all;
251
- }
252
- .tdWithBorder {
253
- border: 1px solid #000;
254
- padding: 8px;
255
- }
256
- .imgText:hover {
257
- color: rgb( 24,144,255);
258
- cursor: pointer;
259
- }
260
- .tdWithNoTopBorder {
261
- border-top-style: none;
262
- border-left: 1px solid #000;
263
- border-right: 1px solid #000;
264
- border-bottom: 1px solid #000;
265
- padding: 8px;
266
- }
267
- </style>
1
+ <template>
2
+ <div :class="noPadding ? 'reportMainNoPadding' : 'reportMain'">
3
+ <table class="reportTable" :style="config.style ? config.style : undefined">
4
+ <tbody class="'reportTable'">
5
+ <!-- 标题 -->
6
+ <tr v-if="showTitle && config.title.type && config.title.type !== ''">
7
+ <td :class="noTopBorder ? 'tdWithNoTopBorder' : 'tdWithBorder'" colspan="12">
8
+ <template v-if="config.title.type === 'titleKey'">
9
+ {{ config.data[config.title.value] }}
10
+ </template>
11
+ <template v-else-if="config.title.type === 'titleValue'">
12
+ {{ config.title.value }}
13
+ </template>
14
+ </td>
15
+ </tr>
16
+ <template v-for="(row, rowIndex) in config.content">
17
+ <!-- 数据对象是一个Obj -->
18
+ <template v-if="row.type === 'jsonKey'">
19
+ <tr :key="rowIndex">
20
+ <!-- 表头 -->
21
+ <td
22
+ :class="noTopBorder ? 'tdWithNoTopBorder' : 'tdWithBorder'"
23
+ :style="determineCellStyle(receivedFunction[rowIndex].labelFunction(config, item))"
24
+ colspan="6">
25
+ <template v-if="receivedFunction[rowIndex].labelFunction(config).type === 'key'">
26
+ {{ config.data[receivedFunction[rowIndex].labelFunction(config).content] }}
27
+ </template>
28
+ <template v-else-if="receivedFunction[rowIndex].labelFunction(config).type === 'value'">
29
+ {{ receivedFunction[rowIndex].labelFunction(config).content }}
30
+ </template>
31
+ </td>
32
+ <!-- 内容 -->
33
+ <td
34
+ :class="noTopBorder ? 'tdWithNoTopBorder' : 'tdWithBorder'"
35
+ :style="determineCellStyle(receivedFunction[rowIndex].valueFunction(config))"
36
+ colspan="6">
37
+ <template v-if="displayOnly">
38
+ <template v-if="receivedFunction[rowIndex].valueFunction(config).type === 'key'">
39
+ {{ config.data[receivedFunction[rowIndex].valueFunction(config).content] }}
40
+ </template>
41
+ <template v-else-if="receivedFunction[rowIndex].valueFunction(config).type === 'value'">
42
+ {{ receivedFunction[rowIndex].valueFunction(config).content }}
43
+ </template>
44
+ </template>
45
+ <template v-else>
46
+ <a-input v-model="config.data[receivedFunction[rowIndex].valueFunction(config).originalKey]"/>
47
+ </template>
48
+ <template v-if="receivedFunction[rowIndex].valueFunction(config).type === 'img'">
49
+ <template v-for="(img, imgIndex) in receivedFunction[rowIndex].valueFunction(config).content">
50
+ <span :key="imgIndex" class="imgText">
51
+ <a-icon type="link"/>
52
+ <span @click="openImgModal(img)">{{ formatImgName(img) }}</span>
53
+ <br/>
54
+ </span>
55
+ </template>
56
+ </template>
57
+ </td>
58
+ </tr>
59
+ </template>
60
+ <!-- 数据对象是一个Array -->
61
+ <template v-else-if="row.type === 'jsonArray'">
62
+ <tr :key="rowIndex + '' + jsonArrayItemIndex" v-for="(item, jsonArrayItemIndex) in config.data[row.jsonArrayDataIndex]">
63
+ <!-- 表头 -->
64
+ <td
65
+ :class="noTopBorder ? 'tdWithNoTopBorder' : 'tdWithBorder'"
66
+ :style="determineCellStyle(receivedFunction[rowIndex].labelFunction(config, item))"
67
+ colspan="6">
68
+ <template v-if="receivedFunction[rowIndex].labelFunction(config, item).type === 'key'">
69
+ {{ item[receivedFunction[rowIndex].labelFunction(config, item).content] }}
70
+ </template>
71
+ <template v-if="receivedFunction[rowIndex].labelFunction(config, item).type === 'value'">
72
+ {{ receivedFunction[rowIndex].labelFunction(config, item).content }}
73
+ </template>
74
+ </td>
75
+ <!-- 内容 -->
76
+ <td
77
+ :class="noTopBorder ? 'tdWithNoTopBorder' : 'tdWithBorder'"
78
+ :style="determineCellStyle(receivedFunction[rowIndex].valueFunction(config, item))"
79
+ colspan="6">
80
+ <template v-if="displayOnly">
81
+ <template v-if="receivedFunction[rowIndex].valueFunction(config, item).type === 'key'">
82
+ {{ item[receivedFunction[rowIndex].valueFunction(config, item).content] }}
83
+ </template>
84
+ <template v-if="receivedFunction[rowIndex].valueFunction(config, item).type === 'value'">
85
+ {{ receivedFunction[rowIndex].valueFunction(config, item).content }}
86
+ </template>
87
+ </template>
88
+ <template v-else>
89
+ <a-input v-model="item[receivedFunction[rowIndex].valueFunction(config, item).originalKey]"/>
90
+ </template>
91
+ </td>
92
+ </tr>
93
+ </template>
94
+ </template>
95
+ </tbody>
96
+ </table>
97
+ <!-- 图片展示弹框 -->
98
+ <a-modal
99
+ title="图片"
100
+ width="80%"
101
+ :visible="showImgModal"
102
+ @ok="handleShowImgOk"
103
+ @cancel="handleShowImgCancel"
104
+ :z-index="1001"
105
+ :destroyOnClose="true">
106
+ <div style="width: 100%;display: flex;justify-content: center;align-items: center">
107
+ <img :src="showImageSrc" alt="图片"/>
108
+ </div>
109
+ </a-modal>
110
+ </div>
111
+ </template>
112
+
113
+ <script>
114
+
115
+ export default {
116
+ name: 'XReportJsonRender',
117
+ props: {
118
+ // 配置
119
+ config: {
120
+ type: Object,
121
+ required: true
122
+ },
123
+ // 表格没有边距
124
+ noPadding: {
125
+ type: Boolean,
126
+ default: false
127
+ },
128
+ // 表格没有上边框,与noPadding搭配可以实现连续表格
129
+ noTopBorder: {
130
+ type: Boolean,
131
+ default: false
132
+ },
133
+ // 是否展示标题
134
+ showTitle: {
135
+ type: Boolean,
136
+ default: true
137
+ },
138
+ // 是否仅展示
139
+ displayOnly: {
140
+ type: Boolean,
141
+ default: true
142
+ }
143
+ },
144
+ data () {
145
+ return {
146
+ // 储存所有json传递的函数
147
+ receivedFunction: [],
148
+ // 控制弹框显隐
149
+ showImgModal: false,
150
+ // 弹框中图片路径
151
+ showImageSrc: undefined
152
+ }
153
+ },
154
+ methods: {
155
+ // 判断单元格样式
156
+ determineCellStyle (labelFunctionReturn, color = '#000', borderWidth = '1px') {
157
+ // 如果声明了边框颜色
158
+ if (labelFunctionReturn.style.borderColor) {
159
+ color = labelFunctionReturn.style.borderColor
160
+ }
161
+ // 如果声明了边框宽度
162
+ if (labelFunctionReturn.style.borderWidth) {
163
+ borderWidth = labelFunctionReturn.style.borderWidth
164
+ }
165
+ // 正常边框单元格
166
+ const withBorder = {
167
+ border: borderWidth + ' solid ' + color,
168
+ padding: '8px'
169
+ }
170
+ // 仅没有上边框单元格
171
+ const NoTopBorder = {
172
+ borderTopStyle: 'none',
173
+ borderLeft: borderWidth + ' solid ' + color,
174
+ borderRight: borderWidth + ' solid ' + color,
175
+ borderBottom: borderWidth + ' solid ' + color,
176
+ padding: '8px'
177
+ }
178
+ let result = {}
179
+ // 判断表头是否有声明的样式
180
+ if (labelFunctionReturn.style !== undefined) {
181
+ if (this.noTopBorder) {
182
+ result = { ...NoTopBorder, ...labelFunctionReturn.style }
183
+ } else {
184
+ result = { ...withBorder, ...labelFunctionReturn.style }
185
+ }
186
+ } else {
187
+ if (this.noTopBorder) {
188
+ result = { ...NoTopBorder }
189
+ } else {
190
+ result = { ...withBorder }
191
+ }
192
+ }
193
+ return result
194
+ },
195
+ handleShowImgOk () {
196
+ this.showImgModal = false
197
+ this.showImageSrc = undefined
198
+ },
199
+ handleShowImgCancel () {
200
+ this.showImgModal = false
201
+ this.showImageSrc = undefined
202
+ },
203
+ openImgModal (img) {
204
+ this.showImageSrc = img
205
+ this.showImgModal = true
206
+ },
207
+ formatImgName (imgSrc) {
208
+ return imgSrc.split('/').pop()
209
+ }
210
+ },
211
+ beforeMount () {
212
+ // 遍历配置,将所有JSON传递的方法保存到一个数组中,并用index来一一对应
213
+ for (let i = 0; i < this.config.content.length; i++) {
214
+ this.receivedFunction.push({
215
+ // eslint-disable-next-line no-eval
216
+ labelFunction: eval('(' + this.config.content[i].customFunctionForLabel + ')'),
217
+ // eslint-disable-next-line no-eval
218
+ valueFunction: eval('(' + this.config.content[i].customFunctionForValue + ')')
219
+ })
220
+ }
221
+ }
222
+ }
223
+ </script>
224
+
225
+ <style scoped lang="less">
226
+ .reportMain {
227
+ text-align: center;
228
+ margin: 0 auto;
229
+ font-size: 16px;
230
+ color: #000;
231
+ background-color: #fff;
232
+ padding: 15px;
233
+ border-radius: 8px;
234
+ }
235
+ .reportMainNoPadding {
236
+ text-align: center;
237
+ margin: 0 auto;
238
+ font-size: 16px;
239
+ color: #000;
240
+ background-color: #fff;
241
+ border-radius: 8px;
242
+ }
243
+ .reportTitle {
244
+ font-weight: bold;
245
+ }
246
+ .reportTable {
247
+ width: 100%;
248
+ border-collapse: collapse;
249
+ table-layout:fixed;
250
+ word-break:break-all;
251
+ }
252
+ .tdWithBorder {
253
+ border: 1px solid #000;
254
+ padding: 8px;
255
+ }
256
+ .imgText:hover {
257
+ color: rgb( 24,144,255);
258
+ cursor: pointer;
259
+ }
260
+ .tdWithNoTopBorder {
261
+ border-top-style: none;
262
+ border-left: 1px solid #000;
263
+ border-right: 1px solid #000;
264
+ border-bottom: 1px solid #000;
265
+ padding: 8px;
266
+ }
267
+ </style>