Browse Source

Merge branch 'dev' of git.sagacloud.cn:web/ibms into dev

zhangyu 5 years ago
parent
commit
c2e97c7126

+ 1 - 1
config/dev.env.js

@@ -11,4 +11,4 @@ module.exports = merge(prodEnv, {
     SSO_SERVER: '"http://sso.sagacloud.cn"',  //正式环境
     BASE_URL: '"http://mbi.sagacloud.cn"', //线上iframe地址
     MQTT_SERVICE: '"ws://adm.sagacloud.cn/stomp/"' //MQ正式环境地址
-})
+})

+ 224 - 224
config/index.js

@@ -5,240 +5,240 @@
 const path = require('path')
 
 module.exports = {
-    dev: {
-        // Paths
-        assetsSubDirectory: 'static',
-        assetsPublicPath: '/',
+  dev: {
+    // Paths
+    assetsSubDirectory: 'static',
+    assetsPublicPath: '/',
 
-        proxyTable: {//正式环境
-            '/admin': {
-                target: 'http://mbi.sagacloud.cn:8080',
-                changeOrigin: true,
-                pathRewrite: {
-                    "^/admin": "/"
-                }
-            },
-            '/api': {
-                target: 'http://mbi.sagacloud.cn:8080',
-                changeOrigin: true,
-                pathRewrite: {
-                    "^/api": "/"
-                }
-            },
-            '/data-platform-3': {
-                // 目标 API 地址
-                target: 'http://api.sagacloud.cn/',
-                // 如果要代理 websockets
-                ws: true,
-                // 将主机标头的原点更改为目标URL
-                changeOrigin: false
-            },
-            '/business-space': {
-                // 目标 API 地址
-                target: 'http://api.sagacloud.cn',
-                changeOrigin: true,
-                pathRewrite: {
-                    "^/business-space": "/dp-auxiliary/business-space/"
-                }
-            },
-            '/pointconfig': {
-                // 目标 API 地址
-                target: 'http://mbi.sagacloud.cn:8080/',
-                // 如果要代理 websockets
-                ws: true,
-                // 将主机标头的原点更改为目标URL
-                changeOrigin: false
-            },
-            '/venders-dp': {
-                // 目标 API 地址
-                target: 'http://api.sagacloud.cn',
-                changeOrigin: true,
-                pathRewrite: {
-                    "^/venders-dp": "/dp-auxiliary/venders-dp/"
-                }
-            },
-            '/venders': {
-                // 目标 API 地址
-                target: 'http://api.sagacloud.cn',
-                changeOrigin: true,
-                pathRewrite: {
-                    "^/venders": "/dp-auxiliary/venders/"
-                }
-            },
-            '/ScanBuilding': {
-                // 目标 API 地址
-                target: 'http://mbi.sagacloud.cn:8080/',
-                // 如果要代理 websockets
-                ws: true,
-                // 将主机标头的原点更改为目标URL
-                changeOrigin: false
-            },
-            '/image-service': {
-                // 目标 API 地址
-                target: 'http://api.sagacloud.cn',
-                changeOrigin: true,
-                pathRewrite: {
-                    "^/image-service": "/dp-auxiliary/image-service/"
-                }
-            },
-            '/godhand': {
-                // 目标 API 地址
-                target: 'http://api.sagacloud.cn',
-                changeOrigin: true,
-                pathRewrite: {
-                    "^/godhand": "/dp-auxiliary/godhand/"
-                }
-            },
-            '/modelapi': {
-                target: 'http://mbi.sagacloud.cn:8080',
-                // target: 'http://192.168.20.218:8082',//景灏
-                changeOrigin: true,
-                pathRewrite: {
-                    "^/modelapi": "/revit-algorithm/"
-                }
-            },
-        },
+    proxyTable: {//正式环境
+      '/admin': {
+        target: 'http://mbi.sagacloud.cn:8080',
+        changeOrigin: true,
+        pathRewrite: {
+          "^/admin": "/"
+        }
+      },
+      '/api': {
+        target: 'http://mbi.sagacloud.cn:8080',
+        changeOrigin: true,
+        pathRewrite: {
+          "^/api": "/"
+        }
+      },
+      '/data-platform-3': {
+        // 目标 API 地址
+        target: 'http://api.sagacloud.cn/',
+        // 如果要代理 websockets
+        ws: true,
+        // 将主机标头的原点更改为目标URL
+        changeOrigin: false
+      },
+      '/business-space': {
+        // 目标 API 地址
+        target: 'http://api.sagacloud.cn',
+        changeOrigin: true,
+        pathRewrite: {
+          "^/business-space": "/dp-auxiliary/business-space/"
+        }
+      },
+      '/pointconfig': {
+        // 目标 API 地址
+        target: 'http://mbi.sagacloud.cn:8080/',
+        // 如果要代理 websockets
+        ws: true,
+        // 将主机标头的原点更改为目标URL
+        changeOrigin: false
+      },
+      '/venders-dp': {
+        // 目标 API 地址
+        target: 'http://api.sagacloud.cn',
+        changeOrigin: true,
+        pathRewrite: {
+          "^/venders-dp": "/dp-auxiliary/venders-dp/"
+        }
+      },
+      '/venders': {
+        // 目标 API 地址
+        target: 'http://api.sagacloud.cn',
+        changeOrigin: true,
+        pathRewrite: {
+          "^/venders": "/dp-auxiliary/venders/"
+        }
+      },
+      '/ScanBuilding': {
+        // 目标 API 地址
+        target: 'http://mbi.sagacloud.cn:8080/',
+        // 如果要代理 websockets
+        ws: true,
+        // 将主机标头的原点更改为目标URL
+        changeOrigin: false
+      },
+      '/image-service': {
+        // 目标 API 地址
+        target: 'http://api.sagacloud.cn',
+        changeOrigin: true,
+        pathRewrite: {
+          "^/image-service": "/dp-auxiliary/image-service/"
+        }
+      },
+      '/godhand': {
+        // 目标 API 地址
+        target: 'http://api.sagacloud.cn',
+        changeOrigin: true,
+        pathRewrite: {
+          "^/godhand": "/dp-auxiliary/godhand/"
+        }
+      },
+      '/modelapi': {
+        target: 'http://mbi.sagacloud.cn:8080',
+        // target: 'http://192.168.20.218:8082',//景灏
+        changeOrigin: true,
+        pathRewrite: {
+          "^/modelapi": "/revit-algorithm/"
+        }
+      },
+    },
 
-        // proxyTable: {
-        //     '/admin': {
-        //         target: 'http://192.168.20.236:8080',
-        //         changeOrigin: true,
-        //         pathRewrite: {
-        //             "^/admin": "/"
-        //         }
-        //     },
-        //     '/api': {
-        //         target: 'http://192.168.20.236:8080',
-        //         changeOrigin: true,
-        //         pathRewrite: {
-        //             "^/api": "/"
-        //         }
-        //     },
-        //     '/data-platform-3': {
-        //         // 目标 API 地址
-        //         target: 'http://192.168.20.225:8080/',
-        //         // 如果要代理 websockets
-        //         ws: true,
-        //         // 将主机标头的原点更改为目标URL
-        //         changeOrigin: false
-        //     },
-        //     '/business-space': {
-        //         // 目标 API 地址
-        //         target: 'http://192.168.20.225:8080/',
-        //         // 如果要代理 websockets
-        //         ws: true,
-        //         // 将主机标头的原点更改为目标URL
-        //         changeOrigin: false
-        //     },
-        //     '/pointconfig': {
-        //         // 目标 API 地址
-        //         target: 'http://192.168.20.236:8080/',
-        //         // 如果要代理 websockets
-        //         ws: true,
-        //         // 将主机标头的原点更改为目标URL
-        //         changeOrigin: false
-        //     },
-        //     '/venders-dp': {
-        //         // 目标 API 地址
-        //         target: 'http://192.168.20.225:8080/',
-        //         // 如果要代理 websockets
-        //         ws: true,
-        //         // 将主机标头的原点更改为目标URL
-        //         changeOrigin: false
-        //     },
-        //     '/venders': {
-        //         // 目标 API 地址
-        //         target: 'http://192.168.20.225:8080/',
-        //         // 如果要代理 websockets
-        //         ws: true,
-        //         // 将主机标头的原点更改为目标URL
-        //         changeOrigin: false
-        //     },
-        //     '/ScanBuilding': {
-        //         // 目标 API 地址
-        //         target: 'http://192.168.20.236:8080/',
-        //         // 如果要代理 websockets
-        //         ws: true,
-        //         // 将主机标头的原点更改为目标URL
-        //         changeOrigin: false
-        //     },
-        //     '/image-service': {
-        //         // 目标 API 地址
-        //         target: 'http://192.168.20.225:8080/',
-        //         // 如果要代理 websockets
-        //         ws: true,
-        //         // 将主机标头的原点更改为目标URL
-        //         changeOrigin: false
-        //     },
-        //     '/godhand': {
-        //         // 目标 API 地址
-        //         target: 'http://192.168.20.225:8080/',
-        //         // 如果要代理 websockets
-        //         ws: true,
-        //         // 将主机标头的原点更改为目标URL
-        //         changeOrigin: false
-        //     },
-        //     '/modelapi': {
-        //         target: 'http://192.168.20.225:8082',
-        //         // target: 'http://192.168.20.218:8082',//景灏
-        //         changeOrigin: true,
-        //         pathRewrite: {
-        //             "^/modelapi": "/"
-        //         }
-        //     },
-        // },
+    // proxyTable: {
+    //     '/admin': {
+    //         target: 'http://192.168.20.236:8080',
+    //         changeOrigin: true,
+    //         pathRewrite: {
+    //             "^/admin": "/"
+    //         }
+    //     },
+    //     '/api': {
+    //         target: 'http://192.168.20.236:8080',
+    //         changeOrigin: true,
+    //         pathRewrite: {
+    //             "^/api": "/"
+    //         }
+    //     },
+    //     '/data-platform-3': {
+    //         // 目标 API 地址
+    //         target: 'http://192.168.20.225:8080/',
+    //         // 如果要代理 websockets
+    //         ws: true,
+    //         // 将主机标头的原点更改为目标URL
+    //         changeOrigin: false
+    //     },
+    //     '/business-space': {
+    //         // 目标 API 地址
+    //         target: 'http://192.168.20.225:8080/',
+    //         // 如果要代理 websockets
+    //         ws: true,
+    //         // 将主机标头的原点更改为目标URL
+    //         changeOrigin: false
+    //     },
+    //     '/pointconfig': {
+    //         // 目标 API 地址
+    //         target: 'http://192.168.20.236:8080/',
+    //         // 如果要代理 websockets
+    //         ws: true,
+    //         // 将主机标头的原点更改为目标URL
+    //         changeOrigin: false
+    //     },
+    //     '/venders-dp': {
+    //         // 目标 API 地址
+    //         target: 'http://192.168.20.225:8080/',
+    //         // 如果要代理 websockets
+    //         ws: true,
+    //         // 将主机标头的原点更改为目标URL
+    //         changeOrigin: false
+    //     },
+    //     '/venders': {
+    //         // 目标 API 地址
+    //         target: 'http://192.168.20.225:8080/',
+    //         // 如果要代理 websockets
+    //         ws: true,
+    //         // 将主机标头的原点更改为目标URL
+    //         changeOrigin: false
+    //     },
+    //     '/ScanBuilding': {
+    //         // 目标 API 地址
+    //         target: 'http://192.168.20.236:8080/',
+    //         // 如果要代理 websockets
+    //         ws: true,
+    //         // 将主机标头的原点更改为目标URL
+    //         changeOrigin: false
+    //     },
+    //     '/image-service': {
+    //         // 目标 API 地址
+    //         target: 'http://192.168.20.225:8080/',
+    //         // 如果要代理 websockets
+    //         ws: true,
+    //         // 将主机标头的原点更改为目标URL
+    //         changeOrigin: false
+    //     },
+    //     '/godhand': {
+    //         // 目标 API 地址
+    //         target: 'http://192.168.20.225:8080/',
+    //         // 如果要代理 websockets
+    //         ws: true,
+    //         // 将主机标头的原点更改为目标URL
+    //         changeOrigin: false
+    //     },
+    //     '/modelapi': {
+    //         target: 'http://192.168.20.225:8082',
+    //         // target: 'http://192.168.20.218:8082',//景灏
+    //         changeOrigin: true,
+    //         pathRewrite: {
+    //             "^/modelapi": "/"
+    //         }
+    //     },
+    // },
 
-        // Various Dev Server settings
-        host: '0.0.0.0', // can be overwritten by process.env.HOST
-        port: 28080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
-        autoOpenBrowser: false,
-        errorOverlay: true,
-        notifyOnErrors: true,
-        poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
+    // Various Dev Server settings
+    host: '0.0.0.0', // can be overwritten by process.env.HOST
+    port: 28080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
+    autoOpenBrowser: false,
+    errorOverlay: true,
+    notifyOnErrors: true,
+    poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
 
-        /**
-         * Source Maps
-         */
+    /**
+     * Source Maps
+     */
 
-        // https://webpack.js.org/configuration/devtool/#development
-        devtool: 'cheap-module-eval-source-map',
+    // https://webpack.js.org/configuration/devtool/#development
+    devtool: 'cheap-module-eval-source-map',
 
-        // If you have problems debugging vue-files in devtools,
-        // set this to false - it *may* help
-        // https://vue-loader.vuejs.org/en/options.html#cachebusting
-        cacheBusting: true,
+    // If you have problems debugging vue-files in devtools,
+    // set this to false - it *may* help
+    // https://vue-loader.vuejs.org/en/options.html#cachebusting
+    cacheBusting: true,
 
-        cssSourceMap: true
-    },
+    cssSourceMap: true
+  },
 
-    build: {
-        // Template for index.html
-        index: path.resolve(__dirname, '../dist/index.html'),
+  build: {
+    // Template for index.html
+    index: path.resolve(__dirname, '../dist/index.html'),
 
-        // Paths
-        assetsRoot: path.resolve(__dirname, '../dist'),
-        assetsSubDirectory: 'static',
-        assetsPublicPath: '/',
+    // Paths
+    assetsRoot: path.resolve(__dirname, '../dist'),
+    assetsSubDirectory: 'static',
+    assetsPublicPath: '/',
 
-        /**
-         * Source Maps
-         */
+    /**
+     * Source Maps
+     */
 
-        productionSourceMap: true,
-        // https://webpack.js.org/configuration/devtool/#production
-        devtool: '#source-map',
+    productionSourceMap: true,
+    // https://webpack.js.org/configuration/devtool/#production
+    devtool: '#source-map',
 
-        // Gzip off by default as many popular static hosts such as
-        // Surge or Netlify already gzip all static assets for you.
-        // Before setting to `true`, make sure to:
-        // npm install --save-dev compression-webpack-plugin
-        productionGzip: false,
-        productionGzipExtensions: ['js', 'css'],
+    // Gzip off by default as many popular static hosts such as
+    // Surge or Netlify already gzip all static assets for you.
+    // Before setting to `true`, make sure to:
+    // npm install --save-dev compression-webpack-plugin
+    productionGzip: false,
+    productionGzipExtensions: ['js', 'css'],
 
-        // Run the build command with an extra argument to
-        // View the bundle analyzer report after build finishes:
-        // `npm run build --report`
-        // Set to `true` or `false` to always turn it on or off
-        bundleAnalyzerReport: process.env.npm_config_report
-    }
-}
+    // Run the build command with an extra argument to
+    // View the bundle analyzer report after build finishes:
+    // `npm run build --report`
+    // Set to `true` or `false` to always turn it on or off
+    bundleAnalyzerReport: process.env.npm_config_report
+  }
+}

+ 1 - 1
src/api/relation/api.js

@@ -133,4 +133,4 @@ export function createEquip(param, success) {
 export function dictUpdate(param, success) {
   let url = '/api/equip-component/dict-custom/update'
   httpUtil.postJson(url, param, success)
-}
+}

File diff suppressed because it is too large
+ 675 - 624
src/components/business_space/business/handsontable.vue


+ 64 - 0
src/components/ledger/addDialog/dialogZone.vue

@@ -0,0 +1,64 @@
+<template>
+  <!-- Form -->
+  <el-dialog title="收货地址" :visible.sync="dialogFormVisible">
+    <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
+      <el-form-item label="分区名称" prop="name">
+        <el-input v-model="ruleForm.name"></el-input>
+      </el-form-item>
+      <el-form-item label="分区ID" prop="id">
+        <el-input v-model="ruleForm.id"></el-input>
+      </el-form-item>
+      <el-form-item style="float: right;margin-top: 20px">
+        <el-button @click="dialogFormVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submitForm('ruleForm')">添 加</el-button>
+      </el-form-item>
+
+      <!--    <div slot="footer" class="dialog-footer">-->
+      <!--      <el-button type="primary" @click="dialogFormVisible = false">确 定</el-button>-->
+      <!--    </div>-->
+    </el-form>
+  </el-dialog>
+</template>
+
+<script>
+  export default {
+    name: "dialogZone",
+    data() {
+      return {
+        dialogFormVisible: false,
+        ruleForm: {
+          name: '',
+          id: ''
+
+        },
+        rules: {
+          name: [
+            {required: true, message: '请输入分区名称', trigger: 'blur'},
+            // {min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur'}
+          ],
+          id: [
+            {required: true, message: '请输入分区ID', trigger: 'blur'},
+          ],
+        }
+      };
+    },
+    methods: {
+      submitForm(formName) {
+        this.$refs[formName].validate((valid) => {
+          if (valid) {
+            this.dialogFormVisible = false
+            this.ruleForm.name = ''
+            this.ruleForm.id = ''
+          } else {
+            console.log('error submit!!');
+            return false;
+          }
+        });
+      },
+    }
+  }
+</script>
+
+<style scoped>
+
+</style>

+ 74 - 69
src/components/relation/overview/CardList.vue

@@ -1,14 +1,14 @@
 <template>
   <div>
     <div
-        :key="index"
-        v-for="(item,index) in content"
+      :key="index"
+      v-for="(item,index) in content"
     >
       <p class="slave-relation-title">{{item.GraphTypeName}}</p>
       <section
-          :key="child.GraphTypeId"
-          class="container"
-          v-for="(child,childIndex) in item.ChildGraphicTypeList"
+        :key="child.GraphTypeId"
+        class="container"
+        v-for="(child,childIndex) in item.ChildGraphicTypeList"
       >
         <p class="relation-text">
           <span @click="toDetail(child)" style="cursor:pointer;">
@@ -16,46 +16,46 @@
             <i class="icon-zuzhiguanxi iconfont"/></span>
           <span class="pic-code">图类型编码:{{child.GraphTypeCode}}</span>
           <el-tooltip
-              :content="child.Note"
-              placement="top">
+            :content="child.Note"
+            placement="top">
             <i
-                @click="explain"
-                class="icon-shuoming iconfont"
+              @click="explain"
+              class="icon-shuoming iconfont"
             />
           </el-tooltip>
         </p>
 
         <el-row :gutter="24">
           <el-col
-              :key="relation.Id"
-              :span="8"
-              v-for="(relation,relIndex) in child.RelationTypeProjectList"
+            :key="relation.Id"
+            :span="8"
+            v-for="(relation,relIndex) in child.RelationTypeProjectList"
           >
             <el-card
-                class="card"
-                shadow="hover"
-                style="position: relative;"
+              class="card"
+              shadow="hover"
+              style="position: relative;"
             >
               <!-- border:none-->
               <!--<div class="mask"></div>-->
               <div style="overflow: hidden">
                 <el-tooltip
-                    :content="relation.RelationTypeName"
-                    placement="top"
+                  :content="relation.RelationTypeName"
+                  placement="top"
                 >
                   <p class="relation-title reset-test reset-title">{{relation.RelationTypeName}}</p>
                 </el-tooltip>
                 <el-tooltip
-                    :content="relation.RelationTypeCode"
-                    placement="top"
+                  :content="relation.RelationTypeCode"
+                  placement="top"
                 >
                   <p class="asc reset-title reset-test">边类型编码:{{relation.RelationTypeCode}}</p>
                 </el-tooltip>
                 <p class="relation-title-icon reset-test fr">
                   <el-tooltip
-                      :content="relation.Note"
-                      placement="top"
-                      style="z-index: 3;position:relative;"
+                    :content="relation.Note"
+                    placement="top"
+                    style="z-index: 3;position:relative;"
                   >
                     <i class="iconfont icon-warn icon"/>
                   </el-tooltip>
@@ -67,8 +67,8 @@
                     <div class="grid-content">
                       <p class="object">主要连接对象</p>
                       <el-tooltip
-                          :content="relation.ConneObject"
-                          placement="top"
+                        :content="relation.ConneObject"
+                        placement="top"
                       >
                         <p class="group reset-title">{{relation.ConneObject}}</p>
                       </el-tooltip>
@@ -85,61 +85,61 @@
                       <p :class="relation.count > 0? 'line-number-show' :'line-number-hide'">{{relation.count}}</p>
                       <p class="last-computed">
                         <span
-                            v-show="relation.ComputationalState === 3 || relation.ComputationalState === 4">关系计算中...</span>
+                          v-show="relation.ComputationalState === 3 || relation.ComputationalState === 4">关系计算中...</span>
                         <span v-show="relation.ComputationalState === 5">计算失败</span>
                         <span v-show="relation.ComputingTime">最后一次计算时间 {{relation.ComputingTime}}</span>
                         <el-tooltip
-                            content="启动计算"
-                            placement="top"
+                          content="启动计算"
+                          placement="top"
                         >
                           <el-badge
-                              class="item float-right"
-                              :is-dot="relation.ComputationalState === 2"
+                            class="item float-right"
+                            :is-dot="relation.ComputationalState === 2"
                           >
                             <el-button
-                                @click="computed(relation)"
-                                :disabled="!relation.IsSource && !relation.IsAutomatic"
-                                circle
-                                type="primary"
-                                plain
-                                icon="iconfont icon-changyongtubiao-mianxing-"
-                                class="sm-button"
+                              @click="computed(relation)"
+                              :disabled="!relation.IsSource && !relation.IsAutomatic"
+                              circle
+                              type="primary"
+                              plain
+                              icon="iconfont icon-changyongtubiao-mianxing-"
+                              class="sm-button"
                             >
                               <!--style="background: #000;color: #fff"-->
                             </el-button>
                           </el-badge>
                         </el-tooltip>
                         <el-tooltip
-                            content="手动编辑"
-                            placement="top"
+                          content="手动编辑"
+                          placement="top"
                         >
                           <el-button
-                              :disabled="relation.Manual === 1"
-                              :style="{'border':(relation.Manual=== 1? '1px solid #DCDFE6' :'')}"
-                              @click="manual(relation)"
-                              circle
-                              class="float-right sm-button"
-                              type="primary"
-                              plain
-                              icon="iconfont icon-bianji"
+                            :disabled="relation.Manual === 1"
+                            :style="{'border':(relation.Manual=== 1? '1px solid #DCDFE6' :'')}"
+                            @click="manual(relation)"
+                            circle
+                            class="float-right sm-button"
+                            type="primary"
+                            plain
+                            icon="iconfont icon-bianji"
 
                           >
                           </el-button>
 
                         </el-tooltip>
                         <el-tooltip
-                            content="设定设备对象源/末端"
-                            placement="top"
-                            v-if="relation.IsSource"
+                          content="设定设备对象源/末端"
+                          placement="top"
+                          v-if="relation.IsSource"
                         >
                           <el-button
-                              @click="equipment"
-                              type="primary"
-                              plain
-                              circle
-                              class="float-right sm-button"
-                              icon="iconfont icon-23 "
-                              style="transform: rotate(90deg);"
+                            @click="equipment"
+                            type="primary"
+                            plain
+                            circle
+                            class="float-right sm-button"
+                            icon="iconfont icon-23 "
+                            style="transform: rotate(90deg);"
                           >
                           </el-button>
                         </el-tooltip>
@@ -154,14 +154,14 @@
       </section>
     </div>
     <RelationMaintain
-        :values="values"
-        :source="source"
-        ref="maintain"
-        :isComputed="isComputed"
-        :ManualMaintenance="ManualMaintenance"
-        :TableVisibleMoreLoading="TableVisibleMoreLoading"
-        @openComputed="openComputed"
-        @RelationType="RelationType"
+      :values="values"
+      :source="source"
+      ref="maintain"
+      :isComputed="isComputed"
+      :ManualMaintenance="ManualMaintenance"
+      :TableVisibleMoreLoading="TableVisibleMoreLoading"
+      @openComputed="openComputed"
+      @RelationType="RelationType"
     />
   </div>
 
@@ -255,7 +255,10 @@
         if (Manual === 3) {
           if (relation.RelationType) {
             this.values = {...this.values, optionTips, lastTime}
-            this.$refs.maintain.dialogManualOption = true
+            // this.$refs.maintain.dialogManualOption = true //导出excel 弹窗
+            this.$router.push({
+              path:"relationShip"
+            })
           } else {
             this.$message.warning("设计中")
             return false
@@ -270,11 +273,13 @@
 
       //空间连接关系详情
       toDetail(detail){
-        this.$router.push({ 
+        return
+        this.$router.push({
           name: 'relationDetail',
-          query: { 
-            type: detail.GraphTypeCode
-          } 
+          query: {
+            type: detail.GraphTypeCode,
+            RelationTypeProjectList: detail.RelationTypeProjectList
+          }
         })
       }
     },

+ 6 - 1
src/components/relation/overview/Modal/RelationMaintain.vue

@@ -44,7 +44,7 @@
           </el-col>
           <el-col :span="8">
             <span class="demonstration">{{values.endEquipment}}</span>
-            <!--  v-model="filterOps"-->
+
             <el-cascader
                 :options="list"
                 v-model="filterOps"
@@ -117,6 +117,7 @@
             <i class="iconfont icon-doc-line"/>
             {{values.currentNum}} 0
           </p>
+
           <a :href="downloadProject('excel')">
             <el-button
                 type="primary"
@@ -278,6 +279,7 @@
       deepCopy(obj) {
         return JSON.parse(JSON.stringify(obj))
       },
+
       showCascader() {
         ++this.isResouceShow
         let copy = this.deepCopy(this.source)
@@ -316,6 +318,7 @@
       error(event, file, fileList) {
         this.dialogManualOption = true
         this.dialogProcess = true
+
       },
       errBack() {
         this.dialogProcess = false
@@ -324,6 +327,7 @@
         this.dialogProcess = false
         this.dialogManualOption = false
       },
+
       promptly() {
         if (this.isComputed.IsAutomatic && !this.isComputed.IsSource) { //需要自动计算并且不需要配置云末端
           this.$emit('RelationType', this.isComputed.RelationType, this.isComputed.ZoneType)
@@ -382,6 +386,7 @@
           });
           return false
         } else {
+
           if (this.resultOrigin.length || this.resultEnd.length) {
             this.resultOrigin.push(...this.resultEnd)
             this.$emit('openComputed', this.resultOrigin)

+ 195 - 0
src/components/relation/relationShip/Modal/addRelationShip.vue

@@ -0,0 +1,195 @@
+<template>
+  <div class="change-relation-ship">
+    <el-dialog
+      :title="values.addShip"
+      :visible.sync="addShipDialog"
+    >
+      <el-form
+        :model="ruleForm"
+        status-icon
+        :rules="rules"
+        ref="ruleForm"
+        label-width="100px"
+        class="demo-ruleForm"
+      >
+        <p class="mb-20 color-AAA">{{values.codeTip}}</p>
+        <el-form-item
+          :label="values.codeTitle"
+          prop="code"
+          class="mb-20"
+        >
+          <el-input
+            v-model="ruleForm.code"
+            autocomplete="off"
+            :placeholder="values.pleaseEnter"
+          />
+        </el-form-item>
+        <el-row class="mb-20">
+          <el-col :span="12">
+            <p class="mb-20">{{values.mainObject}}
+              <span class="fw-bold color-AAA">(包括:XXXX类型,XXXX类型)限制条件</span>
+            </p>
+            <el-form-item
+              prop="main"
+            >
+              <el-input
+                v-model="ruleForm.main"
+                autocomplete="off"
+                :placeholder="values.pleaseEnterCode"
+                :disabled="disabled"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <p class="mb-20">{{values.affiliatedObject}}
+              <span class="fw-bold color-AAA ">(包括:XXXX类型,XXXX类型)限制条件</span>
+            </p>
+            <el-form-item
+              v-for="(item,index) in ruleForm.codeList"
+              :key="index"
+              :prop="`codeList.${index}.value`"
+              :rules="rules.codeList"
+            >
+              <el-input
+                v-model="item.value"
+                :placeholder="values.pleaseEnterCode"
+                :disabled="disabled"
+
+              />
+              <el-button
+                @click.prevent="removeCode(item)"
+                icon="el-icon-circle-close"
+                type="text"
+                :disabled="disabled"
+
+              />
+            </el-form-item>
+            <el-form-item>
+              <el-button
+                @click="addCode"
+                icon="el-icon-circle-plus-outline"
+                style="width: 220px;"
+                :disabled="disabled"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-form-item>
+          <el-button
+            type="primary"
+            class="fr ml-20"
+            @click="submitForm('ruleForm')"
+          >{{values.add}}
+          </el-button>
+          <el-button
+            class="fr"
+            @click="addShipDialog = false"
+          >{{values.cancel}}
+          </el-button>
+        </el-form-item>
+
+      </el-form>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  export default {
+    name: "addRelationShip",
+    props: ['values'],
+    data() {
+      var checkCode = (rule, value, callback) => {
+        //TODO
+        callback()
+        this.disabled = false
+      }
+      var checkMain = (rule, value, callback) => {
+        //TODO
+        callback()
+      }
+      var codeList = (rule, value, callback) => {
+        //TODO
+        callback()
+      }
+      return {
+        addShipDialog: false,
+        disabled: true,
+        ruleForm: {
+          code: '',
+          main: '',
+          codeList: [{
+            value: ''
+          }]
+        },
+        rules: {
+          code: [
+            {required: true, message: '请输入对应识别编码', trigger: 'blur'},
+            {validator: checkCode, trigger: 'blur'}
+          ],
+          main: [
+            {required: true, message: '请输入对应识别编码', trigger: 'blur'},
+            {validator: checkMain, trigger: 'blur'}
+          ],
+          codeList: [
+            {required: true, message: '请输入对应识别编码', trigger: 'blur'},
+            {validator: codeList, trigger: 'blur'}
+          ]
+        }
+      }
+    },
+    methods: {
+      addCode() {
+        this.ruleForm.codeList.push({
+          value: '',
+          key: Date.now()
+        })
+      },
+      removeCode(item) {
+        var index = this.ruleForm.codeList.indexOf(item)
+        if (index !== -1) {
+          this.ruleForm.codeList.splice(index, 1)
+        }
+      },
+      submitForm(formName) {
+        this.$refs[formName].validate(valid => {
+          if (valid) {
+            this.addShipDialog = false
+            console.log('success')
+          } else {
+            console.log('error')
+            return false
+          }
+        })
+      }
+    }
+  }
+</script>
+
+<style scoped lang="less">
+  @color-text: #AAA;
+  .change-relation-ship {
+    /deep/ .el-form-item__label {
+      width: auto !important;
+    }
+
+    .fr {
+      float: right;
+    }
+
+    .mb-20 {
+      margin-bottom: 20px;
+    }
+
+    .ml-20 {
+      margin-left: 20px;
+    }
+
+    .color-AAA {
+      color: @color-text
+    }
+
+    .fw-bold {
+      font-weight: bold;
+    }
+  }
+</style>

+ 161 - 0
src/components/relation/relationShip/Modal/editRelationShip.vue

@@ -0,0 +1,161 @@
+<template>
+  <div class="change-relation-ship">
+    <el-dialog
+      :title="values.editShip"
+      :visible.sync="editShipDialog"
+    >
+      <el-form
+        :model="ruleForm"
+        status-icon
+        :rules="rules"
+        ref="ruleForm"
+        label-width="100px"
+        class="demo-ruleForm"
+      >
+        <p class="mb-20 color-AAA">{{values.deviceTip}}</p>
+        <el-row class="mb-20">
+          <el-col :span="12">
+            <p class="mb-20">{{values.mainObject}}
+              <span class="fw-bold color-AAA">(包括:XXXX类型,XXXX类型)限制条件</span>
+            </p>
+            <el-form-item>
+              <el-input
+                v-model="ruleForm.main"
+                autocomplete="off"
+                disabled
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <p class="mb-20">{{values.affiliatedObject}}
+              <span class="fw-bold color-AAA ">(包括:XXXX类型,XXXX类型)限制条件</span>
+            </p>
+            <el-form-item
+              v-for="(item,index) in ruleForm.codeList"
+              :key="index"
+              :prop="`codeList.${index}.value`"
+              :rules="rules.codeList"
+            >
+              <el-input
+                v-model="item.value"
+                :placeholder="values.pleaseEnterCode"
+
+              />
+              <el-button
+                @click.prevent="removeCode(item)"
+                icon="el-icon-circle-close"
+                type="text"
+              />
+            </el-form-item>
+            <el-form-item>
+              <el-button
+                @click="addCode"
+                icon="el-icon-circle-plus-outline"
+                style="width: 220px;"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-form-item>
+          <el-button>{{values.delete}}
+          </el-button>
+          <el-button
+            type="primary"
+            class="fr ml-20"
+            @click="submitForm('ruleForm')"
+          >{{values.add}}
+          </el-button>
+          <el-button
+            class="fr"
+            @click="editShipDialog = false"
+          >{{values.cancel}}
+          </el-button>
+        </el-form-item>
+
+      </el-form>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  export default {
+    name: "addRelationShip",
+    props: ['values'],
+    data() {
+      var codeList = (rule, value, callback) => {
+        //TODO
+        callback()
+      }
+      return {
+        editShipDialog: false,
+        ruleForm: {
+          code: '',
+          main: '',
+          codeList: [{
+            value: ''
+          }]
+        },
+        rules: {
+          codeList: [
+            {required: true, message: '请输入对应识别编码', trigger: 'blur'},
+            {validator: codeList, trigger: 'blur'}
+          ]
+        }
+      }
+    },
+    methods: {
+      addCode() {
+        this.ruleForm.codeList.push({
+          value: '',
+          key: Date.now()
+        })
+      },
+      removeCode(item) {
+        var index = this.ruleForm.codeList.indexOf(item)
+        if (index !== -1) {
+          this.ruleForm.codeList.splice(index, 1)
+        }
+      },
+      submitForm(formName) {
+        this.$refs[formName].validate(valid => {
+          if (valid) {
+            this.editShipDialog = false
+            console.log('success')
+          } else {
+            console.log('error')
+            return false
+          }
+        })
+      }
+    }
+  }
+</script>
+
+<style scoped lang="less">
+  @color-text: #AAA;
+  .change-relation-ship {
+    /deep/ .el-form-item__label {
+      width: auto !important;
+    }
+
+    .fr {
+      float: right;
+    }
+
+    .mb-20 {
+      margin-bottom: 20px;
+    }
+
+    .ml-20 {
+      margin-left: 20px;
+    }
+
+    .color-AAA {
+      color: @color-text
+    }
+
+    .fw-bold {
+      font-weight: bold;
+    }
+  }
+</style>

+ 204 - 0
src/components/relation/relationShip/Modal/exportExcel.vue

@@ -0,0 +1,204 @@
+<template>
+  <div class="export-excel">
+    <el-dialog
+      :title="values.relation_maintenance"
+      :visible.sync="dialogExport"
+    >
+      <p class="option-tip">{{values.optionTips}}</p>
+      <el-row :span="24">
+        <el-col :span="8">
+          <p>
+            <i class="iconfont icon-doc-line"/>
+            {{values.currentNum}} 0
+          </p>
+
+          <a :href="downloadProject('excel')">
+            <el-button
+              type="primary"
+              class="mt-10"
+            >
+              {{values.download}}
+            </el-button>
+          </a>
+        </el-col>
+        <el-col :span="10">
+          {{values.lastTime}}
+        </el-col>
+      </el-row>
+      <el-upload
+        class="upload-demo"
+        drag
+        action="/api/datacenter/graphic/import"
+        multiple
+        :show-file-list='false'
+        name="file"
+        :headers="headers"
+        :data="dataId"
+        :on-progress="progress"
+        :on-success="success"
+        :on-error="error"
+        accept="xlsx,xls"
+      >
+        <i class="el-icon-upload"/>
+        <div
+          class="el-upload__text"
+          v-html="values.uploadTxt"
+        />
+        <div class="upload__tip danger" slot="tip">{{ values.uploadTips}}</div>
+      </el-upload>
+    </el-dialog>
+    <!--手动编辑:手动维护.process结束-->
+    <el-dialog
+      :title="values.relation_maintenance"
+      :visible.sync="dialogProcess"
+    >
+      <div class="block">
+        <el-timeline>
+          <el-timeline-item
+            v-for="(activity, index) in activities"
+            :key="index"
+            :icon="activity.icon"
+            :type="activity.type"
+            :color="activity.color"
+            :size="activity.size"
+          >
+            {{activity.content}}
+          </el-timeline-item>
+        </el-timeline>
+      </div>
+      <!--            下载报告-->
+      <a :href="downloadProject('report')">
+        <el-button>{{values.downloadFile}}</el-button>
+      </a>
+      <footer
+        slot="footer"
+        class="dialog-footer "
+      >
+        <el-button @click="errBack">{{values.back}}</el-button>
+        <el-button
+          type="primary"
+          @click="finish"
+        >{{values.done}}
+        </el-button>
+      </footer>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import {mapGetters} from 'vuex'
+  import storage from '@/framework/utils/storage'
+
+  export default {
+    name: "exportExcel",
+    props: ['values'],
+    data() {
+      return {
+        dialogExport: false,
+        dialogProcess: false,
+        activities: [{
+          content: '数据文件处理中..',
+          size: 'large',
+          type: 'primary',
+          icon: 'el-icon-check',
+          color: '#0bbd87'
+        }, {
+          content: '数据处理成功',
+          color: '#0bbd87',
+          icon: 'el-icon-check',
+          size: 'large',
+          type: 'primary',
+        }],
+      }
+    },
+    computed: {
+      ...mapGetters('layout', ['projectId']),
+      headers() {
+        return {
+          'ProjectId': this.projectId,
+          'Comming': 'adm',
+          'Account': storage.get("user_name")
+        }
+      },
+      dataId() {
+        return {
+          // relType: this.ManualMaintenance.RelationType || '',
+          // zoneType: this.ManualMaintenance.ZoneType || '',
+          // projectId: this.projectId
+        }
+      },
+    },
+    methods: {
+      downloadProject(str) {
+        // let relType = this.ManualMaintenance.RelationType ? `?relType=${this.ManualMaintenance.RelationType}` : ''
+        // let zoneType = this.ManualMaintenance.ZoneType ? `&zoneType=${this.ManualMaintenance.ZoneType}` : ''
+        // let url;
+        // if (str === 'excel') {
+        //   relType = this.ManualMaintenance.RelationType ? `&relType=${this.ManualMaintenance.RelationType}` : ''
+        //   url = `/api/datacenter/graphic/export?code=对象ID${relType}${zoneType}`
+        // } else {
+        //   url = `/api/datacenter/graphic/report-downloads${relType}${zoneType}`
+        // }
+        // return url
+      },
+      progress(event, file, fileList) {
+        // console.log(event.file, fileList)
+      },
+      success(event, file, fileList) {
+        this.dialogExport = true
+        this.dialogProcess = true
+
+      },
+      error(event, file, fileList) {
+        this.dialogExport = true
+        this.dialogProcess = true
+
+      },
+      errBack() {
+        this.dialogProcess = false
+      },
+      finish() {
+        this.dialogProcess = false
+        this.dialogExport = false
+      },
+
+    }
+  }
+</script>
+
+<style scoped lang="less">
+  .export-excel {
+    .mt-10 {
+      margin-top: 10px;
+    }
+
+    .danger {
+      color: #d9001b;
+    }
+
+    .font-big {
+      font-weight: 600;
+    }
+
+
+    .exist-title {
+      font-size: 12px;
+      color: #AAAAAA;
+    }
+
+    .option-tip {
+      font-size: 18px;
+      font-weight: 600;
+    }
+
+    .upload-demo {
+      margin: 20px 0;
+
+    }
+
+    /deep/ .el-upload-dragger {
+      width: 600px;
+      margin: 0 auto;
+    }
+  }
+</style>

+ 3 - 1
src/router/system.js

@@ -82,6 +82,7 @@ import relatedSpace from '@/views/ledger/cenotelist/relatedSpace'
 /**  关系维护并计算 */
 import maintain from '@/views/relation/maintain'
 import overView from '@/views/relation/overview'
+import relationShip from '@/views/relation/relationShip'
 import relationDetail from '@/views/relation/overview/detail'
 import data from '@/views/relation/data'
 import datatable from '@/views/relation/datatable'
@@ -487,7 +488,8 @@ export default [{
         children: [
             { path: 'maintain', name: 'maintain', component: maintain, meta: { keepAlive: false, breadcrumbs: [{ label: '关系维护' }] } },
             { path: 'overview', name: 'overView', component: overView, meta: { keepAlive: false, breadcrumbs: [{ label: '关系维护计算' },{ label: '全部关系总览' }] } },
-            { path: 'relationDetail', name: 'relationDetail', component: relationDetail, meta: { keepAlive: false, breadcrumbs: [{ label: '全部关系总览',path:'/relation/overview' },{ label: '关系详情' }] } },
+            { path: 'relationShip', name: 'relationShip', component: relationShip, meta: { keepAlive: false, breadcrumbs: [{ label: '关系维护计算' },{ label: '全部关系总览' }] } },
+            { path: 'relationDetail', name: 'relationDetail', component: relationDetail, meta: { keepAlive: false, breadcrumbs: [{ label: '关系维护计算' },{ label: '关系详情' }] } },
             { path: 'data', name: 'data', component: data, meta: { keepAlive: false, breadcrumbs: [{ label: '项目数据转换',path:'/relation/data' },{ label: '项目数据转换',path:'/relation/data' }] } },
             { path: 'datatable', name: 'datatable', component: datatable}
             ]

+ 8 - 0
src/views/ledger/spacelist/index.vue

@@ -179,6 +179,14 @@ export default {
           }
           return t;
         }).filter(item => item);
+        this.tabsList.push({
+          Code: "other",
+          CreateTime: "2019-06-04 14:48:39",
+          LastUpdate: "2019-06-04 14:48:39",
+          Name: "其他",
+          ObjectType: null,
+          ParentId: "Other"
+        })
         if (this.childBackParam.zone) {
           this.activeName = this.childBackParam.zone;
           this.buildFloorSelectd = this.childBackParam.buildFloorSelectd;

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

@@ -351,7 +351,7 @@ export default {
         this.loading = false;
       })
     },
-    del() {// 点击需从模型中删除的设备  
+    del() {// 点击需从模型中删除的设备
       let equipComDelList = encodeURIComponent(JSON.stringify(this.equipComDelList));
       let jumpRouter = this.$router.resolve({ path: '/model/report/deleted', query: { equipComDelList: equipComDelList } })
       window.open(jumpRouter.href, '_blank')
@@ -489,4 +489,4 @@ export default {
     background: #f3f3f3 !important;
   }
 }
-</style>
+</style>

+ 496 - 0
src/views/relation/relationShip/index.vue

@@ -0,0 +1,496 @@
+<template>
+  <div class="relation-ship">
+    <section style="margin-top: 20px">
+      <el-button
+        style="padding: 10px"
+        icon="el-icon-back"
+        @click="back"
+      />
+      <el-button
+        type="primary"
+        @click="addBtn"
+      >添加关系
+      </el-button>
+      <el-button
+        type="default"
+        style="float: right"
+        @click="excel"
+      >
+        Excel导出
+      </el-button>
+    </section>
+    <section>
+      <el-row>
+        <el-col :span="12">
+          <p class="border-left-8">主对象
+            <span>限制条件:对象类型的范围(包括:XXXX类型,XXXX类型)</span></p>
+          <label>所属建筑楼层:</label>
+          <el-select v-model="buildValue">
+            <el-option
+              v-for="item in options"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            />
+          </el-select>
+          <label>类型:</label>
+          <el-cascader
+            :options="typeList"
+            :props="props"
+            collapse-tags
+            clearable
+          />
+          <el-input
+            placeholder="请输入"
+            v-model="deviceName"
+            @keyup.enter.native="queryTable"
+          >
+            <i
+              slot="suffix"
+              class="el-input__icon el-icon-search cursor"
+              @click="queryTable"
+            />
+          </el-input>
+        </el-col>
+        <el-col :span="12">
+          <p class="border-left-8">从对象
+            <span>(包括:XXXX类型,XXXX类型)</span></p>
+          <label>所属建筑楼层:</label>
+          <el-select v-model="buildValue">
+            <el-option
+              v-for="item in options"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            />
+          </el-select>
+          <label>类型:</label>
+          <el-cascader
+            :options="typeList"
+            :props="props"
+            collapse-tags
+            clearable
+          />
+          <el-input
+            placeholder="请输入"
+            v-model="deviceName"
+            @keyup.enter.native="queryTable"
+          >
+            <i
+              slot="suffix"
+              class="el-input__icon el-icon-search cursor"
+              @click="queryTable"
+            />
+          </el-input>
+        </el-col>
+      </el-row>
+
+    </section>
+    <section class="table-list">
+      <el-table
+        :data="tableData"
+        :span-method="objectSpanMethod"
+        border
+        :header-cell-style="{background:'#eef1f6',color:'#606266', lineHeight: '30px'}"
+        :cell-style="cellStyle"
+        class="table"
+      >
+        <el-table-column
+          prop="id"
+          label="全局名称"
+          width="180"
+          align="center"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="name"
+          label="本地编码"
+          align="center"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="amount1"
+          label="本地名称"
+          align="center"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="amount2"
+          label="CADID"
+          align="center"
+        >
+        </el-table-column>
+        <el-table-column
+          label="对象详情"
+          align="center"
+        >
+          <template slot-scope="scope">
+            <el-button
+              type="text"
+              size="mini"
+              @click="lookOver(scope.$index, scope.row)">查看
+            </el-button>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="ids"
+          label="全局名称"
+          width="180"
+          align="center"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="names"
+          align="center"
+          label="本地编码"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="amount11"
+          label="本地名称"
+          align="center"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="amount22"
+          label="CADID"
+          align="center"
+        >
+        </el-table-column>
+        <el-table-column
+          label="对象详情"
+          align="center"
+        >
+          <template slot-scope="scope">
+            <el-button
+              type="text"
+              size="mini"
+              @click="lookOver(scope.$index, scope.row)">查看
+            </el-button>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="操作"
+          align="center"
+        >
+          <template slot-scope="scope">
+            <el-button
+              size="mini"
+              icon="el-icon-edit-outline"
+              @click="lookOver(scope.$index, scope.row)">
+            </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </section>
+    <exportExcel
+      ref="export"
+      :values="values"
+    />
+    <addRelationShip
+      ref="addShipComponent"
+      :values="values"
+    />
+    <editRelationShip
+      ref="editShipComponent"
+      :values="values"
+    />
+  </div>
+</template>
+
+<script>
+  import {mapActions, mapGetters, mapState} from 'vuex'
+  import exportExcel from "../../../components/relation/relationShip/Modal/exportExcel";
+  import addRelationShip from "../../../components/relation/relationShip/Modal/addRelationShip";
+  import editRelationShip from "../../../components/relation/relationShip/Modal/editRelationShip";
+
+  export default {
+    name: "index",
+    data() {
+      return {
+        values: {
+          relation_maintenance: '关系维护',
+          optionTips: '请下载最新最新 xxxx 数据进行手动维护', //请下载最新最新 xxxx 数据进行手动维护
+          currentNum: '当前关系数量:',
+          download: '下载模板(含数据)',
+          lastTime: '最后更新时间为', //最后更新时间为
+          uploadTxt: '将Excel文件拖到此处,或<em>单击上传Excel文件<em>',
+          uploadTips: '上传的Excel数据将完全覆盖当前关系表(关系表先前数据不会保留)',
+          downloadFile: ' 下载报告文件',
+          back: '返回',
+          done: '完成',
+          addShip: '添加关系',
+          editShip: '编辑关系',
+          codeTip: '请填写主被控设备对象识别编码',
+          deviceTip: '请填写主被控设备对象设备号',
+          codeTitle: '识别编码对应:',
+          mainObject: '主对象:',
+          affiliatedObject: '从对象:',
+          pleaseEnter: '请输入',
+          pleaseEnterCode: '请输入识别编码',
+          add: '添加',
+          cancel: '取消',
+          delete: '删除关系'
+        },
+        options: [
+          {
+            value: 'all',
+            label: '全选'
+          }, {
+            value: '选项2',
+            label: '双皮奶'
+          }, {
+            value: '选项3',
+            label: '蚵仔煎'
+          }, {
+            value: '选项4',
+            label: '龙须面'
+          }, {
+            value: '选项5',
+            label: '北京烤鸭'
+          }],
+        buildValue: 'all',
+        props: {multiple: true},
+        typeList: [{
+          value: 1,
+          label: '东南',
+          children: [
+            {
+              value: 2,
+              label: '上海',
+            }, {
+              value: 7,
+              label: '江苏',
+            }, {
+              value: 12,
+              label: '浙江',
+            }]
+        }, {
+          value: 17,
+          label: '西北',
+          children: [{
+            value: 18,
+            label: '陕西',
+          }, {
+            value: 21,
+            label: '新疆维吾尔族自治区',
+          }]
+        }],
+        deviceName: "",
+        tableData: [
+          {
+            id: '12987122',
+            name: '王小虎',
+            amount1: '234',
+            amount2: '3.2',
+            amount3: 10,
+            ids: '12987122',
+            names: '王小虎',
+            amount11: '234',
+            amount22: '3.2',
+          }, {
+            id: '12987122',
+            name: '王小虎',
+            amount1: '234',
+            amount2: '3.2',
+            amount3: 10,
+            ids: '12987122',
+            names: '王小虎',
+            amount11: '234',
+            amount22: '3.2',
+          }, {
+            id: '12987122',
+            name: '王小虎',
+            amount1: '234',
+            amount2: '3.2',
+            amount3: 10,
+            ids: '12987122',
+            names: '王小虎',
+            amount11: '234',
+            amount22: '3.2',
+          }, {
+            id: '12987122',
+            name: '王小虎',
+            amount1: '234',
+            amount2: '3.2',
+            amount3: 10,
+            ids: '12987122',
+            names: '王小虎',
+            amount11: '234',
+            amount22: '3.2',
+          }, {
+            id: '12987122',
+            name: '王小虎',
+            amount1: '234',
+            amount2: '3.2',
+            amount3: 10,
+            ids: '12987122',
+            names: '王小虎',
+            amount11: '234',
+            amount22: '3.2',
+          }, {
+            id: '129871225',
+            name: '王小虎',
+            amount1: '621',
+            amount2: '2.2',
+            amount3: 17,
+            ids: '12987125',
+            names: '王小虎',
+            amount11: '621',
+            amount22: '2.2',
+          },
+          {
+            id: '129871225',
+            name: '王小虎',
+            amount1: '621',
+            amount2: '2.2',
+            amount3: 17,
+            ids: '12987124',
+            names: '小虎',
+            amount11: '324',
+            amount22: '1.9',
+          }, {
+            id: '1298712w25',
+            name: '小虎',
+            amount1: '621',
+            amount2: '2.2',
+            amount3: 17,
+            ids: '12987125',
+            names: '小虎',
+            amount11: '621',
+            amount22: '2.2',
+          }],
+        spanArr: [], // 一个空的数组,用于存放每一行记录的合并数
+        pos: 0, // spanArr 的索引
+      }
+    },
+    components: {exportExcel, addRelationShip, editRelationShip},
+    created() {
+      this.$store.dispatch('setBreadcrumb', [{
+        label: '全部关系总览',
+        path: '/relation/overview'
+      }, {
+        label: '全部关系总览',
+        path: '/relation/overview'
+      },
+        {
+          label: '设备控制关系',
+        },
+      ])
+    },
+    mounted() {
+      this.getSpanArr(this.tableData)
+    },
+    methods: {
+      back() {
+        this.$router.go(-1)
+      },
+      addBtn() {
+        this.$refs.addShipComponent.addShipDialog = true
+      },
+      excel() {
+        this.$refs.export.dialogExport = true
+      },
+      queryTable() {
+      },
+
+      lookOver(index, row) {
+        console.log(index, row)
+        this.$refs.editShipComponent.editShipDialog = true
+      },
+
+      cellStyle({row, column, rowIndex, columnIndex}) {
+        if (column.label === '全局名称') {
+          return {
+            background: '#f9f9f9',
+            color: '#606266',
+            lineHeight: '30px'
+          }
+        }
+      },
+      getSpanArr(data) {
+        for (let i = 0; i < data.length; i++) {
+          if (i === 0) {
+            this.spanArr.push(1);
+            this.pos = 0;
+
+          } else {
+            if (
+              data[i].id === data[i - 1].id &&
+              data[i].name === data[i - 1].name &&
+              data[i].amount2 === data[i - 1].amount2 &&
+              data[i].amount1 === data[i - 1].amount1
+
+            ) {
+              this.spanArr[this.pos] += 1;
+              this.spanArr.push(0);
+            } else {
+              this.spanArr.push(1);
+              this.pos = i;
+            }
+          }
+        }
+      },
+      objectSpanMethod({row, column, rowIndex, columnIndex}) {
+        if (columnIndex === 1 || columnIndex === 2 || columnIndex === 3) {
+          const _row = this.spanArr[rowIndex];
+          const _col = _row > 0 ? 1 : 0;
+          return {
+            rowspan: _row,
+            colspan: _col
+          };
+        }
+
+      },
+    }
+  }
+</script>
+
+<style scoped lang="less">
+  .relation-ship {
+    .cursor {
+      cursor: pointer;
+    }
+
+    /deep/ .el-input__inner {
+      width: 220px;
+    }
+
+    /deep/ .el-input {
+      width: auto;
+    }
+
+    .table-list {
+      width: 100%;
+      display: block;
+      /*height: calc(100% - 71px);*/
+    }
+
+    .table {
+      width: 100%;
+      margin-top: 20px;
+
+      .el-button {
+        border: none;
+        background: transparent;
+
+        &:link, &:visited, &:hover, &:active {
+          background: #f5f7fa;
+        }
+      }
+    }
+
+    .border-left-8 {
+      border-left: 8px solid black;
+      margin: 10px 0;
+      font-weight: 600;
+      text-indent: 10px;
+
+      span {
+        color: #AAAAAA;
+        margin-left: 20px;
+      }
+    }
+
+  }
+</style>