Browse Source

修改权限及流程

qin_26
herenshan112 2 months ago
parent
commit
e565863d14
  1. 30
      src/api/system/roleapi/postrole.ts
  2. 12
      src/api/system/roleapi/power.ts
  3. 6
      src/api/system/roleapi/types.ts
  4. 2
      src/api/user/types.ts
  5. 2
      src/components/workflow/dialog/errorDialog.vue
  6. 1
      src/components/workflow/drwer/approverDrawer.vue
  7. 2
      src/directive/index.ts
  8. 23
      src/directive/permission/button.ts
  9. 7
      src/store/modules/user.ts
  10. 18
      src/utils/workflow/index.ts
  11. 1567
      src/views/hr/archives/index.vue
  12. 1465
      src/views/hr/archives/index_251128.vue
  13. 1060
      src/views/system/monitor/online/index.vue
  14. 6
      src/views/system/monitor/online/index2.vue
  15. 308
      src/views/system/monitor/online/roleConfig/setRolePeople.vue
  16. 4
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/pageFlow.vue
  17. 248
      src/views/taskplatform/taskmanagement/edittaskcustomerform.vue
  18. 5
      src/views/taskplatform/taskmanagement/flowStep.vue
  19. 215
      vite.config.ts.timestamp-1763685117626-b9e83b063ec3.mjs

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

@ -150,3 +150,33 @@ export function getPowerPageUser(data?: any){
data:data
});
}
/**
*
*/
export function systemAppAuthorization(data?: any){
return request({
url: '/systemapi/authorize/systemAppAuthorization',
method: 'post',
data:data
});
}
/**
* 使
*/
export function getRolePeople(data?: any){
return request({
url: '/systemapi/authorize/getRolePeople',
method: 'post',
data:data
});
}
/**
* 使
*/
export function savePickRoleMan(data?: any){
return request({
url: '/systemapi/authorize/savePickRoleMan',
method: 'post',
data:data
});
}

12
src/api/system/roleapi/power.ts

@ -11,3 +11,15 @@ import { getSystemPower } from "./types";
data:data
});
}
/**
@ 作者: 秦东
@ 时间: 2025-11-28 10:24:09
@ 功能: 授权行政组织书
*/
export function authorizeOrgTree(data?: getSystemPower){
return request({
url: '/systemapi/hr/authorizeOrgTree',
method: 'post',
data:data
});
}

6
src/api/system/roleapi/types.ts

@ -292,6 +292,7 @@ export interface getSystemPower{
appType:string;
appSystem:string;
roleId:string;
isPick?:boolean;
}
@ -322,3 +323,8 @@ export interface VisibleRangeInfo {
types:number;
val:string;
}
//搜索
export interface searchUser extends setupPage{
name?:string;
}

2
src/api/user/types.ts

@ -6,6 +6,8 @@ export interface UserInfo {
avatar: string;
roles: string[];
perms: string[];
allPowerConfig: any;
userInfoCont: any;
}
/**

2
src/components/workflow/dialog/errorDialog.vue

@ -32,7 +32,7 @@ let visibleDialog = computed({
<div class="ant-confirm-content">
<div>
<p class="error-modal-desc">以下内容不完善需进行修改</p>
<div class="error-modal-list">
<div class="error-modal-list">{{list}}
<div v-for="(item,index) in list" :key="index" class="error-modal-item">
<div class="error-modal-item-label">流程设计</div>
<div class="error-modal-item-content">{{item.name}} 未选择{{item.type}}</div>

1
src/components/workflow/drwer/approverDrawer.vue

@ -309,6 +309,7 @@ const saveApprover = () => {
formData: JSON.stringify(formData.value),
formPower: JSON.stringify(formData.value.purview),
};
console.log("sendInfo----------------->", sendInfo);
// console.log("sendInfo", sendInfo);
setFlowFormKeyPower(sendInfo);
closeDrawer();

2
src/directive/index.ts

@ -1,9 +1,11 @@
import type { App } from 'vue';
import { hasPerm } from './permission';
import { hasButton } from './permission/button';
// 全局注册 directive
export function setupDirective(app: App<Element>) {
// 使 v-hasPerm 在所有组件中都可用
app.directive('hasPerm', hasPerm);
app.directive('hasButton', hasButton);
}

23
src/directive/permission/button.ts

@ -0,0 +1,23 @@
import { Directive, DirectiveBinding } from 'vue';
import { useUserStore } from "@/store/modules/user";
/**
*
*/
export const hasButton: Directive = {
mounted(el: HTMLElement, binding: DirectiveBinding) {
const userStore = useUserStore();
// const { value,oldValue } = binding;
// console.log("按钮权限",el,"-->",binding,"-->",value,"-->",oldValue,"-->",userStore.myPower);
console.log("按钮权限",el,"-->",binding,"-->","-->",userStore.myPower);
// if (value) {
// const requiredPerms = value; // DOM绑定需要的按钮权限标识
// const hasPerm = userStore.myPower.menuIdAry.some((perm: any) => {
// return requiredPerms.includes(perm);
// });
// if (!hasPerm) {
// el.parentNode?.removeChild(el);
// }
// }
}
}

7
src/store/modules/user.ts

@ -22,6 +22,7 @@ export const useUserStore = defineStore("user", () => {
const perms = ref<Array<string>>([]); // 用户权限编码集合 → 判断按钮权限
const userKey = useStorage("userKey", "");
const userToken = useStorage("userToken", "");
const myPower = ref<any>("");
const userInfoCont = ref<any>("");
/**
@ -95,7 +96,7 @@ export const useUserStore = defineStore("user", () => {
// });
getUserInfoIng()
.then(({data})=>{
// console.log("获取用户信息:角色必须是非null数组!",data);
console.log("获取用户信息:角色必须是非null数组!",data);
// debugger;
if (!data) {
return reject("验证失败,请重新登录。");
@ -108,6 +109,8 @@ export const useUserStore = defineStore("user", () => {
roles.value = data.roles;
perms.value = data.perms;
userInfoCont.value = data
myPower.value = data.allPowerConfig
console.log("myPower.value",myPower.value);
resolve(data);
})
.catch((error:any) => {
@ -139,6 +142,7 @@ export const useUserStore = defineStore("user", () => {
userKey.value = "";
userToken.value = "";
userInfoCont.value = ""
myPower.value = ""
avatar.value = "";
roles.value = [];
perms.value = [];
@ -152,6 +156,7 @@ export const useUserStore = defineStore("user", () => {
avatar,
roles,
perms,
myPower,
login,
getInfo,
logout,

18
src/utils/workflow/index.ts

@ -62,8 +62,10 @@ All.prototype = {
console.log("setApproverStr---签字解析--->",nodeConfig);
if (nodeConfig.settype == 1) {
if (nodeConfig.nodeUserList.length == 1) {
nodeConfig.error = false;
return nodeConfig.nodeUserList[0].name
} else if (nodeConfig.nodeUserList.length > 1) {
nodeConfig.error = false;
if (nodeConfig.examineMode == 1) {
return this.arrToStr(nodeConfig.nodeUserList)
} else if (nodeConfig.examineMode == 2) {
@ -78,14 +80,18 @@ All.prototype = {
let level = nodeConfig.directorLevel == 1 ? '直接主管' : '第' + nodeConfig.directorLevel + '级主管'
if (nodeConfig.examineMode == 1) {
nodeConfig.error = false;
return level
} else if (nodeConfig.examineMode == 2) {
nodeConfig.error = false;
return level + "会签"
}else if (nodeConfig.examineMode == 3) {
nodeConfig.error = false;
return level + + "或签"
}
} else if (nodeConfig.settype == 3) {
// console.log("nodeConfig==会签==>",nodeConfig)
nodeConfig.error = false;
if (nodeConfig.nodeUserList.length == 1) {
return nodeConfig.nodeUserList[0].name
}else{
@ -94,9 +100,11 @@ All.prototype = {
} else if (nodeConfig.settype == 4) {
// console.log("nodeConfig.selectRange",nodeConfig.selectRange,nodeConfig.nodeUserList);
if (nodeConfig.selectRange == 1) {
nodeConfig.error = false;
return "发起人自选"
} else {
if (nodeConfig.nodeUserList.length > 0) {
nodeConfig.error = false;
if (nodeConfig.selectRange == 2) {
return "发起人从指定成员中自选"
} else {
@ -107,15 +115,19 @@ All.prototype = {
}
}
} else if (nodeConfig.settype == 5) {
nodeConfig.error = false;
return "发起人自己"
} else if (nodeConfig.settype == 6) {
nodeConfig.error = false;
// console.log("nodeConfig==直接主管==>",nodeConfig)
return '从直接主管到通讯录中级别最高的第' + nodeConfig.examineEndDirectorLevel + '个层级主管'
}else if (nodeConfig.settype == 7){
nodeConfig.error = false;
return "指定前置审批为本节点设置审批人"
}else if (nodeConfig.settype == 8){
// console.log("checkedFormList--1111->",nodeConfig)
if(nodeConfig.nodeUserList.length > 0){
nodeConfig.error = false;
if (nodeConfig.examineMode == 1) {
return nodeConfig.nodeUserList[0].name + "依次审批"
} else if (nodeConfig.examineMode == 2) {
@ -138,7 +150,7 @@ All.prototype = {
strVal += item.outcomeName;
})
}
nodeConfig.error = false;
if (nodeConfig.examineMode == 1) {
return strVal + "依次审批"
} else if (nodeConfig.examineMode == 2) {
@ -146,8 +158,10 @@ All.prototype = {
}else if (nodeConfig.examineMode == 3) {
return strVal + "或签"
}
}else{
if(nodeConfig.matrix && nodeConfig.matrix.outcomeName){
nodeConfig.error = false;
let strVal = nodeConfig.matrix.outcomeName
if (nodeConfig.examineMode == 1) {
return strVal + "依次审批"
@ -156,11 +170,13 @@ All.prototype = {
}else if (nodeConfig.examineMode == 3) {
return strVal + "或签"
}
}
}
}else if (nodeConfig.settype == 10){
nodeConfig.error = false;
return "指定部门负责人"
}
},

1567
src/views/hr/archives/index.vue

File diff suppressed because it is too large

1465
src/views/hr/archives/index_251128.vue

File diff suppressed because it is too large

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

File diff suppressed because it is too large

6
src/views/system/monitor/online/index2.vue

@ -503,11 +503,7 @@ const onQuedOrg = (query: string) => {
<table class="table_body">
<thead>
<tr v-if="systemPower.powerType == 'role'">
<td align="center" width="20%">应用</td>
<td align="center" width="50%">应用详情</td>
</tr>
<tr v-else>
<tr>
<td align="center" width="20%">应用</td>
<td width="80%">
<div class="appPickPower">

308
src/views/system/monitor/online/roleConfig/setRolePeople.vue

@ -0,0 +1,308 @@
<!--
@ 作者: 秦东
@ 时间: 2025-11-26 10:13:15
@ 备注: 编辑角色使用人
-->
<script lang='ts' setup>
import type { getSystemPower,AppPowerTree,systemList } from "@/api/system/roleapi/types";
import { savePickRoleMan,getPowerPageUser,getRolePeople } from "@/api/system/roleapi/postrole";
import type { TreeInstance } from 'element-plus'
import type {RoleListTree} from '@/api/role/types'
import { Search } from '@element-plus/icons-vue'
import SvgIcon from "@/components/SvgIcon/index.vue";
const squareUrl = ref<string>(
"https://cube.elemecdn.com/9/c2/f0ee8a3c7c9638a54940382568c9dpng.png"
);
const props = defineProps({
show: {
type: Boolean,
default: false
},
org: {
type: Array as () => orgInfo[],
default: () => []
},
roleInfo: {
type: Object as () => RoleListTree,
default: () => ({})
}
})
const userLoading = ref(false)
const emit = defineEmits(['update:show'])
const isShow = computed(() => {
if(props.show){
getPowerPageUserSub()
getPickUser()
}
return props.show
})
const roleInfo = computed(() => {
return props.roleInfo
})
const orgTree = computed(() => {
return props.org
})
const treeBoxHeightOrg = ref(400)
const treeRefOrgUser = ref<TreeInstance>()
const propsOrg = {
value: 'id',
label: 'name',
// disabled:'status',
children: 'child',
}
const userPage = reactive({
page: 1,
pageSize: 20,
orgId: '',
name: '',
total: 0
})
const userPowerList = ref<systemList>({}) //
const userPowerListPick = ref<systemList[]>([]) //
const pickUserKey = ref<string[]>([]) //使key
const searchQuery = ref('') //
//
const onQuePeople = (query: string) => {
console.log(query)
treeRefOrgUser.value!.filter(query)
}
const filterMethodOrg = (query: string, node: any) => {
return node.name!.includes(query)
}
/**
@ 作者: 秦东
@ 时间: 2025-11-26 10:19:05
@ 功能: 关闭弹窗
*/
const closeDialog = () => {
emit('update:show', false)
userPowerList.value =
pickUserKey.value=[]
userPowerListPick.value=[]
}
/**
@ 作者: 秦东
@ 时间: 2025-11-26 16:32:58
@ 功能: 选择行政组织
*/
const pickOrgTree = (node: any) => {
userPage.page = 1
userPage.name = ''
userPage.orgId = node.id
console.log(userPage)
getPowerPageUserSub()
}
const getPowerPageUserSub = () => {
userLoading.value = true
getPowerPageUser(userPage).then(({data})=>{
console.log("获取平台授权项目用户------->",data)
userPowerList.value = data.list
userPage.total = data.total
userLoading.value = false
})
}
const pickName = ref("")
const getPickUser = () => {
getRolePeople({
roleId: roleInfo.value.id*1,
name: pickName.value
}).then(({data})=>{
console.log("获取角色使用人------->",data)
if(data.list && Array.isArray(data.list)){
userPowerListPick.value = data.list
}else{
userPowerListPick.value = []
}
pickUserKey.value = data.userKey
})
}
const pickUserInfo = (item: any) => {
let isPick = true
if(pickUserKey.value.includes(item.id)){
pickUserKey.value = pickUserKey.value.filter((i) => i !== item.id)
isPick = false
}else{
pickUserKey.value.push(item.id)
isPick = true
}
if(isPick){
userPowerListPick.value.push(item)
}else{
userPowerListPick.value = userPowerListPick.value.filter((i) => i.id !== item.id)
}
}
//
const isPick = (item: any) => {
return pickUserKey.value.includes(item.id)
}
//使
const delUserPick = (item: any) => {
pickUserKey.value = pickUserKey.value.filter((i) => i !== item.id)
userPowerListPick.value = userPowerListPick.value.filter((i) => i.id !== item.id)
}
/**
@ 作者: 秦东
@ 时间: 2025-11-27 10:18:29
@ 功能: 保存人员
*/
const saveRolePeople = () => {
console.log("保存角色使用人------->",roleInfo.value.id*1,pickUserKey.value)
savePickRoleMan({
roleId: roleInfo.value.id*1,
userKey: pickUserKey.value
}).then((data)=>{
console.log("保存角色使用人------->",data)
if(data.code === 0){
ElMessage.success("保存成功")
closeDialog()
}else{
ElMessage.error(data.msg || "保存失败")
}
})
}
onMounted(() => {
getPickUser()
})
</script>
<template>
<el-dialog
v-model="isShow"
:title="`编辑<<${roleInfo.label}>>角色使用人`"
width="800"
destroy-on-close
:before-close="closeDialog"
>
<el-row class="dialog-row" :gutter="10">
<el-col :span="8">
<div class="quan">
<div class="searchBox">
<el-input v-model="searchQuery" placeholder="请输入要查找的行政组织" :prefix-icon="Search" @input="onQuePeople" clearable />
</div>
<el-tree-v2
ref="treeRefOrgUser"
style="max-width: 100%;"
:data="orgTree"
:props="propsOrg"
:filter-method="filterMethodOrg"
:height="treeBoxHeightOrg"
:v-loading="roleLoading"
:highlight-current="true"
:check-on-click-node="true"
:expand-on-click-node="false"
@node-click="pickOrgTree"
>
</el-tree-v2>
</div>
</el-col>
<el-col :span="9">
<div class="quan">
<div class="searchBox">
<el-input v-model="userPage.name" placeholder="请输入姓名、工号" :prefix-icon="Search" clearable />
</div>
<el-scrollbar v-loading="userLoading" height="370px">
<div v-for="item in userPowerList" :key="item.id" :class="isPick(item)?'userBox active':'userBox'" @click="pickUserInfo(item)">
<el-avatar shape="square" :size="size" :src="item.icon?item.icon:squareUrl" />
<div class="userInfo">
<el-text type="primary" >{{ item.name }}({{ item.code }})</el-text>
<el-text type="primary" >{{ item.org }}</el-text>
</div>
<div style="width: 40px;">
</div>
</div>
</el-scrollbar>
<div class="paginationBox">
<el-pagination
v-model:current-page="userPage.page"
:page-size="userPage.pageSize"
:pager-count="7"
layout="prev, pager, next"
:total="userPage.total"
@change="getPowerPageUserSub"
/>
</div>
</div>
</el-col>
<el-col :span="7">
<div class="quan">
<div class="searchBox">
<!-- <el-input v-model="pickName" placeholder="请输入姓名、工号" :prefix-icon="Search" clearable /> -->
已经选择的使用人
</div>
<el-scrollbar height="415px">
<div v-for="item in userPowerListPick" :key="item.id" class="userBox" >
<el-avatar shape="square" :size="size" :src="item.icon?item.icon:squareUrl" />
<div class="userInfo">
<el-text type="primary" >{{ item.name }}({{ item.code }})</el-text>
<el-text type="primary" >{{ item.org }}</el-text>
</div>
<div>
<svg-icon icon-class="dels" @click="delUserPick(item)" />
</div>
</div>
</el-scrollbar>
</div>
</el-col>
</el-row>
<template #footer>
<div class="dialog-footer">
<el-button @click="closeDialog">取消</el-button>
<el-button type="primary" @click="saveRolePeople">
确认
</el-button>
</div>
</template>
</el-dialog>
</template>
<style lang='scss' scoped>
.dialog-row{
width: 100%;
.quan{
width: 100%;
border: 1px solid #ccc;
overflow: hidden;
}
.searchBox{
padding: 5px 10px 5px 10px;
}
}
.userBox{
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
padding: 5px 10px;
border-bottom: 1px dashed rgba($color: #000000, $alpha: 0.2);
.userInfo{
width: 60%;
}
div{
span{
display: flex;
width: 100%;
padding: 0 5px;
color:rgba($color: #000000, $alpha: 0.6);
}
}
svg{
cursor: pointer;
color: #FF0000;
}
}
.userBox.active {
background-color: #a0cfff;
}
.paginationBox{
width: 100%;
display: flex;
justify-content: center;
}
</style>

4
src/views/sysworkflow/lowcodepage/appPage/appPageForm/pageFlow.vue

@ -247,7 +247,7 @@ const initWorkFlowData = async () => {
processConfig.value.workFlowDef.formKey = appPageKey.value;
nodeConfig.value = nodes;
flowPermission.value = flowPermissiones;
directorMaxLeveling = levels;
directorMaxLeveling.value = levels;
workFlowDef.value = workName;
setTableId(tableId);
@ -397,7 +397,7 @@ const gainFlowCont = () => {
processConfig.value.workFlowDef.formKey = appPageKey.value;
nodeConfig.value = data.data.nodeConfig;
flowPermission.value = data.data.flowPermission;
directorMaxLeveling = data.data.directorMaxLevel;
directorMaxLeveling.value = data.data.directorMaxLevel;
workFlowDef.value = data.data.workFlowDef;
setTableId(data.data.tableId);
flowIsTrue.value = true;

248
src/views/taskplatform/taskmanagement/edittaskcustomerform.vue

@ -1,248 +0,0 @@
<!--
@ 作者: 秦东
@ 时间: 2023-09-26 09:12:55
@ 备注: 编辑自定义表单数据
-->
<script lang='ts' setup>
import { ref, reactive, onMounted, computed, nextTick } from 'vue'
import { useRouter } from 'vue-router'
import {
string2json,
stringToObj
} from '@/utils/DesignForm/form'
import { haveCustomerFormVersion } from '@/api/taskapi/management'
import { judgeSubmitCancel } from '@/api/DesignForm/requestapi'
import '@/assets/scss/element-var.scss'
import '@/assets/scss/index.scss'
import '@/assets/iconfont/iconfont.css'
import 'element-plus/dist/index.css'
const props = defineProps({
iseditopen:{
type:Boolean,
default:true
},
versionid:{
type:String,
default:""
},
versiontitle:{
type:String,
default:""
},
masterskey:{
type:String,
default:""
},
infoid:{
type:String,
default:""
},
drawerwith:{
type:Number,
default:0
}
})
const submitButton = {
type: "div",
control:{},
config:{
textAlign: "center",
span: ""
},
list: [
{
type: "button",
control:{
label: "保存",
type: "primary",
key: "submit"
},
config:{
textAlign: "center"
}
}
]
}
const cancelButton = {
type: "div",
control:{},
config:{
textAlign: "center",
span: ""
},
list: [
{
type: "button",
control:{
label: "返回",
type: "danger",
key: "cancel"
},
config:{
textAlign: "center"
}
}
]
}
const submitAndCancelButton = {
type: "div",
control:{},
config:{
span: 24,
textAlign: "center"
},
list: [
{
type: "button",
control:{
label: "保存",
type: "primary",
key: "submit"
},
config:{
span: 0
}
},
{
type: "button",
control:{
label: "返回",
type: "danger",
key: "cancel"
},
config:{
span: 0
}
}
]
};
const loadingData = ref(false)
const formEl = ref()
const state = reactive<any>({
type: 1, // 123 4 5
formData: {
list: [],
form: {},
config: {}
},
dict: {},
formId: props.versionid,
id: props.masterskey,
loading: true
})
const formType = computed(() => {
// id
if (props.infoid) {
return 2
} else {
return 1
}
})
const emits = defineEmits(["update:iseditopen","searchquery"]);
const isShow = computed({
get: () => props.iseditopen,
set: (val) => {
emits("update:iseditopen", val);
},
});
//
const getTaskFormData = () =>{
loadingData.value = true;
haveCustomerFormVersion({id:props.versionid})
.then(({ data }) =>{
// console.log("",data)
state.id=props.versionid
state.formData = stringToObj(data.mastesform)
state.dict = string2json(data.dict)
judgeSubmitCancel({"name":data.mastesformjson})
.then((data:any) =>{
if(data.code == 0){
if (data.data == 3 || data.data == 4){
state.formData.list.push(submitButton)
}
}
})
})
.finally(()=>{
formEl.value.getData({ formId: props.versionid, id: props.masterskey})
loadingData.value = false;
})
}
const drawerWith = ref<number>(0);
onMounted(()=>{
drawerWith.value = window.innerWidth - 220
});
window.addEventListener("resize", function(){
drawerWith.value = window.innerWidth -220
})
const beforeSubmit = (params: any) => {
params.formId = props.masterskey
params.id = props.versionid
// emits("update:isopen", false);
// console.log(params,"===========================>")
return params
}
const afterSubmit = (type: string) => {
if (type === 'success') {
// router.go(-1)
// console.log("")
emits("searchquery");
closeAppSubmit();
}
}
const closeAppSubmit = () => {
emits("update:iseditopen", false);
initData();
}
const initData = () => {
state.formData = {
list: [],
form: {},
config: {}
};
state.dict = {};
state.formId = 0;
state.id = 0;
state.loading = true;
}
watch(()=>props.iseditopen,()=>{
if(props.iseditopen){
getTaskFormData();
}else{
initData()
}
})
const changeKeyVal = (key:any,val:any,type:any,attribute:any) => {
}
</script>
<template>
<el-drawer v-model="isShow" v-loading="loadingData" :title="versiontitle" :close-on-click-modal="false" :close-on-press-escape="false" :destroy-on-close="true" :size="props.drawerwith" class="drawerClass" >
<div class="drawerBody">
<ak-form
ref="formEl"
:form-data="state.formData"
:type="formType"
:dict="state.dict"
request-url="getFormContent"
add-url="saveFormContent"
edit-url="editFormContent"
:before-submit="beforeSubmit"
:after-submit="afterSubmit"
:close-app-submit="closeAppSubmit"
:change-key-val="changeKeyVal"
/>
</div>
</el-drawer>
</template>
<style lang='scss' scoped>
</style>

5
src/views/taskplatform/taskmanagement/flowStep.vue

@ -141,7 +141,6 @@ const updateNode = (val:any) =>{
</el-tooltip>
</template>
<template #description>
<table>
<tr v-for="items in item.operator" :key="items.id">
<td valign="top" align="center" width="50">
@ -187,7 +186,7 @@ const updateNode = (val:any) =>{
</template>
</el-step>
</el-steps>
{{ openOrClose }}======={{ openclosebox }}
<OrgUserPage v-if="openOrClose" v-model:openclose="openOrClose" :preset-personnel="presetPersonnel" :selected-people="selectedPeople" @update-node="updateNode" />
<OrgAllUserPage v-if="openclosebox" v-model:openclosebox="openclosebox" :selected-people="selectedPeople" @update-node="updateNode" />
</div>
@ -200,4 +199,4 @@ const updateNode = (val:any) =>{
display:block;
cursor:pointer;
}
</style>
</style>

215
vite.config.ts.timestamp-1763685117626-b9e83b063ec3.mjs

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save