vue2-client 1.10.21 → 1.10.26

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 (426) hide show
  1. package/.cursorrules +19 -19
  2. package/.env +19 -19
  3. package/.env.gaslink +19 -19
  4. package/.env.his +19 -19
  5. package/.env.liuli +19 -19
  6. package/.env.revenue +19 -19
  7. package/.env.scada +19 -19
  8. package/.eslintrc.js +90 -90
  9. package/CHANGELOG.md +824 -824
  10. package/Components.md +60 -60
  11. package/babel.config.js +21 -21
  12. package/docs/Logic/345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +45 -45
  13. package/docs/LowCode/lowcode.md +155 -155
  14. package/docs/LowCode/lowcodeForDeveloper.md +230 -230
  15. package/docs/index.md +30 -30
  16. package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +174 -174
  17. package/index.js +31 -31
  18. package/jest-transform-stub.js +8 -8
  19. package/jest.config.js +21 -21
  20. package/jest.setup.js +7 -7
  21. package/jsconfig.json +19 -19
  22. package/package.json +107 -107
  23. package/public/his/editor/editor.html +51 -51
  24. package/public/his/editor/mock/bind_data.html +779 -779
  25. package/public/his/editor/mock/data_table.html +40 -40
  26. package/public/his/editor/mock/sign.html +75 -75
  27. package/public/his/editor/vender/JsBarcode.all.js +3669 -3669
  28. package/public/his/editor/vender/date97/My97DatePicker.htm +65 -65
  29. package/public/his/editor/vender/date97/WdatePicker.js +677 -677
  30. package/public/his/editor/vender/date97/calendar.js +4 -4
  31. package/public/his/editor/vender/date97/lang/en.js +13 -13
  32. package/public/his/editor/vender/date97/lang/zh-cn.js +13 -13
  33. package/public/his/editor/vender/date97/lang/zh-tw.js +13 -13
  34. package/public/his/editor/vender/date97/skin/WdatePicker.css +10 -10
  35. package/public/his/editor/vender/date97/skin/default/datepicker.css +328 -328
  36. package/public/his/editor/vender/date97/skin/ext/datepicker.css +308 -308
  37. package/public/his/editor/vender/date97/skin/whyGreen/datepicker.css +255 -255
  38. package/public/his/editor/vender/diff.js +1627 -1627
  39. package/public/his/editor/vender/editor.js +1 -1
  40. package/public/his/editor/vender/fabric.js +31187 -31187
  41. package/public/his/editor/vender/jquery/jquery.base64.js +190 -190
  42. package/public/his/editor/vender/jquery/jquery.js +10872 -10872
  43. package/public/his/editor/vender/jquery/jquery.print.js +255 -255
  44. package/public/his/editor/vender/jquery/zTreeStyle/zTreeStyle.css +96 -96
  45. package/public/his/editor/vender/mui/mui.min.css +4 -4
  46. package/public/his/editor/vender/mui/mui.min.js +5 -5
  47. package/public/his/editor/vender/mui/mui.picker.min.css +6 -6
  48. package/public/his/editor/vender/mui/mui.picker.min.js +6 -6
  49. package/public/his/editor/vender/qrcode.js +7 -7
  50. package/public/his/editor/vender/requirejs/require.js +2145 -2145
  51. package/public/his/editor/vender/signature/jSignature.CompressorSVG.js +518 -518
  52. package/public/his/editor/vender/signature/jSignature.UndoButton.js +164 -164
  53. package/public/his/editor/vender/signature/jSignature.js +1486 -1486
  54. package/public/his/editor/vender/validator.js +5094 -5094
  55. package/public/his/editor/vender/weui/weui.css +5659 -5659
  56. package/public/his/editor/vender/weui/weui.min.css +4 -4
  57. package/public/his/editor/vender/weui/weui.min.js +11 -11
  58. package/public/index.html +27 -27
  59. package/src/App.vue +196 -196
  60. package/src/ReportView.js +19 -19
  61. package/src/assets/img/querySlotDemo.svg +15 -15
  62. package/src/assets/svg/badtwo.svg +1 -1
  63. package/src/assets/svg/goodtwo.svg +1 -1
  64. package/src/base-client/components/AI/AskAiBtn.vue +136 -136
  65. package/src/base-client/components/AI/demo.vue +31 -31
  66. package/src/base-client/components/common/AMisRender/index.js +3 -3
  67. package/src/base-client/components/common/AMisRender/index.vue +263 -263
  68. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +470 -470
  69. package/src/base-client/components/common/AddressSearchCombobox/IcMapIcon.vue +16 -16
  70. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  71. package/src/base-client/components/common/AddressSearchCombobox/ic_map.svg +6 -6
  72. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  73. package/src/base-client/components/common/CitySelect/CitySelect.vue +342 -342
  74. package/src/base-client/components/common/CitySelect/index.js +3 -3
  75. package/src/base-client/components/common/CitySelect/index.md +109 -109
  76. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  77. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  78. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  79. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  80. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  81. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  82. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  83. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  84. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +149 -149
  85. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  86. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  87. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  88. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  89. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  90. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  91. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorModal.vue +108 -108
  92. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue +413 -413
  93. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  94. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +728 -728
  95. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  96. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +219 -219
  97. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeAddPageModal.vue +117 -117
  98. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeCustomJSModal.vue +80 -80
  99. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeEventEditorModal.vue +398 -398
  100. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLifeCycleModal.vue +65 -65
  101. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicCallbackModal.vue +64 -64
  102. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicParamModal.vue +73 -73
  103. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeRunFunctionParamModal.vue +76 -76
  104. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  105. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  106. package/src/base-client/components/common/Recording/Recording.vue +243 -243
  107. package/src/base-client/components/common/Recording/index.js +3 -3
  108. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  109. package/src/base-client/components/common/Tree/index.js +2 -2
  110. package/src/base-client/components/common/Upload/Upload.vue +322 -322
  111. package/src/base-client/components/common/Upload/index.js +3 -3
  112. package/src/base-client/components/common/XAddForm/XAddForm.vue +113 -113
  113. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +1146 -1146
  114. package/src/base-client/components/common/XAddNativeForm/demo.vue +43 -43
  115. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  116. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  117. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  118. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  119. package/src/base-client/components/common/XAddReport/XAddReport.vue +207 -207
  120. package/src/base-client/components/common/XAddReport/index.js +3 -3
  121. package/src/base-client/components/common/XAddReport/index.md +56 -56
  122. package/src/base-client/components/common/XBadge/XBadge.vue +94 -94
  123. package/src/base-client/components/common/XButtons/XButtonDemo.vue +28 -28
  124. package/src/base-client/components/common/XButtons/XButtons.vue +71 -71
  125. package/src/base-client/components/common/XButtons/index.js +3 -3
  126. package/src/base-client/components/common/XButtons/index.md +61 -61
  127. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  128. package/src/base-client/components/common/XCheckList/XCheckList.vue +106 -106
  129. package/src/base-client/components/common/XCheckList/XCheckListDemo.vue +41 -41
  130. package/src/base-client/components/common/XConversation/XConversation.vue +263 -263
  131. package/src/base-client/components/common/XConversation/XConversationDemo.vue +28 -28
  132. package/src/base-client/components/common/XDataCard/XDataCard.vue +565 -411
  133. package/src/base-client/components/common/XDataCard/index.js +3 -3
  134. package/src/base-client/components/common/XDataCard/index.md +1 -1
  135. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  136. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  137. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  138. package/src/base-client/components/common/XDatePicker/demo.vue +153 -153
  139. package/src/base-client/components/common/XDatePicker/index.vue +259 -259
  140. package/src/base-client/components/common/XDescriptions/XDescriptions.vue +169 -169
  141. package/src/base-client/components/common/XDescriptions/XDescriptionsGroup.vue +304 -304
  142. package/src/base-client/components/common/XDescriptions/demo.vue +50 -50
  143. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  144. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  145. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +238 -238
  146. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  147. package/src/base-client/components/common/XForm/XForm.vue +393 -393
  148. package/src/base-client/components/common/XForm/XFormItem.vue +1286 -1286
  149. package/src/base-client/components/common/XForm/XStatusButton.vue +54 -54
  150. package/src/base-client/components/common/XForm/XTreeSelect.vue +250 -250
  151. package/src/base-client/components/common/XForm/index.md +178 -178
  152. package/src/base-client/components/common/XForm/itemComponent/XClickChangeBtn/index.vue +49 -49
  153. package/src/base-client/components/common/XFormCol/XFormCol.vue +157 -157
  154. package/src/base-client/components/common/XFormGroup/XFormGroup.vue +304 -304
  155. package/src/base-client/components/common/XFormGroup/demo.vue +46 -46
  156. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  157. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  158. package/src/base-client/components/common/XFormGroupDetails/XFormGroupDetails.vue +72 -72
  159. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  160. package/src/base-client/components/common/XFormTable/XFormTable.vue +856 -856
  161. package/src/base-client/components/common/XFormTable/demo.vue +60 -60
  162. package/src/base-client/components/common/XFormTable/index.md +92 -92
  163. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +167 -167
  164. package/src/base-client/components/common/XLabelSelect/XLabelSelect.vue +110 -110
  165. package/src/base-client/components/common/XLabelSelect/XLabelSelectDemo.vue +35 -35
  166. package/src/base-client/components/common/XLicensePlate/XLicensePlate.vue +193 -193
  167. package/src/base-client/components/common/XLicensePlate/XLicensePlateDemo.vue +48 -48
  168. package/src/base-client/components/common/XPrint/Demo.vue +41 -41
  169. package/src/base-client/components/common/XPrint/OpenInvoice.vue +21 -21
  170. package/src/base-client/components/common/XPrint/PrintBill.vue +302 -302
  171. package/src/base-client/components/common/XPrint/PrintHtml.js +98 -98
  172. package/src/base-client/components/common/XPrint/css/hiPrintCss.js +359 -359
  173. package/src/base-client/components/common/XPrint/css/lodopCss.js +26 -26
  174. package/src/base-client/components/common/XPrint/css/print-lock.css +351 -351
  175. package/src/base-client/components/common/XPrint/index.vue +97 -97
  176. package/src/base-client/components/common/XReport/XReport.vue +892 -892
  177. package/src/base-client/components/common/XReport/XReportDemo.vue +71 -304
  178. package/src/base-client/components/common/XReport/XReportDesign.vue +463 -463
  179. package/src/base-client/components/common/XReport/XReportJsonRender.vue +381 -381
  180. package/src/base-client/components/common/XReport/XReportTrGroup.vue +816 -808
  181. package/src/base-client/components/common/XReport/index.js +3 -3
  182. package/src/base-client/components/common/XReport/index.md +44 -44
  183. package/src/base-client/components/common/XReportDrawer/XReportDrawer.vue +201 -201
  184. package/src/base-client/components/common/XReportDrawer/index.js +3 -3
  185. package/src/base-client/components/common/XReportGrid/XReport.vue +1070 -1070
  186. package/src/base-client/components/common/XReportGrid/XReportDemo.vue +47 -47
  187. package/src/base-client/components/common/XReportGrid/XReportDesign.vue +628 -628
  188. package/src/base-client/components/common/XReportGrid/XReportJsonRender.vue +380 -380
  189. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +1104 -1104
  190. package/src/base-client/components/common/XReportGrid/index.js +3 -3
  191. package/src/base-client/components/common/XReportGrid/index.md +44 -44
  192. package/src/base-client/components/common/XReportGrid/print.js +184 -184
  193. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  194. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  195. package/src/base-client/components/common/XReportSlot/index.md +48 -48
  196. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +166 -166
  197. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -3
  198. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -7
  199. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  200. package/src/base-client/components/common/XStepView/index.js +3 -3
  201. package/src/base-client/components/common/XStepView/index.md +31 -31
  202. package/src/base-client/components/common/XTab/XTab.vue +201 -201
  203. package/src/base-client/components/common/XTab/XTabDemo.vue +22 -22
  204. package/src/base-client/components/common/XTab/index.js +3 -3
  205. package/src/base-client/components/common/XTable/CustomFuncCel.vue +51 -51
  206. package/src/base-client/components/common/XTable/ExportExcel.vue +276 -284
  207. package/src/base-client/components/common/XTable/TableCellRenderer.vue +161 -161
  208. package/src/base-client/components/common/XTable/XTable.vue +1431 -1431
  209. package/src/base-client/components/common/XTable/index.md +255 -255
  210. package/src/base-client/components/common/XTagGroup/index.vue +52 -52
  211. package/src/base-client/components/common/XTree/XTree.vue +424 -423
  212. package/src/base-client/components/common/XTree/XTreePro.vue +452 -451
  213. package/src/base-client/components/common/XTree/index.js +3 -3
  214. package/src/base-client/components/common/XTree/index.md +36 -36
  215. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +113 -113
  216. package/src/base-client/components/common/XTreeOne/XTreeOnePro.vue +128 -128
  217. package/src/base-client/components/common/richTextModal/index.vue +56 -56
  218. package/src/base-client/components/common/richTextModal/richDemo.vue +48 -48
  219. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +359 -359
  220. package/src/base-client/components/his/XHisEditor/index.js +3 -3
  221. package/src/base-client/components/index.js +51 -51
  222. package/src/base-client/components/layout/XPageView/RenderRow.vue +63 -63
  223. package/src/base-client/components/layout/XPageView/XErrorView.vue +11 -11
  224. package/src/base-client/components/layout/XPageView/XPageView.vue +155 -155
  225. package/src/base-client/components/layout/XPageView/index.js +3 -3
  226. package/src/base-client/components/layout/XPageView/index.md +38 -38
  227. package/src/base-client/components/layout/XTreeView/XTreeView.vue +130 -130
  228. package/src/base-client/components/layout/XTreeView/index.js +3 -3
  229. package/src/base-client/components/layout/XTreeView/index.md +46 -46
  230. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  231. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  232. package/src/base-client/plugins/AppData.js +121 -121
  233. package/src/base-client/plugins/Config.js +19 -19
  234. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  235. package/src/base-client/plugins/Recording.js +258 -258
  236. package/src/base-client/plugins/index.js +23 -23
  237. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  238. package/src/bootstrap.js +42 -42
  239. package/src/components/Charts/Bar.vue +62 -62
  240. package/src/components/Charts/ChartCard.vue +134 -134
  241. package/src/components/Charts/Liquid.vue +67 -67
  242. package/src/components/Charts/MiniArea.vue +39 -39
  243. package/src/components/Charts/MiniBar.vue +39 -39
  244. package/src/components/Charts/MiniProgress.vue +75 -75
  245. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  246. package/src/components/Charts/Radar.vue +68 -68
  247. package/src/components/Charts/RankList.vue +77 -77
  248. package/src/components/Charts/TagCloud.vue +113 -113
  249. package/src/components/Charts/TransferBar.vue +64 -64
  250. package/src/components/Charts/Trend.vue +82 -82
  251. package/src/components/Charts/chart.less +12 -12
  252. package/src/components/Charts/smooth.area.less +13 -13
  253. package/src/components/CodeMirror/inedx.vue +118 -118
  254. package/src/components/CodeMirror/setting.js +40 -40
  255. package/src/components/FilePreview/FilePreview.vue +166 -166
  256. package/src/components/HeightScanner/index.vue +571 -571
  257. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  258. package/src/components/NumberInfo/index.js +3 -3
  259. package/src/components/NumberInfo/index.less +54 -54
  260. package/src/components/NumberInfo/index.md +43 -43
  261. package/src/components/STable/index.js +390 -390
  262. package/src/components/card/ChartCard.vue +79 -79
  263. package/src/components/chart/Bar.vue +60 -60
  264. package/src/components/chart/MiniArea.vue +67 -67
  265. package/src/components/chart/MiniBar.vue +59 -59
  266. package/src/components/chart/MiniProgress.vue +57 -57
  267. package/src/components/chart/Radar.vue +80 -80
  268. package/src/components/chart/RankingList.vue +60 -60
  269. package/src/components/chart/Trend.vue +79 -79
  270. package/src/components/chart/index.less +9 -9
  271. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  272. package/src/components/checkbox/ImgCheckbox.vue +117 -117
  273. package/src/components/checkbox/ImgCheckboxGroup.vue +76 -76
  274. package/src/components/checkbox/index.js +9 -9
  275. package/src/components/exception/ExceptionPage.vue +70 -70
  276. package/src/components/g2Charts/constants.js +202 -202
  277. package/src/components/g2Charts/demo.vue +808 -808
  278. package/src/components/g2Charts/designer.vue +228 -228
  279. package/src/components/g2Charts/designerBaseConfig.vue +61 -61
  280. package/src/components/g2Charts/designerDataConfig.vue +259 -259
  281. package/src/components/g2Charts/designerStyleConfig.vue +16 -16
  282. package/src/components/g2Charts/index.vue +397 -397
  283. package/src/components/index.js +36 -36
  284. package/src/components/input/IInput.vue +66 -66
  285. package/src/components/menu/SideMenu.vue +75 -75
  286. package/src/components/menu/menu.js +273 -273
  287. package/src/components/setting/Setting.vue +234 -234
  288. package/src/components/tool/AStepItem.vue +60 -60
  289. package/src/config/CreateQueryConfig.js +325 -325
  290. package/src/config/default/antd.config.js +89 -89
  291. package/src/config/default/setting.config.js +55 -55
  292. package/src/font-style/font.css +4 -4
  293. package/src/layouts/CommonLayout.vue +56 -56
  294. package/src/layouts/GridView.vue +45 -45
  295. package/src/layouts/PageLayout.vue +151 -151
  296. package/src/layouts/SinglePageView.vue +136 -136
  297. package/src/layouts/header/AdminHeader.vue +132 -132
  298. package/src/layouts/header/HeaderNotice.vue +177 -177
  299. package/src/layouts/header/InstitutionDetail.vue +181 -181
  300. package/src/layouts/tabs/TabsHead.vue +189 -189
  301. package/src/layouts/tabs/TabsView.vue +389 -389
  302. package/src/lib.js +1 -1
  303. package/src/main.js +34 -34
  304. package/src/mock/extend/index.js +84 -84
  305. package/src/mock/goods/index.js +108 -108
  306. package/src/pages/AMisDemo/AMisDemo.vue +325 -325
  307. package/src/pages/AMisDemo/AMisDemo2.vue +74 -74
  308. package/src/pages/DefaultExample/index.vue +77 -77
  309. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  310. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  311. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  312. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  313. package/src/pages/DynamicStatistics/FavoriteList.vue +50 -50
  314. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  315. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  316. package/src/pages/DynamicStatistics/index.vue +282 -282
  317. package/src/pages/Example/childIndex.vue +15 -15
  318. package/src/pages/Example/index.vue +30 -30
  319. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  320. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  321. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  322. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  323. package/src/pages/NewDynamicStatistics/FavoriteList.vue +50 -50
  324. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  325. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  326. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  327. package/src/pages/Recording/index.vue +77 -77
  328. package/src/pages/ReportGrid/index.vue +76 -76
  329. package/src/pages/ServiceReview/index.vue +284 -284
  330. package/src/pages/SubExample/index.vue +26 -26
  331. package/src/pages/WorkflowDetail/WorkFlowDemo.vue +32 -32
  332. package/src/pages/WorkflowDetail/WorkflowDetail.vue +230 -230
  333. package/src/pages/WorkflowDetail/WorkflowPageDetail/LeaveMessage.vue +131 -131
  334. package/src/pages/WorkflowDetail/WorkflowPageDetail/TrimTextTail.vue +23 -23
  335. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformation.vue +302 -302
  336. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformationDetails.vue +276 -276
  337. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +864 -864
  338. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandleReso.vue +997 -997
  339. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +222 -222
  340. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkOrderParentDetails.vue +233 -233
  341. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowDetailResso.vue +261 -261
  342. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowListResolution.vue +248 -248
  343. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowLog.vue +73 -73
  344. package/src/pages/XPageViewExample/index.vue +38 -38
  345. package/src/pages/XReportView/index.vue +64 -64
  346. package/src/pages/XTreeOneProExample/index.vue +67 -67
  347. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  348. package/src/pages/login/Login.vue +378 -378
  349. package/src/pages/login/LoginV3.vue +389 -389
  350. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1219
  351. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  352. package/src/pages/report/ReportTable.js +124 -124
  353. package/src/pages/resourceManage/orgListManage.vue +98 -98
  354. package/src/pages/system/dictionary/index.vue +44 -44
  355. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  356. package/src/pages/system/monitor/operLog/index.vue +37 -37
  357. package/src/pages/system/settings/modifyPassword.vue +117 -117
  358. package/src/pages/system/ticket/index.vue +480 -480
  359. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  360. package/src/pages/userInfoDetailManage/ChangeMeterRecordQuery/index.vue +64 -64
  361. package/src/pages/userInfoDetailManage/FillCardRecordQuery/index.vue +76 -76
  362. package/src/pages/userInfoDetailManage/FillGasRecordQuery/index.vue +74 -74
  363. package/src/pages/userInfoDetailManage/InfoChangeRecordQuery/index.vue +64 -64
  364. package/src/pages/userInfoDetailManage/InstructRecordQuery/index.vue +64 -64
  365. package/src/pages/userInfoDetailManage/MachineRecordQuery/index.vue +74 -74
  366. package/src/pages/userInfoDetailManage/MeterParamRecordQuery/index.vue +64 -64
  367. package/src/pages/userInfoDetailManage/OtherChargeRecordQuery/index.vue +74 -74
  368. package/src/pages/userInfoDetailManage/TransferRecordQuery/index.vue +66 -66
  369. package/src/pages/userInfoDetailManage/UserChargeRecordQuery/index.vue +92 -92
  370. package/src/pages/userInfoDetailManage/UserHandRecordQuery/index.vue +86 -86
  371. package/src/pages/userInfoDetailManage/UserRecordQuery/index.vue +73 -73
  372. package/src/pages/userInfoDetailManage/WatchCollectionRecordQuery/index.vue +64 -64
  373. package/src/pages/userInfoDetailManage/index.vue +82 -82
  374. package/src/pages/userInfoDetailManage/userInfoDetailQueryTabs.vue +132 -132
  375. package/src/plugins/EventLogPlugin.js +33 -33
  376. package/src/plugins/FindParentsData.js +17 -17
  377. package/src/plugins/HiPrintPlugin.js +124 -124
  378. package/src/router/async/config.async.js +35 -35
  379. package/src/router/async/router.map.js +188 -188
  380. package/src/router/guards.js +263 -263
  381. package/src/router/index.js +27 -27
  382. package/src/router.js +19 -19
  383. package/src/services/DataModel.js +30 -30
  384. package/src/services/LodopFuncs.js +137 -137
  385. package/src/services/api/TicketDetailsViewApi.js +46 -46
  386. package/src/services/api/cas.js +79 -79
  387. package/src/services/api/common.js +346 -346
  388. package/src/services/api/entity.js +18 -18
  389. package/src/services/api/index.js +17 -17
  390. package/src/services/api/restTools.js +145 -145
  391. package/src/services/api/workFlow.js +63 -63
  392. package/src/services/apiService.js +15 -15
  393. package/src/services/user.js +90 -90
  394. package/src/services/v3Api.js +116 -116
  395. package/src/store/modules/account.js +115 -115
  396. package/src/store/modules/index.js +5 -5
  397. package/src/store/modules/lowCode.js +33 -33
  398. package/src/store/modules/setting.js +119 -119
  399. package/src/theme/default/style.less +58 -58
  400. package/src/theme/global.less +159 -159
  401. package/src/utils/authority-utils.js +85 -85
  402. package/src/utils/errorCode.js +6 -6
  403. package/src/utils/formatter.js +74 -74
  404. package/src/utils/htmlToPDF.js +108 -108
  405. package/src/utils/htmlToPDFApi.js +5 -5
  406. package/src/utils/indexedDB.js +263 -263
  407. package/src/utils/login.js +188 -188
  408. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  409. package/src/utils/lowcode/lowcodeLog.js +29 -29
  410. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  411. package/src/utils/lowcode/registerComponentForEditor.js +1 -1
  412. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  413. package/src/utils/microAppUtils.js +40 -40
  414. package/src/utils/reg.js +95 -95
  415. package/src/utils/request.js +362 -362
  416. package/src/utils/routerUtil.js +450 -450
  417. package/src/utils/runEvalFunction.js +14 -14
  418. package/src/utils/util.js +329 -329
  419. package/src/utils/waterMark.js +31 -31
  420. package/test/Amis.spec.js +163 -163
  421. package/test/Tree.spec.js +167 -167
  422. package/test/myDialog.spec.js +46 -46
  423. package/test/util.test.js +52 -52
  424. package/test/v3Api.test.js +1983 -1983
  425. package/vue.config.js +213 -213
  426. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
@@ -1,808 +1,816 @@
1
- <template>
2
- <tr>
3
- <!-- 预览页展示 -->
4
- <template v-if="display">
5
- <template v-if="!inputColumns">
6
- <td
7
- v-for="(cell, cellIndex) in columns"
8
- v-if="!cell.dontShowRow"
9
- :key="cellIndex"
10
- :class=" calcTDBorder(cell.noBoarder) "
11
- :style="determineCellStyle(cell)"
12
- :colspan="cell.colSpan ? cell.colSpan : undefined">
13
- <template v-if="cell.type === 'column'">
14
- <template v-if="cell.customFunction">
15
- {{ deserializeFunctionAndRun(cell.customFunction, configData[cell.dataIndex], config) }}
16
- </template>
17
- <template v-else>
18
- {{ cell.text }}
19
- </template>
20
- </template>
21
- <!-- 占位 -->
22
- <template v-else-if="cell.type === 'placeHolderColumn'">
23
- </template>
24
- <template v-else-if="cell.type === 'value'">
25
- <template v-if="cell.customFunction === undefined">
26
- {{ cell.value }}
27
- </template>
28
- <template v-else>
29
- {{ deserializeFunctionAndRun(cell.customFunction, cell.value, config) }}
30
- </template>
31
- </template>
32
- <template v-else-if="cell.type === 'input'">
33
- <template v-if="cell.customFunction === undefined">
34
- {{ getDeepObject(configData, cell.dataIndex) }}
35
- </template>
36
- <template v-else>
37
- {{ deserializeFunctionAndRun(cell.customFunction, configData[cell.dataIndex], config) }}
38
- </template>
39
- </template>
40
- <template v-else-if="cell.type === 'inputs'">
41
- <template v-if="cell.customFunction === undefined">
42
- {{ showSubRowValue(cell) }}
43
- </template>
44
- <template v-else>
45
- {{ deserializeFunctionAndRun(cell.customFunction, showSubRowValue(cell), config) }}
46
- </template>
47
- </template>
48
- <template v-else-if="cell.type === 'list'">
49
- <template v-if="listIndex === 0">
50
- <span style="font-weight: bold">{{ cell.listHead }}</span>
51
- </template>
52
- <template v-else-if="cell.listType === 'input'">
53
- {{ getDeepObject(configData, cell.dataIndex)[listIndex] }}
54
- </template>
55
- <template v-else-if="cell.listType === 'value'">
56
- {{ cell.content[listIndex] }}
57
- </template>
58
- <template v-else-if="cell.listType === 'variable'">
59
- {{ configData[cell.dataIndex][listIndex - 1][cell.listDataIndex] }}
60
- </template>
61
- </template>
62
- <template v-else-if="cell.type === 'images'">
63
- <template v-if="getDeepObject(configData.images, cell.dataIndex) === undefined || getDeepObject(configData.images, cell.dataIndex).length === 0">
64
- <template v-if="getDeepObject(configData, cell.dataIndex) === undefined || getDeepObject(configData, cell.dataIndex).length === 0">
65
- <span>无</span>
66
- </template>
67
- <template v-else>
68
- <template v-if="typeof getDeepObject(configData, cell.dataIndex) === 'object'">
69
- <div style="display: flex; align-items: end; justify-content: space-evenly; flex-wrap: wrap">
70
- <template v-for="(img,imgIndex) in getDeepObject(configData, cell.dataIndex)">
71
- <template v-if="showImgInCell">
72
- <div :key="imgIndex">
73
- <img :src="img.url" alt="图片"/>
74
- <p>{{ img.name }}</p>
75
- </div>
76
- </template>
77
- <template v-else>
78
- <span :key="imgIndex" style="margin-right: 5%">{{ img.name }}</span>
79
- </template>
80
- </template>
81
- </div>
82
- </template>
83
- <template v-else>
84
- <img :src="getDeepObject(configData, cell.dataIndex)" alt="图片"/>
85
- <p style="margin-right: 5%">{{ formatImgStr(getDeepObject(configData, cell.dataIndex))[0].name }}</p>
86
- </template>
87
- </template>
88
- </template>
89
- <template v-else v-for="(img,imgIndex) in getDeepObject(configData.images, cell.dataIndex)">
90
- <span :key="imgIndex" style="margin-right: 5%">{{ img.name }}</span>
91
- </template>
92
- </template>
93
- </td>
94
- </template>
95
- <template v-else>
96
- <td
97
- v-for="(cell, cellIndex) in columns"
98
- :key="cellIndex"
99
- :class=" calcTDBorder(cell.noBoarder) "
100
- :colspan="cell.colSpan ? cell.colSpan : undefined"
101
- :style="determineCellStyle(cell)"
102
- :rowspan="cell.rowSpan ? cell.rowSpan : undefined">
103
- <template v-if="cell.type === 'column'">
104
- {{ cell.text }}
105
- </template>
106
- <template v-else-if="cell.type === 'value'">
107
- <template v-if="cell.customFunction === undefined">
108
- {{ cell.value }}
109
- </template>
110
- <template v-else>
111
- {{ deserializeFunctionAndRun(cell.customFunction, cell.value, config) }}
112
- </template>
113
- </template>
114
- <template v-else-if="cell.type === 'increment'">
115
- <template v-if="cell.customFunction === undefined">
116
- {{ getDeepObject(configData.arr[inputColumnsDefinitionIndex], cell.dataIndex) }}
117
- </template>
118
- <template v-else>
119
- {{
120
- deserializeFunctionAndRun(cell.customFunction, configData.arr[inputColumnsDefinitionIndex][cell.dataIndex], config)
121
- }}
122
- </template>
123
- </template>
124
- <template v-else-if="cell.type === 'input'">
125
- <template v-if="cell.customFunction === undefined">
126
- {{ getDeepObject(configData.arr[inputColumnsDefinitionIndex], cell.dataIndex) }}
127
- </template>
128
- <template v-else>
129
- {{
130
- deserializeFunctionAndRun(cell.customFunction, configData.arr[inputColumnsDefinitionIndex][cell.dataIndex], config)
131
- }}
132
- </template>
133
- </template>
134
- <template v-else-if="cell.type === 'inputs'">
135
- <template v-if="cell.customFunction === undefined">
136
- {{ getDeepObject(configData.arr[inputColumnsDefinitionIndex], cell.dataIndex) }}
137
- </template>
138
- <template v-else>
139
- {{
140
- deserializeFunctionAndRun(cell.customFunction, configData.arr[inputColumnsDefinitionIndex][cell.dataIndex], config)
141
- }}
142
- </template>
143
- </template>
144
- </td>
145
- </template>
146
- </template>
147
- <!-- 不是动态行 -->
148
- <template v-else-if="!inputColumns">
149
- <td
150
- v-for="(cell, cellIndex) in columns"
151
- :key="cellIndex"
152
- :class=" calcTDBorder(cell.noBoarder) "
153
- :colspan="cell.colSpan ? cell.colSpan : undefined"
154
- :style="determineCellStyle(cell)"
155
- :rowspan="cell.rowSpan ? cell.rowSpan : undefined">
156
- <template v-if="cell.type === 'column'">
157
- <template v-if="cell.customFunction">
158
- {{ deserializeFunctionAndRun(cell.customFunction, configData[cell.dataIndex], config) }}
159
- </template>
160
- <template v-else>
161
- {{ cell.text }}
162
- </template>
163
- </template>
164
- <template v-else-if="cell.type === 'placeHolderColumn'">
165
- <!-- 占位 -->
166
- </template>
167
- <template v-else-if="cell.type === 'value'">
168
- {{ cell.value }}
169
- </template>
170
- <template v-else-if="cell.type === 'curDateInput'">
171
- <a-button type="dashed" v-if="configData[cell.dataIndex]">
172
- {{ configData[cell.dataIndex] }}
173
- </a-button>
174
- <a-button
175
- v-if="!configData[cell.dataIndex]"
176
- type="primary"
177
- @click="getNowDate(cell.dataIndex)"
178
- >{{ cell.text || '确认' }}
179
- </a-button>
180
- </template>
181
- <template v-else-if="cell.type === 'input'">
182
- <template v-if="cell.inputReadOnly === true">
183
- <template v-if="cell.dataIndex.indexOf('@@@') !== -1">
184
- <a-input
185
- @change="handleInputDeepChange($event, cell.dataIndex)"
186
- v-model="config.tempData[cell.dataIndex]"
187
- :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"
188
- :disabled="true"/>
189
- </template>
190
- <template v-else>
191
- <a-input
192
- v-model="configData[cell.dataIndex]"
193
- :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"
194
- :disabled="true"/>
195
- </template>
196
- </template>
197
- <template v-else>
198
- <template v-if="cell.dataIndex.indexOf('@@@') !== -1">
199
- <a-input
200
- @change="handleInputDeepChange($event, cell.dataIndex)"
201
- v-model="config.tempData[cell.dataIndex]"
202
- :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"/>
203
- </template>
204
- <template v-else>
205
- <a-input
206
- v-model="configData[cell.dataIndex]"
207
- :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"/>
208
- </template>
209
- </template>
210
- </template>
211
- <template v-else-if="cell.type === 'inputs'">
212
- <template v-if="cell.inputReadOnly === true">
213
- <div class="inputsDiv">
214
- <div class="inputsDivItem" v-for="(num, index) of calcFormatInputNum(cell.format)" :key="index">
215
- <span class="inputsDivItemLabel">{{ displayFormatStartText(cell.format) }}</span>
216
- <template v-if="cell.dataIndex.indexOf('@@@') !== -1">
217
- <a-input
218
- @change="handleInputDeepChange($event, cell.dataIndex)"
219
- v-model="config.tempData[cell.dataIndex][index]"
220
- :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"
221
- :disabled="true"/>
222
- </template>
223
- <template v-else>
224
- <a-input
225
- v-model="configData[cell.dataIndex][index]"
226
- :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"
227
- :disabled="true"/>
228
- </template>
229
- <span class="inputsDivItemLabel">{{ displayFormatText(cell.format, index) }}</span>
230
- </div>
231
- </div>
232
- </template>
233
- <template v-else>
234
- <div class="inputsDiv">
235
- <div class="inputsDivItem" v-for="(num, index) of calcFormatInputNum(cell.format)" :key="index">
236
- <span class="inputsDivItemLabel">{{ displayFormatStartText(cell.format) }}</span>
237
- <template v-if="cell.dataIndex.indexOf('@@@') !== -1">
238
- <a-input
239
- @change="handleInputDeepChange($event, cell.dataIndex)"
240
- v-model="config.tempData[cell.dataIndex][index]"
241
- :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"/>
242
- </template>
243
- <template v-else>
244
- <a-input
245
- v-model="configData[cell.dataIndex][index]"
246
- :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"/>
247
- </template>
248
- <span class="inputsDivItemLabel">{{ displayFormatText(cell.format, index) }}</span>
249
- </div>
250
- </div>
251
- </template>
252
- </template>
253
- <template v-else-if="cell.type === 'list'">
254
- <template v-if="listIndex === 0">
255
- <span style="font-weight: bold">{{ cell.listHead }}</span>
256
- </template>
257
- <template v-else-if="cell.listType === 'input'">
258
- <a-input
259
- v-model="configData[cell.dataIndex][listIndex]"
260
- :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"/>
261
- </template>
262
- <template v-else-if="cell.listType === 'value'">
263
- {{ cell.content[listIndex] }}
264
- </template>
265
- <template v-else-if="cell.listType === 'variable'">
266
- {{ configData[cell.dataIndex][listIndex - 1][cell.listDataIndex] }}
267
- </template>
268
- </template>
269
- <template v-else-if="cell.type === 'images'">
270
- <div>
271
- <template v-if="configData.images[cell.dataIndex]?.length > 0">
272
- <upload
273
- :model="uploadParams"
274
- :img-prefix="imgPrefix"
275
- :service-name="serverName"
276
- :images="checkImg(cell.dataIndex, 'configData')"
277
- :outer-container-index="cell.dataIndex"
278
- @setFiles="(...args) => {setImages(args, 'configData')}"
279
- :upload-style="'simple'"
280
- />
281
- </template>
282
- <template v-else>
283
- <upload
284
- :model="uploadParams"
285
- :img-prefix="imgPrefix"
286
- :service-name="serverName"
287
- :images="checkImg(cell.dataIndex, 'config')"
288
- :outer-container-index="cell.dataIndex"
289
- @setFiles="(...args) => {setImages(args, 'config', cell.dataIndex)}"
290
- :upload-style="'simple'"
291
- />
292
- </template>
293
- </div>
294
- </template>
295
- </td>
296
- </template>
297
- <!-- 动态行插入按钮 -->
298
- <template v-else-if="inputColumnsButton">
299
- <td :colspan="maxColSpan" :class="calcTDBorder()">
300
- <a-button-group>
301
- <a-button @click="addData(columns[0].dataIndex, columns)">
302
- <a-icon type="plus"/>
303
- </a-button>
304
- <a-button @click="removeData(columns[0].dataIndex)">
305
- <a-icon type="minus"/>
306
- </a-button>
307
- </a-button-group>
308
- </td>
309
- </template>
310
- <!-- 其他行 -->
311
- <template v-else>
312
- <td
313
- v-for="(cell, cellIndex) in columns"
314
- :key="cellIndex"
315
- :class=" calcTDBorder(cell.noBoarder) "
316
- :colspan="cell.colSpan ? cell.colSpan : undefined"
317
- :style="determineCellStyle(cell)"
318
- :rowspan="cell.rowSpan ? cell.rowSpan : undefined">
319
- <template v-if="cell.type === 'column'">
320
- {{ cell.text }}
321
- </template>
322
- <template v-else-if="cell.type === 'value'">
323
- {{ cell.value }}
324
- </template>
325
- <template v-else-if="cell.type === 'curDateInput'">
326
- <a-button type="dashed" v-if="configData.arr[inputColumnsDefinitionIndex][cell.dataIndex]">
327
- {{ configData.arr[inputColumnsDefinitionIndex][cell.dataIndex] }}
328
- </a-button>
329
- <a-button
330
- v-if="!configData.arr[inputColumnsDefinitionIndex][cell.dataIndex]"
331
- type="primary"
332
- @click="getNowDate(inputColumnsDefinitionIndex,cell.dataIndex)"
333
- >{{ cell.text || '确认' }}
334
- </a-button>
335
- </template>
336
- <template v-else-if="cell.type === 'increment'">
337
- {{ configData.arr[inputColumnsDefinitionIndex][cell.dataIndex] }}
338
- </template>
339
- <template v-else-if="cell.type === 'input'">
340
- <template v-if="cell.inputReadOnly === true">
341
- <a-input
342
- v-model="configData.arr[inputColumnsDefinitionIndex][cell.dataIndex]"
343
- :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"
344
- :disabled="true"/>
345
- </template>
346
- <template v-else>
347
- <a-input
348
- v-model="configData.arr[inputColumnsDefinitionIndex][cell.dataIndex]"
349
- :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"/>
350
- </template>
351
- </template>
352
- <template v-else-if="cell.type === 'inputs'">
353
- <template v-if="cell.inputReadOnly === true">
354
- <a-input
355
- v-model="configData.arr[inputColumnsDefinitionIndex][cell.dataIndex]"
356
- :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"
357
- :disabled="true"/>
358
- </template>
359
- <template v-else>
360
- <a-input
361
- v-model="configData.arr[inputColumnsDefinitionIndex][cell.dataIndex]"
362
- :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"/>
363
- </template>
364
- </template>
365
- </td>
366
- </template>
367
- </tr>
368
- </template>
369
-
370
- <script>
371
- import Upload from '@vue2-client/base-client/components/common/Upload'
372
- import { formatDate } from '@vue2-client/utils/util'
373
- import { nanoid } from 'nanoid'
374
-
375
- export default {
376
- name: 'XReportTrGroup',
377
- components: {
378
- Upload
379
- },
380
- props: {
381
- // 每一行的配置
382
- columns: {
383
- type: Array,
384
- required: true
385
- },
386
- showImgInCell: {
387
- type: Boolean,
388
- default: false
389
- },
390
- config: {
391
- type: Object,
392
- default: function () {
393
- return {}
394
- }
395
- },
396
- // 命名空间
397
- serverName: {
398
- type: String,
399
- default: 'af-system'
400
- },
401
- // 原始配置
402
- configData: {
403
- type: Object,
404
- required: true
405
- },
406
- // 是否为动态行
407
- inputColumns: {
408
- type: Boolean,
409
- default: false
410
- },
411
- // 是否为动态行按钮
412
- inputColumnsButton: {
413
- type: Boolean,
414
- default: false
415
- },
416
- // 动态行的Index
417
- inputColumnsDefinitionIndex: {
418
- type: Number,
419
- default: undefined
420
- },
421
- // 是否为展示行
422
- display: {
423
- type: Boolean,
424
- default: false
425
- },
426
- // list类型的下标,用于遍历列表时,获取对应的数据
427
- listIndex: {
428
- type: Number,
429
- default: undefined
430
- },
431
- // 表格没有上边框
432
- noTopBorder: {
433
- type: Boolean,
434
- default: false
435
- },
436
- // 图片是否使用OSS来保存
437
- useOssForImg: {
438
- type: Boolean,
439
- default: true
440
- },
441
- // 图片上传后添加前缀
442
- imgPrefix: {
443
- type: String,
444
- default: undefined
445
- }
446
- },
447
- data () {
448
- return {
449
- maxColSpan: 12,
450
- uploadParams: {
451
- type: 'image',
452
- accept: ['*'],
453
- resUploadStock: 1,
454
- pathKey: 'cs'
455
- }
456
- // tableConfig: {}
457
- }
458
- },
459
- methods: {
460
- updateImg (data) {
461
- this.$emit('updateImg', data)
462
- },
463
- formatImgStr (str) {
464
- const result = []
465
- if (str !== '') {
466
- const arr = str.split('/')
467
- result.push({
468
- uid: nanoid(6),
469
- url: str,
470
- name: arr[arr.length - 1],
471
- status: 'done'
472
- })
473
- }
474
- this.uploadParams.acceptCount = 1
475
- return result
476
- },
477
- checkImg (index, type) {
478
- let target
479
- if (type === 'configData') {
480
- target = this.configData.images[index]
481
- } else {
482
- target = this.config.tempData[index]
483
- }
484
- if (typeof target !== 'object') {
485
- return this.formatImgStr(target)
486
- }
487
- target.forEach(obj => {
488
- if (obj.uid === undefined) {
489
- obj.uid = obj.id.toString()
490
- }
491
- if (obj.url === undefined) {
492
- if (obj.path) {
493
- obj.url = obj.path
494
- }
495
- }
496
- if (obj.name === undefined) {
497
- const withOutEndFix = obj.url.split('.')[0]
498
- const temp = withOutEndFix.split('/')
499
- obj.name = temp[temp.length - 1]
500
- }
501
- if (obj.status === undefined) {
502
- obj.status = 'done'
503
- }
504
- })
505
- return target
506
- },
507
- // 判断单元格样式
508
- determineCellStyle (cell, color = '#000', borderWidth = '1px') {
509
- // 如果声明了borderColor
510
- if (this.config.style.borderColor) {
511
- color = this.config.style.borderColor
512
- }
513
- // 如果声明了borderWidth
514
- if (this.config.style.borderWidth) {
515
- borderWidth = this.config.style.borderWidth
516
- }
517
- // 普通带边框单元格
518
- const withBorder = {
519
- border: borderWidth + ' solid ' + color,
520
- padding: '8px'
521
- }
522
- // 只有左右边框的单元格
523
- const noBorder = {
524
- borderLeft: borderWidth + ' solid ' + color,
525
- borderRight: borderWidth + ' solid ' + color,
526
- padding: '8px'
527
- }
528
- // 只没有上边框的单元格
529
- const NoTopBorder = {
530
- borderTopStyle: 'none',
531
- borderLeft: borderWidth + ' solid ' + color,
532
- borderRight: borderWidth + ' solid ' + color,
533
- borderBottom: borderWidth + ' solid ' + color,
534
- padding: '8px'
535
- }
536
- let result = {}
537
- // 如果表格也声明了样式,用表格样式将样式覆盖
538
- if (cell.style) {
539
- if (cell.noBorder) {
540
- result = { ...noBorder, ...cell.style }
541
- } else {
542
- if (this.noTopBorder) {
543
- result = { ...NoTopBorder, ...cell.style }
544
- } else {
545
- result = { ...withBorder, ...cell.style }
546
- }
547
- }
548
- return result
549
- }
550
- // 如果表头声明了样式,则用其将基础样式覆盖
551
- if (cell.type === 'column') {
552
- if (this.config.labelStyle !== undefined) {
553
- if (cell.noBorder) {
554
- result = { ...noBorder, ...this.config.labelStyle }
555
- } else {
556
- if (this.noTopBorder) {
557
- result = { ...NoTopBorder, ...this.config.labelStyle }
558
- } else {
559
- result = { ...withBorder, ...this.config.labelStyle }
560
- }
561
- }
562
- return result
563
- }
564
- }
565
- if (cell.noBorder) {
566
- result = { ...noBorder }
567
- } else {
568
- if (this.noTopBorder) {
569
- result = { ...NoTopBorder }
570
- } else {
571
- result = { ...withBorder }
572
- }
573
- }
574
- return result
575
- },
576
- // 表格中数据key含有@@@,需要手动触发更新
577
- handleInputDeepChange () {
578
- this.$forceUpdate()
579
- },
580
- // 路径中含有@@@的key,将其解析,并返回其数据
581
- getDeepObject (obj, strPath) {
582
- const arr = strPath.split('@@@')
583
- let result = obj[arr[0]]
584
- arr.shift()
585
- try {
586
- while (arr.length > 0) {
587
- result = result[arr[0]]
588
- arr.shift()
589
- }
590
- } catch (e) {
591
- result = undefined
592
- }
593
- return result
594
- },
595
- // 获取当前日期
596
- getNowDate (index1, index2) {
597
- if (index2) {
598
- // @click="getNowDate(configData.arr[inputColumnsDefinitionIndex][cell.dataIndex])"
599
- this.configData.arr[index1][index2] = formatDate('now')
600
- } else {
601
- this.configData[index1] = formatDate('now')
602
- }
603
- this.configData = Object.assign({}, this.configData)
604
- },
605
- // 反序列化函数并执行
606
- deserializeFunctionAndRun (functionStr, value) {
607
- // eslint-disable-next-line no-eval
608
- const fun = eval('(' + functionStr + ')')
609
- return fun(value, this.config)
610
- },
611
- // 基础上传组件,图片改动后触发
612
- setImages (args, type, index = undefined) {
613
- // 如果基础上传组件在初始化完成后,就调用emit了setImage,此时图片并没有变化,直接返回
614
- if (args[2] === 'created') {
615
- return
616
- }
617
- if (type === 'configData') {
618
- this.configData.images[args[1]] = args[0]
619
- } else {
620
- this.config.tempData[args[1]] = args[0]
621
- if (index) {
622
- this.$emit('updateImg', this.config.tempData[index])
623
- }
624
- }
625
- },
626
- // 动态行删除
627
- removeData (index) {
628
- if (this.configData[index].length === 0) {
629
- this.$message.warn('已经没有更多了')
630
- return
631
- }
632
- this.configData[index].pop()
633
- },
634
- // 添加一行
635
- addData (index, row) {
636
- // 获取定义
637
- const defs = row[0].definition
638
-
639
- // 获取外层对象名
640
- const dataName = row[0].dataIndex
641
- const temp = {}
642
-
643
- defs.forEach(def => {
644
- // 找到数组中最后一个数据的值
645
- let lastDataNo = 0
646
- if (this.configData[dataName][this.configData[dataName].length - 1]) {
647
- lastDataNo = this.configData[dataName][this.configData[dataName].length - 1][def.dataIndex]
648
- }
649
-
650
- // 如果没有值,检查是否声明了初始值
651
- if (lastDataNo === 0 && def.initialValue) {
652
- lastDataNo = def.initialValue
653
- }
654
-
655
- // 检查是否有步长
656
- let step = 1
657
- if (def.step) {
658
- step = def.step
659
- }
660
-
661
- // 如果单元格类型为increment,则进行自增
662
- if (def.type === 'increment') {
663
- temp[def.dataIndex] = lastDataNo + step
664
- }
665
- })
666
- this.configData[index].push(temp)
667
- },
668
- // 根据format计算需要多少个输入框
669
- calcFormatInputNum (formatStr) {
670
- let count = 0
671
- for (let i = 0; i < formatStr.length; i++) {
672
- if (formatStr[i] === '{') {
673
- count++
674
- }
675
- }
676
- return count
677
- },
678
- // 根据format计算输入框之后的文字显示
679
- displayFormatText (formatStr, num) {
680
- let start = 0
681
- let count = 0
682
- num++
683
- for (let i = 0; i < formatStr.length; i++) {
684
- if (formatStr[i] === '}') {
685
- start = i
686
- count++
687
- }
688
- if (count === num) {
689
- for (let j = start + 1; j < formatStr.length; j++) {
690
- if (formatStr[j] === '{') {
691
- return formatStr.slice(start + 1, j)
692
- }
693
- if (j === formatStr.length - 1 && formatStr[j] !== '}') {
694
- return formatStr[j]
695
- }
696
- }
697
- }
698
- }
699
- },
700
- calcTDBorder (cellNoBorder = false) {
701
- if (cellNoBorder) {
702
- return 'tdNoBorder'
703
- } else {
704
- if (this.noTopBorder) {
705
- return 'tdWithNoTopBorder'
706
- } else {
707
- return 'tdWithBorder'
708
- }
709
- }
710
- },
711
- // 根据format计算输入框之前的文字显示
712
- displayFormatStartText (formatStr) {
713
- let count = 0
714
- for (let i = 0; i < formatStr.length; i++) {
715
- if (formatStr[i] === '{') {
716
- break
717
- } else {
718
- count++
719
- }
720
- }
721
- return formatStr.slice(0, count)
722
- },
723
- // 拼接被自动拆分的单元格内容
724
- showSubRowValue (cell) {
725
- const dataName = cell.dataIndex
726
- const formatArr = []
727
- const dataArr = []
728
-
729
- // 从config中取出所有数据,根据dataIndex的开头内容进行拼接
730
- this.config.columns.forEach(row => row.forEach(cell => {
731
- if (cell.dataIndex && cell.dataIndex.startsWith(dataName)) {
732
- formatArr.push(cell.format)
733
- dataArr.push(this.configData[cell.dataIndex])
734
- }
735
- }))
736
-
737
- const text = []
738
- const data = []
739
-
740
- formatArr.forEach(word => {
741
- const temp = word.split('{}')
742
- temp.forEach(char => {
743
- if (char !== '') {
744
- text.push(char)
745
- }
746
- })
747
- })
748
-
749
- dataArr.forEach(item => {
750
- item.forEach(num => {
751
- data.push(num)
752
- })
753
- })
754
-
755
- let result = ''
756
- for (let i = 0; i < data.length; i++) {
757
- result += data[i]
758
- result += text[i]
759
- }
760
-
761
- return result
762
- },
763
- },
764
- beforeMount () {
765
- if (this.useOssForImg) {
766
- this.uploadParams.resUploadMode = 'oss'
767
- }
768
- }
769
- }
770
-
771
- </script>
772
-
773
- <style scoped lang="less">
774
- .inputsDiv {
775
- display: flex;
776
- justify-content: space-between;
777
-
778
- .inputsDivItem {
779
- display: flex;
780
- align-items: center;
781
- padding: 0 4px;
782
- white-space: nowrap;
783
-
784
- .inputsDivItemLabel {
785
- padding: 0 4px;
786
- }
787
- }
788
- }
789
-
790
- .tdNoBorder {
791
- border-left: 1px solid #000;
792
- border-right: 1px solid #000;
793
- padding: 8px;
794
- }
795
-
796
- .tdWithBorder {
797
- border: 1px solid #000;
798
- padding: 8px;
799
- }
800
-
801
- .tdWithNoTopBorder {
802
- border-top-style: none;
803
- border-left: 1px solid #000;
804
- border-right: 1px solid #000;
805
- border-bottom: 1px solid #000;
806
- padding: 8px;
807
- }
808
- </style>
1
+ <template>
2
+ <tr>
3
+ <!-- 预览页展示 -->
4
+ <template v-if="display">
5
+ <template v-if="!inputColumns">
6
+ <td
7
+ v-for="(cell, cellIndex) in columns"
8
+ v-if="!cell.dontShowRow"
9
+ :key="cellIndex"
10
+ :class=" calcTDBorder(cell.noBoarder) "
11
+ :style="determineCellStyle(cell)"
12
+ :colspan="cell.colSpan ? cell.colSpan : undefined">
13
+ <template v-if="cell.type === 'column'">
14
+ <template v-if="cell.customFunction">
15
+ {{ deserializeFunctionAndRun(cell.customFunction, configData[cell.dataIndex], config) }}
16
+ </template>
17
+ <template v-else>
18
+ {{ cell.text }}
19
+ </template>
20
+ </template>
21
+ <!-- 占位 -->
22
+ <template v-else-if="cell.type === 'placeHolderColumn'">
23
+ </template>
24
+ <template v-else-if="cell.type === 'value'">
25
+ <template v-if="cell.customFunction === undefined">
26
+ {{ cell.value }}
27
+ </template>
28
+ <template v-else>
29
+ {{ deserializeFunctionAndRun(cell.customFunction, cell.value, config) }}
30
+ </template>
31
+ </template>
32
+ <template v-else-if="cell.type === 'input'">
33
+ <template v-if="cell.customFunction === undefined">
34
+ {{ getDeepObject(configData, cell.dataIndex) }}
35
+ </template>
36
+ <template v-else>
37
+ {{ deserializeFunctionAndRun(cell.customFunction, configData[cell.dataIndex], config) }}
38
+ </template>
39
+ </template>
40
+ <template v-else-if="cell.type === 'inputs'">
41
+ <template v-if="cell.customFunction === undefined">
42
+ {{ showSubRowValue(cell) }}
43
+ </template>
44
+ <template v-else>
45
+ {{ deserializeFunctionAndRun(cell.customFunction, showSubRowValue(cell), config) }}
46
+ </template>
47
+ </template>
48
+ <template v-else-if="cell.type === 'list'">
49
+ <template v-if="listIndex === 0">
50
+ <span style="font-weight: bold">{{ cell.listHead }}</span>
51
+ </template>
52
+ <template v-else-if="cell.listType === 'input'">
53
+ {{ getDeepObject(configData, cell.dataIndex)[listIndex] }}
54
+ </template>
55
+ <template v-else-if="cell.listType === 'value'">
56
+ {{ cell.content[listIndex] }}
57
+ </template>
58
+ <template v-else-if="cell.listType === 'variable'">
59
+ {{ configData[cell.dataIndex][listIndex - 1][cell.listDataIndex] }}
60
+ </template>
61
+ </template>
62
+ <template v-else-if="cell.type === 'images'">
63
+ <template v-if="getDeepObject(configData.images, cell.dataIndex) === undefined || getDeepObject(configData.images, cell.dataIndex).length === 0">
64
+ <template v-if="getDeepObject(configData, cell.dataIndex) === undefined || getDeepObject(configData, cell.dataIndex).length === 0">
65
+ <span>无</span>
66
+ </template>
67
+ <template v-else>
68
+ <template v-if="typeof getDeepObject(configData, cell.dataIndex) === 'object'">
69
+ <div style="display: flex; align-items: end; justify-content: space-evenly; flex-wrap: wrap">
70
+ <template v-for="(img,imgIndex) in getDeepObject(configData, cell.dataIndex)">
71
+ <template v-if="showImgInCell">
72
+ <div :key="imgIndex">
73
+ <img :src="img.url" alt="图片"/>
74
+ <p>{{ img.name }}</p>
75
+ </div>
76
+ </template>
77
+ <template v-else>
78
+ <span :key="imgIndex" style="margin-right: 5%">{{ img.name }}</span>
79
+ </template>
80
+ </template>
81
+ </div>
82
+ </template>
83
+ <template v-else>
84
+ <img :src="getDeepObject(configData, cell.dataIndex)" alt="图片"/>
85
+ <p style="margin-right: 5%">{{ formatImgStr(getDeepObject(configData, cell.dataIndex))[0].name }}</p>
86
+ </template>
87
+ </template>
88
+ </template>
89
+ <template v-else v-for="(img,imgIndex) in getDeepObject(configData.images, cell.dataIndex)">
90
+ <span :key="imgIndex" style="margin-right: 5%">{{ img.name }}</span>
91
+ </template>
92
+ </template>
93
+ </td>
94
+ </template>
95
+ <template v-else>
96
+ <td
97
+ v-for="(cell, cellIndex) in columns"
98
+ :key="cellIndex"
99
+ :class=" calcTDBorder(cell.noBoarder) "
100
+ :colspan="cell.colSpan ? cell.colSpan : undefined"
101
+ :style="determineCellStyle(cell)"
102
+ :rowspan="cell.rowSpan ? cell.rowSpan : undefined">
103
+ <template v-if="cell.type === 'column'">
104
+ {{ cell.text }}
105
+ </template>
106
+ <template v-else-if="cell.type === 'value'">
107
+ <template v-if="cell.customFunction === undefined">
108
+ {{ cell.value }}
109
+ </template>
110
+ <template v-else>
111
+ {{ deserializeFunctionAndRun(cell.customFunction, cell.value, config) }}
112
+ </template>
113
+ </template>
114
+ <template v-else-if="cell.type === 'increment'">
115
+ <template v-if="cell.customFunction === undefined">
116
+ {{ getDeepObject(configData.arr[inputColumnsDefinitionIndex], cell.dataIndex) }}
117
+ </template>
118
+ <template v-else>
119
+ {{
120
+ deserializeFunctionAndRun(cell.customFunction, configData.arr[inputColumnsDefinitionIndex][cell.dataIndex], config)
121
+ }}
122
+ </template>
123
+ </template>
124
+ <template v-else-if="cell.type === 'input'">
125
+ <template v-if="cell.customFunction === undefined">
126
+ {{ getDeepObject(configData.arr[inputColumnsDefinitionIndex], cell.dataIndex) }}
127
+ </template>
128
+ <template v-else>
129
+ {{
130
+ deserializeFunctionAndRun(cell.customFunction, configData.arr[inputColumnsDefinitionIndex][cell.dataIndex], config)
131
+ }}
132
+ </template>
133
+ </template>
134
+ <template v-else-if="cell.type === 'inputs'">
135
+ <template v-if="cell.customFunction === undefined">
136
+ {{ getDeepObject(configData.arr[inputColumnsDefinitionIndex], cell.dataIndex) }}
137
+ </template>
138
+ <template v-else>
139
+ {{
140
+ deserializeFunctionAndRun(cell.customFunction, configData.arr[inputColumnsDefinitionIndex][cell.dataIndex], config)
141
+ }}
142
+ </template>
143
+ </template>
144
+ </td>
145
+ </template>
146
+ </template>
147
+ <!-- 不是动态行 -->
148
+ <template v-else-if="!inputColumns">
149
+ <td
150
+ v-for="(cell, cellIndex) in columns"
151
+ :key="cellIndex"
152
+ :class=" calcTDBorder(cell.noBoarder) "
153
+ :colspan="cell.colSpan ? cell.colSpan : undefined"
154
+ :style="determineCellStyle(cell)"
155
+ :rowspan="cell.rowSpan ? cell.rowSpan : undefined">
156
+ <template v-if="cell.type === 'column'">
157
+ <template v-if="cell.customFunction">
158
+ {{ deserializeFunctionAndRun(cell.customFunction, configData[cell.dataIndex], config) }}
159
+ </template>
160
+ <template v-else>
161
+ {{ cell.text }}
162
+ </template>
163
+ </template>
164
+ <template v-else-if="cell.type === 'placeHolderColumn'">
165
+ <!-- 占位 -->
166
+ </template>
167
+ <template v-else-if="cell.type === 'value'">
168
+ {{ cell.value }}
169
+ </template>
170
+ <template v-else-if="cell.type === 'curDateInput'">
171
+ <a-button type="dashed" v-if="configData[cell.dataIndex]">
172
+ {{ configData[cell.dataIndex] }}
173
+ </a-button>
174
+ <a-button
175
+ v-if="!configData[cell.dataIndex]"
176
+ type="primary"
177
+ @click="getNowDate(cell.dataIndex)"
178
+ >{{ cell.text || '确认' }}
179
+ </a-button>
180
+ </template>
181
+ <template v-else-if="cell.type === 'signature'">
182
+ <img :src="configData[cell.dataIndex]" alt="签名加载失败" style="max-height: 2rem">
183
+ <a-button v-if="!configData[cell.dataIndex]" type="dashed" >需要在手机端签名 </a-button>
184
+ </template>
185
+ <template v-else-if="cell.type === 'input'">
186
+ <template v-if="cell.inputReadOnly === true">
187
+ <template v-if="cell.dataIndex.indexOf('@@@') !== -1">
188
+ <a-input
189
+ @change="handleInputDeepChange($event, cell.dataIndex)"
190
+ v-model="config.tempData[cell.dataIndex]"
191
+ :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"
192
+ :disabled="true"/>
193
+ </template>
194
+ <template v-else>
195
+ <a-input
196
+ v-model="configData[cell.dataIndex]"
197
+ :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"
198
+ :disabled="true"/>
199
+ </template>
200
+ </template>
201
+ <template v-else>
202
+ <template v-if="cell.dataIndex.indexOf('@@@') !== -1">
203
+ <a-input
204
+ @change="handleInputDeepChange($event, cell.dataIndex)"
205
+ v-model="config.tempData[cell.dataIndex]"
206
+ :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"/>
207
+ </template>
208
+ <template v-else>
209
+ <a-input
210
+ v-model="configData[cell.dataIndex]"
211
+ :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"/>
212
+ </template>
213
+ </template>
214
+ </template>
215
+ <template v-else-if="cell.type === 'inputs'">
216
+ <template v-if="cell.inputReadOnly === true">
217
+ <div class="inputsDiv">
218
+ <div class="inputsDivItem" v-for="(num, index) of calcFormatInputNum(cell.format)" :key="index">
219
+ <span class="inputsDivItemLabel">{{ displayFormatStartText(cell.format) }}</span>
220
+ <template v-if="cell.dataIndex.indexOf('@@@') !== -1">
221
+ <a-input
222
+ @change="handleInputDeepChange($event, cell.dataIndex)"
223
+ v-model="config.tempData[cell.dataIndex][index]"
224
+ :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"
225
+ :disabled="true"/>
226
+ </template>
227
+ <template v-else>
228
+ <a-input
229
+ v-model="configData[cell.dataIndex][index]"
230
+ :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"
231
+ :disabled="true"/>
232
+ </template>
233
+ <span class="inputsDivItemLabel">{{ displayFormatText(cell.format, index) }}</span>
234
+ </div>
235
+ </div>
236
+ </template>
237
+ <template v-else>
238
+ <div class="inputsDiv">
239
+ <div class="inputsDivItem" v-for="(num, index) of calcFormatInputNum(cell.format)" :key="index">
240
+ <span class="inputsDivItemLabel">{{ displayFormatStartText(cell.format) }}</span>
241
+ <template v-if="cell.dataIndex.indexOf('@@@') !== -1">
242
+ <a-input
243
+ @change="handleInputDeepChange($event, cell.dataIndex)"
244
+ v-model="config.tempData[cell.dataIndex][index]"
245
+ :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"/>
246
+ </template>
247
+ <template v-else>
248
+ <a-input
249
+ v-model="configData[cell.dataIndex][index]"
250
+ :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"/>
251
+ </template>
252
+ <span class="inputsDivItemLabel">{{ displayFormatText(cell.format, index) }}</span>
253
+ </div>
254
+ </div>
255
+ </template>
256
+ </template>
257
+ <template v-else-if="cell.type === 'list'">
258
+ <template v-if="listIndex === 0">
259
+ <span style="font-weight: bold">{{ cell.listHead }}</span>
260
+ </template>
261
+ <template v-else-if="cell.listType === 'input'">
262
+ <a-input
263
+ v-model="configData[cell.dataIndex][listIndex]"
264
+ :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"/>
265
+ </template>
266
+ <template v-else-if="cell.listType === 'value'">
267
+ {{ cell.content[listIndex] }}
268
+ </template>
269
+ <template v-else-if="cell.listType === 'variable'">
270
+ {{ configData[cell.dataIndex][listIndex - 1][cell.listDataIndex] }}
271
+ </template>
272
+ </template>
273
+ <template v-else-if="cell.type === 'images'">
274
+ <div>
275
+ <template v-if="configData.images[cell.dataIndex]?.length > 0">
276
+ <upload
277
+ :model="uploadParams"
278
+ :img-prefix="imgPrefix"
279
+ :service-name="serverName"
280
+ :images="checkImg(cell.dataIndex, 'configData')"
281
+ :outer-container-index="cell.dataIndex"
282
+ @setFiles="(...args) => {setImages(args, 'configData')}"
283
+ :upload-style="'simple'"
284
+ />
285
+ </template>
286
+ <template v-else>
287
+ <upload
288
+ :model="uploadParams"
289
+ :img-prefix="imgPrefix"
290
+ :service-name="serverName"
291
+ :images="checkImg(cell.dataIndex, 'config')"
292
+ :outer-container-index="cell.dataIndex"
293
+ @setFiles="(...args) => {setImages(args, 'config', cell.dataIndex)}"
294
+ :upload-style="'simple'"
295
+ />
296
+ </template>
297
+ </div>
298
+ </template>
299
+ </td>
300
+ </template>
301
+ <!-- 动态行插入按钮 -->
302
+ <template v-else-if="inputColumnsButton">
303
+ <td :colspan="maxColSpan" :class="calcTDBorder()">
304
+ <a-button-group>
305
+ <a-button @click="addData(columns[0].dataIndex, columns)">
306
+ <a-icon type="plus"/>
307
+ </a-button>
308
+ <a-button @click="removeData(columns[0].dataIndex)">
309
+ <a-icon type="minus"/>
310
+ </a-button>
311
+ </a-button-group>
312
+ </td>
313
+ </template>
314
+ <!-- 其他行 -->
315
+ <template v-else>
316
+ <td
317
+ v-for="(cell, cellIndex) in columns"
318
+ :key="cellIndex"
319
+ :class=" calcTDBorder(cell.noBoarder) "
320
+ :colspan="cell.colSpan ? cell.colSpan : undefined"
321
+ :style="determineCellStyle(cell)"
322
+ :rowspan="cell.rowSpan ? cell.rowSpan : undefined">
323
+ <template v-if="cell.type === 'column'">
324
+ {{ cell.text }}
325
+ </template>
326
+ <template v-else-if="cell.type === 'value'">
327
+ {{ cell.value }}
328
+ </template>
329
+ <template v-else-if="cell.type === 'curDateInput'">
330
+ <a-button type="dashed" v-if="configData.arr[inputColumnsDefinitionIndex][cell.dataIndex]">
331
+ {{ configData.arr[inputColumnsDefinitionIndex][cell.dataIndex] }}
332
+ </a-button>
333
+ <a-button
334
+ v-if="!configData.arr[inputColumnsDefinitionIndex][cell.dataIndex]"
335
+ type="primary"
336
+ @click="getNowDate(inputColumnsDefinitionIndex,cell.dataIndex)"
337
+ >{{ cell.text || '确认' }}
338
+ </a-button>
339
+ </template>
340
+ <template v-else-if="cell.type === 'signature'">
341
+ <img :src="configData[cell.dataIndex]" alt="签名加载失败" style="max-height: 2rem">
342
+ <a-button v-if="!configData[cell.dataIndex]" type="dashed" >需要在手机端签名</a-button>
343
+ </template>
344
+ <template v-else-if="cell.type === 'increment'">
345
+ {{ configData.arr[inputColumnsDefinitionIndex][cell.dataIndex] }}
346
+ </template>
347
+ <template v-else-if="cell.type === 'input'">
348
+ <template v-if="cell.inputReadOnly === true">
349
+ <a-input
350
+ v-model="configData.arr[inputColumnsDefinitionIndex][cell.dataIndex]"
351
+ :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"
352
+ :disabled="true"/>
353
+ </template>
354
+ <template v-else>
355
+ <a-input
356
+ v-model="configData.arr[inputColumnsDefinitionIndex][cell.dataIndex]"
357
+ :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"/>
358
+ </template>
359
+ </template>
360
+ <template v-else-if="cell.type === 'inputs'">
361
+ <template v-if="cell.inputReadOnly === true">
362
+ <a-input
363
+ v-model="configData.arr[inputColumnsDefinitionIndex][cell.dataIndex]"
364
+ :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"
365
+ :disabled="true"/>
366
+ </template>
367
+ <template v-else>
368
+ <a-input
369
+ v-model="configData.arr[inputColumnsDefinitionIndex][cell.dataIndex]"
370
+ :style="'width:' + (cell.inputWidth ? cell.inputWidth : '100') + '%'"/>
371
+ </template>
372
+ </template>
373
+ </td>
374
+ </template>
375
+ </tr>
376
+ </template>
377
+
378
+ <script>
379
+ import Upload from '@vue2-client/base-client/components/common/Upload'
380
+ import { formatDate } from '@vue2-client/utils/util'
381
+ import { nanoid } from 'nanoid'
382
+
383
+ export default {
384
+ name: 'XReportTrGroup',
385
+ components: {
386
+ Upload
387
+ },
388
+ props: {
389
+ // 每一行的配置
390
+ columns: {
391
+ type: Array,
392
+ required: true
393
+ },
394
+ showImgInCell: {
395
+ type: Boolean,
396
+ default: false
397
+ },
398
+ config: {
399
+ type: Object,
400
+ default: function () {
401
+ return {}
402
+ }
403
+ },
404
+ // 命名空间
405
+ serverName: {
406
+ type: String,
407
+ default: 'af-system'
408
+ },
409
+ // 原始配置
410
+ configData: {
411
+ type: Object,
412
+ required: true
413
+ },
414
+ // 是否为动态行
415
+ inputColumns: {
416
+ type: Boolean,
417
+ default: false
418
+ },
419
+ // 是否为动态行按钮
420
+ inputColumnsButton: {
421
+ type: Boolean,
422
+ default: false
423
+ },
424
+ // 动态行的Index
425
+ inputColumnsDefinitionIndex: {
426
+ type: Number,
427
+ default: undefined
428
+ },
429
+ // 是否为展示行
430
+ display: {
431
+ type: Boolean,
432
+ default: false
433
+ },
434
+ // list类型的下标,用于遍历列表时,获取对应的数据
435
+ listIndex: {
436
+ type: Number,
437
+ default: undefined
438
+ },
439
+ // 表格没有上边框
440
+ noTopBorder: {
441
+ type: Boolean,
442
+ default: false
443
+ },
444
+ // 图片是否使用OSS来保存
445
+ useOssForImg: {
446
+ type: Boolean,
447
+ default: true
448
+ },
449
+ // 图片上传后添加前缀
450
+ imgPrefix: {
451
+ type: String,
452
+ default: undefined
453
+ }
454
+ },
455
+ data () {
456
+ return {
457
+ maxColSpan: 12,
458
+ uploadParams: {
459
+ type: 'image',
460
+ accept: ['*'],
461
+ resUploadStock: 1,
462
+ pathKey: 'cs'
463
+ }
464
+ // tableConfig: {}
465
+ }
466
+ },
467
+ methods: {
468
+ updateImg (data) {
469
+ this.$emit('updateImg', data)
470
+ },
471
+ formatImgStr (str) {
472
+ const result = []
473
+ if (str !== '') {
474
+ const arr = str.split('/')
475
+ result.push({
476
+ uid: nanoid(6),
477
+ url: str,
478
+ name: arr[arr.length - 1],
479
+ status: 'done'
480
+ })
481
+ }
482
+ this.uploadParams.acceptCount = 1
483
+ return result
484
+ },
485
+ checkImg (index, type) {
486
+ let target
487
+ if (type === 'configData') {
488
+ target = this.configData.images[index]
489
+ } else {
490
+ target = this.config.tempData[index]
491
+ }
492
+ if (typeof target !== 'object') {
493
+ return this.formatImgStr(target)
494
+ }
495
+ target.forEach(obj => {
496
+ if (obj.uid === undefined) {
497
+ obj.uid = obj.id.toString()
498
+ }
499
+ if (obj.url === undefined) {
500
+ if (obj.path) {
501
+ obj.url = obj.path
502
+ }
503
+ }
504
+ if (obj.name === undefined) {
505
+ const withOutEndFix = obj.url.split('.')[0]
506
+ const temp = withOutEndFix.split('/')
507
+ obj.name = temp[temp.length - 1]
508
+ }
509
+ if (obj.status === undefined) {
510
+ obj.status = 'done'
511
+ }
512
+ })
513
+ return target
514
+ },
515
+ // 判断单元格样式
516
+ determineCellStyle (cell, color = '#000', borderWidth = '1px') {
517
+ // 如果声明了borderColor
518
+ if (this.config.style.borderColor) {
519
+ color = this.config.style.borderColor
520
+ }
521
+ // 如果声明了borderWidth
522
+ if (this.config.style.borderWidth) {
523
+ borderWidth = this.config.style.borderWidth
524
+ }
525
+ // 普通带边框单元格
526
+ const withBorder = {
527
+ border: borderWidth + ' solid ' + color,
528
+ padding: '8px'
529
+ }
530
+ // 只有左右边框的单元格
531
+ const noBorder = {
532
+ borderLeft: borderWidth + ' solid ' + color,
533
+ borderRight: borderWidth + ' solid ' + color,
534
+ padding: '8px'
535
+ }
536
+ // 只没有上边框的单元格
537
+ const NoTopBorder = {
538
+ borderTopStyle: 'none',
539
+ borderLeft: borderWidth + ' solid ' + color,
540
+ borderRight: borderWidth + ' solid ' + color,
541
+ borderBottom: borderWidth + ' solid ' + color,
542
+ padding: '8px'
543
+ }
544
+ let result = {}
545
+ // 如果表格也声明了样式,用表格样式将样式覆盖
546
+ if (cell.style) {
547
+ if (cell.noBorder) {
548
+ result = { ...noBorder, ...cell.style }
549
+ } else {
550
+ if (this.noTopBorder) {
551
+ result = { ...NoTopBorder, ...cell.style }
552
+ } else {
553
+ result = { ...withBorder, ...cell.style }
554
+ }
555
+ }
556
+ return result
557
+ }
558
+ // 如果表头声明了样式,则用其将基础样式覆盖
559
+ if (cell.type === 'column') {
560
+ if (this.config.labelStyle !== undefined) {
561
+ if (cell.noBorder) {
562
+ result = { ...noBorder, ...this.config.labelStyle }
563
+ } else {
564
+ if (this.noTopBorder) {
565
+ result = { ...NoTopBorder, ...this.config.labelStyle }
566
+ } else {
567
+ result = { ...withBorder, ...this.config.labelStyle }
568
+ }
569
+ }
570
+ return result
571
+ }
572
+ }
573
+ if (cell.noBorder) {
574
+ result = { ...noBorder }
575
+ } else {
576
+ if (this.noTopBorder) {
577
+ result = { ...NoTopBorder }
578
+ } else {
579
+ result = { ...withBorder }
580
+ }
581
+ }
582
+ return result
583
+ },
584
+ // 表格中数据key含有@@@,需要手动触发更新
585
+ handleInputDeepChange () {
586
+ this.$forceUpdate()
587
+ },
588
+ // 路径中含有@@@的key,将其解析,并返回其数据
589
+ getDeepObject (obj, strPath) {
590
+ const arr = strPath.split('@@@')
591
+ let result = obj[arr[0]]
592
+ arr.shift()
593
+ try {
594
+ while (arr.length > 0) {
595
+ result = result[arr[0]]
596
+ arr.shift()
597
+ }
598
+ } catch (e) {
599
+ result = undefined
600
+ }
601
+ return result
602
+ },
603
+ // 获取当前日期
604
+ getNowDate (index1, index2) {
605
+ if (index2) {
606
+ // @click="getNowDate(configData.arr[inputColumnsDefinitionIndex][cell.dataIndex])"
607
+ this.configData.arr[index1][index2] = formatDate('now')
608
+ } else {
609
+ this.configData[index1] = formatDate('now')
610
+ }
611
+ this.configData = Object.assign({}, this.configData)
612
+ },
613
+ // 反序列化函数并执行
614
+ deserializeFunctionAndRun (functionStr, value) {
615
+ // eslint-disable-next-line no-eval
616
+ const fun = eval('(' + functionStr + ')')
617
+ return fun(value, this.config)
618
+ },
619
+ // 基础上传组件,图片改动后触发
620
+ setImages (args, type, index = undefined) {
621
+ // 如果基础上传组件在初始化完成后,就调用emit了setImage,此时图片并没有变化,直接返回
622
+ if (args[2] === 'created') {
623
+ return
624
+ }
625
+ if (type === 'configData') {
626
+ this.configData.images[args[1]] = args[0]
627
+ } else {
628
+ this.config.tempData[args[1]] = args[0]
629
+ if (index) {
630
+ this.$emit('updateImg', this.config.tempData[index])
631
+ }
632
+ }
633
+ },
634
+ // 动态行删除
635
+ removeData (index) {
636
+ if (this.configData[index].length === 0) {
637
+ this.$message.warn('已经没有更多了')
638
+ return
639
+ }
640
+ this.configData[index].pop()
641
+ },
642
+ // 添加一行
643
+ addData (index, row) {
644
+ // 获取定义
645
+ const defs = row[0].definition
646
+
647
+ // 获取外层对象名
648
+ const dataName = row[0].dataIndex
649
+ const temp = {}
650
+
651
+ defs.forEach(def => {
652
+ // 找到数组中最后一个数据的值
653
+ let lastDataNo = 0
654
+ if (this.configData[dataName][this.configData[dataName].length - 1]) {
655
+ lastDataNo = this.configData[dataName][this.configData[dataName].length - 1][def.dataIndex]
656
+ }
657
+
658
+ // 如果没有值,检查是否声明了初始值
659
+ if (lastDataNo === 0 && def.initialValue) {
660
+ lastDataNo = def.initialValue
661
+ }
662
+
663
+ // 检查是否有步长
664
+ let step = 1
665
+ if (def.step) {
666
+ step = def.step
667
+ }
668
+
669
+ // 如果单元格类型为increment,则进行自增
670
+ if (def.type === 'increment') {
671
+ temp[def.dataIndex] = lastDataNo + step
672
+ }
673
+ })
674
+ this.configData[index].push(temp)
675
+ },
676
+ // 根据format计算需要多少个输入框
677
+ calcFormatInputNum (formatStr) {
678
+ let count = 0
679
+ for (let i = 0; i < formatStr.length; i++) {
680
+ if (formatStr[i] === '{') {
681
+ count++
682
+ }
683
+ }
684
+ return count
685
+ },
686
+ // 根据format计算输入框之后的文字显示
687
+ displayFormatText (formatStr, num) {
688
+ let start = 0
689
+ let count = 0
690
+ num++
691
+ for (let i = 0; i < formatStr.length; i++) {
692
+ if (formatStr[i] === '}') {
693
+ start = i
694
+ count++
695
+ }
696
+ if (count === num) {
697
+ for (let j = start + 1; j < formatStr.length; j++) {
698
+ if (formatStr[j] === '{') {
699
+ return formatStr.slice(start + 1, j)
700
+ }
701
+ if (j === formatStr.length - 1 && formatStr[j] !== '}') {
702
+ return formatStr[j]
703
+ }
704
+ }
705
+ }
706
+ }
707
+ },
708
+ calcTDBorder (cellNoBorder = false) {
709
+ if (cellNoBorder) {
710
+ return 'tdNoBorder'
711
+ } else {
712
+ if (this.noTopBorder) {
713
+ return 'tdWithNoTopBorder'
714
+ } else {
715
+ return 'tdWithBorder'
716
+ }
717
+ }
718
+ },
719
+ // 根据format计算输入框之前的文字显示
720
+ displayFormatStartText (formatStr) {
721
+ let count = 0
722
+ for (let i = 0; i < formatStr.length; i++) {
723
+ if (formatStr[i] === '{') {
724
+ break
725
+ } else {
726
+ count++
727
+ }
728
+ }
729
+ return formatStr.slice(0, count)
730
+ },
731
+ // 拼接被自动拆分的单元格内容
732
+ showSubRowValue (cell) {
733
+ const dataName = cell.dataIndex
734
+ const formatArr = []
735
+ const dataArr = []
736
+
737
+ // 从config中取出所有数据,根据dataIndex的开头内容进行拼接
738
+ this.config.columns.forEach(row => row.forEach(cell => {
739
+ if (cell.dataIndex && cell.dataIndex.startsWith(dataName)) {
740
+ formatArr.push(cell.format)
741
+ dataArr.push(this.configData[cell.dataIndex])
742
+ }
743
+ }))
744
+
745
+ const text = []
746
+ const data = []
747
+
748
+ formatArr.forEach(word => {
749
+ const temp = word.split('{}')
750
+ temp.forEach(char => {
751
+ if (char !== '') {
752
+ text.push(char)
753
+ }
754
+ })
755
+ })
756
+
757
+ dataArr.forEach(item => {
758
+ item.forEach(num => {
759
+ data.push(num)
760
+ })
761
+ })
762
+
763
+ let result = ''
764
+ for (let i = 0; i < data.length; i++) {
765
+ result += data[i]
766
+ result += text[i]
767
+ }
768
+
769
+ return result
770
+ },
771
+ },
772
+ beforeMount () {
773
+ if (this.useOssForImg) {
774
+ this.uploadParams.resUploadMode = 'oss'
775
+ }
776
+ }
777
+ }
778
+
779
+ </script>
780
+
781
+ <style scoped lang="less">
782
+ .inputsDiv {
783
+ display: flex;
784
+ justify-content: space-between;
785
+
786
+ .inputsDivItem {
787
+ display: flex;
788
+ align-items: center;
789
+ padding: 0 4px;
790
+ white-space: nowrap;
791
+
792
+ .inputsDivItemLabel {
793
+ padding: 0 4px;
794
+ }
795
+ }
796
+ }
797
+
798
+ .tdNoBorder {
799
+ border-left: 1px solid #000;
800
+ border-right: 1px solid #000;
801
+ padding: 8px;
802
+ }
803
+
804
+ .tdWithBorder {
805
+ border: 1px solid #000;
806
+ padding: 8px;
807
+ }
808
+
809
+ .tdWithNoTopBorder {
810
+ border-top-style: none;
811
+ border-left: 1px solid #000;
812
+ border-right: 1px solid #000;
813
+ border-bottom: 1px solid #000;
814
+ padding: 8px;
815
+ }
816
+ </style>