144 lines
3.8 KiB
Vue
144 lines
3.8 KiB
Vue
<template>
|
|
<div>
|
|
<warning-bar
|
|
title="此功能仅用于创建角色和角色的many2many关系表,具体使用还须自己结合表实现业务,详情参考示例代码(客户示例)。此功能不建议使用,建议使用插件市场【组织管理功能(点击前往)】来管理资源权限。"
|
|
href="https://plugin.gin-vue-admin.com/#/layout/newPluginInfo?id=36"
|
|
/>
|
|
<div class="sticky top-0.5 z-10 bg-white my-4">
|
|
<el-button
|
|
class="float-left"
|
|
type="primary"
|
|
@click="all"
|
|
>全选</el-button>
|
|
<el-button
|
|
class="float-left"
|
|
type="primary"
|
|
@click="self"
|
|
>本角色</el-button>
|
|
<el-button
|
|
class="float-left"
|
|
type="primary"
|
|
@click="selfAndChildren"
|
|
>本角色及子角色</el-button>
|
|
<el-button
|
|
class="float-right"
|
|
type="primary"
|
|
@click="authDataEnter"
|
|
>确 定</el-button>
|
|
</div>
|
|
<div class="clear-both pt-4">
|
|
<el-checkbox-group
|
|
v-model="dataAuthorityId"
|
|
@change="selectAuthority"
|
|
>
|
|
<el-checkbox
|
|
v-for="(item,key) in authoritys"
|
|
:key="key"
|
|
:label="item"
|
|
>{{ item.authorityName }}</el-checkbox>
|
|
</el-checkbox-group>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { setDataAuthority } from '@/api/authority'
|
|
import WarningBar from '@/components/warningBar/warningBar.vue'
|
|
import { ref } from 'vue'
|
|
import { ElMessage } from 'element-plus'
|
|
|
|
defineOptions({
|
|
name: 'Datas'
|
|
})
|
|
|
|
const props = defineProps({
|
|
row: {
|
|
default: function() {
|
|
return {}
|
|
},
|
|
type: Object
|
|
},
|
|
authority: {
|
|
default: function() {
|
|
return []
|
|
},
|
|
type: Array
|
|
}
|
|
})
|
|
|
|
const authoritys = ref([])
|
|
const needConfirm = ref(false)
|
|
// 平铺角色
|
|
const roundAuthority = (authoritysData) => {
|
|
authoritysData && authoritysData.forEach(item => {
|
|
const obj = {}
|
|
obj.authorityId = item.authorityId
|
|
obj.authorityName = item.authorityName
|
|
authoritys.value.push(obj)
|
|
if (item.children && item.children.length) {
|
|
roundAuthority(item.children)
|
|
}
|
|
})
|
|
}
|
|
|
|
const dataAuthorityId = ref([])
|
|
const init = () => {
|
|
roundAuthority(props.authority)
|
|
props.row.dataAuthorityId && props.row.dataAuthorityId.forEach(item => {
|
|
const obj = authoritys.value && authoritys.value.filter(au => au.authorityId === item.authorityId) && authoritys.value.filter(au => au.authorityId === item.authorityId)[0]
|
|
dataAuthorityId.value.push(obj)
|
|
})
|
|
}
|
|
|
|
init()
|
|
|
|
// 暴露给外层使用的切换拦截统一方法
|
|
const enterAndNext = () => {
|
|
authDataEnter()
|
|
}
|
|
|
|
const emit = defineEmits(['changeRow'])
|
|
const all = () => {
|
|
dataAuthorityId.value = [...authoritys.value]
|
|
emit('changeRow', 'dataAuthorityId', dataAuthorityId.value)
|
|
needConfirm.value = true
|
|
}
|
|
const self = () => {
|
|
dataAuthorityId.value = authoritys.value.filter(item => item.authorityId === props.row.authorityId)
|
|
emit('changeRow', 'dataAuthorityId', dataAuthorityId.value)
|
|
needConfirm.value = true
|
|
}
|
|
const selfAndChildren = () => {
|
|
const arrBox = []
|
|
getChildrenId(props.row, arrBox)
|
|
dataAuthorityId.value = authoritys.value.filter(item => arrBox.indexOf(item.authorityId) > -1)
|
|
emit('changeRow', 'dataAuthorityId', dataAuthorityId.value)
|
|
needConfirm.value = true
|
|
}
|
|
const getChildrenId = (row, arrBox) => {
|
|
arrBox.push(row.authorityId)
|
|
row.children && row.children.forEach(item => {
|
|
getChildrenId(item, arrBox)
|
|
})
|
|
}
|
|
// 提交
|
|
const authDataEnter = async() => {
|
|
const res = await setDataAuthority(props.row)
|
|
if (res.code === 0) {
|
|
ElMessage({ type: 'success', message: '资源设置成功' })
|
|
}
|
|
}
|
|
|
|
// 选择
|
|
const selectAuthority = () => {
|
|
emit('changeRow', 'dataAuthorityId', dataAuthorityId.value)
|
|
needConfirm.value = true
|
|
}
|
|
|
|
defineExpose({
|
|
enterAndNext,
|
|
needConfirm
|
|
})
|
|
|
|
</script>
|