2021-05-18 16:07:19 +08:00
|
|
|
<template>
|
2021-05-18 18:39:18 +08:00
|
|
|
<de-container style="height: auto">
|
|
|
|
<de-aside-container style="height: auto">
|
2021-05-18 16:07:19 +08:00
|
|
|
<el-button v-show="!showTargetSearchInput" class="de-icon" icon="el-icon-search" circle size="mini" @click="showTargetSearchWidget" />
|
|
|
|
<div v-show="showTargetSearchInput" class="de-input">
|
|
|
|
<el-input v-model="targetFilterText">
|
|
|
|
<el-button slot="append" icon="el-icon-close" @click="closeTargetSearchWidget" />
|
|
|
|
</el-input>
|
|
|
|
</div>
|
|
|
|
<el-tabs v-model="targetActiveName" :class="{'de-search-header': showTargetSearchInput}" @tab-click="handleClick">
|
|
|
|
<el-tab-pane v-for="(targetInfo, index) in targetInfoArray" :key="index" :lazy="true" :label="targetInfo.tabName" :name="targetInfo.authType">
|
|
|
|
<lazy-tree
|
2021-06-04 23:21:47 +08:00
|
|
|
v-if="targetActiveName===targetInfo.authType"
|
2021-05-18 16:07:19 +08:00
|
|
|
:active-name="targetActiveName"
|
|
|
|
:filter-text="targetFilterText"
|
|
|
|
:data-info="targetInfo"
|
|
|
|
highlight-current
|
|
|
|
@nodeClick="authNodeClick"
|
|
|
|
/>
|
|
|
|
</el-tab-pane>
|
|
|
|
</el-tabs>
|
|
|
|
</de-aside-container>
|
|
|
|
<de-main-container class="de-main-container-auth">
|
|
|
|
<el-button v-show="!showSourceSearchInput" class="de-icon" icon="el-icon-search" circle size="mini" @click="showSourceSearchWidget" />
|
|
|
|
<div v-show="showSourceSearchInput" class="de-input">
|
|
|
|
<el-input v-model="sourceFilterText">
|
|
|
|
<el-button slot="append" icon="el-icon-close" @click="closeSourceSearchWidget" />
|
|
|
|
</el-input>
|
|
|
|
</div>
|
|
|
|
<el-tabs v-model="sourceActiveName" :class="{'de-search-header': showSourceSearchInput}" @tab-click="handleClick">
|
2021-05-27 14:17:27 +08:00
|
|
|
<el-tab-pane v-for="(sourceInfo, index) in sourceInfoTabs" :key="index" :lazy="true" :label="sourceInfo.tabName" :name="sourceInfo.authType">
|
2021-05-18 16:07:19 +08:00
|
|
|
<lazy-tree
|
|
|
|
v-if="authCondition"
|
|
|
|
:active-name="sourceActiveName"
|
|
|
|
:filter-text="sourceFilterText"
|
|
|
|
:data-info="sourceInfo"
|
|
|
|
show-extent
|
|
|
|
:auth-condition="authCondition"
|
2021-06-04 23:21:47 +08:00
|
|
|
:attach-active-name="targetActiveName"
|
2021-05-18 16:07:19 +08:00
|
|
|
/>
|
|
|
|
</el-tab-pane>
|
|
|
|
</el-tabs>
|
|
|
|
</de-main-container>
|
|
|
|
</de-container>
|
|
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
import DeContainer from '../../../components/dataease/DeContainer'
|
|
|
|
import DeAsideContainer from '../../../components/dataease/DeAsideContainer'
|
|
|
|
import DeMainContainer from '../../../components/dataease/DeMainContainer'
|
|
|
|
import LazyTree from './components/LazyTree'
|
|
|
|
|
|
|
|
export default {
|
|
|
|
name: 'Authority',
|
|
|
|
components: { LazyTree, DeMainContainer, DeAsideContainer, DeContainer },
|
|
|
|
props: {
|
|
|
|
resourceId: {
|
|
|
|
type: String,
|
|
|
|
default: null
|
|
|
|
}
|
|
|
|
},
|
|
|
|
data() {
|
|
|
|
return {
|
|
|
|
targetInfoArray:
|
|
|
|
[
|
|
|
|
{
|
2021-05-18 18:39:18 +08:00
|
|
|
tabName: this.$t('auth.dept'),
|
|
|
|
head: this.$t('auth.deptHead'),
|
2021-05-18 16:07:19 +08:00
|
|
|
direction: 'target',
|
|
|
|
authType: 'dept'
|
|
|
|
},
|
|
|
|
{
|
2021-05-18 18:39:18 +08:00
|
|
|
tabName: this.$t('auth.role'),
|
|
|
|
head: this.$t('auth.roleHead'),
|
2021-05-18 16:07:19 +08:00
|
|
|
direction: 'target',
|
|
|
|
authType: 'role'
|
|
|
|
},
|
|
|
|
{
|
2021-05-18 18:39:18 +08:00
|
|
|
tabName: this.$t('auth.user'),
|
|
|
|
head: this.$t('auth.userHead'),
|
2021-05-18 16:07:19 +08:00
|
|
|
direction: 'target',
|
|
|
|
authType: 'user'
|
|
|
|
}],
|
|
|
|
sourceInfoArray:
|
|
|
|
[
|
|
|
|
{
|
2021-05-18 18:39:18 +08:00
|
|
|
tabName: this.$t('auth.linkAuth'),
|
|
|
|
head: this.$t('auth.linkAuthHead'),
|
2021-05-18 16:07:19 +08:00
|
|
|
direction: 'source',
|
2021-05-27 14:17:27 +08:00
|
|
|
authType: 'link',
|
|
|
|
authTargets: 'dept,role,user'
|
2021-05-18 16:07:19 +08:00
|
|
|
},
|
|
|
|
{
|
2021-05-18 18:39:18 +08:00
|
|
|
tabName: this.$t('auth.datasetAuth'),
|
|
|
|
head: this.$t('auth.datasetAuthHead'),
|
2021-05-18 16:07:19 +08:00
|
|
|
direction: 'source',
|
2021-05-27 14:17:27 +08:00
|
|
|
authType: 'dataset',
|
|
|
|
authTargets: 'dept,role,user'
|
2021-05-18 16:07:19 +08:00
|
|
|
},
|
|
|
|
{
|
2021-05-18 18:39:18 +08:00
|
|
|
tabName: this.$t('auth.chartAuth'),
|
2021-06-11 09:58:24 +08:00
|
|
|
head: this.$t('auth.chartAuthHead'),
|
2021-05-18 16:07:19 +08:00
|
|
|
direction: 'source',
|
2021-05-27 14:17:27 +08:00
|
|
|
authType: 'chart',
|
|
|
|
authTargets: 'dept,role,user'
|
2021-05-18 16:07:19 +08:00
|
|
|
},
|
|
|
|
{
|
2021-05-18 18:39:18 +08:00
|
|
|
tabName: this.$t('auth.panelAuth'),
|
|
|
|
head: this.$t('auth.panelAuthHead'),
|
2021-05-18 16:07:19 +08:00
|
|
|
direction: 'source',
|
2021-05-27 14:17:27 +08:00
|
|
|
authType: 'panel',
|
|
|
|
authTargets: 'dept,role,user'
|
2021-05-31 14:26:19 +08:00
|
|
|
},
|
|
|
|
{
|
|
|
|
tabName: this.$t('auth.menuAuth'),
|
|
|
|
head: this.$t('auth.menuAuthHead'),
|
|
|
|
direction: 'source',
|
|
|
|
authType: 'menu',
|
2021-06-04 23:21:47 +08:00
|
|
|
authTargets: 'dept,role,user'
|
2021-05-27 14:17:27 +08:00
|
|
|
}
|
|
|
|
],
|
2021-05-18 16:07:19 +08:00
|
|
|
targetActiveName: null,
|
|
|
|
sourceActiveName: null,
|
|
|
|
showSourceSearchInput: false,
|
|
|
|
showTargetSearchInput: false,
|
|
|
|
sourceFilterText: '',
|
|
|
|
targetFilterText: '',
|
|
|
|
timeMachine: null,
|
|
|
|
authCondition: null
|
|
|
|
}
|
|
|
|
},
|
2021-05-27 14:17:27 +08:00
|
|
|
computed: {
|
|
|
|
sourceInfoTabs() {
|
|
|
|
const tabs = []
|
|
|
|
this.sourceInfoArray.forEach(item => {
|
|
|
|
if (item.authTargets.indexOf(this.targetActiveName) > -1) {
|
|
|
|
tabs.push(item)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
return tabs
|
|
|
|
}
|
|
|
|
},
|
2021-05-18 16:07:19 +08:00
|
|
|
created() {
|
|
|
|
this.targetActiveName = this.targetInfoArray[0].authType
|
2021-05-19 15:13:05 +08:00
|
|
|
this.sourceActiveName = this.sourceInfoArray[0].authType
|
2021-05-18 16:07:19 +08:00
|
|
|
},
|
|
|
|
|
|
|
|
methods: {
|
|
|
|
handleClick(tab, event) {
|
|
|
|
},
|
|
|
|
showSourceSearchWidget() {
|
|
|
|
this.showSourceSearchInput = true
|
|
|
|
},
|
|
|
|
closeSourceSearchWidget() {
|
|
|
|
this.sourceFilterText = ''
|
|
|
|
this.showSourceSearchInput = false
|
|
|
|
},
|
|
|
|
showTargetSearchWidget() {
|
|
|
|
this.showTargetSearchInput = true
|
|
|
|
},
|
|
|
|
closeTargetSearchWidget() {
|
|
|
|
this.targetFilterText = ''
|
|
|
|
this.showTargetSearchInput = false
|
|
|
|
},
|
|
|
|
save() {
|
|
|
|
this.$refs[this.activeName].save()
|
|
|
|
this.$emit('close-grant', 0)
|
|
|
|
},
|
|
|
|
cancel() {
|
|
|
|
this.$refs[this.activeName].cancel()
|
|
|
|
this.$emit('close-grant', 0)
|
|
|
|
},
|
|
|
|
authNodeClick(val) {
|
2021-06-04 14:35:32 +08:00
|
|
|
// console.log('authNodeClick')
|
2021-05-18 16:07:19 +08:00
|
|
|
this.authCondition = val
|
|
|
|
},
|
|
|
|
clickAuth(auth) {
|
2021-06-04 14:35:32 +08:00
|
|
|
// console.log('clickAuth')
|
2021-05-18 16:07:19 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
.de-tab {
|
|
|
|
border:1px solid #E6E6E6;
|
|
|
|
min-height:200px !important;
|
|
|
|
max-height:300px !important;
|
|
|
|
overflow:auto;
|
|
|
|
}
|
|
|
|
.de-icon {
|
|
|
|
position: absolute;
|
|
|
|
right: 10px;
|
|
|
|
top: 15px;
|
|
|
|
z-index: 99;
|
|
|
|
}
|
|
|
|
.el-input-group__append{
|
|
|
|
background-color: #ffffff;
|
|
|
|
}
|
|
|
|
.el-input__inner{
|
|
|
|
border-right: none;
|
|
|
|
}
|
|
|
|
|
|
|
|
.auth-root-class {
|
|
|
|
margin: 15px 0px 5px;
|
|
|
|
text-align: right;
|
|
|
|
}
|
|
|
|
.de-main-container-auth{
|
|
|
|
border: 1px solid #E6E6E6;
|
2021-05-18 18:39:18 +08:00
|
|
|
height: auto;
|
2021-05-18 16:07:19 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// ::-webkit-scrollbar {
|
|
|
|
|
|
|
|
// }
|
|
|
|
</style>
|