|
@@ -1,11 +1,11 @@
|
|
|
<template>
|
|
|
- <AppHeader v-show="!fscChecked" :project="project" :show-adjust="showAdjust" @update="onPointsUpdate" />
|
|
|
+ <AppHeader v-show="!fscChecked" :project="project" @getUserId="getUserId" :show-adjust="showAdjust" @update="onPointsUpdate" />
|
|
|
<article>
|
|
|
<main>
|
|
|
<div class="split">
|
|
|
<iframe ref="sourceFrame" v-if="sourceURL" :src="sourceURL" frameborder="0" @load="onLoadSource"></iframe>
|
|
|
- <div class="tools" v-if="source" v-show="!showAdjust && !fscChecked && (dbsChecked || (!target && !bimChecked))">
|
|
|
- <!-- <div class="item-date">
|
|
|
+ <div class="tools" v-if="source" v-show="showWidget && !showAdjust && !fscChecked && (dbsChecked || (!target && !bimChecked))">
|
|
|
+ <div class="item-date">
|
|
|
<calendar
|
|
|
name="source"
|
|
|
:count="scenes.length"
|
|
@@ -17,16 +17,16 @@
|
|
|
@prev="onPrevDate"
|
|
|
@next="onNextDate"
|
|
|
></calendar>
|
|
|
- </div> -->
|
|
|
+ </div>
|
|
|
<div class="item-mode" v-if="source.type == 2">
|
|
|
<div class="iconfont icon-show_roaming" :class="{ active: mode == 0 }" @click="onModeChange(0)"></div>
|
|
|
<div class="iconfont icon-show_plane" :class="{ active: mode == 1 }" @click="onModeChange(1)"></div>
|
|
|
</div>
|
|
|
- <div class="item-density" v-if="(source.type == 2 && mode == 1)" :class="{active:showDensity}" @click="showDensity=!showDensity">
|
|
|
- <span>{{densityType.text}}</span>
|
|
|
+ <div class="item-density" v-if="source.type == 2 && mode == 1" :class="{ active: showDensity }" @click="showDensity = !showDensity">
|
|
|
+ <span>{{ densityType.text }}</span>
|
|
|
<i class="iconfont icon-arrows_down"></i>
|
|
|
<ul>
|
|
|
- <li v-for="density in densityTypes" @click="onDensityChange(density)">{{density.text}}</li>
|
|
|
+ <li v-for="density in densityTypes" @click="onDensityChange(density)">{{ density.text }}</li>
|
|
|
</ul>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -69,11 +69,11 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="model" v-show="!showAdjust">
|
|
|
- <div class="file" :class="{ active: fileChecked, disable: fileDisable }" v-show="!fscChecked && !showBim">
|
|
|
+ <div class="model" v-show="showWidget && !showAdjust">
|
|
|
+ <div v-if="isLogin" class="file" :class="{ active: fileChecked, disable: fileDisable }" v-show="!fscChecked && !showBim">
|
|
|
<div @click="onFileChecked">
|
|
|
<i class="iconfont icon-note1"></i>
|
|
|
- <span>标注</span>
|
|
|
+ <span>{{ $t('home.tag') }}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="bim" :class="{ active: bimChecked, disable: bimDisable }" v-show="!fscChecked && !showBim">
|
|
@@ -85,23 +85,23 @@
|
|
|
<div class="dbs" :class="{ active: dbsChecked, disable: dbsDisable }" v-show="!fscChecked && !showBim">
|
|
|
<div @click="onDbsChecked">
|
|
|
<i class="iconfont icon-split_screen"></i>
|
|
|
- <span>分屏</span>
|
|
|
+ <span>{{ $t('home.splitScreen') }}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="fsc" :class="{ active: fscChecked }" @click="onFscChecked">
|
|
|
<i class="iconfont" :class="[fscChecked ? 'icon-full_screen_selected' : 'icon-full_screen_normal']"></i>
|
|
|
- <span>全屏</span>
|
|
|
+ <span>{{ $t('home.fullScreen') }}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
<TagManager />
|
|
|
</main>
|
|
|
</article>
|
|
|
<Toast v-if="showTips" type="warn" :content="showTips" :close="() => (showTips = null)" />
|
|
|
- <Files :show="fileChecked" />
|
|
|
+ <Files :show="fileChecked" @exit="() => (fileChecked = false)" />
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
-import { ref, onMounted, computed, nextTick } from 'vue'
|
|
|
+import { ref, onMounted, computed, nextTick, provide, watch } from 'vue'
|
|
|
import { http } from '@/utils/request'
|
|
|
|
|
|
import browser from '@/utils/browser'
|
|
@@ -110,8 +110,25 @@ import AppHeader from '@/components/header'
|
|
|
import Calendar from '@/components/calendar'
|
|
|
import Files from '@/components/files'
|
|
|
import TagManager from '@/components/files/TagManager'
|
|
|
-import sync, { beforeChangeURL, loadSourceScene, loadTargetScene, setPanoWithBim, flyToP1P2 } from '@/utils/sync'
|
|
|
+import sync, { beforeChangeURL, loadSourceScene, loadTargetScene, setPanoWithBim, flyToP1P2 } from '@/utils/sync'
|
|
|
+import i18n from '@/i18n'
|
|
|
+const { t } = i18n.global
|
|
|
const isDev = process.env.VUE_APP_TEST == 1
|
|
|
+
|
|
|
+const tags = ref([])
|
|
|
+const notify = ref(null)
|
|
|
+const isEdit = ref(false)
|
|
|
+const isLogin = ref(false)
|
|
|
+provide('tags', tags)
|
|
|
+provide('notify', notify)
|
|
|
+provide('isEdit', isEdit)
|
|
|
+provide('isLogin', isLogin)
|
|
|
+const userId = ref(localStorage.getItem('userId') || null)
|
|
|
+
|
|
|
+const getUserId = id => {
|
|
|
+ userId.value = id
|
|
|
+}
|
|
|
+
|
|
|
// 是否BIM模式
|
|
|
const showBim = ref(browser.urlHasValue('bim'))
|
|
|
// 是否校准模式
|
|
@@ -129,15 +146,16 @@ const sourceFrame = ref(null)
|
|
|
const targetFrame = ref(null)
|
|
|
|
|
|
const mode = ref(0)
|
|
|
+
|
|
|
const source = ref(null)
|
|
|
const target = ref(null)
|
|
|
const project = ref(null)
|
|
|
const points = ref({ p1: null, p2: null })
|
|
|
|
|
|
const densityTypes = ref([
|
|
|
- {type:'high',text:'高'},
|
|
|
- {type:'middle',text:'中'},
|
|
|
- {type:'low',text:'低'}
|
|
|
+ { type: 'high', text: t('common.high') },
|
|
|
+ { type: 'middle', text: t('common.middle') },
|
|
|
+ { type: 'low', text: t('common.low') },
|
|
|
])
|
|
|
|
|
|
const densityType = ref(densityTypes.value[0])
|
|
@@ -146,6 +164,13 @@ const showTips = ref(null)
|
|
|
|
|
|
const showDensity = ref(false)
|
|
|
|
|
|
+const showWidget = computed(() => {
|
|
|
+ if (fileChecked.value) {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ return true
|
|
|
+})
|
|
|
+
|
|
|
const scenes = computed(() => {
|
|
|
if (!project.value) {
|
|
|
return []
|
|
@@ -198,7 +223,6 @@ const targetURL = computed(() => {
|
|
|
})
|
|
|
const sourceDate = computed(() => {
|
|
|
if (source.value) {
|
|
|
- console.log(source.value.createTime.toDate())
|
|
|
return source.value.createTime.toDate()
|
|
|
}
|
|
|
})
|
|
@@ -241,7 +265,7 @@ const targetDays = computed(() => {
|
|
|
}
|
|
|
})
|
|
|
|
|
|
-const fileDisable = computed(()=>{
|
|
|
+const fileDisable = computed(() => {
|
|
|
return false
|
|
|
})
|
|
|
|
|
@@ -267,8 +291,9 @@ const onLoadSource = () => {
|
|
|
// BIM单屏模式
|
|
|
return
|
|
|
}
|
|
|
- if(source.value.type < 2) {
|
|
|
+ if (source.value.type < 2) {
|
|
|
window['kankan'] = sourceFrame.value.contentWindow.app
|
|
|
+ window['kankan'].TagManager.load(tags.value)
|
|
|
} else {
|
|
|
window['laser'] = sourceFrame.value.contentWindow.loaded
|
|
|
}
|
|
@@ -291,7 +316,7 @@ const onModeChange = targetMode => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-const onDensityChange = (density)=>{
|
|
|
+const onDensityChange = density => {
|
|
|
if (sync.sourceInst) {
|
|
|
sync.sourceInst.loaded.then(sdk => {
|
|
|
let data = sdk.scene.changePointDensity(density.type)
|
|
@@ -328,7 +353,7 @@ const onSelected = data => {
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
- showTips.value = '选择日期未上传场景'
|
|
|
+ showTips.value = t('home.dateScene')
|
|
|
}
|
|
|
|
|
|
datepickName.value = null
|
|
@@ -402,16 +427,14 @@ const onNextDate = name => {
|
|
|
scene.value = scenes.value[index]
|
|
|
}
|
|
|
|
|
|
-
|
|
|
const onFileChecked = () => {
|
|
|
fileChecked.value = !fileChecked.value
|
|
|
}
|
|
|
|
|
|
-
|
|
|
// bim点击
|
|
|
const onBimChecked = () => {
|
|
|
if (bimDisable.value) {
|
|
|
- return (showTips.value = '未发现BIM文件')
|
|
|
+ return (showTips.value = t('home.notFindFile'))
|
|
|
}
|
|
|
if (bimChecked.value) {
|
|
|
bimChecked.value = false
|
|
@@ -440,7 +463,7 @@ const onBimChecked = () => {
|
|
|
// 分屏点击
|
|
|
const onDbsChecked = () => {
|
|
|
if (dbsDisable.value && !dbsChecked.value) {
|
|
|
- return (showTips.value = '未发现对比场景')
|
|
|
+ return (showTips.value = t('home.notFindScene'))
|
|
|
}
|
|
|
dbsChecked.value = !dbsChecked.value
|
|
|
if (dbsChecked.value) {
|
|
@@ -499,7 +522,7 @@ const onPointsUpdate = (type, data) => {
|
|
|
|
|
|
const onP1Click = type => {
|
|
|
if (!points.value.p1) {
|
|
|
- showTips.value = '您还未选择关联位置'
|
|
|
+ showTips.value = t('home.notChoosePoint')
|
|
|
return
|
|
|
}
|
|
|
console.log(points.value.p1)
|
|
@@ -510,7 +533,7 @@ const onP1Click = type => {
|
|
|
|
|
|
const onP2Click = type => {
|
|
|
if (!points.value.p2) {
|
|
|
- showTips.value = '您还未选择关联位置'
|
|
|
+ showTips.value = t('home.notChoosePoint')
|
|
|
return
|
|
|
}
|
|
|
// todo 定位
|
|
@@ -546,14 +569,14 @@ onMounted(() => {
|
|
|
source.value = project.value.sceneList[project.value.sceneList.length - 1]
|
|
|
}
|
|
|
if (!source.value) {
|
|
|
- return (showTips.value = '当前场景已被删除,无法进行查看')
|
|
|
+ return (showTips.value = t('home.sceneDelete'))
|
|
|
}
|
|
|
if (showAdjust.value || showSplit.value) {
|
|
|
onBimChecked()
|
|
|
nextTick(() => onDbsChecked())
|
|
|
}
|
|
|
} else {
|
|
|
- return (showTips.value = '当前场景已被删除,无法进行查看')
|
|
|
+ return (showTips.value = t('home.sceneDelete'))
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
@@ -566,8 +589,24 @@ onMounted(() => {
|
|
|
}
|
|
|
})
|
|
|
.catch(() => {
|
|
|
- showTips.value = '服务器连接失败'
|
|
|
+ showTips.value = t('code.failed')
|
|
|
})
|
|
|
+
|
|
|
+ http.post(`smart-site/marking/list`, {
|
|
|
+ projectId: projectId,
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 200,
|
|
|
+ }).then(response => {
|
|
|
+ if (response.data && response.data.list) {
|
|
|
+ tags.value = response.data.list.map(item => {
|
|
|
+ item.hotData.visible = false
|
|
|
+ item.hotData.id = item.markingId
|
|
|
+ item.hotData.createTime = item.createTime
|
|
|
+ item.hotData.lastCreateBy = item.lastCreateBy
|
|
|
+ return item.hotData
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
})
|
|
|
</script>
|
|
|
|
|
@@ -764,12 +803,12 @@ main {
|
|
|
margin-right: 10px;
|
|
|
font-size: 16px;
|
|
|
padding: 0 16px;
|
|
|
- &.active{
|
|
|
- ul{
|
|
|
+ &.active {
|
|
|
+ ul {
|
|
|
display: block;
|
|
|
}
|
|
|
- i{
|
|
|
- transform: scale(0.8) rotate(180deg)
|
|
|
+ i {
|
|
|
+ transform: scale(0.8) rotate(180deg);
|
|
|
}
|
|
|
}
|
|
|
span {
|
|
@@ -792,9 +831,9 @@ main {
|
|
|
box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.25);
|
|
|
border: 1px solid #000000;
|
|
|
list-style: none;
|
|
|
- li{
|
|
|
+ li {
|
|
|
padding: 5px 0;
|
|
|
- &:hover{
|
|
|
+ &:hover {
|
|
|
color: #0076f6;
|
|
|
}
|
|
|
}
|