Files
fibo-rule/h5-auth-manager/src/components/models/addResourceDialog.vue
2022-07-14 12:55:31 +08:00

379 lines
9.2 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<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>