Browse Source

低代码权限问题

han_v1
herenshan112 7 months ago
parent
commit
deda8b6601
  1. 378
      src/views/powermanage/rolepower/setuprole/setuprolepower.vue
  2. 2
      src/views/sysworkflow/lowcodepage/appCardPage.vue

378
src/views/powermanage/rolepower/setuprole/setuprolepower.vue

@ -3,22 +3,32 @@
@ 时间: 2023-05-30 13:52:12 @ 时间: 2023-05-30 13:52:12
@ 备注: 配置权限 @ 备注: 配置权限
--> -->
<script lang='ts' setup> <script lang="ts" setup>
import { setupPage,systemCont,systemMenusTypeTree,submintPostPower } from "@/api/system/roleapi/types"; import {
import { getSystemType,getSystemPoewrTreeForRole,getGrantRolePowers,grantSystemRolePoewr } from "@/api/system/roleapi/postrole"; setupPage,
systemCont,
systemMenusTypeTree,
submintPostPower,
} from "@/api/system/roleapi/types";
import {
getSystemType,
getSystemPoewrTreeForRole,
getGrantRolePowers,
grantSystemRolePoewr,
} from "@/api/system/roleapi/postrole";
const props = defineProps({ const props = defineProps({
powerIsShow:{ powerIsShow: {
type:Boolean, type: Boolean,
default:false default: false,
}, },
roleId:{ roleId: {
type:String, type: String,
default:'' default: "",
}, },
roleTitle:{ roleTitle: {
type:String, type: String,
default:'配置权限' default: "配置权限",
} },
}); });
/** /**
* 树形组件 * 树形组件
@ -26,225 +36,241 @@ const props = defineProps({
const menuRef = ref(ElTree); const menuRef = ref(ElTree);
const powerLoading = ref(false); const powerLoading = ref(false);
const powerLoadingSub = ref(false); const powerLoadingSub = ref(false);
const emits = defineEmits(["update:powerIsShow"]); // const emits = defineEmits(["update:powerIsShow"]); //
/** /**
* 系统选择标签 * 系统选择标签
*/ */
const systemTabs = ref('') const systemTabs = ref("");
/** /**
* 系统列表 * 系统列表
*/ */
const orgPostTreeContList = ref<systemCont[]>([]); const orgPostTreeContList = ref<systemCont[]>([]);
/** /**
* 管理范围 * 管理范围
*/ */
const manageScope = ref(1) const manageScope = ref(0);
/** /**
* 树形结构约束 * 树形结构约束
*/ */
const systemMenuTreeProps = { const systemMenuTreeProps = {
children: "child", children: "child",
label: "name", label: "name",
} };
/** /**
* 分页参数 * 分页参数
*/ */
const setupPageCont = reactive<setupPage>({ const setupPageCont = reactive<setupPage>({
page:1, page: 1,
pagesize:100000 pagesize: 100000,
}); });
/** /**
* 弹窗显示控制 * 弹窗显示控制
*/ */
const power_is_Show = computed({ const power_is_Show = computed({
get: () => props.powerIsShow, get: () => props.powerIsShow,
set: (val) => { set: (val) => {
emits("update:powerIsShow", val); emits("update:powerIsShow", val);
}, },
}); });
/** /**
* 关闭弹窗回调 * 关闭弹窗回调
*/ */
function handleClosePower () { function handleClosePower() {
emits("update:powerIsShow", false); emits("update:powerIsShow", false);
initData(); initData();
} }
/** /**
* 初始化数据 * 初始化数据
*/ */
function initData(){ function initData() {
powerLoading.value = false; powerLoading.value = false;
powerLoadingSub.value = false powerLoadingSub.value = false;
setupPageCont.page = 1; setupPageCont.page = 1;
setupPageCont.pagesize = 100000; setupPageCont.pagesize = 100000;
systemTabs.value = ""; systemTabs.value = "";
manageScope.value = 1; manageScope.value = 0;
gainPowerAry.value=[]; gainPowerAry.value = [];
} }
/** /**
* 监听数据 * 监听数据
*/ */
watch(() => props.powerIsShow,() => { watch(
if(props.powerIsShow){ () => props.powerIsShow,
getSystemTypeList() () => {
}else{ if (props.powerIsShow) {
initData() getSystemTypeList();
} } else {
}); initData();
}
}
);
/** /**
* 获取系统分类 * 获取系统分类
*/ */
function getSystemTypeList() { function getSystemTypeList() {
getSystemType(setupPageCont) getSystemType(setupPageCont).then((data) => {
.then((data)=>{ // console.log(data);
// console.log(data); orgPostTreeContList.value = data.data.list;
orgPostTreeContList.value = data.data.list; if (data.data.list[0]) {
if(data.data.list[0]){ systemTabs.value = data.data.list[0].coder;
systemTabs.value = data.data.list[0].coder }
} });
})
} }
/** /**
* 权限菜单列表 * 权限菜单列表
*/ */
const systemPowerMenusTree = ref<systemMenusTypeTree[]>([]); const systemPowerMenusTree = ref<systemMenusTypeTree[]>([]);
/** /**
* 已授权的权限 * 已授权的权限
*/ */
const gainPowerAry = ref<String[]>([]) const gainPowerAry = ref<String[]>([]);
/** /**
* 获取菜单 * 获取菜单
*/ */
function getSysMenuTree(sysKey:string){ function getSysMenuTree(sysKey: string) {
powerLoading.value = true; powerLoading.value = true;
systemPowerMenusTree.value =[] systemPowerMenusTree.value = [];
getSystemPoewrTreeForRole({name:sysKey,roleid:props.roleId}) getSystemPoewrTreeForRole({ name: sysKey, roleid: props.roleId })
.then(({ data })=>{ .then(({ data }) => {
systemPowerMenusTree.value = data; systemPowerMenusTree.value = data;
getGrantRolePowers({name:sysKey,roleid:props.roleId}) getGrantRolePowers({ name: sysKey, roleid: props.roleId })
.then(({data})=>{ .then(({ data }) => {
// console.log("====>",data); // console.log("====>",data);
manageScope.value = data.level manageScope.value = data.level;
if(data != null){ if (data != null) {
gainPowerAry.value= data.powerList gainPowerAry.value = data.powerList;
} }
}) })
.finally(()=>{ .finally(() => {
powerLoading.value = false; powerLoading.value = false;
setCheckedKeys(); setCheckedKeys();
}) });
}) })
.finally(()=>{powerLoading.value=false}) .finally(() => {
powerLoading.value = false;
});
} }
/** /**
* 设置已经授权的权限 * 设置已经授权的权限
*/ */
function setCheckedKeys(){ function setCheckedKeys() {
// console.log("",gainPowerAry.value) // console.log("",gainPowerAry.value)
gainPowerAry.value.forEach((menuId) => gainPowerAry.value.forEach((menuId) => menuRef.value.setChecked(menuId, true, false));
menuRef.value.setChecked(menuId, true, false)
);
} }
watch(() => systemTabs.value,() => { watch(
powerLoading.value = true; () => systemTabs.value,
if(systemTabs.value != "" && systemTabs.value != null){ () => {
getSysMenuTree(systemTabs.value) powerLoading.value = true;
} if (systemTabs.value != "" && systemTabs.value != null) {
getSysMenuTree(systemTabs.value);
}); }
}
);
/** /**
* 授权 * 授权
*/ */
function enterEmpowerClick(){ function enterEmpowerClick() {
powerLoadingSub.value = true; powerLoadingSub.value = true;
const checkedMenuTrue:systemMenusTypeTree[] = menuRef.value const checkedMenuTrue: systemMenusTypeTree[] = menuRef.value
.getCheckedNodes(false, true) .getCheckedNodes(false, true)
.map((node: any) => node); .map((node: any) => node);
// console.log("", checkedMenuTrue); // console.log("", checkedMenuTrue);
checkedMenuTrue.forEach(item=>{ checkedMenuTrue.forEach((item) => {
item.child=[]; item.child = [];
}) });
grantSystemRolePoewr({systemname:systemTabs.value,roleid:props.roleId,level:manageScope.value*1,power:checkedMenuTrue}) grantSystemRolePoewr({
.then((data)=>{ systemname: systemTabs.value,
// console.log("----", data); roleid: props.roleId,
ElMessage.success("授权成功"); level: manageScope.value * 1,
handleClosePower(); power: checkedMenuTrue,
}).finally(()=>{powerLoadingSub.value = false;}) })
.then((data) => {
// console.log("----", data);
ElMessage.success("授权成功");
handleClosePower();
})
.finally(() => {
powerLoadingSub.value = false;
});
} }
</script> </script>
<template> <template>
<el-dialog v-model="power_is_Show" custom-class="dialog_box" :title="roleTitle" top="50px" :before-close="handleClosePower"> <el-dialog
<el-container> v-model="power_is_Show"
<el-aside width="125px"> custom-class="dialog_box"
<el-tabs v-model="systemTabs" tab-position="left" class="demo-tabs tabs_box" > :title="roleTitle"
<el-tab-pane v-for="item in orgPostTreeContList" :key="item.key" :label="item.title" :name="item.coder"></el-tab-pane> top="50px"
</el-tabs> :before-close="handleClosePower"
</el-aside> >
<el-main> <el-container>
<el-radio-group v-model="manageScope" style="margin-bottom: 10px"> <el-aside width="125px">
<el-radio-button label="1">本岗位</el-radio-button> <el-tabs v-model="systemTabs" tab-position="left" class="demo-tabs tabs_box">
<el-radio-button label="2">本部门</el-radio-button> <el-tab-pane
<el-radio-button label="3">本分部</el-radio-button> v-for="item in orgPostTreeContList"
<el-radio-button label="4" disabled>指定行政组织</el-radio-button> :key="item.key"
<el-radio-button label="5">所有</el-radio-button> :label="item.title"
</el-radio-group> :name="item.coder"
<el-scrollbar v-loading="powerLoading" class="tab_pane_box"> ></el-tab-pane>
<el-tree </el-tabs>
ref="menuRef" </el-aside>
node-key="menukey" <el-main>
:data="systemPowerMenusTree" <el-radio-group v-model="manageScope" style="margin-bottom: 10px">
show-checkbox <el-radio-button label="0">默认</el-radio-button>
:default-expand-all="true" <el-radio-button label="1">本岗位</el-radio-button>
:props="systemMenuTreeProps" <el-radio-button label="2">本部门</el-radio-button>
> <el-radio-button label="3">本分部</el-radio-button>
<template #default="{ node,data }"> <el-radio-button label="4" disabled>指定行政组织</el-radio-button>
<span class="tree_sapn">{{ node.label }}</span> <el-radio-button label="5">所有</el-radio-button>
<el-tag </el-radio-group>
v-if="data.attribute === 2" <el-scrollbar v-loading="powerLoading" class="tab_pane_box">
type="warning" <el-tree
>目录</el-tag> ref="menuRef"
<el-tag v-if="data.attribute === 1" type="success" node-key="menukey"
>菜单</el-tag> :data="systemPowerMenusTree"
<el-tag v-if="data.attribute ===4" type="danger" show-checkbox
>按钮</el-tag> :default-expand-all="true"
<el-tag v-if="data.attribute === 3" type="info" :props="systemMenuTreeProps"
>外链</el-tag> >
<template #default="{ node, data }">
</template> <span class="tree_sapn">{{ node.label }}</span>
</el-tree> <el-tag v-if="data.attribute === 2" type="warning">目录</el-tag>
</el-scrollbar> <el-tag v-if="data.attribute === 1" type="success">菜单</el-tag>
</el-main> <el-tag v-if="data.attribute === 4" type="danger">按钮</el-tag>
</el-container> <el-tag v-if="data.attribute === 3" type="info">外链</el-tag>
<template #footer> </template>
<span class="dialog-footer"> </el-tree>
<el-button type="danger" @click="handleClosePower">取消</el-button> </el-scrollbar>
<el-button type="primary" :loading="powerLoadingSub" @click="enterEmpowerClick">授权</el-button> </el-main>
</span> </el-container>
</template> <template #footer>
</el-dialog> <span class="dialog-footer">
<el-button type="danger" @click="handleClosePower">取消</el-button>
<el-button type="primary" :loading="powerLoadingSub" @click="enterEmpowerClick"
>授权</el-button
>
</span>
</template>
</el-dialog>
</template> </template>
<style lang='scss' scoped> <style lang="scss" scoped>
.el-dialog__body{ .el-dialog__body {
padding: 0; padding: 0;
} }
.tabs_box{ .tabs_box {
height: calc(100vh - 500px); height: calc(100vh - 500px);
.tab_pane_box{ .tab_pane_box {
height: calc(100vh - 550px); height: calc(100vh - 550px);
overflow: hidden; overflow: hidden;
overflow-y: auto; overflow-y: auto;
} }
} }
.tab_pane_box{ .tab_pane_box {
height: calc(100vh - 550px); height: calc(100vh - 550px);
overflow: hidden; overflow: hidden;
overflow-y: auto; overflow-y: auto;
} }
.tree_sapn{ .tree_sapn {
padding: 0 15px; padding: 0 15px;
} }
</style> </style>

2
src/views/sysworkflow/lowcodepage/appCardPage.vue

@ -379,7 +379,7 @@ const handleCurrentChange = (val: any) => {
<div> <div>
<div v-loading="loadingApp" class="content1 flex flex-wrap gap-4"> <div v-loading="loadingApp" class="content1 flex flex-wrap gap-4">
<el-card v-for="item in contList" :key="item.id" class="cardBox"> <el-card v-for="item in contList" :key="item.id" class="cardBox">
<template #header> <template #header v-if="item.isEdit">
<el-dropdown v-if="item.classify == 3"> <el-dropdown v-if="item.classify == 3">
<span class="el-dropdown-link"> <span class="el-dropdown-link">
<el-icon><MoreFilled /></el-icon> <el-icon><MoreFilled /></el-icon>

Loading…
Cancel
Save