menus.ts 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. import {uiType, UIType, VectorType} from "@/hook/useGraphic";
  2. import {
  3. findMenuByAttr,
  4. generateByMenus as generateByMenusRaw,
  5. generateMixMenus as generateMixMenusRaw
  6. } from '@/utils/menus'
  7. export enum Mode {
  8. Road,
  9. Photo
  10. }
  11. export const UITypeExtend = {
  12. structure: "structure",
  13. template: "template",
  14. road: "__road",
  15. photo: "photo",
  16. setup: "setup",
  17. lineType: "lineType",
  18. width: "width",
  19. lock: "lock",
  20. basemap: "Basemap"
  21. }
  22. export type MenuRaw = {
  23. key: string,
  24. text: string,
  25. icon?: string,
  26. children?: MenusRaw
  27. extend?: MenusRaw
  28. }
  29. export type MenusRaw = Array<MenuRaw>
  30. export const structureMenusRaw = [
  31. { key: UIType.BranchRoad, text: "支路" },
  32. { key: UIType.NarrowRoad, text: "窄路" },
  33. { key: UIType.ShoulderRoad, text: "路肩" },
  34. { key: UIType.ZebraCrossing, text: "斑马线" },
  35. { key: UIType.Bridge, text: "桥" },
  36. { key: UIType.Tunnel, text: "隧道" },
  37. { key: UIType.Sidewalk, text: "人行道" },
  38. { key: UIType.ConstructionSection, text: "施工路段" },
  39. { key: UIType.Downhill, text: "下坡" },
  40. { key: UIType.Uphill, text: "上坡" },
  41. { key: UIType.RoadsideGutter, text: "路边水沟" },
  42. { key: UIType.RoadsAndRails, text: "道路与铁..." },
  43. { key: UIType.FireHydrantWell, text: "消火栓井" },
  44. { key: UIType.Gullies, text: "雨水口" },
  45. { key: UIType.RoadPotholes, text: "路面凹坑" },
  46. { key: UIType.ProtrudingRoad, text: "路面凸出..." },
  47. { key: UIType.WaterOnTheRoad, text: "路面积水" },
  48. ]
  49. export const templateMenusRaw = [
  50. { key: UIType.SBend, text: "s型弯路" },
  51. { key: UIType.TJunction, text: "丁字路口" },
  52. { key: UIType.FiveForks, text: "五岔路口" },
  53. { key: UIType.ExitRamp, text: "出口匝道" },
  54. { key: UIType.Crossroads, text: "十字路口" },
  55. { key: UIType.NationalHighwayShoulder, text: "国道(路肩)" },
  56. { key: UIType.IndoorSection, text: "室内路段" },
  57. { key: UIType.Bend, text: "弯道" },
  58. { key: UIType.SharpCurve, text: "急转弯道" },
  59. { key: UIType.SixForkIntersection, text: "六岔路口" },
  60. { key: UIType.WideNarrowRoad, text: "宽变窄路段" },
  61. { key: UIType.Corner, text: "直角弯道" },
  62. { key: UIType.ImportSmashedRoad, text: "进口砸到" },
  63. { key: UIType.HighSpeedTollBooth, text: "高速收费站" },
  64. { key: UIType.HighSpeedHarbor, text: "高速港湾" },
  65. { key: UIType.HighwaySection, text: "高速路段" }
  66. ]
  67. export const mainMenusRaw: MenusRaw = [
  68. { key: UIType.CurveRoad, text: "弯路" },
  69. { key: UIType.Road, text: "直路" },
  70. { key: UIType.Line, text: "画线" },
  71. {
  72. key: UITypeExtend.road,
  73. text: "道路",
  74. children: [
  75. { key: UIType.OneEdgeOneLanRoad, text: "单向单车道直路" },
  76. { key: UIType.OneEdgeTwoLanRoad, text: "单向双车道直路" },
  77. { key: UIType.OneEdgeThreeLanRoad, text: "单向三车道直路" },
  78. { key: UIType.TwoEdgeOneLanRoad, text: "双向单车道直路" },
  79. { key: UIType.TwoEdgeTwoLanRoad, text: "双向双车道直路" },
  80. { key: UIType.TwoEdgeThreeLanRoad, text: "双向三车道直路" },
  81. { key: UITypeExtend.structure, text: "道路结构", extend: structureMenusRaw },
  82. { key: UITypeExtend.template, text: "道路模板", extend: templateMenusRaw },
  83. ]
  84. },
  85. { key: UIType.Img, text: "图例" },
  86. { key: UIType.MeasureLine, text: "测量" },
  87. { key: UIType.Text, text: "文字" },
  88. { key: UIType.magnifier, text: "放大镜" },
  89. { key: UITypeExtend.photo, text: "照片库" },
  90. { key: UITypeExtend.setup, text: "设置" },
  91. ];
  92. export const photoMenusRaw: MenusRaw = [
  93. { key: UIType.Text, text: "文字" },
  94. { key: UIType.Circle, text: "圈出" },
  95. { key: UIType.Arrow, text: "箭头" },
  96. { key: UIType.magnifier, text: "放大镜" },
  97. ]
  98. export const headActionMenuRaw = [
  99. { key: UIType.GoBack, text: "回退" },
  100. { key: UIType.GoAhead, text: "前进" },
  101. { key: UIType.Clear, text: "清除" },
  102. { key: UITypeExtend.basemap, text: "底图开关" },
  103. ]
  104. export const focusMenuRaw : { [key in string]: MenusRaw } = {
  105. [VectorType.RoadEdge]: [
  106. {
  107. key: UITypeExtend.lineType,
  108. text: "单实线",
  109. children: [
  110. { key: UIType.SingleSolidLine, text: "单实线" },
  111. { key: UIType.SingleDashedLine, text: "单虚线" },
  112. { key: UIType.DoubleSolidLine, text: "双实线" },
  113. { key: UIType.DoubleDashedLine, text: "双虚线" },
  114. { key: UIType.BrokenLine, text: "折线" },
  115. { key: UIType.PointDrawLine, text: "点画线" },
  116. { key: UIType.Greenbelt, text: "绿化带 " },
  117. ]
  118. },
  119. {
  120. key: UITypeExtend.width,
  121. text: "宽度",
  122. children: [
  123. { key: UIType.Bold, text: "粗" },
  124. { key: UIType.Thinning, text: "细" },
  125. ]
  126. },
  127. { key: UIType.AddControlPoint, text: "加控制点" },
  128. { key: UIType.MinusControlPoint, text: "减控制点" },
  129. { key: UIType.Copy, text: "复制" },
  130. { key: UIType.Delete, text: "删除" }
  131. ],
  132. [VectorType.Road]: [
  133. { key: UITypeExtend.lineType, text: "锁定", },
  134. { key: UIType.AddBranchRoad, text: "加支路" },
  135. { key: UIType.AddNarrowRoad, text: "加窄路" },
  136. { key: UIType.AddLane, text: "加车道" },
  137. { key: UIType.DelLane, text: "减车道" },
  138. { key: UIType.AddControlPoint, text: "加控制点" },
  139. { key: UIType.MinusControlPoint, text: "减控制点" },
  140. { key: UIType.Copy, text: "复制" },
  141. { key: UIType.Delete, text: "删除" }
  142. ],
  143. }
  144. focusMenuRaw[VectorType.CurveRoadEdge] = focusMenuRaw[VectorType.RoadEdge]
  145. focusMenuRaw[VectorType.CurveRoad] = focusMenuRaw[VectorType.Road]
  146. export const generateByMenus = <T extends MenuRaw>(
  147. generateFn: (men: MenuRaw) => T,
  148. mainMenus: MenusRaw = mainMenusRaw
  149. ) => generateByMenusRaw(generateFn, mainMenus);
  150. export const findMainMenuByAttr = (
  151. value: MenusRaw,
  152. attr = "extend" as const,
  153. mainMenus = mainMenusRaw,
  154. ) => findMenuByAttr(value, attr, mainMenus)
  155. export const generateMixMenus = <T extends {}, K extends keyof MenuRaw>(
  156. childKey: K,
  157. generateFn: (men: MenuRaw) => T,
  158. mainMenus: MenusRaw = mainMenusRaw
  159. ) => generateMixMenusRaw(
  160. childKey,
  161. generateFn,
  162. mainMenus,
  163. menu => uiType.change(menu.key as any),
  164. () => uiType.current
  165. );