|
@@ -0,0 +1,277 @@
|
|
|
+<template>
|
|
|
+ <el-dialog
|
|
|
+ title='修改BIM模型中的坐标'
|
|
|
+ v-if='dialog.bimcode'
|
|
|
+ custom-class='custom-dialog'
|
|
|
+ :visible.sync='dialog.bimcode'
|
|
|
+ width='900px'
|
|
|
+ @close='handleClose'
|
|
|
+ >
|
|
|
+ <div id='bim-code' v-if='Object.keys(bimcodeobj).length>0'>
|
|
|
+ <div class='eq'>
|
|
|
+ <span class='eq-name'>设备名称 </span>
|
|
|
+ {{bimcodeobj.EquipLocalName || bimcodeobj.EquipName|| '--'}}
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <noAllDataFloor @change='changeFloor' ref='floors' @getFloorMap='getFloorMap'></noAllDataFloor>
|
|
|
+ <span v-if='isShow' class='errMsg'>请选择设备所属建筑楼层</span>
|
|
|
+ </div>
|
|
|
+ <div class='canvas-box' v-loading='canvasLoading'>
|
|
|
+ <canvas v-show='isdata' :id='`floorCanvas${id}`' :width='cadWidth' :height='cadHeight' ref='canvas' tabindex='0'></canvas>
|
|
|
+ <p v-show='!isdata'>当前楼层暂无平面图,请前往“建筑楼层管理”中给楼层添加平面图</p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div slot='footer' class='footer'>
|
|
|
+ <el-button @click='handleClose'>取 消</el-button>
|
|
|
+ <el-button type='primary' @click='save'>确 定</el-button>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+</template>
|
|
|
+<script>
|
|
|
+import noAllDataFloor from './noAllDataFloor'
|
|
|
+import { LocationPointScene, FloorView, Opt } from '@saga-web/cad-engine/lib'
|
|
|
+import { SColor, SPoint } from '@saga-web/draw/lib'
|
|
|
+import { floorQueryOutline, updateEquip } from '@/api/scan/request'
|
|
|
+import { SGraphyItem } from '@saga-web/graphy/lib'
|
|
|
+export default {
|
|
|
+ components: {
|
|
|
+ noAllDataFloor,
|
|
|
+ },
|
|
|
+ props: {
|
|
|
+ dialog: {
|
|
|
+ type: Object,
|
|
|
+ default: function () {
|
|
|
+ return {
|
|
|
+ bimcode: false,
|
|
|
+ }
|
|
|
+ },
|
|
|
+ },
|
|
|
+ bimcodeobj: {
|
|
|
+ default: {},
|
|
|
+ },
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ cadWidth: 800,
|
|
|
+ cadHeight: 400,
|
|
|
+ Buildfloor: '',
|
|
|
+ value: [],
|
|
|
+ isdata: true,
|
|
|
+ floorData: {},
|
|
|
+ canvasLoading: false,
|
|
|
+ isShow: false,
|
|
|
+ id: 'ty',
|
|
|
+ view: '',
|
|
|
+ drawMainScene: '',
|
|
|
+ floorToMap: {},
|
|
|
+ }
|
|
|
+ },
|
|
|
+ created() {},
|
|
|
+ mounted() {
|
|
|
+ console.log(this.bimcodeobj)
|
|
|
+ this.init()
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ init() {
|
|
|
+ this.isShow = true
|
|
|
+ this.$nextTick(function () {
|
|
|
+ if (this.bimcodeobj.FloorId) {
|
|
|
+ this.isShow = false
|
|
|
+ }
|
|
|
+ if (this.$refs.floors) {
|
|
|
+ this.$refs.floors.setValue([this.bimcodeobj.BuildingId, this.bimcodeobj.FloorId])
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ //切换楼层
|
|
|
+ changeFloor(value) {
|
|
|
+ this.Buildfloor = value
|
|
|
+ this.isShow = true
|
|
|
+ if (value.length > 1) {
|
|
|
+ this.isShow = false
|
|
|
+ this.floorData = this.floorToMap[value[1]]
|
|
|
+ } else {
|
|
|
+ this.isShow = false
|
|
|
+ this.floorData = {}
|
|
|
+ }
|
|
|
+ this.getFloorData()
|
|
|
+ },
|
|
|
+ // 初始化canvas
|
|
|
+ initGraphy(Id, type) {
|
|
|
+ // type=1 => id:模型id 这里不需要
|
|
|
+ // type=2 => id:floormap jsonz格式
|
|
|
+ // type = 3 => id:floormap png或者jpg格式
|
|
|
+ let that = this
|
|
|
+ that.clearGraphy()
|
|
|
+ that.drawMainScene = new LocationPointScene()
|
|
|
+ that.canvasLoading = true
|
|
|
+ if (type == 2) {
|
|
|
+ that.drawMainScene.loadUrl(`/image-service/common/file_get?systemId=revit&key=${Id}`).then((res) => {
|
|
|
+ that.getGraphtSuc(res)
|
|
|
+ })
|
|
|
+ } else if (type == 3) {
|
|
|
+ that.drawMainScene.loadImg(`/image-service/common/image_get?systemId=dataPlatform&key=${Id}`, (res) => {
|
|
|
+ that.getGraphtSuc(res)
|
|
|
+ })
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 获取底图成功
|
|
|
+ getGraphtSuc(res) {
|
|
|
+ this.canvasLoading = false
|
|
|
+ if (res == 'error') {
|
|
|
+ this.FloorMap = ''
|
|
|
+ this.$message.warning('数据解析异常')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (res.Result == 'failure') {
|
|
|
+ this.showTools = false
|
|
|
+ this.$message.warning(res.Message)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ this.view.scene = this.drawMainScene
|
|
|
+ let obj = {
|
|
|
+ X: this.bimcodeobj.LocationJson.X,
|
|
|
+ Y: -this.bimcodeobj.LocationJson.Y,
|
|
|
+ }
|
|
|
+ //回写编辑
|
|
|
+ this.drawMainScene.addMarker(obj)
|
|
|
+ this.view.fitSceneToView()
|
|
|
+ this.drawMainScene.isSpaceSelectable = false
|
|
|
+ this.drawMainScene.spaceClick(this, this.canvasClick)
|
|
|
+ if (this.floorData.Outline && this.floorData.Outline.length) {
|
|
|
+ let newArr = this.floorData.Outline.map((t) => {
|
|
|
+ return new SPoint(t.X, t.Y)
|
|
|
+ })
|
|
|
+ this.drawMainScene.addSceneMark(newArr)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ //获取楼层数据
|
|
|
+ getFloorData() {
|
|
|
+ console.log(this.floorData)
|
|
|
+ if (this.floorData && this.floorData.StructureInfo && this.floorData.StructureInfo.FloorMap) {
|
|
|
+ this.isdata = true
|
|
|
+ let floorMap = this.floorData.StructureInfo.FloorMap
|
|
|
+ if (floorMap.split('.')[1].toString() == 'png' || floorMap.split('.')[1].toString() == 'jpg') {
|
|
|
+ this.initGraphy(floorMap, 3)
|
|
|
+ } else {
|
|
|
+ this.initGraphy(floorMap, 2)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //暂无数据
|
|
|
+ this.isdata = false
|
|
|
+ this.clearGraphy()
|
|
|
+ }
|
|
|
+ },
|
|
|
+ //关闭弹窗
|
|
|
+ handleClose() {
|
|
|
+ this.view = ''
|
|
|
+ this.drawMainScene = ''
|
|
|
+ this.$emit('closeBIM')
|
|
|
+ },
|
|
|
+ //保存事件
|
|
|
+ save() {
|
|
|
+ if (this.drawMainScene) {
|
|
|
+ if (this.drawMainScene.markerList.length) {
|
|
|
+ let obj = this.drawMainScene.markerList[0]
|
|
|
+ console.log(obj)
|
|
|
+ let param = {
|
|
|
+ Content: [
|
|
|
+ {
|
|
|
+ EquipID: this.bimcodeobj.EquipID,
|
|
|
+ BuildingId: this.Buildfloor[0],
|
|
|
+ FloorId: this.Buildfloor[1],
|
|
|
+ BIMLocation: `${obj.x.toFixed(2)},${(obj.y * -1).toFixed(2)},${this.bimcodeobj.BIMLocation.split(',')[2]}`,
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ Projection: ['BIMLocation', 'BuildingId', 'FloorId'],
|
|
|
+ }
|
|
|
+ updateEquip(param, (res) => {
|
|
|
+ console.log(res)
|
|
|
+ if (res.Result == 'success') {
|
|
|
+ this.$message.success('保存成功')
|
|
|
+ this.handleClose()
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 清空平面图
|
|
|
+ clearGraphy() {
|
|
|
+ if (this.view) {
|
|
|
+ this.view.scene = null
|
|
|
+ return
|
|
|
+ }
|
|
|
+ let id = `floorCanvas${this.id}`
|
|
|
+ this.view = new FloorView(id)
|
|
|
+ },
|
|
|
+ //得到floormap
|
|
|
+ getFloorMap(val) {
|
|
|
+ this.floorToMap = val
|
|
|
+ this.floorData = this.floorToMap[this.bimcodeobj.FloorId]
|
|
|
+ this.getFloorData()
|
|
|
+ },
|
|
|
+ // canvas点击事件
|
|
|
+ canvasClick(item, event) {
|
|
|
+ if (item instanceof SGraphyItem) {
|
|
|
+ this.clearMark()
|
|
|
+ let obj = {
|
|
|
+ X: event[0].x,
|
|
|
+ Y: event[0].y,
|
|
|
+ }
|
|
|
+ this.drawMainScene.addMarker(obj)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ //清空标记
|
|
|
+ clearMark() {
|
|
|
+ if (this.drawMainScene) {
|
|
|
+ this.drawMainScene.markerList.forEach((t) => {
|
|
|
+ this.drawMainScene.removeItem(t)
|
|
|
+ })
|
|
|
+ this.drawMainScene.markerList = []
|
|
|
+ }
|
|
|
+ },
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ bimcodeobj: {
|
|
|
+ immediate: true,
|
|
|
+ handler(val) {
|
|
|
+ this.init()
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+}
|
|
|
+</script>
|
|
|
+<style lang="less" scoped>
|
|
|
+#bim-code {
|
|
|
+ height: 500px;
|
|
|
+ .eq {
|
|
|
+ padding-bottom: 10px;
|
|
|
+ .eq-name {
|
|
|
+ color: #999999;
|
|
|
+ padding-left: 10px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .errMsg {
|
|
|
+ color: red;
|
|
|
+ padding-left: 10px;
|
|
|
+ }
|
|
|
+ #buildFloor {
|
|
|
+ clear: both;
|
|
|
+ margin-bottom: 10px;
|
|
|
+ }
|
|
|
+ .canvas-box {
|
|
|
+ border: 1px solid #ccc;
|
|
|
+ clear: both;
|
|
|
+ width: 800px;
|
|
|
+ height: 400px;
|
|
|
+ margin-left: 10px;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|
|
|
+<style lang="less" >
|
|
|
+#bim-code {
|
|
|
+}
|
|
|
+</style>
|