safecheck-client 3.0.33-73 → 3.0.33-74

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 (378) 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/App.vue +33 -31
  90. package/src/Widget.vue +13 -13
  91. package/src/android-bootstrap/fonts/glyphicons-halflings-regular.svg +287 -287
  92. package/src/android-bootstrap/less/.csscomb.json +304 -304
  93. package/src/android-bootstrap/less/.csslintrc +19 -19
  94. package/src/android-bootstrap/less/alerts.less +73 -73
  95. package/src/android-bootstrap/less/badges.less +66 -66
  96. package/src/android-bootstrap/less/bootstrap.less +56 -56
  97. package/src/android-bootstrap/less/breadcrumbs.less +26 -26
  98. package/src/android-bootstrap/less/button-groups.less +247 -247
  99. package/src/android-bootstrap/less/buttons.less +173 -173
  100. package/src/android-bootstrap/less/carousel.less +269 -269
  101. package/src/android-bootstrap/less/close.less +34 -34
  102. package/src/android-bootstrap/less/code.less +69 -69
  103. package/src/android-bootstrap/less/component-animations.less +33 -33
  104. package/src/android-bootstrap/less/dropdowns.less +216 -216
  105. package/src/android-bootstrap/less/forms.less +626 -626
  106. package/src/android-bootstrap/less/glyphicons.less +305 -305
  107. package/src/android-bootstrap/less/grid.less +84 -84
  108. package/src/android-bootstrap/less/input-groups.less +167 -167
  109. package/src/android-bootstrap/less/jumbotron.less +52 -52
  110. package/src/android-bootstrap/less/labels.less +64 -64
  111. package/src/android-bootstrap/less/list-group.less +141 -141
  112. package/src/android-bootstrap/less/media.less +66 -66
  113. package/src/android-bootstrap/less/mixins/alerts.less +14 -14
  114. package/src/android-bootstrap/less/mixins/background-variant.less +9 -9
  115. package/src/android-bootstrap/less/mixins/border-radius.less +18 -18
  116. package/src/android-bootstrap/less/mixins/buttons.less +69 -69
  117. package/src/android-bootstrap/less/mixins/center-block.less +7 -7
  118. package/src/android-bootstrap/less/mixins/clearfix.less +22 -22
  119. package/src/android-bootstrap/less/mixins/forms.less +90 -90
  120. package/src/android-bootstrap/less/mixins/gradients.less +59 -59
  121. package/src/android-bootstrap/less/mixins/grid-framework.less +92 -92
  122. package/src/android-bootstrap/less/mixins/grid.less +122 -122
  123. package/src/android-bootstrap/less/mixins/hide-text.less +21 -21
  124. package/src/android-bootstrap/less/mixins/image.less +33 -33
  125. package/src/android-bootstrap/less/mixins/labels.less +12 -12
  126. package/src/android-bootstrap/less/mixins/list-group.less +30 -30
  127. package/src/android-bootstrap/less/mixins/nav-divider.less +10 -10
  128. package/src/android-bootstrap/less/mixins/nav-vertical-align.less +9 -9
  129. package/src/android-bootstrap/less/mixins/opacity.less +8 -8
  130. package/src/android-bootstrap/less/mixins/pagination.less +24 -24
  131. package/src/android-bootstrap/less/mixins/panels.less +24 -24
  132. package/src/android-bootstrap/less/mixins/progress-bar.less +10 -10
  133. package/src/android-bootstrap/less/mixins/reset-filter.less +8 -8
  134. package/src/android-bootstrap/less/mixins/reset-text.less +18 -18
  135. package/src/android-bootstrap/less/mixins/resize.less +6 -6
  136. package/src/android-bootstrap/less/mixins/responsive-visibility.less +15 -15
  137. package/src/android-bootstrap/less/mixins/size.less +10 -10
  138. package/src/android-bootstrap/less/mixins/tab-focus.less +9 -9
  139. package/src/android-bootstrap/less/mixins/table-row.less +44 -44
  140. package/src/android-bootstrap/less/mixins/text-emphasis.less +9 -9
  141. package/src/android-bootstrap/less/mixins/text-overflow.less +8 -8
  142. package/src/android-bootstrap/less/mixins/vendor-prefixes.less +227 -227
  143. package/src/android-bootstrap/less/mixins.less +40 -40
  144. package/src/android-bootstrap/less/modals.less +151 -151
  145. package/src/android-bootstrap/less/navbar.less +660 -660
  146. package/src/android-bootstrap/less/navs.less +290 -290
  147. package/src/android-bootstrap/less/normalize.less +424 -424
  148. package/src/android-bootstrap/less/pager.less +76 -76
  149. package/src/android-bootstrap/less/pagination.less +89 -89
  150. package/src/android-bootstrap/less/panels.less +274 -274
  151. package/src/android-bootstrap/less/popovers.less +131 -131
  152. package/src/android-bootstrap/less/print.less +101 -101
  153. package/src/android-bootstrap/less/progress-bars.less +87 -87
  154. package/src/android-bootstrap/less/responsive-embed.less +35 -35
  155. package/src/android-bootstrap/less/responsive-utilities.less +194 -194
  156. package/src/android-bootstrap/less/scaffolding.less +161 -161
  157. package/src/android-bootstrap/less/tables.less +262 -262
  158. package/src/android-bootstrap/less/theme.less +291 -291
  159. package/src/android-bootstrap/less/thumbnails.less +36 -36
  160. package/src/android-bootstrap/less/tooltip.less +102 -102
  161. package/src/android-bootstrap/less/type.less +303 -303
  162. package/src/android-bootstrap/less/utilities.less +55 -55
  163. package/src/android-bootstrap/less/variables.less +896 -896
  164. package/src/android-bootstrap/less/wells.less +29 -29
  165. package/src/androidBase.js +177 -177
  166. package/src/androidTest.js +20 -20
  167. package/src/bootstrap/fonts/glyphicons-halflings-regular.svg +287 -287
  168. package/src/bootstrap/less/.csscomb.json +304 -304
  169. package/src/bootstrap/less/.csslintrc +19 -19
  170. package/src/bootstrap/less/alerts.less +73 -73
  171. package/src/bootstrap/less/aofeng/animate.min.css +10 -10
  172. package/src/bootstrap/less/aofeng/standard.less +2121 -2121
  173. package/src/bootstrap/less/aofeng/themeOne/BinaryTemplate.less +686 -686
  174. package/src/bootstrap/less/aofeng/themeOne/loginStyle.less +1586 -1586
  175. package/src/bootstrap/less/aofeng/themeOne/systemStyle.less +2650 -2650
  176. package/src/bootstrap/less/aofeng/themeOne.less +14 -14
  177. package/src/bootstrap/less/aofeng/themeTwo/newStyle1.less +415 -415
  178. package/src/bootstrap/less/aofeng/themeTwo.less +3 -3
  179. package/src/bootstrap/less/badges.less +66 -66
  180. package/src/bootstrap/less/breadcrumbs.less +26 -26
  181. package/src/bootstrap/less/button-groups.less +247 -247
  182. package/src/bootstrap/less/buttons.less +172 -172
  183. package/src/bootstrap/less/carousel.less +269 -269
  184. package/src/bootstrap/less/close.less +34 -34
  185. package/src/bootstrap/less/code.less +69 -69
  186. package/src/bootstrap/less/component-animations.less +33 -33
  187. package/src/bootstrap/less/dropdowns.less +216 -216
  188. package/src/bootstrap/less/forms.less +626 -626
  189. package/src/bootstrap/less/grid.less +84 -84
  190. package/src/bootstrap/less/input-groups.less +167 -167
  191. package/src/bootstrap/less/jumbotron.less +52 -52
  192. package/src/bootstrap/less/labels.less +64 -64
  193. package/src/bootstrap/less/list-group.less +141 -141
  194. package/src/bootstrap/less/manageStyle/manageChile.less +180 -180
  195. package/src/bootstrap/less/manageStyle/manageStyle.less +1102 -1102
  196. package/src/bootstrap/less/manageStyle/safeStyle.less +498 -498
  197. package/src/bootstrap/less/media.less +66 -66
  198. package/src/bootstrap/less/mixins/alerts.less +14 -14
  199. package/src/bootstrap/less/mixins/background-variant.less +9 -9
  200. package/src/bootstrap/less/mixins/border-radius.less +18 -18
  201. package/src/bootstrap/less/mixins/buttons.less +69 -69
  202. package/src/bootstrap/less/mixins/center-block.less +7 -7
  203. package/src/bootstrap/less/mixins/clearfix.less +22 -22
  204. package/src/bootstrap/less/mixins/forms.less +90 -90
  205. package/src/bootstrap/less/mixins/gradients.less +59 -59
  206. package/src/bootstrap/less/mixins/grid-framework.less +92 -92
  207. package/src/bootstrap/less/mixins/grid.less +122 -122
  208. package/src/bootstrap/less/mixins/hide-text.less +21 -21
  209. package/src/bootstrap/less/mixins/image.less +33 -33
  210. package/src/bootstrap/less/mixins/labels.less +12 -12
  211. package/src/bootstrap/less/mixins/list-group.less +30 -30
  212. package/src/bootstrap/less/mixins/nav-divider.less +10 -10
  213. package/src/bootstrap/less/mixins/nav-vertical-align.less +9 -9
  214. package/src/bootstrap/less/mixins/opacity.less +8 -8
  215. package/src/bootstrap/less/mixins/pagination.less +24 -24
  216. package/src/bootstrap/less/mixins/panels.less +24 -24
  217. package/src/bootstrap/less/mixins/progress-bar.less +10 -10
  218. package/src/bootstrap/less/mixins/reset-filter.less +8 -8
  219. package/src/bootstrap/less/mixins/reset-text.less +18 -18
  220. package/src/bootstrap/less/mixins/resize.less +6 -6
  221. package/src/bootstrap/less/mixins/responsive-visibility.less +15 -15
  222. package/src/bootstrap/less/mixins/size.less +10 -10
  223. package/src/bootstrap/less/mixins/tab-focus.less +9 -9
  224. package/src/bootstrap/less/mixins/table-row.less +44 -44
  225. package/src/bootstrap/less/mixins/text-emphasis.less +9 -9
  226. package/src/bootstrap/less/mixins/text-overflow.less +8 -8
  227. package/src/bootstrap/less/mixins/vendor-prefixes.less +227 -227
  228. package/src/bootstrap/less/mixins.less +40 -40
  229. package/src/bootstrap/less/modals.less +151 -151
  230. package/src/bootstrap/less/navbar.less +660 -660
  231. package/src/bootstrap/less/navs.less +285 -285
  232. package/src/bootstrap/less/normalize.less +424 -424
  233. package/src/bootstrap/less/pager.less +76 -76
  234. package/src/bootstrap/less/pagination.less +89 -89
  235. package/src/bootstrap/less/panels.less +275 -275
  236. package/src/bootstrap/less/popovers.less +131 -131
  237. package/src/bootstrap/less/print.less +101 -101
  238. package/src/bootstrap/less/progress-bars.less +87 -87
  239. package/src/bootstrap/less/responsive-embed.less +35 -35
  240. package/src/bootstrap/less/responsive-utilities.less +194 -194
  241. package/src/bootstrap/less/scaffolding.less +161 -161
  242. package/src/bootstrap/less/standard.less +503 -503
  243. package/src/bootstrap/less/systemStyle.less +860 -860
  244. package/src/bootstrap/less/tables.less +262 -262
  245. package/src/bootstrap/less/theme.less +291 -291
  246. package/src/bootstrap/less/themeOne.less +36 -36
  247. package/src/bootstrap/less/themeTwo.less +29 -29
  248. package/src/bootstrap/less/thumbnails.less +36 -36
  249. package/src/bootstrap/less/tooltip.less +102 -102
  250. package/src/bootstrap/less/type.less +303 -303
  251. package/src/bootstrap/less/utilities.less +55 -55
  252. package/src/bootstrap/less/wells.less +29 -29
  253. package/src/components/AloneLoadParams.vue +25 -25
  254. package/src/components/FileUpload.vue +696 -696
  255. package/src/components/Hello.vue +39 -39
  256. package/src/components/LeftTree.vue +27 -27
  257. package/src/components/Main.vue +393 -393
  258. package/src/components/android/AddGas.vue +147 -147
  259. package/src/components/android/AddressList.vue +61 -61
  260. package/src/components/android/AdviseCommit.vue +59 -59
  261. package/src/components/android/AndroidCheckResult.vue +181 -181
  262. package/src/components/android/AttendanceTally.vue +116 -116
  263. package/src/components/android/Blank.vue +10 -10
  264. package/src/components/android/CheckUnplanPage.vue +56 -56
  265. package/src/components/android/Checker.vue +12 -12
  266. package/src/components/android/CheckerAnnual.vue +81 -81
  267. package/src/components/android/CheckerAvarta.vue +82 -82
  268. package/src/components/android/CheckerMonthly.vue +84 -84
  269. package/src/components/android/CurrentCreate.vue +1050 -1050
  270. package/src/components/android/DevicesNoncivil.vue +214 -214
  271. package/src/components/android/EquipmentInspection.vue +348 -348
  272. package/src/components/android/FootprintMap.vue +120 -120
  273. package/src/components/android/HiddentroubleInvestigation.vue +192 -192
  274. package/src/components/android/LcheckUnplan.vue +108 -108
  275. package/src/components/android/MasterMain.vue +77 -77
  276. package/src/components/android/Menu.vue +132 -132
  277. package/src/components/android/NavBottom.vue +157 -157
  278. package/src/components/android/PaperAlarm.vue +85 -85
  279. package/src/components/android/PaperDeviceNoncivil.vue +214 -214
  280. package/src/components/android/PhoneInfoTable.vue +40 -40
  281. package/src/components/android/PlumberAnnual.vue +83 -83
  282. package/src/components/android/PlumberAnnualDetail.vue +65 -65
  283. package/src/components/android/PlumberMonthly.vue +84 -84
  284. package/src/components/android/PostMap.vue +83 -83
  285. package/src/components/android/QueryCheckHistory.vue +122 -122
  286. package/src/components/android/QueryCheckHistoryItem.vue +62 -62
  287. package/src/components/android/RepairMain.vue +60 -60
  288. package/src/components/android/Repairman.vue +12 -12
  289. package/src/components/android/SafecheckOrderV.vue +2803 -2803
  290. package/src/components/android/StationMaster.vue +12 -12
  291. package/src/components/android/wasm/comp.js +33 -33
  292. package/src/components/checkerphonestate/Checker.vue +32 -32
  293. package/src/components/checkerphonestate/CheckerState.vue +97 -97
  294. package/src/components/defects/AddDefectModal.vue +120 -120
  295. package/src/components/defects/AddDevice.vue +95 -95
  296. package/src/components/defects/DefectModal.vue +101 -101
  297. package/src/components/defects/DefectSeting.vue +98 -98
  298. package/src/components/defects/DefectsQuery.vue +190 -190
  299. package/src/components/defects/DevicesAndItem.vue +39 -39
  300. package/src/components/defects/DevicesSeting.vue +106 -106
  301. package/src/components/equipment/BoilerUsage.vue +105 -105
  302. package/src/components/equipment/CookerUsage.vue +105 -105
  303. package/src/components/equipment/DeviceUsage.vue +105 -105
  304. package/src/components/equipment/FurnaceUsage.vue +105 -105
  305. package/src/components/equipment/GasMeterUsage.vue +109 -109
  306. package/src/components/equipment/HeaterUsage.vue +105 -105
  307. package/src/components/gasusage/GasUsage.vue +126 -126
  308. package/src/components/issueplan/IssuePlanMain.vue +23 -23
  309. package/src/components/map/PersonTrack.vue +224 -224
  310. package/src/components/map/douglasPeuckerForAMap.js +88 -88
  311. package/src/components/metterfiles/AddUserfiles.vue +246 -246
  312. package/src/components/metterfiles/MetterFiles.vue +104 -104
  313. package/src/components/notice/NoticeForm.vue +100 -100
  314. package/src/components/notice/NoticeIssue.vue +20 -20
  315. package/src/components/notice/NoticeQuery.vue +76 -76
  316. package/src/components/paper/PicViewer.vue +18 -18
  317. package/src/components/paper/RepairVerify.vue +139 -139
  318. package/src/components/paper/RepairVerifyForm.vue +76 -76
  319. package/src/components/paper/VerifyForm.vue +107 -107
  320. package/src/components/phonestate/DailyTraffic.vue +57 -57
  321. package/src/components/phonestate/LastKnownState.vue +74 -74
  322. package/src/components/phonestate/MonthlyTraffic.vue +66 -66
  323. package/src/components/phonestate/MonthlyTrafficRouter.vue +15 -15
  324. package/src/components/phonestate/PostMap.vue +82 -82
  325. package/src/components/planmanage/PlanManage.vue +834 -834
  326. package/src/components/planmanage/checkPlanList.vue +369 -369
  327. package/src/components/querycheckpaper/PaperItem.vue +59 -59
  328. package/src/components/querycheckpaper/PaperSearch.vue +126 -126
  329. package/src/components/report/HiddenSituation.vue +3 -3
  330. package/src/components/task/RepairAnnual.vue +79 -79
  331. package/src/components/task/RepairAnnualDetail.vue +49 -49
  332. package/src/components/task/RepairMonthly.vue +91 -91
  333. package/src/components/task/TaskAnnual.vue +77 -77
  334. package/src/components/task/TaskAnnualDetail.vue +47 -47
  335. package/src/components/task/TaskMonthly.vue +89 -89
  336. package/src/components/userfile/MeterFile.vue +145 -145
  337. package/src/components/userfile/MeterModify.vue +46 -46
  338. package/src/components/userfile/UserFile.vue +118 -118
  339. package/src/components/userfile/UserfileChange.vue +277 -277
  340. package/src/components/userfileaudit/MeterAuditFile.vue +129 -129
  341. package/src/components/userfileaudit/UserFileaudit.vue +81 -81
  342. package/src/components/userfileaudit/UserfileChangeaudit.vue +239 -239
  343. package/src/expandcss.less +571 -571
  344. package/src/filiale/fugou/android.js +11 -11
  345. package/src/filiale/fugou/pc/DefectMainNew.vue +63 -63
  346. package/src/filiale/fugou/pc/DefectPaperNew.vue +1085 -1081
  347. package/src/filiale/fugou/pc/PaperDefectMain.vue +928 -920
  348. package/src/filiale/fugou/pc/PaperList.vue +911 -903
  349. package/src/filiale/fugou/pc/PlanManage.vue +1061 -1061
  350. package/src/filiale/yangchunboneng/android/CurrentCreate.vue +1154 -1154
  351. package/src/filiale/yangchunboneng/android/PhoneUpUserinfo.vue +1230 -0
  352. package/src/filiale/yangchunboneng/android.js +1 -0
  353. package/src/main.js +32 -33
  354. package/src/plugins/GerJsonConfig.js +59 -59
  355. package/src/plugins/LoadData.js +10 -10
  356. package/src/plugins/LoadParams.js +24 -24
  357. package/src/stores/AppData.js +46 -46
  358. package/src/stores/wxconfig.js +10 -10
  359. package/src/utils/getNowDate.js +33 -33
  360. package/test/SearchList.test.js +14 -14
  361. package/test/e2e/custom-assertions/elementCount.js +26 -26
  362. package/test/e2e/nightwatch.conf.js +40 -40
  363. package/test/e2e/runner.js +30 -30
  364. package/test/e2e/specs/test.js +13 -13
  365. package/test/unit/.eslintrc +5 -5
  366. package/test/unit/TestUtil.js +62 -62
  367. package/test/unit/context.html +20 -20
  368. package/test/unit/index.js +13 -13
  369. package/test/unit/init.js +11 -11
  370. package/test/unit/karma.conf.js +53 -53
  371. package/test/unit/specs/Devices.spec.js +18 -18
  372. package/test/unit/specs/getArrobjconfig.spec.js +104 -104
  373. package/test/unit/specs/getobjconfig.spec.js +37 -37
  374. package/test/unit/specs/phonetest/phonesafecheck.spec.js +23 -23
  375. package/test/unit/specs/safePlanItem.spec.js +30 -30
  376. package/test/unit/specs/safecheck-android.spec.js +7 -7
  377. package/test/unit/specs/safecheck.spec.js +127 -127
  378. 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
+ }