From 85fb13abbeadc1765d2c0056ba99c6c19aa35dfd Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Sun, 09 Apr 2023 03:44:49 +0800
Subject: [PATCH] 电子沙盘的调整

---
 public/img/icon/custom.png                            |    0 
 src/styles/base/index.scss                            |  463 ++++++++++------------
 src/styles/media/index.scss                           |  250 ------------
 src/views/activity/components/policePersonChange.vue  |    7 
 src/views/activity/components/twoDrawBtnBox.vue       |   29 +
 src/components/map/index.vue                          |   32 +
 src/views/activity/components/publicIndex.vue         |   53 +
 src/views/activity/index.vue                          |   16 
 src/views/activity/components/policeCarChange.vue     |    4 
 src/components/imagesSelect/index.vue                 |   12 
 src/views/activity/components/drawBtnBox.vue          |   26 +
 src/views/activity/components/polygonPlot.vue         |  186 ++++++---
 src/components/map/components/activityPolicePopup.vue |   25 
 src/views/activity/components/polylinePlot.vue        |   50 +-
 14 files changed, 526 insertions(+), 627 deletions(-)

diff --git a/public/img/icon/custom.png b/public/img/icon/custom.png
new file mode 100644
index 0000000..7949e3b
--- /dev/null
+++ b/public/img/icon/custom.png
Binary files differ
diff --git a/src/components/imagesSelect/index.vue b/src/components/imagesSelect/index.vue
index cc05e6b..f004a7b 100644
--- a/src/components/imagesSelect/index.vue
+++ b/src/components/imagesSelect/index.vue
@@ -2,7 +2,7 @@
  * @Author: shuishen 1109946754@qq.com
  * @Date: 2023-04-04 16:24:42
  * @LastEditors: shuishen 1109946754@qq.com
- * @LastEditTime: 2023-04-06 10:37:52
+ * @LastEditTime: 2023-04-07 15:59:41
  * @FilePath: \srs-police-affairs\src\components\imagesSelect\index.vue
  * @Description: 
  * 
@@ -60,9 +60,10 @@
 
 <style lang="scss" scoped>
 .container {
-    // position: absolute;
-    // left: 0;
-    // bottom: -10px;
+    position: absolute;
+    left: 0;
+    top: 100%;
+    z-index: 999999;
     display: flex;
     flex-wrap: wrap;
 
@@ -108,6 +109,9 @@
             height: 20px;
             line-height: 20px;
             font-size: 12px;
+            overflow: hidden; //超出的文本隐藏
+            text-overflow: ellipsis; //溢出用省略号显示
+            white-space: nowrap; //溢出不换行
         }
     }
 }
diff --git a/src/components/map/components/activityPolicePopup.vue b/src/components/map/components/activityPolicePopup.vue
index a263e05..3c7fec2 100644
--- a/src/components/map/components/activityPolicePopup.vue
+++ b/src/components/map/components/activityPolicePopup.vue
@@ -2,7 +2,7 @@
  * @Author: shuishen 1109946754@qq.com
  * @Date: 2023-03-02 09:39:32
  * @LastEditors: shuishen 1109946754@qq.com
- * @LastEditTime: 2023-03-07 11:02:54
+ * @LastEditTime: 2023-04-09 03:41:13
  * @FilePath: \srs-police-affairs\src\components\map\components\activityPolicePopup.vue
  * @Description: 
  * 
@@ -14,7 +14,8 @@
             <div style="transform: translate(-50%, 0);">
                 <!-- 样式自己修改 -->
                 <div class="content" :class="{ 'scale-dom': scaleDomFlag }">
-                    <div class="data-box" v-if="activityPolicePopupData.label != 'none'">
+                    <div class="data-box"
+                        v-if="activityPolicePopupData.label != 'none' && activityPolicePopupData.billboard == false">
                         <div class="line">
                             <div class="name">警车编号:</div>
                             <div class="value">{{ activityPolicePopupData.label }}</div>
@@ -39,9 +40,14 @@
                             <div class="name">所属辖区:</div>
                             <div class="value"> {{ activityPolicePopupData.deptName }}</div>
                         </div>
+                        <div class="line">
+                            <div class="name">描述:</div>
+                            <div class="value"> {{ activityPolicePopupData.Data.data.remark }}</div>
+                        </div>
                     </div>
 
-                    <div class="data-box" v-if="activityPolicePopupData.policeStationName != 'none'">
+                    <div class="data-box"
+                        v-if="activityPolicePopupData.policeStationName != 'none' && activityPolicePopupData.billboard == false">
                         <div class="line">
                             <div class="name">警员姓名:</div>
                             <div class="value"> {{ activityPolicePopupData.policeData.name }}</div>
@@ -66,8 +72,18 @@
                             <div class="name">所属辖区:</div>
                             <div class="value"> {{ activityPolicePopupData.policeData.deptName }}</div>
                         </div>
+                        <div class="line">
+                            <div class="name">描述:</div>
+                            <div class="value"> {{ activityPolicePopupData.Data.data.remark }}</div>
+                        </div>
                     </div>
 
+                    <div class="data-box" v-if="activityPolicePopupData.billboard == true">
+                        <div class="line">
+                            <div class="name">描述:</div>
+                            <div class="value"> {{ activityPolicePopupData.Data.item.remark }}</div>
+                        </div>
+                    </div>
                 </div>
             </div>
         </div>
@@ -124,8 +140,6 @@
     }
 
     .content {
-        width: 220px;
-        height: 130px;
         background: $bg-color;
         border-radius: 4px;
         color: #fff;
@@ -138,7 +152,6 @@
                 justify-self: start;
 
                 .name {
-                    width: 90px;
                     text-align: justify;
                 }
             }
diff --git a/src/components/map/index.vue b/src/components/map/index.vue
index 018140f..755c42c 100644
--- a/src/components/map/index.vue
+++ b/src/components/map/index.vue
@@ -2,7 +2,7 @@
  * @Author: shuishen 1109946754@qq.com
  * @Date: 2022-08-18 17:00:30
  * @LastEditors: shuishen 1109946754@qq.com
- * @LastEditTime: 2023-04-06 18:45:53
+ * @LastEditTime: 2023-04-07 15:27:58
  * @FilePath: \srs-police-affairs\src\components\map\index.vue
  * @Description: 公用地图组件
  * 
@@ -287,7 +287,7 @@
             // global.viewer.addTerrain(terrain)
 
             // 内网
-            // that.switchImg()
+            that.switchImg()
 
             // 外网
             global.viewer.imageryLayers.addImageryProvider(
@@ -666,6 +666,34 @@
                 })
             )
 
+            // const fileArray = ['A', 'B', 'C', 'D', 'E', 'F']
+            // let subdomains = []
+
+            // fileArray.forEach(item => {
+            //     for (let i = 1; i < 6; i++) {
+            //         subdomains.push(`${item}${i}`)
+            //     }
+            // })
+
+            // baseLayers = global.viewer.imageryLayers.addImageryProvider(
+            //     new global.DC.Namespace.Cesium.UrlTemplateImageryProvider({
+            //         url: `${window.BASE_URL_CONFIG.VUE_APP_MAP_YX}/{fileName}/{AZ}/{y}/{x}.png`,
+            //         customTags: {
+            //             AZ (imageryProvider, x, y, level) {
+            //                 return 'Z' + level
+            //             },
+
+            //             fileName (imageryProvider, x, y, level) {
+            //                 console.log(imageryProvider, x, y, level)
+            //             }
+            //         },
+            //         enablePickFeatures: false
+            //         // minimumLevel: 0,
+            //         // maximumLevel: 25,
+            //         // tilingScheme: new global.DC.Namespace.Cesium.GeographicTilingScheme(),
+            //     })
+            // )
+
             // baseLayers = global.viewer.imageryLayers.addImageryProvider(
             //     new global.DC.Namespace.Cesium.WebMapTileServiceImageryProvider({
             //         url: `${window.BASE_URL_CONFIG.VUE_APP_MAP_YX}/geoserver/gwc/service/wmts`,
diff --git a/src/styles/base/index.scss b/src/styles/base/index.scss
index 9e0590a..be0e3d4 100644
--- a/src/styles/base/index.scss
+++ b/src/styles/base/index.scss
@@ -665,26 +665,50 @@
         display: flex;
         flex-direction: column;
         width: 360px;
-        height: 240px;
+
+        .el-dialog__header {
+            .el-dialog__title {
+                position: absolute;
+                top: 50%;
+                left: 50%;
+                transform: translate(-50%, -50%);
+            }
+        }
 
         .el-dialog__body {
             position: relative;
 
             &>div {
-                position: absolute;
+                padding-bottom: 56px;
+                position: relative;
                 width: 100%;
                 height: 100%;
-                top: 0;
-                left: 0;
 
-                &>.input-box {
-                    margin-bottom: 10px;
+                &>div {
+                    position: relative;
+                    height: 44px;
+                    line-height: 44px;
+                }
+
+
+                .line {
                     display: flex;
                     align-items: center;
-                    justify-content: center;
-                    height: 36px;
-                    position: relative;
+
+                    .pick-color-box {
+                        display: flex;
+                        align-items: center;
+                    }
                 }
+
+                .btn-box {
+                    position: absolute;
+                    bottom: 0;
+                    width: 100%;
+                    display: flex;
+                    justify-content: center;
+                }
+
             }
 
 
@@ -710,33 +734,12 @@
 
         .el-tree {
             position: absolute;
-            height: 100px;
-            top: 36px;
-            width: calc(100% - 16px);
+            max-height: 220px;
+            top: 44px;
+            width: 100%;
             background-color: rgba(8, 56, 185, 0.6);
             z-index: 99;
-        }
-
-        .el-input {
-            width: calc(100% - 20px);
-            font-size: 14px;
-            top: 0;
-            left: 0;
-        }
-
-        .police-btn-box {
-            position: absolute;
-            bottom: 16px;
-            width: 100%;
-        }
-
-        .area {
-            top: 92px;
-        }
-
-        .line {
-            display: flex;
-            justify-content: left;
+            overflow-y: auto;
         }
 
         .value-name-box {
@@ -775,30 +778,50 @@
         display: flex;
         flex-direction: column;
         width: 360px;
-        height: 240px;
+
+        .el-dialog__header {
+            .el-dialog__title {
+                position: absolute;
+                top: 50%;
+                left: 50%;
+                transform: translate(-50%, -50%);
+            }
+        }
 
         .el-dialog__body {
             position: relative;
 
             &>div {
-                position: absolute;
+                padding-bottom: 56px;
+                position: relative;
                 width: 100%;
                 height: 100%;
-                top: 0;
-                left: 0;
 
-                &>.input-box {
-                    margin-bottom: 10px;
+                &>div {
+                    position: relative;
+                    height: 44px;
+                    line-height: 44px;
+                }
+
+
+                .line {
                     display: flex;
                     align-items: center;
-                    justify-content: center;
-                    height: 36px;
-                    position: relative;
 
-                    &>div {
-                        width: 100%;
+                    .pick-color-box {
+                        display: flex;
+                        align-items: center;
                     }
                 }
+
+                .btn-box {
+                    position: absolute;
+                    bottom: 0;
+                    width: 100%;
+                    display: flex;
+                    justify-content: center;
+                }
+
             }
 
             .el-button {
@@ -809,7 +832,7 @@
                 width: 60px;
                 height: 30px;
                 text-align: center;
-                margin-top: 40px;
+                margin-top: 16px;
             }
         }
 
@@ -817,15 +840,12 @@
             background-color: #409EFF;
         }
 
-        .el-select .el-input.is-disabled .el-input__inner {
-            background-color: rgba(8, 56, 185, 0.9);
+        .el-select {
+            width: 100%;
         }
 
-        .police-btn-box {
-            position: absolute;
-            left: 0;
-            bottom: 16px;
-            width: 100%;
+        .el-select .el-input.is-disabled .el-input__inner {
+            background-color: rgba(8, 56, 185, 0.9);
         }
 
         .line {
@@ -865,84 +885,129 @@
     }
 }
 
-.edit-line-box {
-    .el-dialog {
-        display: flex;
-        flex-direction: column;
-        width: 360px;
-        height: 240px;
+// .edit-line-box {
+//     .el-dialog {
+//         display: flex;
+//         flex-direction: column;
+//         width: 360px;
+//         height: 240px;
 
-        .el-dialog__body {
-            .el-button {
-                padding: 0;
-                background-color: rgba(8, 56, 185, 0.9);
-                border: 1px solid rgba(8, 56, 185, 0.9);
-                color: #fff;
-                width: 60px;
-                height: 30px;
-                text-align: center;
-                margin-top: 10px;
-            }
+//         .el-dialog__body {
+//             .el-button {
+//                 padding: 0;
+//                 background-color: rgba(8, 56, 185, 0.9);
+//                 border: 1px solid rgba(8, 56, 185, 0.9);
+//                 color: #fff;
+//                 width: 60px;
+//                 height: 30px;
+//                 text-align: center;
+//                 margin-top: 10px;
+//             }
 
-            .el-button:hover {
-                background-color: #409EFF;
-            }
+//             .el-button:hover {
+//                 background-color: #409EFF;
+//             }
 
-            &>div {
-                display: flex;
-                // justify-content: center;
-                margin-bottom: 10px;
-            }
+//             &>div {
+//                 display: flex;
+//                 // justify-content: center;
+//                 margin-bottom: 10px;
+//             }
 
-            .input-width-box {
-                input {
-                    outline: none;
-                    width: 80px;
-                    height: 28px;
-                    background-color: rgba(8, 56, 185, 0.5);
-                    border: none;
-                    color: #fff;
-                    border-radius: 4px;
-                    padding-left: 15px;
-                }
+//             .input-width-box {
+//                 input {
+//                     outline: none;
+//                     width: 80px;
+//                     height: 28px;
+//                     background-color: rgba(8, 56, 185, 0.5);
+//                     border: none;
+//                     color: #fff;
+//                     border-radius: 4px;
+//                     padding-left: 15px;
+//                 }
 
-                input:focus {
-                    border-color: #409EFF;
-                    border: 1px solid #409EFF;
-                }
-            }
+//                 input:focus {
+//                     border-color: #409EFF;
+//                     border: 1px solid #409EFF;
+//                 }
+//             }
 
-            .value-name-box {
-                height: 32px;
-                line-height: 32px;
-                width: 120px;
-                text-align: left;
-            }
+//             .value-name-box {
+//                 height: 32px;
+//                 line-height: 32px;
+//                 width: 120px;
+//                 text-align: left;
+//             }
 
-            .edit-line-btn-box {
-                display: flex;
-                justify-content: center;
-            }
+//             .edit-line-btn-box {
+//                 display: flex;
+//                 justify-content: center;
+//             }
 
-            .units {
-                width: 60px;
-                height: 26px;
-                text-align: left;
-                padding-left: 10px;
-            }
+//             .units {
+//                 width: 60px;
+//                 height: 26px;
+//                 text-align: left;
+//                 padding-left: 10px;
+//             }
 
-        }
-    }
-}
+//         }
+//     }
+// }
 
+.edit-line-box,
+.edit-plot-box,
 .add-polygon-box {
     .el-dialog {
         display: flex;
         flex-direction: column;
         width: 360px;
-        height: 240px;
+
+        .el-dialog__header {
+            .el-dialog__title {
+                position: absolute;
+                top: 50%;
+                left: 50%;
+                transform: translate(-50%, -50%);
+            }
+        }
 
         .el-dialog__body {
+            position: relative;
+
+            &>div {
+                padding-bottom: 56px;
+                position: relative;
+                width: 100%;
+                height: 100%;
+
+                &>div {
+                    position: relative;
+                    height: 44px;
+                    line-height: 44px;
+                }
+
+
+                .line {
+                    display: flex;
+                    align-items: center;
+
+                    .pick-color-box {
+                        display: flex;
+                        align-items: center;
+                    }
+                }
+
+                .btn-box {
+                    position: absolute;
+                    bottom: 0;
+                    width: 100%;
+                    display: flex;
+                    justify-content: center;
+                }
+
+            }
+
             .el-button {
                 padding: 0;
                 background-color: rgba(8, 56, 185, 0.9);
@@ -951,71 +1016,45 @@
                 width: 60px;
                 height: 30px;
                 text-align: center;
+                margin-top: 16px;
             }
+        }
 
-            .el-button:hover {
-                background-color: #409EFF;
-            }
+        .value-name-box {
+            height: 32px;
+            line-height: 32px;
+            width: 110px;
+        }
 
-            .line {
-                display: flex;
-                justify-content: left;
-                margin-bottom: 10px;
+        .line {
+            display: flex;
+            justify-content: left;
+        }
 
-                input {
-                    outline: none;
-                    width: 80px;
-                    height: 28px;
-                    background-color: rgba(8, 56, 185, 0.5);
-                    border: none;
-                    color: #fff;
-                    border-radius: 4px;
-                    padding-left: 15px;
-                }
+        .width-box {
+            display: flex;
+            align-items: center;
+        }
 
-                input:focus {
-                    border-color: #409EFF;
-                    border: 1px solid #409EFF;
-                }
-            }
+        .alpha {
+            flex: 1;
+        }
 
-            .alpha {
-                width: calc(100% - 110px);
-            }
-
-            .value-name-box {
-                width: 110px;
-                display: flex;
-                align-items: center;
-            }
-
-            .add-polygon-btn-box {
-                display: flex;
-                justify-content: center;
-            }
-
+        .input-width-box {
             input {
-                height: 30px;
-                font-size: 16px;
-                color: #ffffff;
-                background-color: transparent;
-                border: 1px solid rgb(0, 92, 169);
+                outline: none;
+                width: 80px;
+                height: 28px;
+                background-color: rgba(8, 56, 185, 0.5);
+                border: none;
+                color: #fff;
+                border-radius: 4px;
+                padding-left: 15px;
             }
 
             input:focus {
-                outline: none;
-            }
-
-            input::-webkit-input-placeholder {
-                color: rgba(238, 238, 238, 0.7);
-            }
-
-            .el-input--suffix .el-input__inner {
-                padding-right: 10px;
-            }
-
-            .placeholder {
-                height: 26px;
+                border-color: #409EFF;
+                border: 1px solid #409EFF;
             }
         }
     }
@@ -1024,92 +1063,6 @@
 .select-on-tab {
     box-shadow: 0 2px 2px $menu-tab-shadow;
     color: #fff;
-}
-
-.edit-plot-box {
-    .el-dialog {
-        display: flex;
-        flex-direction: column;
-        width: 360px;
-        height: 240px;
-
-        .el-dialog__body {
-            .el-button {
-                padding: 0;
-                background-color: rgba(8, 56, 185, 0.9);
-                border: 1px solid rgba(8, 56, 185, 0.9);
-                color: #fff;
-                width: 60px;
-                height: 30px;
-                text-align: center;
-                margin-top: 10px;
-            }
-
-            .el-button:hover {
-                background-color: #409EFF;
-            }
-
-            &>div {
-                display: flex;
-                // justify-content: center;
-                margin-bottom: 10px;
-
-                input {
-                    outline: none;
-                    width: 80px;
-                    height: 28px;
-                    background-color: rgba(8, 56, 185, 0.5);
-                    border: none;
-                    color: #fff;
-                    border-radius: 4px;
-                    padding-left: 15px;
-                }
-
-                input:focus {
-                    border-color: #409EFF;
-                    border: 1px solid #409EFF;
-                }
-            }
-
-            .value-name-box {
-                height: 32px;
-                line-height: 32px;
-                width: 120px;
-                text-align: left;
-            }
-
-            .alpha {
-                width: calc(100% - 120px);
-            }
-
-            input {
-                height: 30px;
-                font-size: 16px;
-                text-indent: 1em;
-                color: #ffffff;
-                background-color: transparent;
-                border: 1px solid rgb(0, 92, 169);
-            }
-
-            input:focus {
-                outline: none;
-            }
-
-            input::-webkit-input-placeholder {
-                color: rgba(238, 238, 238, 0.7);
-            }
-
-            .placeholder {
-                height: 15px;
-                margin-bottom: 0px;
-            }
-
-            .edit-plot-btn-box {
-                display: flex;
-                justify-content: center;
-            }
-        }
-    }
 }
 
 .edit-range-box {
diff --git a/src/styles/media/index.scss b/src/styles/media/index.scss
index 8975b17..7d22be4 100644
--- a/src/styles/media/index.scss
+++ b/src/styles/media/index.scss
@@ -1642,7 +1642,7 @@
                             left: countSizeVw(692, 1920);
                             bottom: countSizeVh(40);
                             border-radius: countSizeVh(8);
-                            width: countSizeVw(546, 1920);
+                            width: auto;
                             z-index: 99;
 
                             .left {
@@ -2253,254 +2253,6 @@
                             height: countSizeVh(30);
                             border-radius: countSizeVh(4);
                             margin-top: countSizeVh(10);
-                        }
-                    }
-
-                    .choose-police-box {
-                        .el-dialog__header span {
-                            font-size: countSizeVh(18);
-                        }
-
-                        .el-dialog .el-dialog__body {
-                            font-size: countSizeVh(16);
-
-                            &>div {
-                                padding: countSizeVh(14);
-                                padding-top: 0;
-
-                                &>.input-box {
-                                    height: 36px;
-                                }
-                            }
-                        }
-
-                        .el-dialog__header button {
-                            font-size: countSizeVh(18);
-                            right: countSizeVw(10, 1920);
-                        }
-
-                        .el-dialog {
-                            width: countSizeVw(360, 1920);
-                            height: countSizeVh(240);
-                        }
-
-                        .el-dialog .el-dialog__body .el-button {
-                            width: countSizeVw(60, 1920);
-                            height: countSizeVh(30);
-                            margin-top: countSizeVh(16);
-                            border: countSizeVh(1) solid rgba(8, 56, 185, 0.9);
-                        }
-
-                        .el-dialog .el-dialog__body .el-button:hover {
-                            background-color: #409EFF;
-                        }
-
-                        .el-tree {
-                            height: countSizeVh(240);
-                            top: countSizeVh(36);
-                            width: calc(100% - countSizeVw(16, 1920));
-                        }
-
-                        .el-input {
-                            width: calc(100% - countSizeVw(20, 1920));
-                        }
-
-                        .police-btn-box {
-                            bottom: countSizeVh(16);
-                        }
-
-                        .value-name-box {
-                            height: countSizeVh(32);
-                            line-height: countSizeVh(32);
-                            width: countSizeVw(100, 1920);
-                        }
-
-                        .area {
-                            top: countSizeVh(92);
-                        }
-
-                        .input-width-box {
-                            input {
-                                width: countSizeVw(80, 1920);
-                                height: countSizeVh(28);
-                                border-radius: countSizeVh(4);
-                                padding-left: countSizeVw(15, 1920);
-                            }
-                        }
-                    }
-
-                    .choose-policeCar-box {
-                        .el-dialog__header span {
-                            font-size: countSizeVh(18);
-                        }
-
-                        .el-dialog .el-dialog__body {
-                            font-size: countSizeVh(16);
-
-                            &>div {
-                                padding: countSizeVh(14);
-                                padding-top: 0;
-
-                                &>div {
-                                    line-height: countSizeVh(36);
-                                }
-                            }
-                        }
-
-                        .police-btn-box {
-                            bottom: countSizeVh(16);
-                        }
-
-                        .el-dialog__header button {
-                            font-size: countSizeVh(18);
-                            right: countSizeVw(10, 1920);
-                        }
-
-                        .el-dialog {
-                            width: countSizeVw(360, 1920);
-                            height: countSizeVh(240);
-                        }
-
-                        .el-dialog .el-dialog__body .el-button {
-                            width: countSizeVw(60, 1920);
-                            height: countSizeVh(30);
-                            margin-top: countSizeVh(20);
-                            border: countSizeVh(1) solid rgba(8, 56, 185, 0.9);
-                        }
-
-                        .el-dialog .el-dialog__body .el-button:hover {
-                            background-color: #409EFF;
-                        }
-
-                        .value-name-box {
-                            height: countSizeVh(32);
-                            line-height: countSizeVh(32);
-                            width: countSizeVw(130, 1920);
-                        }
-
-                        .input-width-box {
-                            input {
-                                width: countSizeVw(80, 1920);
-                                height: countSizeVh(28);
-                                border-radius: countSizeVh(4);
-                                padding-left: countSizeVw(15, 1920);
-                            }
-                        }
-                    }
-
-                    .edit-line-box {
-                        .el-dialog {
-                            width: countSizeVw(360, 1920);
-                            height: countSizeVh(240);
-
-                            .el-dialog__body {
-                                .el-button {
-                                    width: countSizeVw(60, 1920);
-                                    height: countSizeVh(30);
-                                    margin-top: countSizeVh(10);
-                                }
-
-
-                                &>div {
-                                    margin-bottom: countSizeVh(10);
-                                }
-
-                                .input-width-box {
-                                    input {
-                                        width: countSizeVw(80, 1920);
-                                        height: countSizeVh(28);
-                                        border-radius: countSizeVh(4);
-                                        padding-left: countSizeVw(15, 1920);
-                                    }
-
-                                }
-
-                                .value-name-box {
-                                    height: countSizeVh(32);
-                                    line-height: countSizeVh(32);
-                                }
-
-
-                                .units {
-                                    width: countSizeVw(60, 1920);
-                                    height: countSizeVh(26);
-                                    padding-left: countSizeVw(10, 1920)
-                                }
-
-                            }
-                        }
-                    }
-
-                    .add-polygon-box {
-                        .el-dialog {
-                            width: countSizeVw(360, 1920);
-                            height: countSizeVh(240);
-
-                            .el-dialog__body {
-                                .el-button {
-                                    width: countSizeVw(60, 1920);
-                                    height: countSizeVh(30);
-                                }
-
-                                .line {
-                                    margin-bottom: countSizeVh(10);
-                                }
-
-                                .value-name-box {
-                                    width: countSizeVh(120);
-                                }
-
-                                input {
-                                    height: countSizeVh(30);
-                                    font-size: countSizeVh(16);
-                                    border: countSizeVh(1) solid rgb(0, 92, 169);
-                                }
-
-                                .alpha {
-                                    width: calc(100% - countSizeVh(140));
-                                }
-
-                            }
-                        }
-                    }
-
-                    .edit-plot-box {
-                        .el-dialog {
-                            width: countSizeVw(360, 1920);
-                            height: countSizeVh(240);
-
-                            .el-dialog__body {
-                                .el-button {
-                                    width: countSizeVw(60, 1920);
-                                    height: countSizeVh(30);
-                                    margin-top: countSizeVh(10);
-                                }
-
-                                &>div {
-                                    margin-bottom: countSizeVh(10);
-                                }
-
-                                .value-name-box {
-                                    height: countSizeVh(32);
-                                    line-height: countSizeVh(32);
-                                    width: countSizeVw(120, 1920);
-                                }
-
-                                input {
-                                    height: countSizeVh(30);
-                                    font-size: countSizeVh(16);
-                                    border: countSizeVh(1) solid rgb(0, 92, 169);
-                                }
-
-                                .placeholder {
-                                    height: countSizeVh(15);
-                                    margin-bottom: countSizeVh(0);
-                                }
-
-                                .alpha {
-                                    width: calc(100% - countSizeVh(160));
-                                }
-                            }
                         }
                     }
 
diff --git a/src/views/activity/components/drawBtnBox.vue b/src/views/activity/components/drawBtnBox.vue
index 7db652c..9de5932 100644
--- a/src/views/activity/components/drawBtnBox.vue
+++ b/src/views/activity/components/drawBtnBox.vue
@@ -24,6 +24,9 @@
                     <li>
                         <button @click="drawThreeArrow('billboard', 'icon', 'icon3')" title="危险人物">危险人物</button>
                     </li>
+                    <li>
+                        <button @click="drawThreeArrow('billboard', 'icon', 'icon4')" title="自定义图片标注">自定义图片标注</button>
+                    </li>
                 </ul>
             </div>
             <div>
@@ -139,8 +142,11 @@
                     imgUrl = 'wxrw'
                     material = global.DC.Namespace.Cesium.Color.fromBytes(255, 0, 0, 255)
                     break
+                case 'icon4':
+                    imgUrl = 'custom'
+                    material = global.DC.Namespace.Cesium.Color.fromBytes(255, 0, 0, 255)
+                    break
             }
-
 
             let drawConfig = {}
 
@@ -281,9 +287,11 @@
             addPlotOverlayData.attrParams = { id: item.id, color: item.color, item }
 
             addPlotOverlayData.on(global.DC.MouseEventType.CLICK, this.$parent.reeditArrowClick)
-            if (item.type == 6 || item.type == 7 || item.type == 8) {
+            if (item.type == 6 || item.type == 7 || item.type == 8 || item.type == 11) {
                 const height = item.altitude.split(',')
                 let position = item.position.slice(12, item.position.length - 2).split(',')[0].split(' ')
+
+                if (item.iconUrl != '') addPlotOverlayData.icon = item.iconUrl
 
                 addPlotOverlayData.setStyle({
                     color: color
@@ -295,6 +303,8 @@
                     alt: Number(height[0]),
                 }
 
+                addPlotOverlayData.on(global.DC.MouseEventType.MOUSE_OVER, this.$parent.pointMouseOver)
+                addPlotOverlayData.on(global.DC.MouseEventType.MOUSE_OUT, this.$parent.pointMouseOut)
                 this.$parent.isHaveFactor = true
             } else if (item.type == 5) {
                 addPlotOverlayData.setStyle({
@@ -447,6 +457,14 @@
                     "font": `${params.width}px sans-serif`
                 })
             }
+
+            if ('icon' in params && params.icon != '') {
+                overlay.icon = params.icon
+            }
+
+            if ('remark' in params && params.remark != '') {
+                overlay.attrParams.item.remark = params.remark
+            }
         },
 
         // 修改警车样式
@@ -533,6 +551,10 @@
                     overlay.remove()
                 }
             }
+
+            if ('remark' in params) {
+                overlay.attrParams.data.remark = params.remark
+            }
         },
 
         // 修改警车
diff --git a/src/views/activity/components/policeCarChange.vue b/src/views/activity/components/policeCarChange.vue
index 363ce5f..f207113 100644
--- a/src/views/activity/components/policeCarChange.vue
+++ b/src/views/activity/components/policeCarChange.vue
@@ -1,7 +1,7 @@
 <template>
     <div>
         <el-dialog title="选择警车" :visible.sync="policeChooseCarVisible" :before-close="cancel" :modal="true"
-            :modal-append-to-body="false" :close-on-click-modal="false" class="choose-policeCar-box">
+            :modal-append-to-body="true" :append-to-body="true" :close-on-click-modal="false" class="choose-policeCar-box">
             <div>
                 <div class="input-box">
                     <el-input size="small" ref="searchTreeInput" v-model="carRemark" placeholder="请输入描述"
@@ -33,7 +33,7 @@
                     </div>
                 </div>
 
-                <div class="police-btn-box">
+                <div class="btn-box">
                     <el-button @click="determine" v-show="!isChoosePoliceElementDisabled">确定</el-button>
                     <el-button @click="deletePoliceElement"
                         v-show="!isChoosePoliceElementDisabled && policeIconIsCreated">删除</el-button>
diff --git a/src/views/activity/components/policePersonChange.vue b/src/views/activity/components/policePersonChange.vue
index 4afdd56..2182d1e 100644
--- a/src/views/activity/components/policePersonChange.vue
+++ b/src/views/activity/components/policePersonChange.vue
@@ -1,7 +1,7 @@
 <template>
     <div>
         <el-dialog title="选择警员" :visible.sync="policeChooseVisible" :before-close="cancel" :modal="true"
-            :modal-append-to-body="false" :close-on-click-modal="false" class="choose-police-box">
+            :modal-append-to-body="true" :append-to-body="true" :close-on-click-modal="false" class="choose-police-box">
             <div>
                 <div class="input-box">
                     <el-input size="small" ref="searchTreeInput" v-model="personRemark" placeholder="请输入描述"
@@ -36,7 +36,7 @@
                     </div>
                 </div>
 
-                <div class="police-btn-box">
+                <div class="btn-box">
                     <el-button @click="determine" v-show="!isChoosePoliceElementDisabled">确定</el-button>
                     <el-button @click="deletePoliceElement"
                         v-show="!isChoosePoliceElementDisabled && policeIconIsCreated">删除</el-button>
@@ -181,7 +181,8 @@
                         securityId: this.showingSecurityId,
                         type: 3,
                         color: this.choosePoliceColor,
-                        width: this.pointAreaWidth
+                        width: this.pointAreaWidth,
+                        remark: this.personRemark
                     })
                     this.policeIconIsCreated = false
                 }
diff --git a/src/views/activity/components/polygonPlot.vue b/src/views/activity/components/polygonPlot.vue
index 257da4a..b97cbb1 100644
--- a/src/views/activity/components/polygonPlot.vue
+++ b/src/views/activity/components/polygonPlot.vue
@@ -1,74 +1,110 @@
 <template>
     <div>
         <el-dialog title="修改标绘" :visible.sync="editPlotVisible" :modal="true" :close-on-click-modal="false"
-            :modal-append-to-body="false" class="edit-plot-box">
+            :modal-append-to-body="true" :append-to-body="true" class="edit-plot-box">
             <div>
-                <div class="value-name-box">描述:</div>
-                <div class="input-width-box" style="flex: 1;">
-                    <input style="width: 100%;" type="text" v-model="polygonRemark" placeholder="请输入..." />
+                <div class="line">
+                    <div class="value-name-box">描述:</div>
+                    <div class="input-width-box" style="flex: 1;">
+                        <input style="width: 100%;" type="text" v-model="polygonRemark" placeholder="请输入..." />
+                    </div>
+                </div>
+
+                <div class="line" v-show="customImageShow">
+                    <div class="value-name-box">
+                        选择图片:
+                    </div>
+                    <div class="select-image" style="position: relative; display: flex; align-items: center;">
+                        <el-button style="margin-top: 0; position: relative; background: transparent; border-color: #fff;"
+                            @click="imagesListShow = !imagesListShow">
+                            <img :src="curImgUrl" alt=""
+                                style="position: absolute; top: 0; left: 0; right: 0; bottom: 0; margin: auto; z-index: 999; width: 20px; height: 20px;">
+                        </el-button>
+                        <images-select v-show="imagesListShow" @curClick="curClick"></images-select>
+                    </div>
+                </div>
+
+                <div class="line">
+                    <div class="value-name-box">选择标绘颜色:</div>
+                    <div class="pick-color-box">
+                        <el-color-picker v-model="choosePlotColor" :predefine="predefineColors" size="small">
+                        </el-color-picker>
+                    </div>
+                </div>
+
+                <div class="line">
+                    <div class="value-name-box">设置透明度:</div>
+                    <div class="alpha">
+                        <el-slider :min="1" v-model="choosePlotColorAlpha" :format-tooltip="formatTooltip"></el-slider>
+                    </div>
+                </div>
+
+                <div class="btn-box">
+                    <el-button @click="savePlot">保存</el-button>
+                    <el-button @click="editPlot">编辑</el-button>
+                    <el-button @click="deletePlot">删除</el-button>
+                    <el-button @click="editPlotVisible = false">取消</el-button>
                 </div>
             </div>
 
-            <div>
-                <div class="value-name-box">选择标绘颜色:</div>
-                <div class="pick-color-box">
-                    <el-color-picker v-model="choosePlotColor" :predefine="predefineColors" size="small">
-                    </el-color-picker>
-                </div>
-            </div>
-
-            <div>
-                <div class="value-name-box">设置透明度:</div>
-                <div class="alpha">
-                    <el-slider :min="1" v-model="choosePlotColorAlpha" :format-tooltip="formatTooltip"></el-slider>
-                </div>
-            </div>
-
-            <div class="edit-plot-btn-box">
-                <el-button @click="savePlot">保存</el-button>
-                <el-button @click="editPlot">编辑</el-button>
-                <el-button @click="deletePlot">删除</el-button>
-                <el-button @click="editPlotVisible = false">取消</el-button>
-            </div>
         </el-dialog>
 
         <el-dialog title="新增标绘" :visible.sync="polygonAddVisible" :modal="true" :close-on-click-modal="false"
-            :modal-append-to-body="false" class="add-polygon-box" :before-close="cancelSavePolygon">
-            <div class="line">
-                <div class="value-name-box">描述:</div>
-                <div class="input-width-box" style="flex: 1;">
-                    <input style="width: 100%;" type="text" v-model="polygonRemark" placeholder="请输入..." />
+            :modal-append-to-body="true" :append-to-body="true" class="add-polygon-box" :before-close="cancelSavePolygon">
+
+            <div>
+                <div class="line">
+                    <div class="value-name-box">描述:</div>
+                    <div class="input-width-box" style="flex: 1;">
+                        <input style="width: 100%;" type="text" v-model="polygonRemark" placeholder="请输入..." />
+                    </div>
+                </div>
+
+                <div class="line" v-show="isNeedPolygonType">
+                    <div class="value-name-box">选择类型:</div>
+                    <div class="select-type">
+                        <el-select size="small" v-model="polygonAreaType" placeholder="请选择区域类型">
+                            <el-option v-for="item in polygonAreaOption" :key="item.value" :label="item.label"
+                                :value="item.value"></el-option>
+                        </el-select>
+                    </div>
+                </div>
+
+                <div class="line" v-show="customImageShow">
+                    <div class="value-name-box">
+                        选择图片:
+                    </div>
+                    <div class="select-image" style="position: relative; display: flex; align-items: center;">
+                        <el-button style="margin-top: 0; position: relative; background: transparent; border-color: #fff;"
+                            @click="imagesListShow = !imagesListShow">
+                            <img :src="curImgUrl" alt=""
+                                style="position: absolute; top: 0; left: 0; right: 0; bottom: 0; margin: auto; z-index: 999; width: 20px; height: 20px;">
+                        </el-button>
+                        <images-select v-show="imagesListShow" @curClick="curClick"></images-select>
+                    </div>
+                </div>
+
+                <div class="line">
+                    <div class="value-name-box">选择标绘颜色:</div>
+                    <div class="pick-color-box">
+                        <el-color-picker v-model="choosePlotColor" :predefine="predefineColors" size="small">
+                        </el-color-picker>
+                    </div>
+                </div>
+
+                <div class="line">
+                    <div class="value-name-box">设置透明度:</div>
+                    <div class="alpha">
+                        <el-slider :min="1" v-model="choosePlotColorAlpha" :format-tooltip="formatTooltip"></el-slider>
+                    </div>
+                </div>
+
+                <div class="btn-box">
+                    <el-button @click="savePolygonInfo">保存</el-button>
+                    <el-button @click="cancelSavePolygon">取消</el-button>
                 </div>
             </div>
 
-            <div class="line" v-show="isNeedPolygonType">
-                <div class="value-name-box">选择类型:</div>
-                <div class="select-type">
-                    <el-select size="small" v-model="polygonAreaType" placeholder="请选择区域类型">
-                        <el-option v-for="item in polygonAreaOption" :key="item.value" :label="item.label"
-                            :value="item.value"></el-option>
-                    </el-select>
-                </div>
-            </div>
-
-            <div class="line">
-                <div class="value-name-box">选择标绘颜色:</div>
-                <div class="pick-color-box">
-                    <el-color-picker v-model="choosePlotColor" :predefine="predefineColors" size="small">
-                    </el-color-picker>
-                </div>
-            </div>
-            <div class="line">
-                <div class="value-name-box">设置透明度:</div>
-                <div class="alpha">
-                    <el-slider :min="1" v-model="choosePlotColorAlpha" :format-tooltip="formatTooltip"></el-slider>
-                </div>
-            </div>
-
-            <div class="add-polygon-btn-box">
-                <el-button @click="savePolygonInfo">保存</el-button>
-                <el-button @click="cancelSavePolygon">取消</el-button>
-            </div>
         </el-dialog>
     </div>
 </template>
@@ -125,13 +161,23 @@
             }],
             plotId: '',
 
+            customImageShow: false,
+            imagesListShow: false,
+
+            curImgUrl: '/img/icon/custom.png'
         }
     },
     methods: {
+        curClick (item) {
+            this.curImgUrl = item.url
+
+            this.imagesListShow = false
+        },
+
         addPointPopupShow (type, positions) {
             polygonAltArray = `${positions.alt},${positions.alt}`
             polygonPlotData = `${positions.lng} ${positions.lat}`
-
+            this.customImageShow = false
             let color = ''
 
             if (type == 'icon1') {
@@ -142,6 +188,10 @@
                 color = '#ff0000'
             } else if (type == 'icon3') {
                 this.plotSaveType = 8
+                color = '#ff0000'
+            } else if (type == 'icon4') {
+                this.customImageShow = true
+                this.plotSaveType = 11
                 color = '#ff0000'
             } else {
                 color = '#1e32e6'
@@ -161,6 +211,7 @@
             this.choosePlotColor = '#409EFF'
             this.polygonRemark = ''
             this.choosePlotColorAlpha = 48
+            this.customImageShow = false
 
             if (type == 5) {
                 this.polygonAreaType = 1
@@ -176,7 +227,12 @@
         setCurOver (e) {
             plotOverlayData = e
 
-            this.polygonRemark = e.overlay.attrParams.remark
+            this.polygonRemark = e.overlay.attrParams.item.remark
+
+            this.curImgUrl = e.overlay.icon
+
+            if (e.overlay.attrParams.item.type == 11) this.customImageShow = true
+
             this.choosePlotColor = e.overlay.attrParams.color != '' ? e.overlay.attrParams.color.slice(0, 7) : '#409EFF'
             this.choosePlotColorAlpha = e.overlay.attrParams.color != '' ? Number(e.overlay.attrParams.color.split(',')[1]) : 100
 
@@ -247,7 +303,8 @@
             this.$parent.updateSecurityPlot({
                 id: plotOverlayData.overlay.attrParams.id,
                 color: this.choosePlotColor + ',' + this.choosePlotColorAlpha,
-                remark: this.polygonRemark
+                remark: this.polygonRemark,
+                icon: this.curImgUrl
             }, plotOverlayData.overlay)
             this.editPlotVisible = false
         },
@@ -266,6 +323,7 @@
         // 保存绘制区域
         savePolygonInfo () {
             let positionStr = ''
+            let iconUrl = {}
             if (this.plotSaveType >= 1 && this.plotSaveType <= 4) {
                 positionStr = polygonPlotData
             } else if (this.plotSaveType == 5) {
@@ -274,6 +332,9 @@
                 positionStr = polygonPlotData + ',' + polygonPlotData
             } else if (this.plotSaveType == 10) {
                 positionStr = polygonPlotData
+            } else if (this.plotSaveType == 11) {
+                positionStr = polygonPlotData + ',' + polygonPlotData
+                iconUrl = { iconUrl: this.curImgUrl }
             }
 
             this.addSecurityPlot({
@@ -283,7 +344,8 @@
                 color: this.choosePlotColor + ',' + this.choosePlotColorAlpha,
                 remark: this.polygonRemark,
                 areaType: this.polygonAreaType,
-                altitude: polygonAltArray
+                altitude: polygonAltArray,
+                ...iconUrl
             })
             this.polygonAddVisible = false
         },
diff --git a/src/views/activity/components/polylinePlot.vue b/src/views/activity/components/polylinePlot.vue
index 6353cdc..2b784a8 100644
--- a/src/views/activity/components/polylinePlot.vue
+++ b/src/views/activity/components/polylinePlot.vue
@@ -4,34 +4,36 @@
 <template>
     <div>
         <el-dialog :title="lineEditTitle" :visible.sync="lineEditVisible" :modal="true" :close-on-click-modal="false"
-            :modal-append-to-body="false" class="edit-line-box" :before-close="cancelSaveLine">
+            :modal-append-to-body="true" :append-to-body="true" class="edit-line-box" :before-close="cancelSaveLine">
             <div>
-                <div class="value-name-box">描述:</div>
-                <div class="input-width-box" style="flex: 1;">
-                    <input style="width: 100%;" type="text" v-model="lineRemark" placeholder="请输入..." />
+                <div class="line">
+                    <div class="value-name-box">描述:</div>
+                    <div class="input-width-box" style="flex: 1;">
+                        <input style="width: 100%;" type="text" v-model="lineRemark" placeholder="请输入..." />
+                    </div>
                 </div>
-            </div>
-            <div>
-                <div class="value-name-box">设置缓冲范围:</div>
-                <div class="input-width-box">
-                    <input type="text" v-model="lineWidth" placeholder="请输入..." />
+                <div class="line">
+                    <div class="value-name-box">设置缓冲范围:</div>
+                    <div class="input-width-box">
+                        <input type="text" v-model="lineWidth" placeholder="请输入..." />
+                    </div>
+                    <div class="units">米</div>
                 </div>
-                <div class="units">米</div>
-            </div>
-            <div>
-                <div class="value-name-box">选择范围颜色:</div>
-                <div class="pick-color-box">
-                    <el-color-picker v-model="chooseColor" :predefine="predefineColors" size="small">
-                    </el-color-picker>
+                <div class="line">
+                    <div class="value-name-box">选择范围颜色:</div>
+                    <div class="pick-color-box">
+                        <el-color-picker v-model="chooseColor" :predefine="predefineColors" size="small">
+                        </el-color-picker>
+                    </div>
                 </div>
-            </div>
-            <div class="edit-line-btn-box">
-                <el-button @click="lookStartVideo" v-show="isLineEdit">查看视频</el-button>
-                <el-button @click="editLineInfo" v-show="isLineEdit">编辑</el-button>
-                <el-button @click="saveLineInfo" v-show="isLineEdit">保存</el-button>
-                <el-button @click="deleteLine" v-show="isLineEdit">删除</el-button>
-                <el-button @click="addLineInfo" v-show="!isLineEdit">添加</el-button>
-                <el-button @click="cancelSaveLine">取消</el-button>
+                <div class="btn-box">
+                    <el-button @click="lookStartVideo" v-show="isLineEdit">查看视频</el-button>
+                    <el-button @click="editLineInfo" v-show="isLineEdit">编辑</el-button>
+                    <el-button @click="saveLineInfo" v-show="isLineEdit">保存</el-button>
+                    <el-button @click="deleteLine" v-show="isLineEdit">删除</el-button>
+                    <el-button @click="addLineInfo" v-show="!isLineEdit">添加</el-button>
+                    <el-button @click="cancelSaveLine">取消</el-button>
+                </div>
             </div>
         </el-dialog>
     </div>
diff --git a/src/views/activity/components/publicIndex.vue b/src/views/activity/components/publicIndex.vue
index 576c20d..8a3f6e1 100644
--- a/src/views/activity/components/publicIndex.vue
+++ b/src/views/activity/components/publicIndex.vue
@@ -321,6 +321,7 @@
                 this.$parent.normalPeopleList = res.data.data.filter(item => item.type == 6)
                 this.$parent.protectedPeopleList = res.data.data.filter(item => item.type == 7)
                 this.$parent.dangerousPeopleList = res.data.data.filter(item => item.type == 8)
+                this.$parent.customList = res.data.data.filter(item => item.type == 11)
 
                 // 作战标绘
                 this.$parent.attackArrowList = res.data.data.filter(item => item.type == 1)
@@ -331,11 +332,11 @@
                 this.$parent.borkenList = res.data.data.filter(item => item.type == 10)
 
                 this.isHaveArrow = res.data.data.some(item => {
-                    return item.type != 6 && item.type != 7 && item.type != 8
+                    return item.type != 6 && item.type != 7 && item.type != 8 && item.type != 11
                 })
 
                 this.isHavePointDraw = res.data.data.some(item => {
-                    return item.type == 6 || item.type == 7 || item.type == 8
+                    return item.type == 6 || item.type == 7 || item.type == 8 || item.type == 11
                 })
 
                 let allData = res.data.data
@@ -363,13 +364,20 @@
                     } else if (item.type == 5) {
                         this.initLayersCoverage('Polygon', color, item, position, altitude)
                         continue
-                    } else if (item.type == 6 || item.type == 7 || item.type == 8) {
+                    } else if (item.type == 6 || item.type == 7 || item.type == 8 || item.type == 11) {
                         let iconImgName = item.type == 6 ? 'ptqz' : item.type == 7 ? 'bhdx' : 'wxrw'
+                        let icon = ''
+
+                        if (item.type == 11) {
+                            icon = item.iconUrl
+                        } else {
+                            icon = `/img/icon/${iconImgName}.png`
+                        }
 
                         const height = item.altitude.split(',')
                         position = position.split(';')[0].split(',')
 
-                        let chooseArrow = new global.DC.Billboard(new global.DC.Position(Number(position[0]), Number(position[1]), Number(height[0])), `/img/icon/${iconImgName}.png`)
+                        let chooseArrow = new global.DC.Billboard(new global.DC.Position(Number(position[0]), Number(position[1]), Number(height[0])), icon)
                         chooseArrow.customType = 'billboard'
                         chooseArrow.setStyle({
                             color: color.curColor,
@@ -377,6 +385,8 @@
                         chooseArrow.attrParams = { id: item.id, color: item.color, item }
                         chooseArrow.size = [32, 32]
                         chooseArrow.on(global.DC.MouseEventType.CLICK, this.reeditArrowClick)
+                        chooseArrow.on(global.DC.MouseEventType.MOUSE_OVER, this.pointMouseOver)
+                        chooseArrow.on(global.DC.MouseEventType.MOUSE_OUT, this.pointMouseOut)
                         pointCircleCarLayer.addOverlay(chooseArrow)
                     } else if (item.type == 10) {
                         this.initLayersCoverage('Polyline', color, item, position, altitude)
@@ -406,7 +416,7 @@
         },
 
         initLayersCoverage (type, color, params, position, altitude) {
-            if (altitude.length) position = position.split(';').map((item, index) => `${item},${altitude[index]}`).join(';')
+            if (altitude && altitude.length) position = position.split(';').map((item, index) => `${item},${altitude[index]}`).join(';')
             let coverage = new global.DC[type](position)
 
             if (type == 'Polygon') {
@@ -442,6 +452,7 @@
             }
             coverage.attrParams = { id: params.id, color: params.color, item: params }
             coverage.on(global.DC.MouseEventType.CLICK, this.reeditArrowClick)
+
             arrowsListLayer.addOverlay(coverage)
 
             return coverage
@@ -533,17 +544,29 @@
         pointMouseOver (e) {
             this.$store.commit('SET_ACTIVITYPOLICEPOPUP', true)
             let hoverData = {}
-            if ('carId' in e.overlay.attrParams.data) {
-                hoverData = policecarOption.filter(item => item.value == e.overlay.attrParams.data.carId)[0]
-                hoverData.policeData = { 'name': 'none' }
-                hoverData.policeStationName = 'none'
+
+            hoverData.billboard = false
+
+            if (e.overlay.attrParams.item.type == 6 || e.overlay.attrParams.item.type == 7 || e.overlay.attrParams.item.type == 8 || e.overlay.attrParams.item.type == 11) {
+                hoverData.billboard = true
             } else {
-                let policeArr = this.filterTree(this.policeTreeData)
-                hoverData.policeData = policeArr.filter(item => item.id == e.overlay.attrParams.data.policemanId)[0]
-                hoverData.policeStationName = policeArr.filter(item => item.id == policeArr.filter(item => item.id == e.overlay.attrParams.data.policemanId)[0].parentId)[0].name
-                hoverData.carType = 'none'
-                hoverData.label = 'none'
+                if ('carId' in e.overlay.attrParams.data) {
+                    hoverData = policecarOption.filter(item => item.value == e.overlay.attrParams.data.carId)[0]
+                    hoverData.policeData = { 'name': 'none' }
+                    hoverData.policeStationName = 'none'
+                } else {
+                    let policeArr = this.filterTree(this.policeTreeData)
+                    hoverData.policeData = policeArr.filter(item => item.id == e.overlay.attrParams.data.policemanId)[0]
+                    hoverData.policeStationName = policeArr.filter(item => item.id == policeArr.filter(item => item.id == e.overlay.attrParams.data.policemanId)[0].parentId)[0].name
+                    hoverData.carType = 'none'
+                    hoverData.label = 'none'
+                }
             }
+
+            hoverData.Data = e.overlay.attrParams
+
+            console.log(hoverData, 95999)
+
             this.$store.commit('SET_ACTIVITYPOLICEPOPUPDATA', hoverData)
 
             var popup = new global.DC.DivForms(global.viewer, {
@@ -760,7 +783,7 @@
             let positionArr = positionStr.split(" ")
             let positionObj = {}
             if (iconName == 'activity') {
-                positionObj = { lng: `${positionArr[0]}`, lat: `${positionArr[1]}`, alt: data.altitude, url: '/img/icon/activity.png' }
+                positionObj = { lng: `${positionArr[0]}`, lat: `${positionArr[1]}`, alt: data.altitude, url: '/img/icon/activity.png', data: data }
             } else if (iconName == 'policeman') {
                 positionObj = { lng: `${positionArr[0]}`, lat: `${positionArr[1]}`, alt: data.altitude, url: '/img/icon/police-people.png', data: data }
             } else if (iconName == 'policecar') {
diff --git a/src/views/activity/components/twoDrawBtnBox.vue b/src/views/activity/components/twoDrawBtnBox.vue
index 18532aa..2a53c24 100644
--- a/src/views/activity/components/twoDrawBtnBox.vue
+++ b/src/views/activity/components/twoDrawBtnBox.vue
@@ -24,6 +24,9 @@
                     <li>
                         <button @click="drawThreeArrow('billboard', 'icon', 'icon3')" title="危险人物">危险人物</button>
                     </li>
+                    <li>
+                        <button @click="drawThreeArrow('billboard', 'icon', 'icon4')" title="自定义图片标注">自定义图片标注</button>
+                    </li>
                 </ul>
             </div>
             <div>
@@ -208,6 +211,10 @@
                     imgUrl = 'wxrw'
                     material = global.DC.Namespace.Cesium.Color.fromBytes(255, 0, 0, 255)
                     break
+                case 'icon4':
+                    imgUrl = 'custom'
+                    material = global.DC.Namespace.Cesium.Color.fromBytes(255, 0, 0, 255)
+                    break
             }
 
             if (type == 'polygon') {
@@ -230,7 +237,8 @@
                     material: global.DC.Namespace.Cesium.Color.fromBytes(64, 158, 255, 122),
                     outline: true,
                     outlineColor: global.DC.Namespace.Cesium.Color.fromBytes(64, 158, 255, 255),
-                    outlineWidth: 4.0,
+                    outlineWidth: 1.0,
+                    height: 0
                 })
             } else if (type == 'brokenline') {
                 drawThreeTool && drawThreeTool.draw('polyline', overlay => {
@@ -353,9 +361,11 @@
             addPlotOverlayData.attrParams = { id: item.id, color: item.color, item }
 
             addPlotOverlayData.on(global.DC.MouseEventType.CLICK, this.$parent.reeditArrowClick)
-            if (item.type == 6 || item.type == 7 || item.type == 8) {
+            if (item.type == 6 || item.type == 7 || item.type == 8 || item.type == 11) {
                 const height = item.altitude.split(',')
                 let position = item.position.slice(12, item.position.length - 2).split(',')[0].split(' ')
+
+                if (item.iconUrl != '') addPlotOverlayData.icon = item.iconUrl
 
                 addPlotOverlayData.setStyle({
                     color: color
@@ -366,6 +376,9 @@
                     lat: Number(position[1]),
                     alt: Number(height[0]),
                 }
+
+                addPlotOverlayData.on(global.DC.MouseEventType.MOUSE_OVER, this.$parent.pointMouseOver)
+                addPlotOverlayData.on(global.DC.MouseEventType.MOUSE_OUT, this.$parent.pointMouseOut)
 
                 this.$parent.isHaveFactor = true
             } else {
@@ -510,6 +523,14 @@
                     "font": `${params.width}px sans-serif`
                 })
             }
+
+            if ('icon' in params && params.icon != '') {
+                overlay.icon = params.icon
+            }
+
+            if ('remark' in params && params.remark != '') {
+                overlay.attrParams.item.remark = params.remark
+            }
         },
 
         // 修改警车样式
@@ -585,6 +606,10 @@
                     overlay.remove()
                 }
             }
+
+            if ('remark' in params) {
+                overlay.attrParams.data.remark = params.remark
+            }
         },
 
         // 修改警车
diff --git a/src/views/activity/index.vue b/src/views/activity/index.vue
index e8f22a3..4cca851 100644
--- a/src/views/activity/index.vue
+++ b/src/views/activity/index.vue
@@ -2,7 +2,7 @@
  * @Author: shuishen 1109946754@qq.com
  * @Date: 2023-03-24 16:36:55
  * @LastEditors: shuishen 1109946754@qq.com
- * @LastEditTime: 2023-04-07 09:51:28
+ * @LastEditTime: 2023-04-07 16:45:36
  * @FilePath: \srs-police-affairs\src\views\activity\index.vue
  * @Description: 
  * 
@@ -81,6 +81,17 @@
                                                     :key="dangerousItem.id"
                                                     @click="carOrPoliceItemClick(dangerousItem.position, 'people')">
                                                     危险人物{{ index + 1 }}
+                                                </li>
+                                            </ul>
+                                        </el-collapse-item>
+                                    </el-collapse>
+
+                                    <el-collapse v-model="elementCustomIndex" accordion>
+                                        <el-collapse-item title="自定义图片标注" :name="wxrw">
+                                            <ul>
+                                                <li v-for="(item, index) in customList" :key="item.id"
+                                                    @click="carOrPoliceItemClick(item.position, 'people')">
+                                                    自定义图片标注{{ index + 1 }}
                                                 </li>
                                             </ul>
                                         </el-collapse-item>
@@ -222,6 +233,7 @@
             elementNormalIndex: '',
             elementProtectedIndex: '',
             elementDangerousIndex: '',
+            elementCustomIndex: '',
             attackArrowIndex: '',
             doubleArrowIndex: '',
             tailedAttackArrowIndex: '',
@@ -244,6 +256,7 @@
             normalPeopleList: [],
             protectedPeopleList: [],
             dangerousPeopleList: [],
+            customList: [],
             boxShow: true,
             searchActivity: '',
             currentPage: 1,
@@ -440,6 +453,7 @@
                 this.normalPeopleList = res.data.data.filter(item => item.type == 6)
                 this.protectedPeopleList = res.data.data.filter(item => item.type == 7)
                 this.dangerousPeopleList = res.data.data.filter(item => item.type == 8)
+                this.customList = res.data.data.filter(item => item.type == 11)
 
                 // 作战标绘
                 this.attackArrowList = res.data.data.filter(item => item.type == 1)

--
Gitblit v1.9.3