<template>
|
<!--
|
作者:参考 auth/role/add
|
时间:2026-01-21
|
描述:区域代理商-角色管理-添加角色
|
-->
|
<div v-loading="loading">
|
<!--form表单-->
|
<el-form size="small" ref="form" :model="form" :rules="formRules" label-width="180px">
|
<!--添加门店-->
|
<div class="common-form">添加角色</div>
|
|
<el-form-item label="角色名称:" prop="role_name">
|
<el-input v-model="form.role_name" placeholder="请输入角色名称" class="max-w460"></el-input>
|
</el-form-item>
|
|
<el-form-item label="权限列表:" v-model="form.access_id">
|
<el-tree :data="treeData" show-checkbox node-key="access_id" :default-expand-all="true" :default-checked-keys="[]" :props="defaultProps" @check="handleCheckChange"></el-tree>
|
</el-form-item>
|
|
<el-form-item label="排序:"><el-input type="number" v-model="form.sort" placeholder="请输入排序数字,数字越小越靠前" class="max-w460"></el-input></el-form-item>
|
|
<!--提交-->
|
<div class="common-button-wrapper">
|
<el-button size="small" type="info" @click="cancelFunc">取消</el-button>
|
<el-button type="primary" size="small" @click="onSubmit" :loading="loading">提交</el-button>
|
</div>
|
</el-form>
|
</div>
|
</template>
|
|
<script>
|
import PlusApi from '@/api/plus/region.js';
|
|
export default {
|
data() {
|
return {
|
/*是否正在加载*/
|
loading:true,
|
/*form表单数据对象*/
|
form: {
|
access_id: [],
|
sort: 100
|
},
|
data: [], // 原始数据
|
treeData: [], // 树形结构数据
|
roleList: [],
|
defaultProps: {
|
children: 'children',
|
label: 'name'
|
},
|
/*form验证*/
|
formRules: {
|
role_name: [
|
{
|
required: true,
|
message: '请输入角色名称',
|
trigger: 'blur'
|
}
|
],
|
sort: [
|
{
|
required: true,
|
message: '请输入排序',
|
trigger: 'blur'
|
}
|
]
|
},
|
};
|
},
|
created() {
|
/*获取数据*/
|
this.getData();
|
},
|
methods: {
|
/*添加角色*/
|
onSubmit() {
|
let self = this;
|
let form = self.form;
|
self.$refs.form.validate(valid => {
|
if (valid) {
|
self.loading = true;
|
PlusApi.regionRoleAdd({
|
params: JSON.stringify(form)
|
}, true)
|
.then(data => {
|
self.loading = false;
|
self.$message({
|
message: '添加成功',
|
type: 'success'
|
});
|
self.$router.push('/plus/region/auth/role/index');
|
})
|
.catch(error => {
|
self.loading = false;
|
});
|
}
|
});
|
},
|
|
/*获取数据*/
|
getData() {
|
let self = this;
|
PlusApi.regionRoleAddInfo()
|
.then(data => {
|
self.data = data.data.menu;
|
self.treeData = self.buildTree(self.data); // 构建树形结构
|
self.roleList = data.data.roleList;
|
self.loading = false;
|
})
|
.catch(error => {
|
self.loading = false;
|
});
|
},
|
|
// 将扁平化数据转换为树形结构
|
buildTree(data) {
|
if (!data || !Array.isArray(data)) {
|
return [];
|
}
|
|
// 创建映射表
|
const map = {};
|
const roots = [];
|
|
// 首先创建映射
|
for (let i = 0; i < data.length; i++) {
|
map[data[i].access_id] = i;
|
// 初始化children数组
|
data[i].children = [];
|
}
|
|
// 然后建立父子关系
|
for (let i = 0; i < data.length; i++) {
|
const node = data[i];
|
if (node.parent_id === 0 || node.parent_id === '0') {
|
// 如果parent_id为0,则为根节点
|
roots.push(node);
|
} else {
|
// 查找父节点
|
const parentId = node.parent_id;
|
if (map.hasOwnProperty(parentId)) {
|
// 将当前节点添加到其父节点的children数组中
|
data[map[parentId]].children.push(node);
|
} else {
|
// 如果找不到父节点,也作为根节点处理
|
roots.push(node);
|
}
|
}
|
}
|
|
return roots;
|
},
|
|
//监听选中
|
handleCheckChange(data, checked) {
|
this.form.access_id = checked.checkedKeys.concat(checked.halfCheckedKeys);
|
},
|
|
/*取消*/
|
cancelFunc() {
|
this.$router.back(-1);
|
}
|
}
|
};
|
</script>
|
|
<style lang="scss" scoped>
|
.basic-setting-content {
|
}
|
|
.product-add {
|
padding-bottom: 50px;
|
}
|
|
.img {
|
margin-top: 10px;
|
}
|
</style>
|