zhitong.yu
8 天以前 378d781e6f35f89652aa36e079a8b7fc44cea77e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
<template>
  <el-dialog v-model="centerDialogVisible" :title="t('Warning.alarmDetails')" width="1000" align-center>
    <!-- 告警信息内容 -->
    <div style="height: 600px; box-shadow: var(--el-border-color-light) 0 0 10px">
      <el-splitter>
        <el-splitter-panel collapsible>
          <el-splitter layout="vertical">
            <el-splitter-panel collapsible size="100">
              <div class="demo-panel">
                <el-descriptions title="" :column="3" border>
                  <el-descriptions-item :label="t('Warning.type')" label-align="right" align="center">
                    {{ drawerProps.row.type }}
                  </el-descriptions-item>
                  <el-descriptions-item :label="t('Warning.name')" label-align="right" align="center">
                    {{ drawerProps.row.baoliu10 }}
                  </el-descriptions-item>
                  <el-descriptions-item :label="t('Warning.id')" label-align="right" align="center">
                    {{ drawerProps.row.objectid }}
                  </el-descriptions-item>
                  <el-descriptions-item :label="t('Warning.status')" label-align="right" align="center">
                    {{ drawerProps.row.status }}
                  </el-descriptions-item>
                  <el-descriptions-item :label="t('Warning.fenceName')" label-align="right" align="center">
                    {{ drawerProps.row.baoliu2 }}
                  </el-descriptions-item>
                  <el-descriptions-item :label="t('Config.time')" label-align="right" align="center">
                    {{ drawerProps.row.time }}
                  </el-descriptions-item>
                </el-descriptions>
              </div>
            </el-splitter-panel>
            <el-splitter-panel collapsible size="500">
              <div class="demo-panel">
                <div id="mars3dContainer" class="mars3d-container" style="height: 500px"></div>
              </div>
            </el-splitter-panel>
          </el-splitter>
        </el-splitter-panel>
      </el-splitter>
    </div>
    <template #footer>
      <div class="dialog-footer">
        <el-button type="primary" @click="centerDialogVisible = false"> {{ t("Config.close") }} </el-button>
      </div>
    </template>
  </el-dialog>
</template>
 
<script setup lang="ts" name="UserDrawer">
import { ref } from "vue";
import * as mars3d from "mars3d";
import "mars3d-space";
import "mars3d-cesium/Build/Cesium/Widgets/widgets.css";
import "mars3d/mars3d.css";
import cichu from "./images/cichu.png";
import { useI18n } from "vue-i18n";
 
const { t } = useI18n({ useScope: "global" });
 
// import { ElMessage, FormInstance } from "element-plus";
import { User } from "@/api/interface";
const centerDialogVisible = ref(false);
let map;
let graphicLayer;
 
interface DrawerProps {
  title: string;
  isView: boolean;
  row: Partial<User.ResUserList>;
  api?: (params: any) => Promise<any>;
  getTableList?: () => void;
}
 
const drawerVisible = ref(false);
const drawerProps = ref<DrawerProps>({
  isView: false,
  title: "",
  row: {}
});
 
// 接收父组件传过来的参数
const acceptParams = (params: DrawerProps) => {
  drawerProps.value = params;
  drawerVisible.value = true;
  centerDialogVisible.value = true;
  setTimeout(function () {
    const position = drawerProps.value.row.baoliu1.split(";");
    map = new mars3d.Map("mars3dContainer", {
      scene: {
        center: {
          lat: position[1],
          lng: position[0],
          alt: 100,
          heading: 360,
          pitch: -90
        }
      },
      basemaps: [
        {
          name: t("Warning.basemap.amapImage"),
          type: "group",
          layers: [
            { name: t("Warning.basemap.baseMap"), type: "gaode", layer: "img_d" },
            { name: t("Warning.basemap.annotation"), type: "gaode", layer: "img_z" }
          ]
        },
        {
          name: t("Warning.basemap.amapVector"),
          type: "gaode",
          layer: "vec"
        },
        {
          name: t("Warning.basemap.baiduImage"),
          icon: "/hxzkuwb/view/Home/img/basemaps/gaode_img.png",
          type: "group",
          layers: [
            { name: t("Warning.basemap.baseMap"), type: "baidu", layer: "img_d" },
            { name: t("Warning.basemap.annotation"), type: "baidu", layer: "img_z" }
          ]
        },
        {
          name: t("Warning.basemap.baiduVector"),
          icon: "/hxzkuwb/view/Home/img/basemaps/gaode_vec.png",
          type: "baidu",
          layer: "vec"
        },
        {
          name: t("Warning.basemap.arcgisImage"),
          icon: "/hxzkuwb/view/Home/img/basemaps/esriWorldImagery.png",
          type: "arcgis",
          layer: "img_d",
          enablePickFeatures: false,
          show: true
        }
      ]
    });
    // 创建矢量数据图层
    graphicLayer = new mars3d.layer.GraphicLayer({
      allowDrillPick: true // 如果存在坐标完全相同的图标点,可以打开该属性,click事件通过graphics判断
    });
    map.addLayer(graphicLayer);
    const graphic = new mars3d.graphic.BillboardEntity({
      position: [position[0], position[1]],
      style: {
        image: cichu,
        scale: 0.2
      }
    });
    graphicLayer.addGraphic(graphic);
    console.log(map);
  }, 100);
};
 
defineExpose({
  acceptParams
});
</script>