use-mouse-tool.ts 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import { reactive } from 'vue'
  2. import pin2d8cf0 from '/@/assets/icons/pin-2d8cf0.svg'
  3. import { MapDoodleType } from '/@/constants/map'
  4. import { getRoot } from '/@/root'
  5. import { MapDoodleEnum } from '/@/types/map-enum'
  6. import { EFlightAreaType } from '../types/flight-area'
  7. import { message } from 'ant-design-vue'
  8. import { ELocalStorageKey } from '../types'
  9. import rootStore from '/@/store'
  10. export function useMouseTool() {
  11. const root = getRoot()
  12. const userName = localStorage.getItem(ELocalStorageKey.Username) || ''
  13. const state = reactive({
  14. currentType: '',
  15. })
  16. const getIndex = () => {
  17. const item: any = rootStore.state.Layers[0];
  18. if (!item) {
  19. return userName + 1;
  20. } else {
  21. return userName + (item.elements.length + 1);
  22. }
  23. }
  24. const flightAreaColorMap = {
  25. [EFlightAreaType.DFENCE]: '#19be6b',
  26. [EFlightAreaType.NFZ]: '#ff0000',
  27. }
  28. function drawPin(type: MapDoodleType, getDrawCallback: Function) {
  29. root?.$mouseTool.marker({
  30. title: getIndex(),
  31. icon: pin2d8cf0,
  32. })
  33. root?.$mouseTool.on('draw', getDrawCallback)
  34. }
  35. function drawPolyline(type: MapDoodleType, getDrawCallback: Function) {
  36. root?.$mouseTool.polyline({
  37. title: getIndex(),
  38. strokeColor: '#2d8cf0',
  39. strokeOpacity: 1,
  40. strokeWeight: 2,
  41. strokeStyle: 'solid',
  42. })
  43. root?.$mouseTool.on('draw', getDrawCallback)
  44. }
  45. function drawPolygon(type: MapDoodleType, getDrawCallback: Function) {
  46. root?.$mouseTool.polygon({
  47. title: getIndex(),
  48. strokeColor: '#2d8cf0',
  49. strokeOpacity: 1,
  50. strokeWeight: 2,
  51. fillColor: '#1791fc',
  52. fillOpacity: 0.4,
  53. })
  54. root?.$mouseTool.on('draw', getDrawCallback)
  55. }
  56. function drawOff(type: MapDoodleType) {
  57. root?.$mouseTool.close()
  58. root?.$mouseTool.off('draw')
  59. }
  60. function drawFlightAreaPolygon(type: EFlightAreaType, getDrawFlightAreaCallback: Function) {
  61. root?.$mouseTool.polygon({
  62. strokeColor: flightAreaColorMap[type],
  63. strokeOpacity: 1,
  64. strokeWeight: 4,
  65. extData: {
  66. type: type,
  67. mapType: 'polygon',
  68. },
  69. strokeStyle: 'dashed',
  70. strokeDasharray: EFlightAreaType.NFZ === type ? [10, 2] : [10, 1, 2],
  71. fillColor: flightAreaColorMap[type],
  72. fillOpacity: EFlightAreaType.NFZ === type ? 0.3 : 0,
  73. })
  74. root?.$mouseTool.on('draw', getDrawFlightAreaCallback)
  75. }
  76. function drawFlightAreaCircle(type: EFlightAreaType, getDrawFlightAreaCallback: Function) {
  77. root?.$mouseTool.circle({
  78. strokeColor: flightAreaColorMap[type],
  79. strokeOpacity: 1,
  80. strokeWeight: 6,
  81. extData: {
  82. type: type,
  83. mapType: 'circle',
  84. },
  85. strokeStyle: 'dashed',
  86. strokeDasharray: EFlightAreaType.NFZ === type ? [10, 2] : [10, 1, 2],
  87. fillColor: flightAreaColorMap[type],
  88. fillOpacity: EFlightAreaType.NFZ === type ? 0.3 : 0,
  89. })
  90. root?.$mouseTool.on('draw', getDrawFlightAreaCallback)
  91. }
  92. function mouseTool(type: MapDoodleType, getDrawCallback: Function, flightAreaType?: EFlightAreaType) {
  93. state.currentType = type
  94. if (flightAreaType) {
  95. switch (type) {
  96. case MapDoodleEnum.POLYGON:
  97. drawFlightAreaPolygon(flightAreaType, getDrawCallback)
  98. return
  99. case MapDoodleEnum.CIRCLE:
  100. drawFlightAreaCircle(flightAreaType, getDrawCallback)
  101. return
  102. default:
  103. message.error(`Invalid type: ${flightAreaType}`)
  104. return
  105. }
  106. }
  107. switch (type) {
  108. case MapDoodleEnum.PIN:
  109. drawPin(type, getDrawCallback)
  110. break
  111. case MapDoodleEnum.POLYLINE:
  112. drawPolyline(type, getDrawCallback)
  113. break
  114. case MapDoodleEnum.POLYGON:
  115. drawPolygon(type, getDrawCallback)
  116. break
  117. case MapDoodleEnum.Close:
  118. drawOff(type)
  119. break
  120. }
  121. }
  122. return {
  123. mouseTool
  124. }
  125. }