@@ -256,86 +256,45 @@ class RoleMenuButtonPermissionViewSet(CustomModelViewSet):
|
|||||||
is_superuser = request.user.is_superuser
|
is_superuser = request.user.is_superuser
|
||||||
if is_superuser:
|
if is_superuser:
|
||||||
data = [
|
data = [
|
||||||
{
|
{"value": 0, "label": '仅本人数据权限'},
|
||||||
"value": 0,
|
{"value": 1, "label": '本部门及以下数据权限'},
|
||||||
"label": '仅本人数据权限'
|
{"value": 2, "label": '本部门数据权限'},
|
||||||
},
|
{"value": 3, "label": '全部数据权限'},
|
||||||
{
|
{"value": 4, "label": '自定义数据权限'}
|
||||||
"value": 1,
|
|
||||||
"label": '本部门及以下数据权限'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"value": 2,
|
|
||||||
"label": '本部门数据权限'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"value": 3,
|
|
||||||
"label": '全部数据权限'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"value": 4,
|
|
||||||
"label": '自定义数据权限'
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
return DetailResponse(data=data)
|
return DetailResponse(data=data)
|
||||||
else:
|
else:
|
||||||
data = []
|
params = request.query_params
|
||||||
|
data = [{"value": 0, "label": '仅本人数据权限'}]
|
||||||
role_list = request.user.role.values_list('id', flat=True)
|
role_list = request.user.role.values_list('id', flat=True)
|
||||||
if params := request.query_params:
|
# 权限页面进入初始化获取所有的数据权限范围
|
||||||
|
role_queryset = RoleMenuButtonPermission.objects.filter(
|
||||||
|
role__in=role_list
|
||||||
|
).values_list('data_range', flat=True)
|
||||||
|
# 通过按钮小齿轮获取指定按钮的权限
|
||||||
if menu_button_id := params.get('menu_button', None):
|
if menu_button_id := params.get('menu_button', None):
|
||||||
role_queryset = RoleMenuButtonPermission.objects.filter(
|
role_queryset = RoleMenuButtonPermission.objects.filter(
|
||||||
role__in=role_list, menu_button__id=menu_button_id
|
role__in=role_list, menu_button__id=menu_button_id
|
||||||
).values_list('data_range', flat=True)
|
).values_list('data_range', flat=True)
|
||||||
|
|
||||||
data_range_list = list(set(role_queryset))
|
data_range_list = list(set(role_queryset))
|
||||||
for item in data_range_list:
|
for item in data_range_list:
|
||||||
if item == 0:
|
if item == 0:
|
||||||
data = [{
|
data = data
|
||||||
"value": 0,
|
|
||||||
"label": '仅本人数据权限'
|
|
||||||
}]
|
|
||||||
elif item == 1:
|
elif item == 1:
|
||||||
data = [{
|
data.extend([
|
||||||
"value": 0,
|
{"value": 1, "label": '本部门及以下数据权限'},
|
||||||
"label": '仅本人数据权限'
|
{"value": 2, "label": '本部门数据权限'}
|
||||||
}, {
|
])
|
||||||
"value": 1,
|
|
||||||
"label": '本部门及以下数据权限'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"value": 2,
|
|
||||||
"label": '本部门数据权限'
|
|
||||||
}]
|
|
||||||
elif item == 2:
|
elif item == 2:
|
||||||
data = [{
|
data.extend([{"value": 2, "label": '本部门数据权限'}])
|
||||||
"value": 0,
|
|
||||||
"label": '仅本人数据权限'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"value": 2,
|
|
||||||
"label": '本部门数据权限'
|
|
||||||
}]
|
|
||||||
elif item == 3:
|
elif item == 3:
|
||||||
data = [{
|
data.extend([{"value": 3, "label": '全部数据权限'}])
|
||||||
"value": 0,
|
|
||||||
"label": '仅本人数据权限'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"value": 3,
|
|
||||||
"label": '全部数据权限'
|
|
||||||
}, ]
|
|
||||||
elif item == 4:
|
elif item == 4:
|
||||||
data = [{
|
data.extend([{"value": 4, "label": '自定义数据权限'}])
|
||||||
"value": 0,
|
|
||||||
"label": '仅本人数据权限'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"value": 4,
|
|
||||||
"label": '自定义数据权限'
|
|
||||||
}]
|
|
||||||
else:
|
else:
|
||||||
data = []
|
data = []
|
||||||
return DetailResponse(data=data)
|
return DetailResponse(data=data)
|
||||||
return ErrorResponse(msg="参数错误")
|
|
||||||
|
|
||||||
@action(methods=['get'], detail=False, permission_classes=[IsAuthenticated])
|
@action(methods=['get'], detail=False, permission_classes=[IsAuthenticated])
|
||||||
def role_to_dept_all(self, request):
|
def role_to_dept_all(self, request):
|
||||||
@@ -344,23 +303,23 @@ class RoleMenuButtonPermissionViewSet(CustomModelViewSet):
|
|||||||
:param request:
|
:param request:
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
params = request.query_params
|
|
||||||
is_superuser = request.user.is_superuser
|
is_superuser = request.user.is_superuser
|
||||||
if is_superuser:
|
params = request.query_params
|
||||||
queryset = Dept.objects.values('id', 'name', 'parent')
|
role_id = params.get('role')
|
||||||
else:
|
menu_button_id = params.get('menu_button')
|
||||||
if not params:
|
dept_checked = RoleMenuButtonPermission.objects.filter(
|
||||||
return ErrorResponse(msg="参数错误")
|
role_id=role_id, menu_button_id=menu_button_id
|
||||||
menu_button = params.get('menu_button')
|
).values_list('dept', flat=True)
|
||||||
if menu_button is None:
|
dept_list = Dept.objects.values('id', 'name', 'parent')
|
||||||
return ErrorResponse(msg="参数错误")
|
data = {
|
||||||
role_list = request.user.role.values_list('id', flat=True)
|
'depts': [],
|
||||||
queryset = RoleMenuButtonPermission.objects.filter(role__in=role_list, menu_button=None).values(
|
'dept_checked': [i for i in dept_checked if i is not None]
|
||||||
dept_id=F('dept__id'),
|
}
|
||||||
name=F('dept__name'),
|
|
||||||
parent=F('dept__parent')
|
for dept in dept_list:
|
||||||
)
|
dept["disabled"] = False if is_superuser else dept["id"] not in dept_checked
|
||||||
return DetailResponse(data=queryset)
|
data['depts'].append(dept)
|
||||||
|
return DetailResponse(data=data)
|
||||||
|
|
||||||
@action(methods=['get'], detail=False, permission_classes=[IsAuthenticated])
|
@action(methods=['get'], detail=False, permission_classes=[IsAuthenticated])
|
||||||
def menu_to_button(self, request):
|
def menu_to_button(self, request):
|
||||||
|
|||||||
@@ -80,8 +80,8 @@ export default defineComponent({
|
|||||||
const state = reactive({
|
const state = reactive({
|
||||||
isShowPassword: false,
|
isShowPassword: false,
|
||||||
ruleForm: {
|
ruleForm: {
|
||||||
username: '',
|
username: 'superadmin',
|
||||||
password: '',
|
password: 'admin123456',
|
||||||
captcha: '',
|
captcha: '',
|
||||||
captchaKey: '',
|
captchaKey: '',
|
||||||
captchaImgBase: '',
|
captchaImgBase: '',
|
||||||
|
|||||||
@@ -40,10 +40,11 @@ export function getDataPermissionRangeAll() {
|
|||||||
method: 'get',
|
method: 'get',
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
export function getDataPermissionDept() {
|
export function getDataPermissionDept(query:object) {
|
||||||
return request({
|
return request({
|
||||||
url: '/api/system/role_menu_button_permission/role_to_dept_all/',
|
url: '/api/system/role_menu_button_permission/role_to_dept_all/',
|
||||||
method: 'get'
|
method: 'get',
|
||||||
|
params:query
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
:label="btn.value">
|
:label="btn.value">
|
||||||
<div class="btn-item">
|
<div class="btn-item">
|
||||||
{{ btn.data_range !== null ? `${btn.name}(${formatDataRange(btn.data_range)})` : btn.name }}
|
{{ btn.data_range !== null ? `${btn.name}(${formatDataRange(btn.data_range)})` : btn.name }}
|
||||||
<span v-show="btn.isCheck" @click.stop.prevent="handleSettingClick(menu, btn.id)">
|
<span v-show="btn.isCheck" @click.stop.prevent="handleSettingClick(menu, btn)">
|
||||||
<el-icon>
|
<el-icon>
|
||||||
<Setting />
|
<Setting />
|
||||||
</el-icon>
|
</el-icon>
|
||||||
@@ -124,6 +124,7 @@ watch(
|
|||||||
(val) => {
|
(val) => {
|
||||||
drawerVisible.value = val;
|
drawerVisible.value = val;
|
||||||
getMenuBtnPermission()
|
getMenuBtnPermission()
|
||||||
|
getDataPermissionRangeLable()
|
||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -144,9 +145,10 @@ let menuCurrent = ref<Partial<MenuDataType>>({});
|
|||||||
let menuBtnCurrent = ref<number>(-1);
|
let menuBtnCurrent = ref<number>(-1);
|
||||||
let dialogVisible = ref(false);
|
let dialogVisible = ref(false);
|
||||||
let dataPermissionRange = ref<DataPermissionRangeType[]>([]);
|
let dataPermissionRange = ref<DataPermissionRangeType[]>([]);
|
||||||
|
let dataPermissionRangeLabel = ref<DataPermissionRangeType[]>([]);
|
||||||
const formatDataRange = computed(() => {
|
const formatDataRange = computed(() => {
|
||||||
return function (datarange: number) {
|
return function (datarange: number) {
|
||||||
const findItem = dataPermissionRange.value.find((i) => i.value === datarange);
|
const findItem = dataPermissionRangeLabel.value.find((i) => i.value === datarange);
|
||||||
return findItem?.label || ''
|
return findItem?.label || ''
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -158,8 +160,13 @@ const getMenuBtnPermission = async () => {
|
|||||||
const resMenu = await getRolePremission({ role: props.roleId })
|
const resMenu = await getRolePremission({ role: props.roleId })
|
||||||
menuData.value = resMenu.data
|
menuData.value = resMenu.data
|
||||||
}
|
}
|
||||||
|
// 获取按钮的数据权限下拉选项
|
||||||
|
const getDataPermissionRangeLable = async () => {
|
||||||
|
const resRange = await getDataPermissionRange({ role: props.roleId })
|
||||||
|
dataPermissionRangeLabel.value = resRange.data;
|
||||||
|
}
|
||||||
|
|
||||||
const fetchData = async (btnId) => {
|
const fetchData = async (btnId:number) => {
|
||||||
try {
|
try {
|
||||||
const resRange = await getDataPermissionRange({menu_button:btnId});
|
const resRange = await getDataPermissionRange({menu_button:btnId});
|
||||||
if (resRange?.code === 2000) {
|
if (resRange?.code === 2000) {
|
||||||
@@ -170,20 +177,22 @@ const fetchData = async (btnId) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleCollapseChange = (val: number) => {
|
// const handleCollapseChange = (val: number) => {
|
||||||
collapseCurrent.value = [val];
|
// collapseCurrent.value = [val];
|
||||||
};
|
// };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置按钮数据权限
|
* 设置按钮数据权限
|
||||||
* @param record 当前菜单
|
* @param record 当前菜单
|
||||||
* @param btnType 按钮类型
|
* @param btnType 按钮类型
|
||||||
*/
|
*/
|
||||||
const handleSettingClick = (record: MenusType, btnId: number) => {
|
const handleSettingClick = (record: MenusType, btn: MenusType['btns'][number]) => {
|
||||||
menuCurrent.value = record;
|
menuCurrent.value = record;
|
||||||
menuBtnCurrent.value = btnId;
|
menuBtnCurrent.value = btn.id;
|
||||||
dialogVisible.value = true;
|
dialogVisible.value = true;
|
||||||
fetchData(btnId)
|
dataPermission.value =btn.data_range;
|
||||||
|
handlePermissionRangeChange(btn.data_range)
|
||||||
|
fetchData( btn.id)
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleColumnChange = (val: boolean, record: MenusType, btnType: string) => {
|
const handleColumnChange = (val: boolean, record: MenusType, btnType: string) => {
|
||||||
@@ -194,9 +203,10 @@ const handleColumnChange = (val: boolean, record: MenusType, btnType: string) =>
|
|||||||
|
|
||||||
const handlePermissionRangeChange = async (val: number) => {
|
const handlePermissionRangeChange = async (val: number) => {
|
||||||
if (val === 4) {
|
if (val === 4) {
|
||||||
const res = await getDataPermissionDept();
|
const res = await getDataPermissionDept({ role: props.roleId,menu_button:menuBtnCurrent.value });
|
||||||
const data = XEUtils.toArrayTree(res.data, { parentKey: 'parent', strict: false });
|
const depts = XEUtils.toArrayTree(res.data.depts, { parentKey: 'parent', strict: false });
|
||||||
deptData.value = data;
|
deptData.value = depts;
|
||||||
|
customDataPermission.value = res.data.dept_checked;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user