vue2-client 1.8.310 → 1.8.312

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 (222) 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/LowCode/lowcode.md +155 -155
  7. package/docs/LowCode/lowcodeForDeveloper.md +230 -230
  8. package/docs/index.md +30 -30
  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 +97 -97
  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 +438 -416
  23. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  24. package/src/base-client/components/common/AddressSearchCombobox/ic_map.svg +6 -6
  25. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  26. package/src/base-client/components/common/CitySelect/CitySelect.vue +342 -342
  27. package/src/base-client/components/common/CitySelect/index.js +3 -3
  28. package/src/base-client/components/common/CitySelect/index.md +109 -109
  29. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  30. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  31. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  32. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  33. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  34. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  35. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  36. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  37. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +149 -149
  38. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  39. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  40. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  41. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  42. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  43. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  44. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue +413 -350
  45. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  46. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +728 -699
  47. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  48. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +219 -162
  49. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  50. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  51. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  52. package/src/base-client/components/common/Tree/index.js +2 -2
  53. package/src/base-client/components/common/Upload/Upload.vue +239 -239
  54. package/src/base-client/components/common/Upload/index.js +3 -3
  55. package/src/base-client/components/common/XAddForm/XAddForm.vue +105 -105
  56. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +807 -807
  57. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  58. package/src/base-client/components/common/XAddNativeForm/lowcodeEditorRegister.js +16 -16
  59. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  60. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  61. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  62. package/src/base-client/components/common/XBadge/XBadge.vue +78 -78
  63. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  64. package/src/base-client/components/common/XDataCard/XDataCard.vue +355 -0
  65. package/src/base-client/components/common/XDataCard/index.js +3 -0
  66. package/src/base-client/components/common/XDataCard/index.md +1 -0
  67. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  68. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  69. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  70. package/src/base-client/components/common/XDescriptions/XDescriptions.vue +188 -187
  71. package/src/base-client/components/common/XDescriptions/XDescriptionsGroup.vue +306 -306
  72. package/src/base-client/components/common/XDescriptions/demo.vue +50 -50
  73. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  74. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  75. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +214 -214
  76. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  77. package/src/base-client/components/common/XForm/XForm.vue +294 -294
  78. package/src/base-client/components/common/XForm/XFormItem.vue +911 -911
  79. package/src/base-client/components/common/XForm/XTreeSelect.vue +207 -207
  80. package/src/base-client/components/common/XForm/index.md +178 -178
  81. package/src/base-client/components/common/XFormCol/XFormCol.vue +36 -36
  82. package/src/base-client/components/common/XFormGroup/XFormGroup.vue +241 -241
  83. package/src/base-client/components/common/XFormGroup/demo.vue +40 -40
  84. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  85. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  86. package/src/base-client/components/common/XFormGroupDetails/XFormGroupDetails.vue +72 -72
  87. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  88. package/src/base-client/components/common/XFormTable/XFormTable.vue +545 -539
  89. package/src/base-client/components/common/XFormTable/demo.vue +72 -72
  90. package/src/base-client/components/common/XFormTable/index.md +98 -98
  91. package/src/base-client/components/common/XFormTable/lowcodeEditorRegister.js +30 -30
  92. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +147 -147
  93. package/src/base-client/components/common/XReport/XReport.vue +858 -858
  94. package/src/base-client/components/common/XReport/XReportDemo.vue +266 -266
  95. package/src/base-client/components/common/XReport/XReportDesign.vue +509 -509
  96. package/src/base-client/components/common/XReport/XReportJsonRender.vue +295 -295
  97. package/src/base-client/components/common/XReport/XReportTrGroup.vue +801 -801
  98. package/src/base-client/components/common/XReport/index.js +3 -3
  99. package/src/base-client/components/common/XReport/index.md +44 -44
  100. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  101. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  102. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +137 -0
  103. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -0
  104. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -0
  105. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  106. package/src/base-client/components/common/XStepView/index.js +3 -3
  107. package/src/base-client/components/common/XStepView/index.md +31 -31
  108. package/src/base-client/components/common/XTable/XTable.vue +715 -676
  109. package/src/base-client/components/common/XTable/index.md +255 -255
  110. package/src/base-client/components/common/XTree/XTree.vue +423 -423
  111. package/src/base-client/components/common/XTree/index.js +3 -3
  112. package/src/base-client/components/common/XTree/index.md +36 -36
  113. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +114 -114
  114. package/src/base-client/components/common/XTreeOne/lowcodeEditorRegister.js +11 -11
  115. package/src/base-client/components/index.js +51 -51
  116. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  117. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  118. package/src/base-client/plugins/AppData.js +121 -121
  119. package/src/base-client/plugins/Config.js +19 -19
  120. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  121. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  122. package/src/bootstrap.js +39 -39
  123. package/src/components/CodeMirror/inedx.vue +118 -118
  124. package/src/components/CodeMirror/setting.js +40 -40
  125. package/src/components/FilePreview/FilePreview.vue +166 -166
  126. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  127. package/src/components/STable/index.js +361 -361
  128. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  129. package/src/components/checkbox/ImgCheckbox.vue +163 -163
  130. package/src/components/menu/SideMenu.vue +75 -75
  131. package/src/components/menu/menu.js +273 -273
  132. package/src/components/tool/AStepItem.vue +60 -60
  133. package/src/config/CreateQueryConfig.js +322 -322
  134. package/src/config/default/antd.config.js +89 -89
  135. package/src/config/default/setting.config.js +55 -55
  136. package/src/font-style/font.css +4 -4
  137. package/src/layouts/CommonLayout.vue +56 -56
  138. package/src/layouts/PageLayout.vue +151 -151
  139. package/src/layouts/SinglePageView.vue +138 -138
  140. package/src/layouts/header/AdminHeader.vue +132 -132
  141. package/src/layouts/header/HeaderNotice.vue +177 -177
  142. package/src/layouts/tabs/TabsHead.vue +189 -189
  143. package/src/layouts/tabs/TabsView.vue +387 -387
  144. package/src/lib.js +1 -1
  145. package/src/main.js +26 -26
  146. package/src/mock/extend/index.js +84 -84
  147. package/src/mock/goods/index.js +108 -108
  148. package/src/pages/AMisDemo/AMisDemo.vue +325 -325
  149. package/src/pages/AMisDemo/AMisDemo2.vue +74 -74
  150. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  151. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  152. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  153. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  154. package/src/pages/DynamicStatistics/FavoriteList.vue +51 -51
  155. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  156. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  157. package/src/pages/DynamicStatistics/index.vue +282 -282
  158. package/src/pages/Example/index.vue +193 -33
  159. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  160. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  161. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  162. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  163. package/src/pages/NewDynamicStatistics/FavoriteList.vue +51 -51
  164. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  165. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  166. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  167. package/src/pages/ServiceReview/index.vue +284 -284
  168. package/src/pages/XReportView/index.vue +62 -62
  169. package/src/pages/login/Login.vue +378 -378
  170. package/src/pages/login/LoginV3.vue +389 -389
  171. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1030
  172. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  173. package/src/pages/resourceManage/orgListManage.vue +98 -98
  174. package/src/pages/system/dictionary/index.vue +44 -44
  175. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  176. package/src/pages/system/monitor/operLog/index.vue +37 -37
  177. package/src/pages/system/settings/modifyPassword.vue +117 -117
  178. package/src/pages/system/ticket/index.vue +480 -480
  179. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  180. package/src/router/async/config.async.js +34 -34
  181. package/src/router/async/router.map.js +104 -104
  182. package/src/router/guards.js +223 -223
  183. package/src/router/index.js +27 -27
  184. package/src/router.js +19 -19
  185. package/src/services/api/TicketDetailsViewApi.js +46 -46
  186. package/src/services/api/cas.js +79 -79
  187. package/src/services/api/common.js +307 -307
  188. package/src/services/api/entity.js +18 -18
  189. package/src/services/api/index.js +17 -17
  190. package/src/services/api/restTools.js +46 -46
  191. package/src/services/apiService.js +14 -14
  192. package/src/services/user.js +71 -71
  193. package/src/services/v3Api.js +81 -81
  194. package/src/store/modules/index.js +5 -5
  195. package/src/store/modules/lowCode.js +33 -33
  196. package/src/store/modules/setting.js +119 -119
  197. package/src/theme/default/style.less +58 -58
  198. package/src/theme/global.less +139 -139
  199. package/src/utils/authority-utils.js +85 -85
  200. package/src/utils/errorCode.js +6 -6
  201. package/src/utils/formatter.js +80 -80
  202. package/src/utils/htmlToPDF.js +108 -108
  203. package/src/utils/htmlToPDFApi.js +5 -5
  204. package/src/utils/indexedDB.js +258 -258
  205. package/src/utils/login.js +188 -188
  206. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  207. package/src/utils/lowcode/lowcodeLog.js +29 -29
  208. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  209. package/src/utils/lowcode/registerComponentForEditor.js +11 -11
  210. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  211. package/src/utils/map-utils.js +47 -47
  212. package/src/utils/reg.js +95 -95
  213. package/src/utils/request.js +347 -347
  214. package/src/utils/routerUtil.js +435 -435
  215. package/src/utils/runEvalFunction.js +6 -6
  216. package/src/utils/util.js +241 -241
  217. package/src/utils/waterMark.js +31 -31
  218. package/test/Amis.spec.js +163 -163
  219. package/test/Tree.spec.js +167 -167
  220. package/test/myDialog.spec.js +46 -46
  221. package/vue.config.js +181 -181
  222. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
@@ -1,509 +1,509 @@
1
- <template>
2
- <div>
3
- <template v-if="this.activatedConfig.designMode === 'json'">
4
- <XReportJsonRender
5
- :img-prefix="imgPrefix"
6
- :server-name="serverName"
7
- :display-only="displayOnly"
8
- :show-title="showTitle"
9
- :no-padding="noPadding"
10
- :no-top-border="noTopBorder"
11
- :config="activatedConfig"/>
12
- </template>
13
- <template v-else>
14
- <div :class=" noPadding ? 'reportMainNoPadding' : 'reportMain'" :style="activatedConfig.width > 0 ? ('width:' + activatedConfig.width + 'px') : undefined">
15
- <!-- 大标题 -->
16
- <h2 class="reportTitle" v-if="showTitle && activatedConfig.title" v-html="activatedConfig.title"></h2>
17
- <!-- 小标题 / 介乎于标题与表格之间的内容 -->
18
- <div class="subTitle" v-if="activatedConfig.subTitle">
19
- <div class="subTitleItems" v-for="(item, itemIndex) in activatedConfig.subTitle" :key="itemIndex">
20
- <template v-if="item.type === 'column'">
21
- <span>{{ item.text }}</span>
22
- </template>
23
- <template v-else-if="item.type === 'inputs'">
24
- <div class="inputsDiv">
25
- <div class="inputsDivItem" v-for="(num, index) of calcFormatInputNum(item.format)" :key="index">
26
- <span class="inputsDivItemLabel">{{ displayFormatStartText(item.format) }}</span>
27
- <template v-if="!forDisplay">
28
- <template v-if="item.inputReadOnly === true">
29
- <a-input v-model="data[item.dataIndex][index]" :style="'width:' + (item.inputWidth ? item.inputWidth : '100') + '%'" :disabled="true"/>
30
- </template>
31
- <template v-else>
32
- <a-input v-model="data[item.dataIndex][index]" :style="'width:' + (item.inputWidth ? item.inputWidth : '100') + '%'"/>
33
- </template>
34
- </template>
35
- <template v-else>
36
- {{ activatedConfig.data[item.dataIndex][index] }}
37
- </template>
38
- <span class="inputsDivItemLabel">{{ displayFormatText(item.format, index) }}</span>
39
- </div>
40
- </div>
41
- </template>
42
- </div>
43
- </div>
44
- <!-- 主体表格 -->
45
- <table class="reportTable" v-if="render" :style="activatedConfig.style ? activatedConfig.style : undefined">
46
- <tbody class="reportTable">
47
- <template v-for="(row, rowIndex) in activatedConfig.columns">
48
- <!-- 插槽展示 -->
49
- <!-- <template v-if="row[0].type === 'slot'">-->
50
- <!-- <XReportSlot :config="activatedConfig" v-if="render" :slot-config-name="row[0].slotConfig" :key="rowIndex" :for-display="forDisplay"></XReportSlot>-->
51
- <!-- </template>-->
52
- <!-- 普通行 -->
53
- <template v-if="row[0].type !== 'inputColumns' && row[0].type !== 'list'">
54
- <template v-if="!forDisplay">
55
- <x-report-tr-group
56
- @updateImg="updateImg"
57
- :show-img-in-cell="showImgInCell"
58
- :img-prefix="imgPrefix"
59
- :server-name="serverName"
60
- :use-oss-for-img="useOssForImg"
61
- :key="rowIndex"
62
- :columns="row"
63
- :no-top-border="noTopBorder"
64
- :config-data="activatedConfig.data"
65
- :config="activatedConfig">
66
- </x-report-tr-group>
67
- </template>
68
- <template v-else>
69
- <x-report-tr-group
70
- @updateImg="updateImg"
71
- :show-img-in-cell="showImgInCell"
72
- :img-prefix="imgPrefix"
73
- :server-name="serverName"
74
- :use-oss-for-img="useOssForImg"
75
- :config="activatedConfig"
76
- :key="rowIndex"
77
- :columns="row"
78
- :no-top-border="noTopBorder"
79
- :config-data="activatedConfig.data"
80
- :display="true">
81
- </x-report-tr-group>
82
- </template>
83
- </template>
84
- <!-- 列表 -->
85
- <template v-else-if="row[0].type === 'list'" >
86
- <template v-for="(num, listIndex) in row[0].listLength + 1">
87
- <template v-if="!forDisplay">
88
- <x-report-tr-group
89
- @updateImg="updateImg"
90
- :show-img-in-cell="showImgInCell"
91
- :img-prefix="imgPrefix"
92
- :server-name="serverName"
93
- :use-oss-for-img="useOssForImg"
94
- :config="activatedConfig"
95
- :key="rowIndex + listIndex"
96
- :columns="row"
97
- :no-top-border="noTopBorder"
98
- :config-data="activatedConfig.data"
99
- :list-index="listIndex">
100
- </x-report-tr-group>
101
- </template>
102
- <template v-else>
103
- <x-report-tr-group
104
- @updateImg="updateImg"
105
- :show-img-in-cell="showImgInCell"
106
- :img-prefix="imgPrefix"
107
- :server-name="serverName"
108
- :use-oss-for-img="useOssForImg"
109
- :config="activatedConfig"
110
- :key="rowIndex + listIndex"
111
- :columns="row"
112
- :no-top-border="noTopBorder"
113
- :config-data="activatedConfig.data"
114
- :list-index="listIndex"
115
- :display="true">
116
- </x-report-tr-group>
117
- </template>
118
- </template>
119
- </template>
120
- <!-- 动态行 -->
121
- <template v-else>
122
- <template v-if="forDisplay">
123
- <x-report-tr-group
124
- @updateImg="updateImg"
125
- :show-img-in-cell="showImgInCell"
126
- :img-prefix="imgPrefix"
127
- :server-name="serverName"
128
- :use-oss-for-img="useOssForImg"
129
- :config="activatedConfig"
130
- :columns="row[0].definition"
131
- :config-data="{arr: activatedConfig.data[row[0].dataIndex]}"
132
- :input-columns="true"
133
- :no-top-border="noTopBorder"
134
- v-for="(item, definitionIndex) in activatedConfig.data[row[0].dataIndex]"
135
- :input-columns-definition-index="definitionIndex"
136
- :display="true"
137
- :key="row[0].dataIndex + definitionIndex + rowIndex"></x-report-tr-group>
138
- </template>
139
- <template v-if="!forDisplay">
140
- <x-report-tr-group
141
- @updateImg="updateImg"
142
- :show-img-in-cell="showImgInCell"
143
- :img-prefix="imgPrefix"
144
- :server-name="serverName"
145
- :use-oss-for-img="useOssForImg"
146
- :config="activatedConfig"
147
- :columns="row[0].definition"
148
- :config-data="{arr: activatedConfig.data[row[0].dataIndex]}"
149
- :input-columns="true"
150
- :no-top-border="noTopBorder"
151
- v-for="(item, definitionIndex) in activatedConfig.data[row[0].dataIndex]"
152
- :input-columns-definition-index="definitionIndex"
153
- :key="row[0].dataIndex + definitionIndex + rowIndex"></x-report-tr-group>
154
- <!-- 动态行交互按钮 -->
155
- <x-report-tr-group
156
- @updateImg="updateImg"
157
- :show-img-in-cell="showImgInCell"
158
- :img-prefix="imgPrefix"
159
- :server-name="serverName"
160
- :use-oss-for-img="useOssForImg"
161
- :config="activatedConfig"
162
- :key="rowIndex"
163
- :columns="row"
164
- :no-top-border="noTopBorder"
165
- :config-data="activatedConfig.data"
166
- :input-columns-button="true"
167
- :input-columns="true">
168
- </x-report-tr-group>
169
- </template>
170
- </template>
171
- </template>
172
- </tbody>
173
- </table>
174
- <div v-if="showImages" style="margin-top: 5%; display: flex;margin-bottom: 5%">
175
- <p>图片:</p>
176
- <template v-for="(img,imgIndex) in imageList">
177
- <div :key="imgIndex" style="margin-left: 3%;width: 200px">
178
- <img :src="img.url" class="img" :alt="img.name"/>
179
- <p style="overflow: hidden;text-overflow: ellipsis;white-space: nowrap;width: 100%;">{{ img.name }}</p>
180
- </div>
181
- </template>
182
- </div>
183
- </div>
184
- </template>
185
- </div>
186
- </template>
187
-
188
- <script>
189
- import XReportTrGroup from '@vue2-client/base-client/components/common/XReport/XReportTrGroup.vue'
190
- import XReportJsonRender from '@vue2-client/base-client/components/common/XReport/XReportJsonRender.vue'
191
- import { getConfigByName } from '@vue2-client/services/api/common'
192
-
193
- export default {
194
- name: 'XReportDesign',
195
- props: {
196
- // 配置
197
- config: {
198
- type: Object,
199
- require: true,
200
- default: () => {}
201
- },
202
- showImgInCell: {
203
- type: Boolean,
204
- default: false
205
- },
206
- // 是否是展示用
207
- forDisplay: {
208
- type: Boolean,
209
- default: false
210
- },
211
- // 命名空间
212
- serverName: {
213
- type: String,
214
- default: 'af-system'
215
- },
216
- // 是否只能展示不可编辑
217
- displayOnly: {
218
- type: Boolean,
219
- default: false
220
- },
221
- // 插槽名
222
- slotConfigName: {
223
- type: String,
224
- default: undefined
225
- },
226
- // 将图片全部展示在表格之后,挨个罗列
227
- showImages: {
228
- type: Boolean,
229
- default: false
230
- },
231
- // 图片罗列的数组
232
- imageList: {
233
- type: Array,
234
- default: undefined
235
- },
236
- // 表格没有边距
237
- noPadding: {
238
- type: Boolean,
239
- default: false
240
- },
241
- // 表格没有上边框,与noPadding搭配可以实现连续表格
242
- noTopBorder: {
243
- type: Boolean,
244
- default: false
245
- },
246
- // 是否展示标题
247
- showTitle: {
248
- type: Boolean,
249
- default: true
250
- },
251
- // 图片是否使用OSS来保存
252
- useOssForImg: {
253
- type: Boolean,
254
- default: true
255
- },
256
- // 图片上传后添加前缀
257
- imgPrefix: {
258
- type: String,
259
- default: undefined
260
- }
261
- },
262
- components: {
263
- XReportTrGroup,
264
- XReportJsonRender
265
- },
266
- data () {
267
- return {
268
- // 表单的数据
269
- data: this.config.data,
270
- // 插槽配置
271
- slotConfig: undefined,
272
- // 控制是否渲染
273
- render: false,
274
- // 用于展示的配置
275
- activatedConfig: {}
276
- }
277
- },
278
- methods: {
279
- updateImg (data) {
280
- this.$emit('updateImg', data)
281
- },
282
- // 根据format计算需要多少个输入框
283
- calcFormatInputNum (formatStr) {
284
- let count = 0
285
- for (let i = 0; i < formatStr.length; i++) {
286
- if (formatStr[i] == '{') {
287
- count++
288
- }
289
- }
290
- return count
291
- },
292
- // 根据format计算输入框之后的文字显示
293
- displayFormatText (formatStr, num) {
294
- let start = 0
295
- let count = 0
296
- num++
297
- for (let i = 0; i < formatStr.length; i++) {
298
- if (formatStr[i] === '}') {
299
- start = i
300
- count++
301
- }
302
- if (count === num) {
303
- for (let j = start + 1; j < formatStr.length; j++) {
304
- if (formatStr[j] === '{') {
305
- return formatStr.slice(start + 1, j)
306
- }
307
- if (j === formatStr.length - 1 && formatStr[j] !== '}') {
308
- return formatStr[j]
309
- }
310
- }
311
- }
312
- }
313
- },
314
- // 根据format计算输入框之前的文字显示
315
- displayFormatStartText (formatStr) {
316
- let count = 0
317
- for (let i = 0; i < formatStr.length; i++) {
318
- if (formatStr[i] === '{') {
319
- break
320
- } else {
321
- count++
322
- }
323
- }
324
- return formatStr.slice(0, count)
325
- },
326
- },
327
- created () {
328
- if (this.slotConfigName) {
329
- getConfigByName(this.slotConfigName, undefined, res => {
330
- this.slotConfig = res
331
- res.data = { ...res.data, ...this.data }
332
- this.config.data = res.data
333
- this.activatedConfig = res
334
- this.render = true
335
- })
336
- } else {
337
- this.activatedConfig = this.config
338
- this.render = true
339
- }
340
- if (this.activatedConfig.designMode !== 'json') {
341
- this.activatedConfig.columns.forEach(row => {
342
- if (row[0].type === 'list' && row[0].listLength === 1) {
343
- row.forEach(cell => {
344
- cell.listLength = this.activatedConfig.data[cell.dataIndex].length
345
- })
346
- }
347
- })
348
- }
349
- },
350
- mounted () {
351
- },
352
- watch: {
353
- config: {
354
- deep: true,
355
- handler (newVal) {
356
- }
357
- }
358
- }
359
- }
360
- </script>
361
-
362
- <style lang="less" scoped>
363
- .img{
364
- width: 95%;
365
- height: 180px;
366
- object-fit: cover;
367
- }
368
- .reportMain {
369
- text-align: center;
370
- margin: 0 auto;
371
- font-size: 16px;
372
- color: #000;
373
- background-color: #fff;
374
- padding: 15px;
375
- border-radius: 8px;
376
-
377
- .reportTitle {
378
- font-weight: bold;
379
- }
380
-
381
- .subTitle {
382
- display: flex;
383
- justify-content: space-between;
384
- margin-bottom: 1%;
385
-
386
- .subTitleItems {
387
- max-width: 30%;
388
- }
389
- }
390
-
391
- .inputsDiv {
392
- display: flex;
393
- justify-content: space-between;
394
- .inputsDivItem {
395
- display: flex;
396
- align-items: center;
397
- padding: 0 4px;
398
- white-space: nowrap;
399
- .inputsDivItemLabel {
400
- padding: 0 4px;
401
- }
402
- }
403
- }
404
-
405
- .reportTable {
406
- width: 100%;
407
- border-collapse: collapse;
408
- table-layout:fixed;
409
- word-break:break-all;
410
- }
411
- }
412
- .reportMainForDisplay {
413
- text-align: center;
414
- margin: 10% auto;
415
- font-size: 16px;
416
- color: #000;
417
- background-color: #fff;
418
- padding: 15px;
419
- border-radius: 8px;
420
-
421
- .reportTitle {
422
- font-weight: bold;
423
- }
424
-
425
- .subTitle {
426
- display: flex;
427
- justify-content: space-between;
428
-
429
- .subTitleItems {
430
- max-width: 30%;
431
- }
432
- }
433
-
434
- .inputsDiv {
435
- display: flex;
436
- justify-content: space-around;
437
- .inputsDivItem {
438
- display: flex;
439
- align-items: center;
440
- padding: 0 4px;
441
- white-space: nowrap;
442
- .inputsDivItemLabel {
443
- padding: 0 4px;
444
- }
445
- }
446
- }
447
-
448
- .reportTable {
449
- width: 100%;
450
- border-collapse: collapse;
451
- table-layout:fixed;
452
- word-break:break-all;
453
- }
454
- }
455
- .reportMainNoPadding {
456
- text-align: center;
457
- margin: 0 auto;
458
- font-size: 16px;
459
- color: #000;
460
- background-color: #fff;
461
- border-radius: 8px;
462
-
463
- .reportTitle {
464
- font-weight: bold;
465
- }
466
-
467
- .subTitle {
468
- display: flex;
469
- justify-content: space-between;
470
-
471
- .subTitleItems {
472
- max-width: 30%;
473
- }
474
- }
475
-
476
- .inputsDiv {
477
- display: flex;
478
- justify-content: space-between;
479
- .inputsDivItem {
480
- display: flex;
481
- align-items: center;
482
- padding: 0 4px;
483
- white-space: nowrap;
484
- .inputsDivItemLabel {
485
- padding: 0 4px;
486
- }
487
- }
488
- }
489
-
490
- .reportTable {
491
- width: 100%;
492
- border-collapse: collapse;
493
- table-layout:fixed;
494
- word-break:break-all;
495
- }
496
- }
497
- .tools{
498
- position: fixed;
499
- right: 2%;
500
- text-align: right;
501
- width: 60%;
502
- cursor: pointer;
503
- .toolsItem{
504
- width: 15%;
505
- margin-right: 3%;
506
- display: inline-block;
507
- }
508
- }
509
- </style>
1
+ <template>
2
+ <div>
3
+ <template v-if="this.activatedConfig.designMode === 'json'">
4
+ <XReportJsonRender
5
+ :img-prefix="imgPrefix"
6
+ :server-name="serverName"
7
+ :display-only="displayOnly"
8
+ :show-title="showTitle"
9
+ :no-padding="noPadding"
10
+ :no-top-border="noTopBorder"
11
+ :config="activatedConfig"/>
12
+ </template>
13
+ <template v-else>
14
+ <div :class=" noPadding ? 'reportMainNoPadding' : 'reportMain'" :style="activatedConfig.width > 0 ? ('width:' + activatedConfig.width + 'px') : undefined">
15
+ <!-- 大标题 -->
16
+ <h2 class="reportTitle" v-if="showTitle && activatedConfig.title" v-html="activatedConfig.title"></h2>
17
+ <!-- 小标题 / 介乎于标题与表格之间的内容 -->
18
+ <div class="subTitle" v-if="activatedConfig.subTitle">
19
+ <div class="subTitleItems" v-for="(item, itemIndex) in activatedConfig.subTitle" :key="itemIndex">
20
+ <template v-if="item.type === 'column'">
21
+ <span>{{ item.text }}</span>
22
+ </template>
23
+ <template v-else-if="item.type === 'inputs'">
24
+ <div class="inputsDiv">
25
+ <div class="inputsDivItem" v-for="(num, index) of calcFormatInputNum(item.format)" :key="index">
26
+ <span class="inputsDivItemLabel">{{ displayFormatStartText(item.format) }}</span>
27
+ <template v-if="!forDisplay">
28
+ <template v-if="item.inputReadOnly === true">
29
+ <a-input v-model="data[item.dataIndex][index]" :style="'width:' + (item.inputWidth ? item.inputWidth : '100') + '%'" :disabled="true"/>
30
+ </template>
31
+ <template v-else>
32
+ <a-input v-model="data[item.dataIndex][index]" :style="'width:' + (item.inputWidth ? item.inputWidth : '100') + '%'"/>
33
+ </template>
34
+ </template>
35
+ <template v-else>
36
+ {{ activatedConfig.data[item.dataIndex][index] }}
37
+ </template>
38
+ <span class="inputsDivItemLabel">{{ displayFormatText(item.format, index) }}</span>
39
+ </div>
40
+ </div>
41
+ </template>
42
+ </div>
43
+ </div>
44
+ <!-- 主体表格 -->
45
+ <table class="reportTable" v-if="render" :style="activatedConfig.style ? activatedConfig.style : undefined">
46
+ <tbody class="reportTable">
47
+ <template v-for="(row, rowIndex) in activatedConfig.columns">
48
+ <!-- 插槽展示 -->
49
+ <!-- <template v-if="row[0].type === 'slot'">-->
50
+ <!-- <XReportSlot :config="activatedConfig" v-if="render" :slot-config-name="row[0].slotConfig" :key="rowIndex" :for-display="forDisplay"></XReportSlot>-->
51
+ <!-- </template>-->
52
+ <!-- 普通行 -->
53
+ <template v-if="row[0].type !== 'inputColumns' && row[0].type !== 'list'">
54
+ <template v-if="!forDisplay">
55
+ <x-report-tr-group
56
+ @updateImg="updateImg"
57
+ :show-img-in-cell="showImgInCell"
58
+ :img-prefix="imgPrefix"
59
+ :server-name="serverName"
60
+ :use-oss-for-img="useOssForImg"
61
+ :key="rowIndex"
62
+ :columns="row"
63
+ :no-top-border="noTopBorder"
64
+ :config-data="activatedConfig.data"
65
+ :config="activatedConfig">
66
+ </x-report-tr-group>
67
+ </template>
68
+ <template v-else>
69
+ <x-report-tr-group
70
+ @updateImg="updateImg"
71
+ :show-img-in-cell="showImgInCell"
72
+ :img-prefix="imgPrefix"
73
+ :server-name="serverName"
74
+ :use-oss-for-img="useOssForImg"
75
+ :config="activatedConfig"
76
+ :key="rowIndex"
77
+ :columns="row"
78
+ :no-top-border="noTopBorder"
79
+ :config-data="activatedConfig.data"
80
+ :display="true">
81
+ </x-report-tr-group>
82
+ </template>
83
+ </template>
84
+ <!-- 列表 -->
85
+ <template v-else-if="row[0].type === 'list'" >
86
+ <template v-for="(num, listIndex) in row[0].listLength + 1">
87
+ <template v-if="!forDisplay">
88
+ <x-report-tr-group
89
+ @updateImg="updateImg"
90
+ :show-img-in-cell="showImgInCell"
91
+ :img-prefix="imgPrefix"
92
+ :server-name="serverName"
93
+ :use-oss-for-img="useOssForImg"
94
+ :config="activatedConfig"
95
+ :key="rowIndex + listIndex"
96
+ :columns="row"
97
+ :no-top-border="noTopBorder"
98
+ :config-data="activatedConfig.data"
99
+ :list-index="listIndex">
100
+ </x-report-tr-group>
101
+ </template>
102
+ <template v-else>
103
+ <x-report-tr-group
104
+ @updateImg="updateImg"
105
+ :show-img-in-cell="showImgInCell"
106
+ :img-prefix="imgPrefix"
107
+ :server-name="serverName"
108
+ :use-oss-for-img="useOssForImg"
109
+ :config="activatedConfig"
110
+ :key="rowIndex + listIndex"
111
+ :columns="row"
112
+ :no-top-border="noTopBorder"
113
+ :config-data="activatedConfig.data"
114
+ :list-index="listIndex"
115
+ :display="true">
116
+ </x-report-tr-group>
117
+ </template>
118
+ </template>
119
+ </template>
120
+ <!-- 动态行 -->
121
+ <template v-else>
122
+ <template v-if="forDisplay">
123
+ <x-report-tr-group
124
+ @updateImg="updateImg"
125
+ :show-img-in-cell="showImgInCell"
126
+ :img-prefix="imgPrefix"
127
+ :server-name="serverName"
128
+ :use-oss-for-img="useOssForImg"
129
+ :config="activatedConfig"
130
+ :columns="row[0].definition"
131
+ :config-data="{arr: activatedConfig.data[row[0].dataIndex]}"
132
+ :input-columns="true"
133
+ :no-top-border="noTopBorder"
134
+ v-for="(item, definitionIndex) in activatedConfig.data[row[0].dataIndex]"
135
+ :input-columns-definition-index="definitionIndex"
136
+ :display="true"
137
+ :key="row[0].dataIndex + definitionIndex + rowIndex"></x-report-tr-group>
138
+ </template>
139
+ <template v-if="!forDisplay">
140
+ <x-report-tr-group
141
+ @updateImg="updateImg"
142
+ :show-img-in-cell="showImgInCell"
143
+ :img-prefix="imgPrefix"
144
+ :server-name="serverName"
145
+ :use-oss-for-img="useOssForImg"
146
+ :config="activatedConfig"
147
+ :columns="row[0].definition"
148
+ :config-data="{arr: activatedConfig.data[row[0].dataIndex]}"
149
+ :input-columns="true"
150
+ :no-top-border="noTopBorder"
151
+ v-for="(item, definitionIndex) in activatedConfig.data[row[0].dataIndex]"
152
+ :input-columns-definition-index="definitionIndex"
153
+ :key="row[0].dataIndex + definitionIndex + rowIndex"></x-report-tr-group>
154
+ <!-- 动态行交互按钮 -->
155
+ <x-report-tr-group
156
+ @updateImg="updateImg"
157
+ :show-img-in-cell="showImgInCell"
158
+ :img-prefix="imgPrefix"
159
+ :server-name="serverName"
160
+ :use-oss-for-img="useOssForImg"
161
+ :config="activatedConfig"
162
+ :key="rowIndex"
163
+ :columns="row"
164
+ :no-top-border="noTopBorder"
165
+ :config-data="activatedConfig.data"
166
+ :input-columns-button="true"
167
+ :input-columns="true">
168
+ </x-report-tr-group>
169
+ </template>
170
+ </template>
171
+ </template>
172
+ </tbody>
173
+ </table>
174
+ <div v-if="showImages" style="margin-top: 5%; display: flex;margin-bottom: 5%">
175
+ <p>图片:</p>
176
+ <template v-for="(img,imgIndex) in imageList">
177
+ <div :key="imgIndex" style="margin-left: 3%;width: 200px">
178
+ <img :src="img.url" class="img" :alt="img.name"/>
179
+ <p style="overflow: hidden;text-overflow: ellipsis;white-space: nowrap;width: 100%;">{{ img.name }}</p>
180
+ </div>
181
+ </template>
182
+ </div>
183
+ </div>
184
+ </template>
185
+ </div>
186
+ </template>
187
+
188
+ <script>
189
+ import XReportTrGroup from '@vue2-client/base-client/components/common/XReport/XReportTrGroup.vue'
190
+ import XReportJsonRender from '@vue2-client/base-client/components/common/XReport/XReportJsonRender.vue'
191
+ import { getConfigByName } from '@vue2-client/services/api/common'
192
+
193
+ export default {
194
+ name: 'XReportDesign',
195
+ props: {
196
+ // 配置
197
+ config: {
198
+ type: Object,
199
+ require: true,
200
+ default: () => {}
201
+ },
202
+ showImgInCell: {
203
+ type: Boolean,
204
+ default: false
205
+ },
206
+ // 是否是展示用
207
+ forDisplay: {
208
+ type: Boolean,
209
+ default: false
210
+ },
211
+ // 命名空间
212
+ serverName: {
213
+ type: String,
214
+ default: 'af-system'
215
+ },
216
+ // 是否只能展示不可编辑
217
+ displayOnly: {
218
+ type: Boolean,
219
+ default: false
220
+ },
221
+ // 插槽名
222
+ slotConfigName: {
223
+ type: String,
224
+ default: undefined
225
+ },
226
+ // 将图片全部展示在表格之后,挨个罗列
227
+ showImages: {
228
+ type: Boolean,
229
+ default: false
230
+ },
231
+ // 图片罗列的数组
232
+ imageList: {
233
+ type: Array,
234
+ default: undefined
235
+ },
236
+ // 表格没有边距
237
+ noPadding: {
238
+ type: Boolean,
239
+ default: false
240
+ },
241
+ // 表格没有上边框,与noPadding搭配可以实现连续表格
242
+ noTopBorder: {
243
+ type: Boolean,
244
+ default: false
245
+ },
246
+ // 是否展示标题
247
+ showTitle: {
248
+ type: Boolean,
249
+ default: true
250
+ },
251
+ // 图片是否使用OSS来保存
252
+ useOssForImg: {
253
+ type: Boolean,
254
+ default: true
255
+ },
256
+ // 图片上传后添加前缀
257
+ imgPrefix: {
258
+ type: String,
259
+ default: undefined
260
+ }
261
+ },
262
+ components: {
263
+ XReportTrGroup,
264
+ XReportJsonRender
265
+ },
266
+ data () {
267
+ return {
268
+ // 表单的数据
269
+ data: this.config.data,
270
+ // 插槽配置
271
+ slotConfig: undefined,
272
+ // 控制是否渲染
273
+ render: false,
274
+ // 用于展示的配置
275
+ activatedConfig: {}
276
+ }
277
+ },
278
+ methods: {
279
+ updateImg (data) {
280
+ this.$emit('updateImg', data)
281
+ },
282
+ // 根据format计算需要多少个输入框
283
+ calcFormatInputNum (formatStr) {
284
+ let count = 0
285
+ for (let i = 0; i < formatStr.length; i++) {
286
+ if (formatStr[i] == '{') {
287
+ count++
288
+ }
289
+ }
290
+ return count
291
+ },
292
+ // 根据format计算输入框之后的文字显示
293
+ displayFormatText (formatStr, num) {
294
+ let start = 0
295
+ let count = 0
296
+ num++
297
+ for (let i = 0; i < formatStr.length; i++) {
298
+ if (formatStr[i] === '}') {
299
+ start = i
300
+ count++
301
+ }
302
+ if (count === num) {
303
+ for (let j = start + 1; j < formatStr.length; j++) {
304
+ if (formatStr[j] === '{') {
305
+ return formatStr.slice(start + 1, j)
306
+ }
307
+ if (j === formatStr.length - 1 && formatStr[j] !== '}') {
308
+ return formatStr[j]
309
+ }
310
+ }
311
+ }
312
+ }
313
+ },
314
+ // 根据format计算输入框之前的文字显示
315
+ displayFormatStartText (formatStr) {
316
+ let count = 0
317
+ for (let i = 0; i < formatStr.length; i++) {
318
+ if (formatStr[i] === '{') {
319
+ break
320
+ } else {
321
+ count++
322
+ }
323
+ }
324
+ return formatStr.slice(0, count)
325
+ },
326
+ },
327
+ created () {
328
+ if (this.slotConfigName) {
329
+ getConfigByName(this.slotConfigName, undefined, res => {
330
+ this.slotConfig = res
331
+ res.data = { ...res.data, ...this.data }
332
+ this.config.data = res.data
333
+ this.activatedConfig = res
334
+ this.render = true
335
+ })
336
+ } else {
337
+ this.activatedConfig = this.config
338
+ this.render = true
339
+ }
340
+ if (this.activatedConfig.designMode !== 'json') {
341
+ this.activatedConfig.columns.forEach(row => {
342
+ if (row[0].type === 'list' && row[0].listLength === 1) {
343
+ row.forEach(cell => {
344
+ cell.listLength = this.activatedConfig.data[cell.dataIndex].length
345
+ })
346
+ }
347
+ })
348
+ }
349
+ },
350
+ mounted () {
351
+ },
352
+ watch: {
353
+ config: {
354
+ deep: true,
355
+ handler (newVal) {
356
+ }
357
+ }
358
+ }
359
+ }
360
+ </script>
361
+
362
+ <style lang="less" scoped>
363
+ .img{
364
+ width: 95%;
365
+ height: 180px;
366
+ object-fit: cover;
367
+ }
368
+ .reportMain {
369
+ text-align: center;
370
+ margin: 0 auto;
371
+ font-size: 16px;
372
+ color: #000;
373
+ background-color: #fff;
374
+ padding: 15px;
375
+ border-radius: 8px;
376
+
377
+ .reportTitle {
378
+ font-weight: bold;
379
+ }
380
+
381
+ .subTitle {
382
+ display: flex;
383
+ justify-content: space-between;
384
+ margin-bottom: 1%;
385
+
386
+ .subTitleItems {
387
+ max-width: 30%;
388
+ }
389
+ }
390
+
391
+ .inputsDiv {
392
+ display: flex;
393
+ justify-content: space-between;
394
+ .inputsDivItem {
395
+ display: flex;
396
+ align-items: center;
397
+ padding: 0 4px;
398
+ white-space: nowrap;
399
+ .inputsDivItemLabel {
400
+ padding: 0 4px;
401
+ }
402
+ }
403
+ }
404
+
405
+ .reportTable {
406
+ width: 100%;
407
+ border-collapse: collapse;
408
+ table-layout:fixed;
409
+ word-break:break-all;
410
+ }
411
+ }
412
+ .reportMainForDisplay {
413
+ text-align: center;
414
+ margin: 10% auto;
415
+ font-size: 16px;
416
+ color: #000;
417
+ background-color: #fff;
418
+ padding: 15px;
419
+ border-radius: 8px;
420
+
421
+ .reportTitle {
422
+ font-weight: bold;
423
+ }
424
+
425
+ .subTitle {
426
+ display: flex;
427
+ justify-content: space-between;
428
+
429
+ .subTitleItems {
430
+ max-width: 30%;
431
+ }
432
+ }
433
+
434
+ .inputsDiv {
435
+ display: flex;
436
+ justify-content: space-around;
437
+ .inputsDivItem {
438
+ display: flex;
439
+ align-items: center;
440
+ padding: 0 4px;
441
+ white-space: nowrap;
442
+ .inputsDivItemLabel {
443
+ padding: 0 4px;
444
+ }
445
+ }
446
+ }
447
+
448
+ .reportTable {
449
+ width: 100%;
450
+ border-collapse: collapse;
451
+ table-layout:fixed;
452
+ word-break:break-all;
453
+ }
454
+ }
455
+ .reportMainNoPadding {
456
+ text-align: center;
457
+ margin: 0 auto;
458
+ font-size: 16px;
459
+ color: #000;
460
+ background-color: #fff;
461
+ border-radius: 8px;
462
+
463
+ .reportTitle {
464
+ font-weight: bold;
465
+ }
466
+
467
+ .subTitle {
468
+ display: flex;
469
+ justify-content: space-between;
470
+
471
+ .subTitleItems {
472
+ max-width: 30%;
473
+ }
474
+ }
475
+
476
+ .inputsDiv {
477
+ display: flex;
478
+ justify-content: space-between;
479
+ .inputsDivItem {
480
+ display: flex;
481
+ align-items: center;
482
+ padding: 0 4px;
483
+ white-space: nowrap;
484
+ .inputsDivItemLabel {
485
+ padding: 0 4px;
486
+ }
487
+ }
488
+ }
489
+
490
+ .reportTable {
491
+ width: 100%;
492
+ border-collapse: collapse;
493
+ table-layout:fixed;
494
+ word-break:break-all;
495
+ }
496
+ }
497
+ .tools{
498
+ position: fixed;
499
+ right: 2%;
500
+ text-align: right;
501
+ width: 60%;
502
+ cursor: pointer;
503
+ .toolsItem{
504
+ width: 15%;
505
+ margin-right: 3%;
506
+ display: inline-block;
507
+ }
508
+ }
509
+ </style>