Pārlūkot izejas kodu

Merge branch 'develop' into test

zhulizhen1111 4 gadi atpakaļ
vecāks
revīzija
e39f77c4e5
56 mainītis faili ar 2273 papildinājumiem un 379 dzēšanām
  1. 1 1
      package.json
  2. BIN
      public/favicon.ico
  3. 24 1
      src/App.vue
  4. 11 0
      src/api/coreDeviceReport.js
  5. 1 0
      src/api/httputils.js
  6. 2 0
      src/api/specificationUpdateRecord.js
  7. BIN
      src/assets/imgs/1pxlines.png
  8. BIN
      src/assets/imgs/apply.png
  9. BIN
      src/assets/imgs/dashedLines.png
  10. BIN
      src/assets/imgs/dotLines.png
  11. 22 0
      src/assets/svg/apply.svg
  12. 23 0
      src/assets/svg/gantt_chart.svg
  13. 16 0
      src/assets/svg/table.svg
  14. 80 39
      src/components/Legend/src/legend.vue
  15. 9 4
      src/components/PicLarge/src/picLarge.vue
  16. 8 2
      src/components/Rotation/src/rotation.vue
  17. 17 3
      src/components/floorMap/index.vue
  18. 12 7
      src/components/legendremarks.vue
  19. 450 49
      src/components/mapClass/EditScence.js
  20. 513 55
      src/components/mapClass/EditScence.ts
  21. 20 9
      src/components/viewLengend.vue
  22. 20 5
      src/lib/FloorScene.js
  23. 5 0
      src/store/index.js
  24. 318 0
      src/views/analysis/CoreDeviceReport.vue
  25. 104 0
      src/views/analysis/GanttChart.vue
  26. 85 0
      src/views/analysis/SpecificationUpdateRecord.vue
  27. 106 3
      src/views/analysis/index.vue
  28. 2 2
      src/views/equipment/eqDialog.vue
  29. 16 10
      src/views/equipment/index.vue
  30. 5 1
      src/views/equipment/table/eqDetaileDialog.vue
  31. 16 4
      src/views/equipment/table/eqListTable.vue
  32. 8 3
      src/views/equipment/table/lookPageTable.vue
  33. 11 7
      src/views/equipment/table/otherTable.vue
  34. 5 3
      src/views/equipment/table/standTable.vue
  35. 5 1
      src/views/equipment/table/tjTable.vue
  36. 12 8
      src/views/equipment/table/wbTable.vue
  37. 10 6
      src/views/equipment/table/wxTable.vue
  38. 13 17
      src/views/equipment/table/zwTable.vue
  39. 5 1
      src/views/floorFunc/index.vue
  40. 74 27
      src/views/legendLibrary/addForm.vue
  41. 27 8
      src/views/legendLibrary/addLegend.vue
  42. 92 46
      src/views/legendLibrary/index.vue
  43. 2 1
      src/views/other/gcfz2.vue
  44. 2 1
      src/views/other/gcfzDialog.vue
  45. 2 0
      src/views/other/index.vue
  46. 10 3
      src/views/other/zhsxOther.vue
  47. 11 7
      src/views/other/zhsxOtherTable1.vue
  48. 3 2
      src/views/other/zhsxOtherTable2.vue
  49. 6 2
      src/views/room/detail.vue
  50. 24 8
      src/views/room/index.vue
  51. 2 1
      src/views/room/room1.vue
  52. 6 3
      src/views/room/room2.vue
  53. 8 4
      src/views/room/room3.vue
  54. 24 14
      src/views/room/room4.vue
  55. 13 8
      src/views/room/room5.vue
  56. 12 3
      vue.config.js

+ 1 - 1
package.json

@@ -17,7 +17,7 @@
         "axios": "^0.19.2",
         "core-js": "^3.4.4",
         "element-ui": "^2.13.2",
-        "meri-design": "^1.3.2",
+        "meri-design": "^1.3.3",
         "moment": "^2.24.0",
         "quill": "^1.3.7",
         "vue": "^2.6.10",

BIN
public/favicon.ico


+ 24 - 1
src/App.vue

@@ -171,7 +171,7 @@ table {
 
 body ::-webkit-scrollbar {
   width: 5px;
-  height: 5px;
+  height: 8px;
 }
 
 body ::-webkit-scrollbar-track {
@@ -227,4 +227,27 @@ body {
     opacity: 0
   }
 }
+// element表头背景颜色修改
+.core-device-report,
+.specification-update-record{
+  .el-table thead th{
+    background-color: #F8F9FA;
+  }
+  .el-pagination.is-background .el-pager li:not(.disabled).active{
+    background: linear-gradient(180deg,rgba(54,156,247,1) 0%,rgba(2,91,170,1) 100%);
+  }
+}
+// 说明书更新记录 element 时间控件样式重写
+.specification-update-record,
+.core-device-report{
+  .el-input__inner{
+    height: 32px;
+    line-height: 32px;
+  }
+  .el-date-editor .el-range__icon,
+  .el-date-editor .el-range-separator{
+    line-height: 26px;
+    width: 8%;
+  }
+}
 </style>

+ 11 - 0
src/api/coreDeviceReport.js

@@ -0,0 +1,11 @@
+// 核心设备报表 接口
+import httputils from "@/api/httputils";
+
+// 系统列表
+export function queryEquipmentList() {
+  return httputils.getJson(`/data/data/v_glsms_systemcfg/querySmsxt`);
+}
+// 表数据
+export function queryTableData(url, postParams) {
+  return httputils.postJson(url, postParams);
+}

+ 1 - 0
src/api/httputils.js

@@ -24,6 +24,7 @@ axiosservice.interceptors.request.use(
         if (token) {
             config.headers = {
                 'sso-token': token,
+                'isPreview': false //默认false,当预览开启的时候是true
             }
         }
         return config

+ 2 - 0
src/api/specificationUpdateRecord.js

@@ -0,0 +1,2 @@
+// 说明说更新记录 接口
+import httputils from "@/api/httputils";

BIN
src/assets/imgs/1pxlines.png


BIN
src/assets/imgs/apply.png


BIN
src/assets/imgs/dashedLines.png


BIN
src/assets/imgs/dotLines.png


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 22 - 0
src/assets/svg/apply.svg


+ 23 - 0
src/assets/svg/gantt_chart.svg

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 64 (93537) - https://sketch.com -->
+    <title>甘特图</title>
+    <desc>Created with Sketch.</desc>
+    <g id="各种首页" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="核心设备报表" transform="translate(-793.000000, -77.000000)" fill-rule="nonzero">
+            <g id="报表">
+                <g id="编组-2" transform="translate(452.000000, 60.000000)">
+                    <g id="甘特图" transform="translate(340.000000, 16.000000)">
+                        <rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="16" height="16"></rect>
+                        <polygon id="路径" fill="#8D9399" points="4 12 14 12 14 14 4 14"></polygon>
+                        <path d="M14,14.5 L4,14.5 C3.72385763,14.5 3.5,14.2761424 3.5,14 L3.5,12 C3.5,11.7238576 3.72385763,11.5 4,11.5 L14,11.5 C14.2761424,11.5 14.5,11.7238576 14.5,12 L14.5,14 C14.5,14.2761424 14.2761424,14.5 14,14.5 Z M4.5,13.5 L13.5,13.5 L13.5,12.5 L4.5,12.5 L4.5,13.5 Z" id="形状" fill="#8D9399"></path>
+                        <polygon id="路径" fill="#8D9399" points="2 7 10 7 10 9 2 9"></polygon>
+                        <path d="M10,9.5 L2,9.5 C1.72385763,9.5 1.5,9.27614237 1.5,9 L1.5,7 C1.5,6.72385763 1.72385763,6.5 2,6.5 L10,6.5 C10.2761424,6.5 10.5,6.72385763 10.5,7 L10.5,9 C10.5,9.27614237 10.2761424,9.5 10,9.5 Z M2.5,8.5 L9.5,8.5 L9.5,7.5 L2.5,7.5 L2.5,8.5 Z" id="形状" fill="#8D9399"></path>
+                        <polygon id="路径" fill="#8D9399" points="8 2 14 2 14 4 8 4"></polygon>
+                        <path d="M14,4.5 L8,4.5 C7.72385763,4.5 7.5,4.27614237 7.5,4 L7.5,2 C7.5,1.72385763 7.72385763,1.5 8,1.5 L14,1.5 C14.2761424,1.5 14.5,1.72385763 14.5,2 L14.5,4 C14.5,4.27614237 14.2761424,4.5 14,4.5 Z M8.5,3.5 L13.5,3.5 L13.5,2.5 L8.5,2.5 L8.5,3.5 Z" id="形状" fill="#8D9399"></path>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 16 - 0
src/assets/svg/table.svg


+ 80 - 39
src/components/Legend/src/legend.vue

@@ -10,16 +10,11 @@
             <div v-show='show' class='legend2' @click='showTl' v-if='(type==1 || floors.length>0)&& isMessage'>图例</div>
             <el-collapse-transition v-if='(type==1 || floors.length>0)&& isMessage'>
                 <div class='legend-tab' v-if='show'>
-                    <div class='legend-table'>
-                        <lengend-view
-                            v-if='viewTable.length>=0'
-                            :loading='loading'
-                            :viewTable='viewTable'
-                            @changeSwitch='handleSwich'
-                            :remarksText='remarksText'
-                            ref='viewLengend'
-                            :systemName='systemName'
-                        ></lengend-view>
+                    <div class='legend-table2' v-if='systemName=="土建系统"'>
+                        <lengend-view @changeSwitch='handleSwich' :remarksText='remarksText' ref='viewLengend' :systemName='systemName'></lengend-view>
+                    </div>
+                    <div class='legend-table' v-else>
+                        <lengend-view @changeSwitch='handleSwich' :remarksText='remarksText' ref='viewLengend' :systemName='systemName'></lengend-view>
                     </div>
                 </div>
             </el-collapse-transition>
@@ -94,6 +89,7 @@ import lengendView from '@/components/viewLengend'
 import legendRemarks from '@/components/legendremarks'
 import lengendEdit from '@/components/editLengend'
 import { mapGetters } from 'vuex'
+import bus from '@/utils/bus.js'
 import { queryStatis, updateStatis, queryRead } from '@/api/public.js'
 
 export default {
@@ -103,7 +99,7 @@ export default {
             remarksText: '', //查询出来的备注
             text1:
                 '<p>1.主要设备房包括:冷源机房,热源机房,开闭站,配变电所(室),发电机房,消防水泵房,消防高位水箱间,生活水泵房,慧云机房,垃圾房。</p>',
-            // text2: '<p>2.图例后×的数字,代表此位置的数量。</p>',
+            text2: '<p>2.图例后×的数字,代表此位置的数量。</p>',
             text2: '',
             show: true,
             show2: false,
@@ -165,7 +161,7 @@ export default {
         testClick(data) {},
         // 编辑备注
         legendClik() {
-            this.$refs.EditdMarks.showModal(this.remarksText)
+            this.$refs.EditdMarks.showModal()
         },
         // 查询备注
         queryMarks() {
@@ -173,35 +169,36 @@ export default {
                 categoryId: this.categoryId ? this.categoryId : this.$cookie.get('categoryId'),
                 projectId: this.$store.state.plazaId,
                 BuildingID: '1',
+                Pub: true,
                 FloorID: this.$cookie.get('floorNow')
             }
             let data = {}
             queryRead({ data, postParams }).then(res => {
+                let remarksText = ''
                 if (res.data.Data && res.data.Data[0].Note) {
-                    let note = res.data.Data[0].Note
-                    if (this.planNum > 0) {
-                        this.remarksText = `${this.text1}${note}`
-                    }
-                    if (this.typeNum > 1) {
-                        this.remarksText = `${this.text2}${note}`
-                    }
-                    if (note.search(this.text1) != -1 && note.search(this.text2) != -1) {
-                        this.remarksText = `${note}`
-                    } else if (note.search(this.text1) != -1) {
-                        this.remarksText = `${this.text2}${note}`
-                    } else if (note.search(this.text2) != -1) {
-                        this.remarksText = `${this.text1}${note}`
+                    let Res = res.data ? res.data.Data[0].Note : ''
+                    if (Res) {
+                        // 返回有备注
+                        remarksText = Res
                     } else {
-                        this.remarksText = `${this.text1}${this.text2}${note}`
+                        if (this.planNum > 0 && this.typeNum > 1) {
+                            remarksText = `${this.text1}${this.text2}${Res}`
+                        } else if (this.planNum > 0) {
+                            remarksText = `${this.text1}${Res}`
+                        } else if (this.typeNum > 1) {
+                            remarksText = `${this.text2}${Res}`
+                        } else {
+                            remarksText = ''
+                        }
                     }
-                } else {
-                    this.remarksText = `${this.text1}${this.text2}`
+                    this.$store.commit('SETREMARKSTEXT', remarksText)
                 }
             })
         },
         // 点击展示图例框
         showTl() {
             this.show = !this.show
+            this.queryView(false)
             if (this.show) {
                 this.show2 = false
             }
@@ -247,6 +244,7 @@ export default {
             this.editSwitch = val
             this.queryEditNum(!this.editSwitch)
         },
+        queryViewMethods() {},
         // 查询图例
         queryView(flag) {
             let postParams = {}
@@ -257,14 +255,18 @@ export default {
             }
             queryStatis({ data, postParams }).then(res => {
                 this.loading = false
-                //console.log('图例', res)
-                this.viewTable = res.data.Data ? res.data.Data : []
-                if (this.viewTable.length > 0) {
-                    this.viewTable.forEach(el => {
-                        console.log(el)
+                let viewTable = []
+                viewTable = res.data.Data ? res.data.Data : []
+                this.$store.commit('SETLEGENDTABLE', viewTable)
+
+                if (viewTable.length > 0) {
+                    viewTable.forEach(el => {
                         if (el.Name == '主要设备房') {
                             this.planNum = el.Num
                         }
+                        if (el.type == 'Image') {
+                            this.typeNum = el.Num
+                        }
                     })
                 }
                 this.$nextTick(() => {
@@ -273,7 +275,6 @@ export default {
                     }
                 })
             })
-            this.queryMarks()
         },
         // 查询编辑状态图例
         queryEditNum(flag) {
@@ -335,17 +336,43 @@ export default {
         determine() {
             this.isFloor = false
             this.goToEditer()
+        },
+        queryRemarksMethods() {},
+        init() {
+            // 图例
+            bus.$on('queryViewMethods', () => {
+                this.queryView(false)
+            })
+            // 备注
+            bus.$on('queryRemarksMethods', res => {
+                let remarksText = ''
+                if (res) {
+                    // 返回有备注
+                    remarksText = res
+                } else {
+                    if (this.planNum > 0 && this.typeNum > 1) {
+                        remarksText = `${this.text1}${this.text2}${res}`
+                    } else if (this.planNum > 0) {
+                        remarksText = `${this.text1}${res}`
+                    } else if (this.typeNum > 1) {
+                        remarksText = `${this.text2}${res}`
+                    } else {
+                        remarksText = ''
+                    }
+                }
+                this.$store.commit('SETREMARKSTEXT', remarksText)
+            })
         }
     },
     mounted() {
-        this.queryView(false)
+        this.init()
     }
 }
 </script>
 <style lang="less" scoped>
 .legend-container {
     position: relative;
-    top: -13px;
+    top: -15px;
     .legend {
         text-align: center;
         line-height: 44px;
@@ -359,14 +386,11 @@ export default {
         border-radius: 2px;
         cursor: pointer;
         line-height: 44px;
-        text-align: center;
     }
     .legend2 {
         text-align: center;
         line-height: 44px;
         cursor: pointer;
-        line-height: 44px;
-        text-align: center;
         width: 44px;
         height: 44px;
         background: linear-gradient(180deg, rgba(54, 156, 247, 1) 0%, rgba(2, 91, 170, 1) 100%);
@@ -397,6 +421,23 @@ export default {
                 display: none;
             }
         }
+        .legend-table2 {
+            padding: 16px;
+            height: 356px;
+            width: 385px;
+            // width: 420px;
+            overflow: auto;
+            overflow: hidden;
+            overflow-y: auto;
+            position: relative;
+            background: rgba(255, 255, 255, 1);
+            box-shadow: 0px 2px 8px 0px rgba(31, 36, 41, 0.06);
+            border-radius: 2px;
+            border: 1px solid rgba(228, 229, 231, 1);
+            &::-webkit-scrollbar {
+                display: none;
+            }
+        }
     }
 }
 .edit_map {

+ 9 - 4
src/components/PicLarge/src/picLarge.vue

@@ -79,8 +79,10 @@ export default {
                 border-radius: 4px;
                 border: 4px solid rgba(245, 246, 247, 1);
                 img {
-                    width: 100%;
-
+                    max-width: 100%;
+                    max-height: 100%;
+                    display: block;
+                    margin: auto;
                     border-radius: 4px;
                 }
             }
@@ -101,7 +103,7 @@ export default {
         flex: 1;
         background: rgba(245, 246, 247, 1);
         border-radius: 0px 0px 4px 0px;
-        padding: 20px 50px;
+        padding: 60px 50px;
         margin: auto auto;
         display: flex;
         justify-content: center;
@@ -111,7 +113,10 @@ export default {
             height: 540px;
             text-align: center;
             img {
-                width: 100%;
+                max-width: 100%;
+                max-height: 100%;
+                display: block;
+                margin: auto;
             }
         }
     }

+ 8 - 2
src/components/Rotation/src/rotation.vue

@@ -36,12 +36,18 @@ export default {
     width: 100%;
     height: 100%;
     overflow: hidden;
+    display: flex;
+    justify-content: center;
+    align-items: center;
     .rotationCon {
         height: 100%;
+        display: flex;
     }
     img {
-        width: 100%;
-       
+        max-width: 100%;
+        max-height: 100%;
+        display: block;
+        margin: auto;
     }
 }
 </style>

+ 17 - 3
src/components/floorMap/index.vue

@@ -17,7 +17,7 @@ import { FloorView } from '@/lib/FloorView'
 import { FloorScene } from '@/lib/FloorScene'
 import RoomBox from '@/views/room/index'
 import canvasFun from '@/components/floorMap/canvasFun'
-import { readGroup } from '@/api/public'
+import { readGroup, queryStatis } from '@/api/public'
 import { STopologyParser } from '@/lib/parsers/STopologyParser'
 import { mapGetters, mapActions } from 'vuex'
 import { SImageItem } from '@saga-web/graph/lib'
@@ -113,11 +113,11 @@ export default {
                         this.fParser.columnList.forEach(t => this.scene.addItem(t))
                         this.fParser.casementList.forEach(t => this.scene.addItem(t))
                         this.view.scene = this.scene
+                        this.view.fitSceneToView()
                         this.view.minScale = this.view.scale
                         if (this.$refs.canvasFun) {
                             this.$refs.canvasFun.everyScale = this.view.scale
                         }
-                        this.view.fitSceneToView()
                     })
                 } else {
                     console.log('楼层不正确')
@@ -135,6 +135,14 @@ export default {
                 if (!(data.Data && data.Data.length)) {
                     return false
                 }
+                // 请求回来的备注
+                if (data.Data && data.Data[0].Note) {
+                    let note = data.Data[0].Note
+                    bus.$emit('queryRemarksMethods', note)
+                } else {
+                    bus.$emit('queryRemarksMethods', '')
+                }
+                //土建系统的图例展示
                 if (this.$cookie.get('categoryId') == 'SCPZ') {
                     let scpzTable = []
                     scpzTable = data.Data[0].Elements.Nodes || []
@@ -142,6 +150,11 @@ export default {
                 }
                 // 放到后边 $cookie graphId
                 this.$cookie.set('graphId', data.Data[0].ID, 3)
+                if (this.$cookie.get('graphId')) {
+                    // 得到graphId 就请求图例
+                    // 除土建系统之外的图例展示 包括楼层功能
+                    bus.$emit('queryViewMethods')
+                }
                 this.topologyParser = new STopologyParser(null)
                 this.topologyParser.parseData(data.Data[0].Elements)
                 // 多边形
@@ -224,7 +237,8 @@ export default {
                 BuildingID: '1',
                 FloorID: FloorID,
                 categoryId: this.categoryId ? this.categoryId : this.$cookie.get('categoryId'),
-                projectId: this.urlMsg.ProjectID
+                projectId: this.urlMsg.ProjectID,
+                Pub: true
             }
             return readGroup(data)
         },

+ 12 - 7
src/components/legendremarks.vue

@@ -8,7 +8,7 @@
         <a-modal v-model='visible' :title='title' @ok='handleOk' ok-text='保存' cancel-text='取消' :maskClosable='false' :width='648'>
             <div class='edit_container' style='width:600px;height:156px'>
                 <quill-editor
-                    v-model='remarksText'
+                    v-model='remarksTexts'
                     :options='editorOption'
                     @blur='onEditorBlur($event)'
                     @focus='onEditorFocus($event)'
@@ -22,12 +22,13 @@
 </template>
 <script>
 import { updateRead } from '@/api/public.js'
+import { mapGetters } from 'vuex'
 export default {
     name: 'EditdMarks',
     data() {
         return {
             valLen: 0, //输入字数限制
-            remarksText: '', //展示的备注
+            remarksTexts: '', //展示的备注
             editorOption: {
                 modules: {
                     toolbar: [['bold', 'underline'], [{ color: [] }]]
@@ -39,14 +40,18 @@ export default {
             visible: false
         }
     },
+    computed: {
+        ...mapGetters(['remarksText'])
+    },
     methods: {
         // val为传过来的备注
-        showModal(val) {
+        showModal() {
             this.visible = true
-            this.remarksText = val
+            this.remarksTexts = this.remarksText
         },
         // 更新底图备注
         markUpdate(val) {
+            console.log(val)
             let params = {
                 postParams: {
                     graphId: this.$cookie.get('graphId'),
@@ -67,20 +72,20 @@ export default {
         },
         // 点击保存
         handleOk() {
-            this.markUpdate(this.remarksText)
+            this.markUpdate(this.remarksTexts)
         },
         onEditorReady(editor) {},
         onEditorBlur(val) {},
         onEditorFocus(val) {},
         onEditorChange(val) {
             val.quill.deleteText(200, 6)
-            if (this.remarksText === '') {
+            if (this.remarksTexts === '') {
                 this.valLen = 0
             } else {
                 this.valLen = val.quill.getLength() - 1
             }
             if (val.html) {
-                this.remarksText = val.html
+                this.remarksTexts = val.html
             }
         }
     },

+ 450 - 49
src/components/mapClass/EditScence.js

@@ -21,6 +21,12 @@ export class EditScence extends SGraphScene {
         this.undoStack = new SUndoStack();
         /** 命令 1 绘制直线 */
         this.cmd = 'choice';
+        /** 绘制区域时 是否为点选   */
+        this.isSelecting = false;
+        /** 是否开启吸附  */
+        this.isAbsorbing = false;
+        /** 吸附展示item    */
+        this.highLight = null;
         /** 当前选中焦点Item */
         this.focusItem = null;
         /**图例节点 */
@@ -29,10 +35,19 @@ export class EditScence extends SGraphScene {
         this.Markers = [];
         /**  管线对象 */
         this.Relations = [];
+        this._isEditStatus = true; // 是否可编辑
         /** 绘制图例样式 */
         this._legend = null;
+        /** fid=>item映射,由解析器存入   */
+        this.fidToItem = {};
         // // 选择绑定选额item事件
         this.selectContainer.connect("listChange", this, this.listChange);
+        ItemColor.spaceColor = new SColor("#A4ABB22B");
+        ItemColor.wallColor = new SColor("#A7AEB3FF");
+        ItemColor.columnColor = new SColor("#A7AEB3FF");
+        ItemColor.virtualWallColor = new SColor("#A7AEB3FF");
+        ItemColor.selectColor = new SColor("#84A0BB2B");
+        ItemColor.spaceBorderColor = new SColor("#A7AEB3FF");
     }
     /** 获取当前状态 */
     get getCmd() {
@@ -55,6 +70,12 @@ export class EditScence extends SGraphScene {
         }
     }
     ;
+    set isEditStatus(bol) {
+        this._isEditStatus = bol;
+    }
+    get isEditStatus() {
+        return this._isEditStatus;
+    }
     get getlegend() {
         return this._legend;
     }
@@ -93,6 +114,10 @@ export class EditScence extends SGraphScene {
         else if (obj.itemList[0] instanceof TipelineItem) {
             itemType = 'Line';
         }
+        else if (obj.itemList[0] instanceof SSpaceItem) { // 点选
+            this.clickToAddArea(obj.itemList[0]);
+            return;
+        }
         else {
             itemType = '';
         }
@@ -113,6 +138,13 @@ export class EditScence extends SGraphScene {
      * 增加线段item
      */
     addLine(event) {
+        const clickItem = this.clickIsItem(event);
+        if (clickItem) {
+            let centerPoint = clickItem.boundingRect().center();
+            const p = clickItem.mapToScene(centerPoint.x, centerPoint.y);
+            event.x = p.x;
+            event.y = p.y;
+        }
         const data = {
             /** ID */
             ID: uuid(),
@@ -124,7 +156,9 @@ export class EditScence extends SGraphScene {
             Pos: { X: 0, Y: 0 },
             /** 由应用自己定义  */
             Properties: {
-                Line: [{ X: event.x, Y: event.y }]
+                IconUrl: require("../../assets/images/t-line-hover.png"),
+                Line: [{ X: event.x, Y: event.y }],
+                LineWidth: 2
             }
         };
         const item = new SLineMarkerItem(null, data);
@@ -132,9 +166,11 @@ export class EditScence extends SGraphScene {
         item.zOrder = ItemOrder.lineOrder;
         item.selectable = true;
         this.addItem(item);
+        this.Markers.push(item);
         item.connect("finishCreated", this, this.finishCreated);
         this.grabItem = item;
-        this.Markers.push(item);
+        this.focusItem = item;
+        this.scenceUpdate(this);
         // this.undoStack.push(new SGraphAddCommand(this, item));
         // item.connect("onMove", this, this.onItemMove.bind(this));
         return true;
@@ -160,17 +196,22 @@ export class EditScence extends SGraphScene {
      * 增加管道 lenged
      */
     addTipelineItem(event) {
+        var _a;
+        const anc = this.clickIsAnchor(event);
+        if (anc) {
+            const p = anc.mapToScene(0, 0);
+            anc.isConnected = true;
+            event.x = p.x;
+            event.y = p.y;
+        }
         const LegendData = {
             ID: uuid(),
             Name: this._legend.Name,
-            GraphElementType: this._legend.Type,
-            Num: 1,
             GraphElementId: this._legend.Id,
-            AttachObjectIds: [],
-            Type: "Line",
             PointList: [{ X: event.x, Y: event.y }],
-            LineType: 0,
+            LineType: "Line",
             Properties: {
+                IconUrl: '/serve/topology-wanda/Picture/query/' + this._legend.Url,
                 LineDash: this._legend.LineDash,
                 LineWidth: this._legend.LineWidth,
                 Color: this._legend.Color,
@@ -187,6 +228,14 @@ export class EditScence extends SGraphScene {
         // this.undoStack.push(new SGraphAddCommand(this, item));
         this.grabItem = item;
         this.focusItem = item;
+        // 起始锚点
+        item.startAnchor = anc;
+        if (anc) {
+            (_a = anc.parent) === null || _a === void 0 ? void 0 : _a.connect('changePos', item, item.changePos);
+            item.anchor1ID = anc.id;
+            item.node1Id = anc.parent.id;
+        }
+        this.scenceUpdate(this);
         return true;
     }
     /**
@@ -206,6 +255,7 @@ export class EditScence extends SGraphScene {
             OutLine: [{ X: event.x, Y: event.y }],
             SubType: SubType,
             Properties: {
+                IconUrl: '/serve/topology-wanda/Picture/query/' + this._legend.Url,
                 StrokeColor: this._legend.Color,
                 FillColor: this._legend.FillColor,
                 LineDash: this._legend.LineDash,
@@ -231,10 +281,66 @@ export class EditScence extends SGraphScene {
         Polylines.zOrder = ItemOrder.polygonOrder;
         // Polylines.moveable = true;
         this.addItem(Polylines);
+        this.Nodes.push(Polylines);
         Polylines.connect("finishCreated", this, this.finishCreated);
         this.grabItem = Polylines;
         this.focusItem = Polylines;
-        this.Nodes.push(Polylines);
+        this.scenceUpdate(this);
+    }
+    /**
+     * 点选创建区域
+    */
+    clickToAddArea(item) {
+        if (this.cmd != 'Zone') {
+            return;
+        }
+        if (this.isSelecting && this._legend) {
+            //@ts-ignore
+            item.isExtracted = true;
+            const SubType = this._legend.SubType ? this._legend.SubType : '';
+            const LegendData = {
+                ID: uuid(),
+                Name: this._legend.Name,
+                GraphElementType: this._legend.Type,
+                Num: 1,
+                GraphElementId: this._legend.Id,
+                AttachObjectIds: [],
+                Type: "Zone",
+                Pos: { X: item.x, Y: item.y },
+                OutLine: item.pointArr[0],
+                SubType: SubType,
+                Properties: {
+                    IconUrl: '/serve/topology-wanda/Picture/query/' + this._legend.Url,
+                    StrokeColor: this._legend.Color,
+                    FillColor: this._legend.FillColor,
+                    LineDash: this._legend.LineDash,
+                    LineWidth: this._legend.LineWidth,
+                    font: 12,
+                    color: '',
+                    FID: item.data.SourceId,
+                    TextPos: { X: item.data.Location.Points[0].X, Y: -item.data.Location.Points[0].Y }
+                },
+            };
+            let Polylines = null;
+            if (SubType == "SCPZ") {
+                Polylines = new SSCPZZoneLegendItem(null, LegendData);
+            }
+            else if (SubType == "FHFQ") {
+                Polylines = new SFHFQZoneLegendItem(null, LegendData);
+            }
+            else {
+                Polylines = new SZoneLegendItem(null, LegendData);
+            }
+            Polylines.selectable = true;
+            //设置状态
+            Polylines.status = SItemStatus.Normal;
+            this.addItem(Polylines);
+            this.Nodes.push(Polylines);
+            Polylines.connect("finishCreated", this, this.finishCreated);
+            this.finishCreated(Polylines);
+            this.focusItem = Polylines;
+            this.scenceUpdate(this);
+        }
     }
     /**
      * 增加图片Item mark
@@ -252,6 +358,7 @@ export class EditScence extends SGraphScene {
             Pos: { X: event.x, Y: event.y },
             /** 由应用自己定义  */
             Properties: {
+                IconUrl: require(`../../assets/images/t-img-hover.png`),
                 Url: '',
             }
         };
@@ -260,10 +367,11 @@ export class EditScence extends SGraphScene {
         item.selectable = true;
         item.moveable = true;
         this.addItem(item);
+        this.Markers.push(item);
         this.grabItem == null;
         this.focusItem = item;
         this.cmd = 'choice';
-        this.Markers.push(item);
+        this.scenceUpdate(this);
     }
     /**
      * 增加文字item
@@ -280,9 +388,10 @@ export class EditScence extends SGraphScene {
             Pos: { X: event.x, Y: event.y },
             /** 由应用自己定义  */
             Properties: {
+                IconUrl: require(`../../assets/images/t-text-hover.png`),
                 Text: '请在右侧属性栏输入文字!',
                 Color: '',
-                Font: 0,
+                Font: 12,
                 BackgroundColor: ''
             }
         };
@@ -292,14 +401,17 @@ export class EditScence extends SGraphScene {
         item.moveable = true;
         item.zOrder = ItemOrder.textOrder;
         this.addItem(item);
-        this.grabItem == null;
-        this.cmd = 'choice';
         this.Markers.push(item);
+        this.grabItem = item;
+        this.focusItem = item;
+        this.cmd = 'choice';
+        this.scenceUpdate(this);
     }
     /**
      * 增加图标lenged图标
      */
     addIconItem(event) {
+        //获取信息工程化相关参数
         const LegendData = {
             ID: uuid(),
             Name: this._legend.Name,
@@ -312,23 +424,26 @@ export class EditScence extends SGraphScene {
             Rolate: { X: 0, Y: 0, Z: 0 },
             Size: { Width: 0, Height: 0 },
             Properties: {
+                IconUrl: '/serve/topology-wanda/Picture/query/' + this._legend.Url,
                 Url: '/serve/topology-wanda/Picture/query/' + this._legend.Url,
                 Num: 1,
-                sWidth: 0,
-                sHeight: 0,
-                font: 0,
-                color: '' //字体颜色
+                sWidth: 24,
+                sHeight: 24,
+                font: 12,
+                color: '',
+                GraphCategoryId: this._legend.GraphCategoryId
             },
         };
         const item = new SImageLegendItem(null, LegendData);
-        this.grabItem == null;
         this.cmd = 'choice';
         item.selectable = true;
         item.moveable = true;
         item.zOrder = ItemOrder.markOrder;
-        // item.moveTo(event.x, event.y);
         this.addItem(item);
         this.Nodes.push(item);
+        this.grabItem = item;
+        this.focusItem = item;
+        this.scenceUpdate(this);
     }
     /**
      * 更改item对应属性
@@ -343,6 +458,7 @@ export class EditScence extends SGraphScene {
         if (this.focusItem) {
             const old = this.focusItem.text;
             this.focusItem.text = str;
+            this.scenceUpdate(this);
             // this.undoStack.push(new SGraphPropertyCommand(this, this.focusItem, "text", old, str));
         }
     }
@@ -379,7 +495,7 @@ export class EditScence extends SGraphScene {
     updatedFontColor(color) {
         if (this.focusItem) {
             let old = this.focusItem.color;
-            this.focusItem.color = color;
+            this.focusItem.color = new SColor(color);
             // this.undoStack.push(new SGraphPropertyCommand(this, this.focusItem, "color", old, color));
         }
     }
@@ -394,7 +510,7 @@ export class EditScence extends SGraphScene {
             }
             else {
                 // let old = this.focusItem.strokeColor;
-                this.focusItem.strokeColor = color;
+                this.focusItem.strokeColor = new SColor(color);
             }
             // this.undoStack.push(new SGraphPropertyCommand(this, this.focusItem, "color", old, color));
         }
@@ -451,7 +567,7 @@ export class EditScence extends SGraphScene {
      */
     updatedbackColor(color) {
         if (this.focusItem) {
-            this.focusItem.backgroundColor = color;
+            this.focusItem.backgroundColor = new SColor(color);
         }
     }
     /**
@@ -489,6 +605,7 @@ export class EditScence extends SGraphScene {
     upadataLengedName(val) {
         if (this.focusItem && this.focusItem.data) {
             this.focusItem.text = val;
+            this.scenceUpdate(this);
         }
     }
     /**
@@ -510,12 +627,21 @@ export class EditScence extends SGraphScene {
         }
     }
     /**
-   * 更改图例说明数量
-   * @param num number item数量 (只对icon设备类)
+   * 更改图例说
+   * @param num number
    */
-    upadatitemExplain(itemExplain) {
+    upadatitemExplain(ItemExplain) {
+        if (this.focusItem) {
+            this.focusItem.data.Properties.ItemExplain = ItemExplain;
+        }
+    }
+    /**
+     * 更新工程信息化的相关数据
+     * @param AttachObjectIds Array
+     */
+    upadatAttachObjectIds(AttachObjectIds) {
         if (this.focusItem) {
-            this.focusItem.itemExplain = itemExplain;
+            this.focusItem.data.AttachObjectIds = AttachObjectIds;
         }
     }
     /**
@@ -523,34 +649,51 @@ export class EditScence extends SGraphScene {
      */
     deleiteItem() {
         if (this.focusItem) {
-            this.removeItem(this.focusItem);
-            let a = -1;
-            this.Nodes.forEach((item, index) => {
-                if (item.id == this.focusItem.id) {
-                    a = index;
+            if ((this.focusItem instanceof SZoneLegendItem ||
+                this.focusItem instanceof SSCPZZoneLegendItem ||
+                this.focusItem instanceof SFHFQZoneLegendItem ||
+                this.focusItem instanceof TipelineItem) &&
+                this.focusItem.curIndex != -1) {
+                this.focusItem.deletePoint(this.focusItem.curIndex);
+            }
+            else {
+                this.removeItem(this.focusItem);
+                let a = -1;
+                this.Nodes.forEach((item, index) => {
+                    if (item.id == this.focusItem.id) {
+                        a = index;
+                    }
+                });
+                if (a > -1) {
+                    this.Nodes.splice(a, 1);
                 }
-            });
-            this.Nodes.splice(a, 1);
-            let b = -1;
-            this.Markers.forEach((item, index) => {
-                if (item.id == this.focusItem.id) {
-                    b = index;
+                let b = -1;
+                this.Markers.forEach((item, index) => {
+                    if (item.id == this.focusItem.id) {
+                        b = index;
+                    }
+                });
+                if (b > -1) {
+                    this.Markers.splice(b, 1);
                 }
-            });
-            this.Markers.splice(b, 1);
-            let c = -1;
-            this.Relations.forEach((item, index) => {
-                if (item.id == this.focusItem.id) {
-                    c = index;
+                let c = -1;
+                this.Relations.forEach((item, index) => {
+                    if (item.id == this.focusItem.id) {
+                        c = index;
+                    }
+                });
+                if (c > -1) {
+                    this.Relations.splice(c, 1);
                 }
-            });
-            this.Relations.splice(c, 1);
-            this.focusItem = null;
-        }
-        if (this.view) {
-            this.view.update();
+                this.focusItem = null;
+                if (this.view) {
+                    this.view.update();
+                }
+                this.scenceUpdate(this);
+            }
         }
     }
+    scenceUpdate(scence) { }
     /**
      * 对齐指定item
      * @param v
@@ -613,7 +756,21 @@ export class EditScence extends SGraphScene {
     ////////////////////////
     //  以下为鼠标键盘操作事件
     onMouseDown(event) {
+        if (!this.isEditStatus) {
+            return super.onMouseDown(event);
+        }
+        // 判断是否开启吸附,并且有吸附的点
+        if (this.isAbsorbing &&
+            this.highLight &&
+            this.highLight.visible) {
+            event.x = this.highLight.point.x;
+            event.y = this.highLight.point.y;
+        }
         if (this.grabItem) {
+            if (this.grabItem instanceof TipelineItem) {
+                this.setTipeEndanchor(event);
+                return true;
+            }
             return this.grabItem.onMouseDown(event);
         }
         switch (this.cmd) {
@@ -627,7 +784,13 @@ export class EditScence extends SGraphScene {
                 this.addImgItem(event);
                 break;
             case 'Zone':
-                this.addPolygonItem(event);
+                if (!this.isSelecting) {
+                    this.addPolygonItem(event);
+                }
+                else {
+                    // 点选创建区域
+                    return super.onMouseDown(event);
+                }
                 break;
             case 'Image':
                 this.addIconItem(event);
@@ -639,6 +802,20 @@ export class EditScence extends SGraphScene {
                 return super.onMouseDown(event);
         }
     }
+    onMouseMove(event) {
+        if (!this.isEditStatus) {
+            return super.onMouseMove(event);
+        }
+        if (this.isAbsorbing) {
+            if (!this.highLight) {
+                this.highLight = new HighlightItem(null);
+                this.addItem(this.highLight);
+            }
+            this.highLight.visible = false;
+            this.absorbSpace(event);
+        }
+        return super.onMouseMove(event);
+    }
     /**
      * 键盘事件
      *
@@ -646,12 +823,236 @@ export class EditScence extends SGraphScene {
      * @return	boolean
      */
     onKeyDown(event) {
+        if (!this.isEditStatus) {
+            return super.onKeyDown(event);
+        }
         if (this.grabItem) {
             this.grabItem.onKeyDown(event);
+            if (event.code == "Escape") {
+                const item = this.grabItem;
+                this.grabItem = null;
+                this.removeItem(item);
+                if (this.view) {
+                    this.view.update();
+                }
+                this.setCmd = 'choice';
+            }
         }
         // if (event.key == "Enter") {
         //     this.cmd = 0
         // }
         return false;
     }
+    /**
+     * 鼠标双击事件
+     *
+     * @param	event         事件参数
+     * @return	boolean
+     */
+    onDoubleClick(event) {
+        if (!this.isEditStatus) {
+            return true;
+        }
+        else {
+            return super.onDoubleClick(event);
+        }
+    } // Function onDoubleClick()
+    /**
+     * 设置结束锚点
+     *
+    */
+    setTipeEndanchor(event) {
+        var _a;
+        if (this.grabItem instanceof TipelineItem) {
+            if (this.grabItem.status == SItemStatus.Create) {
+                const anc = this.clickIsAnchor(event);
+                if (anc) {
+                    const p = anc.mapToScene(0, 0);
+                    anc.isConnected = true;
+                    event.x = p.x;
+                    event.y = p.y;
+                    if (this.grabItem.pointList.length) {
+                        this.grabItem.endAnchor = anc;
+                        (_a = anc.parent) === null || _a === void 0 ? void 0 : _a.connect('changePos', this.grabItem, this.grabItem.changePos);
+                    }
+                    this.grabItem.anchor2ID = anc.id;
+                    this.grabItem.node2Id = anc.parent.id;
+                    this.grabItem.onMouseDown(event);
+                    this.grabItem.status = SItemStatus.Normal;
+                    this.finishCreated(this.grabItem);
+                    return;
+                }
+            }
+            this.grabItem.onMouseDown(event);
+        }
+    }
+    /**
+     *  划线时点击位置是否是锚点
+     *
+     *  @param  event   事件
+     *  @param  len     限制距离
+     *  @return 点击的锚点
+     * */
+    clickIsAnchor(event) {
+        let minAnchor = null;
+        let len = -1;
+        this.Nodes.forEach(image => {
+            if (image.anchorList && image.anchorList.length) {
+                image.anchorList.forEach(anchor => {
+                    let anchorPoint = anchor.mapToScene(0, 0);
+                    let dis = SMathUtil.pointDistance(event.x, event.y, anchorPoint.x, anchorPoint.y);
+                    if (len < 0) {
+                        len = anchor.sceneDis;
+                    }
+                    if (dis < len) {
+                        minAnchor = anchor;
+                        len = dis;
+                    }
+                });
+            }
+        });
+        console.log('-----------------------');
+        console.log(minAnchor);
+        console.log('-----------------------');
+        return minAnchor;
+    }
+    /**
+     *  划线时点击位置是在文本,图片,,区域内
+     *
+     *  @param  event   事件
+     *  @return 点击的item
+     * */
+    clickIsItem(event) {
+        let minIten = null;
+        let len = -1;
+        let itemList = this.Nodes.concat(this.Markers);
+        itemList.forEach(item => {
+            if (item instanceof STextMarkerItem ||
+                item instanceof SImageMarkerItem ||
+                item instanceof SZoneLegendItem ||
+                item instanceof SFHFQZoneLegendItem ||
+                item instanceof SSCPZZoneLegendItem) {
+                let scenePoint = item.mapFromScene(event.x, event.y);
+                if (item.contains(scenePoint.x, scenePoint.y)) {
+                    let dis = SMathUtil.pointDistance(scenePoint.x, scenePoint.y, item.boundingRect().center().x, item.boundingRect().center().y);
+                    if (len < 0) {
+                        minIten = item;
+                        len = dis;
+                    }
+                    if (dis < len) {
+                        minIten = item;
+                        len = dis;
+                    }
+                }
+            }
+        });
+        console.log('-----------------------');
+        console.log(minIten);
+        console.log('-----------------------');
+        return minIten;
+    }
+    /**
+      *  点是否在吸附区域内
+      *
+      *  @param  p       要判断的点
+      *  @param  minX    空间区域
+      *  @param  minY    空间区域
+      *  @param  maxX    空间区域
+      *  @param  maxY    空间区域
+      */
+    static isPointInAbsorbArea(p, minX, maxX, minY, maxY) {
+        let rect = new SRect(minX - 1000, minY - 1000, maxX - minX + 2000, maxY - minY + 2000);
+        return rect.contains(p.x, p.y);
+    } // Function isPointInAbsorbArea()
+    /**
+     *  吸附空间
+     *
+     *  @param  event   鼠标事件对象
+     *  @return boolean 是否找到吸附的对象
+     */
+    absorbSpace(event) {
+        if (!this.highLight) {
+            return false;
+        }
+        let absorbLen = 1000;
+        if (this.view) {
+            absorbLen = 10 / this.view.scale;
+        }
+        let P = this.absorbSpacePoint(event, absorbLen);
+        if (P.Point) {
+            this.highLight.distance = P.MinDis;
+            this.highLight.point = new SPoint(P.Point.X, -P.Point.Y);
+            this.highLight.visible = true;
+            return true;
+        }
+        else {
+            let L = this.absorbSpaceLine(event, absorbLen);
+            if (L.Line && L.Point) {
+                this.highLight.distance = L.MinDis;
+                this.highLight.point = L.Point;
+                this.highLight.line = L.Line;
+                this.highLight.visible = true;
+                return true;
+            }
+            return false;
+        }
+    } // Function absorbSpace()
+    /**
+     *  吸附空间点
+     *
+     *  @param  event       鼠标事件对象
+     *  @param  absorbLen   吸附距离
+     *  @return MinDis      吸附的点
+     */
+    absorbSpacePoint(event, absorbLen) {
+        let minPointDis = Number.MAX_SAFE_INTEGER;
+        let Point;
+        this.spaceList.map((space) => {
+            if (EditScence.isPointInAbsorbArea(new SPoint(event.x, event.y), space.minX, space.maxX, space.minY, space.maxY)) {
+                space.data.OutLine.forEach((item) => {
+                    let minDis = SMathUtil.getMinDisPoint(new SPoint(event.x, event.y), item);
+                    if (minDis &&
+                        minDis.MinDis < absorbLen &&
+                        minDis.MinDis < minPointDis) {
+                        minPointDis = minDis.MinDis;
+                        Point = minDis.Point;
+                    }
+                });
+            }
+        });
+        return {
+            MinDis: minPointDis,
+            Point: Point
+        };
+    } // Function absorbSpacePoint()
+    /**
+     *  吸附空间线
+     *
+     *  @param  event       鼠标事件对象
+     *  @param  absorbLen   吸附距离
+     *  @return PointToLine 吸附的线
+     */
+    absorbSpaceLine(event, absorbLen) {
+        let minPointDis = Number.MAX_SAFE_INTEGER;
+        let Point, Line;
+        this.spaceList.forEach((space) => {
+            if (EditScence.isPointInAbsorbArea(new SPoint(event.x, event.y), space.minX, space.maxX, space.minY, space.maxY)) {
+                space.data.OutLine.forEach((item) => {
+                    let minDisLine = SMathUtil.getMinDisLine(new SPoint(event.x, event.y), item);
+                    if (minDisLine &&
+                        minDisLine.MinDis < absorbLen &&
+                        minDisLine.MinDis < minPointDis) {
+                        minPointDis = minDisLine.MinDis;
+                        Point = minDisLine.Point;
+                        Line = minDisLine.Line;
+                    }
+                });
+            }
+        });
+        return {
+            MinDis: minPointDis,
+            Point: Point,
+            Line: Line
+        };
+    } // Function absorbSpaceLine()
 }

+ 513 - 55
src/components/mapClass/EditScence.ts

@@ -45,6 +45,13 @@ export class EditScence extends SGraphScene {
             this.view.update();
         }
     };
+    /** 绘制区域时 是否为点选   */
+    isSelecting: boolean = false;
+
+    /** 是否开启吸附  */
+    isAbsorbing: boolean = false;
+    /** 吸附展示item    */
+    highLight: HighlightItem | null = null;
 
     /** 当前选中焦点Item */
     focusItem: SGraphItem | null = null;
@@ -55,10 +62,23 @@ export class EditScence extends SGraphScene {
     Markers: any = [];
     /**  管线对象 */
     Relations: any = [];
+    _isEditStatus: Boolean = true; // 是否可编辑
+    set isEditStatus(bol: Boolean): void {
+        this._isEditStatus = bol;
+    }
+    get isEditStatus(): Boolean {
+        return this._isEditStatus
+    }
     constructor() {
         super();
         // // 选择绑定选额item事件
         this.selectContainer.connect("listChange", this, this.listChange);
+        ItemColor.spaceColor = new SColor("#A4ABB22B")
+        ItemColor.wallColor = new SColor("#A7AEB3FF")
+        ItemColor.columnColor = new SColor("#A7AEB3FF")
+        ItemColor.virtualWallColor = new SColor("#A7AEB3FF")
+        ItemColor.selectColor = new SColor("#84A0BB2B")
+        ItemColor.spaceBorderColor = new SColor("#A7AEB3FF")
     }
     /** 绘制图例样式 */
     _legend: any | null = null;
@@ -69,6 +89,9 @@ export class EditScence extends SGraphScene {
         this._legend = obj;
         console.log('aaaaaa', obj)
     }
+    /** fid=>item映射,由解析器存入   */
+    fidToItem = {}
+
     /**
      * 监听变化
      * @param obj 变化后的对象
@@ -92,6 +115,9 @@ export class EditScence extends SGraphScene {
             itemType = 'Image'
         } else if (obj.itemList[0] instanceof TipelineItem) {
             itemType = 'Line'
+        } else if (obj.itemList[0] instanceof SSpaceItem) { // 点选
+            this.clickToAddArea(obj.itemList[0]);
+            return
         } else {
             itemType = ''
         };
@@ -113,6 +139,13 @@ export class EditScence extends SGraphScene {
      * 增加线段item
      */
     addLine(event: SMouseEvent): boolean {
+        const clickItem = this.clickIsItem(event);
+        if (clickItem) {
+            let centerPoint = clickItem.boundingRect().center();
+            const p = clickItem.mapToScene(centerPoint.x, centerPoint.y);
+            event.x = p.x;
+            event.y = p.y;
+        }
         const data = {
             /** ID */
             ID: uuid(),
@@ -124,7 +157,9 @@ export class EditScence extends SGraphScene {
             Pos: { X: 0, Y: 0 },
             /** 由应用自己定义  */
             Properties: {
-                Line: [{ X: event.x, Y: event.y }]
+                IconUrl: require("../../assets/images/t-line-hover.png"),
+                Line: [{ X: event.x, Y: event.y }],
+                LineWidth: 2
             }
         }
         const item = new SLineMarkerItem(null, data);
@@ -132,9 +167,11 @@ export class EditScence extends SGraphScene {
         item.zOrder = ItemOrder.lineOrder;
         item.selectable = true;
         this.addItem(item);
+        this.Markers.push(item);
         item.connect("finishCreated", this, this.finishCreated);
         this.grabItem = item;
-        this.Markers.push(item)
+        this.focusItem = item;
+        this.scenceUpdate(this);
         // this.undoStack.push(new SGraphAddCommand(this, item));
         // item.connect("onMove", this, this.onItemMove.bind(this));
         return true
@@ -162,17 +199,21 @@ export class EditScence extends SGraphScene {
      * 增加管道 lenged
      */
     addTipelineItem(event: SMouseEvent): boolean {
+        const anc = this.clickIsAnchor(event);
+        if (anc) {
+            const p = anc.mapToScene(0, 0)
+            anc.isConnected = true;
+            event.x = p.x;
+            event.y = p.y;
+        }
         const LegendData: Relation = {
             ID: uuid(),
             Name: this._legend.Name,
-            GraphElementType: this._legend.Type,
-            Num: 1,
             GraphElementId: this._legend.Id,
-            AttachObjectIds: [],
-            Type: "Line",
             PointList: [{ X: event.x, Y: event.y }],
-            LineType: 0,
+            LineType: "Line",
             Properties: {
+                IconUrl: '/serve/topology-wanda/Picture/query/' + this._legend.Url,
                 LineDash: this._legend.LineDash,
                 LineWidth: this._legend.LineWidth,
                 Color: this._legend.Color,
@@ -190,6 +231,14 @@ export class EditScence extends SGraphScene {
         // this.undoStack.push(new SGraphAddCommand(this, item));
         this.grabItem = item;
         this.focusItem = item;
+        // 起始锚点
+        item.startAnchor = anc;
+        if (anc) {
+            anc.parent ?.connect('changePos', item, item.changePos)
+            item.anchor1ID = anc.id;
+            item.node1Id = anc.parent.id;
+        }
+        this.scenceUpdate(this);
         return true
     }
 
@@ -197,8 +246,7 @@ export class EditScence extends SGraphScene {
      * 增加多边形item lenged
      */
     addPolygonItem(event: SMouseEvent): void {
-
-        const SubType = this._legend.SubType ? this._legend.SubType : ''
+        const SubType = this._legend.SubType ? this._legend.SubType : '';
         const LegendData: Legend = {
             ID: uuid(),
             Name: this._legend.Name,
@@ -211,6 +259,7 @@ export class EditScence extends SGraphScene {
             OutLine: [{ X: event.x, Y: event.y }],
             SubType: SubType,
             Properties: {
+                IconUrl: '/serve/topology-wanda/Picture/query/' + this._legend.Url,
                 StrokeColor: this._legend.Color,
                 FillColor: this._legend.FillColor,
                 LineDash: this._legend.LineDash,
@@ -234,10 +283,65 @@ export class EditScence extends SGraphScene {
         Polylines.zOrder = ItemOrder.polygonOrder;
         // Polylines.moveable = true;
         this.addItem(Polylines);
+        this.Nodes.push(Polylines);
         Polylines.connect("finishCreated", this, this.finishCreated);
         this.grabItem = Polylines;
         this.focusItem = Polylines;
-        this.Nodes.push(Polylines);
+        this.scenceUpdate(this);
+    }
+
+    /**
+     * 点选创建区域
+    */
+    clickToAddArea(item: SSpaceItem): void {
+        if (this.cmd != 'Zone') {
+            return
+        }
+        if (this.isSelecting && this._legend) {
+            //@ts-ignore
+            item.isExtracted = true
+            const SubType = this._legend.SubType ? this._legend.SubType : '';
+            const LegendData: Legend = {
+                ID: uuid(),
+                Name: this._legend.Name,
+                GraphElementType: this._legend.Type,
+                Num: 1,
+                GraphElementId: this._legend.Id,
+                AttachObjectIds: [],
+                Type: "Zone",
+                Pos: { X: item.x, Y: item.y },
+                OutLine: item.pointArr[0],
+                SubType: SubType,
+                Properties: {
+                    IconUrl: '/serve/topology-wanda/Picture/query/' + this._legend.Url,
+                    StrokeColor: this._legend.Color,
+                    FillColor: this._legend.FillColor,
+                    LineDash: this._legend.LineDash,
+                    LineWidth: this._legend.LineWidth,
+                    font: 12,
+                    color: '',
+                    FID: item.data.SourceId,
+                    TextPos: { X: item.data.Location.Points[0].X, Y: -item.data.Location.Points[0].Y }
+                },
+            }
+            let Polylines = null;
+            if (SubType == "SCPZ") {
+                Polylines = new SSCPZZoneLegendItem(null, LegendData);
+            } else if (SubType == "FHFQ") {
+                Polylines = new SFHFQZoneLegendItem(null, LegendData);
+            } else {
+                Polylines = new SZoneLegendItem(null, LegendData);
+            }
+            Polylines.selectable = true;
+            //设置状态
+            Polylines.status = SItemStatus.Normal;
+            this.addItem(Polylines);
+            this.Nodes.push(Polylines);
+            Polylines.connect("finishCreated", this, this.finishCreated);
+            this.finishCreated(Polylines)
+            this.focusItem = Polylines;
+            this.scenceUpdate(this);
+        }
     }
 
     /**
@@ -256,6 +360,7 @@ export class EditScence extends SGraphScene {
             Pos: { X: event.x, Y: event.y },
             /** 由应用自己定义  */
             Properties: {
+                IconUrl: require(`../../assets/images/t-img-hover.png`),
                 Url: '',
             }
         }
@@ -264,10 +369,11 @@ export class EditScence extends SGraphScene {
         item.selectable = true;
         item.moveable = true;
         this.addItem(item);
+        this.Markers.push(item);
         this.grabItem == null;
         this.focusItem = item;
         this.cmd = 'choice';
-        this.Markers.push(item)
+        this.scenceUpdate(this);
     }
 
     /**
@@ -285,9 +391,10 @@ export class EditScence extends SGraphScene {
             Pos: { X: event.x, Y: event.y },
             /** 由应用自己定义  */
             Properties: {
+                IconUrl: require(`../../assets/images/t-text-hover.png`),
                 Text: '请在右侧属性栏输入文字!',
                 Color: '',
-                Font: 0,
+                Font: 12,
                 BackgroundColor: ''
             }
         }
@@ -297,15 +404,18 @@ export class EditScence extends SGraphScene {
         item.moveable = true;
         item.zOrder = ItemOrder.textOrder;
         this.addItem(item);
-        this.grabItem == null
+        this.Markers.push(item);
+        this.grabItem = item;
+        this.focusItem = item;
         this.cmd = 'choice';
-        this.Markers.push(item)
+        this.scenceUpdate(this);
     }
 
     /**
      * 增加图标lenged图标
      */
     addIconItem(event: SMouseEvent): void {
+        //获取信息工程化相关参数
         const LegendData: Legend = {
             ID: uuid(),
             Name: this._legend.Name,
@@ -318,23 +428,26 @@ export class EditScence extends SGraphScene {
             Rolate: { X: 0, Y: 0, Z: 0 },
             Size: { Width: 0, Height: 0 },         // 大小
             Properties: {
+                IconUrl: '/serve/topology-wanda/Picture/query/' + this._legend.Url,
                 Url: '/serve/topology-wanda/Picture/query/' + this._legend.Url,
                 Num: 1, // 此num与信息工程化得num无关
-                sWidth: 0,  //icon 的宽
-                sHeight: 0,   //icon 的高
-                font: 0,    //font
-                color: ''  //字体颜色
+                sWidth: 24,  //icon 的宽
+                sHeight: 24,   //icon 的高
+                font: 12,    //font
+                color: '',  //字体颜色
+                GraphCategoryId: this._legend.GraphCategoryId
             },
         }
         const item = new SImageLegendItem(null, LegendData);
-        this.grabItem == null
         this.cmd = 'choice';
         item.selectable = true;
         item.moveable = true;
         item.zOrder = ItemOrder.markOrder;
-        // item.moveTo(event.x, event.y);
         this.addItem(item);
         this.Nodes.push(item);
+        this.grabItem = item;
+        this.focusItem = item;
+        this.scenceUpdate(this);
     }
 
     /**
@@ -352,6 +465,7 @@ export class EditScence extends SGraphScene {
         if (this.focusItem) {
             const old = this.focusItem.text;
             this.focusItem.text = str;
+            this.scenceUpdate(this);
             // this.undoStack.push(new SGraphPropertyCommand(this, this.focusItem, "text", old, str));
         }
     }
@@ -392,7 +506,7 @@ export class EditScence extends SGraphScene {
     updatedFontColor(color: string): void {
         if (this.focusItem) {
             let old = this.focusItem.color;
-            this.focusItem.color = color;
+            this.focusItem.color = new SColor(color);
             // this.undoStack.push(new SGraphPropertyCommand(this, this.focusItem, "color", old, color));
         }
     }
@@ -404,10 +518,10 @@ export class EditScence extends SGraphScene {
     updatedBorderColor(color: string): void {
         if (this.focusItem) {
             if (this.focusItem instanceof SZoneLegendItem || this.focusItem instanceof SSCPZZoneLegendItem || this.focusItem instanceof SFHFQZoneLegendItem) {
-                this.focusItem.strokeColor = new SColor(color)
+                this.focusItem.strokeColor = new SColor(color);
             } else {
                 // let old = this.focusItem.strokeColor;
-                this.focusItem.strokeColor = color;
+                this.focusItem.strokeColor = new SColor(color);
             }
             // this.undoStack.push(new SGraphPropertyCommand(this, this.focusItem, "color", old, color));
         }
@@ -469,7 +583,7 @@ export class EditScence extends SGraphScene {
      */
     updatedbackColor(color: string): void {
         if (this.focusItem) {
-            this.focusItem.backgroundColor = color;
+            this.focusItem.backgroundColor = new SColor(color);
         }
     }
 
@@ -507,7 +621,8 @@ export class EditScence extends SGraphScene {
      */
     upadataLengedName(val: string): void {
         if (this.focusItem && this.focusItem.data) {
-            this.focusItem.text = val
+            this.focusItem.text = val;
+            this.scenceUpdate(this);
         }
     }
 
@@ -517,7 +632,7 @@ export class EditScence extends SGraphScene {
      */
     upadatImageNum(num: number): void {
         if (this.focusItem && this.focusItem.num) {
-            this.focusItem.num = num
+            this.focusItem.num = num;
         }
     }
 
@@ -527,16 +642,26 @@ export class EditScence extends SGraphScene {
      */
     upadatfillColor(fillColor: string): void {
         if (this.focusItem && this.focusItem.fillColor) {
-            this.focusItem.fillColor = new SColor(fillColor)
+            this.focusItem.fillColor = new SColor(fillColor);
         }
     }
     /**
-   * 更改图例说明数量
-   * @param num number item数量 (只对icon设备类)
+   * 更改图例说
+   * @param num number
    */
-    upadatitemExplain(itemExplain: string): void {
+    upadatitemExplain(ItemExplain: string): void {
+        if (this.focusItem) {
+            this.focusItem.data.Properties.ItemExplain = ItemExplain;
+        }
+    }
+
+    /**
+     * 更新工程信息化的相关数据
+     * @param AttachObjectIds Array
+     */
+    upadatAttachObjectIds(AttachObjectIds: []): void {
         if (this.focusItem) {
-            this.focusItem.itemExplain = itemExplain
+            this.focusItem.data.AttachObjectIds = AttachObjectIds;
         }
     }
 
@@ -545,34 +670,51 @@ export class EditScence extends SGraphScene {
      */
     deleiteItem(): void {
         if (this.focusItem) {
-            this.removeItem(this.focusItem);
-            let a = -1
-            this.Nodes.forEach((item: any, index: number) => {
-                if (item.id == this.focusItem.id) {
-                    a = index
+            if ((this.focusItem instanceof SZoneLegendItem ||
+                this.focusItem instanceof SSCPZZoneLegendItem ||
+                this.focusItem instanceof SFHFQZoneLegendItem ||
+                this.focusItem instanceof TipelineItem) &&
+                this.focusItem.curIndex != -1
+            ) {
+                this.focusItem.deletePoint(this.focusItem.curIndex);
+            } else {
+                this.removeItem(this.focusItem);
+                let a = -1
+                this.Nodes.forEach((item: any, index: number) => {
+                    if (item.id == this.focusItem.id) {
+                        a = index
+                    }
+                });
+                if (a > -1) {
+                    this.Nodes.splice(a, 1);
                 }
-            });
-            this.Nodes.splice(a, 1);
-            let b = -1;
-            this.Markers.forEach((item: any, index: number) => {
-                if (item.id == this.focusItem.id) {
-                    b = index
+                let b = -1;
+                this.Markers.forEach((item: any, index: number) => {
+                    if (item.id == this.focusItem.id) {
+                        b = index
+                    }
+                });
+                if (b > -1) {
+                    this.Markers.splice(b, 1);
                 }
-            });
-            this.Markers.splice(b, 1);
-            let c = -1;
-            this.Relations.forEach((item: any, index: number) => {
-                if (item.id == this.focusItem.id) {
-                    c = index
+                let c = -1;
+                this.Relations.forEach((item: any, index: number) => {
+                    if (item.id == this.focusItem.id) {
+                        c = index
+                    }
+                });
+                if (c > -1) {
+                    this.Relations.splice(c, 1);
                 }
-            });
-            this.Relations.splice(c, 1);
-            this.focusItem = null;
-        }
-        if (this.view) {
-            this.view.update();
+                this.focusItem = null;
+                if (this.view) {
+                    this.view.update();
+                }
+                this.scenceUpdate(this);
+            }
         }
     }
+    scenceUpdate(scence: any) { }
 
     /**
      * 对齐指定item
@@ -640,7 +782,23 @@ export class EditScence extends SGraphScene {
     ////////////////////////
     //  以下为鼠标键盘操作事件
     onMouseDown(event: SMouseEvent): any {
+        if (!this.isEditStatus) {
+            return super.onMouseDown(event);
+        }
+        // 判断是否开启吸附,并且有吸附的点
+        if (
+            this.isAbsorbing &&
+            this.highLight &&
+            this.highLight.visible
+        ) {
+            event.x = this.highLight.point.x;
+            event.y = this.highLight.point.y;
+        }
         if (this.grabItem) {
+            if (this.grabItem instanceof TipelineItem) {
+                this.setTipeEndanchor(event)
+                return true;
+            }
             return this.grabItem.onMouseDown(event);
         }
         switch (this.cmd) {
@@ -654,7 +812,12 @@ export class EditScence extends SGraphScene {
                 this.addImgItem(event)
                 break;
             case 'Zone':
-                this.addPolygonItem(event);
+                if (!this.isSelecting) {
+                    this.addPolygonItem(event);
+                } else {
+                    // 点选创建区域
+                    return super.onMouseDown(event)
+                }
                 break;
             case 'Image':
                 this.addIconItem(event);
@@ -667,6 +830,21 @@ export class EditScence extends SGraphScene {
         }
     }
 
+    onMouseMove(event: SMouseEvent): boolean {
+        if (!this.isEditStatus) {
+            return super.onMouseMove(event);
+        }
+        if (this.isAbsorbing) {
+            if (!this.highLight) {
+                this.highLight = new HighlightItem(null);
+                this.addItem(this.highLight);
+            }
+            this.highLight.visible = false;
+            this.absorbSpace(event);
+        }
+        return super.onMouseMove(event)
+    }
+
     /**
      * 键盘事件
      *
@@ -674,12 +852,292 @@ export class EditScence extends SGraphScene {
      * @return	boolean
      */
     onKeyDown(event: KeyboardEvent): any {
+        if (!this.isEditStatus) {
+            return super.onKeyDown(event);
+        }
         if (this.grabItem) {
             this.grabItem.onKeyDown(event);
+            if (event.code == "Escape") {
+                const item = this.grabItem;
+                this.grabItem = null
+                this.removeItem(item);
+                if (this.view) {
+                    this.view.update()
+                }
+                this.setCmd = 'choice'
+            }
         }
         // if (event.key == "Enter") {
         //     this.cmd = 0
         // }
         return false
     }
+
+
+    /**
+     * 鼠标双击事件
+     *
+     * @param	event         事件参数
+     * @return	boolean
+     */
+    onDoubleClick(event: SMouseEvent): boolean {
+        if (!this.isEditStatus) {
+            return true
+        }else{
+           return super.onDoubleClick(event);
+        }
+
+    } // Function onDoubleClick()
+
+    /**
+     * 设置结束锚点
+     *
+    */
+    setTipeEndanchor(event: SMouseEvent): void {
+        if (this.grabItem instanceof TipelineItem) {
+            if (this.grabItem.status == SItemStatus.Create) {
+                const anc = this.clickIsAnchor(event);
+                if (anc) {
+                    const p = anc.mapToScene(0, 0)
+                    anc.isConnected = true;
+                    event.x = p.x;
+                    event.y = p.y;
+                    if (this.grabItem.pointList.length) {
+                        this.grabItem.endAnchor = anc;
+                        anc.parent ?.connect('changePos', this.grabItem, this.grabItem.changePos)
+                    }
+                    this.grabItem.anchor2ID = anc.id
+                    this.grabItem.node2Id = anc.parent.id
+                    this.grabItem.onMouseDown(event)
+                    this.grabItem.status = SItemStatus.Normal;
+                    this.finishCreated(this.grabItem)
+                    return
+                }
+            }
+            this.grabItem.onMouseDown(event)
+        }
+    }
+
+    /**
+     *  划线时点击位置是否是锚点
+     *
+     *  @param  event   事件
+     *  @param  len     限制距离
+     *  @return 点击的锚点
+     * */
+    clickIsAnchor(event: SMouseEvent): SAnchorItem | null {
+        let minAnchor = null;
+        let len: number = -1;
+        this.Nodes.forEach(image => {
+            if (image.anchorList && image.anchorList.length) {
+                image.anchorList.forEach(anchor => {
+                    let anchorPoint = anchor.mapToScene(0, 0);
+                    let dis = SMathUtil.pointDistance(
+                        event.x,
+                        event.y,
+                        anchorPoint.x,
+                        anchorPoint.y
+                    );
+                    if (len < 0) {
+                        len = anchor.sceneDis;
+                    }
+                    if (dis < len) {
+                        minAnchor = anchor;
+                        len = dis;
+                    }
+                })
+            }
+        })
+        console.log('-----------------------')
+        console.log(minAnchor)
+        console.log('-----------------------')
+        return minAnchor;
+    }
+
+    /**
+     *  划线时点击位置是在文本,图片,,区域内
+     *
+     *  @param  event   事件
+     *  @return 点击的item
+     * */
+    clickIsItem(event: SMouseEvent): SGraphItem | null {
+        let minIten = null;
+        let len: number = -1;
+        let itemList = this.Nodes.concat(this.Markers);
+        itemList.forEach(item => {
+            if (
+                item instanceof STextMarkerItem ||
+                item instanceof SImageMarkerItem ||
+                item instanceof SZoneLegendItem ||
+                item instanceof SFHFQZoneLegendItem ||
+                item instanceof SSCPZZoneLegendItem
+            ) {
+                let scenePoint = item.mapFromScene(event.x, event.y);
+                if (item.contains(scenePoint.x, scenePoint.y)) {
+                    let dis = SMathUtil.pointDistance(
+                        scenePoint.x,
+                        scenePoint.y,
+                        item.boundingRect().center().x,
+                        item.boundingRect().center().y
+                    );
+                    if (len < 0) {
+                        minIten = item;
+                        len = dis;
+                    }
+                    if (dis < len) {
+                        minIten = item;
+                        len = dis;
+                    }
+                }
+            }
+        })
+        console.log('-----------------------')
+        console.log(minIten)
+        console.log('-----------------------')
+        return minIten;
+    }
+
+    /**
+      *  点是否在吸附区域内
+      *
+      *  @param  p       要判断的点
+      *  @param  minX    空间区域
+      *  @param  minY    空间区域
+      *  @param  maxX    空间区域
+      *  @param  maxY    空间区域
+      */
+    static isPointInAbsorbArea(
+        p: SPoint,
+        minX: number,
+        maxX: number,
+        minY: number,
+        maxY: number
+    ): boolean {
+        let rect = new SRect(
+            minX - 1000,
+            minY - 1000,
+            maxX - minX + 2000,
+            maxY - minY + 2000
+        );
+        return rect.contains(p.x, p.y);
+    } // Function isPointInAbsorbArea()
+
+    /**
+     *  吸附空间
+     *
+     *  @param  event   鼠标事件对象
+     *  @return boolean 是否找到吸附的对象
+     */
+    absorbSpace(event: SMouseEvent): boolean {
+        if (!this.highLight) {
+            return false;
+        }
+        let absorbLen = 1000;
+        if (this.view) {
+            absorbLen = 10 / this.view.scale;
+        }
+        let P = this.absorbSpacePoint(event, absorbLen);
+        if (P.Point) {
+            this.highLight.distance = P.MinDis;
+            this.highLight.point = new SPoint(P.Point.X, -P.Point.Y);
+            this.highLight.visible = true;
+            return true;
+        } else {
+            let L = this.absorbSpaceLine(event, absorbLen);
+            if (L.Line && L.Point) {
+                this.highLight.distance = L.MinDis;
+                this.highLight.point = L.Point;
+                this.highLight.line = L.Line;
+                this.highLight.visible = true;
+                return true;
+            }
+            return false;
+        }
+    } // Function absorbSpace()
+
+    /**
+     *  吸附空间点
+     *
+     *  @param  event       鼠标事件对象
+     *  @param  absorbLen   吸附距离
+     *  @return MinDis      吸附的点
+     */
+    absorbSpacePoint(event: SMouseEvent, absorbLen: number): MinDis {
+        let minPointDis = Number.MAX_SAFE_INTEGER;
+        let Point;
+        this.spaceList.map((space): void => {
+            if (
+                EditScence.isPointInAbsorbArea(
+                    new SPoint(event.x, event.y),
+                    space.minX,
+                    space.maxX,
+                    space.minY,
+                    space.maxY
+                )
+            ) {
+                space.data.OutLine.forEach((item): void => {
+                    let minDis = SMathUtil.getMinDisPoint(
+                        new SPoint(event.x, event.y),
+                        item
+                    );
+                    if (
+                        minDis &&
+                        minDis.MinDis < absorbLen &&
+                        minDis.MinDis < minPointDis
+                    ) {
+                        minPointDis = minDis.MinDis;
+                        Point = minDis.Point;
+                    }
+                });
+            }
+        });
+        return {
+            MinDis: minPointDis,
+            Point: Point
+        };
+    } // Function absorbSpacePoint()
+
+    /**
+     *  吸附空间线
+     *
+     *  @param  event       鼠标事件对象
+     *  @param  absorbLen   吸附距离
+     *  @return PointToLine 吸附的线
+     */
+    absorbSpaceLine(event: SMouseEvent, absorbLen: number): PointToLine {
+        let minPointDis = Number.MAX_SAFE_INTEGER;
+        let Point, Line;
+        this.spaceList.forEach((space): void => {
+            if (
+                EditScence.isPointInAbsorbArea(
+                    new SPoint(event.x, event.y),
+                    space.minX,
+                    space.maxX,
+                    space.minY,
+                    space.maxY
+                )
+            ) {
+                space.data.OutLine.forEach((item): void => {
+                    let minDisLine = SMathUtil.getMinDisLine(
+                        new SPoint(event.x, event.y),
+                        item
+                    );
+                    if (
+                        minDisLine &&
+                        minDisLine.MinDis < absorbLen &&
+                        minDisLine.MinDis < minPointDis
+                    ) {
+                        minPointDis = minDisLine.MinDis;
+                        Point = minDisLine.Point;
+                        Line = minDisLine.Line;
+                    }
+                });
+            }
+        });
+        return {
+            MinDis: minPointDis,
+            Point: Point,
+            Line: Line
+        };
+    } // Function absorbSpaceLine()
 }

+ 20 - 9
src/components/viewLengend.vue

@@ -5,7 +5,7 @@
 */
 <template>
     <div class='view'>
-        <div v-if='systemName=="土建系统"' style='height:300px'>
+        <div v-if='systemName=="土建系统"'>
             <el-table
                 ref='dataTable'
                 :data='scpzTable'
@@ -27,9 +27,9 @@
         </div>
         <div v-else>
             <el-table
-                v-loading='loading'
                 ref='dataTable'
-                :data='viewTable'
+                v-if='legendTable.length>=0'
+                :data='legendTable'
                 tooltip-effect='dark'
                 style='width:100%;'
                 @selection-change='handleSelectionChange'
@@ -63,7 +63,7 @@
             </div>
             <div class='remark' v-if='remarksText'>
                 <span class='remark-title'>注:</span>
-                <div v-html='remarksText' class='remark-text'></div>
+                <div :key='key' v-html='remarksText' class='remark-text'></div>
             </div>
         </div>
     </div>
@@ -72,11 +72,12 @@
 import bus from '@/utils/bus.js'
 import { mapGetters } from 'vuex'
 export default {
-    props: ['viewTable', 'loading', 'remarksText', 'systemName'],
+    props: ['loading', 'systemName'],
     data() {
         return {
             swich: true,
-            multipleSelection: []
+            multipleSelection: [],
+            key: 0
         }
     },
     methods: {
@@ -91,15 +92,25 @@ export default {
             this.$emit('changeSwitch', val)
         },
         setSelected() {
-            this.viewTable.forEach(t => {
+            this.legendTable.forEach(t => {
                 this.$refs.dataTable.toggleRowSelection(t, true)
             })
         }
     },
     computed: {
-        ...mapGetters(['scpzTable'])
+        ...mapGetters(['scpzTable', 'legendTable', 'remarksText'])
     },
-    mounted() {}
+    mounted() {},
+    watch: {
+        '$store.state.remarksText': {
+            handler(oVal, nVal) {
+                if (oVal != nVal) {
+                    this.key++
+                }
+            },
+            deep: true
+        }
+    }
 }
 </script>
 <style lang="less" scoped>

+ 20 - 5
src/lib/FloorScene.js

@@ -1,8 +1,14 @@
-import { SGraphScene } from "@saga-web/graph/lib"
-import { ItemColor } from "@saga-web/big";
-import { SColor } from '@saga-web/draw/lib';
+import {
+  SGraphScene
+} from "@saga-web/graph/lib"
+import {
+  ItemColor
+} from "@saga-web/big";
+import {
+  SColor
+} from '@saga-web/draw/lib';
 export class FloorScene extends SGraphScene {
-  constructor(){
+  constructor() {
     super()
     ItemColor.spaceColor = new SColor("#A4ABB22B")
     ItemColor.wallColor = new SColor("#A7AEB3FF")
@@ -11,4 +17,13 @@ export class FloorScene extends SGraphScene {
     ItemColor.selectColor = new SColor("#84A0BB2B")
     ItemColor.spaceBorderColor = new SColor("#A7AEB3FF")
   }
-}
+
+  onDoubleClick() {
+    return true
+  } // Function onDoubleClick()
+
+  onKeyDown() {
+    return true
+  }
+
+}

+ 5 - 0
src/store/index.js

@@ -21,6 +21,7 @@ export default new Vuex.Store({
         isMessage: true, //是否有发布的图
         scpzTable: [], //土建系统图例展示
         legendTable: [], //除土建系统图例展示
+        remarksText: '', //备注
     },
     getters: {
         floorsArr: (state) => state.floorsArr,
@@ -32,6 +33,7 @@ export default new Vuex.Store({
         isMessage: (state) => state.isMessage,
         scpzTable: (state) => state.scpzTable,
         legendTable: (state) => state.legendTable,
+        remarksText: (state) => state.remarksText,
     },
     mutations: {
         // 设置是否登陆校验
@@ -74,6 +76,9 @@ export default new Vuex.Store({
         SETLEGENDTABLE(state, data) {
             state.legendTable = data
         },
+        SETREMARKSTEXT(state, data) {
+            state.remarksText = data
+        },
     },
     actions: {
         // 获取项目列表、userId

+ 318 - 0
src/views/analysis/CoreDeviceReport.vue

@@ -0,0 +1,318 @@
+<!-- 核心设备报表 -->
+<template>
+  <div class="core-device-report">
+    <div class="main-left">
+      <Select 
+        class="system-select"
+        width="217"
+        :isReadOnly="true" 
+        tipPlace="top" 
+        caption="系统名称:"
+        @change="changeCurSystem" 
+        v-model="systemName" 
+        :selectdata="systemList"
+        :placeholder="'请选择'"
+      />
+      <div class="system-content">
+        <div v-for="(item) in systemContentData" :key="'key_' + item.id" class="item-content" :class="{'active': item.isActive}" @click="changeEquipment(item.id)">
+          <div class="first-row">
+            <div>{{item.name}}</div>
+            <div>{{item.isMaintenance?'维保中' : ''}}</div>
+          </div>
+          <div class="sec-row">
+            <div>{{item.num}}<span>台</span></div>
+            <span :class="{'abnormal': item.abnormal}">{{item.statusNum !== 0?item.statusNum : ''}}</span>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div class="main-right">
+      <div class="search-container">
+        <Input iconType="search" v-model="searchKey" placeholder="搜索" width="192"/>
+      </div>
+      <el-table :data="tableData" style="width: 100%;margin-bottom: 63px;" @row-click="showEquipmentStatus">
+        <el-table-column label="序号" type="index" :index="indexMethod"></el-table-column>
+        <el-table-column prop="sbjc" label="设备简称"></el-table-column>
+        <el-table-column prop="assetnum" label="设备编号"></el-table-column>
+        <el-table-column prop="is_exception" label="状态">
+          <template slot-scope="scope">
+            <span style="display: inline-block;width: 6px;height:6px;border-radius: 3px;background: #0091FF;" :style="{'background': !scope.row.is_exception?'#0091FF' : '#F54E45'}"></span>
+            <span style="margin-left: 10px">{{ !scope.row.status?'正常' : '异常' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="photos_num" label="照片">
+          <template slot-scope="scope">
+            <span style="color: #025BAA">{{ scope.row.photos_num?scope.row.photos_num : 0 }}张</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="report" label="报告">
+          <template slot-scope="scope">
+            <span style="color: #025BAA">{{ scope.row.report }}</span>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="page">
+        <el-pagination
+          background
+          layout="prev, pager, next"
+          :total="tatol"
+          :current-page="curPage"
+          :page-size="pageSize"
+          @current-change="changeTablePage">
+        </el-pagination>
+      </div>
+      <el-dialog title="交换机-照明系统" :visible.sync="dialogTableVisible">
+        <el-date-picker
+          style="margin-bottom: 12px;"
+          v-model="dialogTime"
+          type="daterange"
+          range-separator="至"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期">
+        </el-date-picker>
+        <el-table :data="tableData" style="margin-bottom: 55px">
+          <el-table-column property="serialNumber" label="日期"></el-table-column>
+          <el-table-column property="equipmentName" label="事项类型"></el-table-column>
+          <el-table-column property="equipmentNumber" label="事项名称"></el-table-column>
+          <el-table-column property="photos_num" label="照片">
+            <template slot-scope="scope">
+              <span style="color: #025BAA">{{ scope.row.photos_num?scope.row.photos_num : 0 }}张</span>
+            </template>
+          </el-table-column>
+          <el-table-column property="report" label="报告">
+            <template slot-scope="scope">
+              <span style="color: #025BAA">{{ scope.row.report }}</span>
+            </template>
+          </el-table-column>
+        </el-table>
+        <div class="page">
+          <el-pagination
+            background
+            layout="prev, pager, next"
+            :total="tatol">
+          </el-pagination>
+        </div>
+      </el-dialog>
+    </div>
+  </div>
+</template>
+
+<script>
+import { Select, Input } from 'meri-design';
+import { queryEquipmentList, queryTableData } from '../../api/coreDeviceReport';
+import _ from 'lodash';
+export default {
+  data () {
+    return {
+      systemName: '', // 系统名称
+      systemList: [], // 系统
+      systemContentData: [
+        {id: 1, name: '高压配电柜', isMaintenance: true, num: 95, statusNum: 0, abnormal: false, isActive: true},
+        {id: 2, name: '变压器', isMaintenance: false, num: 256, statusNum: 12, abnormal: true, isActive: false},
+        {id: 3, name: '低压配电柜', isMaintenance: false, num: 354, statusNum: 0, abnormal: false, isActive: false},
+        {id: 4, name: '直流屏', isMaintenance: false, num: 175, statusNum: 0, abnormal: false, isActive: false},
+        {id: 5, name: '柴油发电机组', isMaintenance: false, num: 186, status: 0, abnormal: false, isActive: false},
+      ], // 系统下的各种组成
+      searchKey: '', // 搜索关键字
+      tableData: [
+        // {serialNumber: 1, equipmentName: 2, equipmentNumber: 3, status: '正常', photo: 5, report: 6},
+        // {serialNumber: 1, equipmentName: 2, equipmentNumber: 3, status: '异常', photo: 5, report: 6},
+        // {serialNumber: 1, equipmentName: 2, equipmentNumber: 3, status: '正常', photo: 5, report: 6},
+      ], // 表数据
+      curPage: 1, // 当前页码
+      pageSize: 10, // 每页条数
+      tatol: 0, // 总数据
+      dialogTableVisible: false, // 弹窗显示状态
+      dialogTime: '', // 弹框内的时间
+    }
+  },
+
+  components: {
+    Select,
+    Input
+  },
+
+  computed: {},
+
+  mounted() {
+    this.getSystemList();
+    this.getTableData();
+  },
+
+  methods: {
+    /**
+     * 获取系统列表数据
+     */
+    getSystemList() {
+      queryEquipmentList().then((res) => {
+        if (res.result === 'success') {
+          let data = res.data;
+          let newData = [];
+          _.forEach(data, (item) => {
+            newData.push({
+              id: item.code,
+              name: item.name
+            })
+          })
+          this.systemList = newData;
+        }
+      }).catch((err) => {
+        console.err(err)
+      });
+    },
+    /**
+     * 切换系统名称
+     */
+    changeCurSystem(val) {
+      console.log('val', val)
+    },
+    /**
+     * 切换系统下的设备
+     */
+    changeEquipment(id) {
+      _.map(this.systemContentData, (o) => {return o.isActive = o.id === id})
+    },
+    /**
+     * 获取表数据
+     */
+    getTableData() {
+      let query = {
+        category_code: 'gdc'
+      }
+      queryTableData(`/data/data/glsms_asset/query?plazaId=1000423&page=${this.curPage}&size=${this.pageSize}`, query).then((res) => {
+        console.log('res', res)
+        const { result, count, data } = res;
+        if (result === 'success') {
+          this.tatol = count;
+          this.tableData = data;
+        }
+      })
+    },
+    /**
+     * 表第一列序号
+     */
+    indexMethod(index) {
+      return index + 1;
+    },
+    /**
+     * 切换页码
+     */
+    changeTablePage(page) {
+      this.curPage = page;
+      this.getTableData();
+    },
+    /**
+     * 显示设备实例的维保、专维等状态
+     */
+    showEquipmentStatus(row, column, e) {
+      console.log('row', row)
+      this.dialogTableVisible = true;
+    },
+  }
+}
+</script>
+
+<style lang='less' scoped>
+.core-device-report{
+  display: flex;
+  width: 100%;
+  height: 100%;
+  .main-left{
+    padding-left: 16px;
+    padding-right: 14px;
+    padding-top: 12px;
+    padding-bottom: 12px;
+    width: 247px;
+    border-top: 1px solid #E4E6E7;
+    border-right: 1px solid #E4E6E7;
+    .system-select{
+      margin-bottom: 16px;
+    }
+    .item-content{
+      padding-left: 12px;
+      padding-right: 21px;
+      padding-top: 7px;
+      padding-bottom: 8px;
+      border-bottom: 1px solid #E4E6E7;
+      cursor: pointer;
+      >div{
+        display: flex;
+      }
+      .first-row{
+        margin-bottom: 6px;
+        display: flex;
+        justify-content: space-between;
+        >div:first-child{
+          font-size: 14px;
+          color: #1F2429;
+          line-height: 19px;
+        }
+        >div:nth-of-type(2){
+          margin-left: 8px;
+          font-size: 12px;
+          color: #CD981D;
+          line-height: 20px;
+        }
+        
+      }
+      .sec-row{
+        margin-bottom: 6px;
+        >div:first-child{
+          font-size: 14px;
+          color: #1F2429;
+          line-height: 19px;
+          >span{
+            font-size: 12px;
+            color: #646C73;
+          }
+        }
+        // >div:nth-of-type(2){
+        //   padding-left: 8px;
+        //   padding-right: 8px;
+        //   font-size: 12px;
+        //   color: #0065B3;
+        //   line-height: 22px;
+        //   background: #E1F2FF;
+        // }
+        .abnormal{
+          margin-left: 11px;
+          padding-left: 3px;
+          padding-right: 3px;
+          font-size: 12px;
+          color: #F54E45!important;
+          background: #FDE3E2!important;
+          border-radius:9px;
+        }
+      }
+    }
+    .system-content{
+      .active{
+        background: #E5EEF5;
+        border-radius: 2px;
+        .first-row>div:first-child,
+        .sec-row>div{
+          color: #025BAA;
+          >span{
+            color: #025BAA;
+          }
+        }
+      }
+    }
+  }
+  .main-right{
+    flex: 1;
+    background: #fff;
+    padding-left: 15px;
+    padding-right: 13px;
+    padding-top: 13px;
+    padding-bottom: 25px;
+    .search-container{
+      margin-bottom: 12px;
+    }
+    .page{
+      display: flex;
+      justify-content: flex-end;
+    }
+  }
+}
+</style>

+ 104 - 0
src/views/analysis/GanttChart.vue

@@ -0,0 +1,104 @@
+<!-- 事项甘特图 -->
+<template>
+  <div class="gantt-chart">
+    <div class="condition-legend-bar">
+      <Select 
+        class="system-select"
+        width="217"
+        :isReadOnly="true" 
+        tipPlace="top" 
+        caption="系统名称:"
+        v-model="systemName" 
+        :selectdata="systemList" 
+        :placeholder="'请选择'"
+      />
+      <div class="legend-container">
+        <div v-for="(item) in legends" :key="'key_' + item.id" class="item-legend">
+          <div :style="{'background': item.backgroundColor, 'border-color': item.borderColor}"></div>
+          <div>{{item.text}}</div>
+        </div>
+        <div >
+          <el-radio-group v-model="timeType">
+            <el-radio style="line-height: 32px;margin-right: 16px;" label="month">月视图</el-radio>
+            <el-radio style="line-height: 32px;" label="day">日视图</el-radio>
+          </el-radio-group>
+        </div>
+      </div>
+    </div>
+    <div class="main-gantt-container">
+
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data () {
+    return {
+      systemList: [], // 系统列表
+      systemName: '', // 系统名称
+      legends: [
+        {id: 1, text: '按时完成', backgroundColor: '#E7E9EA', borderColor: '#C3C7CB'},
+        {id: 2, text: '未开始/进行中', backgroundColor: 'rgba(91, 143, 249, 0.2)', borderColor: '#5B8FF9'},
+        {id: 3, text: '按时完成', backgroundColor: '#FBCE99', borderColor: '#F58300'},
+        {id: 4, text: '按时完成', backgroundColor: '#FBB8B5', borderColor: '#F54E45'},
+      ], // 图例
+      timeType: 'month', // 甘特图时间类型
+    }
+  },
+
+  components: {},
+
+  computed: {},
+
+  mounted() {},
+
+  methods: {}
+}
+</script>
+
+<style lang='less' scoped>
+.gantt-chart{
+  padding-left: 16px;
+  padding-right: 16px;
+  padding-top: 12px;
+  padding-bottom: 16px;
+  width: 100%;
+  height: 100%;
+  background: #fff;
+  .condition-legend-bar{
+    margin-bottom: 12px;
+    display: flex;
+    justify-content: space-between;
+  }
+  .legend-container{
+    display: flex;
+    .item-legend{
+      padding-left: 18px;
+      position: relative;
+      font-size: 14px;
+      color: #646C73;
+      line-height: 32px;
+      &:not(:nth-of-type(4)){
+        margin-right: 20px;
+      }
+      >div:first-child{
+        position: absolute;
+        left: 0;
+        top: calc(50% - 6px);
+        width: 12px;
+        height: 12px;
+        border: 1px solid;
+      }
+      &:nth-of-type(4){
+        margin-right: 32px;
+      }
+    }
+  }
+  .main-gantt-container{
+    width: 100%;
+    height: calc(100% - 44px);
+    background: #F2F5F7;
+  }
+}
+</style>

+ 85 - 0
src/views/analysis/SpecificationUpdateRecord.vue

@@ -0,0 +1,85 @@
+<!-- 说明书更新记录 -->
+<template>
+  <div class="specification-update-record">
+    <div class="screening-condition">
+      <Select 
+        style="margin-right: 12px;"
+        width="200"
+        :isReadOnly="true" 
+        tipPlace="top" 
+        caption="事件类型:"
+        @change="testClick" 
+        v-model="incidentType" 
+        :selectdata="incidentList" 
+        :placeholder="'请选择'"
+      />
+      <el-date-picker
+        v-model="timeVal"
+        type="daterange"
+        range-separator="至"
+        start-placeholder="开始日期"
+        end-placeholder="结束日期">
+      </el-date-picker>
+    </div>
+    <el-table :data="tableData" style="margin-bottom: 19px">
+      <el-table-column property="date" label="日期"></el-table-column>
+      <el-table-column property="itemType" label="事项类型"></el-table-column>
+      <el-table-column property="serialNumber" label="编号"></el-table-column>
+      <el-table-column property="update" label="更新内容"></el-table-column>
+    </el-table>
+    <div class="page">
+      <el-pagination
+        background
+        layout="prev, pager, next"
+        :total="tatol">
+      </el-pagination>
+    </div>
+  </div>
+  
+</template>
+
+<script>
+export default {
+  data () {
+    return {
+      incidentList: [], // 事件列表
+      incidentType: '', // 事件类型
+      timeVal: '', // 时间
+      tableData: [], // 表数据
+      tatol: 100, // 数据总量
+    }
+  },
+
+  components: {},
+
+  computed: {},
+
+  mounted() {},
+
+  methods: {
+    testClick() {
+
+    }
+  }
+}
+</script>
+
+<style lang='less' scoped>
+.specification-update-record{
+  padding-left: 16px;
+  padding-right: 16px;
+  padding-top: 12px;
+  padding-bottom: 20px;
+  background: #fff;
+  height: 100%;
+  width: 100%;
+  .screening-condition{
+    margin-bottom: 13px;
+    display: flex;
+  }
+  .page{
+    display: flex;
+    justify-content: flex-end;
+  }
+}
+</style>

+ 106 - 3
src/views/analysis/index.vue

@@ -1,10 +1,113 @@
 <template>
-    <div>fenxi</div>
+  <div class="analysis-table">
+		<div class="module-navs-container">
+			<div>
+				<div v-for="(item) in navList" :key="'key_' + item.id" class="item-nav" :class="{'nav-active': item.isActive}" @click="changeModule(item.id)">
+					<NavTable v-if="item.imgType === 'table'"/>
+					<NavApply v-if="item.imgType === 'apply'"/>
+					<NavGantt v-if="item.imgType === 'gantt'"/>
+					<div>{{item.name}}</div>
+				</div>
+			</div>
+		</div>
+		<div class="module">
+			<CoreDeviceReport v-if="curModule.id === 1"/>
+			<SpecificationUpdateRecord v-if="curModule.id === 2" />
+			<GanttChart v-if="curModule.id === 3" />
+		</div>
+	</div>
 </template>
 
 <script>
-export default {}
+import NavTable from '../../assets/svg/table.svg';
+import NavApply from '../../assets/svg/apply.svg';
+import NavGantt from '../../assets/svg/gantt_chart.svg';
+import CoreDeviceReport from './CoreDeviceReport';
+import SpecificationUpdateRecord from './SpecificationUpdateRecord';
+import GanttChart from './GanttChart';
+import _ from 'lodash';
+export default {
+	data() {
+		return {
+			navList: [
+				{id: 1, name: '核心设备报表', imgType: 'table', isActive: true},
+				{id: 2, name: '说明书更新记录', imgType: 'apply', isActive: false},
+				{id: 3, name: '事项甘特图', imgType: 'gantt', isActive: false},
+			],
+			curModule: {}, // 当前选中的模块
+		}
+	},
+	components: {
+		NavTable,
+		NavApply,
+		NavGantt,
+		CoreDeviceReport,
+		SpecificationUpdateRecord,
+		GanttChart
+	},
+	mounted() {
+		this.findCurModule();
+	},
+	methods: {
+		/**
+		 * 查询当前选中模块
+		 */
+		findCurModule() {
+			this.curModule = _.find(this.navList, (item) => {return item.isActive});
+		},
+		/**
+		 * 切换模块
+		 */
+		changeModule(id) {
+			_.map(this.navList, (item) => {return item.isActive = item.id === id});
+			this.findCurModule();
+		}
+	}
+};
 </script>
 
-<style>
+<style lang="less" scoped>
+.analysis-table{
+	height: calc(100% - 48px);
+	background: #F2F5F7;
+	.module-navs-container{
+		margin: 12px 0;
+		display: flex;
+		justify-content: center;
+		>div{
+			display: flex;
+		}
+	}
+	.item-nav{
+		padding-top: 12px;
+		padding-bottom: 12px;
+		padding-left: 20px;
+		padding-right: 16px;
+		display: flex;
+		align-items: center;
+		background: #fff;
+		cursor: pointer;
+		>svg{
+			margin-right: 6px;
+		}
+		>div:last-child{
+			font-size: 16px;
+			color: #1F2429;
+			line-height: 22px;
+		}
+	}
+	.nav-active{
+		background: linear-gradient(360deg,rgba(2,91,170,.1) 0%,rgba(2,91,170,0) 100%);
+		>svg{
+			stroke: #025BAA;
+		}
+		>div:last-child{
+			color: #025BAA;
+		}
+	}
+	.module{
+		width: 100%;
+		height: calc(100% - 70px);
+	}
+}
 </style>

+ 2 - 2
src/views/equipment/eqDialog.vue

@@ -14,9 +14,9 @@
                 />
             </div>
             <!-- 没有tab的页面 -->
-            <div v-if='Object.keys(dialogInfo).length>0 && dialogInfo.children.length==0' style='margin:16px 0 0 24px'>
+            <div v-if='Object.keys(dialogInfo).length>0 && dialogInfo.children.length==0' style='margin:16px 0 0 24px;height:90%'>
                 <!-- 原理图 -->
-                <div v-if='dialogInfo.id.slice(2,4)=="YL"' style='width:90%;overflow:hidden'>
+                <div v-if='dialogInfo.id.slice(2,4)=="YL"' style='width:90%;overflow:hidden;height:100%'>
                     <rotation :rotationImg='rotationImg'></rotation>
                 </div>
                 <!-- 土建系统主要材料清单 -->

+ 16 - 10
src/views/equipment/index.vue

@@ -20,7 +20,7 @@
                 <div class='eq-right-bottom'>
                     <div class='title-box'>
                         <div class='eq-title'>
-                            <span>{{floorInfo.code}}</span>
+                            <span class="span1">{{floorInfo.code}}</span>
                         </div>
                     </div>
                     <div class='eq-content'>
@@ -73,7 +73,7 @@ export default {
             dialogInfo: {},
             brand: [], //品牌
             manufacturer: [],
-            show: true,
+            show: false,
             fqPic: [],
             loadName: '',
             type: '',
@@ -86,8 +86,8 @@ export default {
             let data = {
                 plazaId: '1000423'
             }
-            let postParams = []
-            queryBrand({ data, postParams }).then(res => {
+            // let postParams = []
+            queryBrand({ data }).then(res => {
                 console.log(res)
             })
         },
@@ -225,7 +225,7 @@ export default {
                 margin-right: 10px;
             }
             .hanzi {
-                padding: 10px 6px;
+                padding: 10px 0 10px 6px;
                 width: 200px;
                 display: inline-block;
                 &:hover {
@@ -266,6 +266,10 @@ export default {
                             margin-right: 10px;
                             margin-top: 8px;
                         }
+                        .span1{
+                                position: absolute;
+                                top: 3px;
+                        }
                     }
                 }
                 .eq-content {
@@ -286,7 +290,7 @@ export default {
                             border-radius: 2px;
                             position: fixed;
                             right: 32px;
-                            top: 471px;
+                            top: 510px;
                             z-index: 2;
                             display: flex;
                             justify-content: center;
@@ -299,7 +303,7 @@ export default {
                         }
                         .add-img {
                             width: 560px;
-                            height: 325px;
+                            height: 360px;
                             background: #ffffff;
                             -webkit-box-shadow: 0px 2px 8px 0px rgba(31, 36, 41, 0.06);
                             box-shadow: 0px 2px 8px 0px rgba(31, 36, 41, 0.06);
@@ -307,11 +311,13 @@ export default {
                             border: 1px solid #e4e5e7;
                             position: absolute;
                             right: 77px;
-                            bottom: 421px;
+                            bottom: 381px;
                             z-index: 2;
                             img {
-                                width: 100%;
-                                height: 100%;
+                                max-width: 100%;
+                                max-height: 100%;
+                                display: block;
+                                margin: 0 auto;
                             }
                         }
                     }

+ 5 - 1
src/views/equipment/table/eqDetaileDialog.vue

@@ -48,7 +48,7 @@
             <input-dialog :type='1' @confirm='confirm'></input-dialog>
         </div>
         <el-table :data='tableData' :border='true' style='width: 100%;amrgin-bottom:30px'>
-            <el-table-column type='index' label='序号' width='60'></el-table-column>
+            <el-table-column type='index' label='序号' width='60' :index="indexMethod"></el-table-column>
             <el-table-column prop='sbjc' label='设备名称' show-overflow-tooltip resizable min-width="150">
                 <template slot-scope='{row}'>{{row.sbjc || '--'}}</template>
             </el-table-column>
@@ -141,6 +141,10 @@ export default {
         this.tabFind()
     },
     methods: {
+        //序号的方法
+        indexMethod(index) {
+            return (this.page - 1) * this.size + index + 1
+        },
         //多余输入框监听
         confirm(fws, manufacturer) {
             //console.log(fws, manufacturer, '------')

+ 16 - 4
src/views/equipment/table/eqListTable.vue

@@ -20,7 +20,16 @@
                 v-model='keyword'
                 style='width:192px;margin-right:12px'
             ></el-input>
-            <Select @change='getList' @cancel='getList' v-model='floor' style='margin-right:12px;' width='120' tipPlace='top' caption='楼层 :' :selectdata='floorSelect'></Select>
+            <Select
+                @change='getList'
+                @cancel='getList'
+                v-model='floor'
+                style='margin-right:12px;'
+                width='120'
+                tipPlace='top'
+                caption='楼层 :'
+                :selectdata='floorSelect'
+            ></Select>
             <el-input
                 placeholder='搜索生产厂商'
                 clearable
@@ -32,7 +41,7 @@
             ></el-input>
         </div>
         <el-table :data='tableData' style='width: 100%' :border='true' @row-click='rowHandle'>
-            <el-table-column type='index' label='序号' width='60'></el-table-column>
+            <el-table-column type='index' label='序号' width='60' :index='indexMethod'></el-table-column>
             <el-table-column prop='type_name' label='设备名称' show-overflow-tooltip resizable width='250'>
                 <template slot-scope='{row}'>{{row.type_name || '--'}}</template>
             </el-table-column>
@@ -51,7 +60,7 @@
             <el-table-column prop='wzjc' label='安装位置' show-overflow-tooltip resizable>
                 <template slot-scope='{row}'>{{row.wzjc || '--'}}</template>
             </el-table-column>
-            <el-table-column prop='manufacturer' label='生产厂商' show-overflow-tooltip resizable>
+            <el-table-column prop='manufacturer' label='生产厂商' show-overflow-tooltip resizable min-width="300">
                 <template slot-scope='{row}'>{{row.manufacturer || '--'}}</template>
             </el-table-column>
         </el-table>
@@ -99,6 +108,9 @@ export default {
     },
     props: ['param', 'major'],
     methods: {
+        indexMethod(index) {
+            return (this.currentPage - 1) * this.size + index + 1
+        },
         rowHandle(row) {
             //console.log(row)
             this.innerVisible = true
@@ -119,7 +131,7 @@ export default {
                 major: this.major
             }
             //下拉
-            if (this.floor) {             
+            if (this.floor) {
                 postParams.gname = this.floor
             }
             //输入框搜索

+ 8 - 3
src/views/equipment/table/lookPageTable.vue

@@ -12,10 +12,10 @@
                 style='width:192px;margin-right:12px'
             ></el-input>
             <Select @change='getList' v-model='floor' style='margin-right:12px;' width='120' tipPlace='top' caption='楼层 :' :selectdata='floorSelect'></Select>
-            <Select @change='getList' v-model='floor' width='120' tipPlace='top' caption='文件类型 :' :selectdata='floorSelect'></Select>
+            <Select @change='getList' v-model='fileType' width='140' tipPlace='top' caption='文件类型 :' :selectdata='floorSelect'></Select>
         </div>
         <el-table :data='tableData' style='width: 100%'>
-            <el-table-column type='index' label='序号' width='80'></el-table-column>
+            <el-table-column type='index' label='序号' width='60' :index="indexMethod"></el-table-column>
             <el-table-column prop='lb' label='分类' width='160'>
                 <template slot-scope='{row}'>{{row.assetnum || '--'}}</template>
             </el-table-column>
@@ -60,7 +60,8 @@ export default {
             currentPage: 1,
             size: 11,
             keyword: '',
-            floor: ''
+            floor: '',
+            fileType:''
         }
     },
     props: ['major'],
@@ -68,6 +69,10 @@ export default {
         ...mapGetters(['floorSelect'])
     },
     methods: {
+        //序号的方法
+        indexMethod(index) {
+            return (this.currentPage - 1) * this.size + index +1
+        },
         pageChanged(page, size) {
             this.currentPage = page
             this.getList()

+ 11 - 7
src/views/equipment/table/otherTable.vue

@@ -37,15 +37,15 @@
             ></Select>
         </div>
         <el-table :data='tableData' :border='true' style='width: 100%'>
-            <el-table-column type='index' label='序号' width='60'></el-table-column>
-            <el-table-column prop='lb' label='其他事项详情' show-overflow-tooltip resizable>
-                <el-table-column prop='zlwfwe' label='记录事项' show-overflow-tooltip resizable>
+            <el-table-column type='index' label='序号' width='60' :index='indexMethod'></el-table-column>
+            <el-table-column prop='lb' label='其他事项详情' align='center'>
+                <el-table-column prop='zlwfwe' label='记录事项' show-overflow-tooltip resizable min-width='320'>
                     <template slot-scope='{row}'>{{row.jlsx || '--'}}</template>
                 </el-table-column>
-                <el-table-column prop label='位置' show-overflow-tooltip resizable>
+                <el-table-column prop label='位置' show-overflow-tooltip resizable width='425'>
                     <template slot-scope='{row}'>{{row.description || '--'}}</template>
                 </el-table-column>
-                <el-table-column prop='content' label='内容' show-overflow-tooltip resizable>
+                <el-table-column prop='content' label='内容' show-overflow-tooltip resizable width='260'>
                     <template slot-scope='{row}'>{{row.content || '--'}}</template>
                 </el-table-column>
                 <el-table-column prop='sl' label='数量' width='80'>
@@ -61,7 +61,7 @@
             <el-table-column prop='handleresults' label='处置结果' show-overflow-tooltip resizable width='100'>
                 <template slot-scope='{row}'>{{row.handleresults || '--'}}</template>
             </el-table-column>
-            <el-table-column prop='zlwfwz ' label='资料存放位置' show-overflow-tooltip resizable>
+            <el-table-column prop='zlwfwz ' label='资料存放位置' show-overflow-tooltip resizable width='100'>
                 <template slot-scope='{row}'>{{row.zlwfwz || '--'}}</template>
             </el-table-column>
             <el-table-column prop='recordtime' label='记录日期' width='140'>
@@ -107,6 +107,10 @@ export default {
         ...mapGetters(['floorSelect'])
     },
     methods: {
+        //序号的方法
+        indexMethod(index) {
+            return (this.currentPage - 1) * this.size + index + 1
+        },
         pageChanged(page) {
             this.currentPage = page
             this.getList()
@@ -202,7 +206,7 @@ export default {
                 this.getList()
             }
         },
-        handleresults(){
+        handleresults() {
             this.getList()
         }
     },

+ 5 - 3
src/views/equipment/table/standTable.vue

@@ -41,7 +41,7 @@
             ></el-input>
         </div>
         <el-table :data='tableData' :border='true' style='width: 100%' @row-click='rowHandle'>
-            <el-table-column type='index' label='序号' width='60'></el-table-column>
+            <el-table-column type='index' label='序号' width='60' :index='indexMethod'></el-table-column>
             <el-table-column prop label='设备名称' show-overflow-tooltip resizable width='300'>
                 <template slot-scope='{row}'>{{row.type_name || '--'}}</template>
             </el-table-column>
@@ -58,7 +58,7 @@
             <el-table-column prop='floor' label='楼层' width='100'>
                 <template slot-scope='{row}'>{{row.floorcode || '--'}}</template>
             </el-table-column>
-            <el-table-column prop='manufacturer' label='生产厂商' show-overflow-tooltip resizable>
+            <el-table-column prop='manufacturer' label='生产厂商' show-overflow-tooltip resizable min-width="300">
                 <template slot-scope='{row}'>{{row.manufacturer || '--'}}</template>
             </el-table-column>
         </el-table>
@@ -89,7 +89,6 @@ export default {
     data() {
         return {
             innerVisible: false,
-            pageSize: 10,
             tableData: [],
             total: 0,
             currentPage: 1,
@@ -107,6 +106,9 @@ export default {
         ...mapGetters(['floorSelect'])
     },
     methods: {
+        indexMethod(index) {
+            return (this.currentPage-1) * this.size + index +1
+        },
         rowHandle(row) {
             console.log(row)
             this.innerVisible = true

+ 5 - 1
src/views/equipment/table/tjTable.vue

@@ -14,7 +14,7 @@
             <el-input clearable placeholder='搜索品牌' size='small' @blur='getList' prefix-icon='el-icon-search' v-model='brand' style='width:192px'></el-input>
         </div>
         <el-table :data='tableData' style='width: 100%' :border='true'>
-            <el-table-column type='index' label='序号' width='60'></el-table-column>
+            <el-table-column type='index' label='序号' width='60' :index="indexMethod"></el-table-column>
             <el-table-column prop='category' label='类别'  show-overflow-tooltip resizable>
                 <template slot-scope='{row}'>{{row.category || '--'}}</template>
             </el-table-column>
@@ -61,6 +61,10 @@ export default {
         ...mapGetters(['floorSelect'])
     },
     methods: {
+        //序号的方法
+        indexMethod(index) {
+            return (this.currentPage - 1) * this.size + index +1
+        },
         pageChanged(page, size) {
             this.currentPage = page
             this.getList()

+ 12 - 8
src/views/equipment/table/wbTable.vue

@@ -63,34 +63,34 @@
             <input-dialog :type='2' @confirm='confirm'></input-dialog>
         </div>
         <el-table :data='tableData' :border='true' style='width: 100%'>
-            <el-table-column type='index' label='序号' width='60'></el-table-column>
-            <el-table-column prop='sbmc' label='设备名称' show-overflow-tooltip resizable min-width='150'>
+            <el-table-column type='index' label='序号' width='60' :index='indexMethod'></el-table-column>
+            <el-table-column prop='sbmc' label='设备名称' show-overflow-tooltip resizable width='460'>
                 <template slot-scope='{row}'>{{row.sbmc || '--'}}</template>
             </el-table-column>
             <el-table-column prop='assetnum' label='设备编码' show-overflow-tooltip resizable width='80'>
                 <template slot-scope='{row}'>{{row.assetnum || '--'}}</template>
             </el-table-column>
-            <el-table-column prop='matters' label='重要事项记录' width='130' show-overflow-tooltip resizable>
+            <el-table-column prop='matters' label='重要事项记录' width='180' show-overflow-tooltip resizable>
                 <template slot-scope='{row}'>{{row.matters || '--'}}</template>
             </el-table-column>
-            <el-table-column prop='description' label='描述' show-overflow-tooltip resizable min-width='150'>
+            <el-table-column prop='description' label='描述' show-overflow-tooltip resizable min-width='340'>
                 <template slot-scope='{row}'>{{row.description || '--'}}</template>
             </el-table-column>
             <el-table-column label='更换配件信息' align='center'>
                 <el-table-column prop='ischangepj' label='是/否更换' width='80'>
                     <template slot-scope='{row}'>{{row.ismodel==1?'是':(row.ismodel==0?"否" :'--')}}</template>
                 </el-table-column>
-                <el-table-column prop='model' label='配件名称型号' width='100' show-overflow-tooltip resizable>
+                <el-table-column prop='model' label='配件名称型号' width='140' show-overflow-tooltip resizable>
                     <template slot-scope='{row}'>{{row.model || '--'}}</template>
                 </el-table-column>
                 <el-table-column prop='sl' label='数量' width='80'>
                     <template slot-scope='{row}'>{{row.sl>=0?row.sl:'--'}}</template>
                 </el-table-column>
                 <el-table-column prop='cost' label='费用(万元)' width='80'>
-                    <template slot-scope='{row}'>{{row.cost || '--'}}</template>
+                    <template slot-scope='{row}'>{{number_format(row.cost,2) || '--'}}</template>
                 </el-table-column>
-                <el-table-column prop='source' label='费用出处' show-overflow-tooltip resizable width='80'>
-                    <template slot-scope='{row}'>{{number_format(row.source,2) || '--'}}</template>
+                <el-table-column prop='source' label='费用出处' show-overflow-tooltip resizable width='100'>
+                    <template slot-scope='{row}'>{{row.source|| '--'}}</template>
                 </el-table-column>
             </el-table-column>
             <el-table-column prop='brand' label='现场照片' width='70'>
@@ -164,6 +164,10 @@ export default {
         ...mapGetters(['floorSelect'])
     },
     methods: {
+        //序号的方法
+        indexMethod(index) {
+            return (this.currentPage - 1) * this.size + index + 1
+        },
         //多余输入框监听
         confirm(gzglid) {
             this.gzglid = gzglid

+ 10 - 6
src/views/equipment/table/wxTable.vue

@@ -63,24 +63,24 @@
             <input-dialog :type='3' @confirm='confirm'></input-dialog>
         </div>
         <el-table :data='tableData' :border='true' style='width: 100%'>
-            <el-table-column type='index' label='序号' width='60'></el-table-column>
-            <el-table-column prop='sbmc' label='设备名称' show-overflow-tooltip resizable min-width='150'>
+            <el-table-column type='index' label='序号' width='60' :index='indexMethod'></el-table-column>
+            <el-table-column prop='sbmc' label='设备名称' show-overflow-tooltip resizable min-width='460'>
                 <template slot-scope='{row}'>{{row.sbmc || '--'}}</template>
             </el-table-column>
             <el-table-column prop='assetnum' label='设备编码' show-overflow-tooltip resizable width='80'>
                 <template slot-scope='{row}'>{{row.assetnum || '--'}}</template>
             </el-table-column>
-            <el-table-column prop='matters' label='重要事项记录' width='130' show-overflow-tooltip resizable>
+            <el-table-column prop='matters' label='重要事项记录' width='180' show-overflow-tooltip resizable>
                 <template slot-scope='{row}'>{{row.matters || '--'}}</template>
             </el-table-column>
-            <el-table-column prop='description' label='描述' show-overflow-tooltip resizable min-width='150'>
+            <el-table-column prop='description' label='描述' show-overflow-tooltip resizable min-width='340'>
                 <template slot-scope='{row}'>{{row.description || '--'}}</template>
             </el-table-column>
             <el-table-column label='更换配件信息' align='center'>
                 <el-table-column prop='ischangepj' label='是/否更换' width='80'>
                     <template slot-scope='{row}'>{{row.ismodel==1?'是':(row.ismodel==0?"否" :'--')}}</template>
                 </el-table-column>
-                <el-table-column prop='model' label='配件名称型号' width='100' show-overflow-tooltip resizable>
+                <el-table-column prop='model' label='配件名称型号' width='140' show-overflow-tooltip resizable>
                     <template slot-scope='{row}'>{{row.model || '--'}}</template>
                 </el-table-column>
                 <el-table-column prop='sl' label='数量' width='80'>
@@ -89,7 +89,7 @@
                 <el-table-column prop='cost' label='费用(万元)' width='80'>
                     <template slot-scope='{row}'>{{number_format(row.cost,2) || '--'}}</template>
                 </el-table-column>
-                <el-table-column prop='source' label='费用出处' show-overflow-tooltip resizable>
+                <el-table-column prop='source' label='费用出处' show-overflow-tooltip resizable width="100">
                     <template slot-scope='{row}'>{{row.source || '--'}}</template>
                 </el-table-column>
             </el-table-column>
@@ -164,6 +164,10 @@ export default {
     },
     props: ['smsxt', 'major', 'diff', 'tabLabel'],
     methods: {
+        //序号的方法
+        indexMethod(index) {
+            return (this.currentPage - 1) * this.size + index + 1
+        },
         //多余输入框监听
         confirm(wonum) {
             this.wonum = wonum

+ 13 - 17
src/views/equipment/table/zwTable.vue

@@ -22,15 +22,7 @@
                 style='margin:0 12px'
                 @change='getList'
             ></Select>
-            <el-input
-                placeholder='搜索实施方案说明'
-                prefix-icon='el-icon-search'
-                size='small'
-                style='width:192px'
-                v-model='ssfasm'
-                clearable
-                @blur='getList'
-            ></el-input>
+            <el-input placeholder='搜索实施方案说明' prefix-icon='el-icon-search' size='small' style='width:192px' v-model='ssfasm' clearable @blur='getList'></el-input>
             <!-- 当前阶段 -->
             <Select
                 width='180'
@@ -61,23 +53,23 @@
             <input-dialog v-if='statusOption.length>0' :statusOption='statusOption' :type='4' @confirm='confirm'></input-dialog>
         </div>
         <el-table :data='tableData' :border='true' style='width: 100%'>
-            <el-table-column type='index' label='序号' width='60'></el-table-column>
+            <el-table-column type='index' label='序号' width='60' :index='indexMethod'></el-table-column>
             <el-table-column prop='nd' label='年度' show-overflow-tooltip resizable width='80'>
                 <template slot-scope='{row}'>{{row.nd || '--'}}</template>
             </el-table-column>
             <el-table-column prop='qs' label='期数' show-overflow-tooltip resizable width='80'>
                 <template slot-scope='{row}'>{{row.qs || '--'}}</template>
             </el-table-column>
-            <el-table-column prop='lb' label='类别' show-overflow-tooltip resizable min-width="150">
+            <el-table-column prop='lb' label='类别' show-overflow-tooltip resizable min-width='210'>
                 <template slot-scope='{row}'>{{row.lb || '--'}}</template>
             </el-table-column>
-            <el-table-column prop='xm' label='项目' show-overflow-tooltip resizable min-width="150">
+            <el-table-column prop='xm' label='项目' show-overflow-tooltip resizable min-width='150'>
                 <template slot-scope='{row}'>{{row.xm || '--'}}</template>
             </el-table-column>
             <el-table-column prop='sl' label='数量' show-overflow-tooltip resizable width='80'>
                 <template slot-scope='{row}'>{{row.sl>=0?row.sl:'--'}}</template>
             </el-table-column>
-            <el-table-column prop='ssfasm' label='实施方案说明' show-overflow-tooltip resizable min-width="150">
+            <el-table-column prop='ssfasm' label='实施方案说明' show-overflow-tooltip resizable min-width='320'>
                 <template slot-scope='{row}'>{{row.ssfasm || '--'}}</template>
             </el-table-column>
             <el-table-column prop='sxjd' label='当前阶段' show-overflow-tooltip resizable width='80'>
@@ -95,7 +87,7 @@
             <el-table-column prop='zfje' label='结算金额' show-overflow-tooltip resizable width='80'>
                 <template slot-scope='{row}'>{{number_format(row.zfje,2)|| '--'}}</template>
             </el-table-column>
-            <el-table-column prop='xlcfwz' label='资料存放位置' show-overflow-tooltip resizable width="100">
+            <el-table-column prop='xlcfwz' label='资料存放位置' show-overflow-tooltip resizable width='100'>
                 <template slot-scope='{row}'>{{row.xlcfwz || '--'}}</template>
             </el-table-column>
         </el-table>
@@ -148,6 +140,10 @@ export default {
     },
     props: ['smsxt', 'major', 'diff', 'tabLabel'],
     methods: {
+        //序号的方法
+        indexMethod(index) {
+            return (this.currentPage - 1) * this.size + index + 1
+        },
         //多余输入框监听
         confirm(status, yssjwcsj) {
             this.yssjwcsj = yssjwcsj
@@ -290,13 +286,13 @@ export default {
                 this.getList()
             }
         },
-        sxjd(){
+        sxjd() {
             this.getList()
         },
-        xm(){
+        xm() {
             this.getList()
         },
-        lb(){
+        lb() {
             this.getList()
         }
     },

+ 5 - 1
src/views/floorFunc/index.vue

@@ -1,7 +1,7 @@
 <template>
     <div class='floorFunc-box'>
         <div class='eq-title'>
-            <span>{{floorInfo.code}}</span>
+            <span class='span1'>{{floorInfo.code}}</span>
         </div>
         <!-- 图例 -->
         <div class='legend-boxs'>
@@ -76,6 +76,10 @@ export default {
             margin-right: 10px;
             margin-top: 8px;
         }
+        .span1 {
+            position: absolute;
+            top: 3px;
+        }
     }
     .legend-boxs {
         position: fixed;

+ 74 - 27
src/views/legendLibrary/addForm.vue

@@ -5,31 +5,49 @@
                 <el-row :gutter='20'>
                     <el-col :span='12'>
                         <div>图例编码</div>
-                        <el-input v-model='ruleForm.Id' style='width:200px;height:32px;' disabled></el-input>
+                        <!-- <el-input v-model='ruleForm.Id' style='width:200px;height:32px;' disabled></el-input> -->
+                        <Input v-model='ruleForm.Id' disabled placeholder style='width:200px' />
                     </el-col>
                     <el-col :span='12'>
                         <div class='start'>图例名称</div>
-                        <el-input v-model='ruleForm.Name' style='width:200px;height:32px;'></el-input>
+                        <!-- <el-input v-model='ruleForm.Name' style='width:200px;height:32px;'></el-input> -->
+                        <Input v-model='ruleForm.Name' placeholder maxlength='20' style='width:200px' />
                     </el-col>
                     <el-col :span='12' style='margin-top:20px'>
                         <div class>单位</div>
-                        <el-input v-model='ruleForm.Unit' style='width:200px;height:32px;'></el-input>
+                        <!-- <el-input v-model='ruleForm.Unit' style='width:200px;height:32px;'></el-input> -->
+                        <Input v-model='ruleForm.Unit' placeholder style='width:200px' />
                     </el-col>
 
                     <el-col :span='12' style='margin-top:20px'>
                         <div class='start'>图例类型</div>
-                        <el-select v-model='ruleForm.Type' placeholder='请选择' style='width:200px;height:32px' @change='initGraph'>
+                        <!-- <el-select v-model='ruleForm.Type' placeholder='请选择' style='width:200px;height:32px' @change='initGraph'>
                             <el-option v-for='item in options' :key='item.value' :label='item.label' :value='item.value'></el-option>
-                        </el-select>
+                        </el-select>-->
+                        <span class='add-form-type'>
+                            <Select
+                                width='200'
+                                height='40'
+                                v-model='ruleForm.Type'
+                                :isReadOnly='true'
+                                @change='initGraph'
+                                :hideClear='true'
+                                :selectdata='options'
+                                placeholder='请选择'
+                            />
+                        </span>
                     </el-col>
                 </el-row>
             </div>
-            <div class='input-right' ref='graph' v-show='ruleForm.Type=="Zone" || ruleForm.Type=="Image" || ruleForm.Type =="Line"'>
-                <div v-show=' ruleForm.Type=="Image" && ruleForm.Url' class='input-right'>
-                    <img :key='key' :src='`/serve/topology-wanda/Picture/query/${ruleForm.Url}`' alt />
-                    <!-- {{ruleForm.Url}} -->
+            <div v-show='ruleForm.Type=="Zone" || ruleForm.Type=="Image" || ruleForm.Type =="Line"'>
+                <div style='color:#646C73'>展示预览</div>
+                <div class='input-right' ref='graph'>
+                    <div v-show=' ruleForm.Type=="Image" && ruleForm.Url' class='input-right'>
+                        <img :key='key' :src='`/serve/topology-wanda/Picture/query/${ruleForm.Url}`' alt />
+                        <!-- {{ruleForm.Url}} -->
+                    </div>
+                    <canvas id='canvas' :width='canvasWidth' :height='canvasHeight' v-show='!(ruleForm.Type=="Image" && ruleForm.Url)'></canvas>
                 </div>
-                <canvas id='canvas' :width='canvasWidth' :height='canvasHeight' v-show='!(ruleForm.Type=="Image" && ruleForm.Url)'></canvas>
             </div>
         </div>
         <div v-if='ruleForm.Type=="Zone" || ruleForm.Type=="Line"' class='form3'>
@@ -86,7 +104,7 @@
         </div>
         <div v-if='ruleForm.Type!="None"' class='form4'>
             <div class='form4-top'>
-                <span class='form4-span1'>专业/设备、位置类型</span>
+                <span class='form4-span1'>专业/设备、位置类型</span>
                 <span class='form4-span3'>铺位可视化typeid</span>
             </div>
             <div class='form3-bottom'>
@@ -135,20 +153,20 @@ export default {
         return {
             options: [
                 {
-                    value: 'None',
-                    label: '非图例'
+                    id: 'None',
+                    name: '非图例'
                 },
                 {
-                    value: 'Zone',
-                    label: '区域'
+                    id: 'Zone',
+                    name: '区域'
                 },
                 {
-                    value: 'Image',
-                    label: '图标'
+                    id: 'Image',
+                    name: '图标'
                 },
                 {
-                    value: 'Line',
-                    label: '线条'
+                    id: 'Line',
+                    name: '线条'
                 }
             ],
 
@@ -156,15 +174,18 @@ export default {
             borderLineOption: [
                 {
                     id: 'solid',
-                    src: require('@/assets/imgs/1pxline.jpg')
+                    src: require('@/assets/imgs/1pxlines.png')
+                    // src: require('@/assets/imgs/1pxline.jpg')
                 },
                 {
                     id: 'dashed',
-                    src: require('@/assets/imgs/dashedLine.jpg')
+                    src: require('@/assets/imgs/dashedLines.png')
+                    // src: require('@/assets/imgs/dashedLine.jpg')
                 },
                 {
                     id: 'dotted',
-                    src: require('@/assets/imgs/dotLine.jpg')
+                    src: require('@/assets/imgs/dotLines.png')
+                    // src: require('@/assets/imgs/dotLine.jpg')
                 }
             ],
             linepxOption: [
@@ -399,7 +420,7 @@ export default {
             if (this.$refs.select1 && this.$refs.select1.$el) {
                 this.$refs.select1.$el.children[0].children[0].setAttribute(
                     'style',
-                    'background:url(' + this.borderLineOptionObject.src + ')  center center no-repeat;color:transparent;'
+                    'background:#ffffff url(' + this.borderLineOptionObject.src + ')  10px center no-repeat;color:transparent;'
                 )
             }
             if (this.view) {
@@ -549,7 +570,19 @@ export default {
     .ant-input-number {
         border-radius: 4px 0 0 4px;
     }
-
+    // .add-form-type {
+    //     /deep/ .p-select .p-select-header {
+    //         height: 40px;
+    //         line-height: 40px;
+    //         border: 1px solid #dcdfe6;
+    //     }
+    //     /deep/ .p-select .p-select-header .p-select-selected-box .p-select-fakePlaceholder {
+    //         line-height: 40px;
+    //     }
+    //     /deep/ .p-select .p-select-header .p-select-triangle{
+    //         top: 12px;
+    //     }
+    // }
     .form2 {
         display: flex;
         .input-left {
@@ -654,6 +687,7 @@ export default {
         border-bottom: 1px solid rgba(195, 198, 203, 1);
         position: absolute;
         text-align: center;
+        line-height: 26px;
     }
 }
 </style>
@@ -671,21 +705,34 @@ export default {
     word-break: break-all !important;
     word-wrap: break-word !important;
     height: auto !important;
-    line-height: 25px;
+    line-height: 21px;
 }
 .p-select-area .p-transfer-right {
     width: 245px !important;
 }
-
+.p-select-area .p-transfer-right .p-transfer-selected .p-transfer-selected-item {
+    height: 25px;
+}
 .p-select-area .p-transfer-right .p-transfer-selected .p-transfer-selected-item > span {
     word-break: break-all !important;
     white-space: normal !important;
     word-break: break-all !important;
     word-wrap: break-word !important;
     height: auto !important;
-    line-height: 25px;
+    line-height: 16px;
     display: block;
     width: 225px;
     padding-right: 3px;
 }
+.p-popover-tip-content .p-popover-tip-content-item {
+    margin-left: 4px;
+    margin-bottom: 8px;
+    padding-left: 4px;
+    padding-right: 4px;
+    background-color: #f5f6f7 !important;
+    border-radius: 2px;
+    max-width: 100%;
+    overflow: hidden;
+    white-space: nowrap;
+}
 </style>

+ 27 - 8
src/views/legendLibrary/addLegend.vue

@@ -1,7 +1,6 @@
 <template>
     <div class='add-legend'>
         <el-dialog :title='title' :visible.sync='dialogVisible'>
-            <!-- <add-list v-show='title=="" && GraphCategoryId' ref='searchList' :GraphCategoryId='GraphCategoryId' @mesg='mesg'></add-list> -->
             <add-form
                 ref='add'
                 :InfosList='InfosList'
@@ -16,6 +15,23 @@
                 <el-button type='primary' @click='save' size='small'>确 定</el-button>
             </span>
         </el-dialog>
+        <!-- <Modal :show='dialogVisible' :title='title' mode='middle' @close='dialogVisible=false'>
+            <template #content>
+                <add-form
+                    ref='add'
+                    :InfosList='InfosList'
+                    :InfoTypeIdList='InfoTypeIdList'
+                    :ruleForm='info'
+                    @addSuccess='addSuccess'
+                    @updateSuccess='updateSuccess'
+                    :title='title'
+                />
+            </template>
+            <template #handle>
+                <Button @click='dialogVisible = false,cancal()' type='default'>取 消</Button>
+                <Button @click='save' type='primary'>确 定</Button>
+            </template>
+        </Modal>-->
         <TransferSelectModal
             defaultExpandAll
             default-expand-all
@@ -196,18 +212,21 @@ export default {
 
 <style lang='less' scoped>
 .add-legend {
-}
-</style>
-<style lang='less'>
-.add-legend {
-    .el-dialog {
+    /deep/ .el-dialog {
         width: 840px;
         height: 509px;
+        border-radius: 8px;
+        .el-dialog__header {
+            border-bottom: 1px solid #e4e5e7;
+        }
+        .el-dialog__title {
+            font-size: 16px;
+        }
     }
-    .el-dialog__footer {
+    /deep/ .el-dialog__footer {
         position: absolute;
         bottom: 20px;
         right: 20px;
     }
 }
-</style>
+</style>

+ 92 - 46
src/views/legendLibrary/index.vue

@@ -11,7 +11,7 @@
             </Dropdown>
         </div>-->
         <div class='legend-library-top'>
-            图例库管理
+            <span style='display:inline-block;font-size:16px'>图例库管理</span>
             <span class='library-btn'>
                 <el-button size='small' @click='dumpRules'>图例绘制规则</el-button>
                 <el-button size='small' type='primary' @click='add'>添加图例</el-button>
@@ -31,17 +31,17 @@
                 ></Select>
 
                 <TreeSelect
+                    title='已选项'
                     caption='说明书位置:'
                     tipPlace='top'
-                    width='180'
-                    style='margin:0 12px'
+                    width='200'
+                    style='margin:0 0 0 12px'
                     :returnParentNode='false'
                     :isShowAllChoice='true'
                     :choseArea='true'
                     :lastStage='true'
                     :data='positionSelect'
                     @change='treeConfirmPosition'
-                    :hideClear='true'
                 />
                 <span class='device-position'>
                     <TreeSelect
@@ -54,7 +54,6 @@
                         :choseArea='true'
                         :data='deviceList'
                         :lastStage='true'
-                        :hideClear='true'
                         @change='treeConfirmDevice'
                     />
                 </span>
@@ -83,10 +82,9 @@
                     @change='treeConfirm'
                     :lastStage='true'
                     @focusChange='focusChange'
-                    :hideClear='true'
                 />
                 <Select
-                    width='180'
+                    width='150'
                     tipPlace='top'
                     caption='状态:'
                     v-model='state'
@@ -96,7 +94,15 @@
                     style='margin:0 12px'
                     :hideClear='true'
                 ></Select>
-                <el-input size='small' @change='getTableList' prefix-icon='el-icon-search' v-model='keyword' style='width:192px;margin-right:12px;'></el-input>
+                <el-input
+                    size='small'
+                    @change='getTableList'
+                    prefix-icon='el-icon-search'
+                    v-model='keyword'
+                    clearable
+                    style='width:180px;margin-right:12px;float:right;position: absolute;right:6px; top: 45px;'
+                    @clear='keyword = ""'
+                ></el-input>
             </div>
             <el-table :data='tableData' :key='key' :border='true' style='width: 100%'>
                 <el-table-column prop='Name' label='图例名称' width='120'>
@@ -134,8 +140,8 @@
                 </el-table-column>
                 <el-table-column label='操作' width='100' v-if='state==1'>
                     <template slot-scope='scope' v-if='state==1'>
-                        <el-button @click='modifyClick(scope.row)' type='text' size='small'>修改</el-button>
-                        <el-button @click='deleteClick(scope.row)' type='text' size='small'>做废</el-button>
+                        <el-button @click='modifyClick(scope.row)' type='text'>修改</el-button>
+                        <el-button @click='deleteClick(scope.row)' type='text'>作废</el-button>
                     </template>
                 </el-table-column>
                 <el-table-column v-if='state==0' prop='DeleteTime' label='作废时间' width='180'>
@@ -155,6 +161,13 @@
             </div>
         </div>
         <add-legend ref='addLegend' @updateSuccess='updateSuccess' @addSuccess='addSuccess'></add-legend>
+        <Modal :show='modalStatusTip' title='确定要作废图例吗?' mode='tip' type='error' @close='modalStatusTip=false'>
+            <template #content>作废后则不可更改</template>
+            <template #handle>
+                <Button @click='modalStatusTip=false' type='default'>取消</Button>
+                <Button @click='modalConfirm' type='error'>作废</Button>
+            </template>
+        </Modal>
     </div>
 </template>
 <script>
@@ -254,6 +267,8 @@ export default {
     components: { addLegend, Select },
     data() {
         return {
+            deleteObject: {},
+            modalStatusTip: false,
             tableData: [],
             key: 1,
             dataSelect2: [
@@ -310,10 +325,10 @@ export default {
             visualizationList: [], //已选铺位可视化
             // majorList: [], //专业
             deviceList: [],
-            GraphCategoryIds: undefined, //说明书位置勾选集合
-            InfoLocals: undefined, //工程信息化
-            InfoSystems: undefined, //工程信息化专业/系统
-            InfoTypeIds: undefined //铺位可视化typeid
+            GraphCategoryIds: [], //说明书位置勾选集合
+            InfoLocals: [], //工程信息化
+            InfoSystems: [], //工程信息化专业/系统
+            InfoTypeIds: [] //铺位可视化typeid
         }
     },
     watch: {
@@ -387,28 +402,22 @@ export default {
         modifyClick(row) {
             this.$refs.addLegend.open(row, '修改图例库')
         },
-        deleteClick(row) {
-            this.$confirm('作废后则不可更改', '确定要作废图例吗?', {
-                confirmButtonText: '作废',
-                cancelButtonText: '取消',
-                type: 'warning',
-                center: true
-            })
-                .then(() => {
-                    let postParams = [
-                        {
-                            Id: row.Id
-                        }
-                    ]
-                    deleteLegend({ postParams }).then(res => {
-                        if (res.Result == 'success') {
-                            this.$message({
-                                type: 'success',
-                                message: '作废成功!'
-                            })
-                            this.getTableList()
-                        }
-                    })
+        modalConfirm() {
+            let postParams = [
+                {
+                    Id: this.deleteObject.Id
+                }
+            ]
+            deleteLegend({ postParams })
+                .then(res => {
+                    if (res.Result == 'success') {
+                        this.$message({
+                            type: 'success',
+                            message: '作废成功!'
+                        })
+                        this.modalStatusTip = false
+                        this.getTableList()
+                    }
                 })
                 .catch(() => {
                     this.$message({
@@ -417,6 +426,38 @@ export default {
                     })
                 })
         },
+        deleteClick(row) {
+            this.deleteObject = row
+            this.modalStatusTip = true
+            // this.$confirm('作废后则不可更改', '确定要作废图例吗?', {
+            //     confirmButtonText: '作废',
+            //     cancelButtonText: '取消',
+            //     type: 'warning',
+            //     center: true
+            // })
+            //     .then(() => {
+            //         let postParams = [
+            //             {
+            //                 Id: row.Id
+            //             }
+            //         ]
+            //         deleteLegend({ postParams }).then(res => {
+            //             if (res.Result == 'success') {
+            //                 this.$message({
+            //                     type: 'success',
+            //                     message: '作废成功!'
+            //                 })
+            //                 this.getTableList()
+            //             }
+            //         })
+            //     })
+            //     .catch(() => {
+            //         this.$message({
+            //             type: 'info',
+            //             message: '已取消删除'
+            //         })
+            //     })
+        },
         pageChanged(page, size) {
             this.currentPage = page
             this.getTableList()
@@ -432,10 +473,10 @@ export default {
         getTableList() {
             let postParams = {
                 Deleted: this.state == 1 ? false : true,
-                GraphCategoryIds: this.GraphCategoryIds, //说明书位置
-                InfoLocals: this.InfoLocals, //工程信息化位置与设备分类
-                InfoSystems: this.InfoSystems, //工程信息化专业/系统
-                InfoTypeIds: this.InfoTypeIds, //铺位可视化typeid
+                GraphCategoryIds: this.GraphCategoryIds.length ? this.GraphCategoryIds : undefined, //说明书位置
+                InfoLocals: this.InfoLocals.length ? this.InfoLocals : undefined, //工程信息化位置与设备分类
+                InfoSystems: this.InfoSystems.length ? this.InfoSystems : undefined, //工程信息化专业/系统
+                InfoTypeIds: this.InfoTypeIds.length ? this.InfoTypeIds : undefined, //铺位可视化typeid
                 Name: this.keyword,
                 PageNumber: this.currentPage,
                 PageSize: this.size,
@@ -477,13 +518,18 @@ export default {
         treeConfirmDevice(id, info) {
             this.InfoSystems = []
             this.InfoLocals = []
-            for (let i = 0; i < info.length; i++) {
-                let type = info[i]
-                if (type.name.includes('/')) {
-                    this.InfoLocals.push(type.id)
-                } else {
-                    this.InfoSystems.push(type.id)
+            if (info) {
+                for (let i = 0; i < info.length; i++) {
+                    let type = info[i]
+                    if (type.name.includes('/')) {
+                        this.InfoLocals.push(type.id)
+                    } else {
+                        this.InfoSystems.push(type.id)
+                    }
                 }
+            } else {
+                this.InfoSystems = []
+                this.InfoLocals = []
             }
             this.getTableList()
         },

+ 2 - 1
src/views/other/gcfz2.vue

@@ -84,7 +84,8 @@
     </div>
 </template>
 <script>
-import Select from '@/components/Select/Select.vue'
+// import Select from '@/components/Select/Select.vue'
+import { Select } from 'meri-design'
 import { mapGetters } from 'vuex'
 import moment from 'moment'
 

+ 2 - 1
src/views/other/gcfzDialog.vue

@@ -21,7 +21,8 @@
     </div>
 </template>
 <script>
-import Select from '@/components/Select/Select.vue'
+// import Select from '@/components/Select/Select.vue'
+import { Select } from 'meri-design'
 import gcfzTable1 from './gcfz1'
 import gcfzTable2 from './gcfz2'
 import { querygcfzyfhz, queryfzyfchange } from '@/api/other.js'

+ 2 - 0
src/views/other/index.vue

@@ -196,6 +196,8 @@ export default {
         }
         .isActive {
             color: #025baa;
+            font-weight: bolder;
+            background: linear-gradient(360deg, rgba(2, 91, 170, 0.1) 0%, rgba(2, 91, 170, 0) 100%);
         }
     }
     .other-bottom {

+ 10 - 3
src/views/other/zhsxOther.vue

@@ -25,7 +25,8 @@
 </template>
 <script>
 import moment from 'moment'
-import Select from '@/components/Select/Select.vue'
+import { Select } from 'meri-design'
+// import Select from '@/components/Select/Select.vue'
 import ZhsxDialog from './zhsxDialog'
 import zhsxOtherTable1 from './zhsxOtherTable1'
 import zhsxOtherTable2 from './zhsxOtherTable2'
@@ -112,7 +113,7 @@ export default {
 <style lang="less">
 .zhsx-box {
     .el-dialog__header {
-        padding: 16px 24px;
+        padding: 16px 50px;
     }
     .el-dialog__title {
         font-size: 16px;
@@ -148,7 +149,13 @@ export default {
         font-family: MicrosoftYaHei;
         color: rgba(31, 36, 41, 1);
         border: 1px solid rgba(195, 199, 203, 1);
-        border-radius: 4px;
+        background: #fff;
+    }
+    /deep/.el-tabs__item:nth-child(2) {
+        border-radius: 4px 0 0 4px;
+    }
+    /deep/.el-tabs__item:last-child {
+        border-radius: 0 4px 4px 0;
     }
     .el-tabs,
     .el-tabs__content {

+ 11 - 7
src/views/other/zhsxOtherTable1.vue

@@ -19,7 +19,7 @@
                 @change='getZhjl'
                 width='200'
                 tipPlace='top'
-                caption='政府部门'
+                caption='政府部门'
                 size='small'
                 v-model='searVal'
                 style='margin-right:12px'
@@ -44,13 +44,13 @@
             <el-table-column prop label='政府部门' width='80'>
                 <template slot-scope='{row}'>{{row.department||'--'}}</template>
             </el-table-column>
-            <el-table-column prop label='记录事项' :show-overflow-tooltip='true'>
+            <el-table-column prop label='记录事项' :show-overflow-tooltip='true' width='700'>
                 <template slot-scope='{row}'>{{row.recordsx||'--'}}</template>
             </el-table-column>
-            <el-table-column prop label='工作要求' width="160">
+            <el-table-column prop label='工作要求' width='160'>
                 <template slot-scope='{row}'>{{row.workyq||'--'}}</template>
             </el-table-column>
-            <el-table-column prop label='整改要求' width="160">
+            <el-table-column prop label='整改要求' width='160'>
                 <template slot-scope='{row}'>{{row.zgyq||'--'}}</template>
             </el-table-column>
             <el-table-column prop label='附件' width='80'>
@@ -89,7 +89,8 @@
 </template>
 <script>
 import moment from 'moment'
-import Select from '@/components/Select/Select.vue'
+import { Select } from 'meri-design'
+// import Select from '@/components/Select/Select.vue'
 import { queryGlams } from '@/api/other.js'
 import { querySelect } from '@/api/public.js'
 import pdf from 'vue-pdf'
@@ -219,9 +220,12 @@ export default {
         justify-content: flex-end;
         margin-top: 28px;
     }
-    .el-input__inner {
-        border: none;
+    .picker-box {
+        .el-input__inner {
+            border: none;
+        }
     }
+
     .el-range-editor.el-input__inner {
         padding: 3px 0px;
     }

+ 3 - 2
src/views/other/zhsxOtherTable2.vue

@@ -56,7 +56,7 @@
             style='width: 100%;margin-top:12px'
         >
             <el-table-column label='序号' type='index' width='60'></el-table-column>
-            <el-table-column prop :show-overflow-tooltip='true' sortable label='任务名称'>
+            <el-table-column prop :show-overflow-tooltip='true' sortable label='任务名称' width="540">
                 <template slot-scope='{row}'>{{row.description||'--'}}</template>
             </el-table-column>
             <el-table-column prop label='状态' width='90'>
@@ -83,7 +83,8 @@
     </div>
 </template>
 <script>
-import Select from '@/components/Select/Select.vue'
+// import Select from '@/components/Select/Select.vue'
+import { Select } from 'meri-design'
 import { queryDsfrw } from '@/api/other.js'
 import { querySelect } from '@/api/public.js'
 

+ 6 - 2
src/views/room/detail.vue

@@ -110,7 +110,7 @@
             style='width:100%;margin-top:12px'
             :header-cell-style='{background:"rgba(245,246,247,1)",fontFamily:"MicrosoftYaHei",color:"rgba(100,108,115,1)",lineHeight:"16px",fontSize:"12px"}'
         >
-            <el-table-column type='index' label='序号' width='50'></el-table-column>
+            <el-table-column type='index' label='序号' width='50' :index='indexMethod'></el-table-column>
             <el-table-column prop='sbjc' label='设备名称' min-width='150' :show-overflow-tooltip='true' resizable>
                 <template slot-scope='{row}'>{{row.sbjc||'--'}}</template>
             </el-table-column>
@@ -159,7 +159,8 @@
     </div>
 </template>
 <script>
-import Select from '@/components/Select/Select.vue'
+import { Select } from 'meri-design'
+// import Select from '@/components/Select/Select.vue'
 import { querySelect } from '@/api/public.js'
 import { mapGetters } from 'vuex'
 import { queryHxsbDetail } from '@/api/room.js'
@@ -215,6 +216,9 @@ export default {
         }
     },
     methods: {
+        indexMethod(index) {
+            return (this.page - 1) * this.size + index + 1
+        },
         show() {
             this.dialogFormVisible = !this.dialogFormVisible
         },

+ 24 - 8
src/views/room/index.vue

@@ -12,7 +12,7 @@
             </el-tooltip>
 
             <div class='compute-tab'>
-                <el-tabs v-model='activeName' @tab-click='handleClick'>
+                <el-tabs v-model='activeName' @tab-click='handleClick' ref='elTabs'>
                     <el-tab-pane label='机房布置图' name='1' v-if='tableImg.length>0'>
                         <room-table1 v-if='tableImg.length>=0' :tableImg='tableImg'></room-table1>
                     </el-tab-pane>
@@ -411,6 +411,7 @@ import roomTable4 from './room4'
 import roomTable5 from './room5'
 import { mapGetters } from 'vuex'
 import { querySelect, queryPic } from '@/api/public.js'
+import { Select } from 'meri-design'
 
 export default {
     data() {
@@ -490,7 +491,7 @@ export default {
             rwwcrq: '',
             ycgdtbsj: '',
             ycgdyssj: '',
-            smsxtArr: []
+            smsxtArr: { smsx: '1001' }
         }
     },
     components: {
@@ -534,6 +535,16 @@ export default {
             queryPic({ getParams }).then(res => {
                 //console.log('机房布置图', res)
                 this.tableImg = res.data ? res.data : []
+                //判断有没有图片,有图片默认显示按钮是第一个tab,没有图片显示的是第二个tab
+                if (this.tableImg.length > 0) {
+                    this.activeName = '1'
+                } else if (this.systemName == '配电室机房') {
+                    this.activeName = '2'
+                    this.Index1()
+                } else {
+                    this.activeName = '3'
+                    this.Index2()
+                }
             })
         },
         // 明细表
@@ -581,6 +592,8 @@ export default {
                     this.total1 = res.count
                     this.table2 = res.data ? res.data : []
                     //console.log('明细表', res)
+                    if (this.table2.length == 0) {
+                    }
                 }
             })
         },
@@ -643,7 +656,6 @@ export default {
         Index3() {
             let getParams = {
                 location: '1890',
-                // plazaId: '1001145',
                 plazaId: this.plazaId,
                 page: this.page3,
                 size: this.size3,
@@ -817,8 +829,7 @@ export default {
                 }
             }
             querySystem(params).then(res => {
-                this.smsxtArr = res.data[0]
-                console.log(this.smsxtArr)
+                this.smsxtArr = res.data ? res.data[0] : {}
                 this.Index(this.smsxtArr.smsxt)
                 this.content = `查看${this.$cookie.get('floorNow')}层${this.smsxtArr.smsxtname}分布图`
             })
@@ -832,6 +843,7 @@ export default {
             } else if (name.type == 'system') {
                 let floor = this.$cookie.get('floorNow')
                 this.content = `查看${floor}层楼层功能图`
+                this.init()
             }
         },
         // 机房右上角的跳转 如果是在楼层功能打开的机房则要跳转到设备设施对应的系统\楼层 反之亦然
@@ -845,9 +857,7 @@ export default {
             }
         }
     },
-    mounted() {
-        // this.Index()
-    }
+    mounted() {}
 }
 </script>
 <style lang="less" scoped>
@@ -993,6 +1003,12 @@ export default {
             color: rgba(31, 36, 41, 1);
             border: 1px solid rgba(195, 199, 203, 1);
         }
+        /deep/ .el-tabs__item:last-child {
+            border-radius: 0px 4px 4px 0px;
+        }
+        /deep/ .el-tabs__item:nth-child(2) {
+            border-radius: 4px 0px 0px 4px;
+        }
         .el-tabs,
         .el-tabs__content {
             height: 800px;

+ 2 - 1
src/views/room/room1.vue

@@ -4,7 +4,8 @@
     </div>
 </template>
 <script>
-import Select from '@/components/Select/Select.vue'
+// import Select from '@/components/Select/Select.vue'
+import { Select } from 'meri-design'
 
 export default {
     props: ['tableImg', 'loading'],

+ 6 - 3
src/views/room/room2.vue

@@ -9,7 +9,7 @@
                 style='width: 100%'
                 :header-cell-style='{background:"rgba(245,246,247,1)",fontFamily:"MicrosoftYaHei",color:"rgba(100,108,115,1)",lineHeight:"16px",fontSize:"12px"}'
             >
-                <el-table-column type='index' label='序号' width='50'></el-table-column>
+                <el-table-column type='index' label='序号' width='50' :index='indexMethod'></el-table-column>
                 <el-table-column prop='a' label='抽屉编号' :show-overflow-tooltip='true' resizable>
                     <template slot-scope='{row}'>{{row.drawernum||'--'}}</template>
                 </el-table-column>
@@ -47,7 +47,8 @@
     </div>
 </template>
 <script>
-import Select from '@/components/Select/Select.vue'
+import { Select } from 'meri-design'
+// import Select from '@/components/Select/Select.vue'
 import { mapGetters } from 'vuex'
 export default {
     props: ['table2', 'total', 'page', 'size', 'loading'],
@@ -67,8 +68,10 @@ export default {
     },
     components: { Select },
     methods: {
+        indexMethod(index) {
+            return (this.page - 1) * this.size + index + 1
+        },
         pageChanged(page) {
-            console.log(page)
             this.$emit('Index1Emit', page)
         }
     },

+ 8 - 4
src/views/room/room3.vue

@@ -9,17 +9,17 @@
                 style='width: 100%'
                 :header-cell-style='{background:"rgba(245,246,247,1)",fontFamily:"MicrosoftYaHei",color:"rgba(100,108,115,1)",lineHeight:"16px",fontSize:"12px"}'
             >
-                <el-table-column type='index' label='序号' width='60'></el-table-column>
+                <el-table-column type='index' label='序号' width='60' :index='indexMethod'></el-table-column>
                 <el-table-column prop :show-overflow-tooltip='true' label='设备简称' resizable min-width='150'>
                     <template slot-scope='{row}'>{{row.classqc||'--'}}</template>
                 </el-table-column>
                 <el-table-column prop label='数量' :show-overflow-tooltip='true' width='80'>
                     <template slot-scope='{row}'>{{row.sl||'--'}}</template>
                 </el-table-column>
-                <el-table-column prop label='品牌' :show-overflow-tooltip='true' width="120">
+                <el-table-column prop label='品牌' :show-overflow-tooltip='true' width='120'>
                     <template slot-scope='{row}'>{{row.brand||'--'}}</template>
                 </el-table-column>
-                <el-table-column prop label='型号' :show-overflow-tooltip='true' width="150">
+                <el-table-column prop label='型号' :show-overflow-tooltip='true' width='174'>
                     <template slot-scope='{row}'>{{row.sbxh||'--'}}</template>
                 </el-table-column>
                 <el-table-column prop label='楼层' :show-overflow-tooltip='true' width='100'>
@@ -48,7 +48,8 @@
 </template>
 
 <script>
-import Select from '@/components/Select/Select.vue'
+// import Select from '@/components/Select/Select.vue'
+import { Select } from 'meri-design'
 import Detail from './detail'
 
 export default {
@@ -62,6 +63,9 @@ export default {
 
     components: { Select, Detail },
     methods: {
+        indexMethod(index) {
+            return (this.page - 1) * this.size + index + 1
+        },
         modalClose() {
             this.innerVisible = false
         },

+ 24 - 14
src/views/room/room4.vue

@@ -8,42 +8,48 @@
                 style='width: 100%'
                 :header-cell-style='{background:"rgba(245,246,247,1)",fontFamily:"MicrosoftYaHei",color:"rgba(100,108,115,1)",lineHeight:"16px",fontSize:"12px"}'
             >
-                <el-table-column type='index' label='序号' width='60'></el-table-column>
-                <el-table-column prop label='设备名称' show-overflow-tooltip resizable min-width='150'>
+                <el-table-column type='index' label='序号' width='60' :index='indexMethod'></el-table-column>
+                <el-table-column prop label='设备名称' show-overflow-tooltip resizable min-width='360'>
                     <template slot-scope='{row}'>{{row.sbmc||'--'}}</template>
                 </el-table-column>
-                <el-table-column prop label='设备编号' show-overflow-tooltip resizable width="80"> 
+                <el-table-column prop label='设备编号' show-overflow-tooltip resizable width='80'>
                     <template slot-scope='{row}'>{{row.location||'--'}}</template>
                 </el-table-column>
-                <el-table-column prop label='重要事项记录'  show-overflow-tooltip resizable>
+                <el-table-column prop label='重要事项记录' show-overflow-tooltip resizable min-width='120'>
                     <template slot-scope='{row}'>{{row.matters||'--'}}</template>
                 </el-table-column>
-                <el-table-column prop label='描述' show-overflow-tooltip resizable min-width='150'>
+                <el-table-column prop label='描述' show-overflow-tooltip resizable min-width='310'>
                     <template slot-scope='{row}'>{{row.description||'--'}}</template>
                 </el-table-column>
                 <el-table-column prop label='更换配件信息' align='center' show-overflow-tooltip resizable>
-                    <el-table-column prop label='是/否更换' show-overflow-tooltip resizable width="80">
+                    <el-table-column prop label='是/否更换' show-overflow-tooltip resizable width='80'>
                         <template slot-scope='{row}'>
                             <div v-if='row.ismodel==0'>否</div>
                             <div v-else-if='row.ismodel==1'>是</div>
                             <div v-else>'--'</div>
                         </template>
                     </el-table-column>
-                    <el-table-column prop label='配件名称型号'  min-width='100' show-overflow-tooltip resizable>
+                    <el-table-column prop label='配件名称型号' min-width='100' show-overflow-tooltip resizable>
                         <template slot-scope='{row}'>{{row.model||'--'}}</template>
                     </el-table-column>
-                    <el-table-column prop label='数量' show-overflow-tooltip resizable width="80">
+                    <el-table-column prop label='数量' show-overflow-tooltip resizable width='80'>
                         <template slot-scope='{row}'>{{row.sl>=0?row.sl:'--'}}</template>
                     </el-table-column>
-                    <el-table-column prop label='费用(万元)' min-width='80' show-overflow-tooltip resizable>
+                    <el-table-column prop label='费用(万元)' min-width='110' show-overflow-tooltip resizable>
                         <template slot-scope='{row}'>{{row.cost?number_format(row.cost):'--'}}</template>
                     </el-table-column>
-                    <el-table-column prop label='费用出处' show-overflow-tooltip resizable width="80">
+                    <el-table-column prop label='费用出处' show-overflow-tooltip resizable width='80'>
                         <template slot-scope='{row}'>{{row.source||'--'}}</template>
                     </el-table-column>
                 </el-table-column>
-                <el-table-column prop label='现场照片' show-overflow-tooltip resizable width="80">
-                    <template slot-scope='{row}'>{{row.pics || '--'}}</template>
+                <el-table-column prop label='现场照片' show-overflow-tooltip resizable width='80'>
+                    <template slot-scope='{row}'>
+                        <div v-if="row.glsmsImage"
+                            style='cursor:pointer;color: #0091ff;'
+                            @click='clickPic(row.glsmsImage)'
+                        >{{row.glsmsImage.length+'张'}}</div>
+                        <div v-else>{{'--'}}</div>
+                    </template>
                 </el-table-column>
                 <el-table-column prop label='填报时间' show-overflow-tooltip resizable width='130'>
                     <template slot-scope='{row}'>{{row.reportdate?formatter(row.reportdate):'--'}}</template>
@@ -51,7 +57,7 @@
                 <el-table-column prop label='验收时间' show-overflow-tooltip width='130' resizable>
                     <template slot-scope='{row}'>{{row.sjjssj?formatter(row.sjjssj):'--'}}</template>
                 </el-table-column>
-                <el-table-column prop label='工单编号' show-overflow-tooltip resizable width="80">
+                <el-table-column prop label='工单编号' show-overflow-tooltip resizable width='80'>
                     <template slot-scope='{row}'>{{row.wonum||'--'}}</template>
                 </el-table-column>
             </el-table>
@@ -70,7 +76,8 @@
     </div>
 </template>
 <script>
-import Select from '@/components/Select/Select.vue'
+// import Select from '@/components/Select/Select.vue'
+import { Select } from 'meri-design'
 import moment from 'moment'
 import { number_format } from '@/utils/format.js'
 
@@ -86,6 +93,9 @@ export default {
     },
     components: { Select },
     methods: {
+        indexMethod(index) {
+            return (this.page - 1) * this.size + index + 1
+        },
         formatter(date) {
             return moment.unix(date / 1000).format('YYYY.MM.DD HH:mm')
         },

+ 13 - 8
src/views/room/room5.vue

@@ -8,22 +8,23 @@
                 style='width: 100%'
                 :header-cell-style='{background:"rgba(245,246,247,1)",fontFamily:"MicrosoftYaHei",color:"rgba(100,108,115,1)",lineHeight:"16px",fontSize:"12px"}'
             >
-                <el-table-column type='index' label='序号' width='60'></el-table-column>
+                <el-table-column type='index' label='序号' width='60' :index='indexMethod'></el-table-column>
                 <el-table-column prop label='设备名称' show-overflow-tooltip resizable min-width='150'>
                     <template slot-scope='{row}'>{{row.sbmc||'--'}}</template>
                 </el-table-column>
-                <el-table-column prop label='设备编号' :show-overflow-tooltip='true' width="80">
+                <el-table-column prop label='设备编号' :show-overflow-tooltip='true' width='80'>
                     <template slot-scope='{row}'>{{row.assetnum||'--'}}</template>
                 </el-table-column>
                 <el-table-column prop label='核心维保事项记录' :show-overflow-tooltip='true' min-width='150'>
                     <template slot-scope='{row}'>{{row.matters||'--'}}</template>
                 </el-table-column>
-                <el-table-column prop label='现场照片' :show-overflow-tooltip='true' width="80">
+                <el-table-column prop label='现场照片' :show-overflow-tooltip='true' width='80'>
                     <template slot-scope='{row}'>
-                        <div
+                        <div v-if="row.glsmsImage"
                             style='cursor:pointer;color: #0091ff;'
                             @click='clickPic(row.glsmsImage)'
-                        >{{row.glsmsImage?row.glsmsImage.length+'张':'--'}}</div>
+                        >{{row.glsmsImage.length+'张'}}</div>
+                        <div v-else>{{'--'}}</div>
                     </template>
                 </el-table-column>
                 <el-table-column prop label='维保任务' align='center'>
@@ -32,7 +33,7 @@
                             <div style='cursor:pointer;color: #0091ff;'>{{row.wb_gzglid||'--'}}</div>
                         </template>
                     </el-table-column>
-                    <el-table-column prop label='维保任务名称' :show-overflow-tooltip='true' min-width='150'>
+                    <el-table-column prop label='维保任务名称' :show-overflow-tooltip='true' min-width='340'>
                         <template slot-scope='{row}'>{{row.wbrwmc || '--'}}</template>
                     </el-table-column>
                     <el-table-column prop label='任务状态' :show-overflow-tooltip='true'>
@@ -55,7 +56,7 @@
                     <el-table-column prop label='异常工单编号' :show-overflow-tooltip='true' min-width='110'>
                         <template slot-scope='{row}'>{{row.wonum||'--'}}</template>
                     </el-table-column>
-                    <el-table-column prop label='描述' :show-overflow-tooltip='true' min-width='150'>
+                    <el-table-column prop label='描述' :show-overflow-tooltip='true' min-width='320'>
                         <template slot-scope='{row}'>{{row.description||'--'}}</template>
                     </el-table-column>
                     <el-table-column prop label='填报时间' :show-overflow-tooltip='true' width='130'>
@@ -82,7 +83,8 @@
     </div>
 </template>
 <script>
-import Select from '@/components/Select/Select.vue'
+// import Select from '@/components/Select/Select.vue'
+import { Select } from 'meri-design'
 import moment from 'moment'
 
 export default {
@@ -98,6 +100,9 @@ export default {
     components: { Select },
     mounted() {},
     methods: {
+        indexMethod(index) {
+            return (this.page - 1) * this.size + index + 1
+        },
         pageChanged(page) {
             this.page = page
             this.$emit('Index4Emit', page)

+ 12 - 3
vue.config.js

@@ -2,15 +2,24 @@ module.exports = {
     devServer: {
         port: 8090,
         proxy: {
-            // 工程信息化服务
             '/data': {
-                target: 'http://192.168.200.87:9003',
+                target: 'http://60.205.177.43',
+                // target: 'http://localhost:6040/data/',
                 changeOrigin: true,
                 secure: false,
                 pathRewrite: {
-                    '^/data': '',
+                    '^/data': '/data',
                 },
             },
+            // // 工程信息化服务
+            // '/data': {
+            //     target: 'http://192.168.200.87:9003',
+            //     changeOrigin: true,
+            //     secure: false,
+            //     pathRewrite: {
+            //         '^/data': '',
+            //     },
+            // },
             // 万达蜂鸟服务
             '/wdfn': {
                 target: 'http://map.wanda.cn',