模型压平
This commit is contained in:
		
							
								
								
									
										16
									
								
								src/renderer/src/api/setting/auth.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/renderer/src/api/setting/auth.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,16 @@
 | 
			
		||||
//授权
 | 
			
		||||
import request from '@/axios/request'
 | 
			
		||||
export const AuthApi = {
 | 
			
		||||
  // 查看授权信息
 | 
			
		||||
  showAuth: async () => {
 | 
			
		||||
    return await request.get({
 | 
			
		||||
      url: `/auth/show`
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  //获取系统授权码
 | 
			
		||||
  authInfo: async () => {
 | 
			
		||||
    return await request.get({
 | 
			
		||||
      url: `/auth/info`
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
@ -10,14 +10,14 @@ import type {
 | 
			
		||||
const pendingRequests = new Map<string, AbortController>()
 | 
			
		||||
let baseURL: any
 | 
			
		||||
if (window && window.process && window.process.type === 'renderer') {
 | 
			
		||||
  baseURL = localStorage.getItem('ip') ||'http://192.168.110.25:8848'|| 'http://127.0.0.1:8808'
 | 
			
		||||
  baseURL = localStorage.getItem('ip') || 'http://192.168.110.25:8848' || 'http://127.0.0.1:8808'
 | 
			
		||||
} else {
 | 
			
		||||
  baseURL = ''
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 创建自定义配置的axios实例
 | 
			
		||||
const service: AxiosInstance = axios.create({
 | 
			
		||||
  baseURL:'http://192.168.110.25:8848',
 | 
			
		||||
  baseURL: 'http://192.168.110.25:8848',
 | 
			
		||||
  timeout: 10000,
 | 
			
		||||
  headers: {
 | 
			
		||||
    'Content-Type': 'application/json',
 | 
			
		||||
@ -49,10 +49,10 @@ service.interceptors.request.use(
 | 
			
		||||
 | 
			
		||||
    // 在这里添加认证token
 | 
			
		||||
    const token = localStorage.getItem('Authorization')
 | 
			
		||||
console.log("localStorage.getItem('Authorization')",token);
 | 
			
		||||
    console.log("localStorage.getItem('Authorization')", token);
 | 
			
		||||
 | 
			
		||||
    if (token && config.headers) {
 | 
			
		||||
      // Bearer 
 | 
			
		||||
      // Bearer
 | 
			
		||||
      config.headers.Authorization = `${token}`
 | 
			
		||||
    }
 | 
			
		||||
    return config
 | 
			
		||||
@ -67,18 +67,18 @@ service.interceptors.response.use(
 | 
			
		||||
  (response: AxiosResponse) => {
 | 
			
		||||
    const key = getRequestKey(response.config)
 | 
			
		||||
    pendingRequests.delete(key)
 | 
			
		||||
console.log(response);
 | 
			
		||||
    console.log(response);
 | 
			
		||||
 | 
			
		||||
    // 统一处理HTTP状态码
 | 
			
		||||
    if (response.status === 200) {
 | 
			
		||||
      if ([0,200].includes(response.data.code)) {
 | 
			
		||||
      if ([0, 200].includes(response.data.code)) {
 | 
			
		||||
        return response
 | 
			
		||||
      }
 | 
			
		||||
      if (response.data.code==401) {
 | 
			
		||||
      if (response.data.code == 401) {
 | 
			
		||||
        router.push('/')
 | 
			
		||||
        localStorage.removeItem('Authorization')
 | 
			
		||||
      }
 | 
			
		||||
      if (![0,200].includes(response.data.code)) {
 | 
			
		||||
      if (![0, 200].includes(response.data.code)) {
 | 
			
		||||
        ElMessage({
 | 
			
		||||
          message: response.data.msg || response.data.message,
 | 
			
		||||
          type: 'error'
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <el-upload
 | 
			
		||||
    :action="action"
 | 
			
		||||
    :action="uploadUrl()"
 | 
			
		||||
    :headers="headers"
 | 
			
		||||
    :data="data"
 | 
			
		||||
    :show-file-list="false"
 | 
			
		||||
@ -39,12 +39,19 @@ const props = defineProps({
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
const headers = ref({
 | 
			
		||||
  Authorization: 'Bearer ' + localStorage.getItem('access_token')
 | 
			
		||||
  // Authorization: 'Bearer ' + localStorage.getItem('access_token')
 | 
			
		||||
  Authorization: localStorage.getItem('Authorization')
 | 
			
		||||
})
 | 
			
		||||
const action = ref('')
 | 
			
		||||
// const action = ref('')
 | 
			
		||||
// 上传状态
 | 
			
		||||
const isUploading = ref(false)
 | 
			
		||||
 | 
			
		||||
// 上传地址
 | 
			
		||||
const uploadUrl = () => {
 | 
			
		||||
  //process.env.BASE_API +
 | 
			
		||||
  console.log(process.env.BASE_API, 'yyyyy')
 | 
			
		||||
  let url = 'http://192.168.110.25:8848' + '/yjearth4.0/api/v1/auth/import'
 | 
			
		||||
  return url
 | 
			
		||||
}
 | 
			
		||||
// 上传前处理
 | 
			
		||||
const handleBeforeUpload = (file: File) => {
 | 
			
		||||
  // 检查文件大小
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								src/renderer/src/icons/svg/add.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								src/renderer/src/icons/svg/add.svg
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
		 After Width: | Height: | Size: 13 KiB  | 
@ -28,3 +28,4 @@ export const $recvElectronChanel = (chanel: any, cb: any) => {
 | 
			
		||||
  ipcRenderer.once(chanel, cb);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -43,6 +43,7 @@
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
import { useI18n } from 'vue-i18n'
 | 
			
		||||
import uploadFiles from '@/components/upload/uploadFiles.vue'
 | 
			
		||||
import { AuthApi } from '@/api/setting/auth.ts'
 | 
			
		||||
const { t } = useI18n()
 | 
			
		||||
const authInfo = ref({
 | 
			
		||||
  license_code: '',
 | 
			
		||||
@ -53,6 +54,18 @@ const authInfo = ref({
 | 
			
		||||
  auth_type: '无', //授权时间
 | 
			
		||||
  message: '' //
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
const getAuthInfo = async () => {
 | 
			
		||||
  const res = await AuthApi.showAuth()
 | 
			
		||||
  console.log(res, 'resres')
 | 
			
		||||
}
 | 
			
		||||
const getAuthCode = async () => {
 | 
			
		||||
  const res = await AuthApi.authInfo()
 | 
			
		||||
  authInfo.value.license_code = res.data
 | 
			
		||||
  console.log(res, 'resres22')
 | 
			
		||||
}
 | 
			
		||||
getAuthInfo()
 | 
			
		||||
getAuthCode()
 | 
			
		||||
//复制
 | 
			
		||||
const copy = () => {
 | 
			
		||||
  console.log(1111111)
 | 
			
		||||
 | 
			
		||||
@ -23,13 +23,17 @@ import { useTreeNode } from '../tree/hooks/treeNode'
 | 
			
		||||
import { TreeApi } from '@/api/tree'
 | 
			
		||||
import { renderMethods } from '../tree/hooks/renderTreeNode'
 | 
			
		||||
import { processBase64Images, combineBase64Images } from '@/utils/HighDefinitionScreenshot'
 | 
			
		||||
import { $sendElectronChanel, $recvElectronChanel } from '@/utils/communication'
 | 
			
		||||
import { ElMessage } from 'element-plus'
 | 
			
		||||
import {
 | 
			
		||||
  $sendElectronChanel,
 | 
			
		||||
  $recvElectronChanel,
 | 
			
		||||
  $changeComponentShow
 | 
			
		||||
} from '@/utils/communication'
 | 
			
		||||
import { ElMessage, ElLoading } from 'element-plus'
 | 
			
		||||
import dayjs from 'dayjs'
 | 
			
		||||
import fs from 'fs'
 | 
			
		||||
const { proxy } = getCurrentInstance()
 | 
			
		||||
const { t } = useI18n()
 | 
			
		||||
const { findParentId, findTreeIndex, cusAddNodes } = useTreeNode()
 | 
			
		||||
const fs = require('fs')
 | 
			
		||||
const obj = ref(null)
 | 
			
		||||
const isclick = ref(false)
 | 
			
		||||
const eventBus = inject('bus')
 | 
			
		||||
@ -46,6 +50,21 @@ var graffitiObjArr = reactive([])
 | 
			
		||||
eventBus.on('graffitiObj', (data) => {
 | 
			
		||||
  graffitiObjArr.push(data)
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
function openLoading(
 | 
			
		||||
  text = '拼命加载中...',
 | 
			
		||||
  option = {
 | 
			
		||||
    fullscreen: true,
 | 
			
		||||
    background: 'rgba(0,0,0,0.63)',
 | 
			
		||||
    lock: true
 | 
			
		||||
    // spinner: 'el-icon-loading'
 | 
			
		||||
  }
 | 
			
		||||
) {
 | 
			
		||||
  option.text = text
 | 
			
		||||
  let loadingInstance = ElLoading.service(option)
 | 
			
		||||
  return loadingInstance
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const methodMap = {
 | 
			
		||||
  // 轨迹运动
 | 
			
		||||
  trajectoryMotion: () => {
 | 
			
		||||
@ -238,7 +257,6 @@ const methodMap = {
 | 
			
		||||
  async screenShot() {
 | 
			
		||||
    function downloadScreen(res) {
 | 
			
		||||
      let base64 = res.replace(/^data:image\/\w+;base64,/, '')
 | 
			
		||||
      console.log('base64', base64)
 | 
			
		||||
      let dataBuffer = new Buffer(base64, 'base64')
 | 
			
		||||
      $sendElectronChanel('saveFile', {
 | 
			
		||||
        title: '保存图片',
 | 
			
		||||
@ -246,10 +264,7 @@ const methodMap = {
 | 
			
		||||
        filters: [{ name: '保存图片', extensions: ['jpg'] }]
 | 
			
		||||
      })
 | 
			
		||||
      $recvElectronChanel('selectedFileItem', (e, path) => {
 | 
			
		||||
        console.log('path', fs.writeFile)
 | 
			
		||||
        fs.writeFile(path, dataBuffer, (res) => {
 | 
			
		||||
          console.log(res)
 | 
			
		||||
        })
 | 
			
		||||
        fs.writeFile(path, dataBuffer, (res) => {})
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -302,18 +317,10 @@ const methodMap = {
 | 
			
		||||
    clickChange.videoRecord = !clickChange.videoRecord
 | 
			
		||||
 | 
			
		||||
    let time = 3
 | 
			
		||||
    this.$changeComponentShow('#secondMenu', false)
 | 
			
		||||
    // const onKeyDown = (e) => {
 | 
			
		||||
 | 
			
		||||
    //   if (e.keyCode === 27) {
 | 
			
		||||
    //     item.status = !item.status;
 | 
			
		||||
    //     $sendElectronChanel("endRecoder");
 | 
			
		||||
    //     document.removeEventListener("keydown", onKeyDown);
 | 
			
		||||
    //   }
 | 
			
		||||
    // };
 | 
			
		||||
    $changeComponentShow('#secondMenu', false)
 | 
			
		||||
    if (clickChange.videoRecord) {
 | 
			
		||||
      // document.addEventListener("keydown", onKeyDown);
 | 
			
		||||
      let loading = $root_home.openLoading(time, {
 | 
			
		||||
      let loading = openLoading(time, {
 | 
			
		||||
        background: 'rgba(0,0,0,0)',
 | 
			
		||||
        fullscreen: false,
 | 
			
		||||
        customClass: 'timer'
 | 
			
		||||
@ -328,7 +335,6 @@ const methodMap = {
 | 
			
		||||
        if (time == -1) {
 | 
			
		||||
          clearInterval(timer)
 | 
			
		||||
          loading.close()
 | 
			
		||||
          console.log('开始了')
 | 
			
		||||
          p.remove()
 | 
			
		||||
          $sendElectronChanel('startRecoder')
 | 
			
		||||
        }
 | 
			
		||||
@ -341,7 +347,76 @@ const methodMap = {
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  //压模
 | 
			
		||||
  pressModel() {},
 | 
			
		||||
  pressModel() {
 | 
			
		||||
    // if (window.checkAuthIsValid) {
 | 
			
		||||
    let selectedNode = window.treeObj.getSelectedNodes()[0]
 | 
			
		||||
    if (selectedNode) {
 | 
			
		||||
      let isTileset = ['bim', 'tileset'].includes(selectedNode.sourceType)
 | 
			
		||||
      if (!isTileset) {
 | 
			
		||||
        ElMessage({
 | 
			
		||||
          message: '请在图层指挥舱选中对应模型进行操作',
 | 
			
		||||
          type: 'warning'
 | 
			
		||||
        })
 | 
			
		||||
        return
 | 
			
		||||
      }
 | 
			
		||||
      // let source_id = this.$md5(new Date().getTime() + '压平面')
 | 
			
		||||
 | 
			
		||||
      let draw = new YJ.Draw.DrawPolygon(window.earth)
 | 
			
		||||
      draw.start((err, params) => {
 | 
			
		||||
        if (params.length > 2) {
 | 
			
		||||
          if (err) throw err
 | 
			
		||||
          let alt = params[0].alt
 | 
			
		||||
          params.forEach((item) => {
 | 
			
		||||
            if (item.alt < alt) alt = item.alt
 | 
			
		||||
          })
 | 
			
		||||
 | 
			
		||||
          //获取节点树对象
 | 
			
		||||
 | 
			
		||||
          let entity = window.earth.entityMap.get(selectedNode.id).entity
 | 
			
		||||
 | 
			
		||||
          let flat = new YJ.Analysis.Flat(window.earth, entity, {
 | 
			
		||||
            positions: params
 | 
			
		||||
          })
 | 
			
		||||
          let detailOption = {
 | 
			
		||||
            // modleId: selectedNode.id,
 | 
			
		||||
            modelId: selectedNode.id,
 | 
			
		||||
            positions: params,
 | 
			
		||||
            height: flat.height
 | 
			
		||||
          }
 | 
			
		||||
          let id = new YJ.Tools().randomString()
 | 
			
		||||
          let paramsData = {
 | 
			
		||||
            params: detailOption,
 | 
			
		||||
            id,
 | 
			
		||||
            sourceName: '压平面',
 | 
			
		||||
            sourceType: 'pressModel',
 | 
			
		||||
            // parentId:
 | 
			
		||||
            //   selectedNode.sourceType == 'directory' ? selectedNode.id : selectedNode.parentId
 | 
			
		||||
            parentId: selectedNode.id
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          TreeApi.addOtherSource(paramsData)
 | 
			
		||||
          paramsData.isShow = true
 | 
			
		||||
          paramsData.params = JSON.stringify(paramsData.params)
 | 
			
		||||
          pressModelMap.set(id + '_' + selectedNode.id, paramsData)
 | 
			
		||||
          window.pressModelEntities.set(id, flat)
 | 
			
		||||
          cusAddNodes(window.treeObj, paramsData.parentId, [paramsData])
 | 
			
		||||
          // //鼠标右键点击事件
 | 
			
		||||
          flat.onRightClick = () => {}
 | 
			
		||||
          // _entityMap.set(node.source_id, flat)
 | 
			
		||||
        } else {
 | 
			
		||||
          // this.$message.warning('至少三个点')
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    } else {
 | 
			
		||||
      // this.$message.warning('请在图层指挥舱选中对应模型进行操作!')
 | 
			
		||||
    }
 | 
			
		||||
    // } else {
 | 
			
		||||
    //   this.$message({
 | 
			
		||||
    //     message: '您没有该功能的权限',
 | 
			
		||||
    //     type: 'warning'
 | 
			
		||||
    //   })
 | 
			
		||||
    // }
 | 
			
		||||
  },
 | 
			
		||||
  //地形开挖
 | 
			
		||||
  terrainDig() {
 | 
			
		||||
    // if (window.checkAuthIsValid) {
 | 
			
		||||
 | 
			
		||||
@ -16,14 +16,24 @@
 | 
			
		||||
            <div class="row">
 | 
			
		||||
              <div class="col" style="flex: 0 0 58%">
 | 
			
		||||
                <span class="label">经度</span>
 | 
			
		||||
                <input class="input" type="number" v-model="longitude" />
 | 
			
		||||
                <input
 | 
			
		||||
                  class="input"
 | 
			
		||||
                  type="number"
 | 
			
		||||
                  placeholder="请输入坐标点经度数值"
 | 
			
		||||
                  v-model="longitude"
 | 
			
		||||
                />
 | 
			
		||||
              </div>
 | 
			
		||||
              <div class="col"></div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="row">
 | 
			
		||||
              <div class="col" style="flex: 0 0 58%">
 | 
			
		||||
                <span class="label">纬度</span>
 | 
			
		||||
                <input class="input" type="number" v-model="latitude" />
 | 
			
		||||
                <input
 | 
			
		||||
                  class="input"
 | 
			
		||||
                  type="number"
 | 
			
		||||
                  placeholder="请输入坐标点纬度数值"
 | 
			
		||||
                  v-model="latitude"
 | 
			
		||||
                />
 | 
			
		||||
              </div>
 | 
			
		||||
              <div class="col"></div>
 | 
			
		||||
            </div>
 | 
			
		||||
@ -42,9 +52,9 @@
 | 
			
		||||
            <div class="row">
 | 
			
		||||
              <div class="col" style="flex: 0 0 78%">
 | 
			
		||||
                <span class="label">经度</span>
 | 
			
		||||
                <input class="input" type="number" v-model="longitude" />
 | 
			
		||||
                <input class="input" type="number" placeholder="请输入内容" v-model="longitude" />
 | 
			
		||||
                <span class="label2">度</span>
 | 
			
		||||
                <input class="input" type="number" v-model="lngMin" />
 | 
			
		||||
                <input class="input" type="number" placeholder="请输入内容" v-model="lngMin" />
 | 
			
		||||
                <span class="label2">分</span>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div class="col"></div>
 | 
			
		||||
@ -52,9 +62,9 @@
 | 
			
		||||
            <div class="row">
 | 
			
		||||
              <div class="col" style="flex: 0 0 78%">
 | 
			
		||||
                <span class="label">纬度</span>
 | 
			
		||||
                <input class="input" type="number" v-model="latitude" />
 | 
			
		||||
                <input class="input" type="number" placeholder="请输入内容" v-model="latitude" />
 | 
			
		||||
                <span class="label2">度</span>
 | 
			
		||||
                <input class="input" type="number" v-model="latMin" />
 | 
			
		||||
                <input class="input" type="number" placeholder="请输入内容" v-model="latMin" />
 | 
			
		||||
                <span class="label2">分</span>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div class="col"></div>
 | 
			
		||||
@ -74,11 +84,11 @@
 | 
			
		||||
            <div class="row">
 | 
			
		||||
              <div class="col" style="flex: 0 0 90%">
 | 
			
		||||
                <span class="label">经度</span>
 | 
			
		||||
                <input class="input" type="number" v-model="longitude" />
 | 
			
		||||
                <input class="input" type="number" placeholder="请输入内容" v-model="longitude" />
 | 
			
		||||
                <span class="label2">度</span>
 | 
			
		||||
                <input class="input" type="number" v-model="lngMin" />
 | 
			
		||||
                <input class="input" type="number" placeholder="请输入内容" v-model="lngMin" />
 | 
			
		||||
                <span class="label2">分</span>
 | 
			
		||||
                <input class="input" type="number" v-model="lngSec" />
 | 
			
		||||
                <input class="input" type="number" placeholder="请输入内容" v-model="lngSec" />
 | 
			
		||||
                <span class="label2">秒</span>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div class="col"></div>
 | 
			
		||||
@ -86,11 +96,11 @@
 | 
			
		||||
            <div class="row">
 | 
			
		||||
              <div class="col" style="flex: 0 0 90%">
 | 
			
		||||
                <span class="label">纬度</span>
 | 
			
		||||
                <input class="input" type="number" v-model="latitude" />
 | 
			
		||||
                <input class="input" type="number" placeholder="请输入内容" v-model="latitude" />
 | 
			
		||||
                <span class="label2">度</span>
 | 
			
		||||
                <input class="input" type="number" v-model="latMin" />
 | 
			
		||||
                <input class="input" type="number" placeholder="请输入内容" v-model="latMin" />
 | 
			
		||||
                <span class="label2">分</span>
 | 
			
		||||
                <input class="input" type="number" v-model="latSec" />
 | 
			
		||||
                <input class="input" type="number" placeholder="请输入内容" v-model="latSec" />
 | 
			
		||||
                <span class="label2">秒</span>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div class="col"></div>
 | 
			
		||||
@ -107,8 +117,8 @@
 | 
			
		||||
      </el-tabs>
 | 
			
		||||
    </template>
 | 
			
		||||
    <template #footer>
 | 
			
		||||
      <button @click="draw">确定</button>
 | 
			
		||||
      <button @click="close">取消</button>
 | 
			
		||||
      <!-- <button @click="draw">确定</button> -->
 | 
			
		||||
      <button @click="close">关闭</button>
 | 
			
		||||
    </template>
 | 
			
		||||
  </Dialog>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
@ -18,7 +18,7 @@
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="div-item item" data-type="0">
 | 
			
		||||
      <div class="div-item item" data-type="0" v-show="isShowing">
 | 
			
		||||
        <span class="custom-divider"></span>
 | 
			
		||||
        <p style="font-size: 16px; padding-bottom: 6px; margin-top: 10px; margin-bottom: 5px">
 | 
			
		||||
          <span style="margin-right: 10px">度</span>
 | 
			
		||||
@ -49,7 +49,7 @@
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="div-item item" data-type="1">
 | 
			
		||||
      <div class="div-item item" data-type="1" v-show="isShowing">
 | 
			
		||||
        <span class="custom-divider"></span>
 | 
			
		||||
        <p style="font-size: 16px; padding-bottom: 6px; margin-top: 10px; margin-bottom: 5px">
 | 
			
		||||
          <span style="margin-right: 10px">度分</span>
 | 
			
		||||
@ -124,7 +124,7 @@
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="div-item item" data-type="2">
 | 
			
		||||
      <div class="div-item item" data-type="2" v-show="isShowing">
 | 
			
		||||
        <span class="custom-divider"></span>
 | 
			
		||||
        <p style="font-size: 16px; padding-bottom: 6px; margin-top: 10px; margin-bottom: 5px">
 | 
			
		||||
          <span style="margin-right: 10px">度分秒</span>
 | 
			
		||||
@ -238,6 +238,7 @@ const baseDialog: any = ref(null)
 | 
			
		||||
const eventBus: any = inject('bus')
 | 
			
		||||
 | 
			
		||||
var status1: any = ref(false)
 | 
			
		||||
var isShowing: any = ref(false)
 | 
			
		||||
var tools: any = reactive([])
 | 
			
		||||
eventBus.on('projConvertDialog', () => {
 | 
			
		||||
  baseDialog.value?.open()
 | 
			
		||||
@ -250,8 +251,9 @@ eventBus.on('projConvertDialog', () => {
 | 
			
		||||
    tools = new YJ.Tools(window.earth)
 | 
			
		||||
    tools.projConvert(status1.value, () => {
 | 
			
		||||
      status1.value = false
 | 
			
		||||
      isShowing.value = true
 | 
			
		||||
    })
 | 
			
		||||
  }, 100)
 | 
			
		||||
  }, 10)
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
const closeCallBack = (e) => {
 | 
			
		||||
 | 
			
		||||
@ -1,12 +1,21 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <Dialog ref="baseDialog" title="路径规划" left="180px" top="100px" :closeCallback="closeCallBack">
 | 
			
		||||
  <Dialog
 | 
			
		||||
    ref="baseDialog"
 | 
			
		||||
    class="RoutePlanning"
 | 
			
		||||
    title="路径规划"
 | 
			
		||||
    left="180px"
 | 
			
		||||
    top="100px"
 | 
			
		||||
    :closeCallback="closeCallBack"
 | 
			
		||||
  >
 | 
			
		||||
    <template #content>
 | 
			
		||||
      <div class="row" style="align-items: flex-start">
 | 
			
		||||
        <div class="col start-col">
 | 
			
		||||
          <span class="label">起点</span>
 | 
			
		||||
          <input class="input" type="number" title="" min="-180" max="180" @model="startLng" />
 | 
			
		||||
          <input class="input" type="number" title="" min="-90" max="90" @model="startLat" />
 | 
			
		||||
          <button @click="pickStartPos" style="margin-left: 10px">拾取</button>
 | 
			
		||||
          <button class="crossPoint">
 | 
			
		||||
            <svg-icon name="add" :size="16" color="rgba(255, 255, 255, 1)"></svg-icon> 途径点
 | 
			
		||||
          </button>
 | 
			
		||||
          <button style="margin-left: 10px">
 | 
			
		||||
            <svg-icon name="add" :size="16" color="rgba(255, 255, 255, 1)"></svg-icon>避让点
 | 
			
		||||
          </button>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="row" style="align-items: flex-start">
 | 
			
		||||
@ -41,7 +50,6 @@ var endLat: any = ref(null)
 | 
			
		||||
var routePlanning: any = reactive([])
 | 
			
		||||
eventBus.on('routePlanningDialog', () => {
 | 
			
		||||
  baseDialog.value?.open()
 | 
			
		||||
  routePlanning = new YJ.Obj.RoutePlanning(window.earth, { gps: true })
 | 
			
		||||
})
 | 
			
		||||
const closeCallBack = (e) => {}
 | 
			
		||||
 | 
			
		||||
@ -52,13 +60,19 @@ const draw = (e) => {}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
.YJ-custom-base-dialog > .content {
 | 
			
		||||
::v-deep .RoutePlanning > .content {
 | 
			
		||||
  width: 460px;
 | 
			
		||||
}
 | 
			
		||||
.YJ-custom-base-dialog > .content > div > .row .col {
 | 
			
		||||
::v-deep .RoutePlanning > .content > div > .row .col {
 | 
			
		||||
  margin: 0 10px;
 | 
			
		||||
}
 | 
			
		||||
.YJ-custom-base-dialog > .content .row .label {
 | 
			
		||||
::v-deep .RoutePlanning > .content .row .label {
 | 
			
		||||
  flex: auto;
 | 
			
		||||
}
 | 
			
		||||
.crossPoint:hover {
 | 
			
		||||
  color: rgba(var(--color-sdk-base-rgb), 1);
 | 
			
		||||
}
 | 
			
		||||
.crossPoint:hover {
 | 
			
		||||
  color: rgba(var(--color-sdk-base-rgb), 1);
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										99
									
								
								src/renderer/src/views/components/propertyBox/flat.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								src/renderer/src/views/components/propertyBox/flat.vue
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,99 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <Dialog
 | 
			
		||||
    ref="baseDialog"
 | 
			
		||||
    title="压平面属性"
 | 
			
		||||
    class="flatPlane"
 | 
			
		||||
    left="180px"
 | 
			
		||||
    top="100px"
 | 
			
		||||
    :closeCallback="closeCallBack"
 | 
			
		||||
  >
 | 
			
		||||
    <template #content>
 | 
			
		||||
      <span class="custom-divider"></span>
 | 
			
		||||
      <div class="div-item">
 | 
			
		||||
        <div class="row">
 | 
			
		||||
          <div class="col">
 | 
			
		||||
            <span class="label" style="width: 56px; flex: 0 0 56px">名称</span>
 | 
			
		||||
            <input class="input input-name" />
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="row">
 | 
			
		||||
          <div class="col">
 | 
			
		||||
            <span class="label" style="width: 56px; flex: 0 0 56px">压平高度</span>
 | 
			
		||||
            <div class="input-number input-number-unit-1">
 | 
			
		||||
              <input
 | 
			
		||||
                class="input flat-height"
 | 
			
		||||
                type="number"
 | 
			
		||||
                title=""
 | 
			
		||||
                min="-9999999"
 | 
			
		||||
                max="999999999"
 | 
			
		||||
              />
 | 
			
		||||
              <span class="unit">m</span>
 | 
			
		||||
              <span class="arrow"></span>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </template>
 | 
			
		||||
    <template #footer>
 | 
			
		||||
      <button @click="sure">确认</button>
 | 
			
		||||
      <button @click="close">关闭</button>
 | 
			
		||||
    </template>
 | 
			
		||||
  </Dialog>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
import { ref, reactive } from 'vue'
 | 
			
		||||
import { inject } from 'vue'
 | 
			
		||||
import Dialog from '@/components/dialog/baseDialog.vue'
 | 
			
		||||
import { TreeApi } from '@/api/tree'
 | 
			
		||||
import { useTreeNode } from '@/views/components/tree/hooks/treeNode'
 | 
			
		||||
 | 
			
		||||
const { cusUpdateNode } = useTreeNode()
 | 
			
		||||
 | 
			
		||||
const baseDialog: any = ref(null)
 | 
			
		||||
const eventBus: any = inject('bus')
 | 
			
		||||
 | 
			
		||||
var flat: any = reactive([])
 | 
			
		||||
var flatMsg: any = reactive([])
 | 
			
		||||
eventBus.on('flatDialog', (id) => {
 | 
			
		||||
  baseDialog.value?.open()
 | 
			
		||||
})
 | 
			
		||||
const open = (data) => {
 | 
			
		||||
  baseDialog.value?.open()
 | 
			
		||||
  flat = window.pressModelEntities.get(data.id)
 | 
			
		||||
 | 
			
		||||
  let params = JSON.parse(data.params)
 | 
			
		||||
  flatMsg = pressModelMap.get(data.id + '_' + params.modelId)
 | 
			
		||||
  setTimeout(() => {
 | 
			
		||||
    flat.edit(true)
 | 
			
		||||
  }, 100)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const closeCallBack = (e) => {}
 | 
			
		||||
const sure = (e) => {
 | 
			
		||||
  let paramsData = JSON.parse(flatMsg.params)
 | 
			
		||||
  paramsData.height = flat.height
 | 
			
		||||
  let params = {
 | 
			
		||||
    id: flatMsg.id,
 | 
			
		||||
    sourceName: flat.name,
 | 
			
		||||
    params: paramsData,
 | 
			
		||||
    isShow: flatMsg.isShow ? 1 : 0
 | 
			
		||||
  }
 | 
			
		||||
  TreeApi.updateDirectoryInfo(params)
 | 
			
		||||
  cusUpdateNode({
 | 
			
		||||
    id: params.id,
 | 
			
		||||
    sourceName: params.sourceName,
 | 
			
		||||
    params: JSON.stringify(paramsData)
 | 
			
		||||
  })
 | 
			
		||||
  baseDialog.value?.close()
 | 
			
		||||
}
 | 
			
		||||
const close = (e) => {
 | 
			
		||||
  flat.reset()
 | 
			
		||||
  baseDialog.value?.close()
 | 
			
		||||
}
 | 
			
		||||
defineExpose({
 | 
			
		||||
  open
 | 
			
		||||
})
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="scss"></style>
 | 
			
		||||
@ -28,9 +28,13 @@ export const useRightOperate = () => {
 | 
			
		||||
  const editNode = (eventBus) => {
 | 
			
		||||
    let selectNodes = getSelectedNodes(window.treeObj);
 | 
			
		||||
    if (selectNodes && selectNodes[selectNodes.length - 1]) {
 | 
			
		||||
      console.log('------------------',selectNodes[selectNodes.length - 1].params)
 | 
			
		||||
      console.log('------------------', selectNodes[selectNodes.length - 1].params)
 | 
			
		||||
      let params = JSON.parse(selectNodes[selectNodes.length - 1].params)
 | 
			
		||||
      eventBus.emit("openDialog", selectNodes[selectNodes.length - 1].sourceType, params.id);
 | 
			
		||||
      if (selectNodes[selectNodes.length - 1].sourceType == 'pressModel') {
 | 
			
		||||
        eventBus.emit("openDialog", selectNodes[selectNodes.length - 1].sourceType, selectNodes[selectNodes.length - 1]);
 | 
			
		||||
      } else {
 | 
			
		||||
        eventBus.emit("openDialog", selectNodes[selectNodes.length - 1].sourceType, params.id);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  //删除
 | 
			
		||||
@ -74,7 +78,7 @@ export const useRightOperate = () => {
 | 
			
		||||
    if (selectNodes && selectNodes[selectNodes.length - 1]) {
 | 
			
		||||
      let node = selectNodes[selectNodes.length - 1]
 | 
			
		||||
      let params = JSON.parse(node.params)
 | 
			
		||||
      if(!params) {
 | 
			
		||||
      if (!params) {
 | 
			
		||||
        params = {
 | 
			
		||||
          name: node.sourceName,
 | 
			
		||||
          show: node.isShow,
 | 
			
		||||
 | 
			
		||||
@ -69,7 +69,13 @@ export const useTree = () => {
 | 
			
		||||
   * @param treeNode 鼠标右键点击时所在节点的 JSON 数据对象
 | 
			
		||||
   */
 | 
			
		||||
  const onDblClick = (event: MouseEvent, treeId: string, treeNode: any) => {
 | 
			
		||||
    let entityObject = window.earth.entityMap.get(treeNode.id)
 | 
			
		||||
    let entityObject
 | 
			
		||||
    if (treeNode.sourceType == 'pressModel') {
 | 
			
		||||
      entityObject = window.pressModelEntities.get(treeNode.id)
 | 
			
		||||
    } else {
 | 
			
		||||
      entityObject = window.earth.entityMap.get(treeNode.id)
 | 
			
		||||
    }
 | 
			
		||||
    console.log('entityObject', entityObject)
 | 
			
		||||
    entityObject.flyTo()
 | 
			
		||||
  }
 | 
			
		||||
  /**
 | 
			
		||||
@ -215,10 +221,31 @@ export const useTree = () => {
 | 
			
		||||
   * @param treeNode
 | 
			
		||||
   */
 | 
			
		||||
  const onCheck = async (event: any, treeId: any, treeNode: any) => {
 | 
			
		||||
    console.log(treeNode, 'treeNode')
 | 
			
		||||
    let params = JSON.parse(treeNode.params)
 | 
			
		||||
    let entityObject = window.earth.entityMap.get(params.id)
 | 
			
		||||
    entityObject.show = treeNode.isShow
 | 
			
		||||
    params.show = treeNode.isShow
 | 
			
		||||
    let entityObject
 | 
			
		||||
    if (treeNode.sourceType == 'pressModel') {
 | 
			
		||||
      let params = JSON.parse(treeNode.params)
 | 
			
		||||
      let id = treeNode.id + '_' + params.modelId
 | 
			
		||||
      let data = window.pressModelMap.get(id)
 | 
			
		||||
      data.isShow = treeNode.isShow
 | 
			
		||||
      entityObject = window.pressModelEntities.get(treeNode.id)
 | 
			
		||||
 | 
			
		||||
      if (!entityObject && treeNode.isShow) {
 | 
			
		||||
        const entity = window.earth.entityMap.get(params.modelId).entity
 | 
			
		||||
        entityObject = new YJ.Analysis.Flat(window.earth, entity, {
 | 
			
		||||
          positions: params.positions,
 | 
			
		||||
          height: params.height,
 | 
			
		||||
          name: treeNode.sourceName
 | 
			
		||||
        })
 | 
			
		||||
        window.pressModelEntities.set(treeNode.id, entityObject)
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
    } else {
 | 
			
		||||
      entityObject = window.earth.entityMap.get(params.id)
 | 
			
		||||
    }
 | 
			
		||||
    entityObject.show = treeNode.isShow;
 | 
			
		||||
    (treeNode.sourceType != 'pressModel') && (params.show = treeNode.isShow)
 | 
			
		||||
    let params2 = {
 | 
			
		||||
      "id": treeNode.id,
 | 
			
		||||
      "params": params,
 | 
			
		||||
@ -402,7 +429,6 @@ export const useTree = () => {
 | 
			
		||||
  // 初始化树的方法
 | 
			
		||||
  const initTree = async (selector: string = '#treeDemo') => {
 | 
			
		||||
    let res = await TreeApi.getTreeList()
 | 
			
		||||
    console.log('res', res)
 | 
			
		||||
    if ([0, 200].includes(res.code)) {
 | 
			
		||||
      res.data.sort((a: any, b: any) => {
 | 
			
		||||
        if (a.treeIndex && b.treeIndex) {
 | 
			
		||||
@ -416,14 +442,20 @@ export const useTree = () => {
 | 
			
		||||
        }
 | 
			
		||||
        return 0;
 | 
			
		||||
      })
 | 
			
		||||
      //将模型压平
 | 
			
		||||
      window.pressModelMap = new Map();
 | 
			
		||||
      window.pressModelEntities = new Map();
 | 
			
		||||
      for (let i = res.data.length - 1; i >= 0; i--) {
 | 
			
		||||
        if (!res.data[i].id) {
 | 
			
		||||
          res.data.splice(i, 1);
 | 
			
		||||
        }
 | 
			
		||||
        if (res.data[i].sourceType == "pressModel") {
 | 
			
		||||
          const obj = JSON.parse(res.data[i].params);
 | 
			
		||||
          pressModelMap.set(res.data[i].id + "_" + obj.modelId, res.data[i]);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      zNodes.value = res.data
 | 
			
		||||
      treeObj.value = $.fn.zTree.init($(selector), setting, zNodes.value)
 | 
			
		||||
      console.log(res.data)
 | 
			
		||||
      window.treeObj = treeObj.value
 | 
			
		||||
      window.AllNodes = treeObj.value.getNodes()
 | 
			
		||||
      initTreeCallBack()
 | 
			
		||||
@ -439,6 +471,7 @@ export const useTree = () => {
 | 
			
		||||
            params.id = zNodes.value[i].id
 | 
			
		||||
          }
 | 
			
		||||
          initMapData(zNodes.value[i].sourceType, params)
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
          //@ts-ignore
 | 
			
		||||
 | 
			
		||||
@ -510,7 +510,6 @@ export const useTreeNode = () => {
 | 
			
		||||
  let showRightMenu = (event: any, treeObj: any) => {
 | 
			
		||||
    // 获取选中的节点
 | 
			
		||||
    let selectedNodes = getSelectedNodes(treeObj)
 | 
			
		||||
    console.log('selectedNodes', selectedNodes)
 | 
			
		||||
    let arr: any = []
 | 
			
		||||
    let rightMenuHeight = window.getComputedStyle($('#rMenu')[0]).getPropertyValue('height')
 | 
			
		||||
    let rightMenuWidth = window.getComputedStyle($('#rMenu')[0]).getPropertyValue('width')
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,6 @@
 | 
			
		||||
export const initMapData = async (type, data) => {
 | 
			
		||||
  let entityObject
 | 
			
		||||
  let options
 | 
			
		||||
  console.log('data', type, data)
 | 
			
		||||
  switch (type) {
 | 
			
		||||
    case 'groundText':
 | 
			
		||||
      entityObject = new YJ.Obj.GroundText(window.earth, data)
 | 
			
		||||
@ -44,19 +43,42 @@ export const initMapData = async (type, data) => {
 | 
			
		||||
      data.host = 'http://192.168.110.25:8848'
 | 
			
		||||
      entityObject = new YJ.Obj.Terrain(window.earth, data)
 | 
			
		||||
      break
 | 
			
		||||
      case 'layer':
 | 
			
		||||
    case 'layer':
 | 
			
		||||
      data.host = 'http://192.168.110.25:8848'
 | 
			
		||||
      entityObject = new YJ.Obj.Layer(window.earth, data)
 | 
			
		||||
      break
 | 
			
		||||
      case 'tileset':
 | 
			
		||||
    case 'tileset':
 | 
			
		||||
      data.host = 'http://192.168.110.25:8848'
 | 
			
		||||
      entityObject = new YJ.Obj.Tileset(window.earth, data)
 | 
			
		||||
 | 
			
		||||
      entityObject.load((res) => {
 | 
			
		||||
        // 等模型加载完后再加载压平模型
 | 
			
		||||
        Array.from(window.pressModelMap.keys()).forEach((key) => {
 | 
			
		||||
          if (key.indexOf("_" + data.id) > -1) {
 | 
			
		||||
            const nodes = window.pressModelMap.get(key);
 | 
			
		||||
            if (nodes) {
 | 
			
		||||
              if (nodes.isShow == 1) {
 | 
			
		||||
                // nodeType[nodes.source_type].render(nodes);
 | 
			
		||||
                const flatData = JSON.parse(nodes.params)
 | 
			
		||||
                const entity = window.earth.entityMap.get(flatData.modelId).entity
 | 
			
		||||
                let flat = new YJ.Analysis.Flat(window.earth, entity, {
 | 
			
		||||
                  positions: flatData.positions,
 | 
			
		||||
                  height: flatData.height,
 | 
			
		||||
                  name: nodes.sourceName
 | 
			
		||||
                })
 | 
			
		||||
                window.pressModelEntities.set(nodes.id, flat)
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
      })
 | 
			
		||||
      break
 | 
			
		||||
    default:
 | 
			
		||||
      return
 | 
			
		||||
      break
 | 
			
		||||
  }
 | 
			
		||||
  options = structuredClone(entityObject.options)
 | 
			
		||||
  delete options.host
 | 
			
		||||
  // options = entityObject
 | 
			
		||||
  return options
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -74,6 +74,7 @@ import ProjConvert from '../components/propertyBox/ProjConvert.vue'
 | 
			
		||||
import ProjectionConvert from '../components/propertyBox/ProjectionConvert.vue'
 | 
			
		||||
import GoodsSearchCircle from '../components/propertyBox/GoodsSearchCircle.vue'
 | 
			
		||||
import GoodsSearchPolgon from '../components/propertyBox/GoodsSearchPolgon.vue'
 | 
			
		||||
import flat from '../components/propertyBox/flat.vue'
 | 
			
		||||
 | 
			
		||||
import { GisApi } from '@/api/gisApi'
 | 
			
		||||
 | 
			
		||||
@ -152,6 +153,12 @@ eventBus.on('openDialog', async (sourceType: any, id: any) => {
 | 
			
		||||
      await nextTick()
 | 
			
		||||
      dynamicComponentRef.value?.open(id, 'pincerArrow')
 | 
			
		||||
      break
 | 
			
		||||
    case 'pressModel':
 | 
			
		||||
      currentComponent.value = flat
 | 
			
		||||
      await nextTick()
 | 
			
		||||
      console.log('cccc', id)
 | 
			
		||||
      dynamicComponentRef.value?.open(id, 'pressModel')
 | 
			
		||||
      break
 | 
			
		||||
    default:
 | 
			
		||||
      break
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user