Polyline.vue 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <script>
  2. import commonMixin from '../base/mixins/common.js'
  3. import bindEvents from '../base/bindEvent.js'
  4. import { createPoint, createIconSequence } from '../base/factory.js'
  5. import { deleteEmptyKey } from '../base/util.js'
  6. export default {
  7. name: 'bm-polyline',
  8. render() { },
  9. mixins: [commonMixin('overlay')],
  10. props: {
  11. path: {
  12. type: Array
  13. },
  14. strokeColor: {
  15. type: String,
  16. default: 'blue'
  17. },
  18. strokeWeight: {
  19. type: Number,
  20. default: 2
  21. },
  22. strokeOpacity: {
  23. type: Number,
  24. default: 0.5
  25. },
  26. strokeStyle: {
  27. type: String,
  28. default: 'solid'
  29. },
  30. massClear: {
  31. type: Boolean,
  32. default: true
  33. },
  34. clicking: {
  35. type: Boolean,
  36. default: true
  37. },
  38. editing: {
  39. type: Boolean,
  40. default: false
  41. },
  42. icons: {
  43. type: Array,
  44. default() {
  45. return []
  46. }
  47. }
  48. },
  49. watch: {
  50. path: {
  51. handler(val, oldVal) {
  52. this.reload()
  53. },
  54. deep: true
  55. },
  56. icons: {
  57. handler(val, oldVal) {
  58. this.reload()
  59. },
  60. deep: true
  61. },
  62. strokeColor(val) {
  63. this.originInstance.setStrokeColor(val)
  64. },
  65. strokeOpacity(val) {
  66. this.originInstance.setStrokeOpacity(val)
  67. },
  68. strokeWeight(val) {
  69. this.originInstance.setStrokeWeight(val)
  70. },
  71. strokeStyle(val) {
  72. this.originInstance.setStrokeStyle(val)
  73. },
  74. editing(val) {
  75. val ? this.originInstance.enableEditing() : this.originInstance.disableEditing()
  76. },
  77. massClear(val) {
  78. val ? this.originInstance.enableMassClear() : this.originInstance.disableMassClear()
  79. },
  80. clicking(val) {
  81. this.reload()
  82. }
  83. },
  84. computed: {
  85. iconSequences() {
  86. const { BMap, icons } = this
  87. return icons.map(item => {
  88. return createIconSequence(BMap, item)
  89. })
  90. }
  91. },
  92. methods: {
  93. load() {
  94. const { BMap, map, path, strokeColor, strokeWeight, strokeOpacity, strokeStyle, editing, massClear, clicking, iconSequences } = this
  95. let polyLineOption = {
  96. strokeColor,
  97. strokeWeight,
  98. strokeOpacity,
  99. strokeStyle,
  100. enableEditing: editing,
  101. enableMassClear: massClear,
  102. enableClicking: clicking,
  103. icons: iconSequences
  104. };
  105. deleteEmptyKey(polyLineOption);
  106. const overlay = new BMap.Polyline(path.map(item => createPoint(BMap, { lng: item.lng, lat: item.lat })), polyLineOption)
  107. this.originInstance = overlay
  108. map.addOverlay(overlay)
  109. bindEvents.call(this, overlay)
  110. }
  111. }
  112. }
  113. </script>