cuiqian2004
2025-10-17 68ce9382090846dc3a03a057a18a7d09f30e45e5
pages/map/scene.vue
@@ -1,7 +1,7 @@
<template>
   <view class="pages-scene">
      <view class="map-content" v-if="opSceneType =='' ">
         <image v-if="opType != 'extend'" class="img" src="/images/image 25.png" alt=" 图片" mode="aspectFit" />
         <image v-if="opType != 'extend'" class="img" src="/images/image_25.png" alt=" 图片" mode="aspectFit" />
         <image v-else class="img" :src="extendBase64Img" alt=" 图片" mode="aspectFit" />
         <view v-if="opType != 'extend'" class="space">没有找到符合条件的地图</view>
         <!-- <view class="loading-view">{{mapserverIsOk?"构图程序准备就绪":"等待构图程序就绪..."}}
@@ -29,7 +29,7 @@
            <view class="tip">请输入场景名称</view>
            <view class="name-input">
               <input ref="refInputName" :focus="true" placeholder="请输入场景名称" :value="sceneName"
                  @input="onInputName"></input>
                  @input="onInputName" />
               <uni-icons class="clear" color="#ccc" type="clear" size="20" v-if="showClearName"
                  @click="clickClearName"></uni-icons>
            </view>
@@ -43,7 +43,8 @@
         <view class="bottom-content" v-else-if="opSceneType =='scan'">
            <view class="tip">场景构建中</view>
            <view>
               请操作搬运车扫描地图覆盖的区域
               <!-- 请操作搬运车扫描地图覆盖的区域 -->
               {{mapCreatePhase}}
            </view>
            <view class="text-button-group">
@@ -51,13 +52,17 @@
            </view>
         </view>
         <view class="bottom-content" v-else-if="opSceneType =='finish'">
            <view class="tip">场景构建完成</view>
            <view>已成功构建“{{sceneName}}”</view>
            <!-- <view class="loading-view">{{saveMapIsOk?"构图保存完成":"等待构图保存完成..."}}
               <view v-if="!saveMapIsOk" class="auto-circle"></view>
            </view> !saveMapIsOk ||-->
            <view class="tip"> “{{sceneName}}”{{opType == "extend"?"场景扩展结束"+"":"场景构建结束"}}</view>
            <!--    <view> 已成功构建“{{sceneName}}”</view> -->
            <view class="loading-view">
               {{mapCreatePhase}}
               <view v-if="mapServerPhase === 4" class="auto-circle"></view>
            </view>
            <view class="text-button-group">
               <a-button type="primary" class="button" :disabled="  loading" @click="clickFinish">构建完成</a-button>
               <a-button type="primary" class="button" v-if="mapServerPhase === 6"
                  @click="clickRecreate">{{opType == "extend"?"重现扩展":"重现构建"}}</a-button>
               <a-button type="primary" class="button" v-else :disabled=" mapServerPhase !==5 || loading"
                  @click="clickFinish">{{opType == "extend"?"扩展完成":"构建完成"}}</a-button>
            </view>
         </view>
      </view>
@@ -81,13 +86,15 @@
      createScene,
      addMap,
      stopMap,
      delScene,
      //getAgvState,
      getMapLaserData,
      saveDBData,
      checkMapServerIsStart,
      startOrStopMapServer,
      checkMapServerIsOk,
      checkSaveMapIsOk,
      // checkMapServerIsStart,
      // startOrStopMapServer,
      // checkMapServerIsOk,
      // checkSaveMapIsOk,
      getMapServerPhase,
      getMapUrl
   } from "@/api/vehicle.js"
@@ -110,7 +117,7 @@
            localSceneList: [],
            positioningAgv: true,
            robotPos: {},
            mapserverIsOk: false,
            mapServerPhase: 1,
            extendBase64Img: "",
            saveMapIsOk: false,
            destroyFlag: false,
@@ -118,12 +125,28 @@
         }
      },
      computed: {
         mapCreatePhase() {
            if (this.mapServerPhase == 1) {
               return "场景构建服务:未启动"
            } else if (this.mapServerPhase == 2) {
               return "场景构建服务:启动中"
            } else if (this.mapServerPhase == 3) {
               return "场景构建中"
            } else if (this.mapServerPhase == 4) {
               return "场景构图保存中"
            } else if (this.mapServerPhase == 5) {
               return "场景构图保存成功"
            } else if (this.mapServerPhase == 6) {
               return "场景构图保存失败"
            } else
               return this.mapServerPhase
         }
      },
      watch: {
      },
      onLoad(option) {
         console.log("scene load")
         const _this = this
         this.ip = option.ip || ""
         uni.getSystemInfo({
@@ -139,7 +162,7 @@
      },
      onUnload() {
         console.log("scene unload")
      },
      onBackPress() {
@@ -209,7 +232,6 @@
         async loadData() {
            try {
               // this.loadMapServerState()
               if (this.opType == "") {
                  this.localSceneList = await this.loadLocalScene()
               } else {
@@ -217,7 +239,9 @@
                     this.opSceneType = "add_name"
                  }
                  if (this.opType == "extend") {
                     this.mapServerPhase = 1
                     await addMap(this.ip, this.sceneName, "extend")
                     this.checkMapServerPhase()
                     this.opSceneType = 'scan'
                  }
                  // if (this.opType == "extend") {
@@ -233,6 +257,7 @@
                  // }
               }
               this.refreshMapLaserData()
@@ -250,58 +275,22 @@
               return {}
            }
         },
         async loadMapServerState() {
         async checkMapServerPhase() {
            try {
               this.mapserverIsOk = false
               const res = await checkMapServerIsStart(this.ip)
               if (res) {
                  this.mapserverIsOk = true
               } else {
                  this.mapserverIsOk = false
                  const res = await startOrStopMapServer(this.ip, 1)
                  if (res) {
                     this.checkMapServerState()
               const res = await getMapServerPhase(this.ip)
               this.mapServerPhase = res || 1
               if(this.opSceneType === "finish")
               {
                  if (this.mapServerPhase === 5 || this.mapServerPhase === 6) {
                     this.saveMapIsOk = true
                     return
                  }
               }
               setTimeout(this.checkMapServerPhase, 1000);
            } catch (ex) {
               showError(ex)
            }
         },
         async checkMapServerState() {
            try {
               const res = await checkMapServerIsOk(this.ip)
               if (res) {
                  this.mapserverIsOk = true
               } else {
                  this.mapserverIsOk = false
                  setTimeout(this.checkMapServerState, 1000);
               }
            } catch (ex) {
               showError(ex).then((res) => {
                  setTimeout(this.checkMapServerState, 1000);
               })
            }
         },
         async checkSaveMapState() {
            try {
               const res = await checkSaveMapIsOk(this.ip)
               if (res) {
                  this.saveMapIsOk = true
               } else {
                  this.saveMapIsOk = false
                  setTimeout(this.checkSaveMapState, 1000);
               }
            } catch (ex) {
               showError(ex).then((res) => {
                  setTimeout(this.checkSaveMapState, 1000);
               })
               showToast(ex)
               setTimeout(this.checkMapServerPhase, 1000);
            }
         },
@@ -360,7 +349,7 @@
               }
            } else if (param.method == "cancel_positioning_agv") {
               this.positioningAgv = false
               //this.positioningAgv = false
            } else if (param.method == "show_log") {
               const listLog = session.getValue("request_log") || []
               listLog.unshift(param.data)
@@ -379,8 +368,11 @@
         },
         async clickStartConstructScene() {
            try {
               this.mapId = ""
               if (this.opType == "extend") {
                  this.mapServerPhase = 1
                  await addMap(this.ip, this.sceneName, "extend")
                  this.checkMapServerPhase()
                  this.opSceneType = 'scan'
               } else {
                  this.opSceneType = "add_name"
@@ -434,9 +426,11 @@
               this.sceneName = name
               await createScene(this.ip, name, 1)
               await addMap(this.ip, name)
               this.checkMapServerPhase()
               uni.showLoading({
                  title: "开始扫描地图"
               })
               this.mapId = ""
               this.opSceneType = 'scan'
@@ -472,22 +466,22 @@
               })
               this.saveMapIsOk = false
               await stopMap(this.ip, this.sceneName)
               // await startOrStopMapServer(this.ip, 2)
               // this.checkSaveMapState();
               if (this.opType == "extend") {
                  this.opSceneType = ""
                  const eventChannel = this.getOpenerEventChannel();
                  eventChannel.emit('create_finish', this.sceneName);
                  uni.navigateBack({
                     delta: 1, //返回层数,2则上上页
                  })
               }
               //this.mapServerPhase = 4
               //this.checkMapServerPhase();
               // if (this.opType == "extend") {
               //    this.opSceneType = ""
               //    const eventChannel = this.getOpenerEventChannel();
               //    eventChannel.emit('create_finish', this.sceneName);
               //    uni.navigateBack({
               //       delta: 1, //返回层数,2则上上页
               //    })
               // }
            } catch (ex) {
               console.log(ex)
               showModal("请检查车辆连接,并重新开始构建场景", "场景构建失败", false, "确定").then((res) => {
                  this.opSceneType = ''
                  // this.loadMapServerState()
               })
            } finally {
               this.loading = false
@@ -514,15 +508,34 @@
               this.loading = false
               uni.hideLoading()
            }
         },
         async clickRecreate() {
            try {
               if (this.opType == "extend") {
                  this.mapServerPhase = 1
                  await addMap(this.ip, this.sceneName, "extend")
                  this.checkMapServerPhase()
                  this.opSceneType = 'scan'
               } else {
                  this.mapServerPhase = 1
                  await delScene(this.ip, this.sceneName)
                  await createScene(this.ip, this.sceneName, 1)
                  await addMap(this.ip, this.sceneName)
                  this.checkMapServerPhase()
                  this.opSceneType = 'scan'
               }
            } catch (ex) {
               console.log(ex)
            }
         },
         async loadMapLaserData() {
            try {
               const info = await getMapLaserData(this.ip, this.mapId)
               return info
            } catch (ex) {
               showError(ex)
               showToast(ex)
               return {}
            }
         },
@@ -531,15 +544,15 @@
               if (this.opSceneType === "scan") {
                  const data = await this.loadMapLaserData()
                  const listCtrData = []
                  let newMap = false
                  if (data.base_map?.image_base64) {
                     this.robotPos = {}
                     newMap = true
                     const mapData = data.base_map.image_base64  //this.mapId ?"terdy":
                     const mapData = data.base_map.image_base64 //this.mapId ?"terdy":
                     this.mapId = data.base_map.map_id
                     listCtrData.push({
                        method: "background",
                        param: {
@@ -554,7 +567,11 @@
                           filedata: mapData
                        }
                     })
                     listCtrData.push({
                        method: "point_trajectory",
                        param: data.base_map.trajectoryPoints ||
                        [] //[ [[2,2],[6,2],[10,2],[14,2],[18,2],[2,6],[2,10],[2,14],[2,18],]
                     })
                  }
@@ -562,6 +579,8 @@
                     method: "point_cloud",
                     param: data.point_cloud
                  })
                  if (data.robot_pose) {
                     listCtrData.push({
                        method: "agv_laser",
@@ -588,6 +607,7 @@
                           })
                        }
                     }
                  }
                  // console.log("ctxDataStr",listCtrData.length)
                  this.ctxDataStr = JSON.stringify(listCtrData)
@@ -598,6 +618,7 @@
                     }
                  }
               }
               setTimeout(this.refreshMapLaserData, 1000);
            } catch (ex) {
               showToast(ex)