<template>
|
<div class="contentBox">
|
|
<div class="box"
|
ref="box">
|
<div class="left box_div">
|
<el-menu :default-active="activeIndex"
|
background-color="transparent"
|
@select="handleselect">
|
<customElMenu :menuData="menuList"></customElMenu>
|
</el-menu>
|
</div>
|
<div class="resize"
|
title="收缩侧边栏">
|
⋮
|
</div>
|
<div class="mid box_div">
|
<My-bread :list="[
|
`通信资源管理`,
|
nodeName,
|
]"></My-bread>
|
<el-divider />
|
<div class="menuBox">
|
<div class="menuTitle">
|
<div>
|
<el-input size="small"
|
prefix-icon="el-icon-search"></el-input>
|
</div>
|
<div>
|
<el-button type="success"
|
size="small"
|
@click="handlerInsert">添加</el-button>
|
<el-button type="danger"
|
size="small"
|
@click="handlerDel">删除</el-button>
|
</div>
|
</div>
|
|
<div class="menuContent">
|
|
<el-table :data="tableData"
|
style="width: 100%;height:calc(100% - 1px); "
|
@selection-change="handleSelectionChange">
|
<el-table-column prop="name"
|
align="center"
|
label="名称">
|
</el-table-column>
|
<el-table-column prop="coord"
|
align="center"
|
label="链路">
|
</el-table-column>
|
<el-table-column prop="types"
|
align="center"
|
label="链接站点">
|
</el-table-column>
|
<el-table-column prop="bak"
|
align="center"
|
label="链路状态">
|
</el-table-column>
|
<el-table-column label="操作">
|
<template slot-scope="scope">
|
<el-button size="mini"
|
plain
|
type="warning"
|
@click="handleEdit(scope.$index, scope.row)">编辑</el-button>
|
|
</template>
|
</el-table-column>
|
</el-table>
|
|
</div>
|
<div class="menupage">
|
<el-pagination @size-change="handleSizeChange"
|
@current-change="handleCurrentChange"
|
:current-page="listData.pageIndex"
|
:page-sizes="[100, 200, 300, 400]"
|
:page-size="listData.pageSize"
|
layout="total, sizes, prev, pager, next, jumper"
|
:total="listData.count"></el-pagination>
|
|
</div>
|
</div>
|
</div>
|
</div>
|
<el-dialog :title="title"
|
:visible.sync="dialogVisible"
|
width="50%"
|
:before-close="handleClose">
|
<el-form :model="editFrom"
|
label-width="80px">
|
<el-form-item label="名称">
|
<el-input v-model="editFrom.name"
|
style="width:calc(100% - 100px);"
|
placeholder="请输入名称"></el-input>
|
</el-form-item>
|
<el-form-item label="链路">
|
<el-input v-model="editFrom.coord"
|
style="width:calc(100% - 100px);"
|
placeholder="请输入位置"></el-input>
|
</el-form-item>
|
<el-form-item label="链接站点">
|
<el-input v-model="editFrom.coord"
|
style="width:calc(100% - 100px);"
|
placeholder="请输入位置"></el-input>
|
</el-form-item>
|
<el-form-item label="链路状态">
|
<el-input v-model="editFrom.bak"
|
style="width:calc(100% - 100px);"
|
placeholder="请输入备注"></el-input>
|
</el-form-item>
|
</el-form>
|
<span slot="footer"
|
class="dialog-footer">
|
<el-button size="small"
|
@click="setSubMite">取 消</el-button>
|
<el-button type="primary"
|
size="small"
|
@click="handleClose">确 定</el-button>
|
</span>
|
</el-dialog>
|
</div>
|
|
</template>
|
|
<script>
|
|
import { selectMenuRecursive,queryMenuTree,sign_insertOpLog } from '@/api/api.js'
|
import MyBread from "@/components/MyBread.vue";
|
import customElMenu from "@/components/customElMenu.vue";
|
export default {
|
components: {
|
MyBread,
|
customElMenu
|
|
},
|
data () {
|
return {
|
setMenuFlag: ' ',
|
activeIndex: ' ',
|
oriData: [], //原始树数据
|
dirData: [], //el树数据
|
newData: [], //拖动后数据
|
lang: 'zh',
|
|
menuList: [],
|
editTitle: '',
|
showPopover: false,
|
showEditInfoWrapper: false,
|
showEdit: false,
|
editMenu: false,
|
editCatalogue: false,
|
editUnit: false,
|
itemdetail: {},
|
formLabelWidth: '70px',
|
pid: null,
|
nodeName: null,
|
listData: {
|
pageIndex: 1,
|
pageSize: 100,
|
count: 0,
|
},
|
tableData: [
|
|
],
|
options: [
|
{
|
name: '指挥所通信枢纽',
|
val: "t1"
|
},{
|
name: '干线通讯枢纽',
|
val: "t2"
|
},{
|
name: '辅助通讯枢纽',
|
val: "t3"
|
}
|
],
|
multipleSelection: [],
|
|
dialogVisible: false,
|
title: "",
|
editFrom: {
|
types: "",
|
}
|
};
|
},
|
created () { },
|
mounted () {
|
|
this.getTreeData();
|
//左右拖動
|
this.dragControllerDiv();
|
this.setTableDataStart();
|
},
|
methods: {
|
handleClose () {
|
this.title="";
|
this.dialogVisible=false;
|
this.editFrom.types=this.options[0].val
|
},
|
setSubMite () {
|
this.handleClose();
|
},
|
handlerInsert () {
|
this.title="新增";
|
this.dialogVisible=true;
|
},
|
handleEdit (index,row) {
|
this.editFrom=JSON.parse(JSON.stringify(row));
|
this.title="修改";
|
this.dialogVisible=true;
|
},
|
handlerDel () {
|
|
},
|
formatter (row,column) {
|
var obj=this.options.filter(res => {
|
if(row.types==res.val) {
|
return res;
|
}
|
});
|
return obj[0].name
|
},
|
setTableDataStart () {
|
this.tableData=[{
|
name: 'XXX链路1',
|
types: ' ',
|
coord: "",
|
bak: ""
|
},{
|
name: 'XXX链路2',
|
types: ' ',
|
coord: "",
|
bak: "",
|
}]
|
this.listData.count=this.tableData.length;
|
this.handleClose();
|
},
|
handleSelectionChange (res) {
|
this.multipleSelection=res;
|
},
|
handleSizeChange (val) {
|
console.log(`每页 ${val} 条`);
|
this.listData.pageSize.val;
|
},
|
handleCurrentChange (val) {
|
console.log(`当前页: ${val}`);
|
this.listData.pageIndex=val;
|
},
|
//左右拖動
|
dragControllerDiv: function() {
|
var resize=document.getElementsByClassName('resize');
|
var left=document.getElementsByClassName('left');
|
var mid=document.getElementsByClassName('mid');
|
var box=document.getElementsByClassName('box');
|
for(let i=0;i<resize.length;i++) {
|
// 鼠标按下事件
|
resize[i].onmousedown=function(e) {
|
//颜色改变提醒
|
resize[i].style.background='#818181';
|
var startX=e.clientX;
|
resize[i].left=resize[i].offsetLeft;
|
// 鼠标拖动事件
|
document.onmousemove=function(e) {
|
var endX=e.clientX;
|
var moveLen=resize[i].left+(endX-startX); // (endx-startx)=移动的距离。resize[i].left+移动的距离=左边区域最后的宽度
|
var maxT=box[i].clientWidth-resize[i].offsetWidth; // 容器宽度 - 左边区域的宽度 = 右边区域的宽度
|
|
if(moveLen<205) moveLen=205; // 左边区域的最小宽度为32px
|
if(moveLen>maxT-300) moveLen=maxT-300; //右边区域最小宽度为150px
|
|
resize[i].style.left=moveLen; // 设置左侧区域的宽度
|
|
for(let j=0;j<left.length;j++) {
|
left[j].style.width=moveLen+'px';
|
mid[j].style.width=(box[i].clientWidth-moveLen-10)+'px';
|
}
|
};
|
// 鼠标松开事件
|
document.onmouseup=function(evt) {
|
//颜色恢复
|
resize[i].style.background='#d6d6d6';
|
document.onmousemove=null;
|
document.onmouseup=null;
|
resize[i].releaseCapture&&resize[i].releaseCapture(); //当你不在需要继续获得鼠标消息就要应该调用ReleaseCapture()释放掉
|
};
|
resize[i].setCapture&&resize[i].setCapture(); //该函数在属于当前线程的指定窗口里设置鼠标捕获
|
return false;
|
};
|
}
|
},
|
|
|
|
//获取树
|
async getTreeData () {
|
const data=await queryMenuTree();
|
|
let menuLists=data.result.filter((value) => {
|
return value.url=="/commScheme";
|
});
|
this.pid=menuLists[0].id;
|
const res=await selectMenuRecursive({ id: menuLists[0].id });
|
|
if(res.code==200) {
|
if(res.result.length!=0) {
|
let menuList=res.result.filter((value) => {
|
return value.type==1;
|
});
|
this.menuList=this.treeData(menuList);
|
console.log(this.menuList)
|
this.m1=this.menuList[0].cnName;
|
this.setViewController(this.menuList[0]);
|
this.nodeName=this.m1
|
const hanleselectindex=sessionStorage.getItem('hanleselectindex')
|
if(hanleselectindex) {
|
this.$nextTick(function() {
|
this.handleselecttwo(JSON.parse(hanleselectindex).url,JSON.parse(hanleselectindex))
|
this.setViewController(JSON.parse(hanleselectindex))
|
})
|
}
|
} else {
|
|
this.$message.error('暂无菜单栏数据');
|
}
|
} else {
|
this.$message.error('接口报错');
|
}
|
|
// this.treeList = this.treeData(data.result);
|
},
|
setViewController (res) {
|
if(res.children!=null) {
|
this.setViewController(res.children[0]);
|
} else {
|
this.signInsertOpLog(this.m1,res.cnName)
|
this.$store.state.currentPerms=res.perms;
|
this.setMenuFlag=res.url;
|
this.activeIndex=res.url;
|
}
|
},
|
async signInsertOpLog (m1,m2) {
|
var obj={
|
m1: m1,
|
m2: m2,
|
}
|
// const data = await sign_insertOpLog(obj);
|
},
|
treeData (source) {
|
let cloneData=JSON.parse(JSON.stringify(source)); // 对源数据深度克隆
|
var that=this;
|
// console.log(cloneData);
|
if(cloneData.length!=0) {
|
return cloneData.filter((father) => {
|
// 循环所有项
|
let branchArr=cloneData.filter((child) => father.id==child.pid); // 对比ID,分别上下级菜单,并返回数据
|
branchArr.length>0? (father.children=branchArr):''; // 给父级添加一个children属性,并赋值
|
// 属于同一对象问题,例如:令 a=b、c=1 ,然后再令 b.c=c , 那么 a.c=b.c=c=1 ;同理,后续令 c.d=2 ,那么 a.c.d 也是=2;
|
// 由此循环多次后,就能形成相应的树形数据结构
|
return father.pid==that.pid; // 返回一级菜单
|
});
|
} else {
|
|
this.$message.error('暂无菜单栏数据');
|
}
|
},
|
|
handleselect (index,indexPath,e) {
|
const a=JSON.stringify(e.$attrs.perms)
|
this.signInsertOpLog(this.m1,e.$attrs.perms.cnName)
|
sessionStorage.setItem('hanleselectindex',a)
|
var data=e.$attrs.perms;
|
this.$store.state.currentPerms=data.perms;
|
var index=data.url;
|
|
if(index!=null) {
|
if(index.indexOf('http')!=-1) {
|
this.$store.commit('getIframe',data.url);
|
index='dataIfream';
|
}
|
}
|
this.setMenuFlag=index;
|
this.nodeName=data.cnName
|
},
|
|
handleselecttwo (index,e) {
|
const a=JSON.stringify(e)
|
sessionStorage.setItem('hanleselectindex',a)
|
var data=e;
|
this.$store.state.currentPerms=data.perms;
|
var index=data.url;
|
|
if(index!=null) {
|
if(index.indexOf('http')!=-1) {
|
this.$store.commit('getIframe',data.url);
|
index='dataIfream';
|
}
|
}
|
this.setMenuFlag=index;
|
},
|
},
|
};
|
</script>
|
|
<style lang="less" scoped>
|
.menuBox {
|
width: calc(100% - 20px);
|
height: calc(95% - 20px);
|
margin: 10px;
|
|
display: flex;
|
position: relative;
|
flex-direction: column;
|
.menuTitle {
|
display: flex;
|
justify-content: space-between;
|
margin-bottom: 10px;
|
}
|
.menuContent {
|
flex: 1;
|
}
|
.menupage {
|
margin-top: 10px;
|
}
|
}
|
</style>
|