浏览代码

Merge branch 'dev' of http://39.106.8.246:3003/web/ibms into dev

YaolongHan 4 年之前
父节点
当前提交
e9bc648752
共有 52 个文件被更改,包括 3881 次插入3453 次删除
  1. 3 3
      config/dev.env.js
  2. 9 9
      config/index.js
  3. 5 3
      config/prod.env.js
  4. 2 2
      src/components/business_space/newGraphy/graphy.vue
  5. 28 34
      src/components/dialogs/list/batchDialog.vue
  6. 3 3
      src/components/dialogs/list/picDialog.vue
  7. 1 1
      src/components/dialogs/list/supplierDialog.vue
  8. 2 2
      src/components/ledger/cenote/dialog/addSpaceDialog.vue
  9. 1 1
      src/components/ledger/details/detail/cruxDialog.vue
  10. 1 1
      src/components/ledger/details/detail/exhibitionBaseInformation.vue
  11. 68 63
      src/components/ledger/handsontables/assets.vue
  12. 1569 1503
      src/components/ledger/handsontables/device.vue
  13. 40 37
      src/components/ledger/lib/editSysFloor.vue
  14. 10 2
      src/components/ledger/lib/excelDialog.vue
  15. 3 3
      src/components/ledger/lib/linkassets.vue
  16. 3 3
      src/components/ledger/lib/lookImages.vue
  17. 11 1
      src/components/ledger/lib/spaceSelect.vue
  18. 12 5
      src/components/ledger/lib/system.vue
  19. 2 1
      src/components/ledger/lib/uploadImgsName.vue
  20. 2 0
      src/components/ledger/rentList/roomCountDrawer.vue
  21. 5 2
      src/components/ledger/system/dialog/addEquipDialog.vue
  22. 22 6
      src/components/ledger/system/dialog/addSpaceDialog.vue
  23. 10 10
      src/components/model/file/addFloorDialog.vue
  24. 2 2
      src/components/model/file/addFolder.vue
  25. 1 1
      src/components/model/file/floorTable.vue
  26. 3 3
      src/components/ready/buildfloor/addBuild.vue
  27. 108 103
      src/components/ready/buildfloor/formItems.vue
  28. 4 0
      src/components/relation/overview/CardList.vue
  29. 2 1
      src/components/relation/overview/Modal/RelationMaintain.vue
  30. 68 50
      src/framework/layout/Main.vue
  31. 143 130
      src/framework/layout/PageHeader.vue
  32. 124 86
      src/framework/layout/layout-store.js
  33. 16 12
      src/utils/handsontable/notShow.js
  34. 12 1
      src/views/ledger/cenotelist/cenoteadd/index.vue
  35. 49 7
      src/views/ledger/cenotelist/index.vue
  36. 1 1
      src/views/ledger/cenotelist/relatedSpace.vue
  37. 103 36
      src/views/ledger/facility/addfacility.vue
  38. 47 34
      src/views/ledger/facility/batchPoint.vue
  39. 25 40
      src/views/ledger/facility/details/index.vue
  40. 111 63
      src/views/ledger/facility/partsmanage/addparts/index.vue
  41. 43 59
      src/views/ledger/facility/partsmanage/index.vue
  42. 20 1
      src/views/ledger/property/addproperty.vue
  43. 5 2
      src/views/ledger/property/addpropertys.vue
  44. 20 1
      src/views/ledger/rentlist/rentadd/index.vue
  45. 85 91
      src/views/ledger/report/index.vue
  46. 1 1
      src/views/ledger/spacelist/spaceadd/index.vue
  47. 26 5
      src/views/ledger/system/addsystem.vue
  48. 36 24
      src/views/model/file/index.vue
  49. 2 0
      src/views/ready/buildfloor/repetitionGraphy.vue
  50. 973 972
      src/views/ready/collectsetting/index.vue
  51. 5 0
      src/views/relation/overview/index.vue
  52. 34 32
      src/views/system/auth/index.vue

+ 3 - 3
config/dev.env.js

@@ -4,13 +4,13 @@ const prodEnv = require('./prod.env')
 
 module.exports = merge(prodEnv, {
   NODE_ENV: '"development"',
-  // BASE_URL: '"http://192.168.64.14:8081"', //测试iframe地址
-  // BASE_URL: '"http://60.205.177.43:8081"', //测试iframe地址
+  // BASE_URL: '"http://192.168.64.14"', //测试iframe地址
+  // BASE_URL: '"http://60.205.177.43"', //测试iframe地址
   // SSO_SERVER: '"http://192.168.12.238:8081"', //测试环境
   // BASE_URL: '"http://192.168.20.236"', //(新)测试iframe地址
   // SSO_SERVER: '"http://192.168.20.236:8086"', //(新)测试环境
   // MQTT_SERVICE: '"ws://172.16.42.210:61614/stomp/"' //MQ测试环境地址
-  BASE_URL: '"http://mbi.sagacloud.cn"', //线上iframe地址
+  BASE_URL: '"http://192.168.64.14"', //线上iframe地址
   SSO_SERVER: '"http://sso.sagacloud.cn"',  //正式环境
   MQTT_SERVICE: '"ws://adm.sagacloud.cn/stomp/"' //MQ正式环境地址
 })

+ 9 - 9
config/index.js

@@ -12,14 +12,14 @@ module.exports = {
 
     proxyTable: {//正式环境
       '/admin': {
-        target: 'http://mbi.sagacloud.cn:8080',
+        target: 'http://192.168.64.14:8080/',
         changeOrigin: true,
         pathRewrite: {
           "^/admin": "/"
         }
       },
       '/api': {
-        target: 'http://mbi.sagacloud.cn:8080',
+        target: 'http://192.168.64.14:8080/',
         changeOrigin: true,
         pathRewrite: {
           "^/api": "/"
@@ -40,7 +40,7 @@ module.exports = {
       },
       '/pointconfig': {
         // 目标 API 地址
-        target: 'http://mbi.sagacloud.cn:8080/',
+        target: ' http://192.168.64.14:8080/',
         // 如果要代理 websockets
         ws: true,
         // 将主机标头的原点更改为目标URL
@@ -64,7 +64,7 @@ module.exports = {
       },
       '/ScanBuilding': {
         // 目标 API 地址
-        target: 'http://mbi.sagacloud.cn:8080/',
+        target: ' http://192.168.64.14:8080/',
         // 如果要代理 websockets
         ws: true,
         // 将主机标头的原点更改为目标URL
@@ -72,7 +72,7 @@ module.exports = {
       },
       '/scanbuilding-2': {
         // 目标 API 地址
-        target: 'http://mbi.sagacloud.cn:8080/',
+        target: ' http://192.168.64.14:8080/',
         // 如果要代理 websockets
         ws: true,
         // 将主机标头的原点更改为目标URL
@@ -80,21 +80,21 @@ module.exports = {
       },
       '/image-service': {
         // 目标 API 地址
-        target: 'http://39.97.179.199:8888',
+        target: 'http://39.97.179.199:8891',
         changeOrigin: true,
         pathRewrite: {
           "^/image-service": "/image-service/"
         }
       },
       '/modelapi': {
-        target: 'http://mbi.sagacloud.cn:8080',
+        target: ' http://192.168.64.14:8080/',
         changeOrigin: true,
         pathRewrite: {
           "^/modelapi": "/revit-algorithm/"
         }
       },
       '/schedulerapi': {
-        target: 'http://mbi.sagacloud.cn:8080',
+        target: ' http://192.168.64.14:8080/',
         changeOrigin: true,
         pathRewrite: {
           "^/schedulerapi": "/scheduler/"
@@ -167,7 +167,7 @@ module.exports = {
     //     },
     // '/scanbuilding-2': {
     //   // 目标 API 地址
-    //   target: 'http://mbi.sagacloud.cn:8080/',
+    //   target: ' http://192.168.64.14:8080//',
     //   // 如果要代理 websockets
     //   ws: true,
     //   // 将主机标头的原点更改为目标URL

+ 5 - 3
config/prod.env.js

@@ -1,13 +1,15 @@
 'use strict'
 module.exports = {
   NODE_ENV: '"production"',
-  // BASE_URL: '"http://192.168.64.14:8081"', //测试iframe地址
+  BASE_URL: '"http://192.168.64.14"', //测试iframe地址
   // SSO_SERVER: '"http://192.168.12.238:8081"', //测试环境
   // BASE_URL: '"http://192.168.20.236"', //(新)测试iframe地址
   // SSO_SERVER: '"http://192.168.20.236:8086"', //(新)测试环境
   // MQTT_SERVICE: '"ws://172.16.42.210:61614/stomp/"' //MQ测试环境地址
-  BASE_URL: '"http://mbi.sagacloud.cn"', //线上iframe地址
-  SSO_SERVER: '"http://sso.sagacloud.cn"',  //正式环境
+  // BASE_URL: '"http://mbi.sagacloud.cn"', //线上iframe地址
+  // SSO_SERVER: '"http://sso.sagacloud.cn"',  //正式环境
+//   BASE_URL: '"http://182.92.126.202"', //龙湖iframe地址
+  SSO_SERVER: '"http://182.92.126.202:8889/"',  //龙湖正式环境
    MQTT_SERVICE: '"ws://adm.sagacloud.cn/stomp/"' //MQ正式环境地址
 }
 

+ 2 - 2
src/components/business_space/newGraphy/graphy.vue

@@ -29,7 +29,7 @@
         <div>
           <el-autocomplete popper-class="my-autocomplete" v-model="search" :fetch-suggestions="querySearch" placeholder="输入平面图中已有的业务空间名称进行查找"
             width="180px" @select="handleSelect">
-            <i class="el-icon-search el-input__icon" slot="suffix" @click="handleSelect"></i>
+            <i class="el-icon-search el-input__icon" slot="suffix"></i>
             <template slot-scope="{ item }">
               <div class="name" style="position: relative;padding-right:40px;overflow: hidden;text-overflow:ellipsis;white-space: nowrap;"
                 :title="item.data.RoomLocalName">
@@ -430,7 +430,7 @@
           let tempArr = this.BSPRelaISPList.map((t, i) => {
             // if (t.FloorId == this.buildFloor[1] && t.ObjectType == tempType) {
             return {
-              RoomLocalName: t.RoomLocalName,
+              RoomLocalName: t.RoomLocalName || t.RoomName,
               OutLine: t.Outline,
               RoomID: t.RoomID,
               Color: colorArr[i % colorArr.length],

+ 28 - 34
src/components/dialogs/list/batchDialog.vue

@@ -133,30 +133,30 @@
 </template>
 
 <script>
-  import myPagination from "@/components/ledger/lib/myPagination"
-  import tools from "@/utils/buildfloor/tools";
-
-  export default {
-    name: "batchDialog",
-    props: ['firmName', 'allObject', 'page', 'information','newEnclosure'],
-    components: {myPagination},
-    data() {
-      return {
-        form:{},
-        batchDialog: false,//dialog
-        active: 0,//进度条
-        checkAll: false,//全选
-        isIndeterminate: true,
-        checkedCities: [],//选择的项,单项
-        firm: [
-          {
-            name: "生产厂家/品牌型号",
-            code: "DPManufacturerID",
-            num: 2,
-          }, {
-            name: "供应商信息",
-            code: "DPSupplierID",
-            num: 8
+import myPagination from "@/components/ledger/lib/myPagination"
+import tools from "@/utils/buildfloor/tools";
+
+export default {
+  name: "batchDialog",
+  props: ['firmName', 'allObject', 'page', 'information', 'newEnclosure'],
+  components: {myPagination},
+  data() {
+    return {
+      form: {},
+      batchDialog: false,//dialog
+      active: 0,//进度条
+      checkAll: false,//全选
+      isIndeterminate: true,
+      checkedCities: [],//选择的项,单项
+      firm: [
+        {
+          name: "生产厂家/品牌型号",
+          code: "DPManufacturerID",
+          num: 2,
+        }, {
+          name: "供应商信息",
+          code: "DPSupplierID",
+          num: 8
           }, {
             name: "维修商信息",
             code: "DPMaintainerID",
@@ -230,18 +230,11 @@
     },
     filters: {
       filterImgName(value) {
-        if (value && value.length > 16) {
-          return value.substring(0, 12) + '...'
-        } else {
-          return value
-        }
+        return value && value.length > 16 ? value.substring(0, 12) + '...' : value
       } ,
       filterImgNames(value) {
-        if (value && value.length > 16) {
-          return value.substring(0, 16) + '...'
-        } else {
-          return value
-        }
+        return value && value.length > 16 ? value.substring(0, 16) + '...' : value
+
       }
     },
     methods: {
@@ -449,6 +442,7 @@
         this.$emit('getAllData')
       },
       multiple(val) {
+
         this.$emit('multiples',val)
       },
 

+ 3 - 3
src/components/dialogs/list/picDialog.vue

@@ -136,11 +136,11 @@
         this.picArrs = []
         if (this.keysArr instanceof Array) {
           this.keysArr.map(item => {
-            if (item.type == 'panorama') {
+            if (item.Type == 'panorama') {
               this.panoramaArr.push(item)
-            } else if (item.type == "video") {
+            } else if (item.Type == "video") {
               this.videoArr.push(item)
-            } else if (item.type == 'image_video') {
+            } else if (item.Type == 'image_video') {
               this.videoPicArr.push(item)
             } else {
               this.picArrs.push(item)

+ 1 - 1
src/components/dialogs/list/supplierDialog.vue

@@ -144,7 +144,7 @@
 
             //分页改变
             changePage() {
-                this.pagination(this.page.currentPage, this.page.size, this.allData)
+                this.tableData = this.pagination(this.page.currentPage, this.page.size, this.allData)
             },
 
             //发生修改

+ 2 - 2
src/components/ledger/cenote/dialog/addSpaceDialog.vue

@@ -77,7 +77,7 @@ export default {
   },
   data() {
     return {
-      title: "添加系统所在业务空间",
+      title: "添加竖井所在业务空间",
       keycode: "", //输入查询条件
       inSpaceType: "业务空间",
       Buildfloor: ["all"], // 选中的建筑楼层
@@ -220,4 +220,4 @@ export default {
     }
   }
 }
-</style>
+</style>

+ 1 - 1
src/components/ledger/details/detail/cruxDialog.vue

@@ -84,7 +84,7 @@
           setDataDictionary(param, res => {
             this.dialogFormVisible = false
             this.$emit('cruxSuccess')
-            this.$message('保存成功')
+            this.$message.success('保存成功')
 
           });
 

+ 1 - 1
src/components/ledger/details/detail/exhibitionBaseInformation.vue

@@ -34,7 +34,7 @@
 <!--        <el-button slot="reference" type="text">{{value.Value ? '有' :'-'}}</el-button>-->
         <el-button slot="reference" type="text">有</el-button>
       </el-popover>
-      <span  v-else-if="Array.isArray(value.Value) && value.InputMode== 'F2' ">
+      <span  v-else-if="Array.isArray(value.Value) && (value.InputMode == 'F2' || value.InputMode == 'F1') ">
         <el-popover
           v-if="value.Value.length "
           placement="right"

+ 68 - 63
src/components/ledger/handsontables/assets.vue

@@ -141,72 +141,72 @@
   </div>
 </template>
 <script>
-  import {
-    BeatchQueryParam,
-    countPartsDie,
-    createPropertys,
-    deleteProperty,
-    getDataDictionary,
-    propertyLinkEq,
-    queryProperty,
-    propertyUpdate,
-    updateProperty
-  } from "@/api/scan/request";
+import {
+  BeatchQueryParam,
+  countPartsDie,
+  createPropertys,
+  deleteProperty,
+  getDataDictionary,
+  propertyLinkEq,
+  propertyUpdate,
+  queryProperty,
+  updateProperty
+} from "@/api/scan/request";
 
-  import tools from "@/utils/scan/tools"
-  import handsonUtils from "@/utils/scan/hasontableUtils"
-  import showTools from "@/utils/handsontable/notShow"
-  import buildFloor from '@/utils/handsontable/buildFloorData'
-  import firm from "@/components/dialogs/list/firm"
-  import supplierDialog from "@/components/dialogs/list/supplierDialog"
-  import uploadFilesDialog from "@/components/dialogs/list/filesDialog"
-  import uploadImgDialog from "@/components/dialogs/list/uploadImgDialog"
-  import maintainerDialog from "@/components/dialogs/list/maintainerDialog"
-  import insurerDialog from "@/components/dialogs/list/insurerDialog"
-  import picDialog from "@/components/dialogs/list/picDialog"
+import tools from "@/utils/scan/tools"
+import handsonUtils from "@/utils/scan/hasontableUtils"
+import showTools from "@/utils/handsontable/notShow"
+import buildFloor from '@/utils/handsontable/buildFloorData'
+import firm from "@/components/dialogs/list/firm"
+import supplierDialog from "@/components/dialogs/list/supplierDialog"
+import uploadFilesDialog from "@/components/dialogs/list/filesDialog"
+import uploadImgDialog from "@/components/dialogs/list/uploadImgDialog"
+import maintainerDialog from "@/components/dialogs/list/maintainerDialog"
+import insurerDialog from "@/components/dialogs/list/insurerDialog"
+import picDialog from "@/components/dialogs/list/picDialog"
 
-  import qrcode from "@/components/business_space/lib/qrcode"
-  // import firm from "@/components/business_space/dialogs/list/firm"
-  import supplyDialog from "@/components/business_space/dialogs/list/supplyDialog"
-  // import supplierDialog from "@/components/business_space/dialogs/list/supplierDialog"
-  // import maintainerDialog from "@/components/business_space/dialogs/list/maintainerDialog"
-  // import insurerDialog from "@/components/business_space/dialogs/list/insurerDialog"
-  import guaranteeDialog from "@/components/business_space/dialogs/list/guaranteeDialog"
-  // import uploadFilesDialog from "@/components/business_space/dialogs/list/filesDialog"
-  // import uploadImgDialog from "@/components/business_space/dialogs/list/uploadImgDialog"
-  // import detailsDialog from "@/components/business_space/lib/detailsDia"
-  // import picDialog from "@/components/business_space/dialogs/list/picDialog"
-  import myPagination from "@/components/common/myPagination"
-  import myCascader from "@/components/ledger/lib/assets"
-  import floorCascader from "@/components/ledger/lib/floorCascader"
-  import dieCascader from "@/components/ledger/lib/partsDieList"
-  import {mapGetters} from "vuex"
-  //图片查看
-  import lookPic from "@/components/ledger/lib/lookImages"
-  import Handsontable from "handsontable-pro"
-  import 'handsontable-pro/dist/handsontable.full.css'
-  import batchDialog from "../../dialogs/list/batchDialog";
-  //下拉插件
-  // import "@/assets/js/chosen.jquery.min";
-  // import "@/assets/js/handsontable-chosen-editor";
+import qrcode from "@/components/business_space/lib/qrcode"
+// import firm from "@/components/business_space/dialogs/list/firm"
+import supplyDialog from "@/components/business_space/dialogs/list/supplyDialog"
+// import supplierDialog from "@/components/business_space/dialogs/list/supplierDialog"
+// import maintainerDialog from "@/components/business_space/dialogs/list/maintainerDialog"
+// import insurerDialog from "@/components/business_space/dialogs/list/insurerDialog"
+import guaranteeDialog from "@/components/business_space/dialogs/list/guaranteeDialog"
+// import uploadFilesDialog from "@/components/business_space/dialogs/list/filesDialog"
+// import uploadImgDialog from "@/components/business_space/dialogs/list/uploadImgDialog"
+// import detailsDialog from "@/components/business_space/lib/detailsDia"
+// import picDialog from "@/components/business_space/dialogs/list/picDialog"
+import myPagination from "@/components/common/myPagination"
+import myCascader from "@/components/ledger/lib/assets"
+import floorCascader from "@/components/ledger/lib/floorCascader"
+import dieCascader from "@/components/ledger/lib/partsDieList"
+import {mapGetters} from "vuex"
+//图片查看
+import lookPic from "@/components/ledger/lib/lookImages"
+import Handsontable from "handsontable-pro"
+import 'handsontable-pro/dist/handsontable.full.css'
+import batchDialog from "../../dialogs/list/batchDialog";
+//下拉插件
+// import "@/assets/js/chosen.jquery.min";
+// import "@/assets/js/handsontable-chosen-editor";
 
-  export default {
-    components: {
-      qrcode, //二维码页面
-      firm, //
-      supplyDialog,
-      supplierDialog,
-      guaranteeDialog,
-      uploadFilesDialog,
-      maintainerDialog,
-      insurerDialog,
-      uploadImgDialog,
-      picDialog,
-      myPagination,
-      // dialogAssets,
-      myCascader,
-      floorCascader,
-      dieCascader,
+export default {
+  components: {
+    qrcode, //二维码页面
+    firm, //
+    supplyDialog,
+    supplierDialog,
+    guaranteeDialog,
+    uploadFilesDialog,
+    maintainerDialog,
+    insurerDialog,
+    uploadImgDialog,
+    picDialog,
+    myPagination,
+    // dialogAssets,
+    myCascader,
+    floorCascader,
+    dieCascader,
       // detailsDialog,
       lookPic,
       batchDialog
@@ -1317,6 +1317,11 @@
       multiples(val) {
         this.firmDataType = 'dialog'
         switch (val) {
+          case 'TechParam.CompleteMachine.DesignIDGraph': //"设计工况空调机组处理过程焓湿图"
+            this.filesArr = this.forValue(this.newEnclosure, val) ? this.forValue(this.newEnclosure, val) : [];
+            this.infoType = val;
+            this.myDialog.uploadFiles = true;
+            break;
           case 'LedgerParam.InsuranceDoc.InsuranceFile': //保险文件
             this.filesArr = this.forValue(this.newEnclosure, val) ? this.forValue(this.newEnclosure, val) : [];
             this.infoType = val;

文件差异内容过多而无法显示
+ 1569 - 1503
src/components/ledger/handsontables/device.vue


+ 40 - 37
src/components/ledger/lib/editSysFloor.vue

@@ -7,7 +7,6 @@
       </div>
     </div>
 
-
     <span slot="footer" class="dialog-footer">
       <el-button size="small" @click="connectDialogVis=false">取消</el-button>
       <el-button size="small" type="primary" @click="save">确认</el-button>
@@ -15,45 +14,45 @@
   </el-dialog>
 </template>
 <script>
-  import bfCascader from './buildfloorCascader'
-  import {sysRelateBuild, sysRelateFloor} from "@/api/scan/request";
+import bfCascader from './buildfloorCascader'
+import { sysRelateBuild, sysRelateFloor } from "@/api/scan/request";
 
-  export default {
-    data() {
-      return {
-        buildName: '',
-        connectDialogVis: false,
-        system: {}
-      }
-    },
-    components: {
-      bfCascader
-    },
-    props: {
-      isCreate: {
-        default: false
-      }
-    },
-    methods: {
-      showDialog(system) {
-        this.system = system;
-        this.connectDialogVis = true;
-        this.$nextTick(() => {
+export default {
+  data() {
+    return {
+      buildName: '',
+      connectDialogVis: false,
+      system: {}
+    }
+  },
+  components: {
+    bfCascader
+  },
+  props: {
+    isCreate: {
+      default: false
+    }
+  },
+  methods: {
+    showDialog(system) {
+      this.system = system;
+      this.connectDialogVis = true;
+      this.$nextTick(() => {
         this.$refs.bfCascader.getCascader()
         let arr = this.system.BuildingFloorInfoList || [];
         let value = []
-          if (arr.length) {
-            arr.map(t => {
-              if (t.FloorID) {
-                value.push([t.BuildID, t.FloorID]);
-              } else {
-                value.push([t.BuildID])
-              }
-            })
-          }
-          this.$refs.bfCascader.value = value
-          console.log(value)
-        })
+        if (arr.length) {
+          arr.map(t => {
+            if (t.FloorID) {
+              value.push([t.BuildID, t.FloorID]);
+            } else {
+              value.push([t.BuildID])
+            }
+          })
+        }
+        this.$refs.bfCascader.value = value
+        console.log(value)
+      })
     },
     save() {
       // 如果是创建
@@ -94,7 +93,11 @@
       let buildFloor = this.$refs.bfCascader.getSelectedNodes();
       Promise.all([promise1, primise2]).then(res => {
         this.connectDialogVis = false;
-        this.$message.success("关联成功");
+        if (buildIds.length || floorIds.length) {
+          this.$message.success("关联成功");
+        } else {
+          this.$message.success('清除关联成功');
+        }
         this.$emit('relateSuccess', buildFloor);
       })
     }

+ 10 - 2
src/components/ledger/lib/excelDialog.vue

@@ -6,6 +6,7 @@
     </p>
     <el-upload
       class="upload-demo"
+      v-loading='loading'
       drag
       action="/api/datacenter/graphic/import/point"
       :show-file-list='false'
@@ -32,7 +33,8 @@ export default {
   data() {
     return {
       dialogFormVisible: false,
-      messageKey: ''
+      messageKey: '',
+      loading: false
     }
   },
   computed: {
@@ -50,12 +52,18 @@ export default {
       this.dialogFormVisible = true
     },
     progress(event, file, fileList) {
-      // console.log(event.file, fileList)
+      this.loading = true
+      console.log(event.file, fileList, 'progress')
     },
     success(event, file, fileList) {
       if (event.Result == 'success') {
+        this.loading = false
         this.messageKey = event.Message
         this.$message.success('上传成功')
+      } else {
+        this.loading = false
+        this.messageKey =''
+        this.$message.error('目前只支持.xlsx格式,请重新上传')
       }
     },
     error(event, file, fileList) {

+ 3 - 3
src/components/ledger/lib/linkassets.vue

@@ -225,10 +225,10 @@ export default {
           }
           if (this.spaceShow) {
             if (this.buildFloor.length == 2 && this.buildFloor[1] != 'all') {
-              pa.BuildingId = this.buildFloor[0];
-              pa.FloorId = this.buildFloor[1];
+              params.BuildingId = this.buildFloor[0];
+              params.FloorId = this.buildFloor[1];
             } else {
-              pa.BuildingId = this.buildFloor[0];
+              params.BuildingId = this.buildFloor[0];
             }
           }
           zoneQuery(params, res => {

+ 3 - 3
src/components/ledger/lib/lookImages.vue

@@ -136,11 +136,11 @@
       this.picArrs = []
       if (this.keysArr instanceof Array) {
         this.keysArr.map(item => {
-          if (item.type == 'panorama') {
+          if (item.Type == 'panorama') {
             this.panoramaArr.push(item)
-          } else if (item.type == "video") {
+          } else if (item.Type == "video") {
             this.videoArr.push(item)
-          } else if (item.type == 'image_video') {
+          } else if (item.Type == 'image_video') {
             this.videoPicArr.push(item)
           } else {
             this.picArrs.push(item)

+ 11 - 1
src/components/ledger/lib/spaceSelect.vue

@@ -24,12 +24,15 @@ export default {
     isWidth: {
       type: Boolean,
       default: true
+    },
+    isAll:{
+        type: Boolean,
+        default: false
     }
   },
   data() {
     return {
       value:[null],
-      spaceVal: null,//值
       options: [],
       props: {
         isWidth:false
@@ -46,6 +49,13 @@ export default {
       let params1 = {Cascade: [{ Name: 'zoneType', Filters: `ProjectId='${this.projectId}'` }]}
       queryAllZoneType(params1, res => {
         this.options = res.Content;
+        if (this.isAll) {
+            this.options.unshift({
+                Code: "",
+                Name: "全部"
+            });
+            this.value = [''];
+        }
         this.changeVal(this.value);
       })
     },

+ 12 - 5
src/components/ledger/lib/system.vue

@@ -1,16 +1,19 @@
 <template>
   <div id="cascaderMap">
     <span class="buildFloor" style="padding-right: 12px;">所属专业系统类型</span>
-    <el-select v-model="value" placeholder="请选择" :props="props" filterable :style="isWidth ? '' : 'width:160px;'" size="small" @change="changeVal">
-      <el-option v-for="item in options" :key="item.Category" :label="item.CategoryName" :value="item.Category"></el-option>
+    <el-select v-model="value" placeholder="请选择" :props="props" filterable :style="isWidth ? '' : 'width:160px;'"
+               size="small" @change="changeVal">
+      <el-option v-for="item in options" :key="item.Category" :label="item.CategoryName"
+                 :value="item.Category"></el-option>
     </el-select>
     <!-- <el-cascader placeholder="请选择" :options="options" v-model="value" :props="props" filterable :style="isWidth ? '' : 'width:160px;'" size="small"
       @change="changeVal" change-on-select></el-cascader> -->
   </div>
 </template>
 <script>
-import { mapGetters } from 'vuex';
-import { queryLinkSys, queryPhysicsAllType } from "@/api/scan/request";
+import {mapGetters} from 'vuex';
+import {queryLinkSys, queryPhysicsAllType} from "@/api/scan/request";
+
 export default {
   name: "getCode",
   props: {
@@ -82,6 +85,9 @@ export default {
         if (this.value) {
           this.changeVal(this.value)
         }
+        if (res.Content.length < 1) {
+          this.value = ''
+        }
       })
     },
     getAllData() {
@@ -95,7 +101,7 @@ export default {
     changeArr(arr) {
       let data = [];
       arr.forEach(item => {
-        data.push({ Category: item.Code, CategoryName: item.Name });
+        data.push({Category: item.Code, CategoryName: item.Name});
       });
       return data;
     }
@@ -106,6 +112,7 @@ export default {
 #cascaderMap {
   float: left;
   margin-left: 10px;
+
   .buildFloor {
     color: #999999;
     font-size: 14px;

+ 2 - 1
src/components/ledger/lib/uploadImgsName.vue

@@ -127,7 +127,8 @@
     delImage(i, key) {
       if (this.type == "video") {
         this.videoPicArr = this.videoPicArr.map(item => {
-          if (item.key.substring(0, item.length - 3) == this.imagesArr[i].key.substring(0, this.imagesArr[i].length - 3)) {
+          if (item.Key.substring(0, item.length - 3) == this.imagesArr[i].Key.substring(0, this.imagesArr[i].length - 3)) {
+          // if (item.key.substring(0, item.length - 3) == this.imagesArr[i].key.substring(0, this.imagesArr[i].length - 3)) {
             return undefined
           } else {
             return item

+ 2 - 0
src/components/ledger/rentList/roomCountDrawer.vue

@@ -285,6 +285,8 @@ export default {
       tnRelateOneZone(pa, res => { })
     },
     save() {
+      console.log(this.zoneList)
+			debugger
       this.$emit('refresh');
       this.drawer = false;
     }

+ 5 - 2
src/components/ledger/system/dialog/addEquipDialog.vue

@@ -2,8 +2,8 @@
   <el-dialog :title="title" :visible.sync="dialogVisible" width="900px" id="addEqDialog">
     <el-row class="filters">
       <el-col :span="7" style="width:268px">
-        <el-input placeholder="输入设备名称或设备本地编码进行查询" v-model="keycode" clearable @keyup.enter.native="getTableData">
-          <i slot="suffix" class="el-input__icon el-icon-search" @click="getTableData"></i>
+        <el-input placeholder="输入设备名称或设备本地编码进行查询" v-model="keycode" clearable @keyup.enter.native="handleCurrentChange(1)">
+          <i slot="suffix" class="el-input__icon el-icon-search" @click="handleCurrentChange(1)"></i>
         </el-input>
       </el-col>
       <el-col :span="8.5" style="padding:0 0;">
@@ -96,6 +96,7 @@ export default {
     //修改建筑楼层
     changeFloor(value) {
       this.Buildfloor = value;
+      this.page.pageNumber = 1;
       this.getTableData();
     },
     // 显示弹窗
@@ -172,10 +173,12 @@ export default {
     //修改设备类别
     changeDevice(value) {
       this.Equipcategory = value.code;
+      this.page.pageNumber = 1;
       this.getTableData();
     },
     //改变pagesize
     handleSizeChange(pageSize) {
+      this.page.pageNumber = 1;
       this.page.pageSize = pageSize;
       this.getTableData();
     },

+ 22 - 6
src/components/ledger/system/dialog/addSpaceDialog.vue

@@ -10,7 +10,7 @@
         <floor-cascader ref="floorcas" @change="changeFloor"></floor-cascader>
       </el-col>
       <el-col :span="7.5" style="padding:0 0;">
-        <space-select ref="spacesel" @change="changeSpace"></space-select>
+				<space-select ref="spacesel" :isAll="true" @change="changeSpace"></space-select>
       </el-col>
     </el-row>
     <el-row class="filters" :gutter="20"></el-row>
@@ -81,6 +81,7 @@ export default {
       inSpaceType: "业务空间",
       Buildfloor: ["all"], // 选中的建筑楼层
       Spacecategory: null, // 选中的业务空间类型
+			spaceValue: [""], //记录切换成功的业务空间值
       tableData: [],
       floorData: {}, //楼层
       spaceData: {}, //业务空间分区
@@ -114,13 +115,28 @@ export default {
     },
     //修改建筑楼层
     changeFloor(value) {
-      this.Buildfloor = value;
-      this.getTableData();
+			this.Buildfloor = value;
+			this.getTableData();
     },
     //修改空间类型
-    changeSpace(value) {
-      this.Spacecategory = value;
-      this.getTableData();
+    changeSpace(val, space, value) {
+			if (this.selections.length) {
+				this.$confirm('关联的业务空间未保存, 是否继续?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          this.Spacecategory = val;
+					this.spaceValue = value;
+      		this.getTableData();
+        }).catch(() => {
+          this.$refs.spacesel.value = this.spaceValue;  
+        });
+			} else {
+				this.Spacecategory = val;
+				this.spaceValue = value;
+      	this.getTableData();
+			}
     },
     getTableData() {
       let params = {

+ 10 - 10
src/components/model/file/addFloorDialog.vue

@@ -199,16 +199,16 @@
             UserName: this.userInfo.userName,
             UserId: this.userInfo.userId
           };
-          request.modelFileUpload(data, res => {
-            //  创建成功
-            this.$emit("finishCreateFloor", {
-              modelId: res.ModelId,
-              uploadId: res.UploadId,
-              floorId: res.floorId,
-              file: this.form.file
-            });
-            this.handleClose();
-          });
+        //   request.modelFileUpload(data, res => {
+        //     //  创建成功
+        //     this.$emit("finishCreateFloor", {
+        //       modelId: res.ModelId,
+        //       uploadId: res.UploadId,
+        //       floorId: res.floorId,
+        //       file: this.form.file
+        //     });
+        //     this.handleClose();
+        //   });
         }
       }
     },

+ 2 - 2
src/components/model/file/addFolder.vue

@@ -11,7 +11,7 @@
           class="demo-ruleForm"
         >
           <el-form-item label="文件夹名称" prop="name">
-            <el-input v-model="ruleForm.name"  @keyup.enter.native="addFolder" focus></el-input>
+            <el-input  v-model.trim="ruleForm.name"  @keyup.enter.native="addFolder" focus></el-input>
           </el-form-item>
         </el-form>
       </div>
@@ -81,4 +81,4 @@ export default {
     }
   }
 };
-</script>
+</script>

+ 1 - 1
src/components/model/file/floorTable.vue

@@ -258,4 +258,4 @@ export default {
 /deep/ .el-progress-bar__inner {
   text-align: center;
 }
-</style>
+</style>

+ 3 - 3
src/components/ready/buildfloor/addBuild.vue

@@ -30,12 +30,12 @@
 
             <el-input
               v-if="item.InputMode == 'B1' || item.InputMode == 'B2'"
-              v-model="form[item.Path]"/>
+              v-model.trim="form[item.Path]"/>
 
             <el-input
               v-else-if="item.InputMode == 'A1'||item.InputMode == 'A2'"
               type="number"
-              v-model="form[item.Path]">
+              v-model.trim="form[item.Path]">
               <template slot="append" v-if="item.Unit">{{item.Unit}}</template>
             </el-input>
 
@@ -77,7 +77,7 @@
 
             <el-input
               v-else-if="item.InputMode == 'L'||item.InputMode == 'L1'||item.InputMode == 'L2'||item.InputMode == 'M'"
-              v-model="form[item.Path]">
+              v-model.trim="form[item.Path]">
               <template slot="append" v-if="item.Unit">{{item.Unit}}</template>
             </el-input>
 

+ 108 - 103
src/components/ready/buildfloor/formItems.vue

@@ -9,13 +9,13 @@
           :class="{FloorTypeSelect:item.InputMode == 'D1'||item.Unit}">
 
           <el-input
-            v-model="form[item.Path]"
+            v-model.trim="form[item.Path]"
             v-if="item.InfoPointCode == 'BIMLocation' || item.InfoPointCode =='ModelID'"
             disabled/>
 
           <!--二维码相关-->
           <span v-else-if="item.InfoPointCode == 'DefaultQRCode' ">
-            <el-input v-if="!form[item.Path]" v-model="form[item.Path]" disabled/>
+            <el-input v-if="!form[item.Path]" v-model.trim="form[item.Path]" disabled/>
             <el-popover v-else placement="right" width="210" trigger="click">
               <div style="overflow:hidden;">
                 <img
@@ -28,7 +28,7 @@
           </span>
 
           <span v-else-if="item.InfoPointCode == 'QRCodePic' ">
-            <el-input v-if="!form[item.Path]" v-model="form[item.Path]" disabled/>
+            <el-input v-if="!form[item.Path]" v-model.trim="form[item.Path]" disabled/>
             <el-popover v-else placement="right" width="210" trigger="click">
               <div style="overflow:hidden;">
                 <img
@@ -42,14 +42,17 @@
 
           <!--/二维码相关-->
           <span v-else-if="item.InputMode == 'B1'">
-            <el-input v-model="form[item.Path]" :placeholder="(item.InputMode === 'B1' && item.Path==='FloorLocalID') ? '填写示例:F1、B1?':'' "/>
-              <div v-if="item.InputMode === 'B1' && item.Path==='FloorLocalID' && isShowTitle" style="color: gray;font-size: 12px" >
+            <el-input v-model.trim="form[item.Path]"
+                      :placeholder="(item.InputMode === 'B1' && item.Path==='FloorLocalID') ? '填写示例:F1、B1?':'' "/>
+              <div v-if="item.InputMode === 'B1' && item.Path==='FloorLocalID' && isShowTitle"
+                   style="color: gray;font-size: 12px">
                 用于楼层平面图切换
               </div>
           </span>
 
-          <el-input v-model="form[item.Path]" v-else-if="item.InputMode == 'A1'||item.InputMode == 'A2'" type="number">
-            <template slot="append" v-if="item.Unit">{{item.Unit}}</template>
+          <el-input v-model.trim="form[item.Path]" v-else-if="item.InputMode == 'A1'||item.InputMode == 'A2'"
+                    type="number">
+            <template slot="append" v-if="item.Unit">{{ item.Unit }}</template>
           </el-input>
 
           <el-select v-model="form[item.Path]" placeholder="请选择" v-else-if="item.InputMode == 'D1'">
@@ -57,20 +60,22 @@
           </el-select>
 
           <el-cascader
-              v-else-if="item.InputMode == 'D1L'"
-              placeholder="请选择"
-              :options="item.options"
-              v-model="form[item.Path]"
-              :props="item.props"
-              filterable
-              :show-all-levels="false"
-              clearable
-              style="width: 200px"/>
+            v-else-if="item.InputMode == 'D1L'"
+            placeholder="请选择"
+            :options="item.options"
+            v-model="form[item.Path]"
+            :props="item.props"
+            filterable
+            :show-all-levels="false"
+            clearable
+            style="width: 200px"/>
 
-          <el-input v-else-if="item.InputMode == 'L'||item.InputMode == 'L1'||item.InputMode == 'L2'||item.InputMode == 'M'" v-model="form[item.Path]">
-            <template slot="append" v-if="item.Unit">{{item.Unit}}</template>
+          <el-input
+            v-else-if="item.InputMode == 'L'||item.InputMode == 'L1'||item.InputMode == 'L2'||item.InputMode == 'M'"
+            v-model.trim="form[item.Path]">
+            <template slot="append" v-if="item.Unit">{{ item.Unit }}</template>
           </el-input>
-          <el-input v-model="form[item.Path]" v-else disabled title="暂不支持"></el-input>
+          <el-input v-model.trim="form[item.Path]" v-else disabled title="暂不支持"></el-input>
           <!--                    <div>{{item.InputMode}}{{item.InfoPointCode}}</div>-->
         </el-form-item>
       </div>
@@ -78,99 +83,99 @@
   </div>
 </template>
 <script>
-  import {getDataDictionary} from "@/api/scan/request";
+import {getDataDictionary} from "@/api/scan/request";
 
-  export default {
-    props: {
-      type: {
-        default: 'Floor'
+export default {
+  props: {
+    type: {
+      default: 'Floor'
+    }
+  },
+  data() {
+    let validateId = (rule, value, callback) => {
+      if (!value) {
+        this.isShowTitle = false
+        return callback(new Error('请输入楼层本地编码'));
+      } else {
+        this.isShowTitle = true
+        callback()
       }
-    },
-    data() {
-      let validateId = (rule, value, callback) => {
-        if (!value) {
-          this.isShowTitle = false
-          return callback(new Error('请输入楼层本地编码'));
-        } else {
-          this.isShowTitle = true
-          callback()
-        }
+    }
+    // }
+    return {
+      form: {},
+      isShowTitle: true,
+      InforsList: [],
+      all: true, // 默认显示全部
+      rules: {
+        "FloorLocalID": [
+          {validator: validateId, trigger: 'blur', "required": true}
+        ],
+        "FloorLocalName": [
+          {"required": true, "message": "请输入楼层本地名称", "trigger": "blur"}
+        ],
+        "FloorSequenceID": [
+          {"required": true, "message": "请输入楼层顺序号", "trigger": "blur"}
+        ]
       }
-      // }
-      return {
-        form: {},
-        isShowTitle: true,
-        InforsList: [],
-        all: true, // 默认显示全部
-        rules: {
-          "FloorLocalID": [
-            {validator: validateId, trigger: 'blur', "required": true}
-          ],
-          "FloorLocalName": [
-            {"required": true, "message": "请输入楼层本地名称", "trigger": "blur"}
-          ],
-          "FloorSequenceID": [
-            {"required": true, "message": "请输入楼层顺序号", "trigger": "blur"}
-          ]
-        }
-      };
-    },
+    };
+  },
 
-    created() {
-      this.getInforsPoint()
-    }
-    ,
-    methods: {
+  created() {
+    this.getInforsPoint()
+  }
+  ,
+  methods: {
 
-      getInforsPoint() {
-        let params = {
-          data: {
-            Orders: "sort asc,InfoPointCode asc",
-            PageNumber: 1,
-            PageSize: 1000
-          },
-          type: this.type
-        };
-        getDataDictionary(params, res => {
-          let arr = res.Content.map(item => {
-            if ((item.InputMode === 'D1' || item.InputMode === 'D2' || item.InputMode === 'E2' || item.InputMode === 'D1L') && item.DataSource) {
-              item.options = JSON.parse(item.DataSource)
-              if (item.options[0] && item.options[0].Content) {
-                item.props = {
-                  value: 'Code',
-                  label: 'Name',
-                  children: 'Content',
-                  checkStrictly: true
-                }
+    getInforsPoint() {
+      let params = {
+        data: {
+          Orders: "sort asc,InfoPointCode asc",
+          PageNumber: 1,
+          PageSize: 1000
+        },
+        type: this.type
+      };
+      getDataDictionary(params, res => {
+        let arr = res.Content.map(item => {
+          if ((item.InputMode === 'D1' || item.InputMode === 'D2' || item.InputMode === 'E2' || item.InputMode === 'D1L') && item.DataSource) {
+            item.options = JSON.parse(item.DataSource)
+            if (item.options[0] && item.options[0].Content) {
+              item.props = {
+                value: 'Code',
+                label: 'Name',
+                children: 'Content',
+                checkStrictly: true
               }
             }
-            switch (item.InfoPointCode) { //过滤掉待删除的
-              case 'FloorIdentity':
-              case 'RelatedSchedule':
-              case 'OutPeopleFlow':
-              case 'InPeopleFlow':
-              case 'ExsitPeopleNum':
-                break;
-              default:
-                return item
-            }
-          })
-          //手动删除掉数据字典中不存在的字段,等待后台同步
-          this.InforsList = arr.filter(t => t && t.InfoPointCode != 'FloorQRCode')
-        })
-      },
-      submitForm(call) {
-        this.$refs.ruleForm.validate((valid) => {
-          if (valid) {
-            call()
-          } else {
-            return false;
           }
-        });
-      },
+          switch (item.InfoPointCode) { //过滤掉待删除的
+            case 'FloorIdentity':
+            case 'RelatedSchedule':
+            case 'OutPeopleFlow':
+            case 'InPeopleFlow':
+            case 'ExsitPeopleNum':
+              break;
+            default:
+              return item
+          }
+        })
+        //手动删除掉数据字典中不存在的字段,等待后台同步
+        this.InforsList = arr.filter(t => t && t.InfoPointCode != 'FloorQRCode')
+      })
+    },
+    submitForm(call) {
+      this.$refs.ruleForm.validate((valid) => {
+        if (valid) {
+          call()
+        } else {
+          return false;
+        }
+      });
+    },
 
-    }
-  };
+  }
+};
 </script>
 <style lang="scss" scoped>
 #inforsPoint {

+ 4 - 0
src/components/relation/overview/CardList.vue

@@ -168,6 +168,7 @@
       :TableVisibleMoreLoading="TableVisibleMoreLoading"
       @openComputed="openComputed"
       @RelationType="RelationType"
+      @Refresh="Refresh"
     />
   </div>
 
@@ -225,6 +226,9 @@
     computed: {},
 
     methods: {
+      Refresh() {
+        this.$emit('Refresh')
+      },
       explain() {
         // alert('explain click')
       },

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

@@ -519,7 +519,7 @@
       },
 
       promptly() {
-    
+
         if (this.isComputed.IsAutomatic && !this.isComputed.IsSource) { //需要自动计算并且不需要配置云末端
           this.$emit('RelationType', this.isComputed.RelationType, this.isComputed.ZoneType)
         }
@@ -593,6 +593,7 @@
         }
         calcSpecial(params, res => {
           this.$message.success('计算成功')
+          this.$emit('Refresh')
         })
 
       },

+ 68 - 50
src/framework/layout/Main.vue

@@ -1,52 +1,56 @@
 <template>
     <div id='page-main' v-bind:class='{"page-sidebar-closed": sidebarClosed}'>
-        <page-header></page-header>
+      <page-header></page-header>
 
-        <div id='page-container' class='page-container'>            
-            <page-sidebar></page-sidebar>            
-            <div id='page-content-wrapper' class='page-content-wrapper'>
-                <div class='page-bar'>
-                    <el-breadcrumb separator='/'>
-                    <el-breadcrumb-item v-show="!breadcrumb.length"  :to='{ path: "/" }'>首页</el-breadcrumb-item>
-                    <el-breadcrumb-item v-show="breadcrumb.length" v-for='(b, index) in breadcrumb' :key='index' :to='b.path ? { path: b.path } : null'>{{b.label}}</el-breadcrumb-item>                       
-                    </el-breadcrumb>
-                </div>
-                <!-- <router-view class='page-content'/> -->
-                <keep-alive>
-                    <router-view v-if='$route.meta.keepAlive' class='page-content'></router-view>
-                </keep-alive>
-                <router-view v-if='!$route.meta.keepAlive' class='page-content'></router-view>
-            </div>
+      <div id='page-container' class='page-container'>
+        <page-sidebar></page-sidebar>
+        <div id='page-content-wrapper' class='page-content-wrapper'>
+          <div class='page-bar'>
+            <el-breadcrumb separator='/'>
+              <el-breadcrumb-item v-show="!breadcrumb.length" :to='{ path: "/" }'>首页</el-breadcrumb-item>
+              <el-breadcrumb-item v-show="breadcrumb.length" v-for='(b, index) in breadcrumb' :key='index'
+                                  :to='b.path ? { path: b.path } : null'>{{ b.label }}
+              </el-breadcrumb-item>
+            </el-breadcrumb>
+          </div>
+          <!-- <router-view class='page-content'/> -->
+          <keep-alive>
+            <router-view v-if='$route.meta.keepAlive' class='page-content'></router-view>
+          </keep-alive>
+          <router-view v-if='!$route.meta.keepAlive' class='page-content'></router-view>
+          <div class="version">当前版本: V 4.0.1</div>
         </div>
-        <!-- <div class='page-footer'>
-            © 2016 SAGACLOUD. All rights reserved 京ICP备16059843号-1
-        </div>-->
+      </div>
+      <!--     <div class='page-footer'>-->
+      <!--            © 2016 SAGACLOUD. All rights reserved 京ICP备16059843号-1-->
+      <!--        </div>-->
     </div>
 </template>
 <script>
-import { mapGetters, mapMutations } from 'vuex'
+import {mapGetters, mapMutations} from 'vuex'
 import PageHeader from './PageHeader'
 import PageSidebar from './PageSidebar'
-import menus from '@/data/menus' 
+import menus from '@/data/menus'
+
 export default {
-    name: 'Main',
-    components: {
-        'page-header': PageHeader,
-        'page-sidebar': PageSidebar
-    },
-    props: [],
-    data() {
-        return {
-            isPath:  false
-        }
-    },
-    computed: {
-        ...mapGetters('layout', ['sidebarClosed', 'breadcrumb'])
-    },
-    methods: {
-        ...mapMutations('layout', ['setSidebarClosed','setSidebarSelected']),
-        windwoResize() {
-            // 窗口大小发生变化时
+  name: 'Main',
+  components: {
+    'page-header': PageHeader,
+    'page-sidebar': PageSidebar
+  },
+  props: [],
+  data() {
+    return {
+      isPath: false
+    }
+  },
+  computed: {
+    ...mapGetters('layout', ['sidebarClosed', 'breadcrumb'])
+  },
+  methods: {
+    ...mapMutations('layout', ['setSidebarClosed', 'setSidebarSelected']),
+    windwoResize() {
+      // 窗口大小发生变化时
             let clientWidth = `${document.documentElement.clientWidth}`
             let clientHeight = `${document.documentElement.clientHeight}`
             //this.setPageContentHeight(height)
@@ -71,17 +75,31 @@ export default {
     },
     watch: {
         "$route": {
-            handler: function(route, oldVal){
-                let path = route.path
-                this.isPath = false;
-                this.findPathInArray(menus,path)
-                if(this.isPath) {
-                    this.setSidebarSelected(path)
-                }
-            },
-            // 深度观察监听
-            deep: true
+          handler: function (route, oldVal) {
+            let path = route.path
+            this.isPath = false;
+            this.findPathInArray(menus, path)
+            if (this.isPath) {
+              this.setSidebarSelected(path)
+            }
+          },
+          // 深度观察监听
+          deep: true
         }
     },
 }
-</script>
+</script>
+<style lang="less">
+#page-main {
+
+  .version {
+    order: 2;
+    flex-grow: 0;
+    flex-shrink: 0;
+    height: 15px;
+    line-height: 1.3;
+    text-align: center;
+    color: #6d6d6d;
+  }
+}
+</style>

+ 143 - 130
src/framework/layout/PageHeader.vue

@@ -1,156 +1,169 @@
 <template>
-    <div class='page-header'>
-        <div id='page-header-logo' class='page-logo'>
-            <a @click="toIndex">
-                <img src='@/assets/logo.png' alt='logo' class='logo-default'>
-            </a>
-            <div class='menu-toggler sidebar-toggler' @click.stop='toggleSidebar'>
+  <div class='page-header'>
+    <div id='page-header-logo' class='page-logo'>
+      <a @click="toIndex">
+        <img src='@/assets/logo.png' alt='logo' class='logo-default'>
+      </a>
+      <div class='menu-toggler sidebar-toggler' @click.stop='toggleSidebar'>
                 <span>
                     <i class='el-icon-fa-bars'></i>
                 </span>
-            </div>
-        </div>
-        <div id='page-header-data-menu' class='data-menu'>
-            <el-select v-model='selectedProjectId' placeholder='请选择' filterable>
-                <el-option-group v-for="group in projectGropList" :key="group.label" :label="group.label">
-                    <el-option v-for='item in group.options' :key='item.id' :label='item.name' :value='item.id'></el-option>
-                </el-option-group>
-            </el-select>
-        </div>
-        <div id='page-header-user-menu' class='user-menu'>
-            <el-dropdown trigger='hover' class='user-menu-dropdown' @command='userMenuCommand'>
-                <span class='el-dropdown-link'>
-                    {{userInfo.userName}}
-                    <i class='el-icon-fa-user el-icon--right'></i>
-                </span>
-                <el-dropdown-menu slot='dropdown'>
-                    <el-dropdown-item icon='el-icon-plus' command='logout'>退出</el-dropdown-item>
-                    <el-dropdown-item icon='el-icon-circle-plus'>修改密码</el-dropdown-item>
-                </el-dropdown-menu>
-            </el-dropdown>
-            <ul class="header-nav">
-                <li class="header-nav-Splitscreen">
-                    <a href="/splitScreen" target="_blank"><i class="el-icon-s-platform"></i></a>
-                </li>
-                <li class="header-nav-notification">
-                    <message-sever></message-sever>
-                </li>
-            </ul>
-        </div>
+      </div>
+    </div>
+    <div id='page-header-data-menu' class='data-menu'>
+      <el-select v-model='selectedProjectId' placeholder='请选择' filterable>
+        <el-option-group v-for="group in projectGropList" :key="group.label" :label="group.label">
+          <el-option v-for='item in group.options' :key='item.id' :label='item.name' :value='item.id'></el-option>
+        </el-option-group>
+      </el-select>
+    </div>
+    <div id='page-header-user-menu' class='user-menu'>
+         <span class='el-dropdown-link' style="margin-top: 11px;">
+              {{userInfo.userName}}
+              <i class='el-icon-fa-user el-icon--right'></i>
+          </span>
+<!--      <el-dropdown trigger='hover' class='user-menu-dropdown' @command='userMenuCommand'>-->
+<!--                      <span class='el-dropdown-link'>-->
+<!--                          {{ userInfo.userName }}-->
+<!--                          <i class='el-icon-fa-user el-icon&#45;&#45;right'></i>-->
+<!--                      </span>-->
+<!--        <el-dropdown-menu slot='dropdown'>-->
+<!--          <el-dropdown-item icon='el-icon-plus' command='logout'>退出</el-dropdown-item>-->
+<!--          <el-dropdown-item icon='el-icon-circle-plus'>修改密码</el-dropdown-item>-->
+<!--        </el-dropdown-menu>-->
+<!--      </el-dropdown>-->
+      <ul class="header-nav">
+        <li class="header-nav-Splitscreen">
+          <a href="/splitScreen" target="_blank"><i class="el-icon-s-platform"></i></a>
+        </li>
+        <li class="header-nav-notification">
+          <message-sever></message-sever>
+        </li>
+      </ul>
     </div>
+  </div>
 </template>
 <script>
 import frameworkApi from '@/api/framework'
-import { mapGetters, mapMutations } from 'vuex'
+import {mapGetters, mapMutations} from 'vuex'
 import getFirstLetter from '@/utils/getFirstLetter'
 import MessageSever from '../components/messagesever/index'
 import lStorage from '@/utils/localStorage'
+
 export default {
-    name: 'PageHeader',
-    props: [],
-    data() {
-        return {
-            selectedProjectId: null
+  name: 'PageHeader',
+  props: [],
+  data() {
+    return {
+      selectedProjectId: null
+    }
+  },
+  computed: {
+    ...mapGetters('layout', ['sidebarClosed', 'userInfo', 'projects', 'projectId']),
+    projectGropList() {
+      const cacheInfo = lStorage.get('historyInfo') ? lStorage.get('historyInfo') : {}
+      let options = [{
+        label: '最近使用',
+        options: []
+      }]
+      const projectHistory = cacheInfo[this.userInfo.userName] || [];
+      let copyProjects = JSON.parse(JSON.stringify(this.projects));
+      options[0].options = projectHistory.map(projectId => {
+        let obj = this.projects.find(project => {
+          return project.id === projectId
+        });
+        let index = copyProjects.findIndex(project => {
+          return project.id === projectId
+        })
+        if (index != -1) {
+          copyProjects.splice(index, 1);
         }
-    },
-    computed: {
-        ...mapGetters('layout', ['sidebarClosed', 'userInfo', 'projects', 'projectId']),
-        projectGropList () {
-            const cacheInfo = lStorage.get('historyInfo')?lStorage.get('historyInfo'):{}
-            let options = [{
-                label: '最近使用',
-                options: []
-            }]
-            const projectHistory = cacheInfo[this.userInfo.userName] || [];
-            let copyProjects = JSON.parse(JSON.stringify(this.projects));
-            options[0].options = projectHistory.map(projectId => {
-                let obj = this.projects.find(project => {
-                    return project.id === projectId
-                });
-                let index = copyProjects.findIndex(project => {
-                    return project.id === projectId
-                })
-                if (index != -1) {
-                    copyProjects.splice(index, 1);
-                }
-                return obj?obj:[]
-            })
+        return obj ? obj : []
+      })
 
-            let helpObj = {}
-            copyProjects.forEach(p => {
-                const label = getFirstLetter((p.name || p.id).slice(0, 1))
-                if (helpObj[label]) {
-                    helpObj[label].push(p)
-                } else {
-                    helpObj[label] = [p]
-                }
-            })
-            const arr = Object.keys(helpObj).sort().map(label => {
-                return {
-                    label: label,
-                    options: helpObj[label]
-                }
-            })
-            return [...(options[0].options.length > 0 ? options : []), ...arr]
+      let helpObj = {}
+      copyProjects.forEach(p => {
+        const label = getFirstLetter((p.name || p.id).slice(0, 1))
+        if (helpObj[label]) {
+          helpObj[label].push(p)
+        } else {
+          helpObj[label] = [p]
         }
-    },
-    watch: {
-        selectedProjectId(n, o) {
-            this.setprojectId(n)
+      })
+      const arr = Object.keys(helpObj).sort().map(label => {
+        return {
+          label: label,
+          options: helpObj[label]
         }
+      })
+      return [...(options[0].options.length > 0 ? options : []), ...arr]
+    }
+  },
+  watch: {
+    selectedProjectId(n, o) {
+      this.setprojectId(n)
+    }
+  },
+  methods: {
+    ...mapMutations('layout', ['setSidebarClosed', 'setprojectId']),
+    handleSelect() {
     },
-    methods: {
-        ...mapMutations('layout', ['setSidebarClosed', 'setprojectId']),
-        handleSelect() {},
-        toggleSidebar() {
-            this.setSidebarClosed(!this.sidebarClosed)
-        },
-        userMenuCommand(cmd) {
-            // console.log('userMenuCommand ', cmd)
-            if (cmd == 'logout') {
-                console.log("点击登出l")
-                frameworkApi.toLogout()
-            }
-        },
-        toIndex() {
-            this.$router.push('/')
-        }
+    toggleSidebar() {
+      this.setSidebarClosed(!this.sidebarClosed)
     },
-    created() {
-        let cacheInfo = lStorage.get('historyInfo')?lStorage.get('historyInfo'):{}
-        if(cacheInfo[this.userInfo.userName] &&
-            cacheInfo[this.userInfo.userName][0] &&
-            this.projects.some((item) => {return item.id == cacheInfo[this.userInfo.userName][0]})
-        ){
-            this.selectedProjectId = cacheInfo[this.userInfo.userName][0]
-        } else {
-            this.selectedProjectId = this.projectId
-        }
+    userMenuCommand(cmd) {
+      // console.log('userMenuCommand ', cmd)
+      if (cmd == 'logout') {
+        console.log("点击登出l")
+        frameworkApi.toLogout()
+      }
     },
-    mounted() {},
-    components: {
-        MessageSever
+    toIndex() {
+      this.$router.push('/')
+    }
+  },
+  created() {
+    let cacheInfo = lStorage.get('historyInfo') ? lStorage.get('historyInfo') : {}
+    if (cacheInfo[this.userInfo.userName] &&
+      cacheInfo[this.userInfo.userName][0] &&
+      this.projects.some((item) => {
+        return item.id == cacheInfo[this.userInfo.userName][0]
+      })
+    ) {
+      this.selectedProjectId = cacheInfo[this.userInfo.userName][0]
+    } else {
+      this.selectedProjectId = this.projectId
     }
+  },
+  mounted() {
+  },
+  components: {
+    MessageSever
+  }
 }
 </script>
 <style lang="scss" scoped>
-.header-nav-Splitscreen>a{
-    display: flex;
-    width: 100%;
-    height: 100%;
-    position: relative;
-    padding: 16px 10px 10px;
-    -webkit-box-sizing: border-box;
-    box-sizing: border-box;
-    color: #79869a;
-    font-size: 24px;
-    text-decoration: none;
-    cursor: pointer;
-    i{transition:all 0ms ease 0ms}
+.header-nav-Splitscreen > a {
+  display: flex;
+  width: 100%;
+  height: 100%;
+  position: relative;
+  padding: 16px 10px 10px;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  color: #79869a;
+  font-size: 24px;
+  text-decoration: none;
+  cursor: pointer;
+
+  i {
+    transition: all 0ms ease 0ms
+  }
 }
-.header-nav-Splitscreen>a:hover{
-    text-decoration: none;
-    color: #d3d8e2;
-    background-color: #3f4f62;
+
+.header-nav-Splitscreen > a:hover {
+  text-decoration: none;
+  color: #d3d8e2;
+  background-color: #3f4f62;
 }
 </style>

+ 124 - 86
src/framework/layout/layout-store.js

@@ -1,3 +1,4 @@
+
 import frameworkApi from '@/api/framework'
 import storage from '@/framework/utils/storage'
 import lStorage from '@/utils/localStorage'
@@ -8,106 +9,143 @@ const KEY_PAGE_BRANDCRUMB = 'page_brandcrumb'
 
 export default {
   namespaced: true,
-    state: {
-      sidebarClosed: false,
-      sidebarSelected: '', // sidebar选中的选项
-      userInfo: null, //{ username: 'admin' },
-      permissions: {
-        "system:role:delete": true,
-        "system:role:create": true,
-        "system:role:query": true,
-        "system:role:setOpts": true
-      },
-      projectId: '',
-      projects: [],
-      breadcrumb: [],
-      uploaderList: [], //当前上传文件列表
-      secret: "", //项目密码
-      userId: "", //用户id
-      rowEdit: false,//表格数据变化
-      errorReport:[],//扫楼错误报告
+  state: {
+    sidebarClosed: false,
+    sidebarSelected: '', // sidebar选中的选项
+    // userInfo: null, //{ username: 'admin' },
+    userInfo: {
+      userName: 'yanruolan',
+      userId: '06328a53c69a41bb8f5bb1a552c6e8d6'
     },
-    getters: {
-      sidebarClosed: state => state.sidebarClosed,
-      secret: state => state.secret,
-      userId: state => state.userId,
-      sidebarSelected: state => {
-        // if (!state.pageSidebarSelected) {
-        //     let menu = storage.get(KEY_MENU_SELECTED)
-        //     if (menu) {
-        //         state.pageSidebarSelected = menu
-        //     }
-        // }
-        // return state.pageSidebarSelected
-        return state.sidebarSelected
-      },
-      userInfo: state => state.userInfo,
-      permissions: state => state.permissions,
-      projects: state => state.projects,
-      uploaderList: state => state.uploaderList,
-      projectId: state => {
-        if (!state.projectId) {
-          let pid = storage.get(KEY_PROJECT_SELECTED)
-          if (pid) {
-            state.projectId = pid
-          }
+    permissions: {
+      "system:role:delete": true,
+      "system:role:create": true,
+      "system:role:query": true,
+      "system:role:setOpts": true
+    },
+    projectId: 'Pj5101050001',
+    projects: [{
+      id: "Pj5101050001",
+      name: "成都青羊万达广场",
+      pwd: "saga123456"
+    },{
+      id: "Pj1101080260",
+      name: "万达测试",
+      pwd: "saga123456"
+    },{
+      id: "Pj5107030002",
+      name: "绵阳CBD万达广场",
+      pwd: "saga123456"
+    },{
+      id: "Pj1101050029",
+      name: "北京东坝万达广场",
+      pwd: "saga123456"
+    },{
+      id: "Pj4419000005",
+      name: "莞城万科城市广场",
+      pwd: "saga123456"
+    },{
+      id: "Pj1101080259",
+      name: "博锐尚格北京总部办公楼",
+      pwd: "saga123456"
+    },{
+      id: "Pj4101020002",
+      name: "郑州亿达科技新城展厅",
+      pwd: "saga123456"
+    },{
+      id: "Pj1102270001",
+      name: "北京怀柔万达广场",
+      pwd: "saga123456"
+    }],
+    breadcrumb: [],
+    uploaderList: [], //当前上传文件列表
+    secret: "saga123456", //项目密码
+    userId: "06328a53c69a41bb8f5bb1a552c6e8d6", //用户id
+    rowEdit: false,//表格数据变化
+    errorReport: [],//扫楼错误报告
+  },
+  getters: {
+    sidebarClosed: state => state.sidebarClosed,
+    secret: state => state.secret,
+    userId: state => state.userId,
+    sidebarSelected: state => {
+      // if (!state.pageSidebarSelected) {
+      //     let menu = storage.get(KEY_MENU_SELECTED)
+      //     if (menu) {
+      //         state.pageSidebarSelected = menu
+      //     }
+      // }
+      // return state.pageSidebarSelected
+      return state.sidebarSelected
+    },
+    userInfo: state => state.userInfo,
+    permissions: state => state.permissions,
+    projects: state => state.projects,
+    uploaderList: state => state.uploaderList,
+    projectId: state => {
+      if (!state.projectId) {
+        let pid = storage.get(KEY_PROJECT_SELECTED)
+        if (pid) {
+          state.projectId = pid
         }
-        return state.projectId
-      },
-      breadcrumb: state => {
-        if (!state.breadcrumb) {
-          let arr = storage.get(KEY_PAGE_BRANDCRUMB)
-          if (arr) {
-            state.breadcrumb = arr
-          }
+      }
+      return state.projectId
+    },
+    breadcrumb: state => {
+      if (!state.breadcrumb) {
+        let arr = storage.get(KEY_PAGE_BRANDCRUMB)
+        if (arr) {
+          state.breadcrumb = arr
         }
-        return state.breadcrumb
       }
+      return state.breadcrumb
+    }
+  },
+  mutations: {
+    setRowEdit: (state, val) => (state.rowEdit = val),
+    setErrorReport: (state, val) => (state.errorReport = val),
+    setSidebarClosed: (state, val) => (state.sidebarClosed = val),
+    setSidebarSelected: (state, val) => {
+      state.sidebarSelected = val
+      storage.set(KEY_MENU_SELECTED, val)
+      lStorage.set('screen_data', {path: val, data: {}})
     },
-    mutations: {
-      setRowEdit: (state, val) => (state.rowEdit = val),
-      setErrorReport:(state,val) => (state.errorReport = val),
-      setSidebarClosed: (state, val) => (state.sidebarClosed = val),
-      setSidebarSelected: (state, val) => {
-        state.sidebarSelected = val
-        storage.set(KEY_MENU_SELECTED, val)
-        lStorage.set('screen_data', {path: val, data: {}})
-      },
-      setprojectId: (state, val) => {
-        lStorage.remove('cacheInfo') //待删除(删除用户浏览器无用缓存)
-        let cacheInfo = lStorage.get('historyInfo') ? lStorage.get('historyInfo') : {}
-        state.projectId = val
-        localStorage.setItem('projectId', val)
-        if (cacheInfo[state.userInfo.userName]) {
-          // cacheInfo[state.userInfo.userName].projectId = val
-          cacheInfo[state.userInfo.userName] = [...new Set([val, ...cacheInfo[state.userInfo.userName]])].slice(0,3)
-          lStorage.set('historyInfo', cacheInfo)
-        } else {
-          cacheInfo[state.userInfo.userName] = [val]
-          lStorage.set('historyInfo', cacheInfo)
+    setprojectId: (state, val) => {
+      lStorage.remove('cacheInfo') //待删除(删除用户浏览器无用缓存)
+      let cacheInfo = lStorage.get('historyInfo') ? lStorage.get('historyInfo') : {}
+      state.projectId = val
+      localStorage.setItem('projectId', val)
+      if (cacheInfo[state.userInfo.userName]) {
+        // cacheInfo[state.userInfo.userName].projectId = val
+        cacheInfo[state.userInfo.userName] = [...new Set([val, ...cacheInfo[state.userInfo.userName]])].slice(0, 3)
+        lStorage.set('historyInfo', cacheInfo)
+      } else {
+        cacheInfo[state.userInfo.userName] = [val]
+        lStorage.set('historyInfo', cacheInfo)
+      }
+      storage.set(KEY_PROJECT_SELECTED, val)
+      state.projects.map((item) => {
+        if (item.id == val) {
+          state.secret = item.pwd
+          localStorage.setItem('secret', item.pwd)
         }
-        storage.set(KEY_PROJECT_SELECTED, val)
-        state.projects.map((item) => {
-          if (item.id == val) {
-            state.secret = item.pwd
-            localStorage.setItem('secret', item.pwd)
-          }
-        })
-      },
-      setUploaderList: (state, val) => {
-        state.uploaderList = val ? val : []
-      },
-
+      })
+    },
+    setUploaderList: (state, val) => {
+      state.uploaderList = val ? val : []
     },
+
+  },
   actions: {
     setRowEdit(contentx, value) {
       contentx.commit('setRowEdit', value)
     },
-    setErrorReport(contentx,value) {
-      contentx.commit('setErrorReport',value)
+    setErrorReport(contentx, value) {
+      contentx.commit('setErrorReport', value)
     },
     loadUserInfo({state}) {
       console.log(state)
+      // 获取 userInfo 信息
       return new Promise((resolve, reject) => {
         frameworkApi.loadUserInfo().then(resp => {
           console.log(resp)

+ 16 - 12
src/utils/handsontable/notShow.js

@@ -1049,7 +1049,9 @@ const showTools = {
             item.InfoPointCode == "InstallInstruction" ||
             item.InfoPointCode == "SupplierContract" ||
             item.InfoPointCode == "Drawing" ||
-            item.InfoPointCode == "InstallDrawing"
+            item.InfoPointCode == "InstallDrawing" ||
+            item.InfoPointCode == "DesignIDGraph" ||
+            item.InfoPointCode == "FanCharacterCurve"
         ) {
             return {
                 data: item.Path,
@@ -1123,7 +1125,7 @@ const showTools = {
             return {
                 data: item.Path,
                 renderer: text.lookQRCode,
-                readOnly: !item.Editable
+                readOnly: onlyRead
             }
         }
 
@@ -1136,7 +1138,7 @@ const showTools = {
             return {
                 data: item.Path,
                 renderer: text.picType,
-                readOnly: !item.Editable
+                readOnly: onlyRead
             }
         }
 
@@ -1154,12 +1156,14 @@ const showTools = {
             item.InfoPointCode == "InstallInstruction" ||
             item.InfoPointCode == "SupplierContract" ||
             item.InfoPointCode == "Drawing" ||
-            item.InfoPointCode == "InstallDrawing"
+            item.InfoPointCode == "InstallDrawing" ||
+            item.InfoPointCode == "DesignIDGraph" ||
+            item.InfoPointCode == "FanCharacterCurve"
         ) {
             return {
                 data: item.Path,
                 renderer: text.fileType,
-                readOnly: !item.Editable
+                readOnly: onlyRead
             }
         }
 
@@ -1173,7 +1177,7 @@ const showTools = {
             return {
                 data: item.Path,
                 renderer: text.idType,
-                readOnly: !item.Editable
+                readOnly: onlyRead
             }
         }
 
@@ -1182,7 +1186,7 @@ const showTools = {
                 data: item.Path,
                 renderer: tools.customDropdownRenderer,
                 editor: "chosen",
-                readOnly: !item.Editable,
+                readOnly: onlyRead,
                 chosenOptions: {
                     data: item.DataSource ? tools.formatDataSource(item.DataSource) : ""
                 }
@@ -1192,7 +1196,7 @@ const showTools = {
                 data: item.Path,
                 renderer: tools.customDropdownRenderer,
                 editor: "chosen",
-                readOnly: !item.Editable,
+                readOnly: onlyRead,
                 chosenOptions: {
                     multiple: true, //多选
                     data: item.DataSource ? tools.formatDataSource(item.DataSource) : ""
@@ -1202,7 +1206,7 @@ const showTools = {
             return {
                 data: item.Path,
                 type: "numeric",
-                readOnly: !item.Editable,
+                readOnly: onlyRead,
                 numericFormat: {
                     pattern: "0,0.00"
                 }
@@ -1212,7 +1216,7 @@ const showTools = {
                 data: item.Path,
                 type: "date",
                 dateFormat: "YYYYMMDDHHmmss",
-                readOnly: !item.Editable,
+                readOnly: onlyRead,
                 correctFormat: true
             };
         } else if (item.InputMode == "B1" ||
@@ -1225,12 +1229,12 @@ const showTools = {
             item.InputMode == "M") { //文本输入
             return {
                 data: item.Path,
-                readOnly: !item.Editable
+                readOnly: onlyRead
             }
         } else { //(未支持的输入方式)暂不支持编辑
             return {
                 data: item.Path,
-                readOnly: !item.Editable
+                readOnly: onlyReadc
             }
         }
     },

+ 12 - 1
src/views/ledger/cenotelist/cenoteadd/index.vue

@@ -6,7 +6,7 @@
         <el-option v-for="item in showTypes" :key="item.value" :label="item.label" :value="item.value"></el-option>
       </el-select>
       <span>增加</span>
-      <el-input v-model="addNum" style="width:50px;" size="small"></el-input>
+      <el-input-number v-model="addNum" :controls="false" style="width:50px;" :min="1" :max="50"></el-input-number>
       <span>个竖井</span>
       <el-button @click="handleAddTableRow">增加</el-button>
     </el-row>
@@ -48,6 +48,7 @@ export default {
       relationids: "",
       onlyRead: false,
       showTypes: [{ value: "Visible", label: '只看采集信息' }, { value: "all", label: '全部' }],
+      inputMap: {}, //信息点和输入方式映射表
       showType: this.$route.query.showType,
       tableHeader: [],
       tableData: session.get("cenoteAddData")? session.get("cenoteAddData").length? session.get("cenoteAddData"): [{}]: [{}],
@@ -76,6 +77,11 @@ export default {
       }
       await getDataDictionary(param, res => {
         this.tableHeader = res.Content
+        this.tableHeader.forEach(item => {
+          if (item.Path) {
+            this.inputMap[item.Path] = item
+          }
+        })
         this.initTable()
       })
     },
@@ -197,8 +203,13 @@ export default {
     getInfors(infos, row) {
       //其他的开始判断
       let val = this.tableExample.colToProp(row.col);
+      let inputData = this.inputMap[val]
       this.row = row.row //要操作的列号
       this.messKey = val //要操作的列类型
+      if (!inputData.Editable) {
+        this.$message("该信息点的值为自动生成,不可人工维护!");
+        return false;
+      }
       //点击关联的元空间
       // if (val === "SpaceCount") {
       //   this.isTableRightShow = true;

+ 49 - 7
src/views/ledger/cenotelist/index.vue

@@ -52,7 +52,7 @@ import showTools from "@/utils/handsontable/notShow"
 import text from "@/utils/handsontable/mainText"
 import cenoteType from "@/components/ledger/lib/cenoteType";
 import handsonTable from "@/components/common/handsontable";
-import { getDataDictionary, queryCenoteTableData, updataCenoteTableData, deleteCenoteTableData, saveCenoteRelateSpace, BeatchQueryParam } from "@/api/scan/request"
+import { getDataDictionary, queryCenoteTableData, updataCenoteTableData, deleteCenoteTableData, saveCenoteRelateSpace, BeatchQueryParam, buildingQuery } from "@/api/scan/request"
 import { mapGetters, mapActions } from "vuex";
 export default {
   components: {
@@ -83,17 +83,18 @@ export default {
       },
       tableData: [],
       copyTableData: [],
+      buildData: [], //建筑数据
       tableExample: null,
       myDialog: {
         update: false,//临时维护信息点
       },
       inputMap: {
-        flowBuild: {
-          InputMode: 'D1',
+        buildList: {
+          InputMode: 'D2',
           Editable:true,
-          InfoPointCode:"flowBuild",
-          InfoPointName:"建筑楼层",
-          Path:"flowBuild"
+          InfoPointCode:"buildList",
+          InfoPointName:"所属建筑",
+          Path:"buildList"
         }
       }, //信息点和输入方式映射表
       updateInputShow: false, //是否显示临时维护输入框
@@ -114,9 +115,13 @@ export default {
     }
   },
   created() {
-    this.getTableHeader()
+    this.getBuildData();
+    this.getTableHeader();
   },
   watch: {
+    projectId() {
+        this.getBuildData();
+    },
     showTypes: {
       handler(newName, oldName) {
         if (newName && newName[0] && newName[0].value) {
@@ -171,6 +176,27 @@ export default {
         }
       })
     },
+    async getBuildData() { //获取建筑数据
+        this.buildData = [];
+        const params = {
+            PageNumber: 1,
+            PageSize: 500,
+            Projection: [
+                "BuildID",
+                "BuildLocalName"
+            ]
+        }
+        buildingQuery(params, res => {
+            if (res.Result === "success") {
+                this.buildData = res.Content.map(item => {
+                    return {
+                        Code: item.BuildID,
+                        Name: item.BuildLocalName,
+                    }
+                })
+            }
+        })
+    },
     // 修改表格内容
     async updateTableData(data, change) {
       let param = {
@@ -298,6 +324,9 @@ export default {
       let arr = tools.copyArr(list)
       let data = showTools.headerTextFilter(arr, "shaft", this.onlyRead, this.showType)
       data.unshift("关联的业务空间", "其他关系");
+      if (this.showType == 'all') {
+          data.splice(4, 0, '所属建筑');
+      }
       return data;
     },
     formatHeaderType(list) {//格式化表头头映射的数据
@@ -307,6 +336,7 @@ export default {
         data: "SpaceList",
         renderer: (instance, td, row, col, prop, value, cellProperties) => {
           td.style.color = "#409EFF";
+          td.style.cursor = "pointer";
           td.innerHTML = `<span>${value?value.length:0}</span>`
           return td;
         },
@@ -321,6 +351,18 @@ export default {
         },
         readOnly: true
       })
+      if (this.showType == 'all') {
+        data.splice(4, 0, {
+            data: 'buildList',
+            renderer: tools.customDropdownRenderer,
+            editor: 'chosen',
+            chosenOptions: {
+                multiple: true,
+                data: this.buildData,
+            },
+            readOnly: this.onlyRead,
+        })
+      }
       return data;
     },
     initTable() {//实例化表格

+ 1 - 1
src/views/ledger/cenotelist/relatedSpace.vue

@@ -274,7 +274,7 @@ export default {
     },
     //更改业务空间类型
     changeSpace(val) {
-      this.ObjectType = val[0];
+      this.ObjectType = val[val.length - 1];
       this.floor = '';
       this.buildingList = [];
       this.building = '';

+ 103 - 36
src/views/ledger/facility/addfacility.vue

@@ -9,7 +9,7 @@
         <el-option v-for="item in showTypes" :key="item.value" :label="item.label" :value="item.value"></el-option>
       </el-select>
       <span>增加</span>
-      <el-input v-model="addNum" style="width:50px;" size="small"></el-input>
+      <el-input-number v-model="addNum" :controls="false" style="width:50px;" :min="1" :max="50"></el-input-number>
       <span>个{{category.name}}</span>
       <el-button @click="handleAddTableRow">增加</el-button>
     </el-row>
@@ -120,6 +120,15 @@ export default {
         changeRea: false,
         lookPic: false //图片查看
       },
+      inputMap: {
+        flowBuild: {
+          InputMode: 'D1',
+          Editable: true,
+          InfoPointCode: 'flowBuild',
+          InfoPointName: '建筑楼层',
+          Path: 'flowBuild',
+        },
+      }, //信息点和输入方式映射表
       qrcodeUrl: "", //二维码图片地址
       filesArr: [], //保存临时的文件key
       imgsArr: [], //临时保存的图片key数组
@@ -213,6 +222,11 @@ export default {
       };
       await getDataDictionary(params, res => {
         this.tableHeader = res.Content;
+        this.tableHeader.forEach((item) => {
+            if (item.Path) {
+                this.inputMap[item.Path] = item
+            }
+        })
         this.initTable();
       });
     },
@@ -535,6 +549,7 @@ export default {
     },
     getInfors(infos, row) {
       let val = this.tableExample.colToProp(row.col);
+      let inputData = this.inputMap[val]
       switch (val) {
         //操作
         case 'caozuo':
@@ -566,59 +581,105 @@ export default {
         //品牌型号弹窗
         case 'DPManufacturerID':
           if (!this.onlyRead) {
-            this.myDialog.firm = true;
+              const linkId = this.tableData[row.row].LinkId;
+              if (linkId) { //关联资产
+                this.myDialog.firm = true;
+              } else { //未关联资产
+                this.$message('请先关联资产后再维护该信息!');
+              }
           }
           break;
         //供应商信息弹窗
         case 'DPSupplierID':
           if (!this.onlyRead) {
-            this.myDialog.supplier = true;
+              const linkId = this.tableData[row.row].LinkId;
+              if (linkId) { //关联资产
+                this.myDialog.supplier = true;
+              } else { //未关联资产
+                this.$message('请先关联资产后再维护该信息!');
+              }
           }
           break;
         //维修商信息弹窗
         case 'DPMaintainerID':
           if (!this.onlyRead) {
-            this.myDialog.maintainer = true;
+              const linkId = this.tableData[row.row].LinkId;
+              if (linkId) { //关联资产
+                this.myDialog.maintainer = true;
+              } else { //未关联资产
+                this.$message('请先关联资产后再维护该信息!');
+              }
           }
           break;
         //保险公司信息
         case 'DPInsurerID':
           if (!this.onlyRead) {
-            this.myDialog.insurer = true;
-          }
-          break;
-        //供应合同编号
-        case 'LedgerParam.SupplyPurchase.SupplierContractID':
-          if (!this.onlyRead) {
-            let ContractIDflag = null;
-            let DPSdata = this.tableData[row.row].DPSupplierID;
-            if (DPSdata) {
-              ContractIDflag = DPSdata.split("-")[0];
-            }
-            if (!!ContractIDflag) {
-              this.id = ContractIDflag;
-              this.myDialog.supply = true;
-            } else {
-              this.$message("请先选择供应商");
-            }
+              const linkId = this.tableData[row.row].LinkId;
+              if (linkId) { //关联资产
+                this.myDialog.insurer = true;
+              } else { //未关联资产
+                this.$message('请先关联资产后再维护该信息!');
+              }
           }
           break;
-        //保险单号
-        case 'LedgerParam.InsuranceDoc.InsuranceNum':
-          if (!this.onlyRead) {
-            let DPInsurerIDflag = null;
-            let DPIdata = this.tableData[row.row].DPInsurerID;
-            if (DPIdata) {
-              DPInsurerIDflag = DPIdata.split("-")[0];
-            }
-            if (!!DPInsurerIDflag) {
-              this.id = DPInsurerIDflag;
-              this.myDialog.guarantee = true;
-            } else {
-              this.$message("请先选择保险商");
+        /**
+         * 供应合同编号
+         * TODO:厂商库服务无人维护,故注释供应合同编号选择改为直接输入
+         */
+        // case 'LedgerParam.SupplyPurchase.SupplierContractID':
+        //   if (!this.onlyRead) {
+        //     let ContractIDflag = null;
+        //     let DPSdata = this.tableData[row.row].DPSupplierID;
+        //     if (DPSdata) {
+        //       ContractIDflag = DPSdata.split("-")[0];
+        //     }
+        //     if (!!ContractIDflag) {
+        //       this.id = ContractIDflag;
+        //       this.myDialog.supply = true;
+        //     } else {
+        //       this.$message("请先选择供应商");
+        //     }
+        //   }
+        //   break;
+        /** 
+         * 保险单号
+         * TODO:厂商库服务无人维护,故注释保险单号选择改为直接输入
+         */
+        // case 'LedgerParam.InsuranceDoc.InsuranceNum':
+        //   if (!this.onlyRead) {
+        //     let DPInsurerIDflag = null;
+        //     let DPIdata = this.tableData[row.row].DPInsurerID;
+        //     if (DPIdata) {
+        //       DPInsurerIDflag = DPIdata.split("-")[0];
+        //     }
+        //     if (!!DPInsurerIDflag) {
+        //       this.id = DPInsurerIDflag;
+        //       this.myDialog.guarantee = true;
+        //     } else {
+        //       this.$message("请先选择保险商");
+        //     }
+        //   }
+        //   break;
+        case 'flowBuild': //所属建筑楼层
+        case 'LedgerParam.EquipManufactor.ProductDate': //生产日期
+        case 'LedgerParam.EquipManufactor.SerialNum': //出厂编号
+        case 'LedgerParam.SupplyPurchase.AssetID': //资产编号
+        case 'LedgerParam.SupplyPurchase.PurchasePrice': //采购价格
+        case 'LedgerParam.InsuranceDoc.InsuranceNum': //保险单号
+        case 'LedgerParam.InsuranceDoc.InsuranceFile': //保险文件
+            if (!this.onlyRead) {
+                const linkId = this.tableData[row.row].LinkId;
+                if (!linkId) { //未关联资产
+                    this.$confirm('请先关联资产后再维护该信息!', '提示', {
+                        confirmButtonText: '确定',
+                        showCancelButton: false,
+                        type: 'warning'
+                    }).then(() => {
+                        return false;
+                    });
+                }
             }
-          }
-          break;
+            break
         //保险文件--设备文档--安装质检报告
         case 'LedgerParam.InsuranceDoc.InsuranceFile': //保险文件
         case 'LedgerParam.PhotoDoc.Archive': //设备文档
@@ -634,6 +695,8 @@ export default {
         case 'LedgerParam.SupplyPurchase.SupplierContract': //供应合同
         case 'LedgerParam.PhotoDoc.Drawing': //设备图纸
         case 'LedgerParam.Siteinstall.InstallDrawing': //安装图纸
+        case 'TechParam.CompleteMachine.DesignIDGraph': //设计工况空调机组处理过程焓湿图
+        case 'TechParam.AirSupply.FanCharacterCurve': //风机性能曲线
           let IPSdata = tools.dataForKey(this.tableData[row.row], val);
           this.filesArr = IPSdata ? IPSdata : [];
           this.myDialog.uploadFiles = true;
@@ -662,6 +725,10 @@ export default {
         default:
           break;
       }
+      if (!inputData.Editable) {
+        this.$message('该信息点的值为自动生成,不可人工维护!')
+        return false
+      }
       this.row = row.row;
       this.messKey = val;
     },

+ 47 - 34
src/views/ledger/facility/batchPoint.vue

@@ -4,7 +4,7 @@
 			<el-button style="float:left;" size="small" type="default" icon="el-icon-back" @click="goback"></el-button>
 			<div id="buildFloor">
                 <span class="buildFloor">建筑楼层</span>
-                <el-cascader ref="floorCascader" placeholder="请选择" :props="props" :options="bfOptions" filterable size="small" @change="changeFloor"></el-cascader>
+                <el-cascader ref="floorCascader" placeholder="请选择" :props="props" v-model="floorValue" :options="bfOptions" filterable size="small" @change="changeFloor"></el-cascader>
             </div>
 			<my-cascader ref="cascader" @change="changeDevice"></my-cascader>
 			<el-button type="primary" size="mini" @click="handleClickSave" :disabled="!isChange" style="float:right;">确认</el-button>
@@ -77,7 +77,7 @@
                 <p>距地面高度:{{equipZ}}mm</p>
             </el-row>
             <div class="elSlider">
-                <el-slider v-model="equipZ" :max="maxHeight" :step="1" :marks="marks"></el-slider>
+                <el-slider v-model="equipZ" :min="mimHeight" :max="maxHeight" :step="1" :marks="marks"></el-slider>
             </div>
             <el-row style="text-align: right;">
                 <el-button size="mini" @click="visible = false">取消</el-button>
@@ -105,11 +105,14 @@ export default {
         visible: false,
         equipZ: 0,
         maxHeight: 99000,
+        mimHeight: -99000,
         popoverPosition: {
             top: 0,
             left: 0,
         },
         selectedIcon: null,
+        floorValue: "",
+        oldFloorValue: "",
 		buildId: "", //建筑Id
 		floorId: "", //楼层Id
 		floorMap: "", //楼层平面图地址
@@ -193,7 +196,7 @@ export default {
     goback() {
         this.confirm(() => {
             this.$router.push({ name: "facilityLedger" });
-        })
+        },() => {return false})
     },
     getCascader() {
       let param = {
@@ -220,7 +223,7 @@ export default {
       })
     },
     // 二次确认
-    confirm(callback) {
+    confirm(callback, cancel) {
         if (this.isChange) {
             this.$confirm('平面图数据未保存,此操作将不会保存修改数据!', '提示', {
                 confirmButtonText: '确定',
@@ -228,6 +231,8 @@ export default {
                 type: 'warning'
             }).then(() => {
                 callback();
+            }).catch(() => {
+                cancel();
             });
         } else {
             callback();
@@ -412,36 +417,44 @@ export default {
 	},
     //修改楼层
     changeFloor(value) {
-		this.showCanvas = false;
-		this.clearGraphy();
-		if (value[0]) {
-			this.buildId = value[0];
-        }
-		if (value[1]) {
-			this.floorId = value[1];
-            this.floorData = this.fIdToFloor[value[1]];
-		} else {
-            this.floorId = "";
-            this.floorData = {}
-		}
-		if (this.floorData.StructureInfo && this.floorData.StructureInfo.FloorMap) {
-			this.floorMap = this.floorData.StructureInfo.FloorMap;
-			this.showCanvas = true;
-			this.getGraphy();
-		} else {
-			this.initParams();
-			this.floorMap = "";
-        }
-        if (this.floorData.StructureInfo && this.floorData.StructureInfo.Height) {
-            this.maxHeight = this.floorData.StructureInfo.Height;
-        } else {
-            this.maxHeight = 99000;
-        }
-		if (this.floorData.Outline && this.floorData.Outline.length) {
-			this.floorOutline = this.floorData.Outline;
-		} else {
-			this.floorOutline = null;
-		}
+        this.confirm(() => {
+            this.oldFloorValue = value;
+            this.isChange = false;
+            this.showCanvas = false;
+            this.clearGraphy();
+            if (value[0]) {
+                this.buildId = value[0];
+            }
+            if (value[1]) {
+                this.floorId = value[1];
+                this.floorData = this.fIdToFloor[value[1]];
+            } else {
+                this.floorId = "";
+                this.floorData = {}
+            }
+            if (this.floorData.StructureInfo && this.floorData.StructureInfo.FloorMap) {
+                this.floorMap = this.floorData.StructureInfo.FloorMap;
+                this.showCanvas = true;
+                this.getGraphy();
+            } else {
+                this.initParams();
+                this.floorMap = "";
+            }
+            if (this.floorData.StructureInfo && this.floorData.StructureInfo.Height) {
+                this.maxHeight = this.floorData.StructureInfo.Height;
+                this.minHeight = -(this.floorData.StructureInfo.Height);
+            } else {
+                this.maxHeight = 99000;
+                this.minHeight = -99000;
+            }
+            if (this.floorData.Outline && this.floorData.Outline.length) {
+                this.floorOutline = this.floorData.Outline;
+            } else {
+                this.floorOutline = null;
+            }
+        }, () => {
+            this.floorValue = this.oldFloorValue;
+        })
 	},
     //修改设备族
     changeDevice(value) {

+ 25 - 40
src/views/ledger/facility/details/index.vue

@@ -229,6 +229,9 @@ export default {
 
             }
           }
+					if (this.instance.hasOwnProperty(item.Path)) {
+						item.value = this.instance[item.Path]
+					}
         })
         let params = { //获取动态参数
           secret: this.secret,
@@ -263,15 +266,8 @@ export default {
     },
     handleEnclosure() {
       //图片文件处理,脱离radio控制
-      let isList = this.pointData
       let isArr = []
-      isList.map(j => {
-        if (this.instance.hasOwnProperty(j.Path)) {
-          j.value = this.instance[j.Path]
-          return j
-        }
-      })
-      isArr = isList.filter(k => k.value)
+      isArr = this.pointData.filter(k => k.value)
       this.handlePicList(isArr)
       this.handleFileList(isArr)
     },
@@ -287,51 +283,28 @@ export default {
           }
         }
       })
-
       if (val == 1) { //需采集信息
         arr = this.pointData.filter(i => i.Visible)
-        // //  图片和的处理
-        // this.handlePicList(arr)
-        // //  文件处理
-        // this.handleFileList(arr)
-
       } else if (val == 2) { //有值信息点
-        let list = this.pointData
-        list.map(j => {
-          if (this.instance.hasOwnProperty(j.Path)) {
-            return {
-              ...j,
-              value: this.instance[j.Path]
-            }
-
-
-          }
-        })
-        arr = list.filter(k => k.value)
-        // this.handlePicList(arr, 2)
-        // this.handleFileList(arr, 2)
-
+        arr = this.pointData.filter(k => k.value)
       } else { //全部信息点
         arr = this.pointData
-        // this.handlePicList(arr)
-        // this.handleFileList(arr)
       }
       this.displayData(arr)
     },
     handlePicList(arr) {
       let picObject = {}
+      let video = []
       //处理数据格式
       arr.map(i => {
-        if (i.InputMode == 'F2') {
+        if (i.InputMode == 'F2' || i.InputMode == 'F1') {
           switch (i.Path) {
-            case 'LedgerParam.PhotoDoc.Drawing':
             case 'LedgerParam.Siteinstall.InstallPic':
-            case 'LedgerParam.Siteinstall.InstallDrawing':
             case 'LedgerParam.PhotoDoc.Nameplate':
             case 'LedgerParam.PhotoDoc.Pic':
-            case 'Pic' :
               if (this.instance.hasOwnProperty(i.Path)) {
-                i.PicList = this.instance[i.Path]
+                i.PicList = this.instance[i.Path].filter(i => i.Type === 'image' || i.Type === 'panorama')
+                video = video.concat(this.instance[i.Path].filter(i => i.Type === 'video'))
               }
               if (picObject[i.InfoPointName]) {
               } else {
@@ -359,7 +332,6 @@ export default {
         }
       }
       this.exhibitionImage.arr = isArray
-      let video = isArray.filter(i => i.Type != 'image' && i.type != 'image')
       this.exhibitionVideo.list = video
       //判断是否显示图片组件
       this.isShowImage = isArray.length ? true : false
@@ -373,9 +345,22 @@ export default {
       arr.map(i => {
         if (i.InputMode == 'F2') {
           switch (i.Path) {
-            case 'LedgerParam.InsuranceDoc.InsuranceFile':
-            case 'LedgerParam.PhotoDoc.Archive':
-            case 'LedgerParam.Siteinstall.CheckReport':
+            case 'LedgerParam.EquipManufactor.OriginalCertificate': //原厂证明
+            case 'LedgerParam.SupplyPurchase.AcceptanceReport': //验收报告
+            case 'LedgerParam.OperationMainte.MaintainManual': //维修保养手册
+            case 'LedgerParam.PhotoDoc.Archive': //设备文档
+            case 'LedgerParam.PhotoDoc.Drawing': //设备图纸
+            case 'LedgerParam.SupplyPurchase.ApproachingAcceptance': //进场验收单
+            case 'LedgerParam.EquipManufactor.TestReport': //检测报告
+            case 'LedgerParam.SupplyPurchase.SupplierContract': //供应合同
+            case 'LedgerParam.PhotoDoc.ProductCertification': //产品合格证
+            case 'LedgerParam.PhotoDoc.OperationManual': //操作说明书
+            case 'LedgerParam.InsuranceDoc.InsuranceFile': //保险文件
+            case 'LedgerParam.Siteinstall.CheckReport': //安装质检报告
+            case 'LedgerParam.Siteinstall.InstallDrawing': //安装图纸
+            case 'LedgerParam.Siteinstall.InstallInstruction': //安装说明书
+            case 'TechParam.CompleteMachine.DesignIDGraph': //设计工况空调机组处理过程焓湿图
+            case 'TechParam.AirSupply.FanCharacterCurve': //风机性能曲线
               if (this.instance.hasOwnProperty(i.Path)) {
                 i.fileList = this.instance[i.Path]
               }

+ 111 - 63
src/views/ledger/facility/partsmanage/addparts/index.vue

@@ -11,7 +11,7 @@
         </el-option>
       </el-select>
       <span>增加</span>
-      <el-input v-model="addNum" style="width:50px;" size="small"></el-input>
+      <el-input-number v-model="addNum" :controls="false" style="width:50px;" :min="1" :max="50"></el-input-number>
       <span>个{{category.Name}}</span>
       <el-button @click="handleAddTableRow">增加</el-button>
     </el-row>
@@ -33,11 +33,8 @@
     <qrcode :dialog="myDialog" :qrcodeUrl="qrcodeUrl" :addBody="true" ref="qrcode"></qrcode>
     <!-- 型号弹窗 -->
     <firm :mess="{deviceId: firmId}" ref="firm" @changeFirm="firmChange" :dialog="myDialog"></firm>
-    <!-- 供应商合同弹窗 -->
-    <supply-dialog ref="supply" @change="supplyChange" :id="id" :dialog="myDialog"></supply-dialog>
     <!-- 供应商弹窗 -->
     <supplier-dialog ref="supplier" @changeSupplier="supplierChange" :dialog="myDialog"></supplier-dialog>
-    <guarantee-dialog :id="id" ref="guarantee" @change="guaranteeChange" :dialog="myDialog"></guarantee-dialog>
     <upload-files-dialog :read="onlyRead ? true : false" ref="upload" @changeFile="fileChange" :keysArr="filesArr" :dialog="myDialog">
     </upload-files-dialog>
     <upload-img-dialog :read="onlyRead ? true : false" @changeFile="imgChange" :keysArr="imgsArr" :dialog="myDialog"></upload-img-dialog>
@@ -45,6 +42,22 @@
     <insurer-dialog @changeInsurer="changeInsurer" ref="insurer" :dialog="myDialog"></insurer-dialog>
     <pic-dialog :read="onlyRead ? true : false" :dialog="myDialog" :keysArr="picsArr" @change="changePics"></pic-dialog>
     <details-dialog :iframeSrc="iframeSrc" v-if="myDialog.details" :dialog="myDialog"></details-dialog>
+    <!-- 不支持的输入方式 -->
+    <el-dialog title="临时维护信息点" :visible.sync="myDialog.update" @close="handleCloseUpdate" width="670px">
+      <el-row>
+        该信息点未定义对应组件,现在维护数据不确定后续是否可用。如确实需要维护,请点击
+        <el-link @click="updateInputShow = true" type="primary" :underline="false">继续维护</el-link>
+        。
+      </el-row>
+      <el-row style="margin-top:20px;" v-show="updateInputShow">
+        <el-input type="textarea" :autosize="{ minRows: 4, maxRows: 8}" placeholder="请输入内容"
+                  v-model="updateInput"></el-input>
+      </el-row>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="myDialog.update = false">取 消</el-button>
+        <el-button type="primary" @click="handleClickUpdate">确 认</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
 <script>
@@ -65,11 +78,9 @@ import { mapGetters, mapActions } from "vuex";
 
 import qrcode from "@/components/ledger/lib/qrcode";
 import firm from "@/components/dialogs/list/firm";
-import supplyDialog from "@/components/dialogs/list/supplyDialog";
 import supplierDialog from "@/components/dialogs/list/supplierDialog";
 import maintainerDialog from "@/components/dialogs/list/maintainerDialog";
 import insurerDialog from "@/components/dialogs/list/insurerDialog";
-import guaranteeDialog from "@/components/dialogs/list/guaranteeDialog";
 import uploadFilesDialog from "@/components/dialogs/list/filesDialog";
 import uploadImgDialog from "@/components/dialogs/list/uploadImgDialog";
 import picDialog from "@/components/dialogs/list/picDialog";
@@ -77,11 +88,9 @@ export default {
   components: {
     qrcode, //二维码页面
     firm, //品牌型号弹窗
-    supplyDialog,
     supplierDialog,
     maintainerDialog,
     insurerDialog,
-    guaranteeDialog,
     uploadFilesDialog,
     uploadImgDialog,
     picDialog,
@@ -108,9 +117,7 @@ export default {
       myDialog: {
         qrcode: false, //二维码弹窗
         firm: false, //厂商弹窗
-        supply: false, //选择供应合同
         supplier: false, //供应商选择
-        guarantee: false, //选择保单
         maintainer: false, //选择维修商
         insurer: false, //选择保险公司
         uploadFiles: false, //上传文件
@@ -120,8 +127,21 @@ export default {
         systemType: false,
         details: false, //详情页
         changeRea: false,
-        lookPic: false //图片查看
+        lookPic: false, //图片查看
+        update: false,//临时维护信息点
       },
+      updateInputShow: false, //是否显示临时维护输入框
+      updateInfoPoint: '',//临时维护信息点
+      updateInput: '', //临时维护信息点值
+      inputMap: {
+        flowBuild: {
+          InputMode: 'D1',
+          Editable:true,
+          InfoPointCode:"flowBuild",
+          InfoPointName:"建筑楼层",
+          Path:"flowBuild"
+        }
+      }, //信息点和输入方式映射表
       qrcodeUrl: "", //二维码图片地址
       filesArr: [], //保存临时的文件key
       imgsArr: [], //临时保存的图片key数组
@@ -169,6 +189,11 @@ export default {
       };
       await getDataDictionary(params, res => {
         this.tableHeader = res.Content;
+        this.tableHeader.forEach(item => {
+          if (item.Path) {
+            this.inputMap[item.Path] = item;
+          }
+        })
         this.initTable();
       });
     },
@@ -388,21 +413,6 @@ export default {
       tools.setDataForKey(this.tableData[this.row], 'LedgerParam.OperationMainte.MaintainerEmail', data.contacts[0]?data.contacts[0].email:null)
       tools.setDataForKey(this.tableData[this.row], 'LedgerParam.OperationMainte.MaintainerFax', data.contacts[0]?data.contacts[0].fax:null)
     },
-    supplyChange(data) {
-      tools.setDataForKey(this.tableData[this.row], "LedgerParam.SupplyPurchase.SupplierContractID", { id: data });
-    },
-    //保险合同
-    guaranteeChange(data) {
-      for (let key in data) {
-        this.utilToKey(key, "insuranceNo", data, "InsuranceNum");
-        if (key == "contractFile") {
-          if (!!data[key]) {
-            data[key] = [data[key]];
-          }
-        }
-        this.utilToKey(key, "contractFile", data, "InsuranceFile");
-      }
-    },
     //上传文件弹窗触发事件
     fileChange(keys) {
       this.setDataToMain(keys, this.messKey, this.row);
@@ -462,60 +472,75 @@ export default {
     getInfors(infos, row) {
       //其他的开始判断
       let val = this.tableExample.colToProp(row.col);
+      let inputData = this.inputMap[val];
+      this.row = row.row;
+      this.messKey = val;
       //设备二维码图片
       if (val == "EquipQRCode") {
         this.myDialog.qrcode = true;
         this.$refs.qrcode.getCanvas(1111);
       }
-      //关联系统
-      if (val == "linkSystem") {
-        // this.systemList = this.tableData[row.row].linkSystem || [];
-        this.myDialog.systemType = true;
-      }
+
       //品牌型号弹窗
       if (val == "DPManufacturerID") {
-        this.myDialog.firm = true;
+        const PropertyId = this.tableData[row.row].PropertyId;
+        if (PropertyId) { //关联资产
+            this.myDialog.firm = true;
+        } else { //未关联资产
+            this.$message('请先关联资产后再维护该信息!');
+        }
+        return false;
       }
       //供应商信息弹窗
       if (val == "DPSupplierID") {
-        this.myDialog.supplier = true;
+          const PropertyId = this.tableData[row.row].PropertyId;
+        if (PropertyId) { //关联资产
+            this.myDialog.supplier = true;
+        } else { //未关联资产
+            this.$message('请先关联资产后再维护该信息!');
+        }
+        return false;
       }
       //维修商信息弹窗
       if (val == "DPMaintainerID") {
-        this.myDialog.maintainer = true;
+          const PropertyId = this.tableData[row.row].PropertyId;
+        if (PropertyId) { //关联资产
+            this.myDialog.maintainer = true;
+        } else { //未关联资产
+            this.$message('请先关联资产后再维护该信息!');
+        }
+        return false;
       }
       //保险公司信息
       if (val == "DPInsurerID") {
-        this.myDialog.insurer = true;
-      }
-      //供应合同编号
-      if (val == "LedgerParam.SupplyPurchase.SupplierContractID") {
-        let falg = null;
-        let data = this.tableData[row.row].DPSupplierID;
-        if (data) {
-          falg = data.split("-")[0];
-        }
-        if (!!falg) {
-          this.id = falg;
-          this.myDialog.supply = true;
-        } else {
-          this.$message("请先选择供应商");
+          const PropertyId = this.tableData[row.row].PropertyId;
+        if (PropertyId) { //关联资产
+            this.myDialog.insurer = true;
+        } else { //未关联资产
+            this.$message('请先关联资产后再维护该信息!');
         }
+        return false;
       }
-      //保险单号
-      if (val == "LedgerParam.InsuranceDoc.InsuranceNum") {
-        //选择保单
-        let falg = null;
-        let data = this.tableData[row.row].DPInsurerID
-        if (data) {
-          falg = data.split("-")[0];
-        }
-        if (!!falg) {
-          this.id = falg;
-          this.myDialog.guarantee = true;
-        } else {
-          this.$message("请先选择保险商");
+      if (
+        val == "flowBuild" || //所属建筑楼层
+        val == "LedgerParam.EquipManufactor.ProductDate" || //生产日期
+        val == "LedgerParam.EquipManufactor.SerialNum" || //出厂编号
+        val == "LedgerParam.SupplyPurchase.AssetID" || //资产编号
+        val == "LedgerParam.SupplyPurchase.PurchasePrice" || //采购价格
+        val == "LedgerParam.InsuranceDoc.InsuranceNum" || //保险单号
+        val == "LedgerParam.InsuranceDoc.InsuranceFile" //保险文件
+      ) {
+        const PropertyId = this.tableData[row.row].PropertyId;
+        if (!PropertyId) { //未关联资产
+            this.$confirm('请先关联资产再维护该信息!', '提示', {
+                confirmButtonText: '确定',
+                showCancelButton: false,
+                type: 'warning'
+            }).then(() => {
+                return false;
+            });
         }
+        return false
       }
       //保险文件--设备文档--安装质检报告
       if (
@@ -553,8 +578,31 @@ export default {
         this.picsArr = data ? data : []
         this.myDialog.pic = true;
       }
-      this.row = row.row;
-      this.messKey = val;
+      if (!this.onlyRead && !inputData.Editable) {
+        this.$message("该信息点的值为自动生成,不可人工维护!");
+        return false;
+      }
+      if (!this.onlyRead && showTools.InputModeArr.indexOf(inputData.InputMode) == '-1') {
+        this.updateInfoPoint = val;
+        this.updateInput = tools.dataForKey(this.tableData[row.row], val);
+        this.myDialog.update = true;
+        return false;
+      }
+    },
+    //关闭临时维护弹窗回调
+    handleCloseUpdate() {
+      this.updateInputShow = false
+      this.updateInfoPoint = ''
+      this.updateInput = ''
+    },
+    //更新临时维护信息点
+    handleClickUpdate() {
+      // this.$message("更新成功");
+      tools.setDataForKey(this.tableData[this.row], this.updateInfoPoint, this.updateInput)
+      this.handleUpdataTable([[this.row, this.updateInfoPoint, null, this.updateInput]], "edit")
+      this.updateInputShow = false
+      this.myDialog.update = false
+      this.updateInput = ''
     },
     utilToKey(key, name, data, messName) {
       if (key == name) {

+ 43 - 59
src/views/ledger/facility/partsmanage/index.vue

@@ -43,11 +43,8 @@
     <qrcode :dialog="myDialog" :qrcodeUrl="qrcodeUrl" :addBody="true" ref="qrcode"></qrcode>
     <!-- 型号弹窗 -->
     <firm :mess="{deviceId: firmId}" ref="firm" @changeFirm="firmChange" :dialog="myDialog"></firm>
-    <!-- 供应商合同弹窗 -->
-    <supply-dialog ref="supply" @change="supplyChange" :id="id" :dialog="myDialog"></supply-dialog>
     <!-- 供应商弹窗 -->
     <supplier-dialog ref="supplier" @changeSupplier="supplierChange" :dialog="myDialog"></supplier-dialog>
-    <guarantee-dialog :id="id" ref="guarantee" @change="guaranteeChange" :dialog="myDialog"></guarantee-dialog>
     <upload-files-dialog :read="onlyRead ? true : false" ref="upload" @changeFile="fileChange" :keysArr="filesArr" :dialog="myDialog">
     </upload-files-dialog>
     <upload-img-dialog :read="onlyRead ? true : false" @changeFile="imgChange" :keysArr="imgsArr" :dialog="myDialog"></upload-img-dialog>
@@ -94,11 +91,9 @@ import { mapGetters, mapActions } from "vuex";
 
 import qrcode from "@/components/ledger/lib/qrcode";
 import firm from "@/components/dialogs/list/firm";
-import supplyDialog from "@/components/dialogs/list/supplyDialog";
 import supplierDialog from "@/components/dialogs/list/supplierDialog";
 import maintainerDialog from "@/components/dialogs/list/maintainerDialog";
 import insurerDialog from "@/components/dialogs/list/insurerDialog";
-import guaranteeDialog from "@/components/dialogs/list/guaranteeDialog";
 import uploadFilesDialog from "@/components/dialogs/list/filesDialog";
 import uploadImgDialog from "@/components/dialogs/list/uploadImgDialog";
 import picDialog from "@/components/dialogs/list/picDialog";
@@ -107,11 +102,9 @@ export default {
   components: {
     qrcode, //二维码页面
     firm, //品牌型号弹窗
-    supplyDialog,
     supplierDialog,
     maintainerDialog,
     insurerDialog,
-    guaranteeDialog,
     uploadFilesDialog,
     uploadImgDialog,
     picDialog,
@@ -158,9 +151,7 @@ export default {
       myDialog: {
         qrcode: false, //二维码弹窗
         firm: false, //厂商弹窗
-        supply: false, //选择供应合同
         supplier: false, //供应商选择
-        guarantee: false, //选择保单
         maintainer: false, //选择维修商
         insurer: false, //选择保险公司
         uploadFiles: false, //上传文件
@@ -568,21 +559,6 @@ export default {
       )
       // this.handleUpdataTable([[this.row, "LedgerParam.OperationMainte.Maintainer", null, data.name]], "edit")
     },
-    supplyChange(data) {
-      tools.setDataForKey(this.tableData[this.row], "LedgerParam.SupplyPurchase.SupplierContractID", { id: data });
-    },
-    //保险合同
-    guaranteeChange(data) {
-      for (let key in data) {
-        this.utilToKey(key, "insuranceNo", data, "InsuranceNum");
-        if (key == "contractFile") {
-          if (!!data[key]) {
-            data[key] = [data[key]];
-          }
-        }
-        this.utilToKey(key, "contractFile", data, "InsuranceFile");
-      }
-    },
     //修改关联的资产
     changeProperty(val) {
       this.setDataToMain(val.PropertyId, 'PropertyId', this.row);
@@ -681,59 +657,67 @@ export default {
         //品牌型号弹窗
         case 'DPManufacturerID':
           if (!this.onlyRead) {
-            this.myDialog.firm = true;
+            const PropertyId = this.tableData[row.row].PropertyId;
+            if (PropertyId) { //关联资产
+                this.myDialog.firm = true;
+            } else { //未关联资产
+                this.$message('请先关联资产再维护该信息!');
+            }
           }
           break;
         //供应商信息弹窗
         case 'DPSupplierID':
           if (!this.onlyRead) {
-            this.myDialog.supplier = true;
+              const PropertyId = this.tableData[row.row].PropertyId;
+            if (PropertyId) { //关联资产
+                this.myDialog.supplier = true;
+            } else { //未关联资产
+                this.$message('请先关联资产再维护该信息!');
+            }
           }
           break;
         //维修商信息弹窗
         case 'DPMaintainerID':
           if (!this.onlyRead) {
-            this.myDialog.maintainer = true;
+              const PropertyId = this.tableData[row.row].PropertyId;
+            if (PropertyId) { //关联资产
+                this.myDialog.maintainer = true;
+            } else { //未关联资产
+                this.$message('请先关联资产再维护该信息!');
+            }
           }
           break;
         //保险公司信息
         case 'DPInsurerID':
           if (!this.onlyRead) {
-            this.myDialog.insurer = true;
-          }
-          break;
-        //供应合同编号
-        case 'LedgerParam.SupplyPurchase.SupplierContractID':
-          if (!this.onlyRead) {
-            let ContractIDflag = null;
-            let DPSdata = this.tableData[row.row].DPSupplierID;
-            if (DPSdata) {
-              ContractIDflag = DPSdata.split("-")[0];
-            }
-            if (!!ContractIDflag) {
-              this.id = ContractIDflag;
-              this.myDialog.supply = true;
-            } else {
-              this.$message("请先选择供应商");
+              const PropertyId = this.tableData[row.row].PropertyId;
+            if (PropertyId) { //关联资产
+                this.myDialog.insurer = true;
+            } else { //未关联资产
+                this.$message('请先关联资产再维护该信息!');
             }
           }
           break;
-        //保险单号
-        case 'LedgerParam.InsuranceDoc.InsuranceNum':
-          if (!this.onlyRead) {
-            let DPInsurerIDflag = null;
-            let DPIdata = this.tableData[row.row].DPInsurerID;
-            if (DPIdata) {
-              DPInsurerIDflag = DPIdata.split("-")[0];
-            }
-            if (!!DPInsurerIDflag) {
-              this.id = DPInsurerIDflag;
-              this.myDialog.guarantee = true;
-            } else {
-              this.$message("请先选择保险商");
+        case 'flowBuild': //所属建筑楼层
+        case 'LedgerParam.EquipManufactor.ProductDate': //生产日期
+        case 'LedgerParam.EquipManufactor.SerialNum': //出厂编号
+        case 'LedgerParam.SupplyPurchase.AssetID': //资产编号
+        case 'LedgerParam.SupplyPurchase.PurchasePrice': //采购价格
+        case 'LedgerParam.InsuranceDoc.InsuranceNum': //保险单号
+        case 'LedgerParam.InsuranceDoc.InsuranceFile': //保险文件
+            if (!this.onlyRead) {
+                const PropertyId = this.tableData[row.row].PropertyId;
+                if (!PropertyId) { //未关联资产
+                    this.$confirm('请先关联资产再维护该信息!', '提示', {
+                        confirmButtonText: '确定',
+                        showCancelButton: false,
+                        type: 'warning'
+                    }).then(() => {
+                        return false;
+                    });
+                }
             }
-          }
-          break;
+            return false
         //保险文件--设备文档--安装质检报告
         case 'LedgerParam.InsuranceDoc.InsuranceFile': //保险文件
         case 'LedgerParam.PhotoDoc.Archive': //设备文档
@@ -781,7 +765,7 @@ export default {
         this.$message("该信息点的值为自动生成,不可人工维护!");
         return false;
       }
-      if (!this.onlyRead && showTools.InputModeArr.indexOf(inputData.inputMode) == '-1') {
+      if (!this.onlyRead && showTools.InputModeArr.indexOf(inputData.InputMode) == '-1') {
         this.updateInfoPoint = val;
         this.updateInput = tools.dataForKey(this.tableData[row.row], val);
         this.myDialog.update = true;

+ 20 - 1
src/views/ledger/property/addproperty.vue

@@ -6,7 +6,7 @@
         <el-option v-for="item in showTypes" :key="item.value" :label="item.label" :value="item.value"></el-option>
       </el-select>
       <span>增加</span>
-      <el-input v-model="addNum" style="width:50px;" size="small"></el-input>
+      <el-input-number v-model="addNum" :controls="false" style="width:50px;" :min="1" :max="50"></el-input-number>
       <span>个{{category.name}}</span>
       <el-button @click="handleAddTableRow">增加</el-button>
     </el-row>
@@ -102,6 +102,15 @@ export default {
         details: false, //详情页
         lookPic: false //图片查看
       },
+      inputMap: {
+        flowBuild: {
+        InputMode: 'D1',
+        Editable:true,
+        InfoPointCode:"flowBuild",
+        InfoPointName:"建筑楼层",
+        Path:"flowBuild"
+        }
+      }, //信息点和输入方式映射表
       qrcodeUrl: "", //二维码图片地址
       filesArr: [], //保存临时的文件key
       imgsArr: [], //临时保存的图片key数组
@@ -134,6 +143,11 @@ export default {
       };
       await getDataDictionary(params, res => {
         this.tableHeader = res.Content;
+        this.tableHeader.forEach(item => {
+            if (item.Path) {
+                this.inputMap[item.Path] = item
+            }
+        })
         this.initTable();
       });
     },
@@ -395,6 +409,7 @@ export default {
     },
     getInfors(infos, row) {
       let val = this.tableExample.colToProp(row.col);
+      let inputData = this.inputMap[val];
       switch (val) {
         //品牌型号弹窗
         case 'DPManufacturerID':
@@ -487,6 +502,10 @@ export default {
         default:
           break;
       }
+      if (!inputData.Editable) {
+        this.$message("该信息点的值为自动生成,不可人工维护!");
+        return false;
+      }
       this.row = row.row;
       this.messKey = val;
     },

+ 5 - 2
src/views/ledger/property/addpropertys.vue

@@ -6,7 +6,7 @@
         <el-button style="float:left;" size="small" type="default" icon="el-icon-back" @click="goBack"></el-button>
         <die-cascader ref="dieCascader" :Family="params.Family" @change="changeDevice"></die-cascader>
         <floor-cascader ref="floorCascader" @change="changeFloor"></floor-cascader>
-        <el-button style="float:right;margin-top:1px;" @click="handleClickCreate">创建已选</el-button>
+        <el-button style="float:right;margin-top:1px;" @click="handleClickCreate" :disabled="createDisable">创建已选</el-button>
       </div>
       <div class="main">
         <el-table ref="multipleTable" :data="tableData" v-loading='loading' stripe height="100%" @selection-change="handleSelectionChange">
@@ -63,7 +63,8 @@ export default {
         total: 0
       },
       tableData: [],
-      multipleSelection:[]
+      multipleSelection:[],
+      createDisable: true
     }
   },
   computed: {
@@ -172,6 +173,7 @@ export default {
     //选择的设备或部件
     handleSelectionChange(val) {
       this.multipleSelection = val;
+      this.createDisable = !this.multipleSelection.length
     },
     //切换每页显示多少条数据
     handleSizeChange(val) {
@@ -196,6 +198,7 @@ export default {
       let param = {
         Filters: `EquipID in ${JSON.stringify(list)}`
       }
+      this.createDisable = true
       createPropertys(param, res => {
         this.$message.success("创建成功!")
         this.$router.push({

+ 20 - 1
src/views/ledger/rentlist/rentadd/index.vue

@@ -6,7 +6,7 @@
         <el-option v-for="item in showTypes" :key="item.value" :label="item.label" :value="item.value"></el-option>
       </el-select>
       <span>增加</span>
-      <el-input v-model="addNum" style="width:50px;" size="small"></el-input>
+      <el-input-number v-model="addNum" :controls="false" style="width:50px;" :min="1" :max="50"></el-input-number>
       <span>个租户</span>
       <el-button @click="handleAddTableRow">增加</el-button>
     </el-row>
@@ -51,6 +51,15 @@ export default {
         { value: "all", label: '全部' }, 
         { value: "Visible", label: '只看采集信息' }
       ],
+      inputMap: {
+        FloorId: {
+          InputMode: 'B1',
+          Editable:true,
+          InfoPointCode:"FloorId",
+          InfoPointName:"所属楼层",
+          Path:"FloorId"
+        }
+      }, //信息点和输入方式映射表
       showType: this.$route.query.showType,
       tableHeader: [],
       tableData: session.get("rentAddData")? session.get("rentAddData").length? session.get("rentAddData"): [{}]: [{}],
@@ -79,6 +88,11 @@ export default {
       }
       await getDataDictionary(param, res => {
         this.tableHeader = res.Content
+        this.tableHeader.forEach(item => {
+          if (item.Path) {
+            this.inputMap[item.Path] = item
+          }
+        })
         this.initTable()
       })
     },
@@ -195,8 +209,13 @@ export default {
     getInfors(infos, row) {
       //其他的开始判断
       let val = this.tableExample.colToProp(row.col);
+      let inputData = this.inputMap[val]
       this.row = row.row //要操作的列号
       this.messKey = val //要操作的列类型
+      if (!inputData.Editable) {
+        this.$message("该信息点的值为自动生成,不可人工维护!");
+        return false;
+      }
       //点击关联的元空间
       // if (val === "SpaceCount") {
       //   this.isTableRightShow = true;

+ 85 - 91
src/views/ledger/report/index.vue

@@ -119,75 +119,75 @@
 </template>
 
 <script>
-  import {mapGetters} from "vuex";
-  import {
-    countEquip,
-    countGeneralSys,
-    countProperty,
-    gatherInfoPoint,
-    getCenoteType,
-    getDataDictionary,
-    infoPoint,
-    notSyncObject,
-    notSyncRelationData,
-    postRelationInforAtpism,
-    queryCenoteCount,
-    queryDefaultFunTypes,
-    queryLederDelObject,
-    queryPart,
-    queryPartitionRatio,
-    queryRentCount,
-    queryShaftFunctionType,
-    queryTenantCompletion,
-    queryZoneCount,
-    ShaftRelationBusinessSpace,
-    systemInfoPoint
-  } from "@/api/scan/request";
-  import dataOrigin from "@/components/ledger/report/dataorigin";
-  import datafan from "@/components/ledger/report/datafan";
-  import dataExport from "@/components/ledger/report/dataexport";
-
-  export default {
-    data() {
-      return {
-        lederDelObjectCount: null,// 台账中待删除的对象
-        notSyncObjectCount: null,// 不能同步到物理世界的对象
-        notSyncDataCount: null,// 不能同步到物理世界的关系数据
-        postRelationInforCount: null,// 岗位和关联的资产信息点值不一致
-        equipCount: null,// 设备总数
-        equipment: [],// 设备数据
-        assetsCount: null,// 资产总数
-        assets: [],// 资产数据
-        parts: [],// 部件数据
-        partsCount: null,// 部件总数
-        zoneSpaceCount: null,// 业务空间总数
-        zoneType: [// 分区类型
-          {
-            "Code": "GeneralZone",
-            "Name": "默认分区",
-            "Rel_type": "99"
-          },
-          {
-            "Name": "供电分区",
-            "Rel_type": "1",
-            "Code": "PowerSupplyZone"
-          },
-          {
-            "Name": "照明分区",
-            "Rel_type": "2",
-            "Code": "LightingZone"
-          },
-          {
-            "Name": "网络分区",
-            "Rel_type": "3",
-            "Code": "NetworkZone"
-          },
-          {
-            "Code": "AirConditioningZone",
-            "Name": "空调分区",
-            "Rel_type": "4"
-          },
-          {
+import {mapGetters} from "vuex";
+import {
+  countEquip,
+  countGeneralSys,
+  countProperty,
+  gatherInfoPoint,
+  getCenoteType,
+  getDataDictionary,
+  infoPoint,
+  notSyncObject,
+  notSyncRelationData,
+  postRelationInforAtpism,
+  queryCenoteCount,
+  queryDefaultFunTypes,
+  queryLederDelObject,
+  queryPart,
+  queryPartitionRatio,
+  queryRentCount,
+  queryShaftFunctionType,
+  queryTenantCompletion,
+  queryZoneCount,
+  ShaftRelationBusinessSpace,
+  systemInfoPoint
+} from "@/api/scan/request";
+import dataOrigin from "@/components/ledger/report/dataorigin";
+import datafan from "@/components/ledger/report/datafan";
+import dataExport from "@/components/ledger/report/dataexport";
+
+export default {
+  data() {
+    return {
+      lederDelObjectCount: null,// 台账中待删除的对象
+      notSyncObjectCount: null,// 不能同步到物理世界的对象
+      notSyncDataCount: null,// 不能同步到物理世界的关系数据
+      postRelationInforCount: null,// 岗位和关联的资产信息点值不一致
+      equipCount: null,// 设备总数
+      equipment: [],// 设备数据
+      assetsCount: null,// 资产总数
+      assets: [],// 资产数据
+      parts: [],// 部件数据
+      partsCount: null,// 部件总数
+      zoneSpaceCount: null,// 业务空间总数
+      zoneType: [// 分区类型
+        {
+          "Code": "GeneralZone",
+          "Name": "默认分区",
+          "Rel_type": "99"
+        },
+        {
+          "Name": "供电分区",
+          "Rel_type": "1",
+          "Code": "PowerSupplyZone"
+        },
+        {
+          "Name": "照明分区",
+          "Rel_type": "2",
+          "Code": "LightingZone"
+        },
+        {
+          "Name": "网络分区",
+          "Rel_type": "3",
+          "Code": "NetworkZone"
+        },
+        {
+          "Code": "AirConditioningZone",
+          "Name": "空调分区",
+          "Rel_type": "4"
+        },
+        {
             "Name": "采暖分区",
             "Rel_type": "5",
             "Code": "HeatingZone"
@@ -278,13 +278,6 @@
           type: 'warning'
         });
       },
-      zoneTypeConversion(item) {// 分区类型转换
-        this.zoneType.forEach(it => {
-          if (item.Name === it.Code) {
-            item.Name = it.Name;
-          }
-        })
-      },
       functionTypeTranstion(item, type) {// 默认分区功能类型转换
         type.forEach(it => {
           if (item.Name === it.Code) {
@@ -657,22 +650,23 @@
           this.defaultPart = [];
           let res1 = response[0]
           let res2 = response[1]
-          if (res1.Content.length) {
-            res1.Content.forEach(item => {
-              this.zoneTypeConversion(item);
-            })
-            let arr = res1.Content.filter(i => i.Count).forEach(j => {
-              this.partProtion.push({
-                name: j.Name + j.Count,
-                value: j.Count
-              })
-            })
-            this.business.push({
-              title: '各分区占比',
-              tips: '各类型分区实例数量与实例总数占比',
-              needCountO: this.partProtion,
+          res1.Content.length && res1.Content.filter(i => i.Count).forEach(j => {
+            this.zoneType.forEach(l => {
+              if (l.Code == j.Name) {
+                this.partProtion.push({
+                  name: l.Name + j.Count,
+                  value: j.Count
+                })
+              }
             })
-          }
+
+          })
+          this.business.push({
+            title: '各分区占比',
+            tips: '各类型分区实例数量与实例总数占比',
+            needCountO: this.partProtion,
+          })
+          // }
           if (res2.Content.length) {
             res2.Content.forEach(item => {
               this.functionTypeTranstion(item, this.functionType);

+ 1 - 1
src/views/ledger/spacelist/spaceadd/index.vue

@@ -6,7 +6,7 @@
         <el-option v-for="item in showTypes" :key="item.value" :label="item.label" :value="item.value"></el-option>
       </el-select>
       <span>增加</span>
-      <el-input v-model="addNum" style="width:50px;" size="small"></el-input>
+      <el-input-number v-model="addNum" :controls="false" style="width:50px;" :min="1" :max="50"></el-input-number>
       <span>个{{space.spaceName}}</span>
       <el-button @click="handleAddTableRow">增加</el-button>
     </el-row>

+ 26 - 5
src/views/ledger/system/addsystem.vue

@@ -9,7 +9,7 @@
         <el-option v-for="item in showTypes" :key="item.value" :label="item.label" :value="item.value"></el-option>
       </el-select>
       <span>增加</span>
-      <el-input v-model="addNum" style="width:50px;" size="small"></el-input>
+      <el-input-number v-model="addNum" :controls="false" style="width:50px;" :min="1" :max="50"></el-input-number>
       <span>个{{category.CategoryName}}</span>
       <el-button @click="handleAddTableRow">增加</el-button>
     </el-row>
@@ -88,6 +88,15 @@ export default {
         changeRea: false,
         lookPic: false //图片查看
       },
+      inputMap: {
+        flowBuild: {
+          InputMode: 'D1',
+          Editable: true,
+          InfoPointCode: "flowBuild",
+          InfoPointName: "建筑楼层",
+          Path: "flowBuild"
+        }
+      }, //信息点和输入方式映射表
       qrcodeUrl: "", //二维码图片地址
       filesArr: [], //保存临时的文件key
       imgsArr: [], //临时保存的图片key数组
@@ -160,6 +169,11 @@ export default {
       };
       await getDataDictionary(params, res => {
         this.tableHeader = res.Content;
+        this.tableHeader.forEach(item => {
+            if (item.Path) {
+                this.inputMap[item.Path] = item
+            }
+        })
         this.initTable();
       });
     },
@@ -207,9 +221,11 @@ export default {
       })
     },
     // 删除表格行
-    handleDeleteTableRow() {
-      this.$message.success("删除成功");
-      this.formaTableData();
+    handleDeleteTableRow(a,b,c,d) {
+      if (d && d === 'ContextMenu.removeRow') {
+				this.$message.success("删除成功");
+      	this.formaTableData();
+			}
     },
     // 添加行
     handleAddTableRow() {
@@ -344,6 +360,7 @@ export default {
     },
     getInfors(infos, row) {
       let val = this.tableExample.colToProp(row.col);
+      let inputData = this.inputMap[val];
       this.row = row.row;
       this.messKey = val;
       switch (val) {
@@ -376,10 +393,14 @@ export default {
         default:
           break;
       }
+      if (!inputData.Editable) {
+        this.$message("该信息点的值为自动生成,不可人工维护!");
+        return false;
+      }
     },
     //建筑楼层
     relateSuccess(data) {
-      this.tableData[this.row].BuildingFloorInfoList = data
+      this.tableData[this.row].BuildingFloorInfoList = data.length?data:undefined;
       this.tableExample.render()
     }
   }

+ 36 - 24
src/views/model/file/index.vue

@@ -163,34 +163,42 @@ export default {
     },
     //删除模型文件夹
     removeFolder() {
-      this.$alert(`确定要删除文件夹 <${this.currentFolderName}> 吗?`, "提示", {
+			if (this.currentFolderId) {
+				this.$alert(`确定要删除文件夹 <${this.currentFolderName}> 吗?`, "提示", {
         confirmButtonText: "确定",
-        callback: action => {
-          if (action == "confirm") {
-            let params = {
-              Id: this.currentFolderId,
-              ProjectId: this.projectId
-            };
-            request.deleteModel(params, res => {
-              this.$message({
-                message: "删除成功!",
-                type: "success"
-              });
-              this.queryModel();
-            });
-          } else {
-            this.$message({
-              type: "info",
-              message: `取消操作`
-            });
-          }
-        }
-      });
+					callback: action => {
+						if (action == "confirm") {
+							let params = {
+								Id: this.currentFolderId,
+								ProjectId: this.projectId
+							};
+							request.deleteModel(params, res => {
+								this.$message({
+									message: "删除成功!",
+									type: "success"
+								});
+								this.queryModel();
+							});
+						} else {
+							this.$message({
+								type: "info",
+								message: `取消操作`
+							});
+						}
+					}
+				});
+			} else {
+				this.$message.info("请选择模型文件夹!")
+			}
     },
     //编辑文件夹
     editFolder() {
-      this.folderName = this.currentFolderName;
-      this.changeFolderNameVisible = true;
+			if (this.currentFolderId) {
+				this.folderName = this.currentFolderName;
+      	this.changeFolderNameVisible = true;
+			} else {
+				this.$message.info("请选择模型文件夹!");
+			}
     },
     // 查询所有文件夹模型
     queryModel() {
@@ -344,6 +352,10 @@ export default {
   },
   watch: {
     projectId() {
+      this.choiceIndex = 0;
+      this.currentFolderId = "";
+      this.currentFolderName = "";
+      this.currentFloorModelId = "";
       this.queryModel()
     }
   },

+ 2 - 0
src/views/ready/buildfloor/repetitionGraphy.vue

@@ -124,6 +124,8 @@ export default {
       } else {
         this.init()
       }
+    } else {
+      this.init()
     }
     this.getCountModel()
     this.$nextTick(() => {

文件差异内容过多而无法显示
+ 973 - 972
src/views/ready/collectsetting/index.vue


+ 5 - 0
src/views/relation/overview/index.vue

@@ -7,6 +7,7 @@
       @calcSpecial="calcSpecial"
       @openComputed="openComputed"
       @RelationType="RelationType"
+      @Refresh="Refresh"
     />
   </div>
 </template>
@@ -223,6 +224,10 @@ export default {
       sysDirection(param, res => {
         this.init();
       });
+    },
+    Refresh() {
+
+      this.init()
     }
   }
 };

+ 34 - 32
src/views/system/auth/index.vue

@@ -1,40 +1,42 @@
 <template>
-    <div>
-        <h4>请稍候...</h4>
-    </div>
+  <div>
+    <h4>请稍候...</h4>
+  </div>
 </template>
 <script>
-import { mapGetters, mapMutations } from 'vuex'
+import {mapGetters, mapMutations} from 'vuex'
 import adminapi from '@/api/system/admin'
 import authutils from '@/utils/authutils'
+
 export default {
-    name: 'index',
-    props: [],
-    data() {
-        return {}
-    },
-    created() {
-        let token = this.$route.query.token
-        console.log(token)
-        this.$store.commit('setSsoToken', token)
-        console.log(this.$store.state.ssoToken)
-        this.$store.dispatch('layout/loadUserInfo').then(resp => {
-            console.log('store dispatch result ', resp)
-            // if (resp.result  == 'success') {
-            if (resp.Result  == 'success') {
-                let lastRoute = this.$store.getters['lastRoute']
-                console.log('last route ', lastRoute)
-                if (lastRoute) {
-                    this.$router.replace(lastRoute)
-                } else {
-                    this.$router.replace({path: "/"})
-                }
-            }else{
-                this.$router.replace('/nouser')
-            }
-        })
-    },
-    mounted() {},
-    components: {}
+  name: 'index',
+  props: [],
+  data() {
+    return {}
+  },
+  created() {
+    let token = this.$route.query.token
+    console.log(token)
+    this.$store.commit('setSsoToken', token)
+    console.log(this.$store.state.ssoToken)
+    this.$router.replace({path: "/"})
+    // this.$store.dispatch('layout/loadUserInfo').then(resp => {
+    //     console.log('store dispatch result ', resp)
+    //     if (resp.Result  == 'success') {
+    //         let lastRoute = this.$store.getters['lastRoute']
+    //         console.log('last route ', lastRoute)
+    //         if (lastRoute) {
+    //             this.$router.replace(lastRoute)
+    //         } else {
+    //             this.$router.replace({path: "/"})
+    //         }
+    //     }else{
+    //         this.$router.replace('/nouser')
+    //     }
+    // })
+  },
+  mounted() {
+  },
+  components: {}
 }
 </script>