379 lines
9.2 KiB
Vue
379 lines
9.2 KiB
Vue
<template>
|
||
<div class="user-edit-wrapper">
|
||
<el-dialog title="资源配置" :visible.sync="dialogVisible" width="50%" :before-close="handleClose">
|
||
<el-form ref="myform" :model="form" :rules="rules" label-width="80px" label-position="left">
|
||
<el-row>
|
||
<el-col :span="8">
|
||
<div class="grid-conten">
|
||
<el-form-item label="资源编号" prop="code">
|
||
<el-input v-model="form.code" autocomplete="off"></el-input>
|
||
</el-form-item>
|
||
</div>
|
||
</el-col>
|
||
<el-col :span="8">
|
||
<div class="grid-conten">
|
||
<el-form-item label="资源名" prop="name">
|
||
<el-input v-model="form.name" autocomplete="off"></el-input>
|
||
</el-form-item>
|
||
</div>
|
||
</el-col>
|
||
<el-col :span="8">
|
||
<div class="grid-conten">
|
||
<el-form-item label="icon" prop="icon">
|
||
<el-input v-model="form.icon" autocomplete="off"></el-input>
|
||
</el-form-item>
|
||
</div>
|
||
</el-col>
|
||
</el-row>
|
||
<el-row>
|
||
<el-col :span="12">
|
||
<div class="grid-conten">
|
||
<el-form-item label="资源描述" prop="des">
|
||
<el-input v-model="form.des" autocomplete="off"></el-input>
|
||
</el-form-item>
|
||
</div>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<div class="grid-conten">
|
||
<el-form-item label="访问路径" prop="url">
|
||
<el-input v-model="form.url" autocomplete="off"></el-input>
|
||
</el-form-item>
|
||
</div>
|
||
</el-col>
|
||
</el-row>
|
||
|
||
<el-row>
|
||
<el-col :span="8">
|
||
<div class="grid-conten">
|
||
<el-form-item label="菜单排序" prop="sort">
|
||
<el-input v-model="form.sort" autocomplete="off" minlength="1" maxlength="3"></el-input>
|
||
</el-form-item>
|
||
</div>
|
||
</el-col>
|
||
</el-row>
|
||
<el-row>
|
||
<el-col :span="8">
|
||
<div class="grid-conten">
|
||
<el-form-item label="系统分类" prop="sort">
|
||
|
||
<el-select v-model="form.resourceSystem" placeholder="请选择" @change="gettreeList(parentId)">
|
||
<el-option :label="value.label" :value="value.value" v-for="value in systemList" :key="value.value"></el-option>
|
||
|
||
</el-select>
|
||
|
||
</el-form-item>
|
||
</div>
|
||
</el-col>
|
||
</el-row>
|
||
|
||
<el-divider></el-divider>
|
||
<el-row>
|
||
<el-col :span="24">
|
||
<div class="grid-conten">
|
||
<h3 style="margin-bottom:30px">
|
||
父类资源:
|
||
</h3>
|
||
</div>
|
||
</el-col>
|
||
</el-row>
|
||
|
||
<el-row>
|
||
<el-col :span="24">
|
||
<div class="grid-conten">
|
||
<el-tree ref="tree" :props="props" node-key="resourceId" :data="systemList.find(x=>x.value==this.form.resourceSystem)?systemList.find(x=>x.value==this.form.resourceSystem).data:[]" :key="num"
|
||
:current-node-key="checkedKeys" :highlight-current="true" @node-click="handleNodeClick">
|
||
</el-tree>
|
||
<div style="padding: 20px;display: flex;justify-content: flex-end;">
|
||
<el-button type="primary" @click="stick" size="mini">置为顶层目录</el-button>
|
||
</div>
|
||
</div>
|
||
</el-col>
|
||
</el-row>
|
||
|
||
<el-form-item class="btn-group">
|
||
<el-button type="primary" @click="onSubmit('myform')">确认</el-button>
|
||
<el-button @click="handleClose()">取消</el-button>
|
||
</el-form-item>
|
||
</el-form>
|
||
</el-dialog>
|
||
</div>
|
||
</template>
|
||
<script>
|
||
import {
|
||
getResourceTreeMenu,
|
||
resourceUpdate,
|
||
resourceSave
|
||
} from '@/api/index.js'
|
||
import mixin from '@/utils/mixin.js'
|
||
export default {
|
||
name: 'resourceDialog',
|
||
mixins:[mixin],
|
||
props: {
|
||
dialogVisible: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
dataItem: {
|
||
type: Object,
|
||
default () {
|
||
return {}
|
||
}
|
||
}
|
||
},
|
||
watch: {
|
||
dataItem(newVal) {
|
||
console.log(newVal)
|
||
|
||
},
|
||
dialogVisible: function(val, oldVla) {
|
||
if (this.$refs['myform'] != undefined) {
|
||
this.$refs["myform"].resetFields();
|
||
}
|
||
|
||
}
|
||
},
|
||
created() {
|
||
this.form.resourceSystem =this.systemList[0]?this.systemList[0].value:''
|
||
|
||
if(this.dataItem.name){
|
||
// this.dataItem = newVal;
|
||
if (JSON.stringify(this.dataItem) !== '{}') {
|
||
this.form = {
|
||
"name": this.dataItem.name,
|
||
"code": this.dataItem.code,
|
||
"url": this.dataItem.url,
|
||
"parentId": this.dataItem.parentId,
|
||
"des": this.dataItem.des,
|
||
"icon": this.dataItem.icon,
|
||
"sort": this.dataItem.sort,
|
||
"resourceSystem": this.dataItem.resourceSystem,
|
||
}
|
||
this.parentId = this.dataItem.parentId;
|
||
this.checkedKeys = this.dataItem.parentId;
|
||
console.log(this.dataItem,this.form)
|
||
// this.resourceSystem = this.dataItem.resourceSystem
|
||
}
|
||
}
|
||
|
||
|
||
this.gettreeList(this.parentId);
|
||
},
|
||
|
||
data() {
|
||
let checkSort = (rule, value, callback) => {
|
||
console.log(value)
|
||
if (value === 0) {
|
||
return callback(new Error('超出可选范围(1-100)'));
|
||
}
|
||
if (!value) {
|
||
return callback(new Error('菜单排序不能为空'));
|
||
} else {
|
||
if (value > 0 && value <= 100) {
|
||
callback();
|
||
} else {
|
||
return callback(new Error('超出可选范围(1-100)'));
|
||
}
|
||
}
|
||
|
||
};
|
||
return {
|
||
num:0,
|
||
form: {
|
||
name: "",
|
||
code: "",
|
||
url: "",
|
||
parentId: 0,
|
||
des: "",
|
||
icon: "",
|
||
sort: 1,
|
||
resourceSystem: ""
|
||
},
|
||
parentId: 0,
|
||
rules: {
|
||
name: [{
|
||
required: true,
|
||
message: '请输入资源名称',
|
||
trigger: 'blur'
|
||
}],
|
||
code: [{
|
||
required: true,
|
||
message: '请输入资源编号',
|
||
trigger: 'blur'
|
||
}],
|
||
des: [{
|
||
required: true,
|
||
message: '请输入资源描述',
|
||
trigger: 'blur'
|
||
}],
|
||
sort: [{
|
||
validator: checkSort,
|
||
required: true,
|
||
trigger: 'blur'
|
||
}],
|
||
resourceSystem: [{
|
||
required: true,
|
||
message: '请选择系统分类',
|
||
trigger: 'blur'
|
||
}],
|
||
},
|
||
props: {
|
||
label: 'name',
|
||
children: 'children'
|
||
},
|
||
|
||
// 默认选中节点
|
||
checkedKeys: ""
|
||
}
|
||
},
|
||
methods: {
|
||
stick(){
|
||
this.parentId = 0
|
||
this.form.parentId = 0
|
||
this.checkedKeys = 0
|
||
this.num++
|
||
|
||
console.log(this.parentId,this.form.parentId,this.checkedKeys)
|
||
},
|
||
handleNodeClick(data) {
|
||
this.form.parentId = data.resourceId;
|
||
},
|
||
getTreeData(data) {
|
||
let treeArr = data;
|
||
let result = []
|
||
for (let i = 0; i < treeArr.length; i++) {
|
||
let item = treeArr[i];
|
||
if (item.parentId === 0) {
|
||
result.push(item);
|
||
}
|
||
}
|
||
this.data2treeDG(treeArr, result);
|
||
},
|
||
data2treeDG(datas, dataArray, type) {
|
||
for (let j = 0; j < dataArray.length; j++) {
|
||
let dataArrayIndex = dataArray[j];
|
||
let childrenArray = [];
|
||
let Id = dataArrayIndex.resourceId;
|
||
if (dataArrayIndex.checked) {
|
||
this.checkedKeys = dataArrayIndex.resourceId
|
||
}
|
||
for (let i = 0; i < datas.length; i++) {
|
||
let data = datas[i];
|
||
let parentId = data.parentId;
|
||
if (parentId == Id) { //判断是否为儿子节点
|
||
childrenArray.push(data);
|
||
}
|
||
}
|
||
dataArrayIndex.children = childrenArray;
|
||
if (childrenArray.length > 0) { //有儿子节点则递归
|
||
this.data2treeDG(datas, childrenArray)
|
||
}
|
||
}
|
||
|
||
this.systemList.find(x=>x.value==this.form.resourceSystem).data = dataArray;
|
||
// console.log(this.systemList)
|
||
},
|
||
// 新增或编辑
|
||
onSubmit(myForm) {
|
||
let form = this.form;
|
||
this.$refs[myForm].validate((valid) => {
|
||
if (valid) {
|
||
if (JSON.stringify(this.dataItem) == '{}') {
|
||
// 新增
|
||
this.saveResource(form);
|
||
} else {
|
||
// 编辑
|
||
form.resourceId = this.dataItem.resourceId
|
||
this.updateResource(form);
|
||
}
|
||
} else {
|
||
return false;
|
||
}
|
||
});
|
||
},
|
||
async updateResource(form) {
|
||
const data = await resourceUpdate(form)
|
||
if (data.status != "0") {
|
||
if (data.data) {
|
||
this.$message({
|
||
message: '修改成功!',
|
||
type: 'success'
|
||
});
|
||
this.handleClose();
|
||
}
|
||
}
|
||
},
|
||
async saveResource(form) {
|
||
const data = await resourceSave(form)
|
||
if (data.status != "0") {
|
||
if (data.data) {
|
||
this.$message({
|
||
message: '添加成功!',
|
||
type: 'success'
|
||
});
|
||
this.handleClose();
|
||
}
|
||
}
|
||
},
|
||
async gettreeList(id) {
|
||
if(this.systemList.find(x=>x.value==this.form.resourceSystem).data) return
|
||
const data = await getResourceTreeMenu({
|
||
"parentId": id,
|
||
entity:{
|
||
"resourceSystem":this.form.resourceSystem
|
||
}
|
||
})
|
||
if (data.status != "0") {
|
||
this.getTreeData(data.data);
|
||
this.$nextTick(() => {
|
||
if (this.parentId != 0) {
|
||
this.$refs.tree.setCurrentKey(this.checkedKeys)
|
||
}
|
||
})
|
||
}
|
||
},
|
||
handleClose() {
|
||
this.form = {
|
||
"name": "",
|
||
"code": "",
|
||
"url": "",
|
||
"parentId": null,
|
||
"des": "",
|
||
"icon": "",
|
||
"sort": 1,
|
||
"resourceSystem": "EngineX"
|
||
}
|
||
this.systemList.forEach(value=>{
|
||
value.data = null
|
||
})
|
||
|
||
|
||
this.$refs["myform"].resetFields();
|
||
this.$emit('closeEvent');
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style>
|
||
.el-dialog__body {
|
||
padding: 20px 40px;
|
||
}
|
||
|
||
.user-edit-wrapper .el-input {
|
||
width: 80%;
|
||
}
|
||
|
||
.user-edit-wrapper .btn-group {
|
||
margin-top: 30px;
|
||
}
|
||
|
||
.user-edit-wrapper .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content {
|
||
background: #409EFF;
|
||
color: #fff;
|
||
}
|
||
|
||
.user-edit-wrapper .is-checked {
|
||
background: #F5F7FA;
|
||
}
|
||
</style>
|