Bladeren bron

Merge branch 'dev' of http://192.168.0.115:3000/4dkankan/4dkankan_bim into dev

xzw 2 jaren geleden
bovenliggende
commit
717a22e4b5

+ 1 - 0
public/smart-sviewer.html

@@ -6,6 +6,7 @@
         <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" />
         <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/iconfont/iconfont.css" />
         <link rel="stylesheet" href="//at.alicdn.com/t/c/font_3693743_qnz6eozqyvk.css" />
+        <script src="<%= VUE_APP_STATIC_DIR %>/lib/mobile-detect.js"></script>
         <script src="<%= VUE_APP_STATIC_DIR %>/lib/three.js/build/three.min.js"></script>
         <script src="<%= VUE_APP_STATIC_DIR %>/lib/base64.min.js"></script>
     </head>

+ 1 - 0
public/smart-viewer.html

@@ -6,6 +6,7 @@
         <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" />
         <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/lib/iconfont/iconfont.css" />
         <link rel="stylesheet" href="//at.alicdn.com/t/c/font_3693743_qnz6eozqyvk.css" />
+        <script src="<%= VUE_APP_STATIC_DIR %>/lib/mobile-detect.js"></script>
         <script src="<%= VUE_APP_STATIC_DIR %>/lib/three.js/build/three.min.js"></script>
         <script src="<%= VUE_APP_STATIC_DIR %>/lib/base64.min.js"></script>
     </head>

+ 16 - 0
public/static/lib/mobile-detect.js

@@ -0,0 +1,16 @@
+(function(win) {
+    var orgLink = win.location.href
+    var newLink = ''
+    if (/iPhone|iPad|Android/i.test(win.navigator.userAgent)) {
+        if (orgLink.indexOf('smart-viewer.html') !== -1) {
+            newLink = orgLink.replace('smart-viewer.html', 'smart-sviewer.html')
+        }
+    } else {
+        if (orgLink.indexOf('smart-sviewer.html') !== -1) {
+            newLink = orgLink.replace('smart-sviewer.html', 'smart-viewer.html')
+        }
+    }
+    if (newLink) {
+        win.location.href = newLink
+    }
+}(window))

+ 1 - 1
src/components/header/Login.vue

@@ -94,7 +94,7 @@ const onLogin = () => {
             }
         })
         .catch(() => {
-            alert('服务器连接失败')
+            errors.value.message = '服务器连接失败'
         })
 }
 onMounted(() => {

+ 8 - 4
src/components/header/index.vue

@@ -27,8 +27,6 @@
                 <li v-else class="login" @click="showLogin = true"><span>登录</span></li>
             </ul>
         </div>
-        <Login v-if="showLogin" @close="showLogin = false" @user="info => (user = info)" />
-        <CopyLink v-if="showLink" @close="showLink=false" @done="showCopyDone=true;showLink=false" />
     </header>
     <footer v-if="props.showAdjust">
         <h4>为场景设置关联位置</h4>
@@ -39,6 +37,8 @@
         </div>
     </footer>
     <Toast v-if="showCopyDone"  content="复制成功" />
+    <Login v-if="showLogin" @close="showLogin = false" @user="info => (user = info)" />
+    <CopyLink v-if="showLink" @close="showLink=false" @done="showCopyDone=true;showLink=false" />
 </template>
 <script setup>
 import { ref, defineProps, onMounted, watchEffect } from 'vue'
@@ -126,11 +126,15 @@ const onSubmit = () => {
         .then(response => {
             if (response.success) {
                 window.location.href = window.location.href.replace('&adjust', '&split')
+            } else if(response.code == 4008) {
+                showLogin.value = true
             } else {
                 alert(response.message)
             }
         })
-        .catch(() => {})
+        .catch(() => {
+            alert('链接服务器失败')
+        })
 }
 
 watchEffect(() => {
@@ -169,7 +173,7 @@ footer {
     left: 0;
     bottom: 0;
     width: 100%;
-    height: 90px;
+    height: 92px;
     color: rgba(255, 255, 255, 0.8);
     backdrop-filter: blur(4px);
     background: rgba(27, 27, 28, 0.8);

+ 6 - 3
src/pages/SViewer.vue

@@ -18,15 +18,18 @@
             </div>
         </div>
     </main>
+    <Toast v-if="showTips" type="warn" :content="showTips" :close="() => (showTips = null)" />
 </template>
 
 <script setup>
 import { ref, onMounted, computed, nextTick } from 'vue'
 import { http } from '@/utils/request'
+import Toast from '@/components/dialog/Toast'
 import browser from '@/utils/browser'
 import Calendar from '@/components/calendar/mobile.vue'
 import sync, { loadSourceScene, loadTargetScene } from '@/utils/sync'
 
+const showTips = ref(null)
 const bimChecked = ref(null)
 const sourceFrame = ref(null)
 const mode = ref(0)
@@ -52,7 +55,7 @@ const sourceURL = computed(() => {
     }
     if (source.value.type < 2) {
         let pose = ''
-        if (sourceFrame.value && sourceFrame.value.contentWindow.app) {
+        if (sourceFrame.value && sourceFrame.value.contentWindow.app && sourceFrame.value.contentWindow.app.Camera) {
             let sdk = sourceFrame.value.contentWindow.app
             pose = '&'+sdk.Camera.getPoseUrlParams()
         }
@@ -155,11 +158,11 @@ onMounted(() => {
                     source.value = project.value.sceneList[0]
                 }
             } else {
-                alert('获取数据失败')
+                showTips.value = response.message
             }
         })
         .catch(err => {
-            alert('服务器连接失败')
+            showTips.value = '服务器连接失败'
         })
 })
 </script>

+ 29 - 13
src/pages/Viewer.vue

@@ -14,11 +14,11 @@
                     </div>
                 </div>
                 <div class="points" v-if="showAdjust">
-                    <div :class="{ active: points.p1 }">
+                    <div :class="{ active: points.p1 }" @click="onP1Click('left')">
                         <i class="iconfont" :class="[points.p1 ? 'icon-positioning01' : 'icon-positioning02']"></i>
                         <span>P1</span>
                     </div>
-                    <div :class="{ active: points.p2 }">
+                    <div :class="{ active: points.p2 }" @click="onP2Click('left')">
                         <i class="iconfont" :class="[points.p2 ? 'icon-positioning01' : 'icon-positioning02']"></i>
                         <span>P2</span>
                     </div>
@@ -32,11 +32,11 @@
                     </div>
                 </div>
                 <div class="points" v-if="showAdjust">
-                    <div :class="{ active: points.p1 }">
+                    <div :class="{ active: points.p1 }" @click="onP1Click('right')">
                         <i class="iconfont" :class="[points.p1 ? 'icon-positioning01' : 'icon-positioning02']"></i>
                         <span>P1</span>
                     </div>
-                    <div :class="{ active: points.p2 }">
+                    <div :class="{ active: points.p2 }" @click="onP1Click('right')">
                         <i class="iconfont" :class="[points.p2 ? 'icon-positioning01' : 'icon-positioning02']"></i>
                         <span>P2</span>
                     </div>
@@ -59,8 +59,7 @@
                 </div>
             </div>
         </main>
-        <Toast v-if="showBimTips" type="warn" content="未发现BIM文件" :close="() => (showBimTips = false)" />
-        <Toast v-if="showDbsTips" type="warn" content="未发现对比场景" :close="() => (showDbsTips = false)" />
+        <Toast v-if="showTips" type="warn" :content="showTips" :close="() => (showTips = null)" />
     </article>
 </template>
 
@@ -94,8 +93,7 @@ const target = ref(null)
 const project = ref(null)
 const points = ref({ p1: false, p2: false })
 
-const showBimTips = ref(false)
-const showDbsTips = ref(false)
+const showTips = ref(null)
 
 const scenes = computed(() => {
     if (!project.value) {
@@ -305,7 +303,7 @@ const onNextDate = name => {
 // bim点击
 const onBimChecked = () => {
     if (!project.value || !project.value.bimData) {
-        showBimTips.value = true
+        showTips.value = '未发现BIM文件'
         return
     }
     if (bimChecked.value) {
@@ -335,7 +333,7 @@ const onBimChecked = () => {
 // 分屏点击
 const onDbsChecked = () => {
     if (!dbsChecked.value && scenes.value.length < 2 && !bimChecked.value) {
-        showDbsTips.value = true
+        showTips.value = '未发现对比场景'
         return
     }
     dbsChecked.value = !dbsChecked.value
@@ -395,6 +393,24 @@ const onPointsUpdate = type => {
     points.value[type] = true
 }
 
+const onP1Click = (type) =>{
+    if(!points.value.p1){
+        showTips.value = '您还未选择关联位置'
+        return
+    }
+    // todo 定位
+    alert(type)
+}
+
+const onP2Click = (type) =>{
+    if(!points.value.p2){
+        showTips.value = '您还未选择关联位置'
+        return
+    }
+    // todo 定位
+    alert(type)
+}
+
 onMounted(() => {
     const num = browser.valueFromUrl('m') || ''
     const projectId = browser.valueFromUrl('projectId') || 1
@@ -407,7 +423,6 @@ onMounted(() => {
                             response.data.panos = JSON.parse(response.data.panos)
                             points.value.p1 = true
                             points.value.p2 = true
-  
                             setPanoWithBim(response.data.panos)
                         
                         } catch (error) {
@@ -432,11 +447,11 @@ onMounted(() => {
                     }
                 }
             } else {
-                alert('获取数据失败')
+                showTips.value = response.message
             }
         })
         .catch(() => {
-            alert('服务器连接失败')
+            showTips.value = '服务器连接失败'
         })
 })
 </script>
@@ -510,6 +525,7 @@ main {
             transform: translateX(-50%);
 
             div {
+                cursor:pointer;
                 margin-left: 20px;
                 width: 70px;
                 height: 88px;

+ 1 - 0
src/pages/sviewer.js

@@ -1,3 +1,4 @@
+import '../assets/scss/theme.scss'
 import '../assets/index.scss'
 import 'vant/lib/index.css';
 import { createApp } from 'vue'