diff --git a/src/api/system/roleapi/postrole.ts b/src/api/system/roleapi/postrole.ts index e059889..d4f2c85 100644 --- a/src/api/system/roleapi/postrole.ts +++ b/src/api/system/roleapi/postrole.ts @@ -103,6 +103,13 @@ export function gainAppTableList(data?: any){ data:data }); } +export function gainAppTableListNew(data?: any){ + return request({ + url: '/systemapi/grant/gainAppTableListNew', + method: 'post', + data:data + }); +} /** * 获取指定角色授权 */ @@ -113,3 +120,63 @@ export function setpAppTableForms(data?: any){ data:data }); } +/** + * 获取首层子行政组织和本组织下的人员 + */ +export function getMyPeoplceAndSunOrg(data?: any){ + return request({ + url: '/systemapi/authorize/getMyPeoplceAndSunOrg', + method: 'post', + data:data + }); +} +/** + * 获取首层子行政组织和本组织下的岗位及人员 + */ +export function getMyPeopleAndSunOrgPost(data?: any){ + return request({ + url: '/systemapi/authorize/getMyPeopleAndSunOrgPost', + method: 'post', + data:data + }); +} +/** + * 获取人员 + */ +export function getPowerPageUser(data?: any){ + return request({ + url: '/systemapi/authorize/getPowerPageUser', + method: 'post', + 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 + }); +} diff --git a/src/api/system/roleapi/power.ts b/src/api/system/roleapi/power.ts new file mode 100644 index 0000000..39bbd92 --- /dev/null +++ b/src/api/system/roleapi/power.ts @@ -0,0 +1,49 @@ +import request from "@/utils/request"; +import { getSystemPower } from "./types"; + +/** + * 获取平台授权项目 + */ + export function appPowerUnit(data: getSystemPower){ + return request({ + url: '/systemapi/authorize/appPowerUnit', + method: 'post', + data:data + }); +} +/** +@ 作者: 秦东 +@ 时间: 2025-11-28 10:24:09 +@ 功能: 授权行政组织书 +*/ +export function authorizeOrgTree(data?: getSystemPower){ + return request({ + url: '/systemapi/hr/authorizeOrgTree', + method: 'post', + data:data + }); +} +/** +@ 作者: 秦东 +@ 时间: 2025-11-28 10:24:09 +@ 功能: 根据权限获取数据 +*/ +export function authorizePeopleList(data?: getSystemPower){ + return request({ + url: '/systemapi/hr/authorizePeopleList', + method: 'post', + data:data + }); +} +/** +@ 作者: 秦东 +@ 时间: 2025-11-28 10:24:09 +@ 功能: 新增人员 +*/ +export function addNewPeople(data?: getSystemPower){ + return request({ + url: '/systemapi/hr/addNewPeople', + method: 'post', + data:data + }); +} diff --git a/src/api/system/roleapi/types.ts b/src/api/system/roleapi/types.ts index 50ab1cc..ffb55ce 100644 --- a/src/api/system/roleapi/types.ts +++ b/src/api/system/roleapi/types.ts @@ -285,3 +285,46 @@ export interface custerAppTablePower extends custerAppInfo{ attribute:number[] }; } + +//获取平台授权项目 +export interface getSystemPower{ + powerType:string; + appType:string; + appSystem:string; + roleId:string; + isPick?:boolean; +} + + +// 平台授权结构体 +export interface AppPowerInfo { + id :number; + name :string; //菜单名称 + types :number; + perm :number; + sort :number; + parentId :number; + isTrue :boolean; +} + +// 分流 +export interface AppMenuBut extends AppPowerInfo { + buttenPower:AppPowerInfo[] +} + +// 平台授权结构树 +export interface AppPowerTree extends AppMenuBut { + children:AppPowerTree[] + visible :number; + visibleRange:VisibleRangeInfo[]; //当可见范围为自定义范围时。此辅助选项生效 +} + +export interface VisibleRangeInfo { + types:number; + val:string; +} + +//搜索 +export interface searchUser extends setupPage{ + name?:string; +} diff --git a/src/api/user/types.ts b/src/api/user/types.ts index 613ad6e..4535199 100644 --- a/src/api/user/types.ts +++ b/src/api/user/types.ts @@ -6,6 +6,8 @@ export interface UserInfo { avatar: string; roles: string[]; perms: string[]; + allPowerConfig: any; + userInfoCont: any; } /** diff --git a/src/components/workflow/dialog/errorDialog.vue b/src/components/workflow/dialog/errorDialog.vue index 800d639..dda748c 100644 --- a/src/components/workflow/dialog/errorDialog.vue +++ b/src/components/workflow/dialog/errorDialog.vue @@ -32,7 +32,7 @@ let visibleDialog = computed({

以下内容不完善,需进行修改

-
+
{{list}}
流程设计
{{item.name}} 未选择{{item.type}}
diff --git a/src/components/workflow/drwer/approverDrawer.vue b/src/components/workflow/drwer/approverDrawer.vue index fcb8b41..e6b374f 100644 --- a/src/components/workflow/drwer/approverDrawer.vue +++ b/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(); diff --git a/src/directive/index.ts b/src/directive/index.ts index 960fa44..402558f 100644 --- a/src/directive/index.ts +++ b/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) { // 使 v-hasPerm 在所有组件中都可用 app.directive('hasPerm', hasPerm); + app.directive('hasButton', hasButton); } diff --git a/src/directive/permission/button.ts b/src/directive/permission/button.ts new file mode 100644 index 0000000..b44d998 --- /dev/null +++ b/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 } = binding; + // console.log("按钮权限",el,"-->",binding,"-->",value,"-->",userStore.myPower.menuButIdAry,"-->",userStore.myPower); + + if (value) { + const requiredPerms = value; // DOM绑定需要的按钮权限标识 + const hasPerm = userStore.myPower.menuButIdAry.some((perm: any) => { + return requiredPerms.includes(perm); + }); + if (!hasPerm) { + el.parentNode?.removeChild(el); + } + } + } +} diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts index 061a0fc..4863bda 100644 --- a/src/store/modules/user.ts +++ b/src/store/modules/user.ts @@ -22,6 +22,7 @@ export const useUserStore = defineStore("user", () => { const perms = ref>([]); // 用户权限编码集合 → 判断按钮权限 const userKey = useStorage("userKey", ""); const userToken = useStorage("userToken", ""); + const myPower = ref(""); const userInfoCont = ref(""); /** @@ -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, diff --git a/src/utils/workflow/index.ts b/src/utils/workflow/index.ts index 364bd40..e696a58 100644 --- a/src/utils/workflow/index.ts +++ b/src/utils/workflow/index.ts @@ -62,10 +62,10 @@ All.prototype = { console.log("setApproverStr---签字解析--->",nodeConfig); if (nodeConfig.settype == 1) { if (nodeConfig.nodeUserList.length == 1) { - nodeConfig.error=false + nodeConfig.error = false; return nodeConfig.nodeUserList[0].name } else if (nodeConfig.nodeUserList.length > 1) { - nodeConfig.error=false + nodeConfig.error = false; if (nodeConfig.examineMode == 1) { return this.arrToStr(nodeConfig.nodeUserList) } else if (nodeConfig.examineMode == 2) { @@ -77,18 +77,21 @@ All.prototype = { // return "指定成员" } } else if (nodeConfig.settype == 2) { - nodeConfig.error=false + 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) { - nodeConfig.error=false // console.log("nodeConfig==会签==>",nodeConfig) + nodeConfig.error = false; if (nodeConfig.nodeUserList.length == 1) { return nodeConfig.nodeUserList[0].name }else{ @@ -97,11 +100,11 @@ All.prototype = { } else if (nodeConfig.settype == 4) { // console.log("nodeConfig.selectRange",nodeConfig.selectRange,nodeConfig.nodeUserList); if (nodeConfig.selectRange == 1) { - nodeConfig.error=false + nodeConfig.error = false; return "发起人自选" } else { if (nodeConfig.nodeUserList.length > 0) { - nodeConfig.error=false + nodeConfig.error = false; if (nodeConfig.selectRange == 2) { return "发起人从指定成员中自选" } else { @@ -112,20 +115,19 @@ All.prototype = { } } } else if (nodeConfig.settype == 5) { - nodeConfig.error=false + nodeConfig.error = false; return "发起人自己" } else if (nodeConfig.settype == 6) { - nodeConfig.error=false - + nodeConfig.error = false; // console.log("nodeConfig==直接主管==>",nodeConfig) return '从直接主管到通讯录中级别最高的第' + nodeConfig.examineEndDirectorLevel + '个层级主管' }else if (nodeConfig.settype == 7){ - nodeConfig.error=false + nodeConfig.error = false; return "指定前置审批为本节点设置审批人" }else if (nodeConfig.settype == 8){ // console.log("checkedFormList--1111->",nodeConfig) if(nodeConfig.nodeUserList.length > 0){ - nodeConfig.error=false + nodeConfig.error = false; if (nodeConfig.examineMode == 1) { return nodeConfig.nodeUserList[0].name + "依次审批" } else if (nodeConfig.examineMode == 2) { @@ -139,7 +141,7 @@ All.prototype = { console.log("setApproverStr---签字解析--9->",nodeConfig.matrix.list); if(nodeConfig.matrix && nodeConfig.matrix.list){ let strVal = "" - nodeConfig.error=false + if(nodeConfig.matrix.list.length > 0){ nodeConfig.matrix.list.forEach((item:any,inx:number)=>{ if (inx > 0) { @@ -148,7 +150,7 @@ All.prototype = { strVal += item.outcomeName; }) } - + nodeConfig.error = false; if (nodeConfig.examineMode == 1) { return strVal + "依次审批" } else if (nodeConfig.examineMode == 2) { @@ -156,9 +158,10 @@ All.prototype = { }else if (nodeConfig.examineMode == 3) { return strVal + "或签" } + }else{ if(nodeConfig.matrix && nodeConfig.matrix.outcomeName){ - nodeConfig.error=false + nodeConfig.error = false; let strVal = nodeConfig.matrix.outcomeName if (nodeConfig.examineMode == 1) { return strVal + "依次审批" @@ -167,12 +170,13 @@ All.prototype = { }else if (nodeConfig.examineMode == 3) { return strVal + "或签" } + } } }else if (nodeConfig.settype == 10){ - nodeConfig.error=false + nodeConfig.error = false; return "指定部门负责人" } }, diff --git a/src/views/hr/archives/archivescont.vue b/src/views/hr/archives/archivescont.vue index 1a0e2b4..34ef36f 100644 --- a/src/views/hr/archives/archivescont.vue +++ b/src/views/hr/archives/archivescont.vue @@ -57,7 +57,7 @@ const userIcon = ref(); //人员头像 const boxTitle = ref(); //弹出框标题 const userConting = ref(""); //人员信息 const rowLoading = ref(false); -const imgUploadApiUrl = import.meta.env.VITE_APP_BASE_API + "/api/upordown"; //图片上传地址 +const imgUploadApiUrl = import.meta.env.VITE_APP_BASE_API+"/setupFile/uploads/oneFileUpload";//图片上传地址 const editMyOrgCont = ref(false); //编辑行政组织 const editMyCont = ref(false); //编辑个人信息 /** @@ -134,11 +134,14 @@ const handleAvatarSuccess: UploadProps["onSuccess"] = ( uploadFiles ) => { userIcon.value = URL.createObjectURL(uploadFile.raw!); + // console.log("上传成功-------------------->", uploadFile); + // console.log("上传成功-------------------->", props.archivesdata.id); //修改人员头像 editMyInfoIcon({ id: props.archivesdata.id, iconpath: response.data.url, }).then((data) => { + fileUploadIng.value = false; ElMessage.success("编辑成功"); emits("getarchivespageclick"); }); diff --git a/src/views/hr/archives/index.vue b/src/views/hr/archives/index.vue index 921f7c4..013825e 100644 --- a/src/views/hr/archives/index.vue +++ b/src/views/hr/archives/index.vue @@ -1,371 +1,203 @@ -