Sfoglia il codice sorgente

Merge branch 'develop' of http://39.106.8.246:3003/web/wanda-editer into develop

YaolongHan 4 anni fa
parent
commit
9f6acfe870

+ 16 - 3
src/api/editer.js

@@ -33,8 +33,9 @@ export function getGraphElementType(params){
 }
 // 设备设施-主要设备清单-详情
 export function queryGlsmsasset(data,params){
-    return httputils.postJson(`${dataApi}/data/glsms_asset/query?plazaId=${data.plazaId}&page=${data.page}&size=${data.size}&type=${data.type}`, params)
+    return httputils.fetchJson(`${dataApi}/data/glsms_asset/queryByClassStructure`,data, params)
 }
+
 // 查询楼层清单
 export function getPlazaFloor(data,params){
     return httputils.postJson(`${dataApi}/plaza/floor?plazaId=${data.plazaId}`, params)
@@ -43,7 +44,19 @@ export function getPlazaFloor(data,params){
 export function getQuerySmsxt(params){
     return httputils.postJson(`${dataApi}/data/v_glsms_systemcfg/querySmsxt`, params)
 }
-// 查询工程信息化tree数据
+// 查询工程信息化系统及下级设备分类
 export function getQuerySmsxtBy(data,params){
-    return httputils.postJson(`${dataApi}/data/t_system_wzfl/queryBySmsxt?smsxt=${data.smsxt}`, params)
+    return httputils.postJson(`${dataApi}/data/base/queryClassStructureBySmsxt?smsxt=${data.smsxt}`, params)
+}
+// 查询位置台账
+export function queryGlsmsLocation(data,params){
+    return httputils.fetchJson(`${dataApi}/data/v_glsms_location/query`,data, params)
+}
+// 根据位置大类查询位置分类
+export function queryWzflByDl(data,params){
+    return httputils.postJson(`${dataApi}/data/base/queryWzflByDl?dl=${data.dl}`, params)
+}
+// 查询位置大类
+export function queryWzfldl(data,params){
+    return httputils.postJson(`${dataApi}/data/base/queryWzfldl`, params)
 }

+ 36 - 8
src/components/edit/attr_select.vue

@@ -168,17 +168,30 @@
       </div>
     </div>
     <!--    快捷操作提示-->
-    <div style="position: fixed;bottom: 0;width: 280px;">
+    <div style="position: fixed;bottom: 0;width: 280px;" class="key-boards">
       <a-collapse :bordered="false" expand-icon-position="right">
         <template #expandIcon="props">
           <a-icon type="caret-up" :rotate="props.isActive ? 180 : 0" />
         </template>
-        <a-collapse-panel key="1" header="键盘操作提示" :style="customStyle">
-          <p v-for="item in keyboardOperation" :key="item.value">{{item.value}}</p>
+        <a-collapse-panel key="1" :style="customStyle">
+          <template slot="header">
+            <div style="font-size: 12px;color: #8D9399;">
+              <a-icon type="exclamation-circle" /> <span>键盘操作提示</span>
+            </div>
+          </template>
+
+          <p v-for="item in keyboardOperation" :key="item.value" style="display: flex;margin-top: 13px;">
+           <span> {{item.value}}</span>
+            <span class="key-board">{{item.keys}}</span>
+            <span v-if="item.events" style="margin: 0 5px;">+ <a-icon type="user" /></span>
+            <span> {{item.events}}</span>
+          </p>
         </a-collapse-panel>
       </a-collapse>
     </div>
-    <editDialog ref="dialog" :typeEdit="1" :getmajorId="1001" :sysNum="5" />
+    <editDialog ref="dialog" :typeEdit="1" :getmajorId="'1001'" :sysNum="5" />
+<!--    <editDialog ref="dialog" :typeEdit="2" :getmajorId="'设备间'" :sysNum="5" />-->
+
   </div>
 </template>
 
@@ -200,10 +213,10 @@ export default {
       customStyle:
         "background: #fff;overflow: hidden;  box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.11);border:0",
       keyboardOperation: [
-        { value: "拖动画布:" },
-        { value: "加选对象:" },
-        { value: "确认操作:" },
-        { value: "取消对象:" }
+        { value: "拖动画布:", keys:'Space',events:'Click' },
+        { value: "加选对象:", keys:'Ctrl',events:'Press' },
+        { value: "确认操作:", keys:'Enter' },
+        { value: "取消对象:", keys:'Enter' }
       ],
       numberValue: 3,
       fontSize: 12, //字体大小
@@ -399,6 +412,7 @@ export default {
     position: relative;
   }
 
+
   .icon-image {
     font-size: 25px;
   }
@@ -425,6 +439,20 @@ export default {
     color: #0091ff;
   }
 }
+.key-boards{
+  .key-board{
+    width: 52px;
+    height: 24px;
+    border-radius: 3px;
+    border: 1px solid rgba(195, 199, 203, 1);
+    font-size: 14px;
+    color: #646A73;
+    text-align: center;
+  }
+  /deep/ .ant-collapse-content{
+    border-top: 1px solid #EFF0F1;
+  }
+}
 #attr-select {
   width: 100%;
   height: 100%;

+ 136 - 67
src/components/edit/edit-dialog.vue

@@ -27,7 +27,7 @@
                 v-model="floorId"
                 caption="所属楼层:"
                 @change="chageFloor"
-                :hideClear='true'
+                :hideClear='false'
                 :selectdata="dataFloor"
                 :placeholder="'请选择'"
                 class="search-select"
@@ -41,7 +41,7 @@
           <searchTree  @getTreeId="getTreeId" :treeData="treeData"/>
         </div>
         <div class="checkbox">
-          <a-table :pagination="false" row-key='sbjbm' :columns="typeEdit==1?columnsSys:columnsLocal" :data-source="tableData"  :row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange,onSelect:onSelect }" :scroll="{ y: 340 }"  :loading="loading"/>
+          <a-table :pagination="false" row-key='id' :columns="typeEdit==1?columnsSys:columnsLocal" :data-source="tableData"  :row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange,onSelect:onSelect }" :scroll="{ y: 340 }"  :loading="loading"/>
           <a-pagination v-if="total>0" v-model="page" :total="total" show-less-items style="margin-left: auto;"  @change="handleTableChange"/>
         </div>
       </div>
@@ -52,7 +52,7 @@
         </div>
 
         <div class="list-box">
-          <p v-for="(item,index) in selectList" :key="index" class="list">{{item.sbjc}}
+          <p v-for="(item,index) in selectList" :key="index" class="list">{{item.sbjc||item.wzjc}}
             <a-icon type="close" class="icon" @click="deleteItem(item,index)"/>
           </p>
         </div>
@@ -64,13 +64,13 @@
 
 <script>
     import searchTree from "@/components/edit/search_tree";
-    import {queryGlsmsasset ,getQuerySmsxt,getPlazaFloor,getQuerySmsxtBy} from "@/api/editer";
+    import {queryGlsmsasset ,getQuerySmsxt,getPlazaFloor,getQuerySmsxtBy,queryWzfldl,queryWzflByDl,queryGlsmsLocation} from "@/api/editer";
     export default {
         name: "edit-dialog",
         components: {searchTree},
       props:{
         typeEdit:Number , //用于区分是设备 还是  位置
-        getmajorId:Number, //专业Id
+        getmajorId:String, //专业Id
         sysNum:Number //设备总数
       },
         data() {
@@ -98,7 +98,7 @@
                 },
                 {
                   title: '设备内码',
-                  dataIndex: 'sbxh',
+                  dataIndex: 'sbjbm',
                   key: 'sbjbm',
                   width: '25%',
                 },
@@ -106,15 +106,15 @@
               columnsLocal : [
                 {
                   title: '位置名称',
-                  dataIndex: 'name',
-                  key: 'name',
+                  dataIndex: 'wzjc',
+                  key: 'wzjc',
                   width: '75%',
-                  scopedSlots: { customRender: 'name' },
+                  scopedSlots: { customRender: 'wzjc' },
                 },
                 {
                   title: '位置内码',
-                  dataIndex: 'code',
-                  key: 'code',
+                  dataIndex: 'location',
+                  key: 'location',
                   width: '25%',
                 },
               ],
@@ -131,8 +131,14 @@
           majorId(){
             return  this.getmajorId||''
           }
-
         },
+      watch:{
+        floorId(val){
+          if(val==''){
+            this.queryGlsmsasset();
+          }
+        }
+      },
         methods: {
             showModal() {
                 this.visible = true;
@@ -155,6 +161,7 @@
                 console.log(val)
             },
             handleMajor(val) {
+              this.tableData = [];
               this.getQuerySmsxtBy(val.id)
             },
             chageFloor(data) {
@@ -179,27 +186,48 @@
               plazaId: '1000423',//广场id 必填
               page: this.page,//页数
               size: this.size,//条数
-              type: this.typeEdit,//类型
             }
-            if (this.keyword) {
-              data.keyword = `${this.keyword}:brand`
+            if( this.keyword){
+              data.keyword = this.typeEdit==1? `${this.keyword}:brand`:`${this.keyword}:wzjc`
             }
-            let paramData =  {classstructureid: this.classstructureid,floor:this.floorId};
-            let paramDataLocal =  {locfl: this.locfl,floor:this.floorId};
+            let paramData =  {classstructureid: this.classstructureid,gname:this.floorId};
+            let paramDataLocal =  {locfl: this.locfl,gname:this.floorId};
             this.loading = true;
-            queryGlsmsasset(data,this.typeEdit==1?paramData:paramDataLocal).then(res => {
-              this.loading = false;
-              if(res.result == 'success'){
-                this.total = res.count;
-                if(res.data){
-                  this.tableData = res.data;
-                }else if(res.count == 0){
-                  this.tableData = [];
+            if(this.typeEdit==1){
+              queryGlsmsasset(data,paramData).then(res => {
+                this.loading = false;
+                if(res.data.result == 'success'){
+                  this.total = res.data.count;
+                  if(res.data.data){
+                    let data = res.data.data;
+                    data.map(item=>{
+                      item.id = item.sbjbm
+                    })
+                    this.tableData = data;
+
+                  }else if(res.data.count == 0){
+                    this.tableData = [];
+                  }
+                }else{
+                  this.$message.error('数据请求失败')
                 }
-              }else{
-                this.$message.error('数据请求失败')
-              }
-            })
+              })
+            }else if(this.typeEdit==2){
+              queryGlsmsLocation(data,paramDataLocal).then(res => {
+                this.loading = false;
+                if(res.data.result == 'success'){
+                  this.total = res.data.count;
+                  if(res.data.data){
+                    this.tableData = res.data.data;
+                  }else if(res.data.count == 0){
+                    this.tableData = [];
+                  }
+                }else{
+                  this.$message.error('数据请求失败')
+                }
+              })
+            }
+
           },
           //分页切换点击
           handleTableChange(page, pageSize) {
@@ -209,7 +237,7 @@
           onSelect(record, selected, selectedRows, nativeEvent){
             if(!selected  && this.selectList.length>0){
               this.selectList.map((item,index)=>{
-                if( item.sbjbm == record.sbjbm){
+                if( item.id == record.id){
                   this.selectList.splice(index,1);
                 }
               })
@@ -230,7 +258,7 @@
 
             this.selectList = this.selectList.reduce (function(item,next){
 
-              obj[next.sbjbm] ? ' ' : obj[next.sbjbm]  = true && item.push(next)
+              obj[next.id] ? ' ' : obj[next.id]  = true && item.push(next)
 
               return item;
 
@@ -238,7 +266,7 @@
           },
           //右侧删除
           deleteItem(item,index){
-            this.selectedRowKeys.splice(this.selectedRowKeys.indexOf(item.sbjbm),1);
+            this.selectedRowKeys.splice(this.selectedRowKeys.indexOf(item.id),1);
             this.selectList.splice(index,1);
           },
           //右侧清空
@@ -255,60 +283,101 @@
               if(res.result == 'success'){
                 let data = res.data;
                 data.map(item=>{
-                  item.id = item.code;
+                  item.id = item.gname;
                 })
                 this.dataFloor  = data;
               }
             })
           },
-          //获取专业
+          //获取设备大类和位置大类
           getQuerySmsxt(){
-            getQuerySmsxt({}).then(res =>{
-              if(res.result == 'success'){
-                if(res.data){
-                  let data = res.data;
-                  data.map(item=>{
-                    item.id = item.smsxt;
-                    item.name = item.smsxtname;
-                  })
-                  this.majorList  = data;
-                }
+              if (this.typeEdit==1){
+                getQuerySmsxt({}).then(res =>{
+                  if(res.result == 'success'){
+                    if(res.data){
+                      let data = res.data;
+                      data.map(item=>{
+                        item.id = item.code;
+                        item.name = item.name;
+                      })
+                      this.majorList  = data;
+                    }
+                  }
+                })
+              }else if(this.typeEdit ==2){
+              queryWzfldl({}).then(res =>{
+                if(res.result == 'success'){
+                  if(res.data){
+                    let data = res.data;
+                    data.map(item=>{
+                      item.id = item.dl;
+                      item.name = item.dl;
+                    })
+                    this.majorList  = data;
+                  }
                 }
-            })
+              })
+            }
+
           },
+         // 获取设备大类下的分类和位置大类下的分类
           getQuerySmsxtBy(smsxt){
+              if(this.typeEdit==1){
               let data = {
                 smsxt:smsxt
               }
-            getQuerySmsxtBy(data,{}).then(res =>{
-              if(res.result == 'success') {
-                if(res.data){
-                  let data = res.data;
-                  (function recursion(newObj) {
-                    newObj.map(item=>{
-                      item.label = item.name;
-                      if(item.children){
-                        recursion(item.children);
-                      }
-                    })
-                  })(data)
-
-                  this.treeData = data;
+              getQuerySmsxtBy(data,{}).then(res =>{
+                if(res.result == 'success') {
+                  if(res.data){
+                    let data = res.data;
+                    (function recursion(newObj) {
+                      newObj.map(item=>{
+                        item.label = item.gcxxhxtname || item.classqc;
+                        item.id = item.gcxxhxtnum || item.id;
+                        item.children = item.data;
+                        if(item.children){
+                          recursion(item.children);
+                        }
+                      })
+                    })(data)
+
+                    this.treeData = data;
+                  }
+                }else{
+                  this.$message.error('获取失败');
+                }
+              })
+            }else if(this.typeEdit==2){
+                let data = {
+                  dl:smsxt
                 }
-              }else{
-                this.$message.error('获取失败');
+                queryWzflByDl(data,{}).then(res =>{
+                  if(res.result == 'success') {
+                    if(res.data){
+                      let data = res.data;
+                      (function recursion(newObj) {
+                        newObj.map(item=>{
+                          item.label = item.name;
+                          if(item.children){
+                            recursion(item.children);
+                          }
+                        })
+                      })(data)
+
+                      this.treeData = data;
+                    }
+                  }else{
+                    this.$message.error('获取失败');
+                  }
+                })
               }
-            })
+
           }
         },
         mounted() {
           this.getQuerySmsxt();
           //如果有专业就带过来
-          if(this.majorId){
-            this.getQuerySmsxtBy(this.majorId)
-          }else{
-            this.getQuerySmsxtBy('');
-          }
+          this.getQuerySmsxtBy(this.majorId)
 
 
 

+ 75 - 6
src/views/drafts.vue

@@ -13,7 +13,25 @@
             <a-button type="primary">编辑</a-button>
           </div>
         </div>
-        <div class="map"></div>
+        <div class="concent-bottom">
+          <div class="map">
+            <div class="legend-btn" @click="legend = !legend">
+              <a-icon type="right"  style="color: #8D9399;font-size: 10px"/>
+            </div>
+          </div>
+          <div class="legend" v-if="legend">
+            <div style="font-size:14px;color: #1F2429;padding-left: 12px;height: 40px;line-height: 40px">可能需要补充的图例</div>
+            <a-table :columns="columns" :data-source="data" size="middle" :pagination="false">
+              <a-table-column key="name" title="state" data-index="state">
+                <template slot-scope="text, record">
+                  <div style="border:1px solid red;width: 20px;height: 20px;">{{text}}</div>
+                </template>
+              </a-table-column>
+              <template v-slot:state>
+              </template>
+            </a-table>
+          </div>
+        </div>
       </div>
     </div>
   </div>
@@ -70,7 +88,7 @@ const dataArr = [
           { id: "3221", name: "二级1", checked: "uncheck" }
         ]
       }
-    ]
+    ],
   }
 ];
 import Tree from "./../components/Tree/Tree.vue";
@@ -78,7 +96,34 @@ export default {
   components: { Tree },
   data() {
     return {
-      treeData:JSON.parse(JSON.stringify(dataArr))
+      treeData:JSON.parse(JSON.stringify(dataArr)),
+      columns:[
+        {
+          title: "名称", // 列的名称
+          dataIndex: "name", // 列的标识
+        },{
+          title: "图例", // 列的名称
+          dataIndex: "state", // 列的标识
+        },
+      ],
+      data: [
+        {
+          key: "1",
+          name: "客梯",
+          state:''
+        },
+        {
+          key: "2",
+          name: "防火分区",
+          state:''
+        },
+        {
+          key: "3",
+          name: "消防泵室",
+          state:'1'
+        },
+      ],
+      legend:false
     };
   },
   methods: {
@@ -111,6 +156,7 @@ export default {
     .left-nav {
       width: 224px;
       height: 100%;
+      padding: 0 12px;
     }
     .conent-right {
       flex: 1;
@@ -136,11 +182,34 @@ export default {
           justify-content: space-between;
         }
       }
-      .map {
-        width: 100%;
+      .concent-bottom{
         height: calc(100% - 61px);
-        background: red;
+        display: flex;
+        .map {
+          flex: 1;
+          position: relative;
+          /*height: calc(100% - 61px);*/
+          /*background: red;*/
+          .legend-btn{
+            position: absolute;
+            right: 0;
+            top:9px;
+            width:10px;
+            height:24px;
+            background:rgba(228,229,231,1);
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            cursor: pointer;
+          }
+        }
+        .legend{
+          width: 200px;
+          border-left: 1px solid #EFF0F1;
+          height:100%;
+        }
       }
+
     }
   }
 }