middleground_code_v2/src/views/systemSettings/jurisdictionManage/userJurisdiction/index.vue

514 lines
16 KiB
Vue

<template>
<div>
<div style="display: flex; height: 100%">
<base-layout title="组织机构" ref="organLayout" style="width: 20%" :bottonShow="false" :isPage="false"
:operateButtonSwitch="false" :mainColor="mainColor"
>
<div slot="main" style="height: 100%">
<base-tree ref="baseTree" :isCenter="false" :isSaveBtn="false" :Allshow="false" :showCheckbox="false"
:menuData="orangData" @handleNodeClick="orangClick"
></base-tree>
</div>
</base-layout>
<base-layout title="用户信息" ref="userLayout" @pageChange="pageChange" style="width: 80%"
:buttonList="buttonList" :defaultButtonSwitch="false" @onFuncBtn="getFuncBtn" :isPage="true"
>
<div slot="main" slot-scope="{ tableHeight }" style="height: 100%">
<base-table ref="userCustomtable" :border="true" :showIndex="false" :tabLoading.sync="tabLoading"
@radioChange="userRadioChange" :slotrow="true" :tableHeight="tableHeight" :tableData="tableData"
:tableColumn="tableColumn"
>
</base-table>
</div>
</base-layout>
</div>
<right-dialog ref="rightDialog" :menuData="menuData" v-if="permissionPopup"></right-dialog>
<base-dialog :closeEscape="true" :showClose="true" :closeModal="false" :dialogVisible.sync="settingDialog"
class="userDialog" title="权限设置" width="50vw" top="5vh" :footerShow="true"
@handleConfirmClick="settingConfirmClick"
>
<base-layout :showTitle="false" :defaultButtonSwitch="false">
<div slot="main">
<el-tabs v-model="activeName" type="card" @tab-click="handleClick" :before-leave="beforeLeave">
<el-tab-pane label="菜单权限" name="jurisdictionSetting">
<jurisdiction-Setting ref="jurisdictionSetting" :menuData="menuData"></jurisdiction-Setting>
</el-tab-pane>
<el-tab-pane label="按钮权限" name="buttonSetting">
<button-setting ref="buttonSetting"></button-setting>
</el-tab-pane>
<el-tab-pane label="数据权限" name="dataSetting">
<data-setting ref="dataSetting"></data-setting>
</el-tab-pane>
</el-tabs>
</div>
</base-layout>
</base-dialog>
</div>
</template>
<script>
import router from '@/router'
import baseLayout from "@/components/base/baseNewLayout"
import baseTable from '@/components/base/baseTable'
import baseDialog from '@/components/base/BaseNewDialog/index.vue'
import baseForm from '@/components/base/baseNewForm/index.vue'
import baseTree from '@/components/base/BaseMenuTree/index.vue'
import rightDialog from './rightDialog'
import jurisdictionSetting from './jurisdictionSetting.vue'
import buttonSetting from './buttonSetting.vue'
import dataSetting from './dataSetting.vue'
import configData from './configData'
import { getCompanyId } from '@/utils/auth'
import { GetMenuTree } from '@/api/apis/menuManage'
import { userGetBillList } from '@/api/apis/userInformation'
import { GetOrganTree } from '@/api/apis/organization'
import {
GetPppedomSet,
GetMenuButton,
GetAllButton,
GetAllBillDataPepedom,
GetAllBilldata,
PopedomSaveData
} from '@/api/apis/jurisdiction'
import { authApi } from '@/api/apis/auth'
export default {
name: 'review',
components: {
buttonSetting,
dataSetting,
baseLayout,
baseTable,
baseDialog,
baseForm,
baseTree,
jurisdictionSetting,
rightDialog
},
data() {
return {
activeName: 'jurisdictionSetting',
radioIndex: false,
userRadioId: false,
settingDialog: false,
// tableHeight: 'calc(100vh - 227px)',
mainColor: '#f8f8f8',
tabLoading: false,
tableData: [],
// 搜索配置
menuData: [],
orangData: [],
buttonList: [
{
icon: 'el-icon-plus',
menuName: '权限设置',
btnFunciton: 'setting'
}
],
pageModel: {
pageNum: 1,
pageSize: 20,
organId: ''
},
defaultProps: {
children: 'children',
label: 'label'
},
buttonArray: [],
allButtonList: [],
menuIDs: [],
menuList: [],
menuPopedom: [],
permissionPopup: false
}
},
computed: {
// 表头配置
tableColumn() {
return configData.tableColumnJson
}
},
watch: {
settingDialog: {
deep: true,
handler(newValue, oldValue) {
if (newValue == false) {
this.$refs.dataSetting.dataList = []
this.$refs.jurisdictionSetting.$refs.menuTree.$refs.elTree.setCheckedKeys(
[]
)
this.$refs.buttonSetting.classifyButtonList = []
}
}
}
},
created() {
},
onShow() {
},
mounted() {
this.initPage()
this.getMenuData()
},
filters: {},
methods: {
beforeLeave(activeName, oldActiveName) {
if (oldActiveName == 'jurisdictionSetting') {
this.menuPopedom = this.$refs.jurisdictionSetting.menuPopedom
this.checkdata = this.$refs.jurisdictionSetting.checkdata
}
if (
oldActiveName == 'jurisdictionSetting' &&
activeName == 'buttonSetting'
) {
if (this.menuPopedom.length == 0) {
this.$vmNews('当前用户未分配菜单权限')
return false
}
}
if (oldActiveName == 'dataSetting' && activeName == 'buttonSetting') {
// return false
}
},
// 切换tab
handleClick(tab, event) {
if (this.activeName == 'buttonSetting') {
this.checkdata = this.$refs.jurisdictionSetting.checkdata
this.$refs.buttonSetting.GetAllButtonList(
this.menuPopedom,
this.checkdata
)
}
if (this.activeName == 'dataSetting') {
this.$refs.dataSetting.inPage()
}
},
// 获取菜单选中
getMenuIDs(menuData) {
menuData.forEach((el) => {
if (el.type) {
this.menuList.push(el)
this.menuIDs.push(el.id)
}
if (el.children != null && el.children && el.children.length) {
this.getMenuIDs(el.children)
}
})
},
// 初始化页面
initPage() {
this.getTableList()
this.getOrganList()
},
//获取菜单树
async getMenuData() {
// let res = await GetMenuButton({});
let res = await authApi('sysMenuConfigService', '', 'queryEntityTree', '', { state: 0 })
if (res.status == 200) {
let arr = res.attribute
this.menuData = res.attribute
this.changeMenu(this.menuData, 0)
// this.getButtonArray(this.menuData)
}
},
// 菜单树添加参数
changeMenu(data, num) {
let level = num
level = level + 1
data.forEach((el) => {
el.buttonList = []
el.type = false
if (el.children != null && el.children && el.children.length) {
this.changeMenu(el.children, level)
}
})
},
addToButtonList(arr, newArr) {
newArr.forEach((newItem) => {
this.addToButtonListRecursive(
arr,
newItem.op_MenuID,
newItem.op_OperateKindList
)
})
return arr
},
addToButtonListRecursive(arr, targetId, operateKindList) {
for (let i = 0; i < arr.length; i++) {
const item = arr[i]
if (item.id == targetId) {
item.buttonList = operateKindList.split(',')
return item
}
if (item.children && item.children.length > 0) {
this.addToButtonListRecursive(
item.children,
targetId,
operateKindList
)
}
}
},
// 获取用户信息列表
async getTableList() {
this.tabLoading = true
this.tableData = []
let params = {
...this.pageModel
}
let res = await authApi('sysUserService', '', 'queryEntityPage', '', params)
if (res.status == 200) {
this.tableData = res.attribute.list
this.$nextTick(() => {
this.$refs.userCustomtable.clearRadioIndex()
this.$refs.userLayout.setPageTotal(res.attribute.total)
})
this.tabLoading = false
}
},
getButtonArray(menuData) {
menuData.forEach((el, index) => {
this.allButtonList.forEach((item) => {
if (el.id == item.MenuID) {
item.active = false
el.buttonList.push(item)
}
})
if (el.children != null && el.children && el.children.length) {
this.getButtonArray(el.children)
}
})
},
// 单选
userRadioChange(val) {
this.radioIndex = val.index
this.userRadioId = val.id
},
// 获取组织列表
async getOrganList() {
this.$refs.baseTree.treeLoading = true
setTimeout(() => {
this.$refs.baseTree.treeLoading = false
}, 3000)
const res = await authApi('sysOrganService', '', 'queryEntityTree', '', { state: 0 })
// let res = await GetOrganTree(params);
if (res.status == 200) {
this.orangData = res.attribute
this.$refs.baseTree.treeLoading = false
}
},
// 树状图点击
orangClick(data) {
this.pageModel.organId = data.id
this.resetTable()
// this.result()
},
resetTable() {
this.pageModel.pageNum = 1
this.userRadioId = false
this.radioIndex = false
this.$nextTick(() => {
this.$refs.userCustomtable.clearRadioIndex()
this.$refs.userLayout.pageClear()
})
this.getTableList()
},
// 操作按钮事件
getFuncBtn(btnEven) {
if (this.radioIndex === false) {
this.$vmNews('请选择一条数据')
return
}
this[btnEven.btnFunciton]()
},
//点击权限设置
async setting() {
this.getMenuData()
this.permissionPopup = true
this.$nextTick(async() => {
this.$refs.rightDialog.drawer = true
this.$refs.rightDialog.buttonLoading = true
let params = {
id: this.userRadioId,
kindId: 1
}
const res = await authApi('sysUserService', '', 'jurisdiction', '',params)
if (res.status == 200) {
const data = res.attribute
this.$refs.rightDialog.exhibitList(res.attribute.menvVoList,res.attribute,this.userRadioId)
}
})
},
// setting() {
// this.settingDialog = true
// this.activeName = "jurisdictionSetting"
// this.GetPppedomData()
// },
async GetPppedomData() {
let params = {
objectID: this.userRadioId,
kindid: 1
}
let res = await GetPppedomSet(params)
this.$refs.jurisdictionSetting.menuLoading = true
setTimeout(() => {
this.$refs.jurisdictionSetting.menuLoading = false
}, 3000)
if (res.code == 1) {
const data = res.data
let menuIDs =
data[0].length > 0 ? data[0][0].fp_MenuIdList.split(',') : []
this.$refs.jurisdictionSetting.$refs.menuTree.selectData = menuIDs
this.$refs.jurisdictionSetting.$refs.menuTree.checkChange(menuIDs)
let buttonPopedom = this.getbuttonPopedomList(res.data[1])
this.$refs.buttonSetting.buttonPopedom = buttonPopedom
let activeList = this.getActiveList(res.data[2])
this.$refs.dataSetting.activeList = activeList
this.$refs.jurisdictionSetting.menuLoading = false
// selectData
}
},
getActiveList(data) {
let array = []
data.forEach((el) => {
el.dp_popeList.split(',').forEach((item) => {
array.push(item)
})
})
return array
},
getbuttonPopedomList(data) {
let array = []
data.forEach((el) => {
el.op_OperateKindList.split(',').forEach((item) => {
array.push(item)
})
})
return array
},
pageChange(model) {
this.pageModel.pageNum = model.page
this.pageModel.pageSize = model.limit
this.getTableList()
},
settingConfirmClick() {
let menuPopedom = this.$refs.jurisdictionSetting.menuPopedom.join(',')
let buttonPopedom = this.getButtonPopedom(
this.$refs.buttonSetting.classifyButtonList
)
let dataPopedom = this.getDataPopedom(this.$refs.dataSetting.dataList)
let params = {
kindid: 1,
objectID: this.userRadioId,
menuPopedom: menuPopedom,
buttonPopedom: buttonPopedom,
dataPopedom: dataPopedom
}
this.saveData(params)
},
async saveData(params) {
let res = await PopedomSaveData(params)
if (res.code == 1) {
this.$vmNews('保存成功', 'success')
this.activeName = 'jurisdictionSetting'
this.settingDialog = false
this.$store.dispatch('GenerateRoutes').then((accessRoutes) => {
// 根据roles权限生成可访问的路由表
for (let i = 0, length = accessRoutes.length; i < length; i += 1) {
const element = accessRoutes[i]
router.addRoutes(accessRoutes) // 动态添加可访问路由表
}
localStorage.setItem('routeList', JSON.stringify(accessRoutes))
})
}
},
getDataPopedom(dataPopedom) {
let array = []
dataPopedom.forEach((el) => {
el.dp_popeList = []
el.buttonList.forEach((item) => {
if (item.type) {
el.dp_popeList.push(item.id)
}
})
})
dataPopedom.forEach((el) => {
if (el.dp_popeList.length > 0) {
let params = {
dp_billKindID: el.billKindID,
dp_popeList: el.dp_popeList.join(',')
}
array.push(params)
}
})
return array
},
getButtonPopedom(buttonPopedom) {
let array = []
// let op_OperateKindList = []
buttonPopedom.forEach((el) => {
el.op_MenuID = el.id
el.op_OperateKindList = []
el.buttonList.forEach((item) => {
if (item.type) {
el.op_OperateKindList.push(item.id)
}
})
})
buttonPopedom.forEach((el) => {
if (el.op_OperateKindList.length > 0) {
let params = {
op_MenuID: el.op_MenuID,
op_OperateKindList: el.op_OperateKindList.join(',')
}
array.push(params)
}
})
return array
}
}
}
</script>
<style scoped lang="scss">
> > > .el-dialog__body {
padding: 0 25px;
}
</style>
<style scoped lang="scss">
.roleName {
padding: 10px 0;
width: 90px;
border: 2px solid #f2f2f2;
background-color: #f2f2f2;
margin: 0px 10px 10px 0px;
text-align: center;
cursor: pointer;
box-shadow: 0 0 0 2px #f2f2f2;
border-radius: 5px;
}
.active {
background-color: #00a490;
border: 2px solid #ffffff;
color: white;
box-shadow: 0 0 0 2px #00a490;
}
.bigTitle {
padding-bottom: 10px;
margin: 10px 0;
font-size: 16px;
font-weight: bold;
border-bottom: 1px solid #ccc;
}
.organizationBody {
display: flex;
justify-content: space-evenly;
background-color: #f2f3f4;
padding: 10px;
}
</style>