Transit.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <template>
  2. <div v-show="panel">
  3. <slot></slot>
  4. </div>
  5. </template>
  6. <script>
  7. import {createPoint} from '../base/factory.js'
  8. import {isPoint, getPosition} from '../base/util.js'
  9. import commonMixin from '../base/mixins/common.js'
  10. export default {
  11. name: 'bm-transit',
  12. mixins: [commonMixin('search')],
  13. props: {
  14. location: {
  15. type: [Object, String]
  16. },
  17. start: {
  18. type: [Object, String]
  19. },
  20. end: {
  21. type: [Object, String]
  22. },
  23. panel: {
  24. type: Boolean,
  25. default: true
  26. },
  27. policy: {
  28. type: String
  29. },
  30. pageCapacity: {
  31. type: Number
  32. },
  33. autoViewport: {
  34. type: Boolean
  35. },
  36. selectFirstResult: {
  37. type: Boolean
  38. }
  39. },
  40. watch: {
  41. location: {
  42. handler (val) {
  43. const {originInstance, map} = this
  44. originInstance.setLocation(val || map)
  45. },
  46. deep: true
  47. },
  48. start: {
  49. handler (val) {
  50. const {originInstance, end, BMap} = this
  51. originInstance.search(getPosition(BMap, val), getPosition(BMap, end))
  52. },
  53. deep: true
  54. },
  55. end: {
  56. handler (val) {
  57. const {originInstance, start, BMap} = this
  58. originInstance.search(getPosition(BMap, start), getPosition(BMap, val))
  59. },
  60. deep: true
  61. },
  62. panel () {
  63. this.reload()
  64. },
  65. policy (val) {
  66. this.originInstance.setPolicy(global[val])
  67. },
  68. pageCapacity (val) {
  69. this.originInstance && this.originInstance.setPageCapacity(val)
  70. },
  71. autoViewport (val) {
  72. this.originInstance && (val ? this.originInstance.enableAutoViewport() : this.originInstance.disableAutoViewport())
  73. },
  74. selectFirstResult () {
  75. this.reload()
  76. },
  77. highlightMode () {
  78. this.reload()
  79. }
  80. },
  81. methods: {
  82. search (start, end) {
  83. const {originInstance} = this
  84. originInstance.search(start, end)
  85. },
  86. load () {
  87. const instance = this
  88. const {map, BMap, location, policy, pageCapacity, selectFirstResult, autoViewport, highlightMode, search, start, end, originInstance} = this
  89. const _location = location ? isPoint(location) ? createPoint(BMap, location) : location : map
  90. const route = this.originInstance = new BMap.TransitRoute(_location, {
  91. renderOptions: {
  92. map,
  93. // panel: panel && this.$el,
  94. panel: this.$el,
  95. selectFirstResult,
  96. autoViewport,
  97. highlightMode
  98. },
  99. policy: global[policy],
  100. pageCapacity,
  101. onSearchComplete (e) {
  102. if (originInstance && originInstance !== route) {
  103. originInstance.clearResults()
  104. }
  105. instance.$emit('searchcomplete', e)
  106. },
  107. onMarkersSet (e) {
  108. instance.$emit('markersset', e)
  109. },
  110. onInfoHtmlSet (e) {
  111. instance.$emit('infohtmlset', e)
  112. },
  113. onPolylinesSet (e) {
  114. instance.$emit('polylinesset', e)
  115. },
  116. onResultsHtmlSet (e) {
  117. instance.$emit('resultshtmlset', e)
  118. }
  119. })
  120. search(isPoint(start) ? createPoint(BMap, start) : start, isPoint(end) ? createPoint(BMap, end) : end)
  121. }
  122. }
  123. }
  124. </script>