vehicle.vue 6.0 KB
<template>
    <div>
        <el-row>
            <el-card  style="background-color: #F5F7FA">
                <el-row>
                    <el-col :span="5">
                        <el-input v-model="queryInfo.vno" prefix-icon="el-icon-search" size="small" style="width: 200px"
                                  placeholder="车牌号" clearable>
                            <template slot="prepend">车牌号</template>
                        </el-input>
                    </el-col>
                    <el-col :offset="1" :span="12">
                        <div class="my-text-area">
                            <div class="el-input-group__prepend prepand">车牌类型</div>
                            <el-select v-model="queryInfo.vnocolor" placeholder="车牌类型" style="width: 200px" clearable>
                                <el-option label="蓝色" value="1"></el-option>
                                <el-option label="黄色" value="2"></el-option>
                                <el-option label="绿色" value="3"></el-option>
                            </el-select>
                        </div>
                    </el-col>
                    <el-col :span="3">
                        <el-button type="primary" icon="el-icon-search" size="small" @click="getList()">
                            查询
                        </el-button>
                    </el-col>
                </el-row>

            </el-card>
        </el-row>
        <div id="mapContainer" style="width: 100%; height: 500px;"></div>
    </div>
</template>
<script>
    import AMapLoader from '@amap/amap-jsapi-loader';
    import { selectVehicle } from '../../api/consigner/vehicle';

    export default {
        name: 'MapComponent',
        data() {
            return {
                mapInstance: null,
                queryInfo: {
                    vno: '',
                    vnocolor: ''
                }
            };
        },
        methods: {
            getList() {
                const _this = this;
                selectVehicle(this.queryInfo).then((response) => {
                    const res = response.data;
                    if (res.code !== '200') {
                        return _this.$message.error('获取车辆位置失败!');
                    }
                    if(res.data.data!=='' && res.data.data!=null){
                        // 获取车辆位置信息
                        const vehicle = res.data.data.firstVcl;
                        // 在获取车辆位置成功的部分,创建信息窗口或者自定义标记
                        const markerContent = document.createElement('div');
                        markerContent.innerHTML = `
                                        <div class="rounded-corner" STYLE="width: 200px;background-color: rgba(255,255,255,0.7);text-align: center">
                                            <p>车牌号:${vehicle.vno}</p >
                                            <p>已行驶距离:${vehicle.runDistance}公里</p >
                                            <p>剩余距离:${vehicle.remainDistance}公里</p >
                                        </div>
                                    `;
                        if (vehicle.lon && vehicle.lat) {
                            const lon = parseFloat(vehicle.lon) / 600000.0; // 将经度字符串转换为数值并除以 600000.0
                            const lat = parseFloat(vehicle.lat) / 600000.0; // 将纬度字符串转换为数值并除以 600000.0
                            //const coords = wgs84togcj02(lon, lat);
                            // 添加车辆位置标记
                            const marker = new AMap.Marker({
                                position: [lon, lat],
                                map: _this.mapInstance,
                                content: markerContent
                            });
                            const defaultMarker = new AMap.Marker({
                                position: [lon, lat],
                                map: _this.mapInstance,
                            });
                            // 移动地图中心到车辆位置
                            _this.mapInstance.setCenter([lon, lat]);
                            _this.$message.success('获取车辆位置成功!');
                        } else {
                            _this.$message.warning('车辆位置信息不完整!');
                        }
                    }else{
                        return _this.$message.error('无相关车辆信息返回');
                    }
                }).catch(error => {
                    _this.$message.error('获取车辆位置失败:' + error.toString());
                });
            },
            initMap() {
                AMapLoader.load({
                    key: 'fdb27c13681d084e85ff8457b5cbe540',
                    version: '2.0',
                    plugins: [], // 可以加载地图插件,比如定位、地图工具等
                }).then((AMap) => {
                    this.mapInstance = new AMap.Map('mapContainer', {
                        zoom: 10,
                        center: [116.397428, 39.90923], // 设置地图中心点
                    });
                }).catch((err) => {
                    console.error(err);
                });
            },
        },
        mounted() {
            this.initMap();
        },
    };
</script>

<style scoped>
    .my-text-area .prepand{
        float: left;
        width:89px;
        height: 28px;
        font-size: 12px;
        line-height: 28px;
    }
</style>
<style>
      .my-text-area .el-textarea__inner{
          min-height: 28px;
          height: 28px;
          border-bottom-left-radius: 0;
          border-top-left-radius: 0;
      }
      .rounded-corner {
          border-radius: 10px; /* 设置圆角的半径为10像素 */
          background-color: #f0f0f0; /* 背景颜色 */
          padding: 10px; /* 内边距 */
          margin: 10px; /* 外边距 */
          box-shadow: 0 0 5px #ddd; /* 盒子阴影效果 */
      }
</style>