import {uiType, UIType, VectorType} from "@/hook/useGraphic"; import { findMenuByAttr, generateByMenus as generateByMenusRaw, generateMixMenus as generateMixMenusRaw } from '@/utils/menus' export enum Mode { Road, Photo } export const UITypeExtend = { structure: "structure", template: "template", road: "__road", photo: "photo", setup: "setup", lineType: "lineType", width: "width", lock: "lock", basemap: "Basemap" } export type MenuRaw = { key: string, text: string, icon?: string, children?: MenusRaw extend?: MenusRaw } export type MenusRaw = Array export const structureMenusRaw = [ { key: UIType.BranchRoad, text: "支路" }, { key: UIType.NarrowRoad, text: "窄路" }, { key: UIType.ShoulderRoad, text: "路肩" }, { key: UIType.ZebraCrossing, text: "斑马线" }, { key: UIType.Bridge, text: "桥" }, { key: UIType.Tunnel, text: "隧道" }, { key: UIType.Sidewalk, text: "人行道" }, { key: UIType.ConstructionSection, text: "施工路段" }, { key: UIType.Downhill, text: "下坡" }, { key: UIType.Uphill, text: "上坡" }, { key: UIType.RoadsideGutter, text: "路边水沟" }, { key: UIType.RoadsAndRails, text: "道路与铁..." }, { key: UIType.FireHydrantWell, text: "消火栓井" }, { key: UIType.Gullies, text: "雨水口" }, { key: UIType.RoadPotholes, text: "路面凹坑" }, { key: UIType.ProtrudingRoad, text: "路面凸出..." }, { key: UIType.WaterOnTheRoad, text: "路面积水" }, ] export const templateMenusRaw = [ { key: UIType.SBend, text: "s型弯路" }, { key: UIType.TJunction, text: "丁字路口" }, { key: UIType.FiveForks, text: "五岔路口" }, { key: UIType.ExitRamp, text: "出口匝道" }, { key: UIType.Crossroads, text: "十字路口" }, { key: UIType.NationalHighwayShoulder, text: "国道(路肩)" }, { key: UIType.IndoorSection, text: "室内路段" }, { key: UIType.Bend, text: "弯道" }, { key: UIType.SharpCurve, text: "急转弯道" }, { key: UIType.SixForkIntersection, text: "六岔路口" }, { key: UIType.WideNarrowRoad, text: "宽变窄路段" }, { key: UIType.Corner, text: "直角弯道" }, { key: UIType.ImportSmashedRoad, text: "进口砸到" }, { key: UIType.HighSpeedTollBooth, text: "高速收费站" }, { key: UIType.HighSpeedHarbor, text: "高速港湾" }, { key: UIType.HighwaySection, text: "高速路段" } ] export const mainMenusRaw: MenusRaw = [ { key: UIType.CurveRoad, text: "弯路" }, { key: UIType.Road, text: "直路" }, { key: UIType.Line, text: "画线" }, { key: UITypeExtend.road, text: "道路", children: [ { key: UIType.OneEdgeOneLanRoad, text: "单向单车道直路" }, { key: UIType.OneEdgeTwoLanRoad, text: "单向双车道直路" }, { key: UIType.OneEdgeThreeLanRoad, text: "单向三车道直路" }, { key: UIType.TwoEdgeOneLanRoad, text: "双向单车道直路" }, { key: UIType.TwoEdgeTwoLanRoad, text: "双向双车道直路" }, { key: UIType.TwoEdgeThreeLanRoad, text: "双向三车道直路" }, { key: UITypeExtend.structure, text: "道路结构", extend: structureMenusRaw }, { key: UITypeExtend.template, text: "道路模板", extend: templateMenusRaw }, ] }, { key: UIType.Img, text: "图例" }, { key: UIType.MeasureLine, text: "测量" }, { key: UIType.Text, text: "文字" }, { key: UIType.magnifier, text: "放大镜" }, { key: UITypeExtend.photo, text: "照片库" }, { key: UITypeExtend.setup, text: "设置" }, ]; export const photoMenusRaw: MenusRaw = [ { key: UIType.Text, text: "文字" }, { key: UIType.Circle, text: "圈出" }, { key: UIType.Arrow, text: "箭头" }, { key: UIType.magnifier, text: "放大镜" }, ] export const headActionMenuRaw = [ { key: UIType.GoBack, text: "回退" }, { key: UIType.GoAhead, text: "前进" }, { key: UIType.Clear, text: "清除" }, { key: UITypeExtend.basemap, text: "底图开关" }, ] export const focusMenuRaw : { [key in string]: MenusRaw } = { [VectorType.RoadEdge]: [ { key: UITypeExtend.lineType, text: "单实线", children: [ { key: UIType.SingleSolidLine, text: "单实线" }, { key: UIType.SingleDashedLine, text: "单虚线" }, { key: UIType.DoubleSolidLine, text: "双实线" }, { key: UIType.DoubleDashedLine, text: "双虚线" }, { key: UIType.BrokenLine, text: "折线" }, { key: UIType.PointDrawLine, text: "点画线" }, { key: UIType.Greenbelt, text: "绿化带 " }, ] }, { key: UITypeExtend.width, text: "宽度", children: [ { key: UIType.Bold, text: "粗" }, { key: UIType.Thinning, text: "细" }, ] }, { key: UIType.AddControlPoint, text: "加控制点" }, { key: UIType.MinusControlPoint, text: "减控制点" }, { key: UIType.Copy, text: "复制" }, { key: UIType.Delete, text: "删除" } ], [VectorType.Road]: [ { key: UITypeExtend.lineType, text: "锁定", }, { key: UIType.AddBranchRoad, text: "加支路" }, { key: UIType.AddNarrowRoad, text: "加窄路" }, { key: UIType.AddLane, text: "加车道" }, { key: UIType.DelLane, text: "减车道" }, { key: UIType.AddControlPoint, text: "加控制点" }, { key: UIType.MinusControlPoint, text: "减控制点" }, { key: UIType.Copy, text: "复制" }, { key: UIType.Delete, text: "删除" } ], } focusMenuRaw[VectorType.CurveRoadEdge] = focusMenuRaw[VectorType.RoadEdge] focusMenuRaw[VectorType.CurveRoad] = focusMenuRaw[VectorType.Road] export const generateByMenus = ( generateFn: (men: MenuRaw) => T, mainMenus: MenusRaw = mainMenusRaw ) => generateByMenusRaw(generateFn, mainMenus); export const findMainMenuByAttr = ( value: MenusRaw, attr = "extend" as const, mainMenus = mainMenusRaw, ) => findMenuByAttr(value, attr, mainMenus) export const generateMixMenus = ( childKey: K, generateFn: (men: MenuRaw) => T, mainMenus: MenusRaw = mainMenusRaw ) => generateMixMenusRaw( childKey, generateFn, mainMenus, menu => uiType.change(menu.key as any), () => uiType.current );