浏览代码

修改升级

tangning 3 年之前
父节点
当前提交
356c697c63
共有 6 个文件被更改,包括 430 次插入9 次删除
  1. 15 2
      src/router/index.js
  2. 1 1
      src/state/navs.js
  3. 10 5
      src/view/dispatch/index.vue
  4. 1 1
      src/view/layout/index.vue
  5. 205 0
      src/view/scene/Initiator.vue
  6. 198 0
      src/view/scene/visitor.vue

+ 15 - 2
src/router/index.js

@@ -13,6 +13,8 @@ import VRModelView from '@/view/vrmodel'
 // import TeachingView from '@/view/teaching'
 import CameraView from '@/view/camera'
 import UserView from '@/view/user'
+import InitiatorView from '@/view/scene/Initiator'
+import VisitorView from '@/view/scene/visitor'
 
 export const system = [
   {
@@ -32,7 +34,7 @@ export const system = [
     path: '/forget',
     component: ForgetView,
     meta: { title: '重置密码' }
-  }
+  },
 ]
 
 export const routes = [
@@ -108,7 +110,18 @@ export const routes = [
     path: '/scene/:projectId',
     component: Scene,
     meta: { title: '火调场景' }
-
+  },
+  {
+    name: 'sceneInitiator',
+    path: '/sceneInitiator',
+    component: InitiatorView,
+    meta: { title: '场景带看' }
+  },
+  {
+    name: 'sceneVisitor',
+    path: '/sceneVisitor',
+    component: VisitorView,
+    meta: { title: '场景带看' }
   }
 ]
 

+ 1 - 1
src/state/navs.js

@@ -3,7 +3,7 @@ import { attach } from '@/constant/view'
 import user from './user'
 import { watch, ref } from 'vue'
 // 所有权限都有的router
-export const MUST_JOIN_NAVS = ['viewLayout', 'login', 'register', 'forget', 'scene', 'organization']
+export const MUST_JOIN_NAVS = ['viewLayout', 'login', 'register', 'forget', 'scene', 'organization', 'sceneVisitor']
 // router对应的icon
 const ICON_MAP = { 
   estate: 'iconfire_scenes', 

+ 10 - 5
src/view/dispatch/index.vue

@@ -529,6 +529,10 @@ export default {
       }
       
     },
+    takeLook(row) {
+        console.log('带看',row);
+        this.$router.push({name: 'sceneInitiator', query: {sceneNum:row.sceneNum,id: row.id}})
+    },
     editInfo(row) {
       this.searchScene('')
       this.oper.readyUpdate(row)
@@ -537,6 +541,7 @@ export default {
           {
             sceneNum: row.sceneNum,
             title: row.sceneName,
+
             vrLink: row.vrLink
           }
         ]
@@ -645,15 +650,15 @@ export default {
         message: items.map(({projectSn}) => projectSn).join(',')+ '已成功从教学项目撤销',
       })
     },
-    takeLook(item){
-      window.open(process.env.VUE_APP_DOMAIN + '/fire-rtc-live.html?m=' + item.sceneNum+'&p_id=' + item.id)
-    },
+    // takeLook(item){
+    //   window.open(process.env.VUE_APP_DOMAIN + '/fire-rtc-live.html?m=' + item.sceneNum+'&p_id=' + item.id)
+    // },
     queryScene(item) {
       if (!item.sceneNum) {
         return this.$message.error('当前火调项目暂未录入场景链接', '提示')
       } else {
-      window.open(process.env.VUE_APP_DOMAIN + '/spc.html?m=' + item.sceneNum)
-        // this.$router.push({name: 'scene', params: {projectId: item.id}})
+      // window.open(process.env.VUE_APP_DOMAIN + '/spc.html?m=' + item.sceneNum)
+        this.$router.push({name: 'scene', params: {projectId: item.id}})
       }
     },
     async copyShare() {

+ 1 - 1
src/view/layout/index.vue

@@ -3,7 +3,7 @@
     <ly-top class="top" v-if="!isSystem" />
     <div class="content">
       <router-view v-slot="{ Component }" v-if="isSystem">
-        <component :is="Component" />
+        <component :is="Component" />{{isSystem}}
       </router-view>
       <template v-else>
         <ly-slide class="slide" />

+ 205 - 0
src/view/scene/Initiator.vue

@@ -0,0 +1,205 @@
+<template>
+  <div class="scene-layer">
+    <iframe :src="url" ></iframe>
+    <div class="deteil-layer" :class="{hide: !showInfo}">
+      <div class="ctrl" @click="showInfo = !showInfo">
+        <img src="@/assets/image/decoration_collect@2x.png" alt="">
+      </div>
+      
+      <div class="deteil">
+
+
+        <h2>火调详情</h2>
+
+        <div class="block">
+          <h3>基本信息</h3>
+
+          <div class="base-info">
+            <div>
+              <span>项目编号:</span>
+              <p>{{detail.projectSn}}</p>
+            </div>
+            <div>
+              <span>起火地址:</span>
+              <p>{{detail.projectAddress}}</p>
+            </div>
+            <div>
+              <span>起火场所:</span>
+              <p>{{detail.projectSite}}</p>
+            </div>
+            <div>
+              <span>承办单位:</span>
+              <p>{{detail.organizerDeptName}}</p>
+            </div>
+            <div>
+              <span>起火对象:</span>
+              <p>{{detail.projectName}}</p>
+            </div>
+            <div>
+              <span>承办人员:</span>
+              <p>{{detail.organizerUsers}}</p>
+            </div>
+            <div>
+              <span>事故日期:</span>
+              <p>{{detail.accidentDate}}</p>
+            </div>
+            <div>
+              <span>火灾原因:</span>
+              <p>{{detail.fireReason}}</p>
+            </div>
+            <div>
+              <span>项目状态:</span>
+              <p>{{detail.status === 0 ? '未认定' : '已认定'}}</p>
+            </div>
+            <div>
+              <span>是否教学项目:</span>
+              <p>{{detail.isTeached ? '是' : '否'}}</p>
+            </div>
+            <div>
+              <span>创建人:</span>
+              <p>{{detail.creatorName}}</p>
+            </div>
+            <div>
+              <span>编辑人:</span>
+              <p>{{detail.editorName}}</p>
+            </div>
+            <div>
+              <span>创建时间:</span>
+              <p>{{detail.createTime}}</p>
+            </div>
+            <div>
+              <span>最新编辑时间:</span>
+              <p>{{detail.editTime}}</p>
+            </div>
+          </div>
+        </div>
+
+        <div class="block">
+          <h3>火灾档案</h3>
+
+          <div class="attach">
+            <div
+              v-for="item in tableData"
+              :key="item._title"
+              class="type-item">
+              <h4>{{ item.title }}</h4>
+              <div class="addpend">
+                <span v-for="item in item.children" :key="item.id" @click="goto(item)" >
+                  {{ item.fileName }}
+                  <img src="@/assets/image/goto.png" alt="">
+                </span>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+
+  <com-dialog title="访问密码" enterText="确 定" v-model:show="confirm.show" @submit="loadData()" width="480" :showClose="false">
+    <el-input v-model="confirm.psw" placeholder="请输入访问密码" @keydown.enter="loadData"></el-input>
+  </com-dialog>
+
+  <div v-if="showImg" class="img-layer">
+    <i class="el-icon-close" @click="showImg = ''"></i>
+    <img :src="showImg" alt="">
+  </div>
+</template>
+
+<script>
+import { fireDetailByPsw, getAttachListByPsw } from '@/request/config'
+import axios from 'axios';
+import comDialog from "@/components/dialog";
+import { types } from '@/constant'
+
+export default {
+  data() {
+    return { 
+      detail: {
+
+      },
+      showImg: '',
+      confirm: {show: false, psw: ''},
+      list: [],
+      showInfo: false,
+      loadSuccess: false,
+    }
+  },
+  watch: {
+    'confirm.show'() {
+      console.log(this.confirm.show, !this.showInfo)
+      if (this.confirm.show || !this.showInfo) {
+        this.$router.back()
+      }
+    },
+  },
+  computed: {
+    url() {
+        const {sceneNum,id} = this.$route.query
+      if (sceneNum && id) {
+        return process.env.VUE_APP_DOMAIN + '/fire-rtc-live.html?m=' + sceneNum +'&p_id='+id
+        // return 'https://test.4dkankan.com/fire-rtc-live.html?m=t-3fp7zQl&p_id=PROJECT01456470052986503168#/?mode=2&name=test&role=leader&roomId=9c4Q2rbL9ZP0Pxf1ReXLekBN&userId=9RYJ5jgQYvnP'
+      } else {
+          console.log('url获取=>',this.$route)
+        return 'javascript:void(0)'
+        // return process.env.VUE_APP_DOMAIN + '/spc.html?m=' + this.detail.sceneNum
+      }
+    },
+    tableData() {
+      let dataList = this.list || [];
+      let cache = [];
+      let data = types.reduce((t, c) => {
+        let children = dataList.filter(
+          (item) => c.name === item.attachmentType
+        );
+        t.push({ title: c.name, children });
+        cache.push(...children);
+        return t;
+      }, []);
+
+      data[data.length - 1].children.push(
+        ...dataList.filter((item) => !cache.includes(item))
+      );
+      return data;
+    },
+  },
+  methods: {
+    async loadData() {
+      // if (!this.confirm.psw || this.confirm.psw.length === 0) return this.$message.error('请输入访问密码', '提示')
+      let {data: detail} = await axios.get(fireDetailByPsw, {params: {projectId: this.$route.params.projectId, randCode: this.confirm.psw,type:1}})
+      this.detail = detail
+
+      let {data: list} = await axios.get(getAttachListByPsw, {params: {projectId: this.$route.params.projectId, randCode: this.confirm.psw,type:1}})
+      this.list = list
+
+      this.loadSuccess = true
+      this.confirm.show = false
+      this.showInfo = false  //不默认开启
+    },
+    goto(item) {
+      if (item.type !== 1) {
+        window.open(item.fileOssUrl)
+      } else {
+        this.showImg = item.fileOssUrl
+      }
+    },
+    handleMessage(event){
+        console.log('handleMessage===>',event)
+    }
+  },
+  mounted() {
+    this.loadData()
+    window.addEventListener('message',this.handleMessage)
+  },
+  beforeDestroyed(){
+    window.removeEventListener("message", this.handleMessage);
+  },
+  components: {
+    "com-dialog": comDialog,
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "./style.scss";
+</style>

+ 198 - 0
src/view/scene/visitor.vue

@@ -0,0 +1,198 @@
+<template>
+  <div class="scene-layer">
+    <iframe :src="url" ></iframe>
+    <div class="deteil-layer" :class="{hide: !showInfo}">
+      <div class="ctrl" @click="showInfo = !showInfo">
+        <img src="@/assets/image/decoration_collect@2x.png" alt="">
+      </div>
+      
+      <div class="deteil">
+
+
+        <h2>火调详情</h2>
+
+        <div class="block">
+          <h3>基本信息</h3>
+
+          <div class="base-info">
+            <div>
+              <span>项目编号:</span>
+              <p>{{detail.projectSn}}</p>
+            </div>
+            <div>
+              <span>起火地址:</span>
+              <p>{{detail.projectAddress}}</p>
+            </div>
+            <div>
+              <span>起火场所:</span>
+              <p>{{detail.projectSite}}</p>
+            </div>
+            <div>
+              <span>承办单位:</span>
+              <p>{{detail.organizerDeptName}}</p>
+            </div>
+            <div>
+              <span>起火对象:</span>
+              <p>{{detail.projectName}}</p>
+            </div>
+            <div>
+              <span>承办人员:</span>
+              <p>{{detail.organizerUsers}}</p>
+            </div>
+            <div>
+              <span>事故日期:</span>
+              <p>{{detail.accidentDate}}</p>
+            </div>
+            <div>
+              <span>火灾原因:</span>
+              <p>{{detail.fireReason}}</p>
+            </div>
+            <div>
+              <span>项目状态:</span>
+              <p>{{detail.status === 0 ? '未认定' : '已认定'}}</p>
+            </div>
+            <div>
+              <span>是否教学项目:</span>
+              <p>{{detail.isTeached ? '是' : '否'}}</p>
+            </div>
+            <div>
+              <span>创建人:</span>
+              <p>{{detail.creatorName}}</p>
+            </div>
+            <div>
+              <span>编辑人:</span>
+              <p>{{detail.editorName}}</p>
+            </div>
+            <div>
+              <span>创建时间:</span>
+              <p>{{detail.createTime}}</p>
+            </div>
+            <div>
+              <span>最新编辑时间:</span>
+              <p>{{detail.editTime}}</p>
+            </div>
+          </div>
+        </div>
+
+        <div class="block">
+          <h3>火灾档案</h3>
+
+          <div class="attach">
+            <div
+              v-for="item in tableData"
+              :key="item._title"
+              class="type-item">
+              <h4>{{ item.title }}</h4>
+              <div class="addpend">
+                <span v-for="item in item.children" :key="item.id" @click="goto(item)" >
+                  {{ item.fileName }}
+                  <img src="@/assets/image/goto.png" alt="">
+                </span>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+
+  <com-dialog title="访问密码" enterText="确 定" v-model:show="confirm.show" @submit="loadData()" width="480" :showClose="false">
+    <el-input v-model="confirm.psw" placeholder="请输入访问密码" @keydown.enter="loadData"></el-input>
+  </com-dialog>
+
+  <div v-if="showImg" class="img-layer">
+    <i class="el-icon-close" @click="showImg = ''"></i>
+    <img :src="showImg" alt="">
+  </div>
+</template>
+
+<script>
+import { fireDetailByPsw, getAttachListByPsw } from '@/request/config'
+import axios from 'axios';
+import comDialog from "@/components/dialog";
+import { types } from '@/constant'
+
+export default {
+  data() {
+    return { 
+      detail: {
+
+      },
+      showImg: '',
+      confirm: {show: true, psw: ''},
+      list: [],
+      showInfo: false,
+      loadSuccess: false,
+    }
+  },
+  watch: {
+    'confirm.show'() {
+      console.log(this.confirm.show, !this.showInfo)
+      if (this.confirm.show || !this.showInfo) {
+        this.$router.back()
+      }
+    },
+  },
+  computed: {
+    url() {
+        const {sceneNum,id} = this.$route.params
+      if (sceneNum && id) {
+        return process.env.VUE_APP_DOMAIN + '/fire-rtc-live.html?m=' + sceneNum +'&p_id='+id
+        // return 'https://test.4dkankan.com/fire-rtc-live.html?m=t-3fp7zQl&p_id=PROJECT01456470052986503168#/?mode=2&name=test&role=leader&roomId=9c4Q2rbL9ZP0Pxf1ReXLekBN&userId=9RYJ5jgQYvnP'
+      } else {
+          console.log('url获取=>',this.$route.params)
+        return 'javascript:void(0)'
+        // return process.env.VUE_APP_DOMAIN + '/spc.html?m=' + this.detail.sceneNum
+      }
+    },
+    tableData() {
+      let dataList = this.list || [];
+      let cache = [];
+      let data = types.reduce((t, c) => {
+        let children = dataList.filter(
+          (item) => c.name === item.attachmentType
+        );
+        t.push({ title: c.name, children });
+        cache.push(...children);
+        return t;
+      }, []);
+
+      data[data.length - 1].children.push(
+        ...dataList.filter((item) => !cache.includes(item))
+      );
+      return data;
+    },
+  },
+  methods: {
+    async loadData() {
+      // if (!this.confirm.psw || this.confirm.psw.length === 0) return this.$message.error('请输入访问密码', '提示')
+      let {data: detail} = await axios.get(fireDetailByPsw, {params: {projectId: this.$route.params.projectId, randCode: this.confirm.psw,type:1}})
+      this.detail = detail
+
+      let {data: list} = await axios.get(getAttachListByPsw, {params: {projectId: this.$route.params.projectId, randCode: this.confirm.psw,type:1}})
+      this.list = list
+
+      this.loadSuccess = true
+      this.confirm.show = false
+      this.showInfo = false  //不默认开启
+    },
+    goto(item) {
+      if (item.type !== 1) {
+        window.open(item.fileOssUrl)
+      } else {
+        this.showImg = item.fileOssUrl
+      }
+    }
+  },
+  mounted() {
+    this.loadData()
+  },
+  components: {
+    "com-dialog": comDialog,
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "./style.scss";
+</style>