Browse Source

update owner

GuoYuFu123 6 năm trước cách đây
mục cha
commit
7cd29ba24f

+ 219 - 0
src/components/market/owner/build.vue

@@ -0,0 +1,219 @@
+<template>
+    <section>
+        <div v-if="buildType == 'create'">
+            <el-form ref="copyData" :model="copyData" label-width="120px" style="border: 1px solid #ccc;padding:3px;padding-top:30px;">
+                <el-form-item label="本地名称"
+                :rules="{ required: true, message: '本地名称不能为空', trigger: 'blur' }">
+                    <el-input v-model="copyData.infos.BuildLocalName"></el-input>
+                </el-form-item>
+                <el-form-item label="本地编码"
+                :rules="{ required: true, message: '本地编码不能为空', trigger: 'blur' }">
+                    <el-input v-model="copyData.infos.BuildLocalID"></el-input>
+                </el-form-item>
+                <el-form-item label="建筑年代">
+                    <el-date-picker
+                    style="width:100%;"
+                    v-model="copyData.infos.BuildAge"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="选择日期">
+                    </el-date-picker>
+                </el-form-item>
+                <el-form-item label="建筑功能类型">
+                    <el-cascader
+                    :options="arr"
+                    v-model="copyData.infos.BuildFuncType"
+                    :props="props"
+                    ></el-cascader>
+                </el-form-item>
+                <el-form-item>
+                    <el-button type="primary" @click="onSubmit">立即创建</el-button>
+                    <el-button @click="noCreate">取消</el-button>
+                </el-form-item>
+            </el-form>
+        </div>
+        <div class="build-border" v-else>
+            <!-- 建筑基本信息 -->
+            <div v-show="!messBuild">
+                <form-input :value="copyData.infos.BuildLocalName" @change="changed" :keys="'BuildLocalName'" :label="'本地名称'" :isRule="false"></form-input>
+                <form-input :value="copyData.infos.BuildLocalID" @change="changed" :keys="'BuildLocalID'" :label="'本地编码'" :isRule="false"></form-input>
+                <form-input type="year" :value="copyData.infos.BuildAge" @change="changed" :keys="'BuildAge'" :label="'建筑年代'" :isRule="false"></form-input>
+                <form-input type="cascader" :typeArr="arr" :value="copyData.infos.BuildFuncType" @change="changed" :keys="'BuildFuncType'" :label="'建筑功能类型'" :isRule="false"></form-input>
+            </div>
+            <!-- 建筑详情 -->
+            <div v-show="messBuild">
+                <!-- 一级标签 -->
+                <div v-for="item in buildMess" v-if="item.firstTag != '能耗信息' && item.firstTag != '建筑文档'">
+                    <h3 class="first-tag">{{item.firstTag}}</h3>
+                    <div v-for="i in item.details">
+                        <h4 class="second-tag">{{i.secondTag}}</h4>
+                        <template v-for="detail in i.details">
+                            <form-input v-if="isShow(detail.inputMode)" :width="170" :type="detail.inputMode" :typeArr="detail.dataSource" :value="copyData.infos[detail.infoPointCode]" :unit="detail.unit" @change="changed" :keys="detail.infoPointCode" :label="detail.infoPointName" :isRule="false"></form-input>
+                        </template>
+                    </div>
+                </div>
+            </div>
+            <el-button type="text" @click="lookDetails" class="font-right">{{!messBuild ? '维护详细信息' : '收起'}}</el-button>
+        </div>
+    </section>    
+</template>
+
+<script>
+import formInput from "@/components/market/owner/formInput";
+
+export default {
+  name: "buildTemplete",
+  props: {
+    buildType: String, //create创建
+    funcTypeArr: Array, //建筑下拉的options
+    id: String, //项目id,当其为空时为create
+    buildMess: Array, //建筑详情的数组label
+    buildData: Object, //默认数据
+  },
+  components: {
+    formInput
+  },
+  data() {
+    return {
+      year: "",
+      arr: [],
+      copyData: {
+        infos: {
+          BuildID: "",
+          BuildLocalID: "",
+          BuildLocalName: "",
+          BuildName: "",
+          BuildAge: "",
+          BuildFuncType: []
+        }
+      },
+      messBuild: false, // 是否显示详情
+      props: {
+        label: "name",
+        value: "code",
+        children: "content"
+      } //修改默认数据格式
+    };
+  },
+  created() {
+    this.arr = this.toMyNeed(this.funcTypeArr);
+    this.copyData = Object.assign({},this.buildData)
+  },
+  methods: {
+    //提交
+    onSubmit() {
+      if(this.copyData.infos.BuildLocalID && this.copyData.infos.BuildLocalName){
+        this.copyData.projectId = this.id
+        let params = JSON.parse(JSON.stringify(this.copyData))
+        let func = this.copyData.infos.BuildFuncType
+        if(func instanceof Array){
+          params.infos.BuildFuncType = func[func.length -1]
+        }
+        this.postJson("/server/business-os/proprietor/project/building/create",params,res=>{
+          this.copyData.id = res.id
+          this.buildData = Object.assign({},params)
+          this.buildType ="change"
+          this.$emit("created",params)
+        })
+      }else{
+        this.$message.error("请确定输入本地编码和本地名称")
+      }
+    },
+
+    //取消
+    noCreate(){
+      this.$emit("del")
+    },
+
+    //处理key值转换关系
+    toMyNeed(arr) {
+      return arr.map(res => {
+        let param = {};
+        if (res.content && res.content.length != 0) {
+          param.content = this.toMyNeed(res.content);
+        }
+        param.name = res.name;
+        param.code = res.code;
+        return param;
+      });
+    },
+
+    //判断是否是显示类型
+    isShow(code) {
+      if (
+        code == "L" ||
+        code == "L1" ||
+        code == "L2" ||
+        code == "M" ||
+        code == "N1" ||
+        code == "N2" ||
+        code == "K" ||
+        code == "F2" ||
+        code == "G1" ||
+        code == "G2" ||
+        code == "G3" ||
+        code == "G4" ||
+        code == "H" ||
+        code == "I" ||
+        code == "J" ||
+        code == "K" ||
+        code == "E2" 
+      ) {
+          return false
+      }else{
+          return true
+      }
+    },
+
+    //formInput的修改事件
+    changed(val, key) {
+      this.copyData.infos[key] = val;
+      this.postJson("/server/business-os/proprietor/project/building/update",this.copyData,res=>{
+      })
+    },
+
+    //修改详情中的数值
+    changDetail(val, key) {
+      this.copyData.infos[key] = val;
+    },
+
+    //查看建筑详情,修改
+    lookDetails(item) {
+      this.messBuild = !this.messBuild;
+    }
+  },
+  watch:{
+    buildType:{
+      deep: true,
+      handler(old,newVal){
+        this.copyData = this.buildData
+      }
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.build-border {
+  border: 1px solid #ccc;
+  margin-top: 10px;
+  padding-top: 10px;
+  overflow: hidden;
+  .font-right {
+    float: right;
+    margin-right: 30px;
+  }
+}
+.first-tag{
+  line-height: 40px;
+  font-weight: 600;
+  margin-left: 5px;
+}
+.second-tag{
+  line-height: 40px;
+  font-weight: 500;
+  margin-left: 20px;
+  color: #6BCAE2;
+}
+</style>
+

+ 279 - 0
src/components/market/owner/contractAboutInfo.vue

@@ -0,0 +1,279 @@
+/**
+@author:fugy
+@date:2018.8.15
+@params:props
+ */
+<template>
+    <div>
+        <!--未过期的合同显示列表-->
+        <ul class="cont-box">
+            <p class="no-cont-tip" v-show="contractList.length === 0">暂无合同信息</p>
+            <li class="cont-item" v-for='(item, index) in contractList' :key='item.index'>
+                <el-row>
+                    <el-col :span='4' style="text-align:right;">合同期限</el-col>    
+                    <el-col :span='19' :offset='1'>
+                        <span v-if = "item.onlyRead">{{item.startDate}}&nbsp;&nbsp;&nbsp;至&nbsp;&nbsp;&nbsp;{{item.endDate}}</span>
+                        <el-date-picker 
+                            v-else
+                            v-model='item.dateRange'                           
+                            size="small"
+                            type="daterange"
+                            range-separator="至"
+                            start-placeholder="开始日期"
+                            end-placeholder="结束日期"
+                            value-format='yyyy-MM-dd'>
+                        </el-date-picker>
+                        
+                    </el-col>
+                </el-row>
+                <el-row>
+                    <el-col :span='4' style="text-align:right;line-height:40px;">合同电子文档</el-col>    
+                    <el-col :span='19' :offset='1' style="padding:5px 0;" v-if="item.onlyRead">
+                        <p v-if="item.doc" style="color:#409EFF;cursor: pointer;" @click="downDoc(item.doc)">{{item.doc}}</p>
+                        <p v-else>暂无-合同电子文档</p>
+                    </el-col>
+                    <el-col :span='19' :offset='1' style="padding:5px 0;" v-else>
+                        <v-upload-img 
+                        @getKey='getFileKey'
+                        @delete-img = "deleteFile"
+                        type="file"
+                        :index='index'
+                        :identify='item.doc'
+                        :disabled='true'
+                        ></v-upload-img>
+                    </el-col>                    
+                </el-row>
+                <el-row>
+                    <el-col :span='4' style="text-align:right;">合同扫描件</el-col>   
+                    <el-col :span='19' :offset='1' style="padding:5px 0;" v-if="item.onlyRead">
+                        <el-row>
+                            <el-col :span="6" v-for="(ele, idx) in item.copies" :key="idx">
+                                <v-upload-img 
+                                :identify="ele"
+                                :disabled = "true"
+                                ></v-upload-img>
+                            </el-col>
+                        </el-row>                            
+                    </el-col> 
+                    <el-col :span='19' :offset='1' style="padding:5px 0;" v-else>
+                        <el-row>
+                            <el-col :span="6" v-for="(ele, idx) in item.copies" :key="idx">
+                                <v-upload-img 
+                                @getKey="getImgKey" 
+                                @delete-img="deleteImg"
+                                :index = 'index'
+                                :imgIndex = 'idx'
+                                :identify="ele"                                >
+                                </v-upload-img>
+                            </el-col>
+                        </el-row>                        
+                    </el-col>
+                </el-row> 
+                <!--查看状态-->
+                <el-row v-if="item.onlyRead == true && item.contStatus == false">
+                    <el-col :span="2" :offset="10">
+                        <el-button type="primary" size="small" @click="updatedContractStatus(index)">修改</el-button>
+                    </el-col>  
+                    <el-col :span="2" :offset="1">
+                        <el-button type="danger" size="small" @click="deleteContract(item, index)">删除</el-button>
+                    </el-col>                 
+                </el-row>   
+                <!--修改状态-->
+                <el-row v-if="item.onlyRead == false && item.contStatus == false">
+                    <el-col :span="2" :offset="10">
+                        <el-button type="primary" size="small" @click="updatedContract(item)">保存</el-button>
+                    </el-col>  
+                    <el-col :span="2" :offset="1">
+                        <el-button type="warning" size="small" @click="updatedContractStatus(index)">取消</el-button>
+                    </el-col>                 
+                </el-row>  
+                <!--新建状态-->
+                <el-row v-if="item.onlyRead == false && item.contStatus == true">
+                    <el-col :span="2" :offset="10">
+                        <el-button type="primary" size="small" @click="newContract(item)">保存</el-button>
+                    </el-col>  
+                    <el-col :span="2" :offset="1">
+                        <el-button type="danger" size="small" @click="deleteContract(item, index)">取消</el-button>
+                    </el-col>                 
+                </el-row>  
+            </li>
+        </ul>
+        <!--新建合同按钮-->
+        <p class="add-cont">
+            <el-button type="primary" size="mini" icon="el-icon-plus" @click="addContract">新建合同</el-button>
+        </p>
+        <!--更多历史合同-->
+        <div>
+            <p class="history-btn">
+                <el-button type="text" size="small" @click="changeFlag">{{moreContFlag ? '隐藏历史合同' : '查看更多历史合同'}}</el-button>
+            </p>            
+            <ul class="cont-box" v-show="moreContFlag">
+                <p class="no-cont-tip" v-show="hisContractList.length === 0">暂无合同信息</p>
+                <li class="cont-item" v-for='(item, index) in hisContractList' :key='item.index'>
+                    <el-row>
+                        <el-col :span='4' style="text-align:right;">合同期限</el-col>    
+                        <el-col :span='19' :offset='1'>
+                            <span>{{item.startDate}}&nbsp;&nbsp;&nbsp;至&nbsp;&nbsp;&nbsp;{{item.endDate}}</span>
+                        </el-col>
+                    </el-row>
+                    <el-row>
+                        <el-col :span='4' style="text-align:right;line-height:40px;">合同电子文档</el-col>    
+                        <el-col :span='19' :offset='1' style="padding:5px 0;">
+                            <v-upload-img
+                            v-if="item.doc"
+                            :identify='item.doc'
+                            :disabled='false'
+                            ></v-upload-img>
+                            <p v-if="!item.doc">暂无-合同电子文档</p>
+                        </el-col>
+                    </el-row>
+                    <el-row>  
+                        <el-col :span='4' style="text-align:right;">合同扫描件</el-col>    
+                        <el-col :span='19' :offset='1' style="padding:5px 0;">
+                            <el-row>
+                                <el-col v-if="item.copies.length" :span="6" v-for="(ele, idx) in item.copies" :key="idx">
+                                    <v-upload-img 
+                                    :disabled="true"
+                                    :identify="ele"
+                                    ></v-upload-img>
+                                </el-col>
+                                <el-col v-else>
+                                    暂无
+                                </el-col>
+                            </el-row>                            
+                        </el-col>
+                    </el-row>                  
+                </li>
+            </ul>
+        </div>
+    </div>
+</template>
+
+<script>
+import store from '@/store'
+import vUploadImg from './uploadImg'
+export default {
+    name: "contractAboutInfo",
+    data() {
+        return {
+            moreContFlag: false,
+        }
+    },
+    props: ["contractList", "productId", "hisContractList"],
+    components: {
+        vUploadImg
+    },  
+    methods: {
+        downDoc(doc){
+            window.open(store.getters.getBaseUrl + store.getters.getFileGetUrl + '&key=' + doc)
+        },
+        //修改合同只读和可写状态
+        updatedContractStatus( index) {
+            this.$emit("updated-contract-status", index);
+        },
+        //修改合同
+        updatedContract(item) {
+            this.$confirm('您正在修改合同, 是否继续?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                item.startDate = item.dateRange[0];
+                item.endDate = item.dateRange[1];
+                this.$emit("updated-contract",item);
+            }).catch(() => {
+                this.$message({
+                    type: 'info',
+                    message: '已取消修改'
+                });          
+            });
+            
+        },
+        //删除合同
+        deleteContract(item, index) {
+            this.$confirm('您正在删除合同, 是否继续?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                this.$emit("delete-contract", item, index);
+            }).catch(() => {
+                this.$message({
+                    type: 'info',
+                    message: '已取消删除'
+                });          
+            });
+            
+        },
+        //新建合同btn事件
+        addContract() {
+            this.$emit("add-contract",this.productId);
+        },
+        //新建合同事件
+        newContract(item) {
+            item.startDate = item.dateRange[0];
+            item.endDate = item.dateRange[1];
+            if(item.endDate && item.endDate) {
+                this.$emit("new-contract",item);
+            } else {
+                this.$message({
+                    type: 'warning',
+                    message: '请填写合同!!!'
+                });    
+            }
+            
+        },
+        //切换显隐合同的状态
+        changeFlag() {
+            this.moreContFlag = !this.moreContFlag;
+            if(this.moreContFlag){
+                this.$emit("his-contract");
+            }
+        },
+        //获取imgKey
+        getImgKey(imgKey,index,imgIndex){
+            this.contractList[index].copies[imgIndex] = imgKey;
+            this.$emit("add-blank-copy", index);
+        },
+        //删除图片
+        deleteImg(index, imgIndex) {
+            this.$emit("delete-img-to-updated", index, imgIndex)
+        },
+        //获取上传文件fileKey
+        getFileKey(fileKey, index) {
+            this.contractList[index].doc = fileKey;
+        },
+        //删除文件
+        deleteFile(index){      
+            console.log(index,'删除index')      
+            this.$emit("delete-file-to-updated", index);
+        }
+    },
+    created() {
+
+    },
+    mounted() {
+        
+    }
+
+}
+</script>
+
+<style lang="scss" scoped>
+.cont-box {
+  .cont-item {
+    border: 1px solid #e6e6e6;
+    margin-bottom: 10px;
+    padding: 10px;
+  }
+}
+.add-cont {
+  text-align: center;
+}
+.history-btn {
+  text-align: right;
+}
+.no-cont-tip {
+}
+</style>
+

+ 361 - 0
src/components/market/owner/contractDialog.vue

@@ -0,0 +1,361 @@
+<template>
+  <el-dialog title="项目及建筑信息管理" :visible.sync="mapShow" width="45%">
+    <!-- <my-map style="margin-bottom:20px;"></my-map> -->
+    <div v-if="!perjId">
+      <el-form ref="perj" :model="perj" label-width="150px">
+        <el-form-item
+          label="项目本地名称:"
+          :rules="{ required: true, message: '项目名称不能为空', trigger: 'blur' }"
+        >
+          <el-input v-model="perj.infos.ProjLocalName"></el-input>
+        </el-form-item>
+        <div>
+          <b-map type="create" @getPoint="pointChange"></b-map>
+        </div>
+        <el-form-item label="省市区域:">
+          <span>{{Provinces | mess}}</span>
+        </el-form-item>
+        <el-form-item label="气候区域:">
+          <span>{{ClimateZone | mess}}</span>
+        </el-form-item>
+        <el-form-item label="城市发展水平:">
+          <span>{{UrbanDevpLev | mess}}</span>
+        </el-form-item>
+        <el-form-item label="海拔:">
+          <span>{{perj.infos.Altitude | mess}}</span>
+        </el-form-item>
+        <el-form-item label="纬度:">
+          <span>{{perj.infos.Latitude | mess}}</span>
+        </el-form-item>
+        <el-form-item label="经度:">
+          <span>{{perj.infos.Longitude | mess}}</span>
+        </el-form-item>
+      </el-form>
+      <div class="dialog_border"></div>
+      <div v-if="isCreate">
+        <h3 class="dialog_height">建筑信息</h3>
+        <template v-for="item in buildArr">
+          <build
+            :buildType="buildCreate(item)"
+            :buildData="item"
+            :id="param.perjId"
+            :buildMess="buildMess"
+            :funcTypeArr="funcTypeArr"
+          ></build>
+        </template>
+        <el-button type="text" @click="addBuild" class="create-build">添加建筑</el-button>
+      </div>
+      <span slot="footer" class="dialog-footer" v-if="!isCreate">
+        <el-button @click="mapShow = false">取 消</el-button>
+        <el-button type="primary" @click="success">{{isCreate ? "确 定" : "确认添加项目"}}</el-button>
+      </span>
+    </div>
+    <div v-else>
+      <el-form ref="perj" :model="perj" label-width="150px">
+        <form-input
+          :value="perj.infos.ProjLocalName"
+          @change="perjChange"
+          :keys="'ProjLocalName'"
+          :label="'项目本地名称'"
+          :isRule="false"
+        ></form-input>
+        <div>
+          <b-map
+            type="change"
+            v-if="changeMap"
+            :code="perj.area_code"
+            :location="locations"
+            @getPoint="pointChange"
+          ></b-map>
+        </div>
+        <el-form-item label="省市区域:">
+          <span>{{Provinces | mess}}</span>
+        </el-form-item>
+        <el-form-item label="气候区域:">
+          <span>{{ClimateZone | mess}}</span>
+        </el-form-item>
+        <el-form-item label="城市发展水平:">
+          <span>{{UrbanDevpLev | mess}}</span>
+        </el-form-item>
+        <el-form-item label="海拔:">
+          <span>{{perj.infos.Altitude | mess}}</span>
+        </el-form-item>
+        <el-form-item label="纬度:">
+          <span>{{perj.infos.Latitude | mess}}</span>
+        </el-form-item>
+        <el-form-item label="经度:">
+          <span>{{perj.infos.Longitude | mess}}</span>
+        </el-form-item>
+      </el-form>
+      <project-view v-if="projShow" :label="projLabel" :value="perj"></project-view>
+      <div style="height:40px;">
+        <el-button style="float:right;" v-if="!projShow" @click="projShow = true" type="text">维护详细信息</el-button>
+        <el-button style="float:right;" v-if="projShow" @click="projShow = false" type="text">收起</el-button>
+      </div>
+      <div class="dialog_border"></div>
+      <h3 class="dialog_height">建筑信息</h3>
+      <template v-for="(item,index) in buildArr">
+        <build
+          :buildType="buildCreate(item)"
+          @del="del(index)"
+          @created="changeBuild(item)"
+          :id="param.perjId"
+          :buildData="item"
+          :buildMess="buildMess"
+          :funcTypeArr="funcTypeArr"
+        ></build>
+      </template>
+      <el-button type="text" @click="addBuild" class="create-build">添加建筑</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import formInput from "@/components/market/owner/formInput";
+import bMap from "@/components/market/owner/map";
+import build from "@/components/market/owner/build";
+import project from "./project"
+import projectView from "./project.vue"
+import tools from "@/utils/tools";
+
+export default {
+  components: {
+    formInput,
+    bMap,
+    build,
+    projectView
+  },
+  props: ["show", "param", "buildMess", "funcTypeArr"],
+  data() {
+    return {
+      mapShow: true,
+      perjId: false,
+      perj: {
+        area_code: "",
+        infos: {
+          ProjLocalName: "", //String,必填,项目本地名称
+          ClimateZone: "", //String,气候区域
+          UrbanDevpLev: "", //String,城市发展水平
+          Altitude: "", //海拔
+          Longitude: "", //经度
+          Latitude: "" //纬度
+        }
+      },
+      Provinces: "", //省市区
+      UrbanDevpLev: "", //城市发展水平
+      ClimateZone: "", //气候区域
+      buildArr: [
+        //项目下建筑的列表
+      ],
+      projShow: false,
+      locations: {
+        //默认经纬度
+      },
+      changeMap: false, //控制地图修改的显示
+      isCreate: false, //是否添加建筑
+      projLabel: []
+    };
+  },
+  created() {
+    if (this.param.perjId) {
+      this.perjId = true;
+    } else {
+      this.perjId = false;
+    }
+    this.mapShow = this.show;
+    this.perj.infos.ProjLocalName = this.param.projectName;
+    //如果perjId存在,查询详情
+    if (this.param.perjId) {
+      this.getPerjMess();
+      this.getBuildList();
+    }
+    this.getPorjLabel()
+  },
+  methods: {
+    //获取项目的信息点
+    getPorjLabel() {
+      //   this.getJson("/server/dataplatform/infocode/complex_query?projectId=Pj1101080001&type=project&combine=true&enrich=true",
+      //     {},
+      //     res => {
+      //       console.log(res, "res")
+      //     })
+      this.projLabel = tools.arrayCnt(project);
+    },
+    //地图获取到坐标code码
+    pointChange(code, location, Provinces, type) {
+      this.perj.area_code = code;
+      this.perj.infos.Longitude = location.lng;
+      this.perj.infos.Latitude = location.lat;
+      let param = {
+        area_code: code
+      };
+      this.Provinces = Provinces;
+      //获取地域信息等信息点
+      this.postJson("/server/business-os/area/query", param, res => {
+        this.perj.infos.ClimateZone = res.content.ClimateZone.code;
+        this.perj.infos.UrbanDevpLev = res.content.UrbanDevpLev.code;
+        this.perj.infos.Altitude = Number(res.content.Altitude) || null;
+        this.ClimateZone = res.content.ClimateZone.name;
+        this.UrbanDevpLev = res.content.UrbanDevpLev.name;
+        if (this.perj.infos.ProjID) {
+          this.perjChange(type, "baiduMap");
+        }
+      });
+    },
+
+    //项目本地名称被修改
+    perjChange(val, key) {
+      this.perj.id = this.perj.infos.ProjID;
+      let param = {}
+      if (key == "ProjLocalName") {
+        param.infos = {
+          [key]: val
+        }
+        param.id = this.perj.id
+      } else {
+        if (val == "deat") {
+          param = this.perj
+        } else {
+          return false
+        }
+      }
+      this.postJson(
+        "/server/business-os/proprietor/project/update",
+        param,
+        res => {
+          this.$message.success("修改成功");
+        }
+      )
+    },
+
+    //点击添加建筑
+    addBuild() {
+      let buildObj = {
+        projectId: this.param.perjId, //必填,项目id
+        infos: {
+          BuildLocalID: "", //建筑本地编码
+          BuildLocalName: "", //建筑本地名称
+          BuildAge: "", //建筑年代
+          BuildFuncType: "" //建筑功能类型
+        }
+      };
+      this.buildArr.push(buildObj);
+    },
+
+    //判断是否为添加建筑
+    buildCreate(item) {
+      if (item.id) {
+        return "change";
+      } else {
+        return "create";
+      }
+    },
+
+    //取消
+    del(index) {
+      this.buildArr.splice(index, 1);
+    },
+
+    changeBuild() {
+      this.getBuildList();
+    },
+
+    //点击创建建筑时触发
+    success() {
+      let param = {};
+      param.proprietorId = this.param.proprietorId;
+      param.area_code = this.perj.area_code;
+      param.infos = this.perj.infos;
+      if (this.perj.area_code && this.perj.infos.ProjLocalName) {
+        if (this.isCreate) {
+          this.isCreate = true;
+        } else {
+          if (param.BuildFuncType && param.BuildFuncType.length > 1) {
+            param.BuildFuncType =
+              param.BuildFuncType[param.BuildFuncType.length - 1];
+          }
+          this.postJson(
+            "/server/business-os/proprietor/project/create",
+            param,
+            res => {
+              this.isCreate = true;
+              this.param.perjId = res.id;
+              this.perjId = res.id;
+              this.getPerjMess();
+              this.getBuildList();
+            }
+          );
+        }
+      } else {
+        this.$message.error("请确定项目名与项目地址");
+      }
+    },
+
+    //查询项目详情
+    getPerjMess() {
+      let params = {
+        id: this.param.perjId
+      };
+      this.postJson(
+        "/server/business-os/proprietor/project/query",
+        params,
+        res => {
+          this.perj.infos = res.content.infos;
+          this.perj.area_code = res.content.infos.UrbanZone;
+          this.locations = {
+            lng: res.content.infos.Longitude,
+            lat: res.content.infos.Latitude
+          };
+          this.changeMap = true;
+        }
+      );
+    },
+
+    //获取项目下建筑列表
+    getBuildList() {
+      let param = {
+        projectId: this.param.perjId //必填,项目id
+      };
+      this.postJson(
+        "/server/business-os/proprietor/project/building/query",
+        param,
+        res => {
+          this.buildArr = res.content;
+        }
+      );
+    }
+  },
+  watch: {
+    mapShow: {
+      deep: true,
+      handler(val, oldVal) {
+        this.$emit("close");
+        this.mapShow = true;
+      }
+    }
+  },
+  //过滤器
+  filters: {
+    //简单处理数组
+    mess(val) {
+      return val || "请在地图中选择项目地址";
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.dialog_height {
+  line-height: 100px;
+  font-size: 32px;
+  text-align: center;
+}
+.dialog-footer {
+  float: right;
+}
+.create-build {
+  display: block;
+  margin: auto;
+}
+</style>
+

+ 319 - 0
src/components/market/owner/formInput.vue

@@ -0,0 +1,319 @@
+<!--
+A1	手工填写-单个-数字-无单位
+A2	手工填写-单个-数字-有单位
+A3	手工填写-多个-数字-无单位
+A4	手工填写-多个-数字-有单位
+A5	手工填写-单个-数字范围-无单位
+A6	手工填写-单个-数字范围-有单位
+A7	手工填写-多个-数字范围-无单位
+A8	手工填写-多个-数字范围-有单位
+B1	手工填写-单个-文本
+B2	手工填写-多个-文本
+C1	手工填写-单个-日期时间值
+C2	手工填写-单个-日期时间段
+C3	手工填写-多个-日期时间值
+C4	手工填写-多个-日期时间段
+C5	手工填写-单个-日期值
+C6	手工填写-单个-日期段
+C7	手工填写-多个-日期值
+C8	手工填写-多个-日期段
+C9	手工填写-单个-时间值
+C10	手工填写-单个-时间段
+C11	手工填写-多个-时间值
+C12	手工填写-多个-时间段
+D1	字典选择-单个-单选
+D2	字典选择-单个-多选
+D3	字典选择-多个-单选
+D4	字典选择-多个-多选
+E1	字典布尔选择-单个
+E2	字典布尔选择-多个
+F1	上传-单个文件 
+-->
+
+<template>
+  <el-form
+    :label-position="'right'"
+    :labelWidth="width + 'px'"
+    :model="formLabelAlign"
+    ref="form"
+    @submit.native.prevent
+  >
+    <el-form-item :label="label" :rules="isRule ? { required: true, message: '不能为空'} : {}">
+      <!-- 普通输入类型 -->
+      <el-input
+        v-if="!isShow && (type == 'default' || type == 'B1')"
+        v-model="formLabelAlign.name"
+        style="width: 9rem;"
+        @change="onSubmit"
+        @keyup.enter.native="onSubmit"
+      >
+        <template slot="append" v-if="unit">{{unit}}</template>
+      </el-input>
+      <el-input
+        type="number"
+        v-if="!isShow && (type == 'A1' || type == 'A2')"
+        v-model="formLabelAlign.name"
+        style="width: 9rem;"
+        @change="onSubmit"
+        @keyup.enter.native="onSubmit"
+      >
+        <template slot="append" v-if="unit">{{unit}}</template>
+      </el-input>
+      <!-- date类型 -->
+      <el-date-picker
+        v-if="!isShow && (type == 'year' || type == 'C5')"
+        v-model="formLabelAlign.name"
+        type="date"
+        value-format="yyyy-MM-dd"
+        @change="onSubmit"
+        :clearable="false"
+        placeholder="选择日期"
+      ></el-date-picker>
+      <!-- 级联选择 -->
+      <el-cascader
+        v-if="!isShow && (type == 'cascader' || type == 'D1')"
+        :options="typeArr"
+        v-model="formLabelAlign.name"
+        @change="onSubmit"
+        :props="props"
+      ></el-cascader>
+      <!-- 日期到分 -->
+      <el-date-picker
+        v-if="!isShow && type == 'C1'"
+        v-model="formLabelAlign.name"
+        type="datetime"
+        value-format="yyyy-MM-dd HH:MM"
+        @change="onSubmit"
+        :clearable="false"
+        placeholder="选择日期"
+      ></el-date-picker>
+      <!-- 输入文本框 -->
+      <el-input
+        v-if="!isShow && type == 'B2'"
+        type="textarea"
+        :rows="2"
+        @change="onSubmit"
+        @keyup.enter.native="onSubmit"
+        placeholder="请输入内容"
+        v-model="formLabelAlign.name"
+      ></el-input>
+      <!-- 日期 -->
+      <el-date-picker
+        v-if="!isShow && type == 'C6'"
+        v-model="formLabelAlign.name"
+        type="daterange"
+        range-separator="至"
+        start-placeholder="开始日期"
+        end-placeholder="结束日期"
+        value-format="yyyy-MM-dd"
+        @change="onSubmit"
+        :clearable="false"
+        placeholder="选择日期"
+      ></el-date-picker>
+      <!-- 点击确定 -->
+      <i
+        v-if="!isShow  && (type == 'default' || type == 'B1')"
+        class="el-input__icon el-icon-check hover"
+        @click="onSubmit"
+      ></i>
+      <!-- 显示基本内容 -->
+      <span v-if="isShow" @click="changeItem" class="hover">
+        {{ filterArr(formLabelAlign.name) }} {{unit}}
+        <i class="el-icon-edit" v-if="type != 'X'"></i>
+      </span>
+      <slot name="mess"></slot>
+    </el-form-item>
+  </el-form>
+</template>
+
+<script>
+export default {
+  name: "ownerInput",
+  props: {
+    type: {
+      type: String,
+      default: "default"
+    }, //类型
+    value: [String, Array, Number], //value值
+    label: String, //label值,从父级传入
+    isRule: Boolean, //是否需要规则
+    keys: String, //
+    typeArr: [Array, String], //当其为级联或者下拉时传入
+    unit: {
+      //单位
+      type: String,
+      default: ""
+    },
+    width: {
+      type: Number,
+      default: 150
+    }
+  },
+
+  data() {
+    return {
+      formLabelAlign: {
+        name: ""
+      },
+      key: "",
+      isShow: true,
+      props: {
+        label: "name",
+        value: "code",
+        children: "content"
+      } //修改默认数据格式
+    };
+  },
+
+  methods: {
+    //点击确定或者url
+    onSubmit() {
+      if (this.formLabelAlign.name == "" || this.formLabelAlign.name == []) {
+        this.$message.error("请确定值不为空");
+      } else {
+        this.isShow = true;
+        if (this.type == 'cascader' || this.type == 'D1') {
+          let data = this.formLabelAlign.name
+          this.$emit("change", data[data.length - 1], this.keys);
+        } else {
+          this.$emit("change", this.formLabelAlign.name, this.keys);
+        }
+      }
+    },
+
+    //点击文案出现输入
+    changeItem() {
+      if (this.type == "X") {
+        this.$message('该信息点不支持编辑')
+        return;
+      } else {
+        this.isShow = false;
+      }
+    },
+
+    //对数组中的空数组去除
+    toMyNeed(arr) {
+      return arr.map(res => {
+        let param = {};
+        if (res.content && res.content.length != 0) {
+          param.content = this.toMyNeed(res.content);
+        }
+        param.name = res.name;
+        param.code = res.code;
+        return param;
+      });
+    },
+
+    //获取级联选中的值
+    getCascaderObj(val, opt) {
+      let data = this.getMyVal(val, opt, 'name')
+      data.length > 1 ? data = data.join('/') : data = data.join('')
+      return data
+    },
+
+    getMyVal(val, content, code) {
+      let data = []
+      if (content && content.length) {
+        for (let i = 0; i < content.length; i++) {
+          if (content[i].code == val) {
+            data.push(content[i][code])
+            break
+          } else {
+            if (content[i].content && content.length) {
+              for (let j = 0; j < content[i].content.length; j++) {
+                if (content[i].content[j].code == val) {
+                  data.push(content[i][code])
+                  data.push(content[i].content[j][code])
+                  break
+                } else {
+                  if (content[i].content[j].content && content[i].content[j].content.length) {
+                    for (let k = 0; k < content[i].content[j].content.length; k++) {
+                      if (content[i].content[j].content[k].code == val) {
+                        data.push(content[i][code])
+                        data.push(content[i].content[j][code])
+                        data.push(content[i].content[j].content[k][code])
+                        break
+                      } else {
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      if (!data.length) {
+        data = null
+      }
+      return data
+    },
+
+    getMap(val, opt) {
+      return opt.map(function (value, index, array) {
+        for (var itm of opt) {
+          if (itm.code == value.code) {
+            opt = itm.content;
+            return itm;
+          }
+        }
+        return null;
+      });
+    },
+
+    //数组过滤
+    filterArr(val) {
+      let value = ""; //最后输出的文案
+      let isNeedType = this.type == 'cascader' || this.type == 'D1'
+      if (this.type == 'C6') {
+        if (val instanceof Array) {
+          value = val[0] + '至' + val[1]
+        } else {
+          value = '--'
+        }
+      } else if (this.type == 'cascader' || this.type == 'D1') {
+        if (val && val.length) {
+          value = this.getCascaderObj(val[val.length - 1], this.typeArr, 'name') || "--";
+        }
+      } else {
+        value = val || "--";
+      }
+      return value;
+    }
+  },
+
+  created() {
+    if (typeof (this.typeArr) == Object) {
+      this.typeArr = this.toMyNeed(this.typeArr)
+    }
+    if (this.type == 'cascader' || this.type == 'D1') {
+      if (this.value == '' || this.value == undefined) {
+        this.formLabelAlign.name = []
+      } else {
+        this.formLabelAlign.name = this.getMyVal(this.value, this.typeArr, 'code');
+      }
+    } else {
+      this.formLabelAlign.name = this.value;
+    }
+    this.key = this.label;
+  },
+
+  watch: {
+    label() { }
+  }
+};
+</script>
+
+<style lang="scss">
+.hover:hover {
+  cursor: pointer;
+  color: #409eff;
+}
+input::-webkit-outer-spin-button,
+input::-webkit-inner-spin-button {
+  -webkit-appearance: none;
+}
+input[type="number"] {
+  -moz-appearance: textfield;
+}
+</style>

+ 245 - 0
src/components/market/owner/map.vue

@@ -0,0 +1,245 @@
+<template>
+    <!--地图容器-->
+    <section id="map">
+      <div id="XSDFXPage" class="XSDFXPage"></div>
+      <div id="search" ref="search" v-show="myType == 'create'">
+        <input type="text" id="searchPlace" v-model="search" placeholder="请输入地点">
+        <div id="searchlist" v-show="isListShow"></div>
+      </div>
+      <span class="icon-view" v-show="isChange || myType == 'change'">
+        <el-button class="background" type="text" @click="changeAdd">修改地址<i class="el-icon-edit"></i></el-button>
+      </span>
+    </section>
+</template>
+<script>
+import fetch from "@/utils/fetch.js";
+export default {
+  name: "",
+  props: {
+    type: {
+      type: String,
+      default: "create"
+    },
+    location: {
+      type: Object,
+      default: function() {
+        return {
+          lng: 116.4035,
+          lat: 39.915
+        };
+      }
+    },
+    code: {
+      type: String
+    }
+  },
+  data() {
+    return {
+      search: "",
+      myType: false,
+      isListShow: false, //列表是否显示
+      isChange: false
+    };
+  },
+  mounted() {
+    this.myType = this.type;
+    //如果纬度不存在重新获取
+    if (!this.location.lng) {
+      this.location.lng = 116.4035;
+      this.location.lat = 39.915;
+    }
+    this.createMap();
+  },
+  methods: {
+    //修改地址
+    changeAdd() {
+      this.myType = "create";
+      this.createMap();
+    },
+    //点击事件触发
+    getPoint(e, map) {
+      let allOverlay = map.getOverlays(),
+        _this = this;
+      if (allOverlay.length) {
+        map.clearOverlays();
+      }
+      let point = new BMap.Point(e.point.lng, e.point.lat);
+      this.addMarker(point, map);
+    },
+    //添加标记
+    addMarker(point, map) {
+      let _this = this;
+      var marker = new BMap.Marker(point);
+      map.addOverlay(marker);
+      this.isListShow = false;
+      this.postJson("/server/business-os/map", point, res => {
+        let code = res.content.result;
+        let Provinces =
+          code.addressComponent.province +
+          "-" +
+          code.addressComponent.city +
+          "-" +
+          code.addressComponent.district;
+        let mess;
+        if (this.type == "change" && this.myType == "create") {
+          mess = "deat";
+        } else {
+          mess = "";
+        }
+        if (
+          code.addressComponent.adcode == this.code ||
+          this.type == "create" ||
+          this.code == undefined ||
+          this.code == ""
+        ) {
+          _this.$emit(
+            "getPoint",
+            code.addressComponent.adcode,
+            code.location,
+            Provinces,
+            mess
+          );
+        } else {
+          map.clearOverlays();
+          this.$message.error("项目所在省市区域不可更改!");
+        }
+      });
+    },
+    createMap() {
+      // 百度地图API功能
+      // 创建Map实例
+      let _this = this;
+      var map = new BMap.Map("XSDFXPage", { enableMapClick: false });
+      var geolocation = new BMap.Geolocation();
+      // 创建地理编码实例
+      var myGeo = new BMap.Geocoder();
+      geolocation.getCurrentPosition(function(r) {
+        if (this.getStatus() == BMAP_STATUS_SUCCESS) {
+          var pt = r.point;
+          // 根据坐标得到地址描述
+          myGeo.getLocation(pt, function(result) {
+            if (result) {
+              var addComp = result.addressComponents;
+            }
+          });
+        }
+      });
+      // 初始化地图,设置中心点坐标和地图级别
+      map.centerAndZoom(
+        new BMap.Point(_this.location.lng, _this.location.lat),
+        11
+      );
+      // 添加地图类型控件
+      // 设置地图显示的城市 此项是必须设置的
+      map.setCurrentCity("北京");
+      // 开启鼠标滚轮缩放
+      map.enableScrollWheelZoom(true);
+      setTimeout(function() {
+        map.setZoom(18);
+      }, 4000);
+      /************************************************
+            添加工具条、比例尺控件
+            *************************************************/
+      map.addControl(new BMap.NavigationControl());
+      map.addControl(
+        new BMap.NavigationControl({
+          anchor: BMAP_ANCHOR_BOTTOM_RIGHT,
+          type: BMAP_NAVIGATION_CONTROL_SMALL
+        })
+      );
+      /************************************************
+            添加自定义控件类,放大ZoomControl
+            *************************************************/
+
+      if (_this.myType == "create") {
+        //添加事件监听click事件
+        map.addEventListener("click", function(e) {
+          _this.getPoint(e, map);
+        });
+
+        //添加检索触发
+        var ac = new BMap.Autocomplete({
+          //建立一个自动完成的对象
+          input: "searchPlace",
+          location: map
+        });
+
+        //创建搜索实例
+        var local = new BMap.LocalSearch(map, {
+          renderOptions: {
+            map: map,
+            panel: "searchlist"
+          }
+        });
+
+        ac.addEventListener("onconfirm", function(e) {
+          //鼠标点击下拉列表后的事件
+          var _value = e.item.value;
+          var addr =
+            _value.business +
+            _value.province +
+            _value.city +
+            _value.district +
+            _value.street +
+            _value.streetNumber;
+          searchPlace(addr);
+        });
+      } else {
+        this.addMarker(this.location, map);
+      }
+
+      //产生搜索
+      function searchPlace(value) {
+        _this.isListShow = true;
+        local.search(value);
+      }
+    }
+  }
+};
+</script>
+<style lang="scss">
+#map {
+  position: relative;
+  .XSDFXPage {
+    width: 100%;
+    height: 300px;
+    overflow: hidden;
+    margin: 0;
+    font-family: "微软雅黑";
+  }
+  #search {
+    position: absolute;
+    top: 5px;
+    right: 5px;
+    width: 30%;
+    #searchlist {
+      width: 100%;
+      max-height: 400px;
+      overflow-y: auto;
+      background-color: #fff;
+    }
+  }
+  .background {
+    background-color: #fff;
+    padding: 5px 5px;
+  }
+  input {
+    border: 1px solid #ccc;
+    padding-left: 5px;
+    width: 100%;
+    height: 30px;
+    border-radius: 3px;
+  }
+  .icon-view {
+    position: absolute;
+    top: 20px;
+    right: 20px;
+    z-index: 999;
+  }
+}
+.tangram-suggestion-main {
+  max-height: 400px;
+  overflow-y: auto;
+  z-index: 9999;
+}
+</style>

+ 247 - 0
src/components/market/owner/ownerDia.vue

@@ -0,0 +1,247 @@
+<template>
+    <el-dialog
+    :title="title"
+    :visible.sync="diaShow"
+    width="30%"
+    >
+    <!-- 创建 -->
+        <section v-if="Dtype == 'create'">
+            <el-form :model="ownerData" :rules="rules" ref="ownerData" label-width="120px" class="demo-ownerData">
+                <el-form-item label="企业全称" prop="proprietorName">
+                    <el-input v-model="ownerData.proprietorName"></el-input>
+                </el-form-item>
+                <el-form-item label="营业执照注册号" prop="registrationNum">
+                    <el-input v-model="ownerData.registrationNum"></el-input>
+                </el-form-item>
+                <el-form-item label="营业执照扫描件">
+                    <upload :isShow="false" @getKey="getKey" :identify="ownerData.license"></upload>
+                </el-form-item>
+                <el-form-item label="企业邮箱账号" prop="email">
+                    <el-input v-model="ownerData.email"></el-input>
+                    <p class="el-info">作为企业账户登录业主系统,同时用于接收上个云的各类通知。</p>
+                </el-form-item>
+                <div class="own-border"></div>
+                <el-form-item label="企业联系人" prop="contact">
+                    <el-input v-model="ownerData.contact"></el-input>
+                </el-form-item>
+                <el-form-item label="联系人手机" prop="phone">
+                    <el-input v-model="ownerData.phone"></el-input>
+                </el-form-item>
+                <div class="own-border"></div>
+                <el-form-item label="运维负责人" prop="managerName">
+                    <el-input v-model="ownerData.managerName"></el-input>
+                    <p class="el-info">上格云内部负责维护此客户的人员</p>
+                </el-form-item>
+            </el-form>
+        </section>
+        <!-- 修改 -->
+      <section v-else>
+            <div>
+              <el-select size="mini" style="width:260px;" v-model="emailValue" placeholder="请选择">
+                <el-option
+                  v-for="item in emailOptions"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value">
+                </el-option>
+              </el-select>
+              <el-button size="mini" @click="seedPsd">发送模板通知</el-button>
+            </div>
+            <form-input :value="ownerData.proprietorName" @change="changed" :keys="'proprietorName'" :label="'企业全称'" :isRule="true"></form-input>
+            <form-input :value="ownerData.registrationNum" @change="changed" :keys="'registrationNum'" :label="'营业执照注册号'" :isRule="false"></form-input>
+            <el-form :label-position="'right'" label-width="150px" :model="formLabelAlign" ref="form" @submit.native.prevent>
+                <el-form-item label="营业执照扫描件">
+                    <upload :isShow="false" @getKey="changeKey" :identify="ownerData.license"></upload>
+                </el-form-item>
+            </el-form>
+            <form-input :value="ownerData.email" @change="changed" :keys="'email'" :label="'企业邮箱账号'" :isRule="true">
+              <div slot="mess" class="el-info">上格云内部负责维护此客户的人员</div>
+            </form-input>
+            <el-form :label-position="'right'" label-width="150px" :model="formLabelAlign" ref="form" @submit.native.prevent>
+                <el-form-item label="企业登录密码">
+                  <el-button @click="reset">重置密码</el-button>
+                  <p class="el-info">新密码会发送到目标邮箱</p>
+                </el-form-item>
+            </el-form>
+            <form-input :value="ownerData.contact" @change="changed" :keys="'contact'" :label="'企业联系人'" :isRule="true">
+              <div slot="mess" class="el-info">上格云内部负责维护此客户的人员</div>
+            </form-input>
+            <form-input :value="ownerData.phone" @change="changed" :keys="'phone'" :label="'联系人手机'" :isRule="true"></form-input>
+            <form-input :value="ownerData.managerName" @change="changed" :keys="'managerName'" :label="'商务运维负责人'" :isRule="true"></form-input>
+      </section>
+      <span slot="footer" class="dialog-footer" v-if="Dtype == 'create'">
+          <el-button type="primary" @click="submitForm('ownerData')">立即创建</el-button>
+          <el-button @click="resetForm('ownerData')">重置</el-button>
+          <p><el-checkbox style="margin-right: 50px;" v-model="isEmail">同时发送短信及邮件通知主体账号已开通</el-checkbox></p>
+      </span>
+    </el-dialog>
+</template>
+
+<script>
+import formInput from "@/components/market/owner/formInput";
+import upload from "@/components/market/owner/uploadImg"
+export default {
+  props: ["ownerData", "show", "Dtype"],
+  components: {
+    formInput,
+    upload
+  },
+  data() {
+    return {
+      title: "",
+      diaShow: true,
+      formLabelAlign: {
+        name: ""
+      },
+      dataKeys: [],
+      capyData: {},
+      rules: {
+        proprietorName: [
+          { required: true, message: "请输入企业全称", trigger: "blur" },
+          { min: 3, max: 20, message: "长度在 3 到 20 个字符", trigger: "blur" }
+        ],
+        email: [
+          { required: true, message: "请输入邮箱地址", trigger: "blur" },
+          { type: "email", message: "请输入正确的邮箱地址", trigger: ["blur"] }
+        ],
+        contact: [
+          { required: true, message: "请输入企业联系人", trigger: "blur" },
+          { min: 2, max: 6, message: "长度在 3 到 6 个字符", trigger: "blur" }
+        ],
+        phone: [
+          { required: true, message: "请输入联系人手机", trigger: "blur" },
+          {
+            pattern: /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/,
+            message: "请输入正确的手机号",
+            trigger: ["blur"]
+          }
+        ]
+      },
+      emailOptions: [//Email的下拉
+        {
+          value: 'all',
+          label: '业主账号开通通知(短信邮件)'
+        }
+      ],
+      emailValue: 'all',//下拉选中的值
+      isEmail: false,//是否发送邮件
+    };
+  },
+  created() {
+    // this.capyData = Object.assign({},this.ownerData)
+    // console.log(this.capyData,'capyData')
+    this.diaShow = this.show;
+    this.dataKeys = Object.keys(this.ownerData);
+  },
+  methods: {
+    changed(val, key) {
+      this.ownerData[key] = val;
+      let param = {
+        proprietorId: this.ownerData.proprietorId
+      };
+      param[key] = val;
+      this.changeOwn(param)
+    },
+
+    //修改接口调用
+    changeOwn(param){
+      this.postJson("/server/business-os/proprietor/update", param, res => {
+        return;
+      });
+    },
+    happenJson() {},
+    
+    //重置密码
+    reset(){
+      let param = {
+        proprietorId: this.ownerData.proprietorId
+      }
+      this.postJson("/server/business-os/proprietor/reset",param,res => {
+        this.$message.success("已重置密码")
+      })
+    },
+
+    //发送账号密码
+    seedPsd(){
+      this.seedEmail(this.ownerData.proprietorId)
+    },
+
+    //创建时添加key
+    getKey(key){
+      this.ownerData.license = key
+    },
+
+    //修改合同信息时改变key
+    changeKey(key){
+      this.ownerData.license = key;
+      let param = {
+        proprietorId: this.ownerData.proprietorId
+      };
+      param.license = key;
+      this.changeOwn(param)
+    },
+
+    //submit触发
+    submitForm(formName) {
+      this.$refs[formName].validate(valid => {
+        if (valid) {
+          this.craeteOwner();
+        } else {
+          return false;
+        }
+      });
+    },
+
+    uploadImg(file) {
+      console.log(file);
+    },
+
+    //创建业主
+    craeteOwner() {
+      this.postJson(
+        "/server/business-os/proprietor/create",
+        this.ownerData,
+        res => {
+          this.diaShow = false;
+          this.$emit("success");
+          if(this.isEmail){
+            this.seedEmail(res.proprietorId)
+          }
+        }
+      );
+    },
+
+    //发送邮件短信
+    seedEmail(id){
+      let param = {
+        proprietorId: id
+      }
+      this.postJson("/server/business-os/proprietor/inform",param,res=>{
+        this.$message.success("发送邮件成功")
+      })
+    },
+
+    resetForm(formName) {
+      this.$refs[formName].resetFields();
+    },
+  },
+  watch: {
+    diaShow: {
+      deep: true,
+      handler(val, oldVal) {
+        this.$emit("close");
+        this.diaShow = true;
+      }
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.own-border {
+  height: 1px;
+  width: 100%;
+  background-color: #ccc;
+  margin-bottom: 20px;
+}
+</style>

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1470 - 0
src/components/market/owner/perj.vue


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2268 - 0
src/components/market/owner/project.js


+ 122 - 0
src/components/market/owner/project.vue

@@ -0,0 +1,122 @@
+<template>
+  <div>
+    <!-- 一级标签 -->
+    <div v-for="item in label" v-if="firstTagShow(item)">
+      <h3 class="first-tag">{{item.firstTag}}</h3>
+      <div v-for="i in item.details">
+        <h4 class="second-tag">{{i.secondTag}}</h4>
+        <template v-for="detail in i.details">
+          <form-input
+            v-if="itemShow(detail) && isCreated"
+            :width="170"
+            :type="detail.inputMode"
+            :typeArr="detail.dataSource"
+            :value="value.infos[detail.infoPointCode]"
+            :unit="detail.unit"
+            @change="changed"
+            :keys="detail.infoPointCode"
+            :label="detail.infoPointName"
+            :isRule="false"
+          ></form-input>
+        </template>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+import formInput from "@/components/market/owner/formInput";
+export default {
+  name: "project",
+  props: {
+    label: {
+      type: Array,
+      default: function () {
+        return []
+      }
+    },
+    value: {
+      type: Object
+    },
+    isCreate: {
+      type: Boolean,
+      default: true
+    }
+  },
+  components: {
+    formInput
+  },
+  data() {
+    return {
+      showInputMode: ["B1", "A1", "A2", "C5", "D1", "C1", "B2", "C6", "B1"],
+      isCreated: false
+    }
+  },
+  created() {
+    console.log(this.label, this.value, "label")
+    this.isCreated = true
+  },
+  mounted() { },
+  methods: {
+    changed(val, key) {
+      let param = {
+        id: this.value.id,
+        infos: {
+          [key]: val
+        }
+      }
+      this.postJson(
+        "/server/business-os/proprietor/project/update",
+        param,
+        res => {
+          this.$message.success("修改成功");
+        }
+      );
+    },
+    //第一级tag是否显示
+    firstTagShow(item) {
+      let tagShow = false
+      if (item.firstTag == "地理位置" || item.firstTag == "天气预报" || item.firstTag == "室外环境" || item.firstTag == "能耗信息") {
+        tagShow = false
+      } else {
+        tagShow = true
+      }
+      return tagShow
+    },
+    //item是否显示
+    itemShow(item) {
+      if (item.infoPointName == "业主") {
+        return false
+      }
+      if (this.showInputMode.indexOf(item.inputMode) > -1) {
+        return true
+      } else {
+        return false
+      }
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.build-border {
+  border: 1px solid #ccc;
+  margin-top: 10px;
+  padding-top: 10px;
+  overflow: hidden;
+  .font-right {
+    float: right;
+    margin-right: 30px;
+  }
+}
+.first-tag {
+  line-height: 40px;
+  font-weight: 600;
+  margin-left: 5px;
+}
+.second-tag {
+  line-height: 40px;
+  font-weight: 500;
+  margin-left: 20px;
+  color: #6bcae2;
+}
+</style>

+ 217 - 0
src/components/market/owner/uploadImg.vue

@@ -0,0 +1,217 @@
+<!--
+  上传组件
+  type: 类型,默认image
+  identify: key值,通过val获取
+  disabled: 是否可用
+  index: 父组件的下标
+  imageIndex: 图片下标
+  isShow: 图片的显示
+ -->
+<template>
+    <div id="saga-upload">
+      <el-upload
+      v-if="type == 'image'"
+      class="avatar-uploader"
+      :http-request="uploadAndSubmit"
+      :show-file-list="false"
+      action=""
+      accept="image/*"
+      drag
+      :disabled="disabled"
+      style="position: relation"
+      >
+          <i class="el-icon-plus avatar-uploader-icon"></i>
+          <img v-if="identify" :src="imageGetUrl + '&key=' + identify"></img>
+          <div 
+          v-if="!disabled && identify && isShow" 
+          style="width: 20px; height:20px; background: #e6e6e6; position: absolute; top: 5px; right: 0px;"
+          @click.stop="deleteImg">
+            <i class="el-icon-close" ></i>
+          </div>
+      </el-upload>
+    <div v-else id="uploadFile">
+        <div v-if="name">
+            <el-button type="text" @click="download">
+                {{name}}          
+            </el-button>
+            <i v-if="disabled" class="el-icon-close delete-icon" style="margin-left:10px; cursor:pointer" @click="deleteImg"></i>
+        </div>
+        <el-upload
+        class="upload-file"
+        action=""
+        :http-request="uploadAndSubmit"
+        :show-file-list="false"
+        drag
+        >
+            <el-button size="small" type="primary" v-if="disabled">点击上传</el-button>
+        </el-upload>
+    </div>
+  </div>
+</template>
+
+<script>
+import store from '@/store'
+export default {
+  name: "upload",
+  props: {
+    type: {
+      type: String,
+      default: "image"
+    },
+    identify: {
+      type: String,
+      default: ""
+    },
+    disabled: {
+      type: Boolean,
+      default: false
+    }, //是否禁用上传功能
+    index: {
+      type: Number
+    }, //下标,非必传项
+    imgIndex: {
+      type: Number
+    }, //图片附件上传的第几个附件(同一index下的不同附件)
+    isShow: {
+      type: Boolean,
+      default: true
+    }
+  },
+  data() {
+    return {
+      baseUrl: "",
+      fileGetUrl: "",
+      fileUploadUrl: "",
+      imageGetUrl: "",
+      imageUploadUrl: "",
+      name: ""
+    };
+  },
+  created() {
+    console.log(this.identify,'identify')
+    this.name = this.identify
+    this.getUrl();
+  },
+  methods: {
+
+    //获取地址
+    getUrl() {
+      this.baseUrl = store.getters.getBaseUrl
+      this.fileGetUrl = store.getters.getFileGetUrl
+      this.fileUploadUrl = store.getters.getFileUploadUrl
+      this.imageGetUrl = store.getters.getImageGetUrl
+      this.imageUploadUrl = store.getters.getImageUploadUrl
+    },
+    //下载
+    download(){
+      window.open(this.baseUrl + this.fileGetUrl + '&key=' + this.identify)
+    },
+    //提交
+    uploadAndSubmit(item) {
+      let file = item.file;
+      // try sending
+      let reader = new FileReader();
+
+      let vm = this;
+
+      reader.onloadstart = function() {
+        // 这个事件在读取开始时触发
+      };
+      reader.onprogress = function(p) {
+        // 这个事件在读取进行中定时触发
+      };
+
+      reader.onload = function() {
+        // 这个事件在读取成功结束后触发
+      };
+
+      let url = vm.type == "image" ? vm.imageUploadUrl : vm.fileUploadUrl;
+
+      reader.onloadend = function() {
+        // 这个事件在读取结束后,无论成功或者失败都会触发
+        if (reader.error) {
+        } else {
+          // document.getElementById("bytesRead").textContent = file.size;
+          // 构造 XMLHttpRequest 对象,发送文件 Binary 数据
+          var xhr = new XMLHttpRequest();
+          xhr.open(
+            /* method */ "POST",
+            /* target url */
+            url + "&key=" + file.name
+            /*, async, default to true */
+          );
+          //xhr.overrideMimeType("application/octet-stream");
+          xhr.send(reader.result);
+          xhr.onreadystatechange = function() {
+            if (xhr.readyState == 4) {
+              if (xhr.status == 200) {
+                vm.name = file.name;
+                vm.$emit("getKey", file.name, vm.index, vm.imgIndex);
+              }
+            }
+          };
+        }
+      };
+      reader.readAsArrayBuffer(file);
+    },
+    //删除指定图片
+    deleteImg() {
+      this.$confirm("您正在删除, 是否继续?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      })
+        .then(() => {
+          this.name = "";
+          this.$emit("delete-img", this.index, this.imgIndex);
+        })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "已取消删除"
+          });
+        });
+    }
+  },
+  watch:{
+    identify: function(val,old){
+      // console.log(old,val,1111)
+      this.name = val
+    }
+  }
+};
+</script>
+
+<style lang="scss">
+#saga-upload {
+  .dill-image {
+    position: absolute;
+    right: 0px;
+    top: 0px;
+    font-size: 20px;
+  }
+  .el-upload-dragger{
+    width:180px;
+    height: 180px;
+  }
+  img {
+    position: absolute;
+    top: 0;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    width: 100%;
+    height: 100%;
+  }
+  #uploadFile {
+    .upload-file {
+      overflow: hidden;
+      .el-upload-dragger {
+        width: inherit;
+        height: inherit;
+        border: none;
+      }
+    }
+  }
+}
+</style>

+ 4 - 1
src/router/sagacloud.js

@@ -31,6 +31,9 @@ import buildUser from "@/views/data_admin/buildUser"
 import buildData from "@/views/data_admin/buildData"
 import buildGraphy from "@/views/data_admin/buildGraphy"
 
+/**市场及商务 */
+const OwnerManage = () => import('@/views/market/owner/manage')
+
 /**  台账管理 */
 import systemLedger from '@/views/ledger/system'
 import facilityLedger from '@/views/ledger/facility'
@@ -167,7 +170,7 @@ export default [
         component: LayoutMain,
         children: [
             { path: '', name: 'Dasboard', component: Dasboard },
-            { path: 'own', name: 'Dasboard', component: Dasboard }
+            { path: 'own', name: 'Dasboard', component: OwnerManage }
         ]
     },
     //revit服务器端化的web功能

+ 205 - 0
src/views/market/owner/contract.vue

@@ -0,0 +1,205 @@
+<template>
+    <div ref="tableView" id="contract">
+        <el-breadcrumb separator-class="el-icon-arrow-right" style="display:inline-block;">
+            <el-breadcrumb-item :to="{ path: '/own' }">业主管理</el-breadcrumb-item>
+            <el-breadcrumb-item>项目合同</el-breadcrumb-item>
+        </el-breadcrumb>
+        <el-button
+            @click="getPorjMess"
+            style="float:right;margin-right:30px;"
+            class="create_pero"
+            size="small"
+            icon="el-icon-plus"
+        >建立新项目</el-button>
+        <el-table :data="tableData" :height="height" v-loading="isLoading" style="width: 100%">
+            <el-table-column fixed sortable prop="projectName" label="项目本地名称"></el-table-column>
+            <el-table-column fixed sortable prop="projectId" label="项目ID"></el-table-column>
+            <el-table-column fixed sortable prop="buildingNum" label="建筑数量"></el-table-column>
+            <el-table-column fixed label="项目地址">
+                <template slot-scope="scope">
+                    <el-button
+                        style="white-space: inherit;"
+                        @click="seeMap(scope.row)"
+                        type="text"
+                        size="small"
+                    >
+                        <i class="el-icon-location-outline"></i>
+                        {{ scope.row.area }}
+                    </el-button>
+                </template>
+            </el-table-column>
+            <el-table-column prop="endDate" sortable label="服务终止日期"></el-table-column>
+            <el-table-column label="涉及朵朵服务项目">
+                <template slot-scope="scope">{{ scope.row.services | server }}</template>
+            </el-table-column>
+            <el-table-column fixed="right" label="操作">
+                <template slot-scope="scope">
+                    <el-button @click="getPorjMess(scope.row)" type="text" size="small">项目及建筑信息</el-button>
+                    <el-button @click="getCont(scope.row)" type="text" size="small">合同及合同管理</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+        <cont-dialog
+            :show="buildShow"
+            :funcTypeArr="funcTypeArr"
+            :param="param"
+            :buildMess="buildMess"
+            v-if="buildShow"
+            @close="getData"
+        ></cont-dialog>
+        <contract-dialog v-if="contractShow" :show="contractShow" @close="getData" :param="param"></contract-dialog>
+        <el-dialog title="地图信息" :visible.sync="mapDialog" width="50%">
+            <b-map v-if="mapDialog" type="noChange" :location="location"></b-map>
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+// import myMap from "@/components/modules/map";
+// import formInput from "@/components/market/owner/formInput";
+import contractDialog from "@/components/market/owner/perj";
+import contDialog from "@/components/market/owner/contractDialog";
+import tools from "@/utils/tools";
+import bMap from "@/components/market/owner/map";
+import mapInit from '@/utils/mapInit'
+export default {
+    name: "perject",
+    components: {
+        // myMap,
+        // formInput,
+        contractDialog,
+        contDialog,
+        bMap
+    },
+    data() {
+        return {
+            tableData: [],
+            height: 700, //table高度
+            proprietorId: this.$route.query.id,
+            contractShow: false, //合同弹窗的显示
+            buildShow: false, // 建筑信息的显示
+            isLoading: true, //是否进行loading动画
+            param: {}, //给组件的业主id和项目id
+            buildMess: [], //建筑信息点
+            funcTypeArr: [], //功能类型数组
+            mapDialog: false, //地图显示
+            location: {},//经纬度信息
+        };
+    },
+    created() {
+        this.getData();
+        this.getBuildMess();
+        this.getfuncArr();
+        this.resize()
+    },
+    mounted() {
+        //百度地图初始化
+        mapInit.init()
+        window.addEventListener("resize", this.resize)
+    },
+    beforeDestroy() {
+        window.removeEventListener("resize", this.resize)
+    },
+    methods: {
+        resize() {
+            let height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
+            this.height = height - 180
+        },
+        //获取表格数据
+        getData() {
+            this.buildShow = false
+            this.contractShow = false
+            let params = {
+                proprietorId: this.proprietorId
+            };
+            this.postJson(
+                "/server/business-os/proprietor/query_project",
+                params,
+                resp => {
+                    this.tableData = resp.content;
+                    this.isLoading = false;
+                }
+            );
+        },
+
+        //获取建筑功能下拉数组
+        getfuncArr() {
+            this.getJson("/server/business-os/dict/query/building", {}, res => {
+                this.funcTypeArr = res.Content;
+            });
+        },
+
+        //获取建筑信息点
+        getBuildMess() {
+            this.getJson(
+                "/server/business-os/infocode/query/building",
+                {},
+                res => {
+                    this.buildMess = tools.arrayCnt(res.content);
+                }
+            );
+        },
+
+        //点击项目地址显示地址
+        seeMap(row) {
+            this.location = {
+                lng: row.location.Longitude,
+                lat: row.location.Latitude
+            }
+            this.mapDialog = true
+        },
+
+        //获取项目及建筑信息的弹窗
+        getPorjMess(row) {
+            this.param.proprietorId = this.$route.query.id;
+            this.param.projectName = row.projectName
+            if (row) {
+                this.param.perjId = row.projectId;
+            } else {
+                this.paeam.perjId = "";
+            }
+            this.buildShow = true;
+        },
+
+        //获取合同资料弹窗
+        getCont(row) {
+            this.param.proprietorId = this.$route.query.id;
+            if (row) {
+                this.param.perjId = row.projectId;
+            } else {
+                this.paeam.perjId = "";
+            }
+            this.contractShow = true;
+        }
+    },
+
+    //过滤器
+    filters: {
+        //简单处理数组
+        server(val) {
+            let isObj = val instanceof Array;
+            let string = "";
+            if (isObj) {
+                for (let i = 0; i < val.length; i++) {
+                    if (i == val.length || i == 0) {
+                        string += string + val[i].serviceName;
+                    } else {
+                        string += "、" + val[i].serviceName;
+                    }
+                }
+            } else {
+                string = "暂无服务";
+            }
+            return string;
+        }
+    }
+};
+</script>
+
+<style lang="scss">
+#contract .el-dialog__body {
+  max-height: 600px;
+  overflow-y: auto;
+}
+</style>
+

+ 300 - 0
src/views/market/owner/manage.vue

@@ -0,0 +1,300 @@
+<template>
+  <div ref="tableView" id="owner">
+      <div class="search">
+        <el-input
+        placeholder="输入企业名称、联系人、邮箱、电话搜索"
+        style="width:20rem;"
+        prefix-icon="iconfont icon-sousuo"
+        size="small"
+        v-model="filter.search">
+        </el-input>
+        <el-button  size="small" @click="search">搜索</el-button>
+        <span>状态:</span>
+        <el-select style="width:8rem;" size="small" clearable v-model="filter.status" @change="search" placeholder="请选择">
+            <el-option
+            v-for="item in statesOpt"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+            :disabled="item.disabled">
+            </el-option>
+        </el-select>
+        <span>运维负责人:</span>
+        <el-select style="width:8rem;" size="small" clearable @change="search" clea v-model="filter.people" placeholder="请选择">
+            <el-option
+            v-for="item in manageArr"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+            :disabled="item.disabled">
+            </el-option>
+        </el-select>
+        <el-button @click="addOwner" class="create_pero" size="small" icon="el-icon-plus">添加业主</el-button>
+      </div>
+      <el-table
+        :data="tableData"
+        :stripe="true"
+        :height="height"
+        v-loading="isLoading"
+        style="width: 100%">
+        <el-table-column
+        fixed
+        prop="proprietorName"
+        sortable
+        label="企业全称">
+        </el-table-column>
+        <el-table-column
+        prop="email"
+        sortable
+        label="企业邮箱账号">
+        </el-table-column>
+        <el-table-column
+        prop="contact"
+        sortable
+        label="企业联系人">
+        </el-table-column>
+        <el-table-column
+        prop="phone"
+        sortable
+        label="联系人手机">
+        </el-table-column>
+        <el-table-column
+        label="项目数量">
+        <template slot-scope="scope">
+          <span style="margin-left: 10px">{{ scope.row.runningCount }}/</span>
+          <span>{{ scope.row.totalCount }}</span>
+        </template>
+        </el-table-column>
+        <el-table-column
+        prop="status"
+        sortable
+        label="状态">
+        </el-table-column>
+        <el-table-column
+        prop="managerName"
+        sortable
+        label="运维负责人">
+        </el-table-column>
+        <el-table-column
+        fixed="right"
+        label="操作">
+            <template slot-scope="scope">
+                <el-button @click="linkTo(scope.row)" type="text" size="small">项目及合同</el-button>
+                <el-button @click="handleClick(scope.row)" type="text" size="small">业主运维</el-button>
+            </template>
+        </el-table-column>
+    </el-table>
+    <owner-dialog v-if="ownerShow" @success="getData" @close="getData" :Dtype="diaType" :ownerData="ownerData" :type="ownerType" :show="ownerShow"></owner-dialog>
+  </div>
+</template>
+
+<script>
+import ownerDialog from "@/components/market/owner/ownerDia";
+
+export default {
+  name: "owner",
+  components: {
+    ownerDialog
+  },
+  data() {
+    return {
+      tableData: [], //table表格数据
+      height: 600, //table高度
+      ownerShow: false,
+      filter: {
+        //过滤条件
+        search: "",
+        status: "",
+        people: ""
+      },
+      manageArr: [
+        //option的下拉数值
+      ],
+      ownerObj: {
+        title: "新增业主",
+        show: false
+      },
+      statesOpt: [
+        {
+          label: "正常",
+          value: "正常"
+        },
+        {
+          label: "半年内有到期项目",
+          value: "半年内有到期项目"
+        },
+        {
+          label: "所有项目均停止运营",
+          value: "所有项目均停止运营"
+        }
+      ],
+      ownerData: {
+        proprietorId: "", //Integer,必填,企业id
+        proprietorName: "", //String,选填,企业名称
+        email: "", //String,选填,企业邮箱
+        contact: "", //String,选填,企业联系人姓名
+        phone: "", //String,选填,企业联系人电话
+        registrationNum: "", //String,选填,经营执照注册号
+        license: "", //String,选填,执照扫描件在文件系统中的key
+        managerName: "" //String,选填,商务运维负责人
+      },
+      ownerType: "create", //type分为create和set
+      isLoading: false, //loading动画
+      searchArr: [], //用于计算的数组备份
+      diaType: "create" //弹窗类型
+    };
+  },
+  created() {
+    this.resize()
+    this.getData();
+  },
+  mounted(){
+    window.addEventListener("resize",this.resize)
+  },
+  beforeDestroy(){
+    window.removeEventListener("resize",this.resize)
+  },
+  methods: {
+    resize(){
+      let height = window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;
+      this.height = height - 180
+    },
+    //获取表格数据
+    getData() {
+      this.isLoading = true;
+      this.postJson("/server/business-os/proprietor/query_list", {}, resp => {
+        this.tableData = resp.content;
+        this.getHeadle(resp.content);
+        this.searchArr = resp.content;
+        this.isLoading = false;
+        this.ownerShow = false;
+      });
+    },
+    //点击出现
+    handleClick(row) {
+      this.diaType = 'change'
+      this.ownerData = row
+      this.ownerShow = true;
+    },
+
+    //添加用户
+    addOwner() {
+      for(let key in this.ownerData){
+        this.ownerData[key] = ""
+      }
+      this.diaType = "create"
+      this.ownerShow = true;
+    },
+
+    //跳转
+    linkTo(row) {
+      this.$router.replace({
+        path: "/own/contract",
+        query: {
+          id: row.proprietorId
+        }
+      });
+    },
+
+    //搜索
+    search() {
+      let search = this.filter;
+      let table = this.searchArr;
+      let lastData = [];
+      lastData = table.filter(item => {
+        //状态和运维负责人判断falg
+        let Pfalg = false,
+          Mfalg = false,
+          Sfalg = false;
+        //下拉运营负责人判断
+        if (search.people == "" || search.people == item.managerName) {
+          Pfalg = true;
+        }
+        //下拉状态判断
+        if (search.status == "" || search.status == item.status) {
+          Mfalg = true;
+        }
+        //搜索框判断,判断条件依次为企业全称、邮箱、联系人、手机
+        if (
+          item.proprietorName.indexOf(search.search) >= 0 ||
+          item.email.indexOf(search.search) >= 0 ||
+          item.contact.indexOf(search.search) >= 0 ||
+          item.phone.indexOf(search.search) >= 0
+        ) {
+          Sfalg = true;
+        }
+        return Sfalg && Pfalg && Mfalg;
+      });
+
+      //当值清空判断
+      if (search.people == "" && search.status == "" && search.search == "") {
+        this.tableData = this.searchArr;
+      } else {
+        this.tableData = lastData;
+      }
+    },
+
+    //获取运维负责人manageArr
+    getHeadle(arr) {
+      let newArr = arr.map(item => {
+        return {
+          key: item.managerName,
+          value: item.managerName
+        };
+      });
+      this.manageArr = this.arrayUnique(newArr, "key");
+    },
+
+    //数组去重
+    arrayUnique(arr, name) {
+      var hash = {};
+      //reduce去重
+      return arr.reduce(function(item, next) {
+        hash[next[name]] ? "" : (hash[next[name]] = true && item.push(next));
+        return item;
+      }, []);
+    }
+  }
+};
+</script>
+
+<style>
+#owner .el-dialog__body {
+  max-height: 500px;
+  overflow-y: auto;
+}
+.avatar-uploader .el-upload {
+  border: 1px dashed #d9d9d9;
+  border-radius: 6px;
+  cursor: pointer;
+  position: relative;
+  overflow: hidden;
+}
+.avatar-uploader .el-upload .el-upload-dragger {
+  width: 6rem;
+}
+.avatar-uploader .el-upload .avatar-uploader .el-upload:hover {
+  border-color: #409eff;
+}
+.avatar-uploader-icon {
+  font-size: 28px;
+  color: #8c939d;
+  width: 6rem;
+  height: 6rem;
+  line-height: 6rem;
+  text-align: center;
+}
+.avatar {
+  width: 6rem;
+  height: 6rem;
+  display: block;
+}
+</style>
+<style lang="less" scoped>
+.search {
+  height: 40px;
+  padding-top: 7px;
+  margin-left: 10px;
+  font-size: 14px;
+}
+</style>