objectInstance.vue 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <template>
  2. <!-- 对象实例 -->
  3. <div id="objectInstance" v-loading="loading">
  4. <div class="obj-item" v-for="form in forms" :key="form.id" :style="{height:drawCanvas? '600px' : '350px'}">
  5. <el-form :model="form" label-width="150px">
  6. <el-form-item label="对象类型:">
  7. {{form.TypeName || '--'}}
  8. </el-form-item>
  9. <el-form-item label="对象实例本地名称:">
  10. {{form.ObjectLocalName || '--'}}
  11. </el-form-item>
  12. <el-form-item label="对象实例本地编码:">
  13. {{form.ObjectLocalCode || '--'}}
  14. </el-form-item>
  15. <el-form-item label="对象实例ID:">
  16. {{form.ObjectID || '--'}}
  17. </el-form-item>
  18. <el-form-item label="信息点名称:">
  19. {{form.InfomationPointName || '--'}}
  20. </el-form-item>
  21. <el-form-item label="对应值:">
  22. {{ reValue || '--'}}
  23. </el-form-item>
  24. <el-form-item label="对象实例位置图:">
  25. <span v-show="!drawCanvas">--</span>
  26. <div v-show="drawCanvas" style="border:1px solid rgba(0, 0, 0, 0.2);height:300px;">
  27. <canvas v-show="drawCanvas" height="300" :width="canvasWidth" class="instanceMap" :id="form.instanceId" :k="refreshCanvas"></canvas>
  28. </div>
  29. </el-form-item>
  30. </el-form>
  31. </div>
  32. </div>
  33. </template>
  34. <script>
  35. import { mapGetters } from 'vuex'
  36. import { SGraphyView } from "@saga-web/graphy/lib";
  37. import { LocationPointScene, DivideFloorScene } from "@saga-web/cad-engine"
  38. import { SColor } from "@saga-web/draw/lib";
  39. import {
  40. getTabFunNumObjInstance, getEquipByEqID, getFloorMsgByFloorID, queryZone
  41. } from '@/api/scan/request'
  42. export default {
  43. data() {
  44. return {
  45. forms: [],//实例数据
  46. views: [],//canvas view
  47. scenes: [],//canvas scene
  48. loading: true,
  49. refreshCanvas: '',//重载canvas组件
  50. drawCanvas: false,//是否画canvas,
  51. canvasWidth:450
  52. }
  53. },
  54. methods: {
  55. //加载对象实例
  56. loadObjectInstance() {
  57. this.loading = true;
  58. let pa = {
  59. Filters: `MeterFuncid='${this.tabFunNum}';Related='true'`//
  60. };
  61. let that = this;
  62. //获取所有实例信息
  63. getTabFunNumObjInstance(pa, res => {
  64. that.loading = false;
  65. that.forms = res.Content;
  66. res.Content.map((item, key) => {
  67. //存在实例ID
  68. if (item.ObjectID) {
  69. that.forms[key].instanceId = item.ObjectID;
  70. //设备或者组件
  71. if (item.TypeCode == 'Eq' || item.TypeCode == 'Ec') {
  72. let pa = {
  73. Filters: `EquipID='${item.TypeCode + this.projectId.substring(2) + item.ObjectID}'`
  74. }
  75. //获取设备信息
  76. getEquipByEqID(pa, equipMsg => {
  77. if (equipMsg.Content[0] && equipMsg.Content[0].LocationJson && equipMsg.Content[0].FloorId) {
  78. let canvasOption = {
  79. /** 标记的id */
  80. Id: equipMsg.Content[0].EquipID,
  81. /** 标记的名称 */
  82. Name: equipMsg.Content[0].EquipName,
  83. /** X坐标 */
  84. X: equipMsg.Content[0].LocationJson.X,
  85. /** Y坐标 */
  86. Y: -equipMsg.Content[0].LocationJson.Y
  87. }
  88. this.loadDataToInstanceByFloorID(equipMsg.Content[0].FloorId, key, item.TypeCode, canvasOption);
  89. }
  90. })
  91. }
  92. //空间
  93. else if (item.TypeCode == 'Sp') {
  94. let pa = {
  95. data: {
  96. Filters: `RoomID='${item.TypeCode + this.projectId.substring(2) + item.ObjectID}'`
  97. },
  98. zone: item.SubTypeCode
  99. }
  100. //获取空间信息
  101. queryZone(pa, zoneMsg => {
  102. if (zoneMsg.Content[0] && zoneMsg.Content[0].Outline) {
  103. let canvasOption = {
  104. RoomLocalName: zoneMsg.Content[0].RoomLocalName,
  105. OutLine: zoneMsg.Content[0].Outline,
  106. RoomID: zoneMsg.Content[0].RoomID,
  107. Color: new SColor('#F9C3C3')
  108. }
  109. this.loadDataToInstanceByFloorID(zoneMsg.Content[0].FloorId, key, item.TypeCode, canvasOption);
  110. }
  111. });
  112. }
  113. }
  114. });
  115. })
  116. },
  117. //通过floorid获取信息,后通过floormap获取数据后绘制canvas
  118. loadDataToInstanceByFloorID(floorId, key, typecode, options) {
  119. let param = {
  120. Filters: `FloorId='${floorId}'`
  121. }
  122. let that = this;
  123. //获取楼层信息
  124. getFloorMsgByFloorID(param, floorMsg => {
  125. //刷新canvas
  126. that.refreshCanvas = new Date().getTime();
  127. if (!that.views[key]) {
  128. that.views[key] = new SGraphyView(`${that.forms[key].instanceId}`)
  129. }
  130. that.views[key].scene = null;
  131. that.scenes[key] = null;
  132. //类型
  133. if (typecode == 'Eq' || typecode == 'Ec') {
  134. that.scenes[key] = new LocationPointScene();
  135. }
  136. else if (typecode == 'Sp') {
  137. that.scenes[key] = new DivideFloorScene();
  138. }
  139. if (floorMsg.Content[0] && floorMsg.Content[0].StructureInfo && floorMsg.Content[0].StructureInfo.FloorMap) {
  140. //获取数据,并加载canvas
  141. that.scenes[key].loadUrl(`/image-service/common/file_get?systemId=revit&key=${floorMsg.Content[0].StructureInfo.FloorMap}`).then(() => {
  142. that.drawCanvas = true;
  143. that.views[key].scene = that.scenes[key];
  144. that.scenes[key].isSpaceSelectable = false;
  145. if (typecode == 'Eq' || typecode == 'Ec') {
  146. that.scenes[key].addMarker(options);
  147. }
  148. else if (typecode == 'Sp') {
  149. that.scenes[key].addZone(options);
  150. }
  151. that.views[key].fitSceneToView();
  152. })
  153. }
  154. else{
  155. that.drawCanvas = false;
  156. }
  157. });
  158. }
  159. },
  160. mounted() {
  161. this.canvasWidth = document.getElementById("objectInstance").offsetWidth - 200
  162. this.loadObjectInstance();
  163. },
  164. props: {
  165. tabFunNum: String,//表号功能号,
  166. reValue: String//对应值
  167. },
  168. computed: {
  169. ...mapGetters('layout', ['projectId'])
  170. },
  171. watch: {
  172. //切换时更新数据
  173. tabFunNum() {
  174. this.loadObjectInstance();
  175. }
  176. }
  177. }
  178. </script>
  179. <style lang="less" scoped>
  180. #objectInstance {
  181. height: 100%;
  182. overflow: auto;
  183. }
  184. .instanceMap {
  185. min-height: 100px;
  186. }
  187. .obj-item {
  188. margin: 15px 10px;
  189. box-shadow: 0px 4px 10px 0px rgba(0,0,0,0.2);
  190. background-color: white;
  191. padding: 10px 10px;
  192. height: 600px;
  193. }
  194. </style>