vue2-client 1.10.29 → 1.10.30

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 +1 -1
  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 +28 -19
  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 -71
  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 -816
  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/XReport/print.js +186 -186
  184. package/src/base-client/components/common/XReportDrawer/XReportDrawer.vue +201 -201
  185. package/src/base-client/components/common/XReportDrawer/index.js +3 -3
  186. package/src/base-client/components/common/XReportGrid/XReport.vue +1070 -1070
  187. package/src/base-client/components/common/XReportGrid/XReportDemo.vue +47 -47
  188. package/src/base-client/components/common/XReportGrid/XReportDesign.vue +628 -628
  189. package/src/base-client/components/common/XReportGrid/XReportJsonRender.vue +380 -380
  190. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +1104 -1104
  191. package/src/base-client/components/common/XReportGrid/index.js +3 -3
  192. package/src/base-client/components/common/XReportGrid/index.md +44 -44
  193. package/src/base-client/components/common/XReportGrid/print.js +184 -184
  194. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  195. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  196. package/src/base-client/components/common/XReportSlot/index.md +48 -48
  197. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +166 -166
  198. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -3
  199. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -7
  200. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  201. package/src/base-client/components/common/XStepView/index.js +3 -3
  202. package/src/base-client/components/common/XStepView/index.md +31 -31
  203. package/src/base-client/components/common/XTab/XTab.vue +201 -201
  204. package/src/base-client/components/common/XTab/XTabDemo.vue +22 -22
  205. package/src/base-client/components/common/XTab/index.js +3 -3
  206. package/src/base-client/components/common/XTable/CustomFuncCel.vue +51 -51
  207. package/src/base-client/components/common/XTable/TableCellRenderer.vue +161 -161
  208. package/src/base-client/components/common/XTable/index.md +255 -255
  209. package/src/base-client/components/common/XTagGroup/index.vue +52 -52
  210. package/src/base-client/components/common/XTree/XTree.vue +424 -424
  211. package/src/base-client/components/common/XTree/XTreePro.vue +452 -452
  212. package/src/base-client/components/common/XTree/index.js +3 -3
  213. package/src/base-client/components/common/XTree/index.md +36 -36
  214. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +113 -113
  215. package/src/base-client/components/common/XTreeOne/XTreeOnePro.vue +128 -128
  216. package/src/base-client/components/common/richTextModal/index.vue +56 -56
  217. package/src/base-client/components/common/richTextModal/richDemo.vue +48 -48
  218. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +359 -359
  219. package/src/base-client/components/his/XHisEditor/index.js +3 -3
  220. package/src/base-client/components/index.js +51 -51
  221. package/src/base-client/components/layout/XPageView/RenderRow.vue +63 -63
  222. package/src/base-client/components/layout/XPageView/XErrorView.vue +11 -11
  223. package/src/base-client/components/layout/XPageView/XPageView.vue +155 -155
  224. package/src/base-client/components/layout/XPageView/index.js +3 -3
  225. package/src/base-client/components/layout/XPageView/index.md +38 -38
  226. package/src/base-client/components/layout/XTreeView/XTreeView.vue +130 -130
  227. package/src/base-client/components/layout/XTreeView/index.js +3 -3
  228. package/src/base-client/components/layout/XTreeView/index.md +46 -46
  229. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  230. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  231. package/src/base-client/plugins/AppData.js +121 -121
  232. package/src/base-client/plugins/Config.js +19 -19
  233. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  234. package/src/base-client/plugins/Recording.js +258 -258
  235. package/src/base-client/plugins/index.js +23 -23
  236. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  237. package/src/bootstrap.js +42 -42
  238. package/src/components/Charts/Bar.vue +62 -62
  239. package/src/components/Charts/ChartCard.vue +134 -134
  240. package/src/components/Charts/Liquid.vue +67 -67
  241. package/src/components/Charts/MiniArea.vue +39 -39
  242. package/src/components/Charts/MiniBar.vue +39 -39
  243. package/src/components/Charts/MiniProgress.vue +75 -75
  244. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  245. package/src/components/Charts/Radar.vue +68 -68
  246. package/src/components/Charts/RankList.vue +77 -77
  247. package/src/components/Charts/TagCloud.vue +113 -113
  248. package/src/components/Charts/TransferBar.vue +64 -64
  249. package/src/components/Charts/Trend.vue +82 -82
  250. package/src/components/Charts/chart.less +12 -12
  251. package/src/components/Charts/smooth.area.less +13 -13
  252. package/src/components/CodeMirror/inedx.vue +118 -118
  253. package/src/components/CodeMirror/setting.js +40 -40
  254. package/src/components/FilePreview/FilePreview.vue +166 -166
  255. package/src/components/HeightScanner/index.vue +571 -571
  256. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  257. package/src/components/NumberInfo/index.js +3 -3
  258. package/src/components/NumberInfo/index.less +54 -54
  259. package/src/components/NumberInfo/index.md +43 -43
  260. package/src/components/STable/index.js +390 -390
  261. package/src/components/card/ChartCard.vue +79 -79
  262. package/src/components/chart/Bar.vue +60 -60
  263. package/src/components/chart/MiniArea.vue +67 -67
  264. package/src/components/chart/MiniBar.vue +59 -59
  265. package/src/components/chart/MiniProgress.vue +57 -57
  266. package/src/components/chart/Radar.vue +80 -80
  267. package/src/components/chart/RankingList.vue +60 -60
  268. package/src/components/chart/Trend.vue +79 -79
  269. package/src/components/chart/index.less +9 -9
  270. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  271. package/src/components/checkbox/ImgCheckbox.vue +117 -117
  272. package/src/components/checkbox/ImgCheckboxGroup.vue +76 -76
  273. package/src/components/checkbox/index.js +9 -9
  274. package/src/components/exception/ExceptionPage.vue +70 -70
  275. package/src/components/g2Charts/constants.js +202 -202
  276. package/src/components/g2Charts/demo.vue +808 -808
  277. package/src/components/g2Charts/designer.vue +228 -228
  278. package/src/components/g2Charts/designerBaseConfig.vue +61 -61
  279. package/src/components/g2Charts/designerDataConfig.vue +259 -259
  280. package/src/components/g2Charts/designerStyleConfig.vue +16 -16
  281. package/src/components/g2Charts/index.vue +397 -397
  282. package/src/components/index.js +36 -36
  283. package/src/components/input/IInput.vue +66 -66
  284. package/src/components/menu/SideMenu.vue +75 -75
  285. package/src/components/menu/menu.js +273 -273
  286. package/src/components/setting/Setting.vue +234 -234
  287. package/src/components/tool/AStepItem.vue +60 -60
  288. package/src/config/CreateQueryConfig.js +325 -325
  289. package/src/config/default/antd.config.js +89 -89
  290. package/src/config/default/setting.config.js +55 -55
  291. package/src/font-style/font.css +4 -4
  292. package/src/layouts/CommonLayout.vue +56 -56
  293. package/src/layouts/GridView.vue +45 -45
  294. package/src/layouts/PageLayout.vue +151 -151
  295. package/src/layouts/SinglePageView.vue +136 -136
  296. package/src/layouts/header/AdminHeader.vue +132 -132
  297. package/src/layouts/header/HeaderNotice.vue +177 -177
  298. package/src/layouts/header/InstitutionDetail.vue +181 -181
  299. package/src/layouts/tabs/TabsHead.vue +189 -189
  300. package/src/layouts/tabs/TabsView.vue +389 -389
  301. package/src/lib.js +1 -1
  302. package/src/main.js +34 -34
  303. package/src/mock/extend/index.js +84 -84
  304. package/src/mock/goods/index.js +108 -108
  305. package/src/pages/AMisDemo/AMisDemo.vue +325 -325
  306. package/src/pages/AMisDemo/AMisDemo2.vue +74 -74
  307. package/src/pages/DefaultExample/index.vue +77 -77
  308. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  309. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  310. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  311. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  312. package/src/pages/DynamicStatistics/FavoriteList.vue +50 -50
  313. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  314. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  315. package/src/pages/DynamicStatistics/index.vue +282 -282
  316. package/src/pages/Example/childIndex.vue +15 -15
  317. package/src/pages/Example/index.vue +30 -30
  318. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  319. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  320. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  321. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  322. package/src/pages/NewDynamicStatistics/FavoriteList.vue +50 -50
  323. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  324. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  325. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  326. package/src/pages/Recording/index.vue +77 -77
  327. package/src/pages/ReportGrid/index.vue +76 -76
  328. package/src/pages/ServiceReview/index.vue +284 -284
  329. package/src/pages/SubExample/index.vue +26 -26
  330. package/src/pages/WorkflowDetail/WorkFlowDemo.vue +32 -32
  331. package/src/pages/WorkflowDetail/WorkflowDetail.vue +230 -230
  332. package/src/pages/WorkflowDetail/WorkflowPageDetail/LeaveMessage.vue +131 -131
  333. package/src/pages/WorkflowDetail/WorkflowPageDetail/TrimTextTail.vue +23 -23
  334. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformation.vue +302 -302
  335. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformationDetails.vue +276 -276
  336. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +864 -864
  337. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandleReso.vue +997 -997
  338. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +222 -222
  339. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkOrderParentDetails.vue +233 -233
  340. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowDetailResso.vue +261 -261
  341. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowListResolution.vue +248 -248
  342. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowLog.vue +73 -73
  343. package/src/pages/XPageViewExample/index.vue +38 -38
  344. package/src/pages/XReportView/index.vue +64 -64
  345. package/src/pages/XTreeOneProExample/index.vue +67 -67
  346. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  347. package/src/pages/login/Login.vue +378 -378
  348. package/src/pages/login/LoginV3.vue +389 -389
  349. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1219
  350. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  351. package/src/pages/report/ReportTable.js +124 -124
  352. package/src/pages/resourceManage/orgListManage.vue +98 -98
  353. package/src/pages/system/dictionary/index.vue +44 -44
  354. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  355. package/src/pages/system/monitor/operLog/index.vue +37 -37
  356. package/src/pages/system/settings/modifyPassword.vue +117 -117
  357. package/src/pages/system/ticket/index.vue +480 -480
  358. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  359. package/src/pages/userInfoDetailManage/ChangeMeterRecordQuery/index.vue +64 -64
  360. package/src/pages/userInfoDetailManage/FillCardRecordQuery/index.vue +76 -76
  361. package/src/pages/userInfoDetailManage/FillGasRecordQuery/index.vue +74 -74
  362. package/src/pages/userInfoDetailManage/InfoChangeRecordQuery/index.vue +64 -64
  363. package/src/pages/userInfoDetailManage/InstructRecordQuery/index.vue +64 -64
  364. package/src/pages/userInfoDetailManage/MachineRecordQuery/index.vue +74 -74
  365. package/src/pages/userInfoDetailManage/MeterParamRecordQuery/index.vue +64 -64
  366. package/src/pages/userInfoDetailManage/OtherChargeRecordQuery/index.vue +74 -74
  367. package/src/pages/userInfoDetailManage/TransferRecordQuery/index.vue +66 -66
  368. package/src/pages/userInfoDetailManage/UserChargeRecordQuery/index.vue +92 -92
  369. package/src/pages/userInfoDetailManage/UserHandRecordQuery/index.vue +86 -86
  370. package/src/pages/userInfoDetailManage/UserRecordQuery/index.vue +73 -73
  371. package/src/pages/userInfoDetailManage/WatchCollectionRecordQuery/index.vue +64 -64
  372. package/src/pages/userInfoDetailManage/index.vue +82 -82
  373. package/src/pages/userInfoDetailManage/userInfoDetailQueryTabs.vue +132 -132
  374. package/src/plugins/EventLogPlugin.js +33 -33
  375. package/src/plugins/FindParentsData.js +17 -17
  376. package/src/plugins/HiPrintPlugin.js +124 -124
  377. package/src/router/async/config.async.js +35 -35
  378. package/src/router/async/router.map.js +188 -188
  379. package/src/router/guards.js +263 -263
  380. package/src/router/index.js +27 -27
  381. package/src/router.js +19 -19
  382. package/src/services/DataModel.js +30 -30
  383. package/src/services/LodopFuncs.js +137 -137
  384. package/src/services/api/TicketDetailsViewApi.js +46 -46
  385. package/src/services/api/cas.js +79 -79
  386. package/src/services/api/common.js +346 -346
  387. package/src/services/api/entity.js +18 -18
  388. package/src/services/api/index.js +17 -17
  389. package/src/services/api/restTools.js +145 -145
  390. package/src/services/api/workFlow.js +63 -63
  391. package/src/services/apiService.js +15 -15
  392. package/src/services/user.js +90 -90
  393. package/src/services/v3Api.js +116 -116
  394. package/src/store/modules/account.js +115 -115
  395. package/src/store/modules/index.js +5 -5
  396. package/src/store/modules/lowCode.js +33 -33
  397. package/src/store/modules/setting.js +119 -119
  398. package/src/theme/default/style.less +58 -58
  399. package/src/theme/global.less +159 -159
  400. package/src/utils/authority-utils.js +85 -85
  401. package/src/utils/errorCode.js +6 -6
  402. package/src/utils/formatter.js +74 -74
  403. package/src/utils/htmlToPDF.js +108 -108
  404. package/src/utils/htmlToPDFApi.js +5 -5
  405. package/src/utils/indexedDB.js +263 -263
  406. package/src/utils/login.js +188 -188
  407. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  408. package/src/utils/lowcode/lowcodeLog.js +29 -29
  409. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  410. package/src/utils/lowcode/registerComponentForEditor.js +1 -1
  411. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  412. package/src/utils/map-utils.js +47 -47
  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,571 +1,571 @@
1
- <template>
2
- <a-modal
3
- :visible="show"
4
- :dialogStyle="{ top: '1vh' }"
5
- width="50vw"
6
- :footer="null"
7
- :zIndex="1050"
8
- @cancel="handleCancel"
9
- :maskClosable="false"
10
- >
11
- <div class="scanner-container">
12
- <a-row>
13
- <a-space>
14
- <a-button type="primary" @click="capturePhoto">拍照</a-button>
15
- <a-button type="primary" @click="switchCamera('0')">文档</a-button>
16
- <a-button type="primary" @click="switchCamera('1')">人像</a-button>
17
- <a-button type="primary" @click="getVideoStatus">设备状态</a-button>
18
- <a-button type="primary" @click="closeVideo">关闭设备</a-button>
19
- <a-button type="primary" @click="openApp">开启程序</a-button>
20
- <a-button v-if="showid" type="primary" @click="startReadCard">读身份证</a-button>
21
- <a-button v-if="showid" @click="stopReadCard">停止读卡</a-button>
22
- </a-space>
23
- </a-row>
24
- <a-row>
25
- <a-col :span="12">
26
- <div
27
- style="display: flex; justify-content: center; align-items: center; height: 300px;">
28
- <img
29
- v-if="previewImage"
30
- id="Base64IMG"
31
- :src="previewImage"
32
- height="300"
33
- alt=""
34
- style="display: block;margin: auto;"
35
- />
36
- <a-empty v-else/>
37
- </div>
38
- </a-col>
39
- <a-col :span="12">
40
- <a-textarea
41
- id="Console"
42
- style=" height: 300px; width: 100%; resize: none;border-radius: 0"
43
- :disabled="true"></a-textarea>
44
- </a-col>
45
- <a-col :span="24">
46
- <img
47
- id="cam"
48
- :src="cameraurl"
49
- width="100%"
50
- height="540"
51
- alt=""/>
52
- </a-col>
53
- <a-col :span="24" v-if="showid">
54
- <a-form layout="horizontal">
55
- <a-form-item label="姓名">
56
- <a-input v-model="idCardForm.name" disabled/>
57
- </a-form-item>
58
- <a-form-item label="性别">
59
- <a-input v-model="idCardForm.sex" disabled/>
60
- </a-form-item>
61
- <a-form-item label="民族">
62
- <a-input v-model="idCardForm.nation" disabled/>
63
- </a-form-item>
64
- <a-form-item label="出生日期">
65
- <a-input v-model="idCardForm.birthday" disabled/>
66
- </a-form-item>
67
- <a-form-item label="地址">
68
- <a-textarea v-model="idCardForm.address" :rows="2" disabled/>
69
- </a-form-item>
70
- <a-form-item label="身份证号">
71
- <a-input v-model="idCardForm.cardID" disabled/>
72
- </a-form-item>
73
- <a-form-item label="签发机关">
74
- <a-input v-model="idCardForm.issueOrgan" disabled/>
75
- </a-form-item>
76
- <a-form-item label="有效期">
77
- <a-input v-model="idCardForm.validStart" disabled/>
78
- <a-input v-model="idCardForm.validEnd" disabled/>
79
- </a-form-item>
80
-
81
- <div class="id-photo-section">
82
- <div class="photo-preview">
83
- <img
84
- id="PhotoDisplay"
85
- :src="idCardForm.photoUrl"
86
- class="id-photo"
87
- alt=""/>
88
- </div>
89
- <a-button type="primary" @click="confirmIdCard">确认信息</a-button>
90
- </div>
91
- </a-form>
92
- </a-col>
93
- </a-row>
94
- </div>
95
- <template #title>
96
- <a-row>
97
- <a-col :span="24">
98
- <a-space>
99
- 高拍仪
100
- <a-button @click="handleOk">上传截图</a-button>
101
- <a-button @click="handleCancel">取消</a-button>
102
- </a-space>
103
- </a-col>
104
- </a-row>
105
- </template>
106
- <div id="result"></div>
107
- </a-modal>
108
- </template>
109
-
110
- <script>
111
- import axios from 'axios'
112
-
113
- let ws
114
- const SERVER_ADDR = 'ws://127.0.0.1:38088'
115
-
116
- export default {
117
- name: 'HeightScanner',
118
-
119
- props: {
120
- show: Boolean,
121
- showid: Boolean
122
- },
123
-
124
- data () {
125
- return {
126
- SERVER_ADDR,
127
- cameraurl: 'http://127.0.0.1:38088/video=stream&camidx=0',
128
- connected: false,
129
- clicked: false,
130
- iswaiting: false,
131
- previewImage: '',
132
- consoleText: '',
133
- idCardForm: {
134
- name: '',
135
- sex: '',
136
- nation: '',
137
- birthday: '',
138
- address: '',
139
- cardID: '',
140
- issueOrgan: '',
141
- validStart: '',
142
- validEnd: '',
143
- photoBuffer: '',
144
- photoUrl: ''
145
- },
146
- callback: {},
147
- context: 0,
148
- base_offset: 0,
149
- orgdrawwidth: 0,
150
- orgdrawheight: 0,
151
-
152
- CLT_MSG: {
153
- // 打开相机 cap:相机ID
154
- BEGIN_CAP: 1,
155
- // 关闭相机 cap:相机ID
156
- STOP_CAP: 2,
157
- // 获取PID
158
- GET_PID: 3,
159
- // 获取分辨率
160
- GET_FBL: 4,
161
- // 设置分辨率
162
- SET_FBL: 5,
163
- // 设置MJPG格式
164
- SET_MJPG: 6,
165
- // 设置视频旋转
166
- SET_TURN: 7,
167
- // 设置视频截图保存的jpg质量
168
- SET_QUALITY: 8,
169
- // 设置自动裁边
170
- SET_AUTOCROP: 9,
171
- // 设置预设框选
172
- SET_PREST: 10,
173
- // 获取当前预设框选
174
- GET_PREST_INFO: 11,
175
- // 视频格式弹窗
176
- FORMAT_DLG: 12,
177
- // 视频属性弹窗
178
- PROPERTY_DLG: 13,
179
- // 设置截图颜色模式 彩色 黑白 灰度
180
- SET_COLOR_MODEL: 14,
181
- // 截图
182
- GET_PICTURE: 15,
183
- // 设置去底色参数
184
- SET_CLEAN_PARAM: 16,
185
- // 内存截图
186
- GET_PICTURE_MEM: 17,
187
- // base64测试
188
- TEST_BASE64: 18,
189
- // 制作PDF的临时目录
190
- SET_TEMPDIR: 19,
191
- // 开始制作PDF
192
- BEGIN_PDF: 20,
193
- // PDF截图 保存到PDF临时目录
194
- GET_PDF_PICTURES: 21,
195
- // 结束制作PDF
196
- END_PDF_PICTURES: 22,
197
- // PDF文件转为文件里的BASE64码
198
- PDF_TO_BASE64: 23,
199
- // 文件里的BASE64码转为PDF文件
200
- BASE64_TO_PDF: 24,
201
- // PDF文件转为BASE64字符串
202
- PDF_TO_BASE64_STR: 25,
203
- // 删除制作PDF的图片文件
204
- DEL_PICTURE_PDF: 26,
205
- // 打印图片
206
- PRINT_IMAGE: 27,
207
- // 设置显示错误弹窗
208
- SHOW_ERROR_BOX: 28,
209
- // 获取视频连接事件
210
- GET_EVENT: 29,
211
- // 预设框选鼠标消息
212
- PRESET_MOUSEDOWN: 30,
213
- PRESET_MOUSEMOVE: 31,
214
- PRESET_MOUSEUP: 32,
215
- // 人证对比
216
- IDCARD_COMPARE: 40,
217
- // 读卡
218
- READ_IDCARD: 51,
219
- // 开始循环读卡
220
- BEGIN_READ_IDCARD: 52,
221
- // 停止循环读卡
222
- STOP_READ_IDCARD: 53,
223
- // 水平
224
- HCOPY_IDCARD: 54,
225
- // 垂直
226
- VCOPY_IDCARD: 55,
227
-
228
- PCOPY_IDCARD: 56,
229
- // 反面
230
- NCOPY_IDCARD: 57
231
- },
232
- SVR_BIN_MSG: {
233
- CAP_FRAME: 1, // 后台帧消息
234
- }
235
- }
236
- },
237
-
238
- methods: {
239
- // handleImgError (e) {
240
- // e.target.style.display = 'none'
241
- // },
242
- // 页面load消息
243
- onLoad () {
244
- return new Promise((resolve, reject) => {
245
- // 添加重试计数器
246
- let retryCount = 0
247
- const maxRetries = 5
248
-
249
- const tryConnect = () => {
250
- if (ws) {
251
- resolve()
252
- return
253
- }
254
-
255
- ws = new WebSocket(this.SERVER_ADDR)
256
-
257
- ws.onopen = (evt) => {
258
- if (this.connected) {
259
- resolve()
260
- }
261
- this.connected = true
262
- this.output('已经连接到服务器')
263
- this.switchCamera(0)
264
- }
265
-
266
- ws.onclose = (evt) => {
267
- if (!this.connected) {
268
- // 检查重试次数
269
- if (retryCount < maxRetries) {
270
- retryCount++
271
- this.output(`连接失败,正在进行第${retryCount}次重试...`)
272
- window.location.href = 'FLShell://'
273
- setTimeout(tryConnect, 3 * 1000)
274
- } else {
275
- this.output('连接失败,已达到最大重试次数')
276
- reject(new Error('连接失败,已达到最大重试次数'))
277
- }
278
- } else {
279
- this.output('已断开服务器连接')
280
- this.connected = false
281
- }
282
- ws = null
283
- }
284
-
285
- ws.onerror = (evt) => {
286
- this.output('高拍仪连接错误')
287
- reject(new Error('连接错误'))
288
- }
289
- ws.onmessage = (evt) => {
290
- if (evt.data.length === 0) {
291
- return
292
- }
293
- if (typeof evt.data === 'string') {
294
- const msg = JSON.parse(evt.data)
295
- console.log('msg1:', msg)
296
- if (msg.err && msg.err !== 0) {
297
- this.output('错误 - ' + msg.err + ', ' + msg.msg)
298
- reject(new Error('错误 - ' + msg.err + ', ' + msg.msg))
299
- } else if (msg.msg) {
300
- console.log('msg2:', msg)
301
- this.output(msg.msg)
302
- }
303
- if (msg.user_data) {
304
- this.callback[msg.user_data](msg)
305
- if (typeof msg.user_data === 'number') {
306
- this.callback[msg.user_data] = undefined
307
- }
308
- }
309
- } else {
310
- const file = new FileReader()
311
- file.onload = (evt) => {
312
- if (evt.target.readyState == FileReader.DONE) {
313
- const data = new Uint8Array(evt.target.result)
314
- if (data[0] == this.SVR_BIN_MSG.CAP_FRAME) {
315
- return this.drawImage(data)
316
- }
317
- }
318
- }
319
- file.readAsArrayBuffer(evt.data)
320
- }
321
- }
322
- const canvas = document.getElementById('cam')
323
- canvas.onmousedown = (e) => {
324
- canvas.style.cursor = 'crosshair'
325
- this.clicked = true
326
- this.sendMsg(this.CLT_MSG.PRESET_MOUSEDOWN, { origX: e.layerX, origY: e.layerY }, (msg) => {
327
- if (msg.err !== 0) {
328
- console.warn('鼠标按下事件出错:', msg.err)
329
- }
330
- })
331
- }
332
- canvas.onmousemove = (e) => {
333
- if (!this.clicked) {
334
- canvas.style.cursor = 'default'
335
- return
336
- }
337
- canvas.style.cursor = 'crosshair'
338
- this.sendMsg(this.CLT_MSG.PRESET_MOUSEMOVE, { offx: e.layerX, offy: e.layerY }, (msg) => {
339
- if (msg.err !== 0) {
340
- console.warn('鼠标移动事件出错:', msg.err)
341
- }
342
- })
343
- }
344
- onmouseout = canvas.onmouseup = (e) => {
345
- canvas.style.cursor = 'default'
346
- if (!this.clicked) {
347
- return
348
- }
349
- this.sendMsg(this.CLT_MSG.PRESET_MOUSEUP, { offx: e.layerX, offy: e.layerY }, (msg) => {
350
- if (msg.err !== 0) {
351
- console.warn('鼠标抬起事件出错:', msg.err)
352
- }
353
- })
354
- this.clicked = false
355
- }
356
- }
357
-
358
- tryConnect() // 开始首次连接
359
- })
360
- },
361
- newInstancePost (url, data) {
362
- // 重新创建是为了 避免axios的拦截器影响写卡读卡请求
363
- // 请求 如果携带了 Cookie,token到卡服务 会导致请求失败
364
- // 需要注意的是因为没有增加响应拦截器 所以返回结果的res里面会多一层data
365
- const instance = axios.create()
366
- return instance.post(url, data, {
367
- withCredentials: false,
368
- headers: {
369
- 'Content-Type': 'text/plain;charset=UTF-8',
370
- Accept: '*/*',
371
- }
372
- })
373
- },
374
- // 打开视频
375
- switchCamera (data) {
376
- this.cameraurl = 'http://127.0.0.1:38088/video=stream&camidx=' + data + '&tid=' + Date.parse(new Date())
377
- },
378
- // 关闭视频
379
- async closeVideo () {
380
- const params = ''
381
- // const url = this.cameraurl.replace('stream', 'close')
382
- this.cameraurl = ''
383
- const msg = await this.newInstancePost('http://127.0.0.1:38088/card=idcard', params)
384
- if (msg.data.code != '0') {
385
- document.getElementById('result').innerHTML = msg.data.message
386
- }
387
- },
388
- // 获取设备状态
389
- async getVideoStatus () {
390
- document.getElementById('result').innerHTML = ''
391
- const params = ''
392
- const url = 'http://127.0.0.1:38088/video=status'
393
- this.cameraurl = ''
394
- const msg = await this.newInstancePost(url, params)
395
- if (msg.data.code != '0') {
396
- document.getElementById('result').innerHTML = '获取设备状态失败,返回代码 = ' + msg.data.code + ',返回信息 = ' + msg.data.message
397
- } else {
398
- document.getElementById('result').innerHTML = '文档摄像头:' + msg.data.video0 +
399
- ', 人像1:' + msg.data.video1
400
- }
401
- },
402
- openApp () {
403
- window.location.href = 'cameraServicetis:0' // 启动 CameraService 服务程序
404
- },
405
- async capturePhoto () {
406
- // if (!this.name) {
407
- // return this.$showMessage('请输入照片名称')
408
- // }
409
- // if (!this.useType) {
410
- // return this.$showMessage('请选择文件使用类型')
411
- // }
412
- let camidx = 0
413
- if (this.cameraurl.indexOf('http://127.0.0.1:38088/video=stream&camidx=0') != -1) {
414
- camidx = 0
415
- } else if (this.cameraurl.indexOf('http://127.0.0.1:38088/video=stream&camidx=1') != -1) {
416
- camidx = 1
417
- } else {
418
- this.$message.info('请先打开视频')
419
- return
420
- }
421
- const param = {
422
- camidx: camidx
423
- }
424
- const msg = await this.newInstancePost('http://127.0.0.1:38088/video=grabimage', param)
425
- if (msg.data.code != '0') {
426
- this.$message.info(msg.data.message)
427
- return
428
- }
429
- this.previewImage = 'data:image/jpg;base64,' + msg.data.photoBase64
430
- this.output('base64 长度 : ' + this.previewImage)
431
- this.$emit('photo-finish', { img: this.previewImage })
432
- this.name = ''
433
- // post('http://127.0.0.1:38088/video=grabimage', param)
434
- },
435
- // 读身份证
436
- async startReadCard () {
437
- const msg = await this.newInstancePost('http://127.0.0.1:38088/card=idcard', {})
438
- if (msg.data.code != '0') {
439
- this.$message.info(msg.data.message, 2000)
440
- return
441
- } else {
442
- this.updateIdCardInfo(msg.data.IDCardInfo)
443
- }
444
- this.output('读取身份证')
445
- this.output('开始读卡')
446
- },
447
- // 停止读身份证
448
- stopReadCard () {
449
- this.sendMsg(this.CLT_MSG.STOP_READ_IDCARD, (msg) => {
450
- if (msg.err !== 0) {
451
- return
452
- }
453
- this.output('停止读卡')
454
- })
455
- },
456
- // 视频帧绘制函数
457
- drawImage (data) {
458
- // 校验视频是否在一定时间内的
459
- if (!this.checkTimestamp(data[2] * 256 + data[1])) {
460
- return
461
- }
462
- // 视频帧头有时间戳 注意偏移 和 大小端处理
463
- const width = data[this.base_offset + 1] * 256 + data[this.base_offset]
464
- const height = data[this.base_offset + 3] * 256 + data[this.base_offset + 2]
465
-
466
- const cam = document.getElementById('cam')
467
- const context = cam.getContext('2d')
468
- if (this.orgdrawwidth != width || this.orgdrawheight != height) {
469
- this.orgdrawwidth = width
470
- this.orgdrawheight = height
471
- }
472
-
473
- const image = context.createImageData(width, height)
474
- for (let n = 0; n != height; ++n) {
475
- for (let m = 0; m != width; ++m) {
476
- const imageOffset = ((height - n - 1) * width + m) * 4
477
- const dataOffset = (n * width + m) * 3 + this.baseOffset + 4
478
- image.data[imageOffset] = data[dataOffset + 2]
479
- image.data[imageOffset + 1] = data[imageOffset + 1]
480
- image.data[imageOffset + 2] = data[imageOffset]
481
- image.data[imageOffset + 3] = 255
482
- }
483
- }
484
- context.putImageData(image, 0, 0)
485
- },
486
- checkTimestamp (svrTime) {
487
- const myDate = new Date()
488
- let cltTime = myDate.getSeconds() * 1000 + myDate.getMilliseconds()
489
- if (cltTime < svrTime) {
490
- cltTime += 60 * 1000
491
- }
492
- return cltTime - svrTime < 3000
493
- },
494
- sendMsg (proto, msg, cb) {
495
- if (!ws) {
496
- return
497
- }
498
-
499
- if (typeof msg !== 'object') {
500
- if (typeof msg === 'function') {
501
- cb = msg
502
- msg = {}
503
- } else {
504
- msg = {}
505
- }
506
- }
507
-
508
- msg.proto = proto
509
- if (typeof cb === 'function') {
510
- this.callback[++this.context] = cb
511
- msg.user_data = this.context
512
- }
513
-
514
- ws.send(JSON.stringify(msg))
515
- },
516
- output (content) {
517
- if (content.length == 0) {
518
- return
519
- }
520
- const console = document.getElementById('Console')
521
- console.value += content
522
- console.value += '\r'
523
- console.scrollTop = console.scrollHeight
524
- },
525
- // 显示读到的身份证信息
526
- updateIdCardInfo (msg) {
527
- document.getElementById('Name').value = msg.name
528
- document.getElementById('Sex').value = msg.sex
529
- document.getElementById('Nation').value = msg.nation
530
- document.getElementById('Born').value = msg.birthday
531
- document.getElementById('Address').value = msg.address
532
- document.getElementById('CardNo').value = msg.cardID
533
- document.getElementById('Police').value = msg.issueOrgan
534
- document.getElementById('ActivityLFrom').value = msg.validStart
535
- document.getElementById('ActivityLTo').value = msg.validEnd
536
- // document.getElementById('DeviceNo').value = msg.validEnd
537
- document.getElementById('PhotoBuffer').value = msg.fingerBase64
538
- document.getElementById('PhotoDisplay').src = 'data:image/jpg;base64,' + msg.photoBase64
539
- this.IdCardInfo = msg
540
- },
541
- confirmIdCard () {
542
- const param = this.IdCardInfo
543
- if (this.IdCardInfo) {
544
- this.$emit('confirm-info', param)
545
- this.IdCardInfo = {}
546
- }
547
- },
548
- handleOk () {
549
- this.$emit('confirmPhoto', this.previewImage)
550
- },
551
- handleCancel () {
552
- this.show = false
553
- }
554
- },
555
-
556
- mounted () {
557
- this.onLoad().then(() => {
558
- this.$emit('ready')
559
- }).catch(error => {
560
- this.$emit('error', error)
561
- })
562
- },
563
-
564
- beforeDestroy () {
565
- if (ws) {
566
- ws.close()
567
- ws = null
568
- }
569
- }
570
- }
571
- </script>
1
+ <template>
2
+ <a-modal
3
+ :visible="show"
4
+ :dialogStyle="{ top: '1vh' }"
5
+ width="50vw"
6
+ :footer="null"
7
+ :zIndex="1050"
8
+ @cancel="handleCancel"
9
+ :maskClosable="false"
10
+ >
11
+ <div class="scanner-container">
12
+ <a-row>
13
+ <a-space>
14
+ <a-button type="primary" @click="capturePhoto">拍照</a-button>
15
+ <a-button type="primary" @click="switchCamera('0')">文档</a-button>
16
+ <a-button type="primary" @click="switchCamera('1')">人像</a-button>
17
+ <a-button type="primary" @click="getVideoStatus">设备状态</a-button>
18
+ <a-button type="primary" @click="closeVideo">关闭设备</a-button>
19
+ <a-button type="primary" @click="openApp">开启程序</a-button>
20
+ <a-button v-if="showid" type="primary" @click="startReadCard">读身份证</a-button>
21
+ <a-button v-if="showid" @click="stopReadCard">停止读卡</a-button>
22
+ </a-space>
23
+ </a-row>
24
+ <a-row>
25
+ <a-col :span="12">
26
+ <div
27
+ style="display: flex; justify-content: center; align-items: center; height: 300px;">
28
+ <img
29
+ v-if="previewImage"
30
+ id="Base64IMG"
31
+ :src="previewImage"
32
+ height="300"
33
+ alt=""
34
+ style="display: block;margin: auto;"
35
+ />
36
+ <a-empty v-else/>
37
+ </div>
38
+ </a-col>
39
+ <a-col :span="12">
40
+ <a-textarea
41
+ id="Console"
42
+ style=" height: 300px; width: 100%; resize: none;border-radius: 0"
43
+ :disabled="true"></a-textarea>
44
+ </a-col>
45
+ <a-col :span="24">
46
+ <img
47
+ id="cam"
48
+ :src="cameraurl"
49
+ width="100%"
50
+ height="540"
51
+ alt=""/>
52
+ </a-col>
53
+ <a-col :span="24" v-if="showid">
54
+ <a-form layout="horizontal">
55
+ <a-form-item label="姓名">
56
+ <a-input v-model="idCardForm.name" disabled/>
57
+ </a-form-item>
58
+ <a-form-item label="性别">
59
+ <a-input v-model="idCardForm.sex" disabled/>
60
+ </a-form-item>
61
+ <a-form-item label="民族">
62
+ <a-input v-model="idCardForm.nation" disabled/>
63
+ </a-form-item>
64
+ <a-form-item label="出生日期">
65
+ <a-input v-model="idCardForm.birthday" disabled/>
66
+ </a-form-item>
67
+ <a-form-item label="地址">
68
+ <a-textarea v-model="idCardForm.address" :rows="2" disabled/>
69
+ </a-form-item>
70
+ <a-form-item label="身份证号">
71
+ <a-input v-model="idCardForm.cardID" disabled/>
72
+ </a-form-item>
73
+ <a-form-item label="签发机关">
74
+ <a-input v-model="idCardForm.issueOrgan" disabled/>
75
+ </a-form-item>
76
+ <a-form-item label="有效期">
77
+ <a-input v-model="idCardForm.validStart" disabled/>
78
+ <a-input v-model="idCardForm.validEnd" disabled/>
79
+ </a-form-item>
80
+
81
+ <div class="id-photo-section">
82
+ <div class="photo-preview">
83
+ <img
84
+ id="PhotoDisplay"
85
+ :src="idCardForm.photoUrl"
86
+ class="id-photo"
87
+ alt=""/>
88
+ </div>
89
+ <a-button type="primary" @click="confirmIdCard">确认信息</a-button>
90
+ </div>
91
+ </a-form>
92
+ </a-col>
93
+ </a-row>
94
+ </div>
95
+ <template #title>
96
+ <a-row>
97
+ <a-col :span="24">
98
+ <a-space>
99
+ 高拍仪
100
+ <a-button @click="handleOk">上传截图</a-button>
101
+ <a-button @click="handleCancel">取消</a-button>
102
+ </a-space>
103
+ </a-col>
104
+ </a-row>
105
+ </template>
106
+ <div id="result"></div>
107
+ </a-modal>
108
+ </template>
109
+
110
+ <script>
111
+ import axios from 'axios'
112
+
113
+ let ws
114
+ const SERVER_ADDR = 'ws://127.0.0.1:38088'
115
+
116
+ export default {
117
+ name: 'HeightScanner',
118
+
119
+ props: {
120
+ show: Boolean,
121
+ showid: Boolean
122
+ },
123
+
124
+ data () {
125
+ return {
126
+ SERVER_ADDR,
127
+ cameraurl: 'http://127.0.0.1:38088/video=stream&camidx=0',
128
+ connected: false,
129
+ clicked: false,
130
+ iswaiting: false,
131
+ previewImage: '',
132
+ consoleText: '',
133
+ idCardForm: {
134
+ name: '',
135
+ sex: '',
136
+ nation: '',
137
+ birthday: '',
138
+ address: '',
139
+ cardID: '',
140
+ issueOrgan: '',
141
+ validStart: '',
142
+ validEnd: '',
143
+ photoBuffer: '',
144
+ photoUrl: ''
145
+ },
146
+ callback: {},
147
+ context: 0,
148
+ base_offset: 0,
149
+ orgdrawwidth: 0,
150
+ orgdrawheight: 0,
151
+
152
+ CLT_MSG: {
153
+ // 打开相机 cap:相机ID
154
+ BEGIN_CAP: 1,
155
+ // 关闭相机 cap:相机ID
156
+ STOP_CAP: 2,
157
+ // 获取PID
158
+ GET_PID: 3,
159
+ // 获取分辨率
160
+ GET_FBL: 4,
161
+ // 设置分辨率
162
+ SET_FBL: 5,
163
+ // 设置MJPG格式
164
+ SET_MJPG: 6,
165
+ // 设置视频旋转
166
+ SET_TURN: 7,
167
+ // 设置视频截图保存的jpg质量
168
+ SET_QUALITY: 8,
169
+ // 设置自动裁边
170
+ SET_AUTOCROP: 9,
171
+ // 设置预设框选
172
+ SET_PREST: 10,
173
+ // 获取当前预设框选
174
+ GET_PREST_INFO: 11,
175
+ // 视频格式弹窗
176
+ FORMAT_DLG: 12,
177
+ // 视频属性弹窗
178
+ PROPERTY_DLG: 13,
179
+ // 设置截图颜色模式 彩色 黑白 灰度
180
+ SET_COLOR_MODEL: 14,
181
+ // 截图
182
+ GET_PICTURE: 15,
183
+ // 设置去底色参数
184
+ SET_CLEAN_PARAM: 16,
185
+ // 内存截图
186
+ GET_PICTURE_MEM: 17,
187
+ // base64测试
188
+ TEST_BASE64: 18,
189
+ // 制作PDF的临时目录
190
+ SET_TEMPDIR: 19,
191
+ // 开始制作PDF
192
+ BEGIN_PDF: 20,
193
+ // PDF截图 保存到PDF临时目录
194
+ GET_PDF_PICTURES: 21,
195
+ // 结束制作PDF
196
+ END_PDF_PICTURES: 22,
197
+ // PDF文件转为文件里的BASE64码
198
+ PDF_TO_BASE64: 23,
199
+ // 文件里的BASE64码转为PDF文件
200
+ BASE64_TO_PDF: 24,
201
+ // PDF文件转为BASE64字符串
202
+ PDF_TO_BASE64_STR: 25,
203
+ // 删除制作PDF的图片文件
204
+ DEL_PICTURE_PDF: 26,
205
+ // 打印图片
206
+ PRINT_IMAGE: 27,
207
+ // 设置显示错误弹窗
208
+ SHOW_ERROR_BOX: 28,
209
+ // 获取视频连接事件
210
+ GET_EVENT: 29,
211
+ // 预设框选鼠标消息
212
+ PRESET_MOUSEDOWN: 30,
213
+ PRESET_MOUSEMOVE: 31,
214
+ PRESET_MOUSEUP: 32,
215
+ // 人证对比
216
+ IDCARD_COMPARE: 40,
217
+ // 读卡
218
+ READ_IDCARD: 51,
219
+ // 开始循环读卡
220
+ BEGIN_READ_IDCARD: 52,
221
+ // 停止循环读卡
222
+ STOP_READ_IDCARD: 53,
223
+ // 水平
224
+ HCOPY_IDCARD: 54,
225
+ // 垂直
226
+ VCOPY_IDCARD: 55,
227
+
228
+ PCOPY_IDCARD: 56,
229
+ // 反面
230
+ NCOPY_IDCARD: 57
231
+ },
232
+ SVR_BIN_MSG: {
233
+ CAP_FRAME: 1, // 后台帧消息
234
+ }
235
+ }
236
+ },
237
+
238
+ methods: {
239
+ // handleImgError (e) {
240
+ // e.target.style.display = 'none'
241
+ // },
242
+ // 页面load消息
243
+ onLoad () {
244
+ return new Promise((resolve, reject) => {
245
+ // 添加重试计数器
246
+ let retryCount = 0
247
+ const maxRetries = 5
248
+
249
+ const tryConnect = () => {
250
+ if (ws) {
251
+ resolve()
252
+ return
253
+ }
254
+
255
+ ws = new WebSocket(this.SERVER_ADDR)
256
+
257
+ ws.onopen = (evt) => {
258
+ if (this.connected) {
259
+ resolve()
260
+ }
261
+ this.connected = true
262
+ this.output('已经连接到服务器')
263
+ this.switchCamera(0)
264
+ }
265
+
266
+ ws.onclose = (evt) => {
267
+ if (!this.connected) {
268
+ // 检查重试次数
269
+ if (retryCount < maxRetries) {
270
+ retryCount++
271
+ this.output(`连接失败,正在进行第${retryCount}次重试...`)
272
+ window.location.href = 'FLShell://'
273
+ setTimeout(tryConnect, 3 * 1000)
274
+ } else {
275
+ this.output('连接失败,已达到最大重试次数')
276
+ reject(new Error('连接失败,已达到最大重试次数'))
277
+ }
278
+ } else {
279
+ this.output('已断开服务器连接')
280
+ this.connected = false
281
+ }
282
+ ws = null
283
+ }
284
+
285
+ ws.onerror = (evt) => {
286
+ this.output('高拍仪连接错误')
287
+ reject(new Error('连接错误'))
288
+ }
289
+ ws.onmessage = (evt) => {
290
+ if (evt.data.length === 0) {
291
+ return
292
+ }
293
+ if (typeof evt.data === 'string') {
294
+ const msg = JSON.parse(evt.data)
295
+ console.log('msg1:', msg)
296
+ if (msg.err && msg.err !== 0) {
297
+ this.output('错误 - ' + msg.err + ', ' + msg.msg)
298
+ reject(new Error('错误 - ' + msg.err + ', ' + msg.msg))
299
+ } else if (msg.msg) {
300
+ console.log('msg2:', msg)
301
+ this.output(msg.msg)
302
+ }
303
+ if (msg.user_data) {
304
+ this.callback[msg.user_data](msg)
305
+ if (typeof msg.user_data === 'number') {
306
+ this.callback[msg.user_data] = undefined
307
+ }
308
+ }
309
+ } else {
310
+ const file = new FileReader()
311
+ file.onload = (evt) => {
312
+ if (evt.target.readyState == FileReader.DONE) {
313
+ const data = new Uint8Array(evt.target.result)
314
+ if (data[0] == this.SVR_BIN_MSG.CAP_FRAME) {
315
+ return this.drawImage(data)
316
+ }
317
+ }
318
+ }
319
+ file.readAsArrayBuffer(evt.data)
320
+ }
321
+ }
322
+ const canvas = document.getElementById('cam')
323
+ canvas.onmousedown = (e) => {
324
+ canvas.style.cursor = 'crosshair'
325
+ this.clicked = true
326
+ this.sendMsg(this.CLT_MSG.PRESET_MOUSEDOWN, { origX: e.layerX, origY: e.layerY }, (msg) => {
327
+ if (msg.err !== 0) {
328
+ console.warn('鼠标按下事件出错:', msg.err)
329
+ }
330
+ })
331
+ }
332
+ canvas.onmousemove = (e) => {
333
+ if (!this.clicked) {
334
+ canvas.style.cursor = 'default'
335
+ return
336
+ }
337
+ canvas.style.cursor = 'crosshair'
338
+ this.sendMsg(this.CLT_MSG.PRESET_MOUSEMOVE, { offx: e.layerX, offy: e.layerY }, (msg) => {
339
+ if (msg.err !== 0) {
340
+ console.warn('鼠标移动事件出错:', msg.err)
341
+ }
342
+ })
343
+ }
344
+ onmouseout = canvas.onmouseup = (e) => {
345
+ canvas.style.cursor = 'default'
346
+ if (!this.clicked) {
347
+ return
348
+ }
349
+ this.sendMsg(this.CLT_MSG.PRESET_MOUSEUP, { offx: e.layerX, offy: e.layerY }, (msg) => {
350
+ if (msg.err !== 0) {
351
+ console.warn('鼠标抬起事件出错:', msg.err)
352
+ }
353
+ })
354
+ this.clicked = false
355
+ }
356
+ }
357
+
358
+ tryConnect() // 开始首次连接
359
+ })
360
+ },
361
+ newInstancePost (url, data) {
362
+ // 重新创建是为了 避免axios的拦截器影响写卡读卡请求
363
+ // 请求 如果携带了 Cookie,token到卡服务 会导致请求失败
364
+ // 需要注意的是因为没有增加响应拦截器 所以返回结果的res里面会多一层data
365
+ const instance = axios.create()
366
+ return instance.post(url, data, {
367
+ withCredentials: false,
368
+ headers: {
369
+ 'Content-Type': 'text/plain;charset=UTF-8',
370
+ Accept: '*/*',
371
+ }
372
+ })
373
+ },
374
+ // 打开视频
375
+ switchCamera (data) {
376
+ this.cameraurl = 'http://127.0.0.1:38088/video=stream&camidx=' + data + '&tid=' + Date.parse(new Date())
377
+ },
378
+ // 关闭视频
379
+ async closeVideo () {
380
+ const params = ''
381
+ // const url = this.cameraurl.replace('stream', 'close')
382
+ this.cameraurl = ''
383
+ const msg = await this.newInstancePost('http://127.0.0.1:38088/card=idcard', params)
384
+ if (msg.data.code != '0') {
385
+ document.getElementById('result').innerHTML = msg.data.message
386
+ }
387
+ },
388
+ // 获取设备状态
389
+ async getVideoStatus () {
390
+ document.getElementById('result').innerHTML = ''
391
+ const params = ''
392
+ const url = 'http://127.0.0.1:38088/video=status'
393
+ this.cameraurl = ''
394
+ const msg = await this.newInstancePost(url, params)
395
+ if (msg.data.code != '0') {
396
+ document.getElementById('result').innerHTML = '获取设备状态失败,返回代码 = ' + msg.data.code + ',返回信息 = ' + msg.data.message
397
+ } else {
398
+ document.getElementById('result').innerHTML = '文档摄像头:' + msg.data.video0 +
399
+ ', 人像1:' + msg.data.video1
400
+ }
401
+ },
402
+ openApp () {
403
+ window.location.href = 'cameraServicetis:0' // 启动 CameraService 服务程序
404
+ },
405
+ async capturePhoto () {
406
+ // if (!this.name) {
407
+ // return this.$showMessage('请输入照片名称')
408
+ // }
409
+ // if (!this.useType) {
410
+ // return this.$showMessage('请选择文件使用类型')
411
+ // }
412
+ let camidx = 0
413
+ if (this.cameraurl.indexOf('http://127.0.0.1:38088/video=stream&camidx=0') != -1) {
414
+ camidx = 0
415
+ } else if (this.cameraurl.indexOf('http://127.0.0.1:38088/video=stream&camidx=1') != -1) {
416
+ camidx = 1
417
+ } else {
418
+ this.$message.info('请先打开视频')
419
+ return
420
+ }
421
+ const param = {
422
+ camidx: camidx
423
+ }
424
+ const msg = await this.newInstancePost('http://127.0.0.1:38088/video=grabimage', param)
425
+ if (msg.data.code != '0') {
426
+ this.$message.info(msg.data.message)
427
+ return
428
+ }
429
+ this.previewImage = 'data:image/jpg;base64,' + msg.data.photoBase64
430
+ this.output('base64 长度 : ' + this.previewImage)
431
+ this.$emit('photo-finish', { img: this.previewImage })
432
+ this.name = ''
433
+ // post('http://127.0.0.1:38088/video=grabimage', param)
434
+ },
435
+ // 读身份证
436
+ async startReadCard () {
437
+ const msg = await this.newInstancePost('http://127.0.0.1:38088/card=idcard', {})
438
+ if (msg.data.code != '0') {
439
+ this.$message.info(msg.data.message, 2000)
440
+ return
441
+ } else {
442
+ this.updateIdCardInfo(msg.data.IDCardInfo)
443
+ }
444
+ this.output('读取身份证')
445
+ this.output('开始读卡')
446
+ },
447
+ // 停止读身份证
448
+ stopReadCard () {
449
+ this.sendMsg(this.CLT_MSG.STOP_READ_IDCARD, (msg) => {
450
+ if (msg.err !== 0) {
451
+ return
452
+ }
453
+ this.output('停止读卡')
454
+ })
455
+ },
456
+ // 视频帧绘制函数
457
+ drawImage (data) {
458
+ // 校验视频是否在一定时间内的
459
+ if (!this.checkTimestamp(data[2] * 256 + data[1])) {
460
+ return
461
+ }
462
+ // 视频帧头有时间戳 注意偏移 和 大小端处理
463
+ const width = data[this.base_offset + 1] * 256 + data[this.base_offset]
464
+ const height = data[this.base_offset + 3] * 256 + data[this.base_offset + 2]
465
+
466
+ const cam = document.getElementById('cam')
467
+ const context = cam.getContext('2d')
468
+ if (this.orgdrawwidth != width || this.orgdrawheight != height) {
469
+ this.orgdrawwidth = width
470
+ this.orgdrawheight = height
471
+ }
472
+
473
+ const image = context.createImageData(width, height)
474
+ for (let n = 0; n != height; ++n) {
475
+ for (let m = 0; m != width; ++m) {
476
+ const imageOffset = ((height - n - 1) * width + m) * 4
477
+ const dataOffset = (n * width + m) * 3 + this.baseOffset + 4
478
+ image.data[imageOffset] = data[dataOffset + 2]
479
+ image.data[imageOffset + 1] = data[imageOffset + 1]
480
+ image.data[imageOffset + 2] = data[imageOffset]
481
+ image.data[imageOffset + 3] = 255
482
+ }
483
+ }
484
+ context.putImageData(image, 0, 0)
485
+ },
486
+ checkTimestamp (svrTime) {
487
+ const myDate = new Date()
488
+ let cltTime = myDate.getSeconds() * 1000 + myDate.getMilliseconds()
489
+ if (cltTime < svrTime) {
490
+ cltTime += 60 * 1000
491
+ }
492
+ return cltTime - svrTime < 3000
493
+ },
494
+ sendMsg (proto, msg, cb) {
495
+ if (!ws) {
496
+ return
497
+ }
498
+
499
+ if (typeof msg !== 'object') {
500
+ if (typeof msg === 'function') {
501
+ cb = msg
502
+ msg = {}
503
+ } else {
504
+ msg = {}
505
+ }
506
+ }
507
+
508
+ msg.proto = proto
509
+ if (typeof cb === 'function') {
510
+ this.callback[++this.context] = cb
511
+ msg.user_data = this.context
512
+ }
513
+
514
+ ws.send(JSON.stringify(msg))
515
+ },
516
+ output (content) {
517
+ if (content.length == 0) {
518
+ return
519
+ }
520
+ const console = document.getElementById('Console')
521
+ console.value += content
522
+ console.value += '\r'
523
+ console.scrollTop = console.scrollHeight
524
+ },
525
+ // 显示读到的身份证信息
526
+ updateIdCardInfo (msg) {
527
+ document.getElementById('Name').value = msg.name
528
+ document.getElementById('Sex').value = msg.sex
529
+ document.getElementById('Nation').value = msg.nation
530
+ document.getElementById('Born').value = msg.birthday
531
+ document.getElementById('Address').value = msg.address
532
+ document.getElementById('CardNo').value = msg.cardID
533
+ document.getElementById('Police').value = msg.issueOrgan
534
+ document.getElementById('ActivityLFrom').value = msg.validStart
535
+ document.getElementById('ActivityLTo').value = msg.validEnd
536
+ // document.getElementById('DeviceNo').value = msg.validEnd
537
+ document.getElementById('PhotoBuffer').value = msg.fingerBase64
538
+ document.getElementById('PhotoDisplay').src = 'data:image/jpg;base64,' + msg.photoBase64
539
+ this.IdCardInfo = msg
540
+ },
541
+ confirmIdCard () {
542
+ const param = this.IdCardInfo
543
+ if (this.IdCardInfo) {
544
+ this.$emit('confirm-info', param)
545
+ this.IdCardInfo = {}
546
+ }
547
+ },
548
+ handleOk () {
549
+ this.$emit('confirmPhoto', this.previewImage)
550
+ },
551
+ handleCancel () {
552
+ this.show = false
553
+ }
554
+ },
555
+
556
+ mounted () {
557
+ this.onLoad().then(() => {
558
+ this.$emit('ready')
559
+ }).catch(error => {
560
+ this.$emit('error', error)
561
+ })
562
+ },
563
+
564
+ beforeDestroy () {
565
+ if (ws) {
566
+ ws.close()
567
+ ws = null
568
+ }
569
+ }
570
+ }
571
+ </script>