Browse Source

Merge branch 'build' into dev

# Conflicts:
#	config/dev.env.js
shaun-sheep 5 years ago
parent
commit
5c80e1ef1a

+ 26 - 3
src/api/scan/request.js

@@ -1877,12 +1877,35 @@ export function notSyncObject(param, success) {
 
 // 岗位和关联的资产信息点值不一致
 export function postRelationInforAtpism(param, success) {
-    let url = `${baseUrl}/datacenter/statistics/eq2pe-count`
-    http.postJson(url, param, success)
+  let url = `${baseUrl}/datacenter/statistics/eq2pe-count`
+  http.postJson(url, param, success)
 }
 
 // 查询所有设备和部件的类型
 export function getAllEqPaType(param, success) {
   let url = `${baseUrl}/datacenter/class-def/query-equip-comm-type`
   http.postJson(url, param, success)
-}
+}
+
+//创建建筑信息
+export function objectCreateBuild(param, success) {
+  let url = `${baseUrl}/datacenter/object/building/create`
+  http.postJson(url, param, success)
+}
+
+//更新建筑信息
+export function objectUpdateBuild(param, success) {
+  let url = `${baseUrl}/datacenter/object/building/update`
+  http.postJson(url, param, success)
+}
+//查询建筑信息
+export function objectQueryBuild(param, success) {
+  let url = `${baseUrl}/datacenter/object/building/query`
+  http.postJson(url, param, success)
+}
+//根据id删除建筑信息
+export function objectDeleteBuild(param, success) {
+  let url = `${baseUrl}/datacenter/object/building/delete`
+  http.postJson(url, param, success)
+}
+

+ 10 - 10
src/components/business_space/business/handsontable.vue

@@ -11,9 +11,9 @@
 <!--            :label="item.label"-->
 <!--            :value="item.value">-->
 <!--          </el-option>-->
-<!--        </el-select>-->
-<!--        &nbsp;&nbsp; | &nbsp;&nbsp;-->
-<!--      </div>-->
+      <!--        </el-select>-->
+      <!--        &nbsp;&nbsp; | &nbsp;&nbsp;-->
+      <!--      </div>-->
       <el-select v-model="onlyRead" @change="getData(false)"
                  style="width:100px;margin-right:20px;vertical-align:bottom;">
         <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
@@ -21,6 +21,7 @@
       <el-select v-model="showType" @change="initHot" style="width:100px;margin-right:10px;vertical-align:bottom;">
         <el-option v-for="item in showTypes" :key="item.value" :label="item.label" :value="item.value"></el-option>
       </el-select>
+      F
       <el-button v-show="!onlyRead" @click="addSp">添加</el-button>
       <el-button @click="reset">刷新</el-button>
       <el-button v-show="!onlyRead" @click="undo">撤销</el-button>
@@ -64,18 +65,17 @@
   import Handsontable from "handsontable-pro"
   import buildFloor from '@/utils/handsontable/buildFloorData'
   import 'handsontable-pro/dist/handsontable.full.css'
-  import zhCN from 'handsontable-pro/languages/zh-CN';
   import uploadImgDialog from "@/components/business_space/dialogs/list/uploadImgDialog"
   import qrcode from "@/components/ledger/lib/qrcode";
   import {
-    queryZone,
-    updateZone,
-    deleteZone,
-    createZone,
     BeatchQueryParam,
-    updateRelateInSpAndBuild
+    createZone,
+    deleteZone,
+    queryZone,
+    updateRelateInSpAndBuild,
+    updateZone
   } from "@/api/scan/request";
-  import {mapGetters, mapActions} from "vuex";
+  import {mapGetters} from "vuex";
   import dialogZone from "../../ledger/addDialog/dialogZone";
 
   export default {

+ 2 - 2
src/components/business_space/dialogs/list/filesDialog.vue

@@ -57,9 +57,9 @@
       changeItem(file) {
         console.log(file)
         this.$emit("changeFile", file)
-      }
+      },
     },
   };
 </script>
 <style>
-</style>
+</style>

+ 23 - 7
src/components/business_space/lib/uploadFiles.vue

@@ -18,15 +18,18 @@
           drag
       >
         <el-button
-            size="small"
-            type="primary"
-            v-if="!readOnly"
+          size="small"
+          :type="isShow ===1 ? 'text':'primary'"
+          v-if="!readOnly"
         >点击上传</el-button>
-        <div
+        <span v-if="isShow !== 1 || isShow == undefined">
+          <div
             slot="tip"
             class="el-upload__tip"
             v-if="!readOnly"
-        >请上传文件</div>
+          >请上传文件</div>
+        </span>
+
       </el-upload>
       <div
           v-if="item && filesArr.length"
@@ -67,6 +70,12 @@
         type: [Number, String],
         default: 6
       },
+      isShow: {
+        type: Number
+      },
+      contextKey: {
+        type: [String, Object]
+      },
       defined: null
     },
     data() {
@@ -169,7 +178,14 @@
                     SystemId: 'dataPlatform'
                   }
                   vm.filesArr.push(fileObject);
-                  vm.$emit("change", vm.filesArr, vm.defined);
+
+                  if(vm.isShow === 1) {
+                    let oFile = {}
+                    oFile[vm.contextKey] = vm.filesArr
+                    vm.$emit("change", oFile, vm.defined);
+                  } else {
+                    vm.$emit("change", vm.filesArr, vm.defined);
+                  }
                 } else {
                   this.$message.error(res.data.ResultMsg)
                 }
@@ -224,4 +240,4 @@
       }
     }
   }
-</style>
+</style>

+ 76 - 53
src/components/business_space/lib/uploadImgsName.vue

@@ -47,63 +47,78 @@
   </div>
 </template>
 <script>
-import tools from "@/utils/scan/tools";
-import formInput from "@/components/business_space/lib/formInput"
-import detailsDialog from "@/components/business_space/lib/detailsDia"
+  import tools from "@/utils/scan/tools";
+  import formInput from "@/components/business_space/lib/formInput"
+  import detailsDialog from "@/components/business_space/lib/detailsDia"
 
-export default {
-  components: {
-    formInput,
-    detailsDialog
-  },
-  props: {
-    keysArr: {
-      type: [Array, String]
-    },
-    readOnly: {
-      type: Boolean,
-      default: false
-    },
-    max: {
-      type: [Number, String],
-      default: 6
+  export default {
+    components: {
+      formInput,
+      detailsDialog
     },
-    accept: {
-      type: String,
-      default: "image/*"
+    props: {
+      keysArr: {
+        type: [Array, String]
+      },
+      readOnly: {
+        type: Boolean,
+        default: false
+      },
+      max: {
+        type: [Number, String],
+        default: 6
+      },
+      accept: {
+        type: String,
+        default: "image/*"
+      },
+      type: {
+        type: String,
+        default: "image"
+      },
+      contextKey: {
+        type: [String, Object]
+      },
+      isShow: {
+        type: [Number, String]
+      },
+      defined: null,
+      videoPicArr: {
+        type: Array,
+        default: function () {
+          return []
+        }
+      }
     },
-    type: {
-      type: String,
-      default: "image"
+    data() {
+      return {
+        baseUrl: "",
+        imageGetUrl: "/image-service/common/image_get?systemId=dataPlatform",
+        imageUploadUrl: "/image-service/common/image_upload?systemId=dataPlatform&secret=9e0891a7a8c8e885&overwrite=true",
+        imagesArr: [],
+        iframeSrc: "",
+        dialog: {
+          details: false
+        }
+      };
     },
-    defined: null,
-    videoPicArr: {
-      type: Array,
-      default: function () {
-        return []
-      }
-    }
-  },
-  data() {
-    return {
-      baseUrl: "",
-      imageGetUrl: "/image-service/common/image_get?systemId=dataPlatform",
-      imageUploadUrl: "/image-service/common/image_upload?systemId=dataPlatform&secret=9e0891a7a8c8e885&overwrite=true",
-      imagesArr: [],
-      iframeSrc: "",
-      dialog: {
-        details: false
-      }
-    };
-  },
-  created() {
-    this.imageFalg();
-  },
-  methods: {
-    getName(name, index) {
-      this.imagesArr[index].Name = name
-      this.$emit("change", this.imagesArr, this.defined, this.videoPicArr);
+    created() {
+      this.imageFalg();
     },
+    methods: {
+      getName(name, index) {
+
+        this.imagesArr[index].Name = name
+        if (this.isShow === 1) {
+          let oFile = {}
+          oFile[this.contextKey] = this.imagesArr
+          this.$emit("change", oFile, this.defined, this.videoPicArr);
+
+        } else {
+          this.$emit("change", this.imagesArr, this.defined, this.videoPicArr);
+
+        }
+      },
     //判断是否为空
     imageFalg() {
       let type = typeof this.keysArr;
@@ -220,7 +235,15 @@ export default {
                     CreateTime
                   })
                 }
-                vm.$emit("change", vm.imagesArr, vm.defined, vm.videoPicArr);
+                if (vm.isShow === 1) {
+                  let oFile = {}
+                  oFile[vm.contextKey] = vm.imagesArr
+                  vm.$emit("change", oFile, vm.defined, vm.videoPicArr);
+                  console.log('oFile-',oFile)
+                } else {
+                  vm.$emit("change", vm.imagesArr, vm.defined, vm.videoPicArr);
+
+                }
               }
             }
           };

+ 277 - 39
src/components/ready/buildfloor/addBuild.vue

@@ -1,51 +1,289 @@
 <template>
-    <el-dialog
-        :title="buildTitle"
-        :visible.sync="buildDialogVis"
-        width="20%"
-        id="messageDialog"
+  <el-dialog
+    :title="buildTitle"
+    :visible.sync="buildDialogVis"
+    id="messageDialog"
+    width="50%"
+  >
+    <el-form
+      :inline="true"
+      :model="form"
+      label-width="125px"
+      :rules="rules"
+      ref="ruleForm"
     >
-    <div>
-      <label>建筑名称 : </label>
-        <el-input
-            placeholder="请输入建筑名称"
-            v-model="buildName"
-        />
-    </div>
+      <template v-for="(val,key) in buildMessage">
+        <h4>{{key}}</h4>
+
         <span
-            slot="footer"
-            class="dialog-footer"
+          :key="item.InfoPointCode"
+          v-for="item in val"
+          :class="[{'upload-file':item.InputMode == 'F2'}]"
         >
-      <el-button
-          size="small"
-          @click="buildDialogVis = false"
-      >取消</el-button>
-      <el-button
-          size="small"
-          type="primary"
-          @click="save"
-      >确认</el-button>
-    </span>
+        <el-form-item
+          :class="{FloorTypeSelect:item.InputMode == 'D1'||item.Unit}"
+          :label="item.InfoPointName"
+          :prop="item.InfoPointCode"
+          v-if="all||item.Visible"
+        >
+        <span v-if="item.InputMode == 'B1' || item.InputMode == 'B2'">
+            <el-input
+              v-model="form[item.Path]"
+              :placeholder="(item.InputMode === 'B1' && item.InfoPointCode==='BuildLocalID') ? '填写示例:F1、B1?':'' "
+            />
+           <span
+             v-if="item.InputMode === 'B1' && item.InfoPointCode==='BuildLocalID' && isShowTitle"
+             style="color: gray;font-size: 12px"
+           >用于楼层平面图切换</span>
+
+        </span>
+
+          <el-input type="number" v-else-if="item.InputMode == 'A1'||item.InputMode == 'A2'" v-model="form[item.Path]">
+            <template slot="append" v-if="item.Unit">{{item.Unit}}</template>
+          </el-input>
+          <el-select
+            placeholder="请选择"
+            v-else-if="item.InputMode == 'D1' || item.InputMode == 'E2'"
+            v-model="form[item.Path]"
+          >
+            <el-option :key="op.Code" :label="op.Name" :value="op.Code" v-for="op in item.options"></el-option>
+          </el-select>
+        <el-select
+          placeholder="请选择"
+          v-else-if="item.InputMode == 'D2'"
+          v-model="form[item.Path]"
+          multiple
+          collapse-tags
+        >
+
+            <el-option :key="op.Code" :label="op.Name" :value="op.Code" v-for="op in item.options"></el-option>
+          </el-select>
+           <el-date-picker
+             v-model="form[item.Path]"
+             type="daterange"
+             v-else-if="item.InputMode == 'C6'"
+             value-format="yyyy-MM-dd"
+             range-separator="至"
+             start-placeholder="开始日期"
+             end-placeholder="结束日期"
+           />
+             <el-cascader
+               v-else-if="item.InputMode == 'D1L'"
+               placeholder="请选择"
+               :options="item.options"
+               v-model="form[item.Path]"
+               :props="{ checkStrictly: true ,value: 'Code',label:'Name'}"
+               clearable
+             />
+          <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>
+          <el-date-picker
+            placeholder="选择日期"
+            value-format="yyyy-MM-dd"
+            type="date" v-else-if="item.InputMode == 'C5'" v-model="form[item.Path]">
+          </el-date-picker>
+
+          <uploadImgs
+            :readOnly="false"
+            v-else-if="item.InputMode == 'F2'&& item.Path === 'BuildingInfo.BuildingType.Pic'"
+            v-model="form[item.Path]"
+            :keysArr="Array.isArray(buildData[item.Path]) ? buildData[item.Path]:[]"
+            :context-key="item.Path"
+            :isShow="1"
+            @change="changeItem"
+          />
+
+             <upload-files
+               v-model="form[item.Path]"
+               v-else-if="item.InputMode == 'F2'"
+               :readOnly="false"
+               :isShow="1"
+               :keys-arr="Array.isArray(buildData[item.Path]) ? buildData[item.Path]:[] "
+               :show-file-list="false"
+               :context-key="item.Path"
+               @change="changeItem"
+             />
+          <el-input disabled title="暂不支持" v-else v-model="form[item.Path]"></el-input>
+        </el-form-item>
+      </span>
+      </template>
+
+    </el-form>
+    <span
+      class="dialog-footer"
+      slot="footer"
+    >
+    <el-button @click="buildDialogVis = false">取 消</el-button>
+    <el-button @click="submitForm('ruleForm')" type="primary">确 定</el-button>
+  </span>
+    <el-dialog :visible.sync="dialogVisible">
+      <img width="100%" :src="dialogImageUrl" alt="">
+    </el-dialog>
   </el-dialog>
 </template>
 <script>
-export default {
-  data() {
-    return {
-      buildName: '',
-      buildDialogVis: false
+  import uploadFiles from "@/components/business_space/lib/uploadFiles";
+  import uploadImgs from "@/components/business_space/lib/uploadImgsName";
+
+  function flattenKeys(obj) {
+    let res = {}
+
+    function isObject(val) {
+      return typeof val === 'object' && !Array.isArray(val)
     }
-  },
-  props: {
-    buildTitle: {
-      default: "添加建筑"
+
+    function digKeys(prev, obj) {
+      Object.entries(obj).forEach(([key, value]) => {
+        const currentKey = prev ? `${prev}.${key}` : key
+        if (isObject(value)) {
+          digKeys(currentKey, value)
+        } else {
+          res[currentKey] = value
+        }
+      })
     }
-  },
-  methods: {
-    showDialog() {
-      this.buildDialogVis = true
+
+    digKeys('', obj)
+
+    return res
+  }
+
+  export default {
+    data() {
+      let validateId = (rule,value,callback) => {
+        if (!value) {
+          this.isShowTitle = false
+          return callback(new Error('请输入建筑本地编码'));
+        } else{
+          this.isShowTitle = true
+          callback()
+        }
+      }
+      return {
+        buildName: '',
+        keysArr: [], //保存临时的文件key
+        buildDialogVis: false,
+        form: {},
+        dialogImageUrl: '',
+        dialogVisible: false,
+        all: true,
+        rules: {
+          "BuildLocalID": [
+            // {"required": true, "message": "请输入建筑本地编码", "trigger": "blur"}
+            {validator:validateId,trigger:'blur'}
+          ],
+          "BuildLocalName": [
+            {"required": true, "message": "请输入建筑本地名称", "trigger": "blur"}
+          ]
+        },
+        buildData: {},
+        isShowTitle:true,
+      }
+    },
+    components: {uploadFiles, uploadImgs},
+    props: ['buildTitle', 'buildMessage', 'currentBuild'],
+    computed: {
+    },
+    mounted() {
+
+
     },
-    save() { }
+    methods: {
+      deepCopy(obj) {
+        return JSON.parse(JSON.stringify(obj))
+      },
+      showDialog(data) {
+        //获取信息
+        let buildData = data || {};  // string =>array key
+        buildData = flattenKeys(buildData);
+        for (let key in this.buildMessage) {
+          let arr = this.buildMessage[key];
+          if (Array.isArray(arr)) {
+            let list = arr.filter(i => i.InputMode == 'D2' || i.InputMode == 'C6');
+            list.forEach(j => {
+              if (buildData.hasOwnProperty(j.Path)) {
+                if (!Array.isArray(buildData[j.Path])) {
+                  buildData[j.Path] = buildData[j.Path].split(',');
+                }
+              }
+
+            })
+          }
+        }
+        this.buildData = buildData;
+        this.timeoutSetVal()
+        this.buildDialogVis = true
+      },
+
+      timeoutSetVal() {
+        let that = this
+        setTimeout(() => {
+          if (that.form) {
+            that.form = that.buildData
+          } else {
+            this.timeoutSetVal()
+          }
+        })
+      },
+      closeDialog() {
+        this.buildDialogVis = false
+      },
+      submitForm(formName) {
+        this.$refs[formName].validate((valid) => {
+          if (valid) {
+            console.log(this.form);
+            for (let key in this.buildMessage) {
+              let arr = this.buildMessage[key];
+              if (Array.isArray(arr)) {
+                let list = arr.filter(i => i.InputMode == 'D2' || i.InputMode == 'C6');
+                list.forEach(j => {
+                  if (this.form.hasOwnProperty(j.Path)) {
+                    if (Array.isArray(this.form[j.Path])) {
+                      this.form[j.Path] = this.form[j.Path].join(',');
+                    }
+                  }
+                })
+              }
+            }
+            this.$emit('handleBuild', this.form)
+
+          } else {
+            return false;
+          }
+        });
+      },
+      changeItem(val) {
+        console.log(val)
+        let _key = Object.keys(val)[0] + '';
+        this.form[_key] = val[_key];
+
+      },
+
+    }
   }
-}
 </script>
+<style lang="less" scoped>
+
+  #messageDialog {
+    /deep/ .el-date-editor.el-input, .el-date-editor.el-input__inner, /deep/ .el-select {
+      width: 200px;
+    }
+
+    /deep/ .FloorTypeSelect .el-form-item__content {
+      width: 200px;
+    }
+
+    /deep/ .el-dialog__body {
+      height: 420px;
+      overflow: auto;
+    }
+
+    .upload-file {
+      width: 100%;
+      display: block;
+    }
+  }
+</style>

+ 56 - 0
src/components/ready/buildfloor/uploadFile.vue

@@ -0,0 +1,56 @@
+<template>
+  <el-upload
+    :before-remove="beforeRemove"
+    :file-list="fileList"
+    :limit="3"
+    :on-exceed="handleExceed"
+    :on-preview="handlePreview"
+    :on-remove="handleRemove"
+    action="https://jsonplaceholder.typicode.com/posts/"
+    class="upload-demo"
+    multiple>
+    <p
+      class="el-form-item__label"
+      style="width: 125px"
+    >{{name}}:</p>
+    <el-button
+      size="small"
+      type="text"
+    >点击上传
+    </el-button>
+    <!--    <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>-->
+  </el-upload>
+</template>
+
+<script>
+  export default {
+    name: "uploadFile",
+    props: ['name'],
+    data() {
+      return {
+        fileList: [
+          // {name: 'food.jpeg', url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'},
+          // {name: 'food2.jpeg', url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'}
+        ]
+      };
+    },
+    methods: {
+      handleRemove(file, fileList) {
+        console.log(file, fileList);
+      },
+      handlePreview(file) {
+        console.log(file);
+      },
+      handleExceed(files, fileList) {
+        this.$message.warning(`当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
+      },
+      beforeRemove(file, fileList) {
+        return this.$confirm(`确定移除 ${file.name}?`);
+      }
+    }
+  }
+</script>
+
+<style scoped>
+
+</style>

+ 6 - 4
src/utils/buildfloor/tools.js

@@ -2,7 +2,7 @@ const tools = {}
 
 /**
  * @param arr [a,b,c]
- * 
+ *
  * val value
  */
 function returnNewObj(data, arr, val) {
@@ -48,11 +48,13 @@ tools.formatData = (data) => {
   return newData
 }
 
+
+
 /**
  * @param data {a:{b:{c:{}}}}
- * 
+ *
  * @returns a.b.c
- * 
+ *
  */
 tools.desFormatData = (data) => {
   let newData = {}
@@ -69,4 +71,4 @@ tools.desFormatData = (data) => {
   return newData
 }
 
-export default tools
+export default tools

+ 391 - 248
src/views/ready/buildfloor/index.vue

@@ -4,28 +4,41 @@
       <div class="l-list">
         <div class="action-box">
           <div>
-            <el-button size="small" type="default" icon="el-icon-plus" @click="addBuild" />
-            <el-button size="small" type="default" icon="el-icon-minus" @click="delBuild" />
-            <el-button size="small" type="default" icon="el-icon-edit-outline" @click="editBuild" />
+            <el-button @click="addBuild" icon="el-icon-plus" size="small" type="default"/>
+
+            <el-popover
+              placement="top"
+              width="160"
+              v-model="visible">
+              <p>确定删除吗?</p>
+              <div style="text-align: right; margin: 0">
+                <el-button size="mini" type="text" @click="visible = false">取消</el-button>
+                <el-button type="primary" size="mini" @click="delBuild">确定</el-button>
+              </div>
+              <el-button slot="reference" icon="el-icon-minus" size="small" type="default"/>
+            </el-popover>
+            <el-button @click="editBuild" icon="el-icon-edit-outline" size="small" type="default"/>
           </div>
         </div>
         <h4>建筑</h4>
         <div class="build-list">
-          <div v-for="(item,index) in buildList" :key="item.BuildID" :class="{'floor-item':true,active:item.active}" @click="changeBuild(index)">
+          <div :class="{'floor-item':true,active:item.active}" :key="item.BuildID" @click="changeBuild(index)"
+               v-for="(item,index) in buildList">
             <span>
               {{item.BuildLocalName || item.BuildName}}
-              <el-badge v-if="item.Count>0" class="mark" :value="item.Count" />
+              <el-badge :value="item.Count" class="mark" v-if="item.Count>0"/>
             </span>
           </div>
         </div>
       </div>
       <div class="r-table">
         <div class="action-box">
-          <el-button size="small" type="default" @click="addFloor">添加楼层
+          <el-button @click="addFloor" size="small" type="default">添加楼层
           </el-button>
         </div>
         <div class="table-box">
-          <el-table :data="tableData" style="width: 100%" height="100%" v-loading="loading" :header-cell-style="headerStyle">
+          <el-table :data="tableData" :header-cell-style="headerStyle" height="100%" style="width: 100%"
+                    v-loading="loading">
             <el-table-column label="楼层本地名">
               <template slot-scope="scope">{{scope.row.FloorLocalName||scope.row.FloorName}}</template>
             </el-table-column>
@@ -34,35 +47,38 @@
             </el-table-column>
             <el-table-column label="楼层信息">
               <template slot-scope="scope">
-                <el-button size="mini" @click="editFloorData(scope.row)" plain icon="el-icon-edit-outline"></el-button>
+                <el-button @click="editFloorData(scope.row)" icon="el-icon-edit-outline" plain size="mini"></el-button>
               </template>
             </el-table-column>
-            <el-table-column prop="Datasource" label="平面图">
+            <el-table-column label="平面图" prop="Datasource">
               <template slot-scope="scope">
-                <p v-if="scope.row.Sign>0" @click="checkDrawImg(scope.row,2)">
+                <p @click="checkDrawImg(scope.row,2)" v-if="scope.row.Sign>0">
                   <el-badge is-dot>
-                    <i class="iconfont icon-floorplan" />
-                  </el-badge>平面图重复
+                    <i class="iconfont icon-floorplan"/>
+                  </el-badge>
+                  平面图重复
                 </p>
-                <p v-else-if="scope.row.StructureInfo?scope.row.StructureInfo.FloorMap:false" @click="checkDrawImg(scope.row,1)">
-                  <i class="iconfont icon-floorplan" />
+                <p @click="checkDrawImg(scope.row,1)"
+                   v-else-if="scope.row.StructureInfo?scope.row.StructureInfo.FloorMap:false">
+                  <i class="iconfont icon-floorplan"/>
                   查看平面图
                 </p>
-                <p v-else @click="checkDrawImg(scope.row,3)">
-                  <i class="iconfont icon-nopicture" />
+                <p @click="checkDrawImg(scope.row,3)" v-else>
+                  <i class="iconfont icon-nopicture"/>
                   暂无平面图
                 </p>
               </template>
             </el-table-column>
-            <el-table-column prop="SubTypeName" label="楼层贯通关系">
+            <el-table-column label="楼层贯通关系" prop="SubTypeName">
               <template slot-scope="scope">
-                <span style="margin-right:20px">{{scope.row.FloorThroughList?scope.row.FloorThroughList.length:0}}</span>
-                <el-button size="mini" @click="changeConnection(scope.row)" plain icon="el-icon-edit-outline" />
+                <span
+                  style="margin-right:20px">{{scope.row.FloorThroughList?scope.row.FloorThroughList.length:0}}</span>
+                <el-button @click="changeConnection(scope.row)" icon="el-icon-edit-outline" plain size="mini"/>
               </template>
             </el-table-column>
-            <el-table-column prop="action" label="操作">
+            <el-table-column label="操作" prop="action">
               <template slot-scope="scope">
-                <el-button size="mini" @click="handleDelete(scope.row)" type="danger" plain icon="el-icon-delete" />
+                <el-button @click="handleDelete(scope.row)" icon="el-icon-delete" plain size="mini" type="danger"/>
               </template>
             </el-table-column>
           </el-table>
@@ -70,279 +86,406 @@
       </div>
     </el-row>
     <!-- 添加-修改楼层 -->
-    <addFloor :title="floorTitle" ref="addFloorDialog" :curBuildId="curBuildId" :curFloorId="curFloorId" @refresh="refresh" />
-    <!-- 添加-修改建筑 -->
-    <addBuild :title="buildTitle" ref="addBuildDialog" />
+    <addFloor :curBuildId="curBuildId" :curFloorId="curFloorId" :title="floorTitle" @refresh="refresh"
+              ref="addFloorDialog"/>
+    <!-- 添加-修改建筑 :currentType="currentType"-->
+    <addBuild
+      :buildTitle="buildTitle"
+      ref="addBuildDialog"
+      :buildMessage="buildMessage"
+      @handleBuild="handleBuild"
+    />
     <!-- 删除建筑-删除楼层 -->
-    <el-dialog title="提示" :visible.sync="delDialogVis" width="20%" @close="handleClose" id="messageDialog">
+    <el-dialog :visible.sync="delDialogVis" @close="handleClose" id="messageDialog" title="提示" width="20%">
       <div>确定要删除该{{delText}}?</div>
-      <span slot="footer" class="dialog-footer">
-        <el-button size="small" @click="delDialogVis=false">取消</el-button>
-        <el-button size="small" type="primary" @click="confirmDel">确认</el-button>
+      <span class="dialog-footer" slot="footer">
+        <el-button @click="delDialogVis=false" size="small">取消</el-button>
+        <el-button @click="confirmDel" size="small" type="primary">确认</el-button>
       </span>
     </el-dialog>
     <!-- 添加贯通关系弹窗 -->
-    <addConnectivity ref="addConnectivity" @refresh="refresh" />
+    <addConnectivity @refresh="refresh" ref="addConnectivity"/>
     <!-- 查看图片弹窗 -->
-    <checkGraphy ref="checkGraphy" @refresh="refresh" :alreadyRelatedModel='alreadyRelatedModel'></checkGraphy>
+    <checkGraphy :alreadyRelatedModel='alreadyRelatedModel' @refresh="refresh" ref="checkGraphy"></checkGraphy>
   </div>
 
 </template>
 
 <script>
-import addFloor from "@/views/ready/buildfloor/addFloor/index";
-import addBuild from "@/components/ready/buildfloor/addBuild";
-import { mapGetters, mapActions } from "vuex";
-import addConnectivity from "@/components/ready/buildfloor/addConnectivity";
-import checkGraphy from "./drawGraphy/checkGraphy"; //查看图片
-import { buildingQueryAndCount, floorQueryAndSign, manageDeleteFloor } from "@/api/scan/request";
-export default {
-  components: {
-    addFloor,
-    addBuild,
-    addConnectivity,
-    checkGraphy
-  },
-  data() {
-    return {
-      repetitionGraphyVisible: false, // 替换平面图弹窗
-      floorTitle: "添加楼层",
-      buildTitle: "添加建筑",
-      delDialogVis: false,
-      delText: "建筑",
-      headerStyle: {
-        backgroundColor: "#d9d9d9",
-        color: "#2b2b2b",
-        lineHeight: "30px"
-      },
-      buildList: [],
-      tableData: [],
-      page: {
-        pageSize: 500,
-        pageSizes: [10, 20, 50, 100],
-        pageNumber: 1,
-        total: 0
-      },
-      loading: false, //列表loading
-      curBuildId: "", //当前选中的建筑id
-      curFloorId: "", //当前选中的楼层id
-      modelId: "",
-      alreadyRelatedModel: []
-    };
-  },
-  computed: {
-    ...mapGetters("layout", ["projectId"])
-  },
-  mounted() { },
-  created() {
-    this.init();
-  },
-  methods: {
-    init() {
-      let bdParam = {
-        Orders: "BuildLocalName asc",
-        PageNumber: 1,
-        PageSize: 500
-      };
-      buildingQueryAndCount(bdParam, res => {
-        this.buildList = res.Content;
-        if (this.buildList.length) {
-          this.changeBuild(0);
-        }
-      });
-    },
-    //change build
-    changeBuild(index) {
-      this.buildList.map(item => {
-        item.active = false;
-        return item;
-      });
-      this.buildList[index].active = true;
-      this.curBuildId = this.buildList[index].BuildID;
-      this.getFloorTableData();
-      this.$forceUpdate();
-    },
-    //add build
-    addBuild() {
-      this.$message.warning("开发中...");
-      return;
-      this.$refs.addBuildDialog.showDialog();
-    },
-    //delete build
-    delBuild() {
-      this.$message.warning("开发中...");
-      return;
-      this.delText = "建筑";
-      this.delDialogVis = true;
-    },
-    //edit build
-    editBuild() {
-      this.$message.warning("开发中...");
-      return;
+  import addFloor from "@/views/ready/buildfloor/addFloor/index";
+  import addBuild from "@/components/ready/buildfloor/addBuild";
+  import {mapGetters} from "vuex";
+  import addConnectivity from "@/components/ready/buildfloor/addConnectivity";
+  import checkGraphy from "./drawGraphy/checkGraphy"; //查看图片
+  import tools from "@/utils/buildfloor/tools";
+  import {
+    buildingQueryAndCount,
+    floorQueryAndSign,
+    getDataDictionary,
+    manageDeleteFloor,
+    objectCreateBuild,
+    objectDeleteBuild,
+    objectQueryBuild,
+    objectUpdateBuild
+  } from "@/api/scan/request";
+
+  export default {
+    components: {
+      addFloor,
+      addBuild,
+      addConnectivity,
+      checkGraphy
     },
-    //delete floor
-    handleDelete(floor) {
-      this.delText = "楼层";
-      this.delDialogVis = true;
-      this.curFloorId = floor.FloorID;
+    data() {
+      return {
+        repetitionGraphyVisible: false, // 替换平面图弹窗
+        floorTitle: "添加楼层",
+        buildTitle: "添加建筑",
+        delDialogVis: false,
+        delText: "建筑",
+        headerStyle: {
+          backgroundColor: "#d9d9d9",
+          color: "#2b2b2b",
+          lineHeight: "30px"
+        },
+        buildList: [],
+        tableData: [],
+        page: {
+          pageSize: 500,
+          pageSizes: [10, 20, 50, 100],
+          pageNumber: 1,
+          total: 0
+        },
+        loading: false, //列表loading
+        curBuildId: "", //当前选中的建筑id
+        curFloorId: "", //当前选中的楼层id
+        modelId: "",
+        alreadyRelatedModel: [],
+        // currentType: 'add'
+        buildMessage: {},
+        visible: false,
+      };
     },
-    //确认删除弹窗关闭
-    handleClose() { },
-    addFloor() {
-      this.curFloorId = "";
-      this.$refs.addFloorDialog.showDialog();
+    computed: {
+      ...mapGetters("layout", ["projectId"])
     },
-    // 获取列表
-    getFloorTableData() {
-      let floorParam = {
-        Cascade: [{ Name: "floorThroughList" }],
-        Orders: "FloorSequenceID desc",
-        PageNumber: this.page.pageNumber,
-        PageSize: this.page.pageSize,
-        Filters: `BuildID='${this.curBuildId}'`
-      };
-      floorQueryAndSign(floorParam, res => {
-        this.tableData = res.Content;
-        this.page.total = res.Total;
-        this.alreadyRelatedModel = res.Content.map(t => {
-          return t.ModelId
-        }).filter(t => t);
-      });
+    mounted() {
     },
-    // 创建楼层成功-修改关系成功
-    refresh() {
-      this.getFloorTableData();
+    created() {
+      this.init();
+      this.handleBuildQuery()
+      this.handleSearchBuildKey()
     },
-    // 确认删除(删除建筑-楼层公用)
-    confirmDel() {
-      if (this.delText == "楼层") {
-        let delParam = [{ FloorID: this.curFloorId }];
-        manageDeleteFloor(delParam, res => {
+    methods: {
+      init() {
+        let bdParam = {
+          Orders: "BuildLocalName asc",
+          PageNumber: 1,
+          PageSize: 500
+        };
+        buildingQueryAndCount(bdParam, res => {
+          this.buildList = res.Content;
+          if (this.buildList.length) {
+            this.changeBuild(0);
+          }
+        });
+      },
+      //change build
+      changeBuild(index) {
+        this.buildList.map(item => {
+          item.active = false;
+          return item;
+        });
+        this.buildList[index].active = true;
+        this.curBuildId = this.buildList[index].BuildID;
+        this.getFloorTableData();
+        this.$forceUpdate();
+      },
+      //add build
+      addBuild() {
+        // this.$message.warning("开发中...");
+        // return;
+        this.buildTitle = '添加建筑';
+        this.$refs.addBuildDialog.showDialog();
+        this.handleSearchBuildKey()
+      },
+      handleSearchBuildKey() {
+        let params = {
+          projectId: this.projectId,
+          data: {
+            Orders: "sort asc,InfoPointCode asc",
+            PageNumber: 1,
+            PageSize: 50
+          },
+          type: 'Building'
+        };
+        getDataDictionary(params, res => {
+          // let list = res.Content.map(item => {
+          //   if (item.InputMode === 'D1' && item.DataSource != undefined) {
+          //     item.options = JSON.parse(item.DataSource)
+          //   }
+          //   return item
+          // })
+          let first = {}
+          //一级循环出来一级标签
+          res.Content.map(item => {
+            if ((item.InputMode === 'D1' || item.InputMode === 'D2'  || item.InputMode === 'E2'|| item.InputMode === 'D1L') && item.DataSource != undefined) {
+              item.options = JSON.parse(item.DataSource)
+            }
+            if (first[item.FirstName] && first[item.FirstName].length) {
+            } else {
+              first[item.FirstName] = []
+            }
+            first[item.FirstName].push({
+              InfoPointName: item.InfoPointName,
+              InfoPointCode: item.InfoPointCode,
+              Visible: item.Visible,
+              UnDisabled: item.UnDisabled,
+              SecondName: item.SecondName ? item.SecondName : "",
+              Path: item.Path,
+              InputMode: item.InputMode,
+              options: item.options,
+              Unit: item.Unit
+            })
+          })
+          this.buildMessage = first
+
+        })
+      },
+      //delete build ,根据id删除建筑信息
+      delBuild() {
+        // this.$message.warning("开发中...");
+        // return;
+
+        let param = [{BuildId: this.curBuildId}];
+        objectDeleteBuild(param, res => {
+          setTimeout(() => {
+            this.handleBuildQuery()
+            this.init()
+          })
+          this.visible = false
           this.$message.success("删除成功");
-          this.delDialogVis = false;
-          this.getFloorTableData();
+        })
+      },
+      //edit build
+      editBuild() {
+        this.buildTitle = '编辑建筑';
+        this.handleSearchBuildKey()
+        let list = this.currentBuildList.filter(i => i.BuildID === this.curBuildId)
+        let obj = {}
+        for (let i = 0; i < list.length; i++) {
+          obj = list[i]
+        }
+
+
+
+        this.$refs.addBuildDialog.showDialog(obj);
+
+      },
+      handleFile(val,name) {
+      },
+      // handleBuild 获取建筑信息
+      handleBuild(val) {
+        let newform = tools.formatData(val)
+        let Param = {
+          Content: [newform]
+        }
+        if (newform.BuildID) {
+          objectUpdateBuild(Param, res => {
+            this.$message.success('更新成功')
+            this.$refs.addBuildDialog.closeDialog()
+          })
+        } else {
+          objectCreateBuild(Param, res => {
+            this.$message.success('创建成功')
+            this.$refs.addBuildDialog.closeDialog()
+          })
+        }
+        setTimeout(() => {
+          this.handleBuildQuery()
+          this.init()
+        })
+      },
+      //delete floor
+      handleDelete(floor) {
+        this.delText = "楼层";
+        this.delDialogVis = true;
+        this.curFloorId = floor.FloorID;
+      },
+      //确认删除弹窗关闭
+      handleClose() {
+      },
+      addFloor() {
+        this.curFloorId = "";
+        this.$refs.addFloorDialog.showDialog();
+      },
+      // 获取列表
+      getFloorTableData() {
+        let floorParam = {
+          Cascade: [{Name: "floorThroughList"}],
+          Orders: "FloorSequenceID desc",
+          PageNumber: this.page.pageNumber,
+          PageSize: this.page.pageSize,
+          Filters: `BuildID='${this.curBuildId}'`
+        };
+        floorQueryAndSign(floorParam, res => {
+          this.tableData = res.Content;
+          this.page.total = res.Total;
+          this.alreadyRelatedModel = res.Content.map(t => {
+            return t.ModelId
+          }).filter(t => t);
         });
-      } else {
-        //todo
-      }
-    },
-    // 修改楼层信息
-    editFloorData(floor) {
-      this.floorTitle = "编辑楼层信息";
-      this.curFloorId = floor.FloorID;
-      this.$refs.addFloorDialog.showDialog(floor);
-    },
-    // 修改楼层贯通关系
-    changeConnection(row) {
-      this.$refs.addConnectivity.showDialog();
-      this.$refs.addConnectivity.floor = row;
+      },
+      // 创建楼层成功-修改关系成功
+      refresh() {
+        this.getFloorTableData();
+      },
+      // 确认删除(删除建筑-楼层公用)
+      confirmDel() {
+        if (this.delText == "楼层") {
+          let delParam = [{FloorID: this.curFloorId}];
+          manageDeleteFloor(delParam, res => {
+            this.$message.success("删除成功");
+            this.delDialogVis = false;
+            this.getFloorTableData();
+          });
+        } else {
+          //todo
+        }
+      },
+      // 修改楼层信息
+      editFloorData(floor) {
+        this.floorTitle = "编辑楼层信息";
+        this.curFloorId = floor.FloorID;
+        this.$refs.addFloorDialog.showDialog(floor);
+      },
+      // 修改楼层贯通关系
+      changeConnection(row) {
+        this.$refs.addConnectivity.showDialog();
+        this.$refs.addConnectivity.floor = row;
+      },
+      // 查看平面图
+      checkDrawImg(row, index) {
+        if (3 == index) {
+          this.$refs.checkGraphy.showDialog(row);
+          this.modelId = "";
+        } else {
+          this.modelId = row.ModelId;
+          let pa = {modelId: this.modelId, FloorID: row.FloorID, BuildID: row.BuildID};
+          this.$router.push({name: "repetitionGraphy", query: pa});
+        }
+      },
+      //  查询建筑信息
+      handleBuildQuery() {
+        let param = {
+          projectId: this.projectId,
+          Orders: "BuildLocalName asc",
+          PageNumber: 1,
+          PageSize: 500
+        };
+        objectQueryBuild(param, res => {
+
+          this.currentBuildList = res.Content
+        });
+      },
+
     },
-    // 查看平面图
-    checkDrawImg(row, index) {
-      if (3 == index) {
-        this.$refs.checkGraphy.showDialog(row)
-        this.modelId = "";
-      } else {
-        this.modelId = row.ModelId;
-        let pa = { modelId: this.modelId, FloorID: row.FloorID, BuildID: row.BuildID }
-        this.$router.push({ name: "repetitionGraphy", query: pa });
+    watch: {
+      projectId() {
+        this.init();
       }
     }
-  },
-  watch: {
-    projectId() {
-      this.init();
-    }
-  }
-};
+  };
 </script>
 <style lang="less" scoped>
-#bd-fl-manage {
-  overflow: hidden;
-  height: 100%;
-  position: relative;
-
-  .el-row {
+  #bd-fl-manage {
+    overflow: hidden;
     height: 100%;
+    position: relative;
 
-    .el-col-4 {
-      width: 17%;
-    }
-    .el-col-20 {
-      width: 82%;
-    }
-    & > div {
-      float: left;
+    .el-row {
       height: 100%;
-      overflow: hidden;
-      background-color: #fff;
-      box-sizing: border-box;
-      border: 1px solid #dfe6ec;
 
-      .action-box {
-        padding: 10px;
+      .el-col-4 {
+        width: 17%;
+      }
 
-        .el-button--small {
-          padding: 10px 11px;
-        }
+      .el-col-20 {
+        width: 82%;
       }
-    }
 
-    .l-list {
-      width: 17%;
-      overflow-y: auto;
+      & > div {
+        float: left;
+        height: 100%;
+        overflow: hidden;
+        background-color: #fff;
+        box-sizing: border-box;
+        border: 1px solid #dfe6ec;
+
+        .action-box {
+          padding: 10px;
 
-      h4 {
-        padding-left: 10px;
-        border-top: 1px solid #d9d9d9;
-        border-bottom: 1px solid #d9d9d9;
-        background: #d9d9d9;
-        color: #2b2b2b;
-        line-height: 44px;
+          .el-button--small {
+            padding: 10px 11px;
+          }
+        }
       }
 
-      .build-list {
-        line-height: 48px;
+      .l-list {
+        width: 17%;
+        overflow-y: auto;
+
+        h4 {
+          padding-left: 10px;
+          border-top: 1px solid #d9d9d9;
+          border-bottom: 1px solid #d9d9d9;
+          background: #d9d9d9;
+          color: #2b2b2b;
+          line-height: 44px;
+        }
+
+        .build-list {
+          line-height: 48px;
 
-        .floor-item {
-          white-space: nowrap;
-          overflow: hidden;
-          text-overflow: ellipsis;
+          .floor-item {
+            white-space: nowrap;
+            overflow: hidden;
+            text-overflow: ellipsis;
 
-          span {
-            margin-left: 10px;
+            span {
+              margin-left: 10px;
+            }
           }
-        }
 
-        .floor-item.active,
-        .floor-item:hover {
-          background-color: #f5f7fa;
-          color: #000;
+          .floor-item.active,
+          .floor-item:hover {
+            background-color: #f5f7fa;
+            color: #000;
+          }
         }
       }
-    }
 
-    .r-table {
-      width: 82%;
-      margin-left: 1%;
+      .r-table {
+        width: 82%;
+        margin-left: 1%;
 
-      .table-box {
-        height: calc(100% - 54px);
-        margin-bottom: 8px;
+        .table-box {
+          height: calc(100% - 54px);
+          margin-bottom: 8px;
 
-        .iconfont {
-          vertical-align: middle;
-        }
+          .iconfont {
+            vertical-align: middle;
+          }
 
-        /deep/ .el-badge__content.is-fixed {
-          transform: translateY(-6%) translateX(-100%);
-        }
+          /deep/ .el-badge__content.is-fixed {
+            transform: translateY(-6%) translateX(-100%);
+          }
 
-        p {
-          cursor: pointer;
+          p {
+            cursor: pointer;
+          }
         }
       }
     }
   }
-}
 </style>