safecheck-client 3.0.33-81 → 3.0.33-82

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 (370) hide show
  1. package/.babelrc +5 -5
  2. package/.editorconfig +9 -9
  3. package/CHANGELOG.md +27 -27
  4. package/android.html +18 -18
  5. package/build/css-loaders.js +34 -34
  6. package/build/dev-android.js +151 -151
  7. package/build/dev-client.js +8 -8
  8. package/build/release.sh +28 -28
  9. package/build/utils.js +71 -71
  10. package/build/webpack.baseandroid.conf.js +83 -83
  11. package/build/webpack.devandroid.conf.js +33 -33
  12. package/build/webpack.example.conf.js +49 -49
  13. package/build/webpack.hanwei.conf.js +57 -57
  14. package/build/webpack.hwbase.conf.js +78 -78
  15. package/build/webpack.prodandroid.conf.js +60 -60
  16. package/build/webpack.test.conf.js +31 -31
  17. package/build.gradle +14 -14
  18. package/config/dev.env.js +6 -6
  19. package/config/index.js +38 -38
  20. package/config/prod.env.js +3 -3
  21. package/config/test.env.js +6 -6
  22. package/docs/AppBase.md +22 -22
  23. package/docs/Busy.md +14 -14
  24. package/docs/Criteria.md +47 -47
  25. package/docs/CriteriaPaged.md +47 -47
  26. package/docs/DataGrid.md +54 -54
  27. package/docs/DataModel.md +22 -22
  28. package/docs/Dynamic.md +42 -42
  29. package/docs/FormPrint.md +18 -18
  30. package/docs/GetParams.md +11 -11
  31. package/docs/GridTree.md +47 -47
  32. package/docs/HttpBusy.md +13 -13
  33. package/docs/HttpStore.md +29 -29
  34. package/docs/MessageBox.md +28 -28
  35. package/docs/PagedList.md +29 -29
  36. package/docs/Pager.md +21 -21
  37. package/docs/PrintFile.md +38 -38
  38. package/docs/Project.md +23 -23
  39. package/docs/Route.md +105 -105
  40. package/docs/SafetyCheck/AdjustPlan.md +13 -13
  41. package/docs/SafetyCheck/CheckerPlan.md +12 -12
  42. package/docs/Task.md +46 -46
  43. package/docs/TreeList.md +28 -28
  44. package/docs/TreeMixin.md +18 -18
  45. package/docs/all.md +10 -10
  46. package/docs/list.md +42 -42
  47. package/docs/partial.md +75 -75
  48. package/docs/selector.md +82 -82
  49. package/docs/tree.md +40 -40
  50. package/docs//345/274/200/345/217/221/346/226/207/346/241/243/Snippets.md +28 -28
  51. package/docs//345/274/200/345/217/221/346/226/207/346/241/243/vue-strap/345/217/230/346/233/264/350/256/260/345/275/225.md +7 -7
  52. package/docs//345/274/200/345/217/221/346/226/207/346/241/243/vue/345/217/230/346/233/264/350/256/260/345/275/225.md +13 -13
  53. package/docs//345/274/200/345/217/221/346/226/207/346/241/243//345/274/200/345/217/221/347/216/257/345/242/203/350/256/276/347/275/256.md +77 -77
  54. package/docs//347/225/214/351/235/242/345/210/266/344/275/234/350/247/204/350/214/203.md +54 -54
  55. package/examples/AddressList/App.vue +13 -13
  56. package/examples/AddressList/index.html +11 -11
  57. package/examples/AddressList/main.js +13 -13
  58. package/examples/ChangeConfig/index.html +17 -17
  59. package/examples/ChangeConfig/main.js +13 -13
  60. package/examples/CheckAdvise/comp.js +9 -9
  61. package/examples/CheckAdvise/index.html +18 -18
  62. package/examples/CheckAdvise/main.js +13 -13
  63. package/examples/CreatePlan/App.vue +13 -13
  64. package/examples/CreatePlan/index.html +11 -11
  65. package/examples/CreatePlan/main.js +13 -13
  66. package/examples/DispatchList/App.vue +10 -10
  67. package/examples/DispatchList/BaseTree.vue +13 -13
  68. package/examples/DispatchList/Init.vue +22 -22
  69. package/examples/DispatchList/Test.vue +20 -20
  70. package/examples/DispatchList/index.html +11 -11
  71. package/examples/DispatchList/main.js +18 -18
  72. package/examples/PhoneSafePlan/comp.js +33 -33
  73. package/examples/PhoneSafePlan/index.html +17 -17
  74. package/examples/PhoneSafePlan/main.js +13 -13
  75. package/examples/SafePlan/main.js +13 -13
  76. package/examples/SafePlan-aode/main.js +13 -13
  77. package/examples/SafePlanItem/index.html +17 -17
  78. package/examples/SafePlanItem/main.js +15 -15
  79. package/examples/Test/index.html +17 -17
  80. package/examples/Test/main.js +13 -13
  81. package/examples/Test//350/216/267/345/217/226/345/217/230/351/207/217 +2 -2
  82. package/examples/UserFiles/index.html +19 -19
  83. package/examples/UserFiles/main.js +13 -13
  84. package/home.html +16 -16
  85. package/oa.iml +8 -8
  86. package/package.json +1 -1
  87. package/publish.bat +7 -7
  88. package/release.bat +5 -5
  89. package/src/Widget.vue +13 -13
  90. package/src/android-bootstrap/fonts/glyphicons-halflings-regular.svg +287 -287
  91. package/src/android-bootstrap/less/.csscomb.json +304 -304
  92. package/src/android-bootstrap/less/.csslintrc +19 -19
  93. package/src/android-bootstrap/less/alerts.less +73 -73
  94. package/src/android-bootstrap/less/badges.less +66 -66
  95. package/src/android-bootstrap/less/bootstrap.less +56 -56
  96. package/src/android-bootstrap/less/breadcrumbs.less +26 -26
  97. package/src/android-bootstrap/less/button-groups.less +247 -247
  98. package/src/android-bootstrap/less/buttons.less +173 -173
  99. package/src/android-bootstrap/less/carousel.less +269 -269
  100. package/src/android-bootstrap/less/close.less +34 -34
  101. package/src/android-bootstrap/less/code.less +69 -69
  102. package/src/android-bootstrap/less/component-animations.less +33 -33
  103. package/src/android-bootstrap/less/dropdowns.less +216 -216
  104. package/src/android-bootstrap/less/forms.less +626 -626
  105. package/src/android-bootstrap/less/glyphicons.less +305 -305
  106. package/src/android-bootstrap/less/grid.less +84 -84
  107. package/src/android-bootstrap/less/input-groups.less +167 -167
  108. package/src/android-bootstrap/less/jumbotron.less +52 -52
  109. package/src/android-bootstrap/less/labels.less +64 -64
  110. package/src/android-bootstrap/less/list-group.less +141 -141
  111. package/src/android-bootstrap/less/media.less +66 -66
  112. package/src/android-bootstrap/less/mixins/alerts.less +14 -14
  113. package/src/android-bootstrap/less/mixins/background-variant.less +9 -9
  114. package/src/android-bootstrap/less/mixins/border-radius.less +18 -18
  115. package/src/android-bootstrap/less/mixins/buttons.less +69 -69
  116. package/src/android-bootstrap/less/mixins/center-block.less +7 -7
  117. package/src/android-bootstrap/less/mixins/clearfix.less +22 -22
  118. package/src/android-bootstrap/less/mixins/forms.less +90 -90
  119. package/src/android-bootstrap/less/mixins/gradients.less +59 -59
  120. package/src/android-bootstrap/less/mixins/grid-framework.less +92 -92
  121. package/src/android-bootstrap/less/mixins/grid.less +122 -122
  122. package/src/android-bootstrap/less/mixins/hide-text.less +21 -21
  123. package/src/android-bootstrap/less/mixins/image.less +33 -33
  124. package/src/android-bootstrap/less/mixins/labels.less +12 -12
  125. package/src/android-bootstrap/less/mixins/list-group.less +30 -30
  126. package/src/android-bootstrap/less/mixins/nav-divider.less +10 -10
  127. package/src/android-bootstrap/less/mixins/nav-vertical-align.less +9 -9
  128. package/src/android-bootstrap/less/mixins/opacity.less +8 -8
  129. package/src/android-bootstrap/less/mixins/pagination.less +24 -24
  130. package/src/android-bootstrap/less/mixins/panels.less +24 -24
  131. package/src/android-bootstrap/less/mixins/progress-bar.less +10 -10
  132. package/src/android-bootstrap/less/mixins/reset-filter.less +8 -8
  133. package/src/android-bootstrap/less/mixins/reset-text.less +18 -18
  134. package/src/android-bootstrap/less/mixins/resize.less +6 -6
  135. package/src/android-bootstrap/less/mixins/responsive-visibility.less +15 -15
  136. package/src/android-bootstrap/less/mixins/size.less +10 -10
  137. package/src/android-bootstrap/less/mixins/tab-focus.less +9 -9
  138. package/src/android-bootstrap/less/mixins/table-row.less +44 -44
  139. package/src/android-bootstrap/less/mixins/text-emphasis.less +9 -9
  140. package/src/android-bootstrap/less/mixins/text-overflow.less +8 -8
  141. package/src/android-bootstrap/less/mixins/vendor-prefixes.less +227 -227
  142. package/src/android-bootstrap/less/mixins.less +40 -40
  143. package/src/android-bootstrap/less/modals.less +151 -151
  144. package/src/android-bootstrap/less/navbar.less +660 -660
  145. package/src/android-bootstrap/less/navs.less +290 -290
  146. package/src/android-bootstrap/less/normalize.less +424 -424
  147. package/src/android-bootstrap/less/pager.less +76 -76
  148. package/src/android-bootstrap/less/pagination.less +89 -89
  149. package/src/android-bootstrap/less/panels.less +274 -274
  150. package/src/android-bootstrap/less/popovers.less +131 -131
  151. package/src/android-bootstrap/less/print.less +101 -101
  152. package/src/android-bootstrap/less/progress-bars.less +87 -87
  153. package/src/android-bootstrap/less/responsive-embed.less +35 -35
  154. package/src/android-bootstrap/less/responsive-utilities.less +194 -194
  155. package/src/android-bootstrap/less/scaffolding.less +161 -161
  156. package/src/android-bootstrap/less/tables.less +262 -262
  157. package/src/android-bootstrap/less/theme.less +291 -291
  158. package/src/android-bootstrap/less/thumbnails.less +36 -36
  159. package/src/android-bootstrap/less/tooltip.less +102 -102
  160. package/src/android-bootstrap/less/type.less +303 -303
  161. package/src/android-bootstrap/less/utilities.less +55 -55
  162. package/src/android-bootstrap/less/variables.less +896 -896
  163. package/src/android-bootstrap/less/wells.less +29 -29
  164. package/src/androidBase.js +177 -177
  165. package/src/androidTest.js +20 -20
  166. package/src/bootstrap/fonts/glyphicons-halflings-regular.svg +287 -287
  167. package/src/bootstrap/less/.csscomb.json +304 -304
  168. package/src/bootstrap/less/.csslintrc +19 -19
  169. package/src/bootstrap/less/alerts.less +73 -73
  170. package/src/bootstrap/less/aofeng/animate.min.css +10 -10
  171. package/src/bootstrap/less/aofeng/standard.less +2121 -2121
  172. package/src/bootstrap/less/aofeng/themeOne/BinaryTemplate.less +686 -686
  173. package/src/bootstrap/less/aofeng/themeOne/loginStyle.less +1586 -1586
  174. package/src/bootstrap/less/aofeng/themeOne/systemStyle.less +2650 -2650
  175. package/src/bootstrap/less/aofeng/themeOne.less +14 -14
  176. package/src/bootstrap/less/aofeng/themeTwo/newStyle1.less +415 -415
  177. package/src/bootstrap/less/aofeng/themeTwo.less +3 -3
  178. package/src/bootstrap/less/badges.less +66 -66
  179. package/src/bootstrap/less/breadcrumbs.less +26 -26
  180. package/src/bootstrap/less/button-groups.less +247 -247
  181. package/src/bootstrap/less/buttons.less +172 -172
  182. package/src/bootstrap/less/carousel.less +269 -269
  183. package/src/bootstrap/less/close.less +34 -34
  184. package/src/bootstrap/less/code.less +69 -69
  185. package/src/bootstrap/less/component-animations.less +33 -33
  186. package/src/bootstrap/less/dropdowns.less +216 -216
  187. package/src/bootstrap/less/forms.less +626 -626
  188. package/src/bootstrap/less/grid.less +84 -84
  189. package/src/bootstrap/less/input-groups.less +167 -167
  190. package/src/bootstrap/less/jumbotron.less +52 -52
  191. package/src/bootstrap/less/labels.less +64 -64
  192. package/src/bootstrap/less/list-group.less +141 -141
  193. package/src/bootstrap/less/manageStyle/manageChile.less +180 -180
  194. package/src/bootstrap/less/manageStyle/manageStyle.less +1102 -1102
  195. package/src/bootstrap/less/manageStyle/safeStyle.less +498 -498
  196. package/src/bootstrap/less/media.less +66 -66
  197. package/src/bootstrap/less/mixins/alerts.less +14 -14
  198. package/src/bootstrap/less/mixins/background-variant.less +9 -9
  199. package/src/bootstrap/less/mixins/border-radius.less +18 -18
  200. package/src/bootstrap/less/mixins/buttons.less +69 -69
  201. package/src/bootstrap/less/mixins/center-block.less +7 -7
  202. package/src/bootstrap/less/mixins/clearfix.less +22 -22
  203. package/src/bootstrap/less/mixins/forms.less +90 -90
  204. package/src/bootstrap/less/mixins/gradients.less +59 -59
  205. package/src/bootstrap/less/mixins/grid-framework.less +92 -92
  206. package/src/bootstrap/less/mixins/grid.less +122 -122
  207. package/src/bootstrap/less/mixins/hide-text.less +21 -21
  208. package/src/bootstrap/less/mixins/image.less +33 -33
  209. package/src/bootstrap/less/mixins/labels.less +12 -12
  210. package/src/bootstrap/less/mixins/list-group.less +30 -30
  211. package/src/bootstrap/less/mixins/nav-divider.less +10 -10
  212. package/src/bootstrap/less/mixins/nav-vertical-align.less +9 -9
  213. package/src/bootstrap/less/mixins/opacity.less +8 -8
  214. package/src/bootstrap/less/mixins/pagination.less +24 -24
  215. package/src/bootstrap/less/mixins/panels.less +24 -24
  216. package/src/bootstrap/less/mixins/progress-bar.less +10 -10
  217. package/src/bootstrap/less/mixins/reset-filter.less +8 -8
  218. package/src/bootstrap/less/mixins/reset-text.less +18 -18
  219. package/src/bootstrap/less/mixins/resize.less +6 -6
  220. package/src/bootstrap/less/mixins/responsive-visibility.less +15 -15
  221. package/src/bootstrap/less/mixins/size.less +10 -10
  222. package/src/bootstrap/less/mixins/tab-focus.less +9 -9
  223. package/src/bootstrap/less/mixins/table-row.less +44 -44
  224. package/src/bootstrap/less/mixins/text-emphasis.less +9 -9
  225. package/src/bootstrap/less/mixins/text-overflow.less +8 -8
  226. package/src/bootstrap/less/mixins/vendor-prefixes.less +227 -227
  227. package/src/bootstrap/less/mixins.less +40 -40
  228. package/src/bootstrap/less/modals.less +151 -151
  229. package/src/bootstrap/less/navbar.less +660 -660
  230. package/src/bootstrap/less/navs.less +285 -285
  231. package/src/bootstrap/less/normalize.less +424 -424
  232. package/src/bootstrap/less/pager.less +76 -76
  233. package/src/bootstrap/less/pagination.less +89 -89
  234. package/src/bootstrap/less/panels.less +275 -275
  235. package/src/bootstrap/less/popovers.less +131 -131
  236. package/src/bootstrap/less/print.less +101 -101
  237. package/src/bootstrap/less/progress-bars.less +87 -87
  238. package/src/bootstrap/less/responsive-embed.less +35 -35
  239. package/src/bootstrap/less/responsive-utilities.less +194 -194
  240. package/src/bootstrap/less/scaffolding.less +161 -161
  241. package/src/bootstrap/less/standard.less +503 -503
  242. package/src/bootstrap/less/systemStyle.less +860 -860
  243. package/src/bootstrap/less/tables.less +262 -262
  244. package/src/bootstrap/less/theme.less +291 -291
  245. package/src/bootstrap/less/themeOne.less +36 -36
  246. package/src/bootstrap/less/themeTwo.less +29 -29
  247. package/src/bootstrap/less/thumbnails.less +36 -36
  248. package/src/bootstrap/less/tooltip.less +102 -102
  249. package/src/bootstrap/less/type.less +303 -303
  250. package/src/bootstrap/less/utilities.less +55 -55
  251. package/src/bootstrap/less/wells.less +29 -29
  252. package/src/components/AloneLoadParams.vue +25 -25
  253. package/src/components/FileUpload.vue +696 -696
  254. package/src/components/Hello.vue +39 -39
  255. package/src/components/LeftTree.vue +27 -27
  256. package/src/components/Main.vue +393 -393
  257. package/src/components/android/AddGas.vue +147 -147
  258. package/src/components/android/AddressList.vue +61 -61
  259. package/src/components/android/AdviseCommit.vue +59 -59
  260. package/src/components/android/AndroidCheckResult.vue +181 -181
  261. package/src/components/android/AttendanceTally.vue +116 -116
  262. package/src/components/android/Blank.vue +10 -10
  263. package/src/components/android/CheckUnplanPage.vue +56 -56
  264. package/src/components/android/Checker.vue +12 -12
  265. package/src/components/android/CheckerAnnual.vue +81 -81
  266. package/src/components/android/CheckerAvarta.vue +82 -82
  267. package/src/components/android/CheckerMonthly.vue +84 -84
  268. package/src/components/android/CurrentCreate.vue +1050 -1050
  269. package/src/components/android/DevicesNoncivil.vue +214 -214
  270. package/src/components/android/EquipmentInspection.vue +348 -348
  271. package/src/components/android/FootprintMap.vue +120 -120
  272. package/src/components/android/HiddentroubleInvestigation.vue +192 -192
  273. package/src/components/android/LcheckUnplan.vue +108 -108
  274. package/src/components/android/MasterMain.vue +77 -77
  275. package/src/components/android/Menu.vue +132 -132
  276. package/src/components/android/NavBottom.vue +157 -157
  277. package/src/components/android/PaperAlarm.vue +85 -85
  278. package/src/components/android/PaperDeviceNoncivil.vue +214 -214
  279. package/src/components/android/PhoneInfoTable.vue +40 -40
  280. package/src/components/android/PlumberAnnual.vue +83 -83
  281. package/src/components/android/PlumberAnnualDetail.vue +65 -65
  282. package/src/components/android/PlumberMonthly.vue +84 -84
  283. package/src/components/android/PostMap.vue +83 -83
  284. package/src/components/android/QueryCheckHistory.vue +122 -122
  285. package/src/components/android/QueryCheckHistoryItem.vue +62 -62
  286. package/src/components/android/RepairMain.vue +60 -60
  287. package/src/components/android/Repairman.vue +12 -12
  288. package/src/components/android/StationMaster.vue +12 -12
  289. package/src/components/android/wasm/comp.js +33 -33
  290. package/src/components/checkerphonestate/Checker.vue +32 -32
  291. package/src/components/checkerphonestate/CheckerState.vue +97 -97
  292. package/src/components/defects/AddDefectModal.vue +120 -120
  293. package/src/components/defects/AddDevice.vue +95 -95
  294. package/src/components/defects/DefectModal.vue +101 -101
  295. package/src/components/defects/DefectSeting.vue +98 -98
  296. package/src/components/defects/DefectsQuery.vue +190 -190
  297. package/src/components/defects/DevicesAndItem.vue +39 -39
  298. package/src/components/defects/DevicesSeting.vue +106 -106
  299. package/src/components/equipment/BoilerUsage.vue +105 -105
  300. package/src/components/equipment/CookerUsage.vue +105 -105
  301. package/src/components/equipment/DeviceUsage.vue +105 -105
  302. package/src/components/equipment/FurnaceUsage.vue +105 -105
  303. package/src/components/equipment/GasMeterUsage.vue +109 -109
  304. package/src/components/equipment/HeaterUsage.vue +105 -105
  305. package/src/components/gasusage/GasUsage.vue +126 -126
  306. package/src/components/issueplan/IssuePlanMain.vue +23 -23
  307. package/src/components/map/PersonTrack.vue +224 -224
  308. package/src/components/map/douglasPeuckerForAMap.js +88 -88
  309. package/src/components/metterfiles/AddUserfiles.vue +246 -246
  310. package/src/components/metterfiles/MetterFiles.vue +104 -104
  311. package/src/components/notice/NoticeForm.vue +100 -100
  312. package/src/components/notice/NoticeIssue.vue +20 -20
  313. package/src/components/notice/NoticeQuery.vue +76 -76
  314. package/src/components/paper/PicViewer.vue +18 -18
  315. package/src/components/paper/RepairVerify.vue +139 -139
  316. package/src/components/paper/RepairVerifyForm.vue +76 -76
  317. package/src/components/paper/VerifyForm.vue +107 -107
  318. package/src/components/phonestate/DailyTraffic.vue +57 -57
  319. package/src/components/phonestate/LastKnownState.vue +74 -74
  320. package/src/components/phonestate/MonthlyTraffic.vue +66 -66
  321. package/src/components/phonestate/MonthlyTrafficRouter.vue +15 -15
  322. package/src/components/phonestate/PostMap.vue +82 -82
  323. package/src/components/planmanage/PlanManage.vue +834 -834
  324. package/src/components/planmanage/checkPlanList.vue +369 -369
  325. package/src/components/querycheckpaper/PaperItem.vue +59 -59
  326. package/src/components/querycheckpaper/PaperSearch.vue +126 -126
  327. package/src/components/task/RepairAnnual.vue +79 -79
  328. package/src/components/task/RepairAnnualDetail.vue +49 -49
  329. package/src/components/task/RepairMonthly.vue +91 -91
  330. package/src/components/task/TaskAnnual.vue +77 -77
  331. package/src/components/task/TaskAnnualDetail.vue +47 -47
  332. package/src/components/task/TaskMonthly.vue +89 -89
  333. package/src/components/userfile/MeterFile.vue +145 -145
  334. package/src/components/userfile/MeterModify.vue +46 -46
  335. package/src/components/userfile/UserFile.vue +118 -118
  336. package/src/components/userfile/UserfileChange.vue +277 -277
  337. package/src/components/userfileaudit/MeterAuditFile.vue +129 -129
  338. package/src/components/userfileaudit/UserFileaudit.vue +81 -81
  339. package/src/components/userfileaudit/UserfileChangeaudit.vue +239 -239
  340. package/src/expandcss.less +571 -571
  341. package/src/filiale/yangchunboneng/android/CurrentCreate.vue +1154 -1154
  342. package/src/filiale/yangchunboneng/android/SafecheckOrderV.vue +2832 -2832
  343. package/src/filiale/yangchunboneng/pc/CheckSearchUser.vue +1168 -1168
  344. package/src/filiale/zhongsheng/android/CurrentCreate.vue +999 -994
  345. package/src/main.js +33 -33
  346. package/src/plugins/GerJsonConfig.js +59 -59
  347. package/src/plugins/LoadData.js +10 -10
  348. package/src/plugins/LoadParams.js +24 -24
  349. package/src/stores/AppData.js +46 -46
  350. package/src/stores/wxconfig.js +10 -10
  351. package/src/utils/getNowDate.js +33 -33
  352. package/test/SearchList.test.js +14 -14
  353. package/test/e2e/custom-assertions/elementCount.js +26 -26
  354. package/test/e2e/nightwatch.conf.js +40 -40
  355. package/test/e2e/runner.js +30 -30
  356. package/test/e2e/specs/test.js +13 -13
  357. package/test/unit/.eslintrc +5 -5
  358. package/test/unit/TestUtil.js +62 -62
  359. package/test/unit/context.html +20 -20
  360. package/test/unit/index.js +13 -13
  361. package/test/unit/init.js +11 -11
  362. package/test/unit/karma.conf.js +53 -53
  363. package/test/unit/specs/Devices.spec.js +18 -18
  364. package/test/unit/specs/getArrobjconfig.spec.js +104 -104
  365. package/test/unit/specs/getobjconfig.spec.js +37 -37
  366. package/test/unit/specs/phonetest/phonesafecheck.spec.js +23 -23
  367. package/test/unit/specs/safePlanItem.spec.js +30 -30
  368. package/test/unit/specs/safecheck-android.spec.js +7 -7
  369. package/test/unit/specs/safecheck.spec.js +127 -127
  370. package/yarn-error.log +140 -140
@@ -1,224 +1,224 @@
1
- <template>
2
- <div class="basic-main" style="height: 100%">
3
- <div class="row">
4
- <div class="col-sm-9 amap-main">
5
- <div class="form-horizontal select-overspread container-fluid auto">
6
- <div class="row">
7
- <div class="col-sm-3 form-input-group" style="width: 20%">
8
- <label class="control-label">公&emsp;&emsp;司</label>
9
- <right-tree-safe @re-res="getRes" >
10
- </right-tree-safe>
11
- </div>
12
- <div class="col-sm-3 form-input-group" style="width: 20%">
13
- <label class="control-label" >轨迹时间</label>
14
- <datepicker placeholder="轨迹时间"
15
- :value.sync="searchCondition.date"
16
- v-model="searchCondition.date"
17
- :format="'yyyy-MM-dd'">
18
- </datepicker>
19
- </div>
20
- <div class="col-sm-3 form-input-group" style="width: 20%">
21
- <label class="control-label">安检员</label>
22
- <v-select :value.sync="searchCondition.userId" v-model='searchCondition.userId'
23
- :value-single="true" clear-button search
24
- :options='searchUserEndOption' placeholder='请选择'
25
- ></v-select>
26
- </div>
27
- <div class="col-sm-3 form-input-group" style="width: 20%">
28
- <label class="control-label">班组</label>
29
- <v-select :value.sync="searchCondition.departmentId" v-model='searchCondition.departmentId'
30
- :value-single="true" clear-button search
31
- :options='searchDepartmentOption' placeholder='请选择'
32
- ></v-select>
33
- </div>
34
- <div class="col-sm-3 form-input-group" style="width: 20%;float:right;">
35
- <button class="btn btn-primary" @click="search">查询</button>
36
- </div>
37
- </div>
38
- </div>
39
- <a-map-trajectory-new :outerlinedata.sync="outerlinedata" :pathnavigatorstyle="pathnavigatorstyle" :dom="dom"></a-map-trajectory-new>
40
- </div>
41
- <div class="col-sm-3">
42
- <div id="zzz" class="basic-main" style="flex:1;margin-left: 0px;overflow: hidden">
43
- <div class="flex">
44
- <div class="panel panel-info" style="flex: 4;margin-top:0px;height: 50%">
45
- <div class="panel-heading" style="height: auto">
46
- <h3 class="panel-title">轨迹记录</h3>
47
- </div>
48
- <div class="panel-body" style="overflow: scroll; height: 700px">
49
- <accordion :one-at-a-time="true" v-if="reponData.length>0">
50
- <template v-for="row in reponData">
51
- <panel is-open="false" type="primary" @click="chengeLocation(row)">
52
- <strong slot="header">人员姓名:{{row.name}}</strong>
53
- <!-- <div v-for="(idx,item) in row.result" @click="chengeLocation(item)" :class="{'alert alert-info':idx%2===0,'alert alert-success':idx%2!==0}">-->
54
- <!-- 轨迹时间段:{{item.f_start_date}} ~ {{item.f_end_date}}-->
55
- <!-- </div>-->
56
- </panel>
57
- </template>
58
- </accordion>
59
- <h4 class="panel-title" v-else>暂无相关数据</h4>
60
- </div>
61
- </div>
62
- </div>
63
- </div>
64
- </div>
65
- </div>
66
-
67
- </div>
68
- </template>
69
-
70
- <script>
71
- import * as Util from '../Util'
72
- import {HttpResetClass} from 'vue-client'
73
- import { douglasPeuckerForAMap } from './douglasPeuckerForAMap'
74
-
75
- export default {
76
- title: "安检员轨迹展示",
77
- data() {
78
- return {
79
- showTaskPoints: [],
80
- taskModel: {},
81
- // 当前分公司下所有的用户id
82
- toUserIds: '',
83
- // 当前公司的所有安检员
84
- searchUserEndOption: [],
85
- searchDepartmentOption: [],
86
- // 请求到的结果集合
87
- reponData: [],
88
- // 点集
89
- outerlinedata: [],
90
- pathnavigatorstyle: {
91
- // 图标宽度
92
- width: 16,
93
- // 图标高度
94
- height: 32,
95
- // 图标地址(外链地址或者Base64)
96
- iconBase64: 'https://webapi.amap.com/ui/1.1/ui/misc/PathSimplifier/examples/imgs/car.png'
97
- },
98
- // 分公司ids
99
- f_filialeids: '',
100
- path: [],
101
- aMap: null,
102
- map: null,
103
- filialeOptions: [],
104
- userid: null,
105
- dom: 'amapIdLOCUS' + Math.round(Math.random() * 10) + Math.round(Math.random() * 10),
106
- rootSubmenuKeys: ['1', '2'],
107
- openKeys: ['1'],
108
- searchCondition: {
109
- condition: '1 = 1',
110
- orderTime: 'ps.f_realtime asc',
111
- date: '',
112
- userId: undefined,
113
- departmentId: undefined
114
- }
115
- }
116
- },
117
- methods: {
118
- chengeLocation(row) {
119
- const points = douglasPeuckerForAMap(row.points, 2, 'tm')
120
- this.outerlinedata = [{ path: points, speed: Math.ceil(points.length / 2), name: `${this.searchCondition.date}的轨迹` }]
121
- },
122
- search() {
123
- var condition = '1 = 1'
124
- if (!this.f_filialeids) {
125
- return this.$showMessage('请选择需要查询的分公司')
126
- }
127
- if (!this.searchCondition.date) {
128
- return this.$showMessage('请选择需要查看的轨迹时间')
129
- }
130
- // if (!this.searchCondition.userId[0]) {
131
- // return this.$showMessage('请选择需要查看的轨迹所属人员')
132
- // }
133
-
134
- if (typeof this.searchCondition.date !== 'string') {
135
- this.searchCondition.date = this.searchCondition.date.format('YYYY-MM-DD')
136
- }
137
- condition += " and ps.f_realtime >= '" + this.searchCondition.date + " 00:00:00' and ps.f_realtime <= '" + this.searchCondition.date + " 23:59:59'"
138
- if(this.searchCondition.userId){
139
- condition += ` and ps.f_user_id = '${this.searchCondition.userId}'`
140
- }
141
- let condition2 = '1 = 1'
142
- if(this.searchCondition.departmentId){
143
- condition2 += ` and d.id = '${this.searchCondition.departmentId}'`
144
- }
145
- this.searchCondition.condition = condition
146
- this.$resetpost('rs/logic/getPhoneState', { condition: this.searchCondition.condition, condition2, orderTime: this.searchCondition.orderTime }, {resolveMsg: "轨迹记录查询成功", rejectMsg: "轨迹记录查询失败"}).then((response)=>{
147
- if (response.data.state === 'success') {
148
- this.reponData = response.data.result
149
- // const points = douglasPeuckerForAMap(response.data.result, 2, 'tm')
150
- // this.outerlinedata = [{ path: points, speed: Math.ceil(points.length / 2), name: `${this.searchCondition.date}的轨迹` }]
151
- } else {
152
- this.$showMessage("该用户当日使用app时间较短或行程较少,不足够生成轨迹")
153
- }
154
- })
155
- },
156
- getRes(obj){
157
- // this.model.f_filialeids = this.$login.convertToIn(obj.resids);
158
- if (obj.res != undefined && obj.res.length > 0 && obj.res[0] != undefined) {
159
- this.getNewData(obj.res[0])
160
- }
161
- this.f_filialeids = this.$login.convertToIn(obj.resids);
162
- },
163
- //获取定位人员类表
164
- async getNewData(organization){
165
- // let organization = '公司名称'
166
- // let userRolestr = '需要定位人员'
167
- let userRolestr = '安检员'
168
- let res =await new HttpResetClass().load('POST', '/rs/search', {
169
- // source: 'this.getParentByType($department$).getAllChildrens().where(row.getAttributes().get($rolestr$).indexOf($需要定位人员$) != -1))',
170
- source: "this.getParentByName($"+organization+"$).getAllChildrens().where(row.getAttributes().get($resourcetype$)==$user$).where(row.getAttributes().get($rolestr$)!=null).where(row.getAttributes().get($rolestr$).indexOf($"+userRolestr+"$)!=-1)",
171
- userid: this.$login.f.id
172
- }, {resolveMsg: null, rejectMsg: null})
173
- let dataEnd = [{label:'全部',value:''}]
174
- let idsEnd = []
175
- res.data.forEach(res=>{
176
- let h=true
177
- dataEnd.forEach(per=>{
178
- if(res.id==per.value){
179
- h=false
180
- }
181
- })
182
- if(h){
183
- dataEnd.push({label:res.name,value:res.id})
184
- idsEnd.push(res.id)
185
- }
186
- })
187
- this.toUserIds = this.$login.convertToIn(idsEnd); //所有的员工ID
188
- this.searchUserEndOption = dataEnd
189
-
190
- let resp = await new HttpResetClass().load('POST', `/rs/sql/singleTable`, {
191
- data: {
192
- tablename: 't_department',
193
- condition: `parentid = '${this.$login.f.orgid}' and f_dep_type = '部门'`,
194
- }
195
- }, {resolveMsg: null, rejectMsg: null})
196
- //tag)
197
- const departments = [{label: '全部', value: ''}]
198
- for (const item of resp.data) {
199
- departments.push({
200
- label: item.name,
201
- value: item.id
202
- })
203
- }
204
- this.searchDepartmentOption = departments
205
- },
206
- toStandardDateString () {
207
- const dt = new Date()
208
- const month = dt.getMonth() + 1
209
- const date = dt.getDate()
210
- return dt.getFullYear() + '-' + (month < 10 ? '0' + month : month) + '-' + (date < 10 ? '0' + date : date)
211
- }
212
- },
213
- ready(){
214
- this.searchCondition.date = this.toStandardDateString()
215
- }
216
- }
217
- </script>
218
-
219
- <style lang="less" scoped>
220
- .amap-main {
221
- height: 90%;
222
- padding-right:10px;
223
- }
224
- </style>
1
+ <template>
2
+ <div class="basic-main" style="height: 100%">
3
+ <div class="row">
4
+ <div class="col-sm-9 amap-main">
5
+ <div class="form-horizontal select-overspread container-fluid auto">
6
+ <div class="row">
7
+ <div class="col-sm-3 form-input-group" style="width: 20%">
8
+ <label class="control-label">公&emsp;&emsp;司</label>
9
+ <right-tree-safe @re-res="getRes" >
10
+ </right-tree-safe>
11
+ </div>
12
+ <div class="col-sm-3 form-input-group" style="width: 20%">
13
+ <label class="control-label" >轨迹时间</label>
14
+ <datepicker placeholder="轨迹时间"
15
+ :value.sync="searchCondition.date"
16
+ v-model="searchCondition.date"
17
+ :format="'yyyy-MM-dd'">
18
+ </datepicker>
19
+ </div>
20
+ <div class="col-sm-3 form-input-group" style="width: 20%">
21
+ <label class="control-label">安检员</label>
22
+ <v-select :value.sync="searchCondition.userId" v-model='searchCondition.userId'
23
+ :value-single="true" clear-button search
24
+ :options='searchUserEndOption' placeholder='请选择'
25
+ ></v-select>
26
+ </div>
27
+ <div class="col-sm-3 form-input-group" style="width: 20%">
28
+ <label class="control-label">班组</label>
29
+ <v-select :value.sync="searchCondition.departmentId" v-model='searchCondition.departmentId'
30
+ :value-single="true" clear-button search
31
+ :options='searchDepartmentOption' placeholder='请选择'
32
+ ></v-select>
33
+ </div>
34
+ <div class="col-sm-3 form-input-group" style="width: 20%;float:right;">
35
+ <button class="btn btn-primary" @click="search">查询</button>
36
+ </div>
37
+ </div>
38
+ </div>
39
+ <a-map-trajectory-new :outerlinedata.sync="outerlinedata" :pathnavigatorstyle="pathnavigatorstyle" :dom="dom"></a-map-trajectory-new>
40
+ </div>
41
+ <div class="col-sm-3">
42
+ <div id="zzz" class="basic-main" style="flex:1;margin-left: 0px;overflow: hidden">
43
+ <div class="flex">
44
+ <div class="panel panel-info" style="flex: 4;margin-top:0px;height: 50%">
45
+ <div class="panel-heading" style="height: auto">
46
+ <h3 class="panel-title">轨迹记录</h3>
47
+ </div>
48
+ <div class="panel-body" style="overflow: scroll; height: 700px">
49
+ <accordion :one-at-a-time="true" v-if="reponData.length>0">
50
+ <template v-for="row in reponData">
51
+ <panel is-open="false" type="primary" @click="chengeLocation(row)">
52
+ <strong slot="header">人员姓名:{{row.name}}</strong>
53
+ <!-- <div v-for="(idx,item) in row.result" @click="chengeLocation(item)" :class="{'alert alert-info':idx%2===0,'alert alert-success':idx%2!==0}">-->
54
+ <!-- 轨迹时间段:{{item.f_start_date}} ~ {{item.f_end_date}}-->
55
+ <!-- </div>-->
56
+ </panel>
57
+ </template>
58
+ </accordion>
59
+ <h4 class="panel-title" v-else>暂无相关数据</h4>
60
+ </div>
61
+ </div>
62
+ </div>
63
+ </div>
64
+ </div>
65
+ </div>
66
+
67
+ </div>
68
+ </template>
69
+
70
+ <script>
71
+ import * as Util from '../Util'
72
+ import {HttpResetClass} from 'vue-client'
73
+ import { douglasPeuckerForAMap } from './douglasPeuckerForAMap'
74
+
75
+ export default {
76
+ title: "安检员轨迹展示",
77
+ data() {
78
+ return {
79
+ showTaskPoints: [],
80
+ taskModel: {},
81
+ // 当前分公司下所有的用户id
82
+ toUserIds: '',
83
+ // 当前公司的所有安检员
84
+ searchUserEndOption: [],
85
+ searchDepartmentOption: [],
86
+ // 请求到的结果集合
87
+ reponData: [],
88
+ // 点集
89
+ outerlinedata: [],
90
+ pathnavigatorstyle: {
91
+ // 图标宽度
92
+ width: 16,
93
+ // 图标高度
94
+ height: 32,
95
+ // 图标地址(外链地址或者Base64)
96
+ iconBase64: 'https://webapi.amap.com/ui/1.1/ui/misc/PathSimplifier/examples/imgs/car.png'
97
+ },
98
+ // 分公司ids
99
+ f_filialeids: '',
100
+ path: [],
101
+ aMap: null,
102
+ map: null,
103
+ filialeOptions: [],
104
+ userid: null,
105
+ dom: 'amapIdLOCUS' + Math.round(Math.random() * 10) + Math.round(Math.random() * 10),
106
+ rootSubmenuKeys: ['1', '2'],
107
+ openKeys: ['1'],
108
+ searchCondition: {
109
+ condition: '1 = 1',
110
+ orderTime: 'ps.f_realtime asc',
111
+ date: '',
112
+ userId: undefined,
113
+ departmentId: undefined
114
+ }
115
+ }
116
+ },
117
+ methods: {
118
+ chengeLocation(row) {
119
+ const points = douglasPeuckerForAMap(row.points, 2, 'tm')
120
+ this.outerlinedata = [{ path: points, speed: Math.ceil(points.length / 2), name: `${this.searchCondition.date}的轨迹` }]
121
+ },
122
+ search() {
123
+ var condition = '1 = 1'
124
+ if (!this.f_filialeids) {
125
+ return this.$showMessage('请选择需要查询的分公司')
126
+ }
127
+ if (!this.searchCondition.date) {
128
+ return this.$showMessage('请选择需要查看的轨迹时间')
129
+ }
130
+ // if (!this.searchCondition.userId[0]) {
131
+ // return this.$showMessage('请选择需要查看的轨迹所属人员')
132
+ // }
133
+
134
+ if (typeof this.searchCondition.date !== 'string') {
135
+ this.searchCondition.date = this.searchCondition.date.format('YYYY-MM-DD')
136
+ }
137
+ condition += " and ps.f_realtime >= '" + this.searchCondition.date + " 00:00:00' and ps.f_realtime <= '" + this.searchCondition.date + " 23:59:59'"
138
+ if(this.searchCondition.userId){
139
+ condition += ` and ps.f_user_id = '${this.searchCondition.userId}'`
140
+ }
141
+ let condition2 = '1 = 1'
142
+ if(this.searchCondition.departmentId){
143
+ condition2 += ` and d.id = '${this.searchCondition.departmentId}'`
144
+ }
145
+ this.searchCondition.condition = condition
146
+ this.$resetpost('rs/logic/getPhoneState', { condition: this.searchCondition.condition, condition2, orderTime: this.searchCondition.orderTime }, {resolveMsg: "轨迹记录查询成功", rejectMsg: "轨迹记录查询失败"}).then((response)=>{
147
+ if (response.data.state === 'success') {
148
+ this.reponData = response.data.result
149
+ // const points = douglasPeuckerForAMap(response.data.result, 2, 'tm')
150
+ // this.outerlinedata = [{ path: points, speed: Math.ceil(points.length / 2), name: `${this.searchCondition.date}的轨迹` }]
151
+ } else {
152
+ this.$showMessage("该用户当日使用app时间较短或行程较少,不足够生成轨迹")
153
+ }
154
+ })
155
+ },
156
+ getRes(obj){
157
+ // this.model.f_filialeids = this.$login.convertToIn(obj.resids);
158
+ if (obj.res != undefined && obj.res.length > 0 && obj.res[0] != undefined) {
159
+ this.getNewData(obj.res[0])
160
+ }
161
+ this.f_filialeids = this.$login.convertToIn(obj.resids);
162
+ },
163
+ //获取定位人员类表
164
+ async getNewData(organization){
165
+ // let organization = '公司名称'
166
+ // let userRolestr = '需要定位人员'
167
+ let userRolestr = '安检员'
168
+ let res =await new HttpResetClass().load('POST', '/rs/search', {
169
+ // source: 'this.getParentByType($department$).getAllChildrens().where(row.getAttributes().get($rolestr$).indexOf($需要定位人员$) != -1))',
170
+ source: "this.getParentByName($"+organization+"$).getAllChildrens().where(row.getAttributes().get($resourcetype$)==$user$).where(row.getAttributes().get($rolestr$)!=null).where(row.getAttributes().get($rolestr$).indexOf($"+userRolestr+"$)!=-1)",
171
+ userid: this.$login.f.id
172
+ }, {resolveMsg: null, rejectMsg: null})
173
+ let dataEnd = [{label:'全部',value:''}]
174
+ let idsEnd = []
175
+ res.data.forEach(res=>{
176
+ let h=true
177
+ dataEnd.forEach(per=>{
178
+ if(res.id==per.value){
179
+ h=false
180
+ }
181
+ })
182
+ if(h){
183
+ dataEnd.push({label:res.name,value:res.id})
184
+ idsEnd.push(res.id)
185
+ }
186
+ })
187
+ this.toUserIds = this.$login.convertToIn(idsEnd); //所有的员工ID
188
+ this.searchUserEndOption = dataEnd
189
+
190
+ let resp = await new HttpResetClass().load('POST', `/rs/sql/singleTable`, {
191
+ data: {
192
+ tablename: 't_department',
193
+ condition: `parentid = '${this.$login.f.orgid}' and f_dep_type = '部门'`,
194
+ }
195
+ }, {resolveMsg: null, rejectMsg: null})
196
+ //tag)
197
+ const departments = [{label: '全部', value: ''}]
198
+ for (const item of resp.data) {
199
+ departments.push({
200
+ label: item.name,
201
+ value: item.id
202
+ })
203
+ }
204
+ this.searchDepartmentOption = departments
205
+ },
206
+ toStandardDateString () {
207
+ const dt = new Date()
208
+ const month = dt.getMonth() + 1
209
+ const date = dt.getDate()
210
+ return dt.getFullYear() + '-' + (month < 10 ? '0' + month : month) + '-' + (date < 10 ? '0' + date : date)
211
+ }
212
+ },
213
+ ready(){
214
+ this.searchCondition.date = this.toStandardDateString()
215
+ }
216
+ }
217
+ </script>
218
+
219
+ <style lang="less" scoped>
220
+ .amap-main {
221
+ height: 90%;
222
+ padding-right:10px;
223
+ }
224
+ </style>
@@ -1,88 +1,88 @@
1
- function calculationDistance (point1, point2) {
2
- const lat1 = point1[1]
3
- const lat2 = point2[1]
4
- const lng1 = point1[0]
5
- const lng2 = point2[0]
6
- const radLat1 = lat1 * Math.PI / 180.0
7
- const radLat2 = lat2 * Math.PI / 180.0
8
- const a = radLat1 - radLat2
9
- const b = (lng1 * Math.PI / 180.0) - (lng2 * Math.PI / 180.0)
10
- const s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)))
11
- return s * 6370996.81
12
- }
13
-
14
- function distToSegment (start, end, center) {
15
- const a = Math.abs(calculationDistance(start, end))
16
- const b = Math.abs(calculationDistance(start, center))
17
- const c = Math.abs(calculationDistance(end, center))
18
- const p = (a + b + c) / 2.0
19
- const s = Math.sqrt(Math.abs(p * (p - a) * (p - b) * (p - c)))
20
- return s * 2.0 / a
21
- }
22
-
23
- function compressLine (coordinate, result, start, end, dMax) {
24
- if (start < end) {
25
- let maxDist = 0
26
- let currentIndex = 0
27
- const startPoint = coordinate[start]
28
- const endPoint = coordinate[end]
29
- for (let i = start + 1; i < end; i++) {
30
- const currentDist = distToSegment(startPoint, endPoint, coordinate[i])
31
- if (currentDist > maxDist) {
32
- maxDist = currentDist
33
- currentIndex = i
34
- }
35
- }
36
- if (maxDist >= dMax) {
37
- // 将当前点加入到过滤数组中
38
- result.push(coordinate[currentIndex])
39
- // 将原来的线段以当前点为中心拆成两段,分别进行递归处理
40
- compressLine(coordinate, result, start, currentIndex, dMax)
41
- compressLine(coordinate, result, currentIndex, end, dMax)
42
- }
43
- }
44
- return result
45
- }
46
-
47
- // 调用此方法
48
- // 第一个参数为GPS点位数组,格式为[[x:lng,y:lat,dateKey:xxx],[x:lng,y:lat,dateKey:xxx],[x:lng,y:lat,dateKey:xxx]...]
49
- // 第二个参数为误差,大于多少m的误差就保留
50
- // 第三个参数为时间的key
51
- export function douglasPeuckerForAMap (originalArr, dMax, dateKey) {
52
- const coordinate = []
53
-
54
- for (let index = 0; index < originalArr.length; index++) {
55
- const element = originalArr[index]
56
- const x = Number(element.x)
57
- const y = Number(element.y)
58
- const tempArr = [x, y]
59
- coordinate.push(tempArr)
60
- }
61
-
62
- if (!coordinate || !(coordinate.length > 2)) {
63
- return null
64
- }
65
- coordinate.forEach((item, index) => {
66
- item.key = index
67
- })
68
-
69
- const result = compressLine(coordinate, [], 0, coordinate.length - 1, dMax)
70
-
71
- result.push(coordinate[0])
72
- result.push(coordinate[coordinate.length - 1])
73
- const resultLatLng = result.sort((a, b) => {
74
- if (a.key < b.key) {
75
- return -1
76
- } else if (a.key > b.key) {
77
- return 1
78
- }
79
- return 0
80
- })
81
-
82
- resultLatLng.forEach((item) => {
83
- const originalDate = originalArr[item.key][dateKey]
84
- item.push(originalDate)
85
- })
86
-
87
- return resultLatLng
88
- }
1
+ function calculationDistance (point1, point2) {
2
+ const lat1 = point1[1]
3
+ const lat2 = point2[1]
4
+ const lng1 = point1[0]
5
+ const lng2 = point2[0]
6
+ const radLat1 = lat1 * Math.PI / 180.0
7
+ const radLat2 = lat2 * Math.PI / 180.0
8
+ const a = radLat1 - radLat2
9
+ const b = (lng1 * Math.PI / 180.0) - (lng2 * Math.PI / 180.0)
10
+ const s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)))
11
+ return s * 6370996.81
12
+ }
13
+
14
+ function distToSegment (start, end, center) {
15
+ const a = Math.abs(calculationDistance(start, end))
16
+ const b = Math.abs(calculationDistance(start, center))
17
+ const c = Math.abs(calculationDistance(end, center))
18
+ const p = (a + b + c) / 2.0
19
+ const s = Math.sqrt(Math.abs(p * (p - a) * (p - b) * (p - c)))
20
+ return s * 2.0 / a
21
+ }
22
+
23
+ function compressLine (coordinate, result, start, end, dMax) {
24
+ if (start < end) {
25
+ let maxDist = 0
26
+ let currentIndex = 0
27
+ const startPoint = coordinate[start]
28
+ const endPoint = coordinate[end]
29
+ for (let i = start + 1; i < end; i++) {
30
+ const currentDist = distToSegment(startPoint, endPoint, coordinate[i])
31
+ if (currentDist > maxDist) {
32
+ maxDist = currentDist
33
+ currentIndex = i
34
+ }
35
+ }
36
+ if (maxDist >= dMax) {
37
+ // 将当前点加入到过滤数组中
38
+ result.push(coordinate[currentIndex])
39
+ // 将原来的线段以当前点为中心拆成两段,分别进行递归处理
40
+ compressLine(coordinate, result, start, currentIndex, dMax)
41
+ compressLine(coordinate, result, currentIndex, end, dMax)
42
+ }
43
+ }
44
+ return result
45
+ }
46
+
47
+ // 调用此方法
48
+ // 第一个参数为GPS点位数组,格式为[[x:lng,y:lat,dateKey:xxx],[x:lng,y:lat,dateKey:xxx],[x:lng,y:lat,dateKey:xxx]...]
49
+ // 第二个参数为误差,大于多少m的误差就保留
50
+ // 第三个参数为时间的key
51
+ export function douglasPeuckerForAMap (originalArr, dMax, dateKey) {
52
+ const coordinate = []
53
+
54
+ for (let index = 0; index < originalArr.length; index++) {
55
+ const element = originalArr[index]
56
+ const x = Number(element.x)
57
+ const y = Number(element.y)
58
+ const tempArr = [x, y]
59
+ coordinate.push(tempArr)
60
+ }
61
+
62
+ if (!coordinate || !(coordinate.length > 2)) {
63
+ return null
64
+ }
65
+ coordinate.forEach((item, index) => {
66
+ item.key = index
67
+ })
68
+
69
+ const result = compressLine(coordinate, [], 0, coordinate.length - 1, dMax)
70
+
71
+ result.push(coordinate[0])
72
+ result.push(coordinate[coordinate.length - 1])
73
+ const resultLatLng = result.sort((a, b) => {
74
+ if (a.key < b.key) {
75
+ return -1
76
+ } else if (a.key > b.key) {
77
+ return 1
78
+ }
79
+ return 0
80
+ })
81
+
82
+ resultLatLng.forEach((item) => {
83
+ const originalDate = originalArr[item.key][dateKey]
84
+ item.push(originalDate)
85
+ })
86
+
87
+ return resultLatLng
88
+ }