<template>
|
<div class="subpage_Box">
|
<My-bread :list="[
|
`${$t('dataManage.dataManage')}`,
|
`${$t('dataManage.catalogueManage')}`,
|
]"></My-bread>
|
<el-divider />
|
<div class="cataLogContent">
|
<div class="cataLog_leftTree subpage_Div">
|
<div style="min-width:450px">
|
<el-tree
|
ref="tree"
|
:props="defaultProps"
|
node-key="id"
|
:data="dirList"
|
:highlight-current="true"
|
:expand-on-click-node="false"
|
:default-expanded-keys="expandData"
|
@node-click="handleNodeClick"
|
>
|
|
</el-tree>
|
</div>
|
</div>
|
<div class="cataLog_rightContent subpage_Div">
|
<div style="display:flex;justify-content:space-between">
|
<el-breadcrumb separator="/">
|
<el-breadcrumb-item :to="{ path: '/' }">{{
|
$t('dataManage.dictionaryManageObj.particulars')
|
}}</el-breadcrumb-item>
|
</el-breadcrumb>
|
<div>
|
|
<div class="menuTop">
|
<el-form
|
:inline="true"
|
class="demo-form-inline"
|
>
|
<el-form-item>
|
|
<el-upload
|
action
|
accept=".xlsx, .xls"
|
:auto-upload="false"
|
:show-file-list="false"
|
:on-change="handleChange"
|
:file-list="fileList"
|
>
|
<el-button
|
type="success"
|
icon="el-icon-plus"
|
size="small"
|
>上传文件</el-button>
|
</el-upload>
|
|
</el-form-item>
|
<el-form-item>
|
<el-button
|
v-if="menuStatus.insert"
|
:disabled="itemdetail.pid == null ? true : false"
|
@click="setNewNode(1)"
|
type="success"
|
icon="el-icon-plus"
|
size="small"
|
>新增同级</el-button>
|
</el-form-item>
|
<el-form-item>
|
<el-button
|
v-if="menuStatus.insert"
|
:disabled="itemdetail.pid == null ? true : false"
|
@click="setNewNode(2)"
|
type="success"
|
icon="el-icon-plus"
|
size="small"
|
>新增子级</el-button>
|
</el-form-item>
|
<el-form-item>
|
<el-button
|
v-if="menuStatus.delete"
|
@click="setDelNode()"
|
:disabled="itemdetail.pid == null ? true : false"
|
type="danger"
|
icon="el-icon-delete"
|
size="small"
|
>删除</el-button>
|
</el-form-item>
|
<el-form-item>
|
<el-button
|
v-if="menuStatus.update"
|
:disabled="itemdetail.pid == null ? true : false"
|
@click="setEditNode(1)"
|
type="info"
|
icon="el-icon-top"
|
size="small"
|
>向上移动</el-button>
|
</el-form-item>
|
<el-form-item>
|
<el-button
|
v-if="menuStatus.update"
|
:disabled="itemdetail.pid == null ? true : false"
|
@click="setEditNode(2)"
|
type="info"
|
icon="el-icon-bottom"
|
size="small"
|
>向下移动</el-button>
|
</el-form-item>
|
|
</el-form>
|
</div>
|
|
</div>
|
</div>
|
<el-divider />
|
<el-form
|
:model="itemdetail"
|
ref="itemdetail"
|
:rules="rules"
|
>
|
<el-form-item
|
prop="name"
|
:label="$t('dataManage.dataUpObj.directoryName')"
|
:label-width="formLabelWidth"
|
>
|
<el-input v-model="itemdetail.name" />
|
</el-form-item>
|
<el-form-item
|
:label="$t('dataManage.dataUpObj.catalogDescription')"
|
:label-width="formLabelWidth"
|
>
|
<el-input
|
v-model="itemdetail.descr"
|
type="textarea"
|
resize="none"
|
style="height: 100%; overflow: auto"
|
/>
|
</el-form-item>
|
<el-form-item
|
:label="$t('dataManage.dataUpObj.catalogRemarks')"
|
:label-width="formLabelWidth"
|
>
|
<el-input
|
v-model="itemdetail.bak"
|
type="textarea"
|
resize="none"
|
/>
|
</el-form-item>
|
<div class="btnBox">
|
<el-button
|
v-if="menuStatus.update"
|
class="primary"
|
size="small"
|
@click="updCata('itemdetail')"
|
>{{
|
$t('common.preservation')
|
}}</el-button>
|
<el-button
|
v-if="menuStatus.update"
|
type="info"
|
size="small"
|
@click="reset"
|
>{{
|
$t('common.cancel')
|
}}</el-button>
|
</div>
|
</el-form>
|
</div>
|
</div>
|
<!-- <div class="cataSettings_tree"> -->
|
|
<!-- <div class="cataTreeBox">
|
|
</div> -->
|
<!-- </div> -->
|
<!-- <div class="itemSettings"> -->
|
<!-- <div class="title_box">
|
<h4>详细信息</h4>
|
</div> -->
|
<!-- <div class="form_box">
|
|
</div> -->
|
<!-- </div> -->
|
<el-dialog
|
:title="$t('dataManage.dataUpObj.newDirectory')"
|
:visible.sync="dialogFormVisible"
|
:before-close="handleClose"
|
>
|
<el-form
|
:model="ruleForm"
|
ref="ruleForm"
|
:rules="rules"
|
>
|
<el-form-item
|
:label="$t('dataManage.dataUpObj.directoryName')"
|
prop="name"
|
:label-width="formLabelWidth"
|
>
|
<el-input
|
v-model="ruleForm.name"
|
autocomplete="off"
|
></el-input>
|
</el-form-item>
|
<el-form-item
|
:label="$t('dataManage.dataUpObj.catalogDescription')"
|
:label-width="formLabelWidth"
|
>
|
<el-input
|
v-model="ruleForm.descr"
|
autocomplete="off"
|
></el-input>
|
</el-form-item>
|
<el-form-item
|
:label="$t('dataManage.dataUpObj.catalogRemarks')"
|
:label-width="formLabelWidth"
|
>
|
<el-input
|
v-model="ruleForm.bak"
|
autocomplete="off"
|
></el-input>
|
</el-form-item>
|
</el-form>
|
<div
|
slot="footer"
|
class="dialog-footer"
|
>
|
<el-button @click="resetForm('ruleForm')">{{
|
$t('common.cancel')
|
}}</el-button>
|
<el-button
|
class="primary"
|
@click="submitForm('ruleForm')"
|
v-loading.fullscreen.lock="fullscreenLoading"
|
>{{ $t('common.preservation') }}</el-button>
|
</div>
|
</el-dialog>
|
</div>
|
</template>
|
|
<script>
|
import {
|
queryDirTree,
|
queryMaxId,
|
updateDirTree,
|
updateDirTrees,
|
insertDir,
|
deleteDir,
|
getPerms,
|
} from '../../api/api';
|
import * as XSLX from 'xlsx';
|
import MyBread from '../../components/MyBread.vue';
|
import clone from '@turf/clone';
|
export default {
|
name: 'catalogueManage',
|
components: {
|
MyBread,
|
},
|
data() {
|
let validName = (rule, value, callback) => {
|
if (value === '' || value === null || value === undefined) {
|
return callback(new Error('目录名称不能为空'));
|
} else {
|
callback();
|
}
|
};
|
return {
|
menuStatus: {
|
delete: false,
|
insert: false,
|
update: false,
|
},
|
defaultProps: {
|
children: 'children',
|
label: 'name',
|
},
|
fullscreenLoading: false,
|
oriData: [], //原始树数据
|
dirList: [], //el树数据
|
old_dirDat: [], //el树数据(拖动前)
|
newData: [], //拖动后原始数据
|
itemdetail: {},
|
itemaName: null,
|
backUpData: '',
|
formLabelWidth: '150px',
|
delChildID: '',
|
delChildIDs: [],
|
dialogFormVisible: false,
|
ruleForm: {
|
level: null,
|
orderNum: null,
|
pid: null,
|
name: '',
|
descr: '',
|
bak: '',
|
},
|
rules: {
|
name: [{ required: true, validator: validName, trigger: 'blur' }],
|
},
|
newNode: null,
|
expandData: [],
|
fileList: [],
|
file: null,
|
tableData: [],
|
};
|
},
|
methods: {
|
handleChange(file, fileList) {
|
this.file = file;
|
if (fileList.length > 0) {
|
this.fileList = [fileList[fileList.length - 1]]; //这一步,是 展示最后一次选择文件;
|
this.handle();
|
}
|
},
|
async handle() {
|
let file = this.file?.raw;
|
if (!this.file) {
|
console.log("文件打开失败");
|
return;
|
} else {
|
const reader = new FileReader();
|
let that = this;
|
reader.readAsArrayBuffer(file);
|
reader.onload = function () {
|
const buffer = reader.result;
|
const bytes = new Uint8Array(buffer);
|
const length = bytes.byteLength;
|
let binary = "";
|
for (let i = 0; i < length; i++) {
|
binary += String.fromCharCode(bytes[i]);
|
}
|
const XLSX = require("xlsx");
|
const wb = XLSX.read(binary, {
|
type: "binary"
|
});
|
const outdata = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]], { defval: null }); // 默认第一行下为空也能解析出第一四行
|
var data = [...outdata];
|
const arr = [];
|
data.map(v => {
|
const obj = {};
|
obj.name = v.name;
|
obj.pname = v.pname;
|
obj.descr = v.explain;
|
obj.bak = v.bak;
|
obj.orderNum = null;
|
obj.pid = null;
|
arr.push(obj);
|
});
|
that.tableData = arr
|
that.setInsertData(that.tableData)
|
}
|
}
|
},
|
setInsertData(res) {
|
var list = this.excelData(res);
|
|
if (list.length != 0) {
|
if (list[0].pname != null) {
|
return this.$message.error('上传数据错误,第一条数据不为空');
|
}
|
|
this.getAllNodeId(list)
|
}
|
},
|
async getAllNodeId(res) {
|
for (let i = 0; i < res.length; i++) {
|
|
var val = res[i];
|
|
if (val.pname == null) {
|
val.orderNum = this.dirList[this.dirList.length - 1].orderNum + 1;
|
val.pid = 0;
|
} else {
|
this.tableData.filter((child) => {
|
if (child.name == val.pname) {
|
|
val.pid = child.id;
|
val.orderNum = i + 1;
|
}
|
})
|
}
|
|
const data = await insertDir(val);
|
if (data.code != 200) {
|
|
}
|
this.tableData.filter((child) => {
|
if (child.name == val.name && child.pname == val.pname) {
|
child.id = data.result;
|
}
|
})
|
this.itemaName = data.result;
|
this.getDirTree();
|
|
|
|
if (res[i].children) {
|
this.getAllNodeId(res[i].children)
|
}
|
}
|
},
|
excelData(source) {
|
let cloneData = JSON.parse(JSON.stringify(source)); // 对源数据深度克隆
|
return cloneData.filter((father) => {
|
// 循环所有项
|
let branchArr = cloneData.filter((child) => father.name == child.pname); // 对比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.pname == null; // 返回一级菜单
|
});
|
},
|
readFile(file) {
|
//文件读取
|
return new Promise(resolve => {
|
let reader = new FileReader();
|
reader.readAsBinaryString(file); //以二进制的方式读取
|
reader.onload = ev => {
|
resolve(ev.target.result);
|
};
|
});
|
},
|
|
// 请求目录树
|
getDirTree() {
|
//获取目录树最大ID,新建节点使用
|
// queryMaxId().then((res) => {
|
// this.id = res.data;
|
// });
|
// 获取目录树数据
|
queryDirTree().then((res) => {
|
// console.log(res);
|
if (res.code == 200) {
|
this.oriData = res.result;
|
this.newData = res.result;
|
this.dirList = this.treeData(res.result);
|
// this.$nextTick(() => {
|
|
// this.expandData=[15]
|
// this.$refs.tree.setCurrentKey(15);
|
|
// });
|
if (this.itemaName != null) {
|
this.$nextTick(() => {
|
|
this.expandData = [this.itemaName]
|
this.$refs.tree.setCurrentKey(this.itemaName);
|
|
});
|
}
|
|
|
} else {
|
console.log('接口报错');
|
}
|
});
|
},
|
handleClose() {
|
this.$confirm('确认关闭?')
|
.then((_) => {
|
this.resetForm();
|
})
|
.catch((_) => { });
|
},
|
treeData(source) {
|
let cloneData = JSON.parse(JSON.stringify(source)); // 对源数据深度克隆
|
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 == 0; // 返回一级菜单
|
});
|
},
|
setEditNode(res) {
|
let node = this.$refs.tree.getCurrentNode();
|
let pchildNodes = this.$refs.tree.getNode(node.id).parent.childNodes;
|
let currentId = {};
|
for (let i = 0; i < pchildNodes.length; i++) {
|
if (pchildNodes[i].data.id == node.id) {
|
currentId = i;
|
}
|
}
|
switch (res) {
|
case 1://向上移动
|
if (currentId != 0) {
|
const tempChildrenNodex1 = pchildNodes[currentId - 1];
|
const tempChildrenNodex2 = pchildNodes[currentId];
|
tempChildrenNodex2.orderNum = pchildNodes[currentId - 1].data.orderNum;
|
tempChildrenNodex1.orderNum = pchildNodes[currentId].data.orderNum
|
var arr = [];
|
this.oriData.filter(res => {
|
if (res.id == tempChildrenNodex2.data.id) {
|
res.orderNum = tempChildrenNodex2.orderNum;
|
arr.push(res)
|
} else if (res.id == tempChildrenNodex1.data.id) {
|
res.orderNum = tempChildrenNodex1.orderNum;
|
arr.push(res)
|
}
|
|
})
|
this.newData = arr;
|
this.sendChange();
|
} else {
|
this.$message({
|
message: '处于顶端,不能继续上移',
|
type: 'warning'
|
});
|
}
|
break;
|
case 2://向下移动
|
if (currentId < (pchildNodes.length - 1)) {
|
const tempChildrenNodex1 = pchildNodes[currentId + 1];
|
const tempChildrenNodex2 = pchildNodes[currentId];
|
tempChildrenNodex2.orderNum = pchildNodes[currentId + 1].data.orderNum;
|
tempChildrenNodex1.orderNum = pchildNodes[currentId].data.orderNum;
|
var arr = [];
|
this.oriData.filter(res => {
|
if (res.id == tempChildrenNodex2.data.id) {
|
res.orderNum = tempChildrenNodex2.orderNum;
|
arr.push(res)
|
} else if (res.id == tempChildrenNodex1.data.id) {
|
res.orderNum = tempChildrenNodex1.orderNum;
|
arr.push(res)
|
}
|
})
|
this.newData = arr;
|
this.sendChange();
|
} else {
|
this.$message({
|
message: '处于底端,不能继续下移',
|
type: 'warning'
|
});
|
|
}
|
break;
|
|
}
|
},
|
setDelNode() {
|
this.$confirm('此操作将永久删除该目录, 是否继续?', '提示', {
|
confirmButtonText: '确定',
|
cancelButtonText: '取消',
|
type: 'warning'
|
}).then(() => {
|
this.remove(this.newNode, this.itemdetail)
|
}).catch(() => {
|
this.$message({
|
type: 'info',
|
message: '已取消删除'
|
});
|
});
|
},
|
setNewNode(res) {
|
var id, lever, orderNum;
|
if (res == 1) {//新增同级
|
id = this.itemdetail.pid;
|
orderNum = this.getMaxOrderNum(this.newNode.parent.childNodes)
|
lever = this.itemdetail.level;
|
} else if (res == 2) {//新增子级
|
id = this.itemdetail.id;
|
orderNum = this.getMaxOrderNum(this.newNode.childNodes)
|
lever = this.itemdetail.level + 1;
|
}
|
|
this.ruleForm.pid = id;
|
this.ruleForm.level = lever;
|
this.ruleForm.orderNum = orderNum
|
this.dialogFormVisible = true;
|
},
|
getMaxOrderNum(res) {
|
var val = -100;
|
for (var i in res) {
|
if (res[i].data.orderNum > val) {
|
val = res[i].data.orderNum
|
}
|
}
|
val = val + 1;
|
return val;
|
},
|
|
|
|
append(node, data) {
|
this.dialogFormVisible = true;
|
this.ruleForm.pid = data.id;
|
this.ruleForm.orderNum = node.childNodes.length + 1;
|
this.ruleForm.level = data.level + 1;
|
},
|
resetForm(formName) {
|
this.dialogFormVisible = false;
|
this.ruleForm = {};
|
this.$nextTick(() => {
|
this.ruleForm = {};
|
this.$refs[formName].resetFields();
|
});
|
},
|
submitForm(formName) {
|
this.$nextTick(() => {
|
this.$refs[formName].validate((valid) => {
|
if (valid) {
|
this.fullscreenLoading = true;
|
insertDir(this.ruleForm)
|
.then((res) => {
|
setTimeout(() => {
|
this.fullscreenLoading = false;
|
|
if (res.code == 200) {
|
this.$message({
|
message: '添加成功',
|
type: 'success',
|
});
|
this.itemaName = res.result;
|
this.itemdetail = {};
|
this.ruleForm = {};
|
this.dialogFormVisible = false;
|
this.$refs[formName].resetFields();
|
this.getDirTree();
|
}
|
}, 500);
|
})
|
.catch((res) => {
|
this.itemdetail = {};
|
this.$message.error('添加失败');
|
this.fullscreenLoading = false;
|
console.log(res);
|
});
|
} else {
|
// alert("目录名称不能为空");
|
return false;
|
}
|
});
|
});
|
},
|
remove(node, data) {
|
this.itemaName = node.parent.data.id;
|
|
this.$confirm('此操作将删除该节点, 是否继续?', '提示', {
|
confirmButtonText: '确定',
|
cancelButtonText: '取消',
|
type: 'warning',
|
})
|
.then(() => {
|
//兄弟重新排序
|
const parent = node.parent;
|
const children = parent.data.children || parent.data;
|
children.splice(data.orderNum - 1, 1);
|
children.forEach((item, index) => {
|
item.orderNum = index + 1;
|
});
|
|
this.traverseArr(data); //获取删除的子ID
|
this.delChildIDs.push(data.id); //要删除的全部ID
|
let delIDs = this.delChildIDs;
|
Promise.all([
|
deleteDir({ ids: delIDs.toString() }),
|
updateDirTrees(children),
|
])
|
.then((res) => {
|
if (res[0].code == 200 && res[1].code == 200) {
|
this.$message({
|
type: 'success',
|
message: '删除成功!',
|
});
|
this.itemdetail = {};
|
|
this.getDirTree();
|
} else if (res[0].code == 200) {
|
this.$message.error('删除成功,位置调整失败');
|
} else if (res[1].code == 200) {
|
this.$message.error('删除失败,位置调整成功');
|
} else {
|
this.$message.error('删除失败');
|
}
|
})
|
.catch(() => {
|
this.$message.error('删除失败');
|
this.itemdetail = {};
|
});
|
//重置要删除的子ID
|
this.delChildIDs = [];
|
})
|
.catch(() => {
|
this.$message('已取消删除');
|
});
|
// this.dialogMessage="是否删除"
|
// this.dialogFlag = 1;
|
// this.dialogFrom ={
|
// node:node,
|
// val:data
|
// }
|
// this.dialogVisible=true;//目录树更改弹窗
|
// const parent = node.parent;
|
// const children = parent.data.children || parent.data;
|
// const index = children.findIndex((d) => d.id === data.id);
|
// let res = children.splice(index, 1);
|
// // console.log(res);
|
// // console.log(data);
|
// console.log(this.flaten(res));
|
},
|
traverseArr(obj) {
|
if (obj.children) {
|
return obj.children.forEach((item) => {
|
// console.log(item.id + "---" + item.name);
|
// this.delChildID += "id=" + item.id + "&";
|
this.delChildIDs.push(item.id);
|
this.traverseArr(item);
|
});
|
}
|
return;
|
},
|
flaten(arr) {
|
return arr.reduce((p, v, i) => {
|
for (let i = 0; i < p.length; i++) {
|
if (p[i].children) {
|
delete p[i].children;
|
}
|
}
|
return p.concat(v.children ? this.flaten(v.children).concat(v) : v);
|
}, []);
|
},
|
handleDragStart(node, ev) {
|
this.old_dirDat = JSON.parse(JSON.stringify(this.dirList)); //将备份的dir重新赋值
|
},
|
handleDrop(draggingNode, dropNode, dropType, ev) {
|
this.$confirm('此操作将保存目录更改, 是否继续?', '提示', {
|
confirmButtonText: '确定',
|
cancelButtonText: '取消',
|
type: 'warning',
|
})
|
.then(() => {
|
//父节点
|
let data = dropType != 'inner' ? dropNode.parent.data : dropNode.data;
|
// 父节点中全部子节点
|
let nodeData =
|
dropNode.level == 1 && dropType != 'inner' ? data : data.children;
|
//变更节点
|
nodeData.forEach((item, i) => {
|
if (dropType != 'inner') {
|
if (draggingNode.data.pid === dropNode.data.pid) {
|
item.pid = item.pid;
|
} else {
|
item.pid = dropNode.data.pid;
|
}
|
} else {
|
item.pid = data.id;
|
}
|
item.orderNum = i + 1;
|
});
|
// console.log(nodeData);
|
//更新原始整体数据
|
let arr = [];
|
this.oriData.forEach((e) => {
|
nodeData.forEach((item) => {
|
if (item.id === e.id) e = item;
|
});
|
arr.push(e);
|
});
|
this.newData = arr;
|
this.sendChange();
|
})
|
.catch(() => {
|
this.$message('已取消更改');
|
this.dirList = this.old_dirDat; //将备份的dir重新赋值
|
});
|
},
|
sendChange() {
|
updateDirTrees(this.newData)
|
.then((res) => {
|
if (res.code == 200) {
|
this.getDirTree();
|
return;
|
} else {
|
this.$message.error('修改失败,请重试!');
|
}
|
})
|
.catch(() => {
|
this.$message.error('修改失败,请重试!');
|
});
|
},
|
handleNodeClick(data, node) {
|
// console.log(data);
|
|
this.newNode = node;
|
this.backUpData = JSON.stringify(data);
|
this.itemdetail = JSON.parse(JSON.stringify(data));
|
},
|
updCata(formName) {
|
this.$nextTick(() => {
|
this.$refs[formName].validate((valid) => {
|
if (valid) {
|
this.fullscreenLoading = true;
|
updateDirTree(this.itemdetail)
|
.then((res) => {
|
setTimeout(() => {
|
this.fullscreenLoading = false;
|
if (res.code == 200) {
|
this.getDirTree();
|
this.itemdetail = {};
|
this.dialogFormVisible = false;
|
}
|
}, 500);
|
})
|
.catch((res) => {
|
this.$message.error('修改失败,请重试!');
|
this.fullscreenLoading = false;
|
});
|
} else {
|
return false;
|
}
|
});
|
});
|
},
|
reset(formName) {
|
this.itemdetail = {};
|
// this.$refs[formName].resetFields();
|
if (this.backUpData != '') {
|
this.itemdetail = JSON.parse(this.backUpData);
|
}
|
},
|
showPermsMenu(res) {
|
|
switch (res.tag) {
|
case '/delete':
|
this.menuStatus.delete = true;
|
break;
|
case '/insert':
|
this.menuStatus.insert = true;
|
break;
|
case '/update':
|
this.menuStatus.update = true;
|
break;
|
}
|
},
|
getPerms() {
|
var val = this.$store.state.currentPerms;
|
var permsEntity = this.$store.state.permsEntity;
|
if (!permsEntity || !permsEntity.length) {
|
getPerms().then((res) => {
|
if (res.code == 200) {
|
permsEntity = res.result;
|
}
|
});
|
}
|
for (var i = 0; i < permsEntity.length; i++) {
|
if (val === permsEntity[i].perms) {
|
|
this.showPermsMenu(permsEntity[i]);
|
}
|
}
|
},
|
},
|
mounted() {
|
this.getDirTree();
|
this.getPerms();
|
},
|
};
|
</script>
|
|
<style lang="less" scoped>
|
.subpage_Box {
|
height: 98%;
|
width: 98%;
|
padding: 1%;
|
.cataLogContent {
|
width: 100%;
|
height: 92%;
|
display: flex;
|
justify-content: space-between;
|
.cataLog_leftTree {
|
width: 15%;
|
height: 91%;
|
border-radius: 5px;
|
padding: 1%;
|
overflow-y: auto;
|
}
|
.cataLog_rightContent {
|
width: 80%;
|
height: 91%;
|
border-radius: 5px;
|
padding: 1%;
|
.menuTop {
|
/deep/ .el-form-item {
|
margin-bottom: 0px;
|
}
|
}
|
}
|
}
|
}
|
</style>
|