Browse Source

Merge branch 'dktest' of http://39.106.8.246:3003/web/ibms into dktest

LXXXY 5 years ago
parent
commit
95f6da40fe
32 changed files with 388 additions and 157 deletions
  1. 4 2
      config/dev.env.js
  2. 4 2
      config/prod.env.js
  3. 1 0
      package.json
  4. 6 2
      src/api/model/file.js
  5. 5 0
      src/api/scan/request.js
  6. 1 1
      src/assets/scss/point/point_config/reset.scss
  7. 6 0
      src/assets/style/style.scss
  8. 1 1
      src/components/business_space/newAddDialogs/addEquipDialog.vue
  9. 36 16
      src/components/business_space/newGraphy/graphy.vue
  10. 1 1
      src/components/business_space/table/addEquip.vue
  11. 1 1
      src/components/ledger/cenote/dialog/addCenoteDialog.vue
  12. 1 1
      src/components/ledger/cenote/dialog/addEquipDialog.vue
  13. 2 1
      src/components/model/file/addFloorDialog.vue
  14. 1 1
      src/components/model/file/floorTable.vue
  15. 1 1
      src/components/ready/buildfloor/formItems.vue
  16. 151 0
      src/framework/components/messagesever/index.vue
  17. 9 0
      src/framework/components/messagesever/mqSetting.js
  18. 22 0
      src/framework/components/messagesever/msmq.js
  19. 14 6
      src/framework/layout/PageHeader.vue
  20. 7 29
      src/framework/layout/layout-store.js
  21. 10 0
      src/framework/style/layout.scss
  22. 0 2
      src/store/index.js
  23. 3 3
      src/store/modules/alarm.js
  24. 0 29
      src/store/modules/proMess.js
  25. 2 0
      src/utils/bus.js
  26. 6 1
      src/views/ledger/spacelist/index.vue
  27. 39 32
      src/views/model/file/index.vue
  28. 7 3
      src/views/ready/buildfloor/addFloor/index.vue
  29. 2 2
      src/views/ready/buildfloor/drawGraphy/checkGraphy.vue
  30. 11 7
      src/views/ready/buildfloor/drawGraphy/drawFloor.vue
  31. 1 1
      src/views/ready/buildfloor/index.vue
  32. 33 12
      src/views/ready/buildfloor/repetitionGraphy.vue

+ 4 - 2
config/dev.env.js

@@ -5,7 +5,9 @@ const prodEnv = require('./prod.env')
 module.exports = merge(prodEnv, {
     NODE_ENV: '"development"',
     BASE_URL: '"http://192.168.20.215"', //测试iframe地址
-    SSO_SERVER: '"http://192.168.20.102:8080"' // (新)测试环境
+    SSO_SERVER: '"http://192.168.20.102:8080"', //(新)测试环境
+    MQTT_SERVICE: '"ws://192.168.20.225:61614/stomp"' //MQ测试环境地址
     // SSO_SERVER: '"http://sso.sagacloud.cn"',  //正式环境
-    // BASE_URL: '"http://mbi.sagacloud.cn"' //线上iframe地址
+    // BASE_URL: '"http://mbi.sagacloud.cn"', //线上iframe地址
+    // MQTT_SERVICE: '""' //MQ正式环境地址
 })

+ 4 - 2
config/prod.env.js

@@ -2,7 +2,9 @@
 module.exports = {
     NODE_ENV: '"production"',
     BASE_URL: '"http://192.168.20.215"', //测试iframe地址
-    SSO_SERVER: '"http://192.168.20.102:8080"' //(新)测试环境
+    SSO_SERVER: '"http://192.168.20.102:8080"', //(新)测试环境
+    MQTT_SERVICE: '"ws://192.168.20.225:61614/stomp"' //MQ测试环境地址
     // BASE_URL: '"http://mbi.sagacloud.cn"', //线上iframe地址
-    // SSO_SERVER: '"http://sso.sagacloud.cn"'  //正式环境
+    // SSO_SERVER: '"http://sso.sagacloud.cn"',  //正式环境
+    // MQTT_SERVICE: '""' //MQ正式环境地址
 }

+ 1 - 0
package.json

@@ -59,6 +59,7 @@
         "sass-loader": "^7.1.0",
         "semver": "^5.3.0",
         "shelljs": "^0.7.6",
+        "stompjs": "^2.3.3",
         "swiper": "^4.0.0",
         "uglifyjs-webpack-plugin": "^1.1.1",
         "url-loader": "^0.5.8",

+ 6 - 2
src/api/model/file.js

@@ -1,7 +1,8 @@
 import httputils from '@/api/scan/httpUtil'
 import { Message } from 'element-ui';
-const baseUrl = '/modelapi';
 import axios from 'axios'
+const baseUrl = '/modelapi';
+
 let api = {
     // 新建模型文件夹
     /**
@@ -119,6 +120,7 @@ let api = {
                                 FloorModelId: res.EntityList[0].Id, //模型所属楼层(FloorModel外键)
                                 ModelName: params.Form.file.name,        //模型文件名
                                 UserName: params.userName,
+                                UserId: params.userId,
                                 Note: params.Form.desc
                                 // ReplaceReason: 0
                             }]
@@ -150,6 +152,7 @@ let api = {
                             FloorModelId: res.Content[0].Id, //模型所属楼层(FloorModel外键)
                             ModelName: params.Form.file.name,        //模型文件名
                             UserName: params.userName,
+                            UserId: params.userId,
                             Note: params.Form.desc
                             // ReplaceReason: 0
                         }]
@@ -240,12 +243,13 @@ let api = {
         })
     },
     // 更新模型文件
-    upDateModelFile(data, ProjectId,UserName, callback1, callback2) {
+    upDateModelFile(data, ProjectId, UserName, UserId, callback1, callback2) {
         let modelFile = {
             Content: [{
                 FloorModelId:data.replaceModelItem.Id, //模型id
                 ModelName: data.Form.file.name,        //模型名字
                 UserName: UserName,
+                UserId: UserId,
                 Note: data.replaceModelItem.Note,
                 ReplaceReason: data.Form.ReplaceReason
             }]

+ 5 - 0
src/api/scan/request.js

@@ -1410,6 +1410,11 @@ export function createRelateInZoneAndISp(param, success) {
     let url = `${baseUrl}/datacenter/si-in-sp-base/link-sp?type=${param.type}`;
     http.postJson(url, param.data, success)
 }
+//关系-----业务空间内的元空间,创建业务空间内的元空间关系, 累计添加不会覆盖-批量关联
+export function groupCreRelaZoneAndISp(param, success) {
+    let url = `${baseUrl}/datacenter/si-in-sp-base/link-list?type=${param.type}`;
+    http.postJson(url, param.data, success)
+}
 
 /**系统集成成果管理 */
 //系统集成统计条形图

+ 1 - 1
src/assets/scss/point/point_config/reset.scss

@@ -365,7 +365,7 @@ button,
 input,
 select,
 textarea {
-    font-family: tahoma, Helvetica, Arial, "\5FAE\8F6F\96C5\9ED1";
+    font-family: Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,SimSun,sans-serif, "\5FAE\8F6F\96C5\9ED1";
     *font-family: "\5FAE\8F6F\96C5\9ED1";
 }
 

+ 6 - 0
src/assets/style/style.scss

@@ -1,3 +1,9 @@
+body{
+    /deep/ .el-notification.right{
+        text-align: left;
+    }
+}
+
 .icon-wushuju {
     display: block;
     width: 100px;

+ 1 - 1
src/components/business_space/newAddDialogs/addEquipDialog.vue

@@ -2,7 +2,7 @@
   <el-dialog :title="title" :visible.sync="dialogVisible" width="900px" id="addEqDialog">
     <el-row class="filters">
       <el-col :span="9">
-        <el-input placeholder="输入设备名称或设备本地编码查询进行查询" v-model="keycode" clearable @keyup.enter.native="getTableData">
+        <el-input placeholder="输入设备名称或设备本地编码进行查询" v-model="keycode" clearable @keyup.enter.native="getTableData">
           <i slot="suffix" class="el-input__icon el-icon-search" @click="getTableData"></i>
         </el-input>
       </el-col>

+ 36 - 16
src/components/business_space/newGraphy/graphy.vue

@@ -78,7 +78,8 @@ import {
   updateZone,
   createZone,
   getIspNotInSpace,
-  createRelateInZoneAndISp
+  createRelateInZoneAndISp,
+  groupCreRelaZoneAndISp
 } from "@/api/scan/request"
 const colorArr = [
   "#F9C3C3",
@@ -122,6 +123,7 @@ export default {
       curOutline: [],
       BIMIDToSID: {}, //bimid映射元空间id
       curZoneItem: {}, //当前选中的业务空间item
+      allUnRelatISP: [], //
     }
   },
   computed: {
@@ -210,15 +212,15 @@ export default {
         },
         objectType: this.tab.code
       }
+      this.allUnRelatISP = []
       getIspNotInSpace(pa, res => {
-        console.log(res)
+        this.allUnRelatISP = res.Content;
       })
     },
     // 获取底图
     getGraphy() {
       let that = this;
       that.clearGraphy()
-      that.view = new SGraphyView('floorCanvas')
       that.scene = new DivideFloorScene();
       that.canvasLoading = true;
       that.scene.loadUrl(`/image-service/common/file_get?systemId=revit&key=${this.FloorMap}`).then(() => {
@@ -314,16 +316,16 @@ export default {
     // 批量创建业务空间
     groupCreateBSpace() {
       let text = []
-      let Spaces = this.scene.spaceList.map(t => {
-        text.push(t.data.Name)
+      let Spaces = this.allUnRelatISP.map(t => {
+        text.push(t.RoomLocalName || t.RoomName)
         return {
-          RoomLocalName: t.data.Name,
-          Outline: [t.data.OutLine]
+          IspaceId: t.RoomID,
+          RoomLocalName: t.RoomLocalName || t.RoomName,
+          Outline: [t.Outline],
+          BuildingId: this.buildFloor[0],
+          FloorId: this.buildFloor[1]
         }
       });
-      console.log(Spaces)
-      console.log(this.scene.spaceList)
-      // return
       this.$confirm(
         "<p>确定根据未关联业务空间的空间批量创建业务空间</p>" +
         "<p>涉及的空间:</p>" +
@@ -337,15 +339,33 @@ export default {
         type: "warning"
       }
       ).then(() => {
-        console.log()
         let pa = {
-          zone: this.zoneCode,
+          zone: this.tab.code,
           data: {
             Content: Spaces
           }
         }
+        this.canvasLoading = true;
         createZone(pa, res => {
-
+          res.EntityList.map(t => {
+            Spaces = Spaces.map(item => {
+              if (t.RoomLocalName == item.RoomLocalName) {
+                item.SpaceId = t.RoomID
+              }
+              return item;
+            })
+          })
+          let param = {
+            data: {
+              Content: Spaces
+            },
+            type: this.tab.code
+          }
+          groupCreRelaZoneAndISp(param, res => {
+            this.$message.success('创建成功')
+            this.canvasLoading = false;
+            this.init()
+          })
         })
       }).catch(() => {
         this.$message({
@@ -465,10 +485,10 @@ export default {
     // 清除canvas
     clearGraphy() {
       if (this.view) {
-        this.view = null;
-        this.scene.root.children = null;
-        this.scene = null;
+        this.view.scene = null;
+        return
       }
+      this.view = new SGraphyView('floorCanvas')
     },
     // 工具栏操作
     // 移动底图

+ 1 - 1
src/components/business_space/table/addEquip.vue

@@ -3,7 +3,7 @@
     <div class="search" style="margin-bottom:10px;">
       <div>
         <el-input
-          placeholder="输入设备名称或设备本地编码查询进行查询"
+          placeholder="输入设备名称或设备本地编码进行查询"
           style="width:300px;float:left;margin-right:10px;"
           v-model="search.filter"
           clearable

+ 1 - 1
src/components/ledger/cenote/dialog/addCenoteDialog.vue

@@ -2,7 +2,7 @@
   <el-dialog :title="title" :visible.sync="dialogVisible" width="900px" id="addEqDialog">
     <el-row class="filters">
       <el-col :span="9">
-        <el-input placeholder="输入竖井名称或竖井本地编码查询进行查询" v-model="keycode" clearable @keyup.enter.native="getTableData">
+        <el-input placeholder="输入竖井名称或竖井本地编码进行查询" v-model="keycode" clearable @keyup.enter.native="getTableData">
           <i slot="suffix" class="el-input__icon el-icon-search" @click="getTableData"></i>
         </el-input>
       </el-col>

+ 1 - 1
src/components/ledger/cenote/dialog/addEquipDialog.vue

@@ -2,7 +2,7 @@
   <el-dialog :title="title" :visible.sync="dialogVisible" width="900px" id="addEqDialog">
     <el-row class="filters">
       <el-col :span="9">
-        <el-input placeholder="输入设备名称或设备本地编码查询进行查询" v-model="keycode" clearable @keyup.enter.native="getTableData">
+        <el-input placeholder="输入设备名称或设备本地编码进行查询" v-model="keycode" clearable @keyup.enter.native="getTableData">
           <i slot="suffix" class="el-input__icon el-icon-search" @click="getTableData"></i>
         </el-input>
       </el-col>

+ 2 - 1
src/components/model/file/addFloorDialog.vue

@@ -162,7 +162,8 @@ export default {
             FolderId: this.FolderId,
             FloorName: FloorName,
             Form: this.form,
-            userName:this.userInfo.username
+            userName: this.userInfo.userName,
+            userId: this.userInfo.userId
           };
           request.createFloor(data).then(res => {
             if (res.Result == "success") {

+ 1 - 1
src/components/model/file/floorTable.vue

@@ -115,7 +115,7 @@ export default {
     },
     // 停止上传
     closeUpdate(item) {
-      if (this.userInfo.username == item.UserName) {
+      if (this.userInfo.userName == item.UserName) {
         this.$emit("closeUpdateFile", item);
       } else {
         this.$message({

+ 1 - 1
src/components/ready/buildfloor/formItems.vue

@@ -88,7 +88,7 @@ export default {
     }
   }
   /deep/ .FloorTypeSelect .el-form-item__content {
-    width: 178px;
+    width: 200px;
   }
 }
 </style>

+ 151 - 0
src/framework/components/messagesever/index.vue

@@ -0,0 +1,151 @@
+<!--
+ * @Author: zhangyu
+ * @Date: 2019-08-26 15:22:13
+ * @Info: 
+ * @LastEditTime: 2019-09-26 20:16:41
+ -->
+<template>
+  <div class="notification-box" @click="handleClickRead">
+    <el-badge :value="unreadNum" :hidden="!unreadNum" :max="99">
+      <i class="el-icon-message-solid"></i>
+    </el-badge>
+    <!-- <el-button type="primary" @click="handleClickConnectMQ">连接MQ</el-button>
+    <el-button type="primary" @click="handleClickDisconnectMQ">断开MQ</el-button>
+    <el-button type="primary" @click="handleClickUnsubscribe">停止接收消息</el-button><br><br>
+    <el-input type="textarea" :autosize="{ minRows: 6, maxRows: 6}" v-model="sendMessage" placeholder="请输入要发送的内容"></el-input>
+    <br><br>
+    <el-button type="primary" @click="handleClickSendMessage">发送消息</el-button>
+    <el-card style="margin-top:20px;text-align:left;">
+      <div slot="header" class="clearfix">
+        <span>消息历史</span>
+      </div>
+      <div v-for="(message, index) in messageList" :key="index" class="text item">
+        {{ message }}
+      </div>
+    </el-card> -->
+  </div>
+</template>
+
+<script>
+import { mapGetters } from 'vuex'
+import Stomp from 'stompjs'
+import Msmq from './msmq'
+import { MQTT_SERVICE, MQTT_USERNAME, MQTT_PASSWORD } from './mqSetting'
+
+export default {
+  data() {
+    return {
+      client: Stomp.client(MQTT_SERVICE),
+      unreadNum: 0,
+      sendMessage: '',
+      messageList: [], // 历史消息
+      subList: [], // 订阅的消息实例
+      topics: ["/topic/model.manage"] // 订阅的消息名称
+    }
+  },
+  created () {
+    this.connect()
+    // let url = "ws://192.168.20.225:61614/stomp";
+    // let login = "admin";
+    // let passcode = "admin";
+    // let destination = "/topic/datacenter.broadcast";
+    // let client = Stomp.client(url)
+    // console.log('钩子:',client)
+    // var onconnect = function(frame) {
+    //   client.subscribe(destination, function(message) {
+    //     console.log(message.body);
+    //     alert(message.body);        
+    //   });
+    // };
+    // client.connect(login, passcode, onconnect)
+  },
+  computed: {
+    ...mapGetters('layout', ['userInfo', 'projectId', 'projects'])
+  },
+  methods:{
+    connect() {
+      this.client = Stomp.client(MQTT_SERVICE)
+      this.client.reconnect_delay = 5000
+      var clientid = `sagaMQ-${this.userInfo.userName}`
+      var headers = {
+        'login': MQTT_USERNAME,
+        'passcode': MQTT_PASSWORD,
+        'client-id': clientid
+      }
+      this.client.connect(headers, this.onConnected, this.onFailed)
+    },
+    onConnected(frame) {
+      console.log('Connected: ' + frame)
+      //订阅多个消息
+      this.topics.forEach(item => {
+        let sub = this.client.subscribe(item, this.onmessage, this.onFailed)
+        this.subList.push(sub)
+      })
+      // this.client.subscribe(topic, this.onmessage, this.onFailed) 
+    },
+    //接收到消息的回调
+    onmessage(message) {
+      this.unreadNum = Msmq.handleMsg(message, this.projects, this.unreadNum);
+    },
+    // 接收消息失败回调
+    onFailed(frame) {
+      console.log('Failed: ' + frame)
+    },
+    //停止接收消息
+    unsubscribe() {
+      this.subList.forEach((item) => {
+        item.unsubscribe()
+      })
+    },
+    //断开连接
+    disconnect() {
+      this.client.disconnect(function() {
+        console.log("连接已断开!");
+      })
+    },
+    //发送消息
+    send(destination, message, headers = {}) {
+      this.client.send(destination, headers, JSON.stringify(message))
+    },
+    
+    handleClickConnectMQ() {
+      this.connect()
+    },
+    handleClickDisconnectMQ() {
+      this.disconnect()
+    },
+    handleClickUnsubscribe() {
+      this.unsubscribe()
+    },
+    handleClickSendMessage() {
+      this.send('/topic/datacenter.broadcast',this.sendMessage)
+    }, 
+    handleClickRead() {
+      this.unreadNum = 0;
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+  .notification-box{
+    width: 100%;
+    height: 100%;
+    padding: 16px 10px 10px;
+    box-sizing: border-box;
+    color: #79869a;
+    cursor: pointer;
+    .el-icon-message-solid{
+      font-size: 22px;
+    }
+    /deep/ .el-badge__content{
+      height: 16px;
+      line-height: 16px;
+      border: 1px solid transparent;
+    }
+  }
+  .notification-box:hover{
+    color: #d3d8e2;
+    background-color: #3f4f62;
+  }
+</style>

+ 9 - 0
src/framework/components/messagesever/mqSetting.js

@@ -0,0 +1,9 @@
+/*
+ * @Author: zhangyu
+ * @Date: 2019-08-26 16:03:46
+ * @Info: 
+ * @LastEditTime: 2019-09-05 14:46:30
+ */
+export const MQTT_SERVICE = process.env.MQTT_SERVICE // mq服务地址
+export const MQTT_USERNAME = 'admin' // mq连接用户名
+export const MQTT_PASSWORD = 'admin' // mq连接密码

+ 22 - 0
src/framework/components/messagesever/msmq.js

@@ -0,0 +1,22 @@
+import { Notification } from 'element-ui';
+import Bus from '@/utils/bus.js'
+
+const MSMQ = {
+  handleMsg (message, projects, unreadNum ) {
+    let data
+    try {
+      data = JSON.parse(message.body)
+    } catch (err) {}
+    // if(projects.some((item) => {return item.id == data.projectId})) { //判断消息是否是当前用户拥有的项目
+      unreadNum++
+      if(message.headers.destination == '/topic/model.manage'){ //模型文件的消息触发模型文件列表刷新事件
+        Bus.$emit('modelStatusChange', data)
+      }
+      // Notification.info({ title: '消息',dangerouslyUseHTMLString: true, message: `项目编号:${data.projectId}<br>消息类型:${data.type}<br>描述信息:${data.description}<br>` })
+      Notification.info({ title: '消息', dangerouslyUseHTMLString: true, message: `${JSON.stringify(data)}` })
+      return unreadNum
+    // }
+  }
+}
+
+export default MSMQ

+ 14 - 6
src/framework/layout/PageHeader.vue

@@ -18,7 +18,7 @@
         <div id='page-header-user-menu' class='user-menu'>
             <el-dropdown trigger='hover' class='user-menu-dropdown' @command='userMenuCommand'>
                 <span class='el-dropdown-link'>
-                    {{userInfo.username}}
+                    {{userInfo.userName}}
                     <i class='el-icon-fa-user el-icon--right'></i>
                 </span>
                 <el-dropdown-menu slot='dropdown'>
@@ -26,12 +26,18 @@
                     <el-dropdown-item icon='el-icon-circle-plus'>修改密码</el-dropdown-item>
                 </el-dropdown-menu>
             </el-dropdown>
+            <ul class="header-nav">
+                <li class="header-nav-notification">
+                    <message-sever></message-sever>
+                </li>
+            </ul>
         </div>
     </div>
 </template>
 <script>
 import frameworkApi from '@/api/framework'
 import { mapGetters, mapMutations } from 'vuex'
+import MessageSever from '../components/messagesever/index'
 export default {
     name: 'PageHeader',
     props: [],
@@ -67,16 +73,18 @@ export default {
     },
     created() {
         let cacheInfo = JSON.parse(localStorage.getItem('_sagacloud_admin_store_cacheInfo'))?JSON.parse(localStorage.getItem('_sagacloud_admin_store_cacheInfo')):{}
-        if(cacheInfo[this.userInfo.username] && 
-            cacheInfo[this.userInfo.username].projectId && 
-            this.projects.some((item) => {return item.id == cacheInfo[this.userInfo.username].projectId})
+        if(cacheInfo[this.userInfo.userName] && 
+            cacheInfo[this.userInfo.userName].projectId && 
+            this.projects.some((item) => {return item.id == cacheInfo[this.userInfo.userName].projectId})
         ){
-            this.selectedProjectId = cacheInfo[this.userInfo.username].projectId
+            this.selectedProjectId = cacheInfo[this.userInfo.userName].projectId
         } else {
             this.selectedProjectId = this.projectId
         }
     },
     mounted() {},
-    components: {}
+    components: {
+        MessageSever
+    }
 }
 </script>

+ 7 - 29
src/framework/layout/layout-store.js

@@ -17,7 +17,7 @@ export default {
         projectId: '',
         projects: [],
         breadcrumb: [],
-        secret: "", //密码
+        secret: "", //项目密码
         userId: "", //用户id
     },
     getters: {
@@ -66,11 +66,11 @@ export default {
             let cacheInfo = JSON.parse(localStorage.getItem('_sagacloud_admin_store_cacheInfo'))?JSON.parse(localStorage.getItem('_sagacloud_admin_store_cacheInfo')):{}
             state.projectId = val
             localStorage.setItem('projectId', val)
-            if(cacheInfo[state.userInfo.username]){
-                cacheInfo[state.userInfo.username].projectId = val
+            if(cacheInfo[state.userInfo.userName]){
+                cacheInfo[state.userInfo.userName].projectId = val
                 localStorage.setItem('_sagacloud_admin_store_cacheInfo', JSON.stringify(cacheInfo))
             } else {
-                cacheInfo[state.userInfo.username] = {projectId: val}
+                cacheInfo[state.userInfo.userName] = {projectId: val}
                 localStorage.setItem('_sagacloud_admin_store_cacheInfo', JSON.stringify(cacheInfo))
             }
             storage.set(KEY_PROJECT_SELECTED, val)
@@ -87,33 +87,11 @@ export default {
             return new Promise((resolve, reject) => {
                 frameworkApi.loadUserInfo().then(resp => {
                     console.log(resp)
-                    // if (resp.result == 'success') {
-                    //     state.userInfo = { username: resp.username }
-                    //     storage.set('user_name', resp.username)
-                    //     state.permissions = {}
-                    //     if (resp.permissions) {
-                    //         resp.permissions.forEach(p => (state.permissions[p] = true))
-                    //     }
-                    //     state.projects = []
-                    //     if (resp.projects) {
-                    //         if(resp.projects[0] && resp.projects[0].projId) {
-                    //             state.projectId = resp.projects[0].projId
-                    //             state.secret = resp.projects[0].secret?resp.projects[0].secret:""
-                    //         }
-                    //         resp.projects.forEach(proj =>
-                    //             state.projects.push({
-                    //                 id: proj.projId,
-                    //                 name: proj.projLocalName,
-                    //                 pwd: proj.secret?proj.secret:""
-                    //             })
-                    //         )
-                    //     }
-                    // } else {
                     if (resp.Result == 'success') {
-                        state.userInfo = { username: resp.Username, userId: resp.Userid }
-                        state.userId = resp.Userid
+                        state.userInfo = { userName: resp.Username, userId: resp.UserId }
+                        state.userId = resp.UserId
                         storage.set('user_name', resp.Username)
-                        storage.set('user_id', resp.Userid)
+                        storage.set('user_id', resp.UserId)
                         state.permissions = {}
                         if (resp.Permissions) {
                             resp.Permissions.forEach(p => (state.permissions[p] = true))

+ 10 - 0
src/framework/style/layout.scss

@@ -114,6 +114,16 @@ body {
         height: 100%;
         display: inline-flex;
         flex-direction: row-reverse;
+        .header-nav{
+            margin-right: 10px;
+            >li{
+                float: left;
+                width: 50px;
+                height: 50px;
+                padding: 0 4px;
+                box-sizing: border-box;
+            }
+        }
         .user-menu-dropdown {
             height: 100%;
             line-height: $pageHeaderHeight;

+ 0 - 2
src/store/index.js

@@ -3,7 +3,6 @@ import Vuex from 'vuex'
 import storage from '@/framework/utils/storage'
 import layout from '@/framework/layout/layout-store'
 import project from "./modules/project"
-import peojMess from "./modules/proMess"
 import alarm from './modules/alarm'
 Vue.use(Vuex)
 const KEY_LAST_ROUTE = 'last_route'
@@ -38,7 +37,6 @@ export default new Vuex.Store({
     modules: {
         layout,
         project,
-        peojMess,
         alarm
     }
 })

+ 3 - 3
src/store/modules/alarm.js

@@ -20,9 +20,9 @@ const alarm = {
           state.spaceNameObj = spaceNameObj
       },
     //   空间code值dict
-        SPACE_CODE_OBJ(state, spaceCodeObj) {
-            state.spaceCodeObj = spaceCodeObj
-        }
+      SPACE_CODE_OBJ(state, spaceCodeObj) {
+          state.spaceCodeObj = spaceCodeObj
+      }
   }
 }
 export default alarm;

+ 0 - 29
src/store/modules/proMess.js

@@ -1,29 +0,0 @@
-const project_mess = {
-    namespaced: true,
-    state: {
-        projectId: "", //项目id
-        secret: "", //数据源id
-        userId: "test", //数据源类型
-    },
-    mutations: {
-        set_project(state, val) {
-            state.projectId = val
-        },
-        set_secret(state, val) {
-            state.secret = val
-        },
-        set_userId(state, val) {
-            state.userId = val
-        }
-    },
-    actions: {
-
-    },
-    getters: {
-        projectId: state => state.projectId,
-        userId: state => state.userId,
-        secret: state => state.secret
-    }
-}
-
-export default project_mess

+ 2 - 0
src/utils/bus.js

@@ -0,0 +1,2 @@
+import Vue from 'vue'
+export default new Vue

+ 6 - 1
src/views/ledger/spacelist/index.vue

@@ -163,7 +163,12 @@ export default {
         Filters: `parentId = 'Space'`
       }
       queryDictionaryHead(pa, res => {
-        this.tabsList = res.Content;
+        this.tabsList = res.Content.map(t => {
+          if (t.Name == "元空间") {
+            return undefined;
+          }
+          return t;
+        }).filter(item => item);
         if (this.childBackParam.zone) {
           this.activeName = this.childBackParam.zone;
           this.buildFloorSelectd = [this.childBackParam.BuildingId, this.childBackParam.FloorId];

+ 39 - 32
src/views/model/file/index.vue

@@ -71,6 +71,7 @@
 <script>
 import { mapGetters } from "vuex";
 import request from "@/api/model/file.js";
+import Bus from '@/utils/bus.js'
 import dasBoard from "@/views/dasboard/index";
 import modelLog from "@/components/model/file/modelLog"; //模型日志弹窗
 import repliceModel from "@/components/model/file/replaceModelDialog"; //替换模型弹窗
@@ -227,40 +228,42 @@ export default {
      * @param currentFolderId 当前选择的文件夹id
      */
     queryFloorFile(currentFolderId) {
-      let data = {
-        FolderId: currentFolderId,
-        ProjectId: this.projectId
-      };
-      return new Promise((resolve, reject) => {
-        request.queryFloorList(data, res => {
-          res.Content.map(item => {
-            /**
-             * @info: 状态显示说明
-             * 0: 上传中(上传的用户可操作:中止)
-             * 1: 等待检查
-             * 10: 模型检查中
-             * 11: 未通过检查
-             * 2、20、21、3、31: 正常(所有用户可操作:下载、查看历史)
-             * 4: 正常(所有用户可操作:下载、替换、查看历史)
-             */
-            if (item.Status == 2 || item.Status == 20 || item.Status == 21 || item.Status == 3 || item.Status == 31 || item.Status == 4) {
-              Object.assign(item, { isDown: false, precent: 0 });
-            } else {
-              Object.assign(item, { isDown: true, precent: 100 });
-              if (this.persentList.length != 0) {
-                this.persentList.forEach(pItem => {
-                  if (item.Id == pItem.Id) {
-                    Object.assign(item, { isDown: true, precent: pItem.precent ? pItem.precent : 0 });
-                  }
-                });
+      if(currentFolderId){
+        let data = {
+          FolderId: currentFolderId,
+          ProjectId: this.projectId
+        };
+        return new Promise((resolve, reject) => {
+          request.queryFloorList(data, res => {
+            res.Content.map(item => {
+              /**
+               * @info: 状态显示说明
+               * 0: 上传中(上传的用户可操作:中止)
+               * 1: 等待检查
+               * 10: 模型检查中
+               * 11: 未通过检查
+               * 2、20、21、3、31: 正常(所有用户可操作:下载、查看历史)
+               * 4: 正常(所有用户可操作:下载、替换、查看历史)
+               */
+              if (item.Status == 2 || item.Status == 20 || item.Status == 21 || item.Status == 3 || item.Status == 31 || item.Status == 4) {
+                Object.assign(item, { isDown: false, precent: 0 });
+              } else {
+                Object.assign(item, { isDown: true, precent: 100 });
+                if (this.persentList.length != 0) {
+                  this.persentList.forEach(pItem => {
+                    if (item.Id == pItem.Id) {
+                      Object.assign(item, { isDown: true, precent: pItem.precent ? pItem.precent : 0 });
+                    }
+                  });
+                }
               }
-            }
+            });
+            this.tableData = res.Content;
+            this.loading = false;
+            resolve();
           });
-          this.tableData = res.Content;
-          this.loading = false;
-          resolve();
         });
-      });
+      }
     },
     //添加楼层文件
     addFloorFile() {
@@ -411,7 +414,8 @@ export default {
           request.upDateModelFile(
             data,
             that.projectId,
-            that.userInfo.username,
+            that.userInfo.userName,
+            that.userInfo.userId,
             res => {
               let loaded = res.loaded, //加载量
                 total = res.total; //文件大小
@@ -522,6 +526,9 @@ export default {
   },
   mounted() {
     this.queryModel();
+    Bus.$on('modelStatusChange', message => {
+      this.queryFloorFile(this.currentFolderId);
+    })
     // 十秒刷新次楼层列表
     // setInterval(()=>{
     //    this.queryFloorFile(this.currentFolderId)

+ 7 - 3
src/views/ready/buildfloor/addFloor/index.vue

@@ -1,8 +1,8 @@
 <template>
   <el-dialog :title="title" :visible.sync="dialogVisible" width="40%" @close="handleClose" id="messageDialog">
-    <div>
+    <el-row>
       <formItems :type="'Floor'" ref="formItems"></formItems>
-    </div>
+    </el-row>
     <span slot="footer" class="dialog-footer">
       <el-button size="small" @click="dialogVisible=false">取消</el-button>
       <el-button size="small" type="primary" @click="confirm">确认</el-button>
@@ -89,13 +89,17 @@ export default {
 </script>
 <style lang="scss" scoped>
 #messageDialog {
+  /deep/ .el-dialog__body {
+    height: 420px;
+    overflow: auto;
+  }
   .el-form-item {
     /deep/ label.el-form-item__label {
       font-size: 12px;
     }
   }
   /deep/ .FloorTypeSelect .el-form-item__content {
-    width: 178px;
+    width: 200px;
   }
 }
 </style>

+ 2 - 2
src/views/ready/buildfloor/drawGraphy/checkGraphy.vue

@@ -59,12 +59,12 @@ export default {
         return
       }
       let pa = {
-        Content: [{ FloorId: this.floor.FloorID, Id: this.modelIdToFloorId[this.jsonKey] }]
+        Content: [{ FloorId: this.floor.FloorID, Id: this.modelIdToFloorId[this.jsonKey], BuildingId: this.floor.BuildID }]
       };
       bindFloorModel(pa, res => {
         this.$message.success("更新成功");
         this.handleClose()
-        this.$emit('refresh')
+        this.$emit('refresh', this.jsonKey)
       });
     },
     // 点击多级联动

+ 11 - 7
src/views/ready/buildfloor/drawGraphy/drawFloor.vue

@@ -44,7 +44,6 @@ export default {
     }
   },
   created() {
-    this.modelId = this.$route.query.modelId;
     this.FloorID = this.$route.query.FloorID;
     this.OutlineFlag = this.$route.query.OutlineFlag;
   },
@@ -55,9 +54,8 @@ export default {
   methods: {
     initGraphy(ModelId) {
       let that = this;
+      that.modelId = ModelId;
       that.clearGraphy()
-      let id = `floorCanvas${that.id}`;
-      that.view = new SGraphyView(id)
       that.drawMainScene = new DivideFloorScene();
       that.canvasLoading = true;
       that.drawMainScene.getFloorData('/modelapi/base-graph/query', { ModelId: ModelId }).then(res => {
@@ -74,8 +72,10 @@ export default {
           that.canvasLoading = false;
           that.view.maxScale = that.view.scale * 10;
           that.view.minScale = that.view.scale;
-          that.$refs.canvasFun.everyScale = that.view.scale;
           that.drawMainScene.isSpaceSelectable = false;
+          if (this.$refs.canvasFun) {
+            that.$refs.canvasFun.everyScale = that.view.scale;
+          }
           if (that.OutlineFlag) {
             this.getFloorData()
           }
@@ -96,10 +96,11 @@ export default {
     // 清空平面图
     clearGraphy() {
       if (this.view) {
-        this.drawMainScene.root.children = null;
-        this.drawMainScene = null;
-        this.view = null;
+        this.view.scene = null;
+        return
       }
+      let id = `floorCanvas${this.id}`;
+      this.view = new SGraphyView(id)
     },
     // canvas 获取焦点
     focus() {
@@ -144,6 +145,9 @@ export default {
     redo() { },
     // 缩放
     scale(val) {
+      if (!this.view) {
+        return;
+      }
       let scale = this.view.scale;
       this.view.scaleByPoint(val / scale, this.cadWidth / 2, this.cadHeight / 2)
     },

+ 1 - 1
src/views/ready/buildfloor/index.vue

@@ -237,7 +237,7 @@ export default {
         this.modelId = "";
       } else {
         this.modelId = row.ModelId;
-        let pa = { modelId: this.modelId, FloorID: row.FloorID }
+        let pa = { modelId: this.modelId, FloorID: row.FloorID, BuildID: row.BuildID }
         if (row.Outline && row.Outline.length) {
           pa.OutlineFlag = true;
         }

+ 33 - 12
src/views/ready/buildfloor/repetitionGraphy.vue

@@ -34,6 +34,8 @@ export default {
   created() {
     this.modelId = this.$route.query.modelId;
     this.FloorID = this.$route.query.FloorID;
+    this.BuildID = this.$route.query.BuildID;
+    this.OutlineFlag = this.$route.query.OutlineFlag;
   },
   mounted() {
     this.$refs.drawFloor.initGraphy(this.modelId)
@@ -45,22 +47,31 @@ export default {
     },
     // 替换模型文件
     changeGraphy() {
-      this.$refs.checkGraphy.showDialog({ FloorID: this.FloorID })
+      this.$refs.checkGraphy.showDialog({ FloorID: this.FloorID, BuildID: this.BuildID })
     },
     // 确认保存
     confirm() {
-      let sceneMark = this.$refs.drawFloor.drawMainScene.sceneMark;
-      if (!sceneMark || sceneMark.outLine.length < 3) {
-        this.$message.warning('请添加轮廓线');
-        return;
-      }
-      if (!sceneMark.closeFlag) {
-        this.$message.warning('请按回车闭合轮廓线');
-        this.$refs.drawFloor.focus();
-        return;
+      let sceneMark = this.$refs.drawFloor.drawMainScene.sceneMark, Outline = null;
+      if (sceneMark) {
+        if (sceneMark.outLine.length < 3) {
+          this.$message.warning('请添加轮廓线');
+          return;
+        }
+        if (!sceneMark.closeFlag) {
+          this.$message.warning('请按回车闭合轮廓线');
+          this.$refs.drawFloor.focus();
+          return;
+        }
+        Outline = this.$refs.drawFloor.drawMainScene.sceneMark.outLine
+        Outline = Outline.map(t => {
+          return {
+            x: t.x.toFixed(2),
+            y: t.y.toFixed(2),
+          }
+        })
       }
       let pa = {
-        Content: [{ FloorID: this.FloorID, Outline: this.$refs.drawFloor.drawMainScene.sceneMark.outLine }],
+        Content: [{ FloorID: this.FloorID, Outline: Outline }],
         Projection: ['Outline']
       }
       floorUpdate(pa, res => {
@@ -77,8 +88,18 @@ export default {
     editGraphy() {
       this.isEdit = true;
     },
-    refresh() { }
+    // 替换模型文件成功
+    refresh(modelId) {
+      this.modelId = modelId
+    }
   },
+  watch: {
+    modelId(n, o) {
+      if (o && n != o) {
+        this.$refs.drawFloor.initGraphy(n)
+      }
+    }
+  }
 };
 </script>
 <style lang="less">