duheng
2024-11-12 0bc0468692ad7b16cd2d49d20c4689ddcd6fb212
WinFrmUI/HStation.WinFrmUI.Xhs.Core/map/gaode/html/ViewProjectList.html
@@ -1,14 +1,17 @@
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport"
          content="initial-scale=1.0, user-scalable=no, width=device-width" />
    <title>项目列表视图</title>
    <link rel="stylesheet" href="http://cache.amap.com/lbs/static/main1119.css" />
    <link rel="stylesheet"
          href="http://cache.amap.com/lbs/static/main1119.css" />
    <link href="../css/public.css" rel="stylesheet" />
    <script src="http://cache.amap.com/lbs/static/es5.min.js"></script>
    <script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=3627ed9deaac2622e26a7169f0c36b1b&plugin=AMap.Geocoder"></script>
    <script type="text/javascript"
            src="https://webapi.amap.com/maps?v=2.0&key=3627ed9deaac2622e26a7169f0c36b1b&plugin=AMap.Geocoder"></script>
    <script src="../js/jquery-2.1.1.min.js"></script>
    <script src="../js/public.js"></script>
    <script src="../js/tools.js"></script>
@@ -16,28 +19,32 @@
</head>
<body>
    <div id="container"></div>
    <div class="search-box" id="search_box">
        <input class="search-text" id="search_text" type="text" placeholder="请输入详细地址" onkeypress="keySearchAddress()" />
        <input class="search-button" id="search_button" type="button" onclick="searchAddress()" />
        <input class="search-text"
               id="search_text"
               type="text"
               placeholder="请输入详细地址"
               onkeypress="keySearchAddress()" />
        <input class="search-button"
               id="search_button"
               type="button"
               onclick="searchAddress()" />
    </div>
    <script>
        let map;//地图对象 使用 ToolBar时,地图对象需要定义位map 否则会报错
        let _map;//地图对象
        let _layer;//图层对象
        let _callBackObj;//交互对象
        let _allProjectList = [];//所有项目列表
        let _selectedProjectOverlay = null;//选择的项目覆盖物
        let map; //地图对象 使用 ToolBar时,地图对象需要定义位map 否则会报错
        let _map; //地图对象
        let _layer; //图层对象
        let _callBackObj; //交互对象
        let _allProjectList = []; //所有项目列表
        let _selectedProjectOverlay = null; //选择的项目覆盖物
        $(document).ready(function () {
            try {
                map = _map = new AMap.Map('container', {
                    viewMode: '2D', //默认使用 2D 模式
                map = _map = new AMap.Map("container", {
                    viewMode: "2D", //默认使用 2D 模式
                    resizeEnable: true,
                    expandZoomRange: true,
                    zoom: 10,
@@ -55,32 +62,31 @@
                //地图点击时关闭搜索面板
                _map.on("click", function () {
                    if ($("#search_text").css("display") == 'block') {
                    if ($("#search_text").css("display") == "block") {
                        $("#search_text").hide();
                    }
                });
                //地图加载完成事件
                _map.on("complete", function () {//地图加载完成
                _map.on("complete", function () {
                    //地图加载完成
                    _layer = new AMap.LabelsLayer({
                        zooms: [3, 20],
                        zIndex: 1000,
                        eventSupport: true,  // 图层事件支持,LabelsLayer 默认开启
                        eventSupport: true, // 图层事件支持,LabelsLayer 默认开启
                        fitView: true,
                        collision: true,// 该层内标注是否避让
                        collision: true, // 该层内标注是否避让
                        allowCollision: true, //不同标注层之间是否避让
                    });
                    _map.add(_layer);
                    _callBackObj = window.chrome.webview.hostObjects.callBackObj;
                    _callBackObj.LoadCompleted();
                });
            }
            catch (e) {
                _callBackObj = window.chrome.webview.hostObjects.callBackObj
            } catch (e) {
                _callBackObj = window.chrome.webview.hostObjects.callBackObj;
                _callBackObj.LoadFailed();
            }
        })
        });
        //设置项目列表
        function setProjectList(allProjectList) {
@@ -89,8 +95,7 @@
            }
            if (isEmpty(allProjectList)) {
                _allProjectList = [];
            }
            else {
            } else {
                _allProjectList = allProjectList;
            }
@@ -102,10 +107,10 @@
                    //zIndex: 1,
                    // 将第一步创建的 icon 对象传给 icon 属性
                    icon: {
                        type: 'image',// 图标类型,现阶段只支持 image 类型
                        image: xhs_image_base64.project,// 图片 url
                        type: "image", // 图标类型,现阶段只支持 image 类型
                        image: xhs_image_base64.project, // 图片 url
                        size: [32, 32], // 图片尺寸
                        anchor: 'center',// 图片相对 position 的锚点,默认为 bottom-center
                        anchor: "center", // 图片相对 position 的锚点,默认为 bottom-center
                    },
                    // 将第二步创建的 text 对象传给 text 属性
                    text: {
@@ -118,8 +123,8 @@
                            fillColor: "#22886f", //字体颜色
                            strokeColor: "#fff", //描边颜色
                            strokeWidth: 2, //描边宽度
                        }
                    }
                        },
                    },
                });
                labelMarker.objInfo = x;
                labelMarker.on("click", function (e) {
@@ -136,12 +141,27 @@
            return true;
        }
        function initOverlayListener(overlay) {
            const id = overlay.objInfo.Id
            console.log('id:', id)
            // FIXME: 每次切换都会新增同样的元素, 需要优化
            const objInfoNameEleList = document.querySelectorAll(".obj-info-name-" + id);
            const lastEle = objInfoNameEleList[objInfoNameEleList.length - 1];
            lastEle?.addEventListener("click", () => {
                _callBackObj.JumpSimulation(overlay.objInfo.Id);
            });
        }
        //设置选择项目样式
        function setSelectProjectStyle(overlay) {
            setCancelSelectProjectStyle();
            let info = [];
            info.push("<div className='input-card'>");
            info.push("<label style=\"color: blue\">");
            const id = overlay.objInfo.Id
            info.push(
                "<label class='obj-info-name-" + id + "' style=\"color: blue;cursor:pointer\">"
            );
            info.push(overlay.objInfo.Name);
            info.push("</label>");
            info.push("<p class='input-item'>编号:");
@@ -152,16 +172,19 @@
            info.push("</p>");
            info.push("</div>");
            infoWindow = new AMap.InfoWindow({
                anchor: 'bottom-center',
                anchor: "bottom-center",
                content: info.join(""),
                offset: new AMap.Pixel(0, -16)
                offset: new AMap.Pixel(0, -16),
            });
            infoWindow.open(_map, overlay.getPosition());
            _selectedProjectOverlay = overlay;
            _map.setFitView(overlay);
            initOverlayListener(overlay);
        }
        function getAllOverlaysClick(overlay) {
            console.log(overlay);
        }
        //设置取消选择样式
        function setCancelSelectProjectStyle() {
            if (_selectedProjectOverlay) {
@@ -179,10 +202,14 @@
                _allProjectList = [];
            }
            let project = _allProjectList.find(function (x) { return x.Id == projectId; });
            let project = _allProjectList.find(function (x) {
                return x.Id == projectId;
            });
            if (project) {
                let allOverlays = _layer.getAllOverlays();
                let overlay = allOverlays.find(function (x) { return x.objInfo && x.objInfo.Id == projectId; });
                let overlay = allOverlays.find(function (x) {
                    return x.objInfo && x.objInfo.Id == projectId;
                });
                if (overlay) {
                    setSelectProjectStyle(overlay);
                }
@@ -198,7 +225,8 @@
        //设置搜索面板的可见性
        function setSearchPanelVisibility() {
            document.getElementById('search_box').hidden = !document.getElementById('search_box').hidden;
            document.getElementById("search_box").hidden =
                !document.getElementById("search_box").hidden;
        }
        //根据详细地址查看地图
@@ -209,14 +237,19 @@
            let geocoder = new AMap.Geocoder({});
            //地理编码,返回地理编码结果
            geocoder.getLocation(address, function (status, result) {
                if (status === 'complete' && result.info === 'OK') {
                if (status === "complete" && result.info === "OK") {
                    let geocode = result.geocodes;
                    let lnglat = [geocode[0].location.getLng(), geocode[0].location.getLat()];
                    let lnglat = [
                        geocode[0].location.getLng(),
                        geocode[0].location.getLat(),
                    ];
                    let marker = new AMap.Marker({ position: lnglat });
                    _map.setFitView(marker);
                }
                else {
                    let error = { Code: error_type.locate_address, Message: "根据详细地址定位地图失败" };
                } else {
                    let error = {
                        Code: error_type.locate_address,
                        Message: "根据详细地址定位地图失败",
                    };
                    _callBackObj.HandingError(JSON.stringify(error));
                }
            });
@@ -224,16 +257,13 @@
        //搜索地址
        function searchAddress() {
            if ($("#search_text").css("display") == 'block') {
            if ($("#search_text").css("display") == "block") {
                let address = $("#search_text").val();
                if (!isEmpty(address)) {
                    locateByAddress(address);
                }
                $("#search_text").hide();
            }
            else {
            } else {
                $("#search_text").show();
            }
        }
@@ -250,15 +280,14 @@
        getAddressByLnglat = function (lnglat, callback) {
            let geocoder = new AMap.Geocoder({});
            geocoder.getAddress(lnglat, function (status, result) {
                if (status === 'complete' && result.info === 'OK') {
                if (status === "complete" && result.info === "OK") {
                    var address = result.regeocode.formattedAddress; //返回地址描述
                    callback(address);
                }
                else {
                } else {
                    callback(null);
                }
            });
        }
        };
    </script>
</body>
</html>