Browse Source

Merge branch 'master' into dev_duxiangyu

duxiangyu 3 years ago
parent
commit
2e8d8a9844
38 changed files with 1377 additions and 4020 deletions
  1. BIN
      padm/favicon.ico
  2. 0 3
      padm/index.html
  3. 0 102
      padm/public/css/chunk-vendors.edf142db.css
  4. 0 2
      padm/public/css/index.4c03d5e7.css
  5. BIN
      padm/public/fonts/element-icons.535877f5.woff
  6. BIN
      padm/public/fonts/element-icons.732389de.ttf
  7. BIN
      padm/public/fonts/fontawesome-webfont.674f50d2.eot
  8. BIN
      padm/public/fonts/fontawesome-webfont.af7ae505.woff2
  9. BIN
      padm/public/fonts/fontawesome-webfont.b06871f2.ttf
  10. BIN
      padm/public/fonts/fontawesome-webfont.fee66e71.woff
  11. BIN
      padm/public/fonts/iconfont.413770c1.woff
  12. BIN
      padm/public/fonts/iconfont.8486c8af.ttf
  13. BIN
      padm/public/fonts/iconfont.a9f43e82.woff2
  14. 0 5
      padm/public/img/barController.1b36802b.svg
  15. 0 30
      padm/public/img/editLogo.18652260.svg
  16. 0 4
      padm/public/img/fontStyle.a57fbf8b.svg
  17. 0 2671
      padm/public/img/fontawesome-webfont.912ec66d.svg
  18. BIN
      padm/public/img/login_bg.2d60ec49.png
  19. BIN
      padm/public/img/logo.87be7c6e.png
  20. 0 1110
      padm/public/js/chunk-vendors.6cdf1e69.js
  21. 0 1
      padm/public/js/chunk-vendors.6cdf1e69.js.map
  22. 0 2
      padm/public/js/index.bd3e0adf.js
  23. 0 1
      padm/public/js/index.bd3e0adf.js.map
  24. 0 70
      padm/systemConf.js
  25. 7 7
      public/systemConf.js
  26. 7 3
      src/components/old-adm/ledger/components/lib/system.vue
  27. 297 0
      src/components/old-adm/relation/components/relationShip/Modal/addRelationShip.vue
  28. 161 0
      src/components/old-adm/relation/components/relationShip/Modal/editRelationShip.vue
  29. 301 0
      src/components/old-adm/relation/components/relationShip/Modal/exportExcel.vue
  30. 27 2
      src/components/old-adm/relation/overview/index.vue
  31. 503 0
      src/components/old-adm/relation/relationShip/index.vue
  32. 11 0
      src/controller/old-adm/businessSpaceController.ts
  33. 40 0
      src/controller/old-adm/relationController.ts
  34. 4 4
      src/controller/userController.ts
  35. 6 0
      src/router/system.js
  36. 11 0
      src/utils/http/admServerHttpUtils.ts
  37. 1 2
      src/utils/http/middlewareHttpUtils.ts
  38. 1 1
      src/utils/http/sysGraphHttpUtils.ts

BIN
padm/favicon.ico


File diff suppressed because it is too large
+ 0 - 3
padm/index.html


File diff suppressed because it is too large
+ 0 - 102
padm/public/css/chunk-vendors.edf142db.css


File diff suppressed because it is too large
+ 0 - 2
padm/public/css/index.4c03d5e7.css


BIN
padm/public/fonts/element-icons.535877f5.woff


BIN
padm/public/fonts/element-icons.732389de.ttf


BIN
padm/public/fonts/fontawesome-webfont.674f50d2.eot


BIN
padm/public/fonts/fontawesome-webfont.af7ae505.woff2


BIN
padm/public/fonts/fontawesome-webfont.b06871f2.ttf


BIN
padm/public/fonts/fontawesome-webfont.fee66e71.woff


BIN
padm/public/fonts/iconfont.413770c1.woff


BIN
padm/public/fonts/iconfont.8486c8af.ttf


BIN
padm/public/fonts/iconfont.a9f43e82.woff2


+ 0 - 5
padm/public/img/barController.1b36802b.svg

@@ -1,5 +0,0 @@
-<svg width="17" height="17" viewBox="0 0 17 17" fill="none" xmlns="http://www.w3.org/2000/svg">
-<rect x="0.5" y="0.5" width="16" height="16" fill="white" stroke="black"/>
-<rect x="10.5" y="4.5" width="6" height="12" fill="#C4C4C4" stroke="black"/>
-<rect x="0.5" y="0.5" width="16" height="4" fill="white" stroke="black"/>
-</svg>

+ 0 - 30
padm/public/img/editLogo.18652260.svg

@@ -1,30 +0,0 @@
-<svg width="28" height="24" viewBox="0 0 28 24" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M20.1162 1.09209e-05L15.3643 2.77225L15.5898 3.16346L20.3417 0.391226L20.1162 1.09209e-05Z" fill="#D7282F"/>
-<path d="M10.0102 0.00033932L9.78467 0.39151L14.536 3.1643L14.7616 2.77313L10.0102 0.00033932Z" fill="#D7282F"/>
-<path d="M27.7745 3.86746L6.90234 16.0153L7.12797 16.4076L28.0001 4.25976L27.7745 3.86746Z" fill="#D7282F"/>
-<path d="M17.4608 11.4016L12.135 14.4881L12.3594 14.88L17.6852 11.7934L17.4608 11.4016Z" fill="#D7282F"/>
-<path d="M27.7628 5.40641L18.7805 10.6234L19.0053 11.0151L27.9876 5.79803L27.7628 5.40641Z" fill="#D7282F"/>
-<path d="M26.9589 9.45151L26.7332 9.06032L27.7685 8.46503L27.9942 8.85722L26.9589 9.45151Z" fill="#D7282F"/>
-<path d="M25.3885 9.8532L16.1013 15.2473L16.3261 15.6389L25.6133 10.2448L25.3885 9.8532Z" fill="#D7282F"/>
-<path d="M16.1121 13.7095L6.96094 19.0246L7.18571 19.4162L16.3368 14.1011L16.1121 13.7095Z" fill="#D7282F"/>
-<path d="M10.7941 15.2539L6.97852 17.502L7.20621 17.8931L11.0218 15.645L10.7941 15.2539Z" fill="#D7282F"/>
-<path d="M17.6579 13.3264L17.4331 12.9352L22.7351 9.8627L22.9608 10.2549L17.6579 13.3264Z" fill="#D7282F"/>
-<path d="M14.7606 16.0117L6.94482 20.5695L7.17077 20.9616L14.9865 16.4038L14.7606 16.0117Z" fill="#D7282F"/>
-<path d="M12.1062 19.0932L6.93921 22.0867L7.16407 22.4795L12.331 19.4859L12.1062 19.0932Z" fill="#D7282F"/>
-<path d="M21.3304 13.7345L13.4404 18.3265L13.6661 18.7188L21.5561 14.1268L21.3304 13.7345Z" fill="#D7282F"/>
-<path d="M27.7669 11.528L6.96777 23.6084L7.19254 24L27.9916 11.9196L27.7669 11.528Z" fill="#D7282F"/>
-<path d="M0.239302 11.972L0.0148926 12.365L6.61638 16.1798L6.84079 15.7868L0.239302 11.972Z" fill="#D7282F"/>
-<path d="M0.255004 13.5367L0.0314941 13.9291L6.62288 17.7285L6.84639 17.3361L0.255004 13.5367Z" fill="#D7282F"/>
-<path d="M0.235106 15.0512L0.0107422 15.443L6.60507 19.264L6.82944 18.8721L0.235106 15.0512Z" fill="#D7282F"/>
-<path d="M0.241988 16.6031L0.0175781 16.9961L6.60527 20.8029L6.82967 20.41L0.241988 16.6031Z" fill="#D7282F"/>
-<path d="M0.250044 18.1434L0.0256348 18.5353L6.626 22.3605L6.85041 21.9687L0.250044 18.1434Z" fill="#D7282F"/>
-<path d="M0.242251 19.6809L0.0180664 20.0741L6.62615 23.8875L6.85033 23.4944L0.242251 19.6809Z" fill="#D7282F"/>
-<path d="M0.23866 2.72583L0.0141602 3.11877L7.37713 7.37583L7.60163 6.98289L0.23866 2.72583Z" fill="#D7282F"/>
-<path d="M0.235126 4.26478L0.0109863 4.65677L6.05156 8.15216L6.2757 7.76018L0.235126 4.26478Z" fill="#D7282F"/>
-<path d="M0.227294 5.80197L0.00292969 6.19382L4.72461 8.92972L4.94898 8.53787L0.227294 5.80197Z" fill="#D7282F"/>
-<path d="M0.224641 7.34609L0.0012207 7.73853L3.39309 9.69269L3.61651 9.30025L0.224641 7.34609Z" fill="#D7282F"/>
-<path d="M0.241048 8.89908L0.0141602 9.29062L2.05904 10.4898L2.28593 10.0982L0.241048 8.89908Z" fill="#D7282F"/>
-<path d="M0.228994 10.4239L0 10.813L0.745412 11.2569L0.974406 10.8678L0.228994 10.4239Z" fill="#D7282F"/>
-<path d="M24.3214 9.46151L24.0967 9.06932L27.7686 6.93729L27.9943 7.32948L24.3214 9.46151Z" fill="#D7282F"/>
-<path d="M27.7535 9.99776L22.5955 13.0057L22.8214 13.3978L27.9794 10.3898L27.7535 9.99776Z" fill="#D7282F"/>
-</svg>

File diff suppressed because it is too large
+ 0 - 4
padm/public/img/fontStyle.a57fbf8b.svg


File diff suppressed because it is too large
+ 0 - 2671
padm/public/img/fontawesome-webfont.912ec66d.svg


BIN
padm/public/img/login_bg.2d60ec49.png


BIN
padm/public/img/logo.87be7c6e.png


File diff suppressed because it is too large
+ 0 - 1110
padm/public/js/chunk-vendors.6cdf1e69.js


File diff suppressed because it is too large
+ 0 - 1
padm/public/js/chunk-vendors.6cdf1e69.js.map


File diff suppressed because it is too large
+ 0 - 2
padm/public/js/index.bd3e0adf.js


File diff suppressed because it is too large
+ 0 - 1
padm/public/js/index.bd3e0adf.js.map


+ 0 - 70
padm/systemConf.js

@@ -1,70 +0,0 @@
-var __systemConf = {
-  //基础数据根域名
-  baseServiceUrl: '/baseService',
-  //系统图服务域名
-  sysGraphServiceUrl: '/sysGraphService',
-  // 地图key
-  mapKey: 'd42beb96e0e4fb0d49482975abeae1b7',
-  //导航菜单
-  menus: [{
-    "id": "ready",
-    "name": "信息录入工具",
-    "orders": 1,
-    child: [{
-      "id": "build_floor",
-      "name": "建筑楼层管理",
-      "orders": 2,
-      "url": "/ready/buildfloor",
-      "type": "menu",
-      "icon": "icon-jianzhu"
-    },{
-      "id": "equipment",
-      "name": "设备台账",
-      "orders": 3,
-      "url": "/ledger/facility"
-    },
-    {
-      "id": "system",
-      "name": "系统台账",
-      "orders": 4,
-      "url": "/ledger/list"
-    },{
-      "id": "overview",
-      "name": "全部关系总览",
-      "orders": 5,
-      "url": "/relation/overview",
-      "icon": "icon-jiqixuexi-"
-    }
-    ,{
-      "id": "projectmanage",
-      "name": "项目信息管理",
-      "orders": 6,
-      "url": "/project/manage",
-      "icon": "icon-jiqixuexi-"
-    }
-  ]
-  }, {
-    "id": "xianchangjiaofugongjv",
-    "name": "现场交付工具",
-    "orders": 6,
-    child: [{
-      "id": "CADtuzhiguanli",
-      "name": "CAD核查图纸管理",
-      "orders": 7,
-      "url": "/deliveryTools/cadDrawingManage",
-      "icon": "icon-topology"
-    }]
-  }, {
-    "id": "draw",
-    "name": "绘图工具",
-    "orders": 8,
-    child: [{
-      "id": "xitongtubianji",
-      "name": "系统图编辑工具",
-      "orders": 9,
-      "url": "/systemGraph",
-      "icon": "icon-topology"
-    }]
-  }]
-};
-window.__systemConf = __systemConf;

+ 7 - 7
public/systemConf.js

@@ -1,14 +1,14 @@
 var __systemConf = {
   //路由根路径
   baseRouteUrl: 'adm-frontend',
-  //基础数据根域名
+  //基础数据根域名,不到万不得已不要使用这个,其可以灵活结合服务路径去使用
   baseServiceUrl: 'http://develop.ysbdtp.com',
-  //系统图服务域名
-  sysGraphServiceUrl: 'http://develop.ysbdtp.com/adm-diagram',
-  //中间件服务域名
-  middlewareServiceUrl: '/middleService',
-  //登录服务域名
-  loginServiceUrl: 'http://develop.ysbdtp.com/adm-server',
+  //adm-middleware服务,支持绝大部分的adm功能
+  middlewareServiceUrl: 'http://develop.ysbdtp.com/adm-middleware',
+  //adm-diagram服务,支持系统图相关功能
+  diagramServiceUrl: 'http://develop.ysbdtp.com/adm-diagram',
+  //adm-server服务,支持登录等功能
+  admServiceUrl: 'http://develop.ysbdtp.com/adm-server',
   //文件服务域名
   fileServiceUrl: 'http://develop.ysbdtp.com/dmp-file',
   // 地图key

+ 7 - 3
src/components/old-adm/ledger/components/lib/system.vue

@@ -122,14 +122,18 @@ export default {
     changeArr(arr) {
       let data = [];
       arr.forEach(item => {
-        data.push({ classCode: item.classCode || item.code, categoryName: item.categoryName || item.name });
+        data.push({ 
+          classCode: item.classCode || item.code, 
+          categoryName: item.categoryName || item.name,
+          isDelivery: item?.isDelivery
+        });
       });
       // console.log(data, 'data')
       return data;
     },
     deliverChange(val) {
-      this.query = {...this.query, isDelivery: val ? 'Visible' : 'all'};
-      this.options = val ? this.full_options.filter(item => item?.isDelivery) : this.full_options;
+      this.query = {...this.query, isDelivery: val ? 'Visible' : 'all'}; 
+      this.options = val ? this.full_options.filter(item => item?.isDelivery === 1) : this.full_options;   
       this.$emit("change", this.query)
     }
   }

+ 297 - 0
src/components/old-adm/relation/components/relationShip/Modal/addRelationShip.vue

@@ -0,0 +1,297 @@
+<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"
+      >
+        <div style="display: flex;justify-content: flex-end; margin-right: 24px">
+          <el-checkbox v-model="isDelivery" @change="getData">仅项目交付范围内</el-checkbox>
+        </div>
+        <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-form-item
+          :label="values.codeTitle"
+          class="mb-20"
+        >
+          <el-select v-model="codeValue" placeholder="请选择">
+            <el-option
+              v-for="item in optionsCode"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-row class="mb-20">
+          <el-col :span="12">
+            <p class="mb-20">{{values.mainObject}}
+              <span class="fw-bold color-AAA">{{MainObject}}</span>
+            </p>
+            <el-form-item
+              prop="main"
+              :error="mainError"
+            >
+              <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 ">{{FromObject}}</span>
+            </p>
+            <el-form-item
+              v-for="(item,index) in ruleForm.codeList"
+              style="margin-bottom: 26px;"
+              :key="index"
+              :prop="`codeList.${index}.value`"
+              :rules="rules.codeList"
+              :error="item.fromError"
+            >
+              <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>
+// import {} from "../../../../api/relation/api";
+import Relation from '@/controller/old-adm/relationController'
+const { relAdd } = Relation
+
+export default {
+  name: "addRelationShip",
+  props: ['values'],
+  data() {
+    var checkCode = (rule, value, callback) => {
+      //TODO
+      callback()
+    }
+    var checkMain = (rule, value, callback) => {
+      //TODO
+      callback()
+      }
+      var codeList = (rule, value, callback) => {
+        //TODO
+        console.log(value)
+        callback()
+      }
+      return {
+        isDelivery: true, //默认选择项目交付范围内
+        mainError:'',
+        fromError:'',
+        addShipDialog: false,
+        // disabled: true,
+        optionsCode: [{
+          value: 'cadId',
+          label: 'CADID图纸编码'
+        }, {
+          value: 'name',
+          label: '名称'
+        }, {
+          value: 'id',
+          label: 'ID'
+        }, {
+          value: 'localId',
+          label: '本地编码'
+        }, {
+          value: 'localName',
+          label: '本地名称'
+        }],
+        codeValue: '',
+        MainObject: `(限制条件:${localStorage.getItem('MainObject') || '无'} )`,
+        FromObject: `(限制条件:${localStorage.getItem('FromObject') || '无'} )`,
+        ruleForm: {
+          main: '',
+          codeList: [{
+            value: '',
+            fromError: '',
+            key: +new Date()
+          }]
+        },
+        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'}
+          ]
+        }
+      }
+    },
+    computed:{
+      disabled() {
+        return this.codeValue === '' ? 'disabled':false
+      },
+
+    },
+    watch:{},
+    methods: {
+      addCode() {
+        this.ruleForm.codeList.push({
+          value: '',
+          key: Date.now(),
+          fromError: ''
+        })
+      },
+      removeCode(item) {
+        var index = this.ruleForm.codeList.indexOf(item)
+        if (index !== -1) {
+          this.ruleForm.codeList.splice(index, 1)
+        }
+      },
+      submitForm(formName) {
+        this.$refs[formName].validate( async valid => {
+          console.log(valid,'valid')
+          if (valid) {
+            let arr = []
+            for(let item  of this.ruleForm.codeList) {
+              item.fromError = ''
+              if(item.value) {
+                arr = arr.concat(item.value)
+              }
+            }
+            let param = {
+              fromContent:arr,
+              mainContent:this.ruleForm.main,
+              relType:localStorage.getItem('RelManualType'),
+              type:this.codeValue,
+              isDelivery: this.isDelivery ? 1 : 0
+            }
+            //清空添加value
+            let that = this
+            const res = await relAdd(param)
+            if (res.result === "failure") {
+              
+              if(res.errorType == 1) {
+                // this.mainError = res.data.Message
+                this.$nextTick(()=>{this.mainError = res.message})
+              } else if(res.errorType == 2) {
+                const str = res.message.split(':')
+                this.$nextTick(()=>{
+                  this.ruleForm.codeList.forEach(t => {
+                    if (str.length > 1 && t.value == str[0]) {
+                      t.fromError = res.message;
+                      t.key = +new Date()
+                    }
+                  })
+                })
+              } else {
+                this.$message.error(res.message);
+              }
+
+            } else if (res.result === "success") {
+              this.$message.success(res.message);
+              this.$emit('update')
+              that.addShipDialog = false
+              that.codeValue = ''
+              that.ruleForm.codeList = [{value:''}]
+              that.ruleForm.main = ''
+            }
+            
+
+          } 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/old-adm/relation/components/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>

+ 301 - 0
src/components/old-adm/relation/components/relationShip/Modal/exportExcel.vue

@@ -0,0 +1,301 @@
+<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}}{{graphicTypeNum}}
+          </p>
+
+          <a :href="downloadProject('excel')" download target="_self">
+
+            <!--          <a :href=`${baseUrl}${dataCenter}/graphic/export?code=对象ID${localStorage.getItem('RelationType')?relType=${localStorage.getItem('RelationType')} : null}${ localStorage.getItem('ZoneType') ? `&zoneType=${localStorage.getItem('ZoneType')}` : null}` >-->
+            <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
+        v-loading="loading"
+        class="upload-demo"
+        :drag="true"
+        :action="`${baseUrl}${dataCenter}/graphic/import`"
+        multiple
+        :show-file-list='false'
+        name="file"
+        :headers="headers"
+        :data="dataId"
+        :before-upload="beforeUpload"
+        :on-progress="progress"
+        :on-success="success"
+        :on-error="error"
+      >
+        <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> -->
+      <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 '@/utils/storageUtil'
+import Relation from '@/controller/old-adm/relationController'
+const { graphicTypeNumber } = Relation
+import Scan  from '@/utils/scanUtil'
+const { baseUril:baseUrl, datacenter:dataCenter } = Scan
+
+export default {
+  name: "exportExcel",
+  props: ['values', 'length'],
+  data() {
+    return {
+      // relationCount:localStorage.getItem('count'),
+      loading: false,
+      dialogExport: false,
+      dialogProcess: false,
+      graphicTypeNum: 0,
+      activities: [],
+      baseUrl: baseUrl,
+      dataCenter: dataCenter
+    }
+  },
+  computed: {
+    ...mapGetters('layout', ['projectId']),
+    headers() {
+      return {
+        //头信息中的 ProjectId 改为 projectId    nh-2021.11.25
+        'projectId': this.projectId,
+        'Comming': 'adm',
+        'Account': storage.get("user_name")
+      }
+    },
+    dataId() {
+      return {
+        relType: localStorage.getItem('RelationType') || '',
+        zoneType: localStorage.getItem('ZoneType') || '',
+        projectId: this.projectId
+      }
+    },
+  },
+  methods: {
+      getGraphicTypeNum() {
+        const params = {
+            type: this.dataId.relType
+        }
+        graphicTypeNumber(params, res => {
+            if (res.content && res.content.length) {
+                this.graphicTypeNum = res.content[0] && res.content[0].count || 0;
+            }
+        })
+      },
+      downloadProject(str) {
+        let relType = localStorage.getItem('RelationType') != '' ? `&relType=${localStorage.getItem('RelationType')}` : '';
+        let zoneType = localStorage.getItem('ZoneType') != '' ? `&zoneType=${localStorage.getItem('ZoneType')}` : '';
+        let url;
+        if (str === 'excel') {
+          relType = localStorage.getItem('RelationType') ? `&relType=${localStorage.getItem('RelationType')}` : '';
+          url = `${baseUrl}${dataCenter}/graphic/export?projectId=${this.projectId}${relType}${zoneType}&code=对象ID`;
+        } else {
+          url = `${baseUrl}${dataCenter}/graphic/report-downloads?projectId=${this.projectId}${relType}${zoneType}`;
+        }
+        return url
+      },
+      beforeUpload() {
+        this.loading = true;
+      },
+      progress(event, file, fileList) {
+        // console.log(event.file, fileList)
+      },
+      success(event, file, fileList) {
+        this.loading = false;
+        if (event.content && event.content[0] && event.content[0].state === "0") {
+            this.activities = [{
+                content: '数据文件处理中..',
+                size: 'large',
+                type: 'primary',
+                icon: 'el-icon-check',
+                color: '#0bbd87'
+            }, {
+                content: `关系全部导入成功(导入关系:${event.content[0].successCount} 条)`,
+                color: '#0bbd87',
+                icon: 'el-icon-check',
+                size: 'large',
+                type: 'success',
+            }]
+        } else if (event.content && event.content[0] && event.content[0].state === "1") {
+            this.activities = [{
+                content: '数据文件处理中..',
+                size: 'large',
+                type: 'primary',
+                icon: 'el-icon-check',
+                color: '#0bbd87'
+            }, {
+                content: `关系部分导入成功(导入成功:${event.content[0].successCount} 条;导入失败:${event.content[0].failCount} 条)`,
+                color: '#0bbd87',
+                icon: 'el-icon-check',
+                size: 'large',
+                type: 'success',
+            }]
+        } else if (event.content && event.content[0] && event.content[0].state === "2") {
+            this.activities = [{
+                content: '数据文件处理中..',
+                size: 'large',
+                type: 'primary',
+                icon: 'el-icon-check',
+                color: '#0bbd87'
+            }, {
+                content: '关系导入失败!',
+                color: '#f56c6c',
+                icon: 'el-icon-close',
+                size: 'large',
+                type: 'primary',
+            }]
+        } else {
+            this.activities = [{
+                content: '数据文件处理中..',
+                size: 'large',
+                type: 'primary',
+                icon: 'el-icon-check',
+                color: '#0bbd87'
+            }, {
+                content: '关系导入失败!',
+                color: '#f56c6c',
+                icon: 'el-icon-close',
+                size: 'large',
+                type: 'primary',
+            }]
+        }
+        this.dialogExport = false;
+        this.dialogProcess = true;
+        this.$emit('upDataTable')
+      },
+      error(event, file, fileList) {
+        this.loading = false;
+        this.activities = [{
+            content: '数据文件处理中..',
+            size: 'large',
+            type: 'primary',
+            icon: 'el-icon-check',
+            color: '#0bbd87'
+        }, {
+            content: '文件上传失败!',
+            color: '#f56c6c',
+            icon: 'el-icon-close',
+            size: 'large',
+            type: 'primary',
+        }]
+        this.dialogExport = false;
+        this.dialogProcess = true;
+        this.$emit('upDataTable')
+      },
+      errBack() {
+        this.dialogProcess = false
+      },
+      finish() {
+        this.dialogProcess = false
+        this.dialogExport = false
+        this.$emit('upDataTable')
+      },
+
+  },
+  watch: {
+      dialogExport(val) {
+          if(val) {
+              this.getGraphicTypeNum();
+          }
+      }
+  }
+  }
+</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>

+ 27 - 2
src/components/old-adm/relation/overview/index.vue

@@ -47,6 +47,7 @@ export default {
   data() {
     return {
       content: [],
+      fullContent: [],
       countNumber: [],
       loading: false,
       source: [], //源端数据
@@ -75,9 +76,31 @@ export default {
   },
   methods: {
     toggleRelation() {
+      const param = this.currentRelation === 'deliver' ? 'all' : 'deliver';
       
-      this.currentRelation = this.currentRelation === 'deliver' ? 'all' : 'deliver'
+      this.content = this.filterRelation(this.fullContent, param)
+      
+      this.currentRelation = param
+
     },
+    /**
+     * @description: 过滤显示关系
+     * @param {array} fullData
+     * @param {string} relation
+     * @return {*}
+     */   
+    filterRelation(fullData, relation='all') {
+      if (fullData.length) {
+        const res = fullData.map(item => ({
+          ...item,
+          childGraphicTypeList: item.childGraphicTypeList.map(subitem => ({
+            ...subitem,
+            relationTypeProjectList: subitem.relationTypeProjectList.filter(sub_subitem => relation === 'deliver' ? sub_subitem?.deliveryType === 0 : sub_subitem?.deliveryType !== 0 )
+          }))
+        }))
+        return res
+      }
+    }, 
     init() {
       this.loading = true;
       let dataNumber = {
@@ -95,7 +118,9 @@ export default {
       })
       Promise.all([promise1, promise2]).then(values => {
         this.countNumber = values[1].content;
-        this.content = values[0].content;
+        // this.content = values[0].content;
+        this.fullContent = values[0].content;
+        this.content = this.filterRelation(values[0].content, this.currentRelation);
         this.transform(this.content, this.countNumber);
         this.loading = false;
       })

+ 503 - 0
src/components/old-adm/relation/relationShip/index.vue

@@ -0,0 +1,503 @@
+<template>
+    <div class="relation-ship" v-loading="loading">
+        <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>{{ MainObject }}</span>
+                    </p>
+                    <label>所属建筑楼层:</label>
+                    <el-select disabled 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 disabled />
+                    <el-input
+                        placeholder="请输入"
+                        @keyup.enter.native="queryTable(1)"
+                        v-model="mainValue"
+                        style="margin-left: 5px"
+                        class="min-margin"
+                    >
+                        <i slot="suffix" class="el-input__icon el-icon-search cursor" @click="queryTable(1)" />
+                    </el-input>
+                </el-col>
+                <el-col :span="12">
+                    <p class="border-left-8">
+                        从对象 <span>{{ FromObject }}</span>
+                    </p>
+                    <label>所属建筑楼层:</label>
+                    <el-select disabled 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 disabled />
+                    <el-input
+                        placeholder="请输入"
+                        @keyup.enter.native="queryTable(2)"
+                        v-model="formValue"
+                        style="margin-left: 5px"
+                        class="min-margin"
+                    >
+                        <i slot="suffix" class="el-input__icon el-icon-search cursor" @click="queryTable(2)" />
+                    </el-input>
+                </el-col>
+            </el-row>
+        </section>
+
+        <section class="table-list" :style="tableData && tableData.length ? 'height:calc(100% - 250px)' : 'height:100%'">
+            <!--              :span-method="objectSpanMethod"
+      -->
+            <el-table
+                :data="tableData"
+                :span-method="objectSpanMethod"
+                :header-cell-style="{ background: '#e1e4e5', color: '#2b2b2b', lineHeight: '30px' }"
+                :cell-style="cellStyle"
+                class="table"
+                style="width: 100%"
+                height="100%"
+            >
+                <el-table-column prop="Name" label="全局名称" width="180" align="left" min-width="100"> </el-table-column>
+                <el-table-column prop="LocalID" label="本地编码" align="left" min-width="100"> </el-table-column>
+                <el-table-column prop="LocalName" label="本地名称" align="left" min-width="100"> </el-table-column>
+                <el-table-column prop="CADID" label="CADID" align="left" min-width="100"> </el-table-column>
+                <el-table-column label="对象详情" prop="btn" align="center" min-width="90">
+                    <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 class-name="td-bl" prop="cName" label="全局名称" width="180" align="left"> </el-table-column>
+                <el-table-column prop="cLocalID" align="left" label="本地编码"> </el-table-column>
+                <el-table-column prop="cLocalName" label="本地名称" align="left"> </el-table-column>
+                <el-table-column prop="cCADID" label="CADID" align="left"> </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="left">
+                    <template slot-scope="scope">
+                        <el-button slot="reference" size="mini" icon="el-icon-delete" @click="deleteObject(scope.$index, scope.row)" />
+                    </template>
+                </el-table-column>
+            </el-table>
+        </section>
+        <!-- 分页 -->
+        <el-pagination
+            class="relation-ship-pagination"
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="currentPage"
+            :page-sizes="pageSizes"
+            :page-size="pageSize"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="total"
+            style="float: right; margin-top: 10px; padding: 2px 5px"
+        >
+        </el-pagination>
+
+        <exportExcel ref="export" :values="values" :length="length" @upDataTable="upDataTable" />
+        <addRelationShip ref="addShipComponent" :values="values" @update="update" />
+        <editRelationShip ref="editShipComponent" :values="values" />
+    </div>
+</template>
+
+<script>
+import { mapGetters } from "vuex";
+import exportExcel from "@/components/old-adm/relation/components/relationShip/Modal/exportExcel";
+import addRelationShip from "@/components/old-adm/relation/components/relationShip/Modal/addRelationShip";
+import editRelationShip from "@/components/old-adm/relation/components/relationShip/Modal/editRelationShip";
+// import { relDelete, relQuery } from "../../../api/relation/api";
+import Relation from '@/controller/old-adm/relationController'
+const { relDelete, relQuery } = Relation
+
+export default {
+    name: "index",
+    data() {
+        return {
+            MainObject: `(限制条件:${localStorage.getItem("MainObject") || "无"})`,
+            FromObject: `(限制条件:${localStorage.getItem("FromObject") || "无"})`,
+            pageSizes: [10, 20, 50, 100],
+            pageSize: 50,
+            currentPage: 1,
+            total: 0,
+            values: {
+                relation_maintenance: "关系维护",
+                optionTips: `请下载最新<${localStorage.getItem("RelationTypeName")}>数据进行手动维护`, //请下载最新最新 xxxx 数据进行手动维护
+                currentNum: "当前关系数量:",
+                download: "下载模板(含数据)",
+                lastTime: `最后更新时间为:${localStorage.getItem("ComputingTime") || ""}`, //最后更新时间为
+                uploadTxt: "将Excel文件拖到此处,或<em>单击上传Excel文件<em>",
+                uploadTips: "上传的Excel数据将完全覆盖当前关系表(关系表先前数据不会保留)",
+                downloadFile: " 下载报告文件",
+                back: "返回",
+                done: "完成",
+                addShip: "添加关系",
+                editShip: "编辑关系",
+                codeTip: "请填写主被控设备对象识别编码",
+                deviceTip: "请填写主被控设备对象设备号",
+                codeTitle: "识别编码对应:",
+                mainObject: "主对象:",
+                affiliatedObject: "从对象:",
+                pleaseEnter: "请输入",
+                pleaseEnterCode: "请输入识别编码",
+                add: "添加",
+                cancel: "取消",
+                delete: "删除关系",
+            },
+            mainValue: "",
+            formValue: "",
+            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: "新疆维吾尔族自治区",
+                        },
+                    ],
+                },
+            ],
+            tableData: [],
+            delParam: {},
+            loading: false,
+            needMergeArr: ["Name", "LocalID", "LocalName", "CADID", "btn"],
+            rowMergeArrs: {},
+            length: "",
+            // needMergeArr: ['name', 'id'], // 有合并项的列
+            // rowMergeArrs: {}, // 包含需要一个或多个合并项信息的对象
+        };
+    },
+    components: { exportExcel, addRelationShip, editRelationShip },
+    created() {
+        this.$store.dispatch("setBreadcrumb", [
+            {
+                label: "全部关系总览",
+                path: "/relation/overview",
+            },
+            {
+                label: "全部关系总览",
+                path: "/relation/overview",
+            },
+            {
+                label: localStorage.getItem("RelationTypeName"),
+            },
+        ]);
+        this.init();
+    },
+    watch: {
+        projectId() {
+            this.init();
+        },
+    },
+    computed: {
+        ...mapGetters("layout", ["projectId"]),
+    },
+    mounted() {
+        // this.getSpanArr(this.tableData)
+    },
+    methods: {
+        deepCopy(obj) {
+            return JSON.parse(JSON.stringify(obj));
+        },
+        upDataTable() {
+            this.init();
+        },
+        init() {
+            this.loading = true;
+            let data = {
+                projectId: this.projectId,
+                objectType: 1,
+                relType: localStorage.getItem("RelManualType"),
+                pageSize: this.pageSize,
+                // PageSize: 10000000,
+                pageNumber: this.currentPage,
+            };
+            relQuery(data, (res) => {
+                this.filterTable(res);
+                this.length = res.total || 0;
+                this.total = res.total;
+                this.loading = false;
+            });
+        },
+        filterTable(list) {
+            let arr = [];
+            if (list.content.length) {
+                list.content.forEach((i) => {
+                    i.objectInfo &&
+                        i.objectInfo.forEach((j) => {
+                            arr.push({
+                                Name: i.name,
+                                LocalName: i.localName,
+                                LocalID: i.localId,
+                                CADID: i.cadId,
+                                cName: j.name,
+                                cLocalName: j.localName,
+                                cLocalID: j.localId,
+                                cCADID: j.cadId,
+                                Id: i.id,
+                                cId: j.id,
+                            });
+                        });
+                });
+                this.tableData = this.deepCopy(arr);
+                this.rowMergeArrs = this.rowMergeHandle(this.needMergeArr, this.tableData); // 处理数据
+            } else {
+                this.tableData = [];
+            }
+            // this.length = this.tableData.length
+        },
+        back() {
+            this.$router.go(-1);
+        },
+
+        addBtn() {
+            this.$refs.addShipComponent.addShipDialog = true;
+        },
+        excel() {
+            this.$refs.export.dialogExport = true;
+        },
+        queryTable(i) {
+            let param = {},
+                relType = localStorage.getItem("RelManualType");
+            if (i === 1) {
+                param = {
+                    objectType: 1,
+                    relType,
+                    vague: this.mainValue,
+                };
+            } else {
+                param = {
+                    objectType: 2,
+                    relType,
+                    vagueTo: this.formValue,
+                };
+            }
+            relQuery(param, (res) => {
+                this.filterTable(res);
+                // console.log(res, '==object==')
+            });
+        },
+        //分页更换size
+        handleSizeChange(val) {
+            this.currentPage = 1;
+            this.pageSize = val;
+            this.init();
+        },
+        //分页更换页
+        handleCurrentChange(val) {
+            this.currentPage = val;
+            this.init();
+        },
+        update() {
+            this.init();
+        },
+        lookOver(index, row) {
+            this.$message.info("开发中");
+            console.log(index, row);
+
+            return false;
+
+            // this.$refs.editShipComponent.editShipDialog = true
+        },
+        deleteObject(index, row) {
+            this.delParam = {
+                fromId: row.Id,
+                relType: localStorage.getItem("RelManualType"),
+                toId: row.cId,
+            };
+            this.$confirm("确定删除吗?", "提示", {
+                confirmButtonText: "确 定",
+                cancelButtonText: "取 消",
+            })
+                .then(() => {
+                    this.confirmDelete();
+                })
+                .catch(() => {
+                    this.$message({
+                        type: "info",
+                        message: "已取消删除",
+                    });
+                });
+        },
+        confirmDelete() {
+            relDelete(this.delParam, (res) => {
+                this.init();
+                this.$message.success("删除成功");
+            });
+        },
+        cellStyle({ row, column, rowIndex, columnIndex }) {
+            if (column.label === "全局名称") {
+                return {
+                    background: "#f9f9f9",
+                    color: "#606266",
+                    lineHeight: "30px",
+                };
+            }
+        },
+
+        objectSpanMethod({ row, column, rowIndex, columnIndex }) {
+            if (column.property === "Name") return this.mergeAction("Name", rowIndex, column);
+            // if (column.property === 'LocalID' && row.LocalID != undefined) return this.mergeAction('LocalID', rowIndex, column);
+            // if (column.property === 'LocalName' && row.LocalName != undefined) return this.mergeAction('LocalName', rowIndex, column);
+            // if (column.property === 'CADID' && row.CADID != undefined) return this.mergeAction('CADID', rowIndex, column);
+            if (column.property === "btn") return this.mergeAction("Name", rowIndex, column);
+        },
+        mergeAction(val, rowIndex, colData) {
+            let _row = this.rowMergeArrs[val].rowArr[rowIndex];
+            let _col = _row > 0 ? 1 : 0;
+            return [_row, _col];
+        },
+        rowMergeHandle(arr, data) {
+            if (!Array.isArray(arr) && !arr.length) return false;
+            if (!Array.isArray(data) && !data.length) return false;
+            let needMerge = {};
+            arr.forEach((i) => {
+                needMerge[i] = {
+                    rowArr: [],
+                    rowMergeNum: 0,
+                };
+                data.forEach((item, index) => {
+                    if (index === 0) {
+                        needMerge[i].rowArr.push(1);
+                        needMerge[i].rowMergeNum = 0;
+                    } else {
+                        if (item[i] === data[index - 1][i]) {
+                            needMerge[i].rowArr[needMerge[i].rowMergeNum] += 1;
+                            needMerge[i].rowArr.push(0);
+                        } else {
+                            needMerge[i].rowArr.push(1);
+                            needMerge[i].rowMergeNum = index;
+                        }
+                    }
+                });
+            });
+            return needMerge;
+        },
+    },
+};
+</script>
+
+<style scoped lang="less">
+.relation-ship {
+    @media screen and (max-width: 1500px) {
+        .min-margin {
+            margin-top: 10px;
+        }
+    }
+
+    .cursor {
+        cursor: pointer;
+    }
+
+    /deep/ .el-input__inner {
+        width: 220px;
+        padding-right: 25px;
+    }
+
+    /deep/ .el-input {
+        width: auto;
+    }
+
+    /deep/ .el-table__body-wrappe {
+    }
+
+    .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;
+        }
+    }
+
+    .relation-ship-pagination {
+        /deep/ .el-input__inner {
+            width: auto;
+            padding-right: 25px;
+        }
+
+        /deep/ .el-select .el-input {
+            width: auto;
+        }
+    }
+}
+</style>

+ 11 - 0
src/controller/old-adm/businessSpaceController.ts

@@ -0,0 +1,11 @@
+import {graphhic_pre} from './preTypes'
+import { middlewareHttpUtils } from '@/utils/http/middlewareHttpUtils';
+
+export class businessSpaceController{
+    static middlewareHttpUtilsInstance = new middlewareHttpUtils();
+
+    static async getrelationTypeProject(param, success) {
+        let url = `${graphhic_pre}/relation_type_project`;
+        // http.postJson(url, param, success)
+      }
+}

+ 40 - 0
src/controller/old-adm/relationController.ts

@@ -3,6 +3,7 @@ import { customHttpUtils } from '@/utils/http/customHttpUtils'
 import ScanUtil from '@/utils/scanUtil'
 import storage from '@/utils/storageUtil'
 import lstorage from '@/utils/old-adm/localStorage'
+import {graphhic_pre} from './preTypes'
  
 export default class Relation{
     static http = new baseHttpUtils();
@@ -103,4 +104,43 @@ export default class Relation{
         const res = await Relation.http.postRequest(`${ScanUtil.datacenter}/calc_special/sys-direction?BlockId=${param.BlockId}&${buildId}Domain=${param.Domain}&SystemName=${param.SystemName}&isSource=${param.isSource}`, param);
         return fn ? fn(res) : res
     }
+    /**
+     * @description: 删除关系
+     * @param {*}
+     * @return {*}
+     */    
+
+    static async relDelete(param, fn) {
+        const res = await Relation.http.postRequest(`${ScanUtil.datacenter}/rel-manual-calc/del`, param);
+        return fn ? fn(res) : res
+    }
+    /**
+     * @description:  查询关系数据
+     * @param {*} param
+     * @param {*} fn
+     * @return {*}
+     */    
+    static async relQuery(param, fn) {
+        const res = await Relation.http.postRequest(`${ScanUtil.datacenter}/rel-manual-calc/query`, param);
+        return fn ? fn(res) : res
+    }
+    /**
+     * @description: 添加关系数据
+     * @param {*} param
+     * @return {*}
+     */    
+    static async relAdd(param) {
+        const res = await Relation.http.postRequest(`${ScanUtil.datacenter}/rel-manual-calc/add`, param);
+        return  res
+    }
+    /**
+     * @description: 查询总览数量-根据类型查询关系数量
+     * @param {*} param
+     * @param {*} fn
+     * @return {*}
+     */    
+    static async graphicTypeNumber(param, fn) {
+        const res = await Relation.http.postRequest(`${graphhic_pre}/type/query-count?type=${param.type}`, param);
+        return fn ? fn(res) : res
+    }
 }

+ 4 - 4
src/controller/userController.ts

@@ -8,6 +8,8 @@ import { sessionStore } from "@/store/sessionStore";
 
 export class userController {
 
+  static httpBaseUrl = (window as any).__systemConf.admServiceUrl;
+
   /**
    * 登录
    * @param userName 
@@ -15,8 +17,7 @@ export class userController {
    * @returns 
    */
   static async login(userName: string, userPass: string) {
-    var httpUrl = (window as any).__systemConf.loginServiceUrl;
-    httpUrl = toolUtils.getBaseHttpUrl(httpUrl, 'auth/account/login');
+    var httpUrl = toolUtils.getBaseHttpUrl(this.httpBaseUrl, 'auth/account/login');
 
     let requestMethod = "post";
 
@@ -43,8 +44,7 @@ export class userController {
     var loginConfig = (window as any).__systemConf.loginConfig;
     let userToken = sessionStore.userToken;
 
-    var httpUrl = (window as any).__systemConf.loginServiceUrl;
-    httpUrl = toolUtils.getBaseHttpUrl(httpUrl, 'auth/login/loginInfo');
+    var httpUrl = toolUtils.getBaseHttpUrl(this.httpBaseUrl, 'auth/login/loginInfo');
 
     let requestHeaders = {
       "Content-Type": "application/x-www-form-urlencoded",

+ 6 - 0
src/router/system.js

@@ -20,6 +20,7 @@ import repetitionGraphy from '@/components/old-adm/ready/buildfloor/repetitionGr
 
 // 全部关系总览
 import overView from '@/components/old-adm/relation/overview'
+import relationShip from '@/components/old-adm/relation/relationShip'
 
 //cad核查图纸管理
 import cadDrawingManage from '@/components/cadDrawingManage'
@@ -128,6 +129,11 @@ export default [
         name: "全部关系总览",
         component: overView,
       },
+      {
+        path: '/relation/relationShip',
+        name: "编辑关系",
+        component: relationShip,
+      },
     ],
   },
   {

+ 11 - 0
src/utils/http/admServerHttpUtils.ts

@@ -0,0 +1,11 @@
+/**
+ * adm-server服务的http辅助类,供业务调用
+ */
+
+import { httpUtils } from "./basic/httpUtils";
+
+export class admServerHttpUtils extends httpUtils {
+    constructor() {
+        super((window as any).__systemConf.admServiceUrl);
+    };
+}

+ 1 - 2
src/utils/http/middlewareHttpUtils.ts

@@ -1,6 +1,5 @@
 /**
- * 系统图服务的http辅助类,供业务调用
- * nh 2022.1.5
+ * adm-middleware服务的http辅助类,供业务调用
  */
 
 import { httpUtils } from "./basic/httpUtils";

+ 1 - 1
src/utils/http/sysGraphHttpUtils.ts

@@ -7,6 +7,6 @@ import { httpUtils } from "./basic/httpUtils";
 
 export class sysGraphHttpUtils extends httpUtils {
     constructor() {
-        super((window as any).__systemConf.sysGraphServiceUrl);
+        super((window as any).__systemConf.diagramServiceUrl);
     };
 }