You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

194 lines
5.7 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<el-dialog :close-on-click-modal="false" v-dialogDrag :title="title" :visible.sync="dialogVisible" width="75vw" :before-close="handleClose">
<el-tabs type="border-card" :value='tabName' v-if="isShow">
<el-tab-pane v-for="(item,index) in rolepowerList" :key="item.id" :label="item.powerName" :name="item.powerName">
<el-checkbox v-model="item.flag" @change="changerow(item,index)">快速全选</el-checkbox>
<el-tree ref="tree" :data="item.menuList" check-strictly show-checkbox node-key="powerId" :default-checked-keys="arrkeys" :props="defaultProps"></el-tree>
</el-tab-pane>
</el-tabs>
<span slot="footer" class="dialog-footer">
<el-button size="mini" type="primary" plain @click="handleClose"> </el-button>
<el-button size="mini" type="primary" @click="confirms()">
</el-button>
</span>
</el-dialog>
</template>
<script>
import {
organizations,
roleAddMuenRole,
rolepower,
roleMuenPage,
} from "@/api/storeManage.js";
export default {
data() {
return {
tabName: "系统设置",
isShow: false,
form: {},
dialogVisible: false, //弹窗开关 //弹窗开关
title: "关联菜单", //弹窗标题
arrkeys: [],
defaultProps: {
children: "checkList",
label: "powerName",
id: "powerId",
},
rolepowerList: [],
};
},
methods: {
handleClose() {
Object.assign(this.$data, this.$options.data.call(this));
this.dialogVisible = false;
},
changerow(row, index) {
var list = [];
if (row.flag == true) {
list.push(row.id);
row.menuList.forEach((item1) => {
list.push(item1.menuId);
item1.checkList.forEach((item2) => {
list.push(item2.powerId);
});
});
this.arrkeys = this.arrkeys.concat(list);
} else {
list.push(row.id);
row.menuList.forEach((item1) => {
list.push(item1.menuId);
item1.checkList.forEach((item2) => {
list.push(item2.powerId);
});
});
var newArray = this.arrkeys.filter(function (item) {
return list.indexOf(item) == -1;
});
this.arrkeys = [];
this.arrkeys = [...newArray];
this.$refs.tree[index].setCheckedKeys([]);
}
},
//组件传值
show(form) {
this.isShow = true;
this.form = { ...form };
this.dialogVisible = true;
this.getData();
},
//获取权限page列表
sortByKey(array, key) {
return array.sort(function (a, b) {
var x = a[key];
var y = b[key];
return x < y ? -1 : x > y ? 1 : 0;
});
},
//获取数据
async getData() {
this.rolepowerList = [];
rolepower({}).then((res) => {
if (res.code == "000000") {
res.data = this.sortByKey(res.data, "id");
let list = [];
res.data.forEach((item) => {
if (item.id > 390) {
item.menuList.forEach((items) => {
items.powerId = items.menuId;
items.powerName = items.menuName;
});
item.flag = false;
list.push(item);
}
});
this.rolepowerList = list;
this.getPower();
} else {
this.$alert(res.message, "获取菜单", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
}
});
},
getPower() {
roleMuenPage({ roleId: this.form.id }).then((res) => {
if (res.code == "000000") {
let list = [];
this.arrkeys = []
res.pageInfo.list.forEach((item) => {
this.arrkeys.push(item.powerId)
});
} else {
this.$alert(res.message, "获取关联门店", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
}
});
},
//确定返回方法
confirms() {
let idlists = [];
this.$refs.tree.forEach((item) => {
idlists = idlists.concat(
item.getCheckedKeys().concat(item.getHalfCheckedKeys())
);
// console.log(idlists)
});
//取前三位 然后去重
var newarr = [];
for (let i in idlists) {
if (idlists[i] < 9000) {
newarr[i] = idlists[i];
} else {
//父ID非数据库重新获取直接从子ID前面直接截取前4位如果添加新权限数据要遵守上级ID在前面进行拼接原则
newarr[i] = Number.parseInt(("" + idlists[i]).substring(0, 3));
}
}
idlists = idlists.concat([...new Set(newarr)]);
if (idlists.length == 0) {
idlists[0] = 100;
}
let list = [];
idlists.forEach((item) => {
let items = { roleId: this.form.id, powerId: item };
list.push(items);
});
this.form.sysMuenRoles = list;
roleAddMuenRole(this.form).then((res) => {
if (res.code == "000000") {
this.$message.success({ message: res.message });
this.dialogVisible = false;
this.$emit("storeData");
this.getPower()
} else {
this.$alert(res.message, "关联门店", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
}
});
},
},
};
</script>
<style>
</style>