123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- <script setup name="posChart">
- import { ref, reactive, shallowRef, defineProps, watch, nextTick, onActivated, defineEmits } from 'vue'
- import AMapLoader from '@amap/amap-jsapi-loader';
- import { ElMessage } from 'element-plus';
- import request from '@/api/axios.js'
- const emits = defineEmits(['rightClick'])
- const map = shallowRef(null);
- const aMap = ref(null)
- const container = ref()
- const funMapSet = (callback = (flag) => {}) => {
- AMapLoader.load({
- key:" 540080009cfdae95b6b5a4f47af24f90",
- version:"2.0",
- plugins:[''],
- }).then((AMap)=>{
- aMap.value = AMap;
- map.value = new AMap.Map(container.value,{
- viewMode:"3D",
- zoom:9,
- center:[106.065974,37.428168],
- layers: [
-
- new AMap.TileLayer.Satellite(),
-
- new AMap.TileLayer.RoadNet()
- ]
- });
- callback(true)
- }).catch(e=>{
- console.error(e);
- callback(false)
- })
- }
- const funStationPos = async () => {
- const res = await request.get('/base/station', {params: {}})
-
- if(res.code === 200){
- if(res.data && res.data.length){
- map.value.clearMap()
- res.data.forEach(item => {
- const marker = new aMap.value.Marker({
- icon: "https://webapi.amap.com/theme/v1.3/markers/n/mark_r.png",
- position: [Number(item.longitude), Number(item.latitude)],
- anchor:'bottom-center'
- });
- map.value.add(marker)
-
-
-
- marker.setLabel({
- direction:'right',
- offset: new aMap.value.Pixel(10, 0),
- content: `${item.name}`,
- });
- })
- map.value.setFitView()
- }
- }
- }
- const props = defineProps({
- windList: {
- type: Array,
- default: () => []
- },
- height: {
- type: String,
- default: '100%'
- }
- })
- const rightObj = ref(null)
- watch(() => props.windList, (val) => {
- if(val && val.length){
- map.value.clearMap()
- val.forEach(item => {
- const marker = new aMap.value.Marker({
- icon: "https://webapi.amap.com/theme/v1.3/markers/n/mark_r.png",
- position: [Number(item.longitude), Number(item.latitude)],
- anchor:'bottom-center'
- });
-
- const contextMenu = new aMap.value.ContextMenu();
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- contextMenu.addItem("功率曲线拟合", (e) => {
- console.log(rightObj.value)
-
- emits('rightClick', {
- menuIndex: 0,
- current: rightObj.value,
- })
- }, 0);
-
- contextMenu.addItem("对风偏差分析", () => {
- emits('rightClick', {
- menuIndex: 1,
- current: rightObj.value,
- })
- }, 1);
-
- contextMenu.addItem("温度与功率分析", () => {
- emits('rightClick', {
- menuIndex: 2,
- current: rightObj.value
- })
- }, 2);
- map.value.add(marker)
-
-
-
- marker.setLabel({
- direction:'right',
- offset: new aMap.value.Pixel(10, 0),
- content: `${item.name}`,
- });
-
- marker.on('rightclick', function (e) {
- rightObj.value = item
- contextMenu.open(map.value, e.lnglat);
- });
- })
- map.value.setFitView()
- setTimeout(() => {
- let zoom = map.value.getZoom()
- if(zoom > 16){
- zoom = 16
- map.value.setZoom(zoom)
- }
- },1000)
- }else{
- funStationPos()
- }
- })
- onActivated(() => {
- funMapSet(mapStatus => {
- if(!mapStatus){
- ElMessage.error('地图未加载成功, 请刷新重试或检查网络!')
- return false
- }
- funStationPos()
- })
- })
- </script>
- <template>
- <div :style="{height: props.height}">
- <div class="h-full" ref="container">
- <el-empty description="地图未加载成功, 请刷新重试或检查网络!"></el-empty>
- </div>
- </div>
- </template>
- <style scoped></style>
|