1
0

role.ts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. import {
  2. PaggingReq,
  3. PaggingRes,
  4. axios,
  5. detailRole,
  6. getListByDeptId,
  7. getPageList,
  8. getRoleTree,
  9. removeRole,
  10. userperInfo,
  11. } from "@/request";
  12. import { changSaveLocal, getLocal } from "@/util/localUtil";
  13. import { ref } from "vue";
  14. import { UserPermission, setPermission } from "./permission";
  15. import { user } from "./user";
  16. export type Role = {
  17. createTime: string;
  18. deptId: string;
  19. deptName: string;
  20. level: number;
  21. nickName: string;
  22. perm: RoleMenuTreeItem[];
  23. roleDesc: string;
  24. roleKey: string;
  25. roleName: string;
  26. sort: 1;
  27. updateTime: string;
  28. id: string;
  29. creatorId: string;
  30. type: number;
  31. perms: string;
  32. roleId: string;
  33. };
  34. export enum RoleLevel {
  35. tourist = 0,
  36. systemAdmin = 1,
  37. admin = 2,
  38. corps = 3,
  39. detachment1 = 4,
  40. detachment2 = 5,
  41. }
  42. export enum DataScope {
  43. none = 0,
  44. all = 1,
  45. selfLower = 3,
  46. selfInner = 4,
  47. personCreate = 5,
  48. }
  49. export type RoleMenuTreeItem = {
  50. id: string;
  51. permissionId: string;
  52. name: string;
  53. parentId: string;
  54. dataScope: DataScope;
  55. perms: string;
  56. type: "menu" | "button";
  57. children: RoleMenuTree;
  58. };
  59. export type RoleMenuTree = RoleMenuTreeItem[];
  60. export const roleId = ref(getLocal("roleId", ""));
  61. export const roleLevel = ref<RoleLevel>(getLocal("role", RoleLevel.tourist));
  62. export const roleMenuTree = ref<RoleMenuTree>([]);
  63. changSaveLocal("roleId", () => roleId.value);
  64. changSaveLocal("role", () => roleLevel.value);
  65. export const refreshRoleMenuTree = async () => {
  66. const res = await axios.get(getRoleTree);
  67. roleMenuTree.value = res.data;
  68. };
  69. export const getRole = async (roleId: string): Promise<Role> => {
  70. const data = (await axios.get(detailRole + roleId)).data;
  71. return {
  72. ...data,
  73. perm: data.perm.map((item: any) => ({
  74. ...item,
  75. dataScope: Number(item.dataScope),
  76. })),
  77. };
  78. };
  79. export const delRole = async (roleId: string) =>
  80. axios.post(removeRole + roleId, { id: roleId });
  81. // 服务端permission转客户端
  82. const serviceCoverUserPermission = (
  83. roles: RoleMenuTreeItem[]
  84. ): UserPermission[] =>
  85. roles.map((s) => ({
  86. resourceKey: s.perms,
  87. type: s.type,
  88. dataScope: Number(s.dataScope),
  89. }));
  90. const userPermListCover = (perms: string[]): UserPermission[] => {
  91. const uPerms: UserPermission[] = [];
  92. const addedMenus = [...perms];
  93. for (const perm of perms) {
  94. const permChild = perm.split(":");
  95. const menu = permChild.length > 1 ? permChild[0] : null;
  96. if (menu && !addedMenus.includes(menu)) {
  97. uPerms.push({
  98. resourceKey: menu,
  99. type: "menu",
  100. dataScope: DataScope.all,
  101. });
  102. addedMenus.push(menu);
  103. }
  104. uPerms.push({
  105. resourceKey: perm,
  106. type: menu ? "button" : "menu",
  107. dataScope: DataScope.all,
  108. });
  109. }
  110. return uPerms;
  111. };
  112. // 刷新权限
  113. export const refreshRole = async () => {
  114. roleLevel.value = user.value.info.isAdmin
  115. ? RoleLevel.systemAdmin
  116. : RoleLevel.corps;
  117. // console.log(, user.value.info.permsList);
  118. // setPermission(userPermListCover(user.value.info.permsList));
  119. // const { perm, level } = await getRole(roleId.value);
  120. // setPermission(serviceCoverUserPermission(perm as any));
  121. // roleLevel.value = level;
  122. };
  123. type RolePaggingParams = Pick<Role, "deptId"> & { searchKey: string };
  124. export const getRolePagging = async (params: RolePaggingParams) =>
  125. (await axios.get<PaggingRes<Role>>(getPageList, { params })).data;
  126. export const getRolesByDetpId = async (deptId: string) =>
  127. (await axios.get<Role[]>(getListByDeptId, { params: { deptId } })).data;