浏览代码

Merge remote-tracking branch 'origin/dev' into dev

shaun-sheep 5 年之前
父节点
当前提交
370b00cccc

+ 3 - 3
package.json

@@ -26,9 +26,9 @@
         "vuex": "^3.1.0",
         "cad-engine": "2.0.250",
         "@saga-web/base": "2.1.9",
-        "@saga-web/draw": "2.1.58",
-        "@saga-web/graphy": "2.1.30",
-        "@saga-web/cad-engine": "2.0.406"
+        "@saga-web/draw": "2.1.61",
+        "@saga-web/graphy": "2.1.34",
+        "@saga-web/cad-engine": "2.0.420"
     },
     "devDependencies": {
         "ajv": "^6.9.1",

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

@@ -301,4 +301,10 @@ export default api
 export function bindFloorModel(param, success) {
     let url = `${baseUrl}/model-floor/bind`;
     httputils.postJson(url, param, success)
+}
+
+//根据模型id 获取模型文件夹及文件名
+export function getFileNameById(param, success) {
+    let url = `${baseUrl}/model-folder/get-name`;
+    httputils.postJson(url, param, success)
 }

+ 111 - 0
src/components/business_space/newAddDialogs/roomInFloorDialog.vue

@@ -0,0 +1,111 @@
+<template>
+  <el-dialog :title="title" :visible.sync="dialogVisible" width="800px" id="addSyDialog">
+    <div class="table-box">
+      <el-table :data="tableData" style="width: 100%" height="100%" v-loading="loading" :header-cell-style="headerStyle" ref="multipleTable">
+        <el-table-column label="业务空间名称" show-overflow-tooltip min-width="100">
+          <template slot-scope="scope">
+            <div>
+              {{scope.row.SysLocalName||scope.row.SysName||''}}
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column prop="SysLocalID" label="所属建筑" show-overflow-tooltip min-width="100"></el-table-column>
+        <el-table-column prop="SysLocalID" label="所属楼层" show-overflow-tooltip min-width="100"></el-table-column>
+        <el-table-column prop="action" label="操作" min-width="100">
+          <template slot-scope="scope">
+            <el-button size="mini" @click="toDetail(scope.$index, scope.row)" type="primary" plain>查看详情</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+    <span slot="footer" class="dialog-footer">
+      <el-button size="small" @click="dialogVisible = false">取 消</el-button>
+      <el-button size="small" type="primary" @click="savaRelation">确 定</el-button>
+    </span>
+  </el-dialog>
+</template>
+
+
+<script>
+import {
+  notSyInSpaceQuery, //没有和当前空间绑定的系统
+  syInSpaceCreate, //系统所在业务空间--创建关系
+} from "@/api/scan/request";
+export default {
+  data() {
+    return {
+      title: '请选择业务空间所属建筑',
+      inSpaceType: '系统',
+      dialogVisible: false,
+      tableData: [],
+      loading: false,
+      headerStyle: {
+        backgroundColor: '#e1e4e5',
+        color: '#2b2b2b',
+        lineHeight: '30px'
+      }, // 列表样式
+      selections: [], // 选中项
+    }
+  },
+  props: {
+    type: {}, //equipment--equipmentFor
+    spaceId: {},
+    zone: {}, //分区类型 
+  },
+  methods: {
+    // 显示
+    showDialog() {
+      this.dialogVisible = true;
+      this.tableData = [];
+      this.getTableData();
+    },
+    // 选中项修改
+    handleSelectionChange(val) {
+      this.selections = val;
+    },
+    // 确认
+    savaRelation() {
+      let pa = {
+        data: {
+          SpaceId: this.spaceId,
+          SysIdList: []
+        },
+        type: this.zone
+      }
+      this.selections.map(t => {
+        pa.data.SysIdList.push(t.SysID)
+      })
+      syInSpaceCreate(pa, res => {
+        this.$message.success('关联成功');
+        this.$emit('refresh');
+        this.dialogVisible = false;
+      })
+    },
+    // 获取表格数据
+    getTableData() {
+      let pa = {
+        data: {
+          PageSize: 200,
+          Orders: 'SysID asc'
+        },
+        type: this.zone,
+        spaceId: this.spaceId
+      }
+      notSyInSpaceQuery(pa, res => {
+        this.tableData = res.Content;
+      })
+    },
+    // 查看详情
+    toDetail() {
+      this.$message('开发中')
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+#addSyDialog {
+  .table-box {
+    height: 350px;
+  }
+}
+</style>

+ 2 - 1
src/components/business_space/newGraphy/canvasFun.vue

@@ -42,7 +42,7 @@
       <i class="iconfont icon-narrow" @click="reduce"></i>
     </div>
     <div class="line">
-      <el-slider tooltip-class="tooltip-class" :min="min" v-model="sliderVal" :show-tooltip="false" @input="scale"></el-slider>
+      <el-slider tooltip-class="tooltip-class" :min="min" v-model="sliderVal" :show-tooltip="false" @input="scale" :max="max"></el-slider>
     </div>
     <div>
       <i class="iconfont icon-zoom" @click="plus"></i>
@@ -56,6 +56,7 @@ export default {
       sliderVal: 1, // 滑块值
       active: '',
       min: 1,
+      max: 1000,
       everyScale: 1, // 每份的放大倍数
       isSwitch: false, // 是否开启吸附
     }

+ 40 - 13
src/components/business_space/newGraphy/graphy.vue

@@ -286,7 +286,6 @@ export default {
         // 绘制业务空间
         that.getBusinessSpace();
         that.view.fitSceneToView();
-        that.view.maxScale = that.view.scale * 10;
         that.view.minScale = that.view.scale;
         if (that.$refs.canvasFun) {
           that.$refs.canvasFun.everyScale = that.view.scale;
@@ -604,21 +603,48 @@ export default {
     // 根据图批量创建所选业务空间
     groupCreateZone() {
       let arr = this.scene.getSelectedSpaces();
-      let spaces = arr.map(t => {
-        return {
-          IspaceId: this.BIMIDToSID[t.data.SourceId],
-          RoomLocalName: t.data.Name,
-          Outline: [t.data.OutLine],
-          BuildingId: this.buildFloor[0],
-          FloorId: this.buildFloor[1],
-          Height: t.data.Height > 100 ? (t.data.Height / 1000).toFixed(2) : t.data.Height || 0
+      let spaces = [];
+      // 如果有划分,求交集
+      if (this.scene.cutItem || this.scene.sceneMark) {
+        let outlines = this.scene.getIntersectInSpace();
+        for (let k in outlines) {
+          outlines[k] = outlines[k].map(t => {
+            t = t.map(item => {
+              item = item.map(j => {
+                return { X: j.x, Y: -j.y, Z: 0 }
+              })
+              return item
+            })
+            return t;
+          })
         }
-      })
+        spaces = arr.map(t => {
+          return {
+            IspaceId: this.BIMIDToSID[t.data.SourceId],
+            RoomLocalName: t.data.Name,
+            Outline: outlines[t.data.SourceId],
+            BuildingId: this.buildFloor[0],
+            FloorId: this.buildFloor[1],
+            Height: t.data.Height > 100 ? (t.data.Height / 1000).toFixed(2) : t.data.Height || 0
+          }
+        }).filter(item => item.Outline && item.Outline.length)
+      } else {
+        spaces = arr.map(t => {
+          return {
+            IspaceId: this.BIMIDToSID[t.data.SourceId],
+            RoomLocalName: t.data.Name,
+            Outline: [t.data.OutLine],
+            BuildingId: this.buildFloor[0],
+            FloorId: this.buildFloor[1],
+            Height: t.data.Height > 100 ? (t.data.Height / 1000).toFixed(2) : t.data.Height || 0
+          }
+        })
+      }
       if (spaces.length) {
         this.canvasLoading = true;
         this.groupCreateBSP(spaces)
       } else {
-        this.$message.warning('未选择空间');
+        this.$message.warning('未选择本层空间');
       }
     },
     // 更新业务空间和元空间的关系
@@ -753,7 +779,7 @@ export default {
     },
     // 框选
     groupSelect() {
-      this.scene.isRectSelection = true;
+      this.scene.isRectSelection = 1;
     },
     // 适配底图到窗口
     fit() {
@@ -812,7 +838,8 @@ export default {
     "view.scale": {
       handler(n) {
         if (this.$refs.canvasFun) {
-          this.$refs.canvasFun.sliderVal = n * 10 / this.view.minScale;
+          let s = n * 10 / this.view.minScale
+          this.$refs.canvasFun.sliderVal = s > 1000 ? 1000 : s;
         }
       }
     },

+ 2 - 2
src/components/data_admin/buildTask/draw/drawModel.vue

@@ -118,7 +118,6 @@ export default {
       this.view.fitSceneToView();
       this.drawMainScene.click(this, this.canvasClick);
       if (this.$refs.canvasFun) {
-        this.view.maxScale = this.view.scale * 10;
         this.view.minScale = this.view.scale;
         this.$refs.canvasFun.everyScale = this.view.scale;
       }
@@ -211,7 +210,8 @@ export default {
     "view.scale": {
       handler(n) {
         if (this.$refs.canvasFun) {
-          this.$refs.canvasFun.sliderVal = n * 10 / this.view.minScale;
+          let s = n * 10 / this.view.minScale
+          this.$refs.canvasFun.sliderVal = s > 1000 ? 1000 : s;
         }
       }
     },

+ 1 - 1
src/components/globaluploader/index.vue

@@ -2,7 +2,7 @@
  * @Author: zhangyu
  * @Date: 2019-11-28 10:05:28
  * @Info: 
- * @LastEditTime: 2019-12-05 17:37:36
+ * @LastEditTime: 2019-12-11 10:50:07
  -->
 <template>
   <div id="global-uploader">

+ 2 - 0
src/components/ledger/handsontables/device.vue

@@ -170,6 +170,7 @@
     import lookPic from "@/components/ledger/lib/lookImages"
     import Handsontable from "handsontable-pro"
     import 'handsontable-pro/dist/handsontable.full.css'
+    import lStorage from '@/utils/localStorage'
     //下拉插件
 // import "@/assets/js/chosen.jquery.min";
 // import "@/assets/js/handsontable-chosen-editor";
@@ -918,6 +919,7 @@ export default {
             this.row = row.row;
             this.messKey = val;
             this.firmDataType = 'row'
+            lStorage.set('screen_data', { path: this.$route.path, data: { equip: infos } })
             switch (val) {
                 //操作
                 case 'caozuo':

+ 2 - 2
src/components/ledger/lib/cenoteGraphy.vue

@@ -99,7 +99,6 @@ export default {
         // 绘制业务空间
         that.getBusinessSpace();
         that.view.fitSceneToView();
-        that.view.maxScale = that.view.scale * 10;
         that.view.minScale = that.view.scale;
         if (that.$refs.canvasFun) {
           that.$refs.canvasFun.everyScale = that.view.scale;
@@ -276,7 +275,8 @@ export default {
     "view.scale": {
       handler(n) {
         if (this.$refs.canvasFun) {
-          this.$refs.canvasFun.sliderVal = n * 10 / this.view.minScale;
+          let s = n * 10 / this.view.minScale
+          this.$refs.canvasFun.sliderVal = s > 1000 ? 1000 : s;
         }
       }
     }

+ 18 - 6
src/components/model/file/floorTable.vue

@@ -14,7 +14,7 @@
       <el-table-column label="版本号">
         <template slot-scope="scope">
           <span style="margin-right: 5px">{{ scope.row.Version }}</span>
-          <i v-show="scope.row.Version" class="iconfont icon-warn" style="cursor:pointer;" title="查看版本更新信息"></i>
+          <i v-show="scope.row.Version" class="iconfont icon-warn" style="cursor:pointer;" title="查看版本更新信息" @click="handleClickVersion(scope.row)"></i>
         </template>
       </el-table-column>
       <el-table-column prop="AcceptTime" label="上传时间"></el-table-column>
@@ -27,16 +27,16 @@
             <el-button type="primary" size="mini" class="iconfont icon-Log" @click="queryModelLog(scope.row)"></el-button>
           </div>
           <div
-            :class="[scope.row.Status == 1 || scope.row.Status == 10 || scope.row.Status == 11 || (!scope.row.Status && scope.row.precent == 100)? 'upLoad-loading':'','upLoad']"
+            :class="['upLoad-loading']"
             v-show="scope.row.isDown">
             <div class="progress">
               <el-progress
-                :text-inside="scope.row.Status == 1 || scope.row.Status == 10 || scope.row.Status == 11 || (!scope.row.Status && scope.row.precent == 100)?false:true"
-                :stroke-width="20" :percentage="scope.row.precent"
+                :text-inside="false"
+                :stroke-width="20" :percentage="100"
                 :color="scope.row.Status == 1 || scope.row.Status == 10 || scope.row.Status == 11?'#909399':'#67C23A'"></el-progress>
             </div>
             <div class="progress-right">
-              <span v-show="!scope.row.Status && scope.row.precent == 100">上传中</span>
+              <span v-show="!scope.row.Status">上传中</span>
               <span v-show="scope.row.Status == 1">等待检查...</span>
               <span v-show="scope.row.Status == 10">模型检查中</span>
               <span v-show="scope.row.Status == 11">未通过检查</span>
@@ -45,11 +45,16 @@
         </template>
       </el-table-column>
     </el-table>
+    <version-dialog :dialogVisible.sync="dialogVisible" :modelFile="modelFile" ref="addSpaceDialog"></version-dialog>
   </div>
 </template>
 <script>
 import { mapGetters } from "vuex";
+import versionDialog from "@/components/model/file/versionDialog";
 export default {
+  components: {
+    versionDialog
+  },
   props: {
     tableData: Array,
     persentList: Array,
@@ -57,7 +62,9 @@ export default {
   },
   data() {
     return {
-      maxHeight: 0
+      maxHeight: 0,
+      dialogVisible: false,
+      modelFile: null
     };
   },
   computed: {
@@ -68,6 +75,11 @@ export default {
     queryModelLog(item) {
       this.$emit("openModelLog", item);
     },
+    // 查看版本信息
+    handleClickVersion(item) {
+      this.modelFile = item;
+      this.dialogVisible = true;
+    },
     // 替换日志
     repliaceModel(item) {
       if (item.Status != 4 && item.Status != 21) {

+ 14 - 2
src/components/model/file/modelLog.vue

@@ -9,7 +9,7 @@
               <el-table-column label="版本">
                 <template slot-scope="scope">
                   <span style="margin-right: 5px">{{ scope.row.Version }}</span>
-                  <i v-show="scope.row.Version" class="iconfont icon-warn" style="cursor:pointer;" title="查看版本更新信息"></i>
+                  <i v-show="scope.row.Version" class="iconfont icon-warn" style="cursor:pointer;" title="查看版本更新信息" @click="handleClickVersion(scope.row)"></i>
                 </template>
               </el-table-column>
               <el-table-column prop="AcceptTime" label="上传时间"></el-table-column>
@@ -27,11 +27,16 @@
         </el-tabs>
       </div>
     </el-dialog>
+    <version-dialog :dialogVisible.sync="dialog" :modelFile="modelFile" ref="addSpaceDialog"></version-dialog>
   </div>
 </template>
 <script>
 import request from "@/api/model/file.js";
+import versionDialog from "@/components/model/file/versionDialog";
 export default {
+  components: {
+    versionDialog
+  },
   props: {
     modelLogVisible: Boolean,
     modelFolderName: String,
@@ -41,7 +46,9 @@ export default {
     return {
       dialogVisible: false, //是否显示该弹窗
       activeName: "first", //默认选择上传日志
-      tableData: [] //列表数据
+      tableData: [], //列表数据
+      dialog: false,
+      modelFile: null,
     };
   },
   computed: {
@@ -56,6 +63,11 @@ export default {
     }
   },
   methods: {
+    // 查看版本信息
+    handleClickVersion(item) {
+      this.modelFile = item;
+      this.dialog = true;
+    },
     handleClose(done) {
       this.$emit("CloseModelLogDia");
     },

+ 54 - 0
src/components/model/file/versionDialog.vue

@@ -0,0 +1,54 @@
+<template>
+  <el-dialog :title="title" :visible.sync="dialog" :before-close="handleClose" width="900px" id="">
+    <span slot="footer" class="dialog-footer">
+      <el-button size="small" @click="handleClose">取 消</el-button>
+      <el-button size="small" type="primary">确 定</el-button>
+    </span>
+  </el-dialog>
+</template>
+
+<script>
+import { mapGetters } from "vuex";
+import request from "@/api/model/file.js";
+export default {
+  components: {
+
+  },
+  computed: {
+    ...mapGetters("layout", ["projectId"]),
+    dialog() {
+      return this.dialogVisible;
+    }
+  },
+  data() {
+    return {
+      title: "版本文件信息",
+    }
+  },
+  props: {
+    dialogVisible: Boolean,
+    modelFile: Object,
+  },
+  mounted() { },
+  methods: {
+    // 关闭弹窗
+    handleClose() {
+      this.$emit("update:dialogVisible", false);
+    },
+  },
+  watch: {
+    dialogVisible: {
+      handler() {
+        if (this.dialogVisible) {
+          // this.tableData = [];
+          // this.getTableData();
+        }
+      },
+      immediate: true
+    }
+  }
+};
+</script>
+<style lang="less" scoped>
+
+</style>

+ 2 - 0
src/router/system.js

@@ -88,6 +88,7 @@ import supplier from '@/views/manufactor/supplier'
 /**  辅助屏 */
 import splitScreen from '@/views/screen/splitScreen'
 import spaceLedger from '@/views/screen/splitScreen/spaceledger'
+import equipLedger from '@/views/screen/splitScreen/equipledger'
 import integrateResults from '@/views/screen/splitScreen/integrateresults'
 
 /**  业务空间数据导入工具 */
@@ -127,6 +128,7 @@ export default [{
         component: splitScreen,
         children: [
             { path: 'spaceledger', name: 'spaceLedger', component: spaceLedger },
+            { path: 'equipledger', name: 'equipLedger', component: equipLedger },
             { path: 'integrateresults', name: 'integrateResults', component: integrateResults }
         ]
     },

+ 2 - 2
src/views/data_admin/buildGraphy/graphyCanvas.vue

@@ -100,7 +100,6 @@ export default {
         that.scene.markerClick(that, that.markClick);
         that.scene.spaceClick(that, that.spaceClick);
         that.view.fitSceneToView();
-        that.view.maxScale = that.view.scale * 10;
         that.view.minScale = that.view.scale;
         // that.view.minScale = 0.000001;
         if (that.$refs.canvasFun) {
@@ -307,7 +306,8 @@ export default {
     "view.scale": {
       handler(n, o) {
         if (this.$refs.canvasFun) {
-          this.$refs.canvasFun.sliderVal = n * 10 / this.view.minScale;
+          let s = n * 10 / this.view.minScale
+          this.$refs.canvasFun.sliderVal = s > 1000 ? 1000 : s;
         }
       }
     }

+ 37 - 38
src/views/ledger/cenotelist/index.vue

@@ -26,15 +26,8 @@
         <handson-table ref="table"></handson-table>
       </div>
     </div>
-    <el-pagination
-      class="right"
-      v-show="tableData && tableData.length"
-      @size-change="handleSizeChange"
-      @current-change="handleCurrentChange"
-      :current-page="page.pageNumber"
-      :page-sizes="page.pageSizes"
-      :page-size="page.pageSize"
-      layout="total, sizes, prev, pager, next, jumper"
+    <el-pagination class="right" v-show="tableData && tableData.length" @size-change="handleSizeChange" @current-change="handleCurrentChange"
+      :current-page="page.pageNumber" :page-sizes="page.pageSizes" :page-size="page.pageSize" layout="total, sizes, prev, pager, next, jumper"
       :total="page.total">
     </el-pagination>
     <!-- 不支持的输入方式 -->
@@ -59,7 +52,7 @@ import showTools from "@/utils/handsontable/notShow"
 import text from "@/utils/handsontable/mainText"
 import cenoteType from "@/components/ledger/lib/cenoteType";
 import handsonTable from "@/components/common/handsontable";
-import { getDataDictionary, getCenoteTableData, updataCenoteTableData, deleteCenoteTableData, saveCenoteRelateSpace, BeatchQueryParam } from "@/api/scan/request"
+import { getDataDictionary, queryCenoteTableData, updataCenoteTableData, deleteCenoteTableData, saveCenoteRelateSpace, BeatchQueryParam } from "@/api/scan/request"
 import { mapGetters, mapActions } from "vuex";
 export default {
   components: {
@@ -90,11 +83,11 @@ export default {
       },
       tableData: [],
       copyTableData: [],
-      tableExample:null,
+      tableExample: null,
       myDialog: {
         update: false,//临时维护信息点
       },
-      inputMap: { }, //信息点和输入方式映射表
+      inputMap: {}, //信息点和输入方式映射表
       updateInputShow: false, //是否显示临时维护输入框
       updateInfoPoint: '',//临时维护信息点
       updateInput: '', //临时维护信息点值
@@ -102,14 +95,14 @@ export default {
   },
   computed: {
     ...mapGetters("layout", [
-        "projectId",
-        "secret",
-        "userId"
+      "projectId",
+      "secret",
+      "userId"
     ]),
-    showTypes () {
-      return this.onlyRead?
-        [{value: "Visible", label: '只看采集信息'}, {value: "all", label: '全部'}]:
-        [{value: "Visible", label: '只看采集信息'}, {value: "all", label: '全部'}]
+    showTypes() {
+      return this.onlyRead ?
+        [{ value: "Visible", label: '只看采集信息' }, { value: "all", label: '全部' }] :
+        [{ value: "Visible", label: '只看采集信息' }, { value: "all", label: '全部' }]
     }
   },
   created() {
@@ -142,7 +135,7 @@ export default {
       await getDataDictionary(param, res => {
         this.tableHeader = res.Content;
         this.tableHeader.forEach(item => {
-          if(item.Path && item.InputMode){
+          if (item.Path && item.InputMode) {
             this.inputMap[item.Path] = item.InputMode
           }
         })
@@ -151,17 +144,18 @@ export default {
     },
     async getTableData() {//获取表格数据
       let params = {
-        Filters: this.cenoteId? `ProjectId='${this.projectId}';structureInfo.ShaftFuncType='${this.cenoteId}'`: `ProjectId='${this.projectId}'`,
+        Cascade: [{ Name: 'spaceList' }],
+        Filters: this.cenoteId ? `ProjectId='${this.projectId}';structureInfo.ShaftFuncType='${this.cenoteId}'` : `ProjectId='${this.projectId}'`,
         Orders: "createTime desc, ShaftID asc",
         PageNumber: this.page.pageNumber,
         PageSize: this.page.pageSize
       }
-      await getCenoteTableData(params, (res) => {
+      await queryCenoteTableData(params, (res) => {
         this.tableData = res.Content
         this.copyTableData = tools.deepCopy(res.Content)
         this.page.pageNumber = res.PageNumber
         this.page.total = res.Total
-        if(this.tableData && this.tableData.length){
+        if (this.tableData && this.tableData.length) {
           if (this.onlyRead) {
             this.getBatch(res.Content)
           }
@@ -175,7 +169,7 @@ export default {
         Content: [],
         Projection: []
       }, keyList = [];
-       //生成要修改字段列表
+      //生成要修改字段列表
       change.map(item => {
         let key = item[1].split(".")[0]
         if (item[1] && keyList.indexOf(key) == -1) {
@@ -223,7 +217,7 @@ export default {
     },
     // 添加竖井
     handleCreateTableData() {
-      this.$router.push({ name: 'cenoteadd'})
+      this.$router.push({ name: 'cenoteadd' })
     },
     // 删除表格行
     handleDeleteTableRow() {
@@ -233,7 +227,7 @@ export default {
       }
       let param = []
       params.map(item => {
-        param.push({ShaftID: item.ShaftID})
+        param.push({ ShaftID: item.ShaftID })
       })
       this.$confirm("此操作将删除竖井,是否继续?", "提示", {
         confirmButtonText: '确定',
@@ -297,10 +291,14 @@ export default {
       let arr = tools.copyArr(list);
       let data = showTools.headerTypeFilter(arr, "shaft", this.onlyRead, this.showType)
       data.unshift({
-        data: "SpaceCount",
-        renderer: tools.num,
+        data: "SpaceList",
+        renderer: (instance, td, row, col, prop, value, cellProperties) => {
+          td.style.color = "#409EFF";
+          td.innerHTML = `<span>${value?value.length:0}</span>`
+          return td;
+        },
         readOnly: true
-      },{
+      }, {
         data: "OtheRelations",
         renderer: (instance, td, row, col, prop, value, cellProperties) => {
           td.style.color = "#409EFF";
@@ -343,13 +341,13 @@ export default {
       //其他的开始判断
       let val = this.tableExample.colToProp(row.col)
       let inputMode = this.inputMap[val]
-      let name = infos.ShaftLocalName?infos.ShaftLocalName:infos.ShaftName
+      let name = infos.ShaftLocalName ? infos.ShaftLocalName : infos.ShaftName
       this.shaftId = infos.ShaftID //要操作的数据id
       //点击关联的元空间
-      if (val === "SpaceCount") {
+      if (val === "SpaceList") {
         this.$router.push({
-          path:'/ledger/relatedSpace',
-          query:{ShaftId: this.shaftId,name:name,onlyRead:this.onlyRead}
+          path: '/ledger/relatedSpace',
+          query: { ShaftId: this.shaftId, name: name, onlyRead: this.onlyRead }
         })
         return false
       } else if (val === "OtheRelations") {
@@ -375,7 +373,7 @@ export default {
       this.updateInput = ''
     },
     //更新临时维护信息点
-    handleClickUpdate(){
+    handleClickUpdate() {
       tools.setDataForKey(this.tableData[this.row], this.updateInfoPoint, this.updateInput)
       this.handleUpdataTable([[this.row, this.updateInfoPoint, null, this.updateInput]], "edit")
       this.updateInputShow = false
@@ -489,7 +487,7 @@ export default {
                         item,
                         head.Path,
                         // child.error ? "表号功能号格式错误" : "表号功能号不存在"
-                        child.error ? child.value? "表号功能号格式错误" : "表号功能号不存在" : "暂未采集到实时数据"
+                        child.error ? child.value ? "表号功能号格式错误" : "表号功能号不存在" : "暂未采集到实时数据"
                       );
                     }
                   });
@@ -535,7 +533,7 @@ export default {
       padding: 5px 15px;
       margin-right: 5px;
       box-shadow: 0px 1px 5px 0px rgba(59, 66, 84, 0.15);
-      .table_right_box::after{
+      .table_right_box::after {
         display: block;
         content: "";
         clear: both;
@@ -547,7 +545,8 @@ export default {
     }
   }
 }
-.el-pagination button, .el-pagination span:not([class*=suffix]) {
-    vertical-align: middle;
+.el-pagination button,
+.el-pagination span:not([class*="suffix"]) {
+  vertical-align: middle;
 }
 </style>

+ 31 - 22
src/views/ledger/spacelist/index.vue

@@ -3,18 +3,12 @@
  -->
 <template>
   <div id="businessSpace">
-    <!------------------------    头部弹窗,选择楼层信息     -------------->
-    <!-- <influence-dialog ref="influence" :param="param" :tabsList="tabsList" title="受元空间变化影响的业务空间" :isShow="floor"></influence-dialog> -->
-    <details-dialog ref="details" @del="delSuccess" :param="param" :tabsList="tabsList" title="业务空间详情" :isShow="floor" :activeTabType="activeTabType">
-    </details-dialog>
-    <not-related ref="notRelated" @createSuccess="createSuccess" :isShow="floor"></not-related>
-    <facility-dialog ref="facility" :activeTabType="activeTabType" :isShow="floor"></facility-dialog>
+    <!-- 空间属于多个建筑楼层 -->
+    <!-- <roomInFloorDialog ref="roomInFloorDialog"></roomInFloorDialog> -->
     <!--------- 页面头部   -------------->
-    <div class="saga-title">
+    <div class="saga-title" v-show="1">
       <div class="saga-build-mess">
-        <!-- <span style="padding-right:12px;color:#999999;">建筑楼层</span> -->
         <floorCascader @change="changeCascader" ref="floorCascader"></floorCascader>
-        <!-- <el-cascader :options="options" v-model="buildFloorSelectd" :props="props" @change="changeCascader"></el-cascader> -->
       </div>
       <div class="saga-build-tab">
         <el-radio-group v-model="isMyTab" @change="changeRadio" style="width: 136px;">
@@ -22,8 +16,9 @@
           <el-radio-button label="2" class="space-own-radio" style="width: 68px;">列表</el-radio-button>
         </el-radio-group>
       </div>
+      <!-- <div class="saga-build-tips" v-if="1" @click="getTips">有25个空间同时属于多个建筑楼层,点击处理</div> -->
     </div>
-    <div class="saga-business-sapce-main">
+    <div class="saga-business-sapce-main" v-show="1">
       <el-row class="spaceTypes">
         <div class="types">
           <el-tabs v-model="activeName" type='card' @tab-click="tabClick">
@@ -40,16 +35,24 @@
         <handsontable-main @lookEqu="lookEqu" ref="handsontable" :zoneCode="activeName" :id="`handsontable${activeName}`"></handsontable-main>
       </div>
     </div>
+    <div v-show="0" style="display:flex;align-items:center;justify-content:center;height:100%;background-color:#fff;">
+      <div class="center" style="flex:1">
+        <i class="iconfont icon-jianzhu" style="font-size:50px;"></i>
+        <p style="margin:10px 0;">设备空间关系已产生变化,请请前往关系总览重新计算</p>
+        <el-button>立即跳转</el-button>
+      </div>
+    </div>
   </div>
 </template>
 <script>
-import noModelDialog from "@/components/business_space/dialogs/noModelDialog";
-import influenceDialog from "@/components/business_space/dialogs/influenceDialog";
-import detailsDialog from "@/components/business_space/dialogs/detailsDialog";
-import notRelated from "@/components/business_space/dialogs/notRelated";
-import facilityDialog from "@/components/business_space/dialogs/facilityDialog";
+// import noModelDialog from "@/components/business_space/dialogs/noModelDialog";
+// import influenceDialog from "@/components/business_space/dialogs/influenceDialog";
+// import detailsDialog from "@/components/business_space/dialogs/detailsDialog";
+// import notRelated from "@/components/business_space/dialogs/notRelated";
+// import facilityDialog from "@/components/business_space/dialogs/facilityDialog";
 // import graphy from "@/components/business_space/graphy/business";
 import graphy from "@/components/business_space/newGraphy/graphy";
+import roomInFloorDialog from "@/components/business_space/newAddDialogs/roomInFloorDialog";
 import handsontableMain from "@/components/business_space/business/handsontable";
 import {
   getDataDictionary,
@@ -63,13 +66,9 @@ import floorCascader from "@/components/ledger/lib/floorCascader";
 import { mapGetters, mapActions } from "vuex";
 export default {
   components: {
-    noModelDialog,
-    influenceDialog,
-    detailsDialog,
-    notRelated,
     graphy,
     handsontableMain,
-    facilityDialog,
+    roomInFloorDialog,
     floorCascader,
   },
   computed: {
@@ -215,7 +214,7 @@ export default {
     // 判断切换至图还是表
     changeGraphyOrTable(num) {
       this.activeTabType = this.getItemForType()
-      if(!this.buildFloorSelectd[0]) {
+      if (!this.buildFloorSelectd[0]) {
         this.$message.warning('请选择建筑楼层')
         return
       };
@@ -271,6 +270,10 @@ export default {
       this.floor.facility = true
       this.$refs.facility.getData(infos, this.buildMess)
     },
+    // 空间属于多个建筑楼层
+    getTips() {
+      this.$refs.roomInFloorDialog.showDialog();
+    }
   },
   watch: {
     floor: {
@@ -308,7 +311,6 @@ export default {
     font-size: 14px;
     position: relative;
     line-height: 54px;
-    width: 99.5%;
     margin-bottom: 10px;
     border: 1px solid #dfe6ec;
     .saga-build-mess {
@@ -362,6 +364,13 @@ export default {
         color: #fff;
       }
     }
+    .saga-build-tips {
+      float: right;
+      margin-right: 10px;
+      font-size: 12px;
+      color: #409eff;
+      cursor: pointer;
+    }
   }
   .saga-business-sapce-main {
     overflow: hidden;

+ 2 - 2
src/views/model/file/index.vue

@@ -312,8 +312,8 @@ export default {
         });
         this.queryFloorFile(this.currentFolderId);
         Bus.$emit('openUploader', { 
-          uploadId: res.uploadId, 
-          modelId: res.modelId,
+          uploadId: res.UploadId, 
+          modelId: res.ModelId,
           systemId: 'revit', //系统名称
           secret: '63afbef6906c342b', //系统密码
         }, data.file.raw)

+ 4 - 4
src/views/point/config_point/steps/step1.vue

@@ -22,8 +22,8 @@
         <own-dialog :width="'500px'" :index="true" title="导出excel模板" :dialogVisible="downloadExcel" :footer="footer" @cancel="close" @confirm="download">
             <span>请选择要导出的模板</span>
             <el-select v-model="exportTemplate" placeholder="请选择模板">
-                <el-option label="模板一" value="0"></el-option>
-                <el-option label="模板二" value="1" :disabled="protocolType!='common'"></el-option>
+                <el-option label="标准模版" value="0"></el-option>
+                <el-option label="设备采集多个参数模版" value="1" :disabled="protocolType!='common'"></el-option>
             </el-select>
         </own-dialog>
         <own-dialog :width="'500px'" :index="true" :footer="footer" title="导入excel" :dialogVisible="updateExcel" @confirm="sureOfUpload" @cancel="close">
@@ -34,8 +34,8 @@
             <div>
                 <span>请选择要导入的模板</span>
                 <el-select v-model="importTemplate" placeholder="请选择模板">
-                    <el-option label="模板一" value="0"></el-option>
-                    <el-option label="模板二" value="1" :disabled="protocolType!='common'"></el-option>
+                    <el-option label="标准模版" value="0"></el-option>
+                    <el-option label="设备采集多个参数模版" value="1" :disabled="protocolType!='common'"></el-option>
                 </el-select>
             </div>
             <div>

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

@@ -104,7 +104,6 @@ export default {
       this.drawMainScene.isSpaceSelectable = false;
 
       if (this.$refs.canvasFun) {
-        this.view.maxScale = this.view.scale * 10;
         this.view.minScale = this.view.scale;
         this.$refs.canvasFun.everyScale = this.view.scale;
       }
@@ -206,7 +205,8 @@ export default {
     "view.scale": {
       handler(n) {
         if (this.$refs.canvasFun) {
-          this.$refs.canvasFun.sliderVal = n * 10 / this.view.minScale;
+          let s = n * 10 / this.view.minScale
+          this.$refs.canvasFun.sliderVal = s > 1000 ? 1000 : s;
         }
       }
     },

+ 18 - 4
src/views/ready/buildfloor/repetitionGraphy.vue

@@ -7,6 +7,7 @@
       <el-button v-if="!isEdit" size="mini" @click="editGraphy">编辑平面图</el-button>
       <el-button v-if="isEdit" size="mini" @click="cancel">取消</el-button>
       <el-button v-if="isEdit" size="mini" @click="confirm" type="primary">确认</el-button>
+      <span style="float:right;" v-if="file.FolderName">当前对应的模型文件:{{file.FolderName}}{{file.FloorName}}</span>
     </div>
     <!-- 展示图片 -->
     <div class="drawImg">
@@ -20,6 +21,7 @@
 import drawFloor from "./drawGraphy/drawFloor";
 import checkGraphy from "./drawGraphy/checkGraphy"; //查看图片
 import { floorUpdate } from "@/api/scan/request";
+import { getFileNameById } from "@/api/model/file";
 export default {
   components: {
     drawFloor,
@@ -27,14 +29,16 @@ export default {
   },
   data() {
     return {
-      // modelId: "", // 
+      modelId: "", // 
       isEdit: false, // 是否编辑模式
+      file: {}
     };
   },
   created() {
-    // this.modelId = this.$route.query.modelId;
+    this.modelId = this.$route.query.modelId;
     this.FloorID = this.$route.query.FloorID;
     this.BuildID = this.$route.query.BuildID;
+    this.getFileName(this.modelId)
   },
   mounted() { },
   methods: {
@@ -87,8 +91,18 @@ export default {
     },
     // 替换模型文件成功
     refresh(modelId) {
-      // this.modelId = modelId
-      this.$refs.drawFloor.init();
+      this.modelId = modelId;
+      this.getFileName(this.modelId)
+    },
+    // 获取文件夹名称
+    getFileName(modelId) {
+      if (!modelId) return
+      let pa = {
+        Id: modelId
+      }
+      getFileNameById(pa, res => {
+        this.file = res;
+      })
     }
   },
   watch: {

+ 138 - 0
src/views/screen/splitscreen/equipledger/index.vue

@@ -0,0 +1,138 @@
+<template>
+  <div>
+    <div class='page-bar'>
+      <span>设备名称:</span>
+      <span>{{equip.EquipLocalName || equip.EquipName}}</span>
+      <span>(位置图片)</span>
+    </div>
+    <div class="page-content" id="page-content">
+      <div v-show="showCanvas">
+        <p>{{file.FolderName}}{{file.FloorName}}</p>
+        <canvas :height="cadHeight" :width="cadWidth" id="floorCanvas" :k="refreshCanvas"></canvas>
+      </div>
+      <div class="no-data" v-show="!showCanvas">
+        <div class="position-icon">
+          <i class="icon-wushuju iconfont"></i>
+          数据暂无
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { LocationPointScene, FloorView } from "@saga-web/cad-engine";
+import { getFileNameById } from "@/api/model/file";
+
+export default {
+  data() {
+    return {
+      equip: {},
+      file: {},
+      view: '',
+      scene: {},
+      cadWidth: 800,
+      cadHeight: 800,
+      showCanvas: true
+    }
+  },
+  mounted() {
+    this.cadWidth = document.getElementById('page-content').offsetWidth;
+    this.cadHeight = document.getElementById('page-content').offsetHeight;
+    this.equip = this.$route.query.equip;
+    this.init();
+  },
+  methods: {
+    init() {
+      if (this.equip.ModelId && this.equip.BIMLocation) {
+        this.showCanvas = true;
+        this.getGraphy();
+        this.getFileName();
+      } else {
+        this.showCanvas = false;
+      }
+    },
+    // 获取底图
+    getGraphy() {
+      this.clearGraphy();
+      this.scene = new LocationPointScene()
+      this.scene.getFloorData('/modelapi/base-graph/query', { ModelId: this.equip.ModelId }).then(res => {
+        this.getGraphtSuc(res)
+      })
+    },
+    getGraphtSuc(res) {
+      this.view.scene = this.scene;
+      this.view.fitSceneToView();
+      this.scene.isSpaceSelectable = false;
+      let obj = {
+        X: this.equip.LocationJson.X,
+        Y: -this.equip.LocationJson.Y
+      }
+      this.scene.addMarker(obj);
+    },
+    refreshCanvas() {
+      return new Date().getTime();
+    },
+    // 获取文件夹及文件名称
+    getFileName() {
+      let pa = { Id: this.equip.ModelId }
+      getFileNameById(pa, res => {
+        this.file = res
+      })
+    },
+    // 清空平面图
+    clearGraphy() {
+      if (this.view) {
+        this.view.scene = null;
+        return
+      }
+      let id = `floorCanvas`;
+      this.view = new FloorView(id)
+    },
+  },
+  watch: {
+    $route(to, from) {
+      let equip = this.$route.query.equip || {};
+      if (equip.EquipID && equip.EquipID != this.equip.EquipID) {
+        this.equip = equip;
+        this.init()
+      }
+    }
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+$borderColor: rgba(201, 201, 201, 1);
+.page-bar {
+  flex-grow: 0;
+  flex-shrink: 0;
+  height: 24px;
+  padding: 0 10px;
+  margin-bottom: 10px;
+  border-bottom: 1px solid $borderColor;
+}
+.page-content {
+  position: relative;
+  height: 100%;
+  border: 1px solid $borderColor;
+  p {
+    padding: 10px 16px;
+  }
+  canvas {
+    top: 0;
+  }
+  .no-data {
+    height: 100%;
+    text-align: center;
+    box-sizing: border-box;
+    position: relative;
+    .position-icon {
+      position: absolute;
+      top: 50%;
+      left: 50%;
+      transform: translate(-50%, -50%);
+    }
+  }
+}
+</style>

+ 5 - 0
src/views/screen/splitscreen/index.vue

@@ -62,6 +62,11 @@ export default {
           path:'/splitScreen/integrateresults',
           query: data.data
         })
+      }  else if (data.path && data.path == '/ledger/facility') {//设备位置图
+        this.$router.push({
+          path:'/splitScreen/equipledger',
+          query: data.data
+        })
       } else {
         this.$router.push({
           path:'/splitScreen'