Browse Source

复制角色

qin_27
herenshan112 7 days ago
parent
commit
f58bb97682
  1. 13
      src/api/system/roleapi/postrole.ts
  2. 144
      src/views/system/monitor/online/index.vue
  3. 51
      src/views/system/monitor/online/powerPage/appTabsPick.vue
  4. 14
      src/views/system/monitor/online/roleConfig/addRoleGroup.vue

13
src/api/system/roleapi/postrole.ts

@ -276,3 +276,16 @@ export function appPowerConfig(data?: any){
data:data
});
}
/**
@ 作者: 秦东
@ 时间: 2025-12-11 14:23:55
@ 功能: 分组授权
*/
export function copyRolePower(data?: any){
return request({
url: '/systemapi/authorize/copyRolePower',
method: 'post',
data:data
});
}

144
src/views/system/monitor/online/index.vue

@ -5,14 +5,15 @@
-->
<script lang='ts' setup>
import { getOrgTreeList } from "@/api/hr/org/index";
import { appInitAuthorization,gainAppTableListNew,getPowerPageUser,systemAppAuthorization,gainAppEmpowerPower } from "@/api/system/roleapi/postrole";
import { appInitAuthorization,gainAppTableListNew,getPowerPageUser,systemAppAuthorization,copyRolePower } from "@/api/system/roleapi/postrole";
import { appPowerUnit } from "@/api/system/roleapi/power";
import { giveRoleTree,editRoleStatus,getOrgPostTree } from '@/api/role/index'
import type { getSystemPower,AppPowerTree,systemList,custerAppInfo, custerAppTablePower, searchUser } from "@/api/system/roleapi/types";
import type { TreeInstance } from 'element-plus'
import type { FormRules, TreeInstance } from 'element-plus'
import type {RoleListTree,RoleFormInfo,orgAndPostisListTree} from '@/api/role/types'
import { appTableBut, appListBut,appDetailBut,formBaseBut,appGroupBut } from "@/utils/workflow/const";
import { Search } from '@element-plus/icons-vue'
import SvgIcon from "@/components/SvgIcon/index.vue";
@ -500,6 +501,61 @@ const savePowerUserSub = () => {
}
})
}
/**
@ 作者: 秦东
@ 时间: 2026-01-15 15:17:25
@ 功能: 复制角色
*/
const copyRoleRef = ref(ElForm)
const copyIshow = ref(false)
const copyRoleInfo = ref<any>()
const copyRolePowerInfo = (val:any) => {
console.log("复制角色",val)
val.label = val.label+"_复制"
copyRoleInfo.value = val
copyIshow.value = true
}
const handleCloseCopyRole = () => {
copyIshow.value = false
copyRoleRef.value.resetFields()
}
//
const rulesCopyRole = reactive({
label: [{ required: true, message: "请输入名称", trigger: "blur" }],
})
/**
@ 作者: 秦东
@ 时间: 2026-01-15 15:40:16
@ 功能: 提交复制
*/
const sumbCopy = () => {
console.log("提交复制",copyRoleInfo.value)
copyRoleRef.value.validate((isValid: boolean)=>{
if(isValid){
copyRolePower({
id: copyRoleInfo.value.id.toString(),
label: copyRoleInfo.value.label,
}).then((data:any)=>{
console.log("提交复制-data--3---->",data)
if(data.code==0){
ElMessage({
message: "提交成功",
type: "success",
})
}else{
ElMessage({
message: "提交失败",
type: "error",
})
}
}).finally(()=>{
handleCloseCopyRole()
})
}
})
}
//
onMounted(()=>{
getOrgTreeAry();
@ -514,6 +570,34 @@ onMounted(()=>{
</script>
<template>
<div class="app-content">
<el-dialog
v-model="copyIshow"
title="复制角色"
width="500"
:before-close="handleCloseCopyRole"
>
<el-form
ref="copyRoleRef"
style="width: 100%"
:model="copyRoleInfo"
:rules="rulesCopyRole"
label-width="auto"
>
<el-form-item label="名称" prop="label">
<el-input v-model="copyRoleInfo.label" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="handleCloseCopyRole">取消</el-button>
<el-button type="primary" @click="sumbCopy">提交
</el-button>
</div>
</template>
</el-dialog>
<div ref="roleLeft" class="roleLeft">
<el-tabs v-model="systemPower.powerType" class="demo-tabs">
<el-tab-pane label="组织" name="org">
@ -564,12 +648,54 @@ onMounted(()=>{
<template #label>
<el-text class="tabsTitle">角色</el-text>
</template>
<div class="butBox">
<div class="butBox" style="display: none;">
<el-button type="primary" @click="addRoleGroup(2)">新建角色组</el-button>
<el-button type="primary" @click="addRoleGroup(1)">新建角色</el-button>
</div>
<div class="searchBox">
<div class="searchBox czjzzydq">
<el-input v-model="searchQuery" placeholder="请输入要查找的角色" :suffix-icon="Search" @input="onQueryChanged"/>
<el-dropdown>
<el-button type="primary" class="fa fa-plus" />
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="addRoleGroup(1)">
<el-row>
<el-col :span="24">
<el-space wrap>
<svg-icon
style="color: #eebe77"
prefix="icon"
icon-class="liuChengBiaoDan"
/>
新建角色
</el-space>
</el-col>
<el-col :span="24" style="padding-left: 20px; font-size: 12px">
数据收集事件记录<br />任务协同业务审批
</el-col>
</el-row>
</el-dropdown-item>
<el-dropdown-item @click="addRoleGroup(2)">
<el-row>
<el-col :span="24">
<el-space wrap>
<svg-icon
style="color: #337ecc"
prefix="icon"
icon-class="fenZhu"
/>
新建角色组
</el-space>
</el-col>
<el-col :span="24" style="padding-left: 20px; font-size: 12px">
应用项目管理
</el-col>
</el-row>
</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</div>
<div class="treeBoxClass">
<el-tree-v2
@ -605,6 +731,9 @@ onMounted(()=>{
<el-dropdown-item>
<el-text size="small" @click.stop="editMyInfoIcon(node.data,3)">编辑</el-text>
</el-dropdown-item >
<el-dropdown-item v-if="node.data.types == 1" divided>
<el-text size="small" @click.stop="copyRolePowerInfo(node.data)">复制</el-text>
</el-dropdown-item>
<el-dropdown-item divided>
<el-text type="danger" size="small" @click.stop="editMyInfoIcon(node.data,4)">删除</el-text>
</el-dropdown-item>
@ -742,7 +871,7 @@ onMounted(()=>{
</el-tabs>
</div>
<AddRoleGroup v-if="openRoleGroup" v-model:show="openRoleGroup" :group-info="roleGroupOrInfo" @resthandel="getRoleTree" />
<AddRoleGroup v-if="openRoleGroup" v-model:show="openRoleGroup" :group-info="roleGroupOrInfo" @resthandel="getRoleTree" />
<SetRolePeople v-model:show="setRolePople" :org="orgTree" :role-info="setRoleManInfo" />
<EditRoleGroup v-if="openEditRoleGroup" v-model:show="openEditRoleGroup" :group-info="roleGroupOrInfo" :data="editRoleCont" @resthandel="getRoleTree" />
</div>
@ -769,6 +898,11 @@ onMounted(()=>{
.searchBox{
padding: 0 10px 5px 10px;
}
.czjzzydq{
display: flex;
align-items: center;
justify-content: space-between;
}
.treeBox{
height: calc(100vh - 330px);

51
src/views/system/monitor/online/powerPage/appTabsPick.vue

@ -197,7 +197,7 @@ const handleAppChange = (item:any,isTrue:boolean) => {
item.forEach((menu:any) => {
menu.isTrue = isTrue
if(isTrue){
menu.formPower = [ "zc", "tj", "dy", "sc", "fz"]
menu.formPower = [ "zc", "tj", "dy", " sc", "fz"]
menu.listPower = [ "newAdd", "import", "export", "sc", "dy", "showQrCode","del","bj"]
menu.listPowerIsAll = true
menu.formPowerIsAll = true
@ -262,13 +262,29 @@ const pickAllGroupBut = (item:any) => {
@ 功能: 页面授权联动
*/
const changePageButBox = (item:any,types:number) => {
console.log("页面授权联动--->",item.pagePower.length,item,types)
console.log("页面授权联动-1-->",item.pagePower.length,item,types)
console.log("页面授权联动-2-->",types)
console.log("页面授权联动--3->",item)
if(item.pagePower.length == types){
item.pagePowerIsAll = true
}else{
item.pagePowerIsAll = false
}
}
const changePageButBoxTab = (item:any,types:number) => {
if(item.formPower.length == types){
item.formPowerIsAll = true
}else{
item.formPowerIsAll = false
}
}
const changePageButBoxList = (item:any,types:number) => {
if(item.listPower.length == types){
item.listPowerIsAll = true
}else{
item.listPowerIsAll = false
}
}
/**
@ 作者: 秦东
@ 时间: 2025-12-26 15:47:23
@ -339,6 +355,32 @@ const submintAppPower = (appCont:AppPowerTreeMaster) => {
defineExpose({
getAppList
})
/**
@ 作者: 秦东
@ 时间: 2026-01-15 14:09:05
@ 功能: app属性全选
*/
const appPagePower = (value: any,cont:any) => {
console.log("app属性全选--->",value)
console.log("app属性全选-cont-->",cont)
if(Array.isArray(value)){
if(value.length == 12){
cont.isPick = true
}else{
cont.isPick = false
}
}
}
/**
@ 作者: 秦东
@ 时间: 2026-01-15 14:11:41
@ 功能: 单个选择
*/
const appPagePowerone = (val:any,num:number,istre:boolean) => {
// console.log("--->",val)
// console.log("--->",num)
// console.log("--->",istre)
}
</script>
<template>
<div class="app-tabs-content">
@ -386,12 +428,13 @@ defineExpose({
<el-checkbox v-model="item.isPick" label="全选" @change="pickAppAllPower(item)" />
</div>
<div class="app-form-checkbox">
<el-checkbox-group v-model="item.operationButton">
<el-checkbox-group v-model="item.operationButton" @change="appPagePower($event,item)">
<el-checkbox
v-for="city in appDetailBut"
:key="city.key"
:label="city.label"
:value="city.value"
@change="appPagePowerone"
>
{{ city.label }}
</el-checkbox>
@ -454,6 +497,7 @@ defineExpose({
:key="city.value"
:label="city.label"
:value="city.value"
@change="changePageButBoxTab(scope.row,appTableBut.length)"
>
{{ city.label }}
</el-checkbox>
@ -472,6 +516,7 @@ defineExpose({
:key="city.key"
:label="city.label"
:value="city.value"
@change="changePageButBoxList(scope.row,appListBut.length)"
>
{{ city.label }}
</el-checkbox>

14
src/views/system/monitor/online/roleConfig/addRoleGroup.vue

@ -26,6 +26,18 @@ const isShow = computed({
emits("update:show", val);
},
});
const digoTielw = computed({
get() {
if(props.groupInfo==1){
return "编辑角色"
}else{
return "编辑角色组"
}
},
set(val: boolean) {
emits("update:show", val);
},
});
const butLoading = ref(false)
const treeSelectData = ref<RoleListTree[]>([])
const formData = reactive<RoleFormInfo>({
@ -106,7 +118,7 @@ onMounted(()=>{
<template>
<el-dialog
v-model="isShow"
title="编辑角色"
:title="digoTielw"
width="500"
destroy-on-close
draggable

Loading…
Cancel
Save