Explorar el Código

Merge branch 'dev-home' into 'dev'

完成组织管理,添加用户,但是编辑用户有问题

See merge request product-group-fe/sfy-safety-group/sfy-safety!9
楼航飞 hace 11 meses
padre
commit
6444e8dfeb

+ 8 - 0
src/api/auth/auth.ts

@@ -0,0 +1,8 @@
+import { http } from '@/utils/http/axios';
+
+export const getAuthValid = () => {
+  return http.request({
+    url: '/onplay/justAuth',
+    method: 'get',
+  });
+};

+ 112 - 0
src/api/auth/dept.ts

@@ -0,0 +1,112 @@
+import { http } from '@/utils/http/axios';
+import { DeptTreeItem , addDeptProps, editDeptProps} from '@/types/dept/type';
+
+/**
+ * @description: 部门列表
+ */
+export function deptList(params) {
+  return http.request({
+    url: '/dept/list',
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * @description: 部门树形列表
+ */
+export function deptTreeList(params?) {
+  return http.request({
+    url: '/dept/queryRegionTree',
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * @description: 添加部门
+ */
+export function addDept(params) {
+  return http.request({
+    url: '/dept/add',
+    method: 'post',
+    params,
+  });
+}
+
+/**
+ * @description: 编辑部门
+ */
+export function editDept(params) {
+  return http.request({
+    url: '/dept/update',
+    method: 'post',
+    params,
+  });
+}
+
+/**
+ * @description: 部门详情
+ */
+export function deptInfo(params) {
+  return http.request({
+    url: '/dept/view',
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * @description: 删除部门
+ */
+export function deleteDept(params) {
+  return http.request({
+    url: '/dept/delete',
+    method: 'post',
+    params,
+  });
+}
+
+
+/**
+ * @description: V4: 添加组织
+ */
+export function saveDept(params:addDeptProps) {
+  return http.request({
+    url: '/admin/dept/saveDept',
+    method: 'post',
+    params,
+  });
+}
+
+/**
+ * @description: V4:编辑组织
+ */
+export function updateDepartments(params:editDeptProps) {
+  return http.request({
+    url: '/admin/dept/updateDept',
+    method: 'post',
+    params,
+  });
+}
+
+// v4: 获取所有组织
+export function getAllDepartments(): Promise<DeptTreeItem[]> {
+  return http.request({
+    url: '/admin/dept/queryAllDeptTree',
+    method: 'post',
+  });
+}
+
+
+/**
+ * @description:V4: 删除部门
+ */
+export function deleteDepartments(deptId:number) {
+  return http.request({
+    url: `/admin/dept/deleteDept?deptId=${deptId}`,
+    method: 'DELETE',
+  }, {
+    isTransformResponse: false,
+  });
+}

+ 56 - 0
src/api/auth/post.ts

@@ -0,0 +1,56 @@
+import { http } from '@/utils/http/axios';
+
+/**
+ * @description: 岗位列表
+ */
+export function postList(params) {
+  return http.request({
+    url: '/post/list',
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * @description: 添加岗位
+ */
+export function addPost(params) {
+  return http.request({
+    url: '/post/add',
+    method: 'post',
+    params,
+  });
+}
+
+/**
+ * @description: 编辑岗位
+ */
+export function editPost(params) {
+  return http.request({
+    url: '/post/update',
+    method: 'post',
+    params,
+  });
+}
+
+/**
+ * @description: 岗位详情
+ */
+export function postInfo(params) {
+  return http.request({
+    url: '/post/view',
+    method: 'get',
+    params,
+  });
+}
+
+/**
+ * @description: 删除岗位
+ */
+export function deletePost(params) {
+  return http.request({
+    url: '/post/delete',
+    method: 'post',
+    params,
+  });
+}

+ 9 - 0
src/api/deptInfo/index.ts

@@ -0,0 +1,9 @@
+import { http } from '@/utils/http/axios';
+
+// 查询部门信息列表
+export function getDeptInfoList() {
+  return http.request({
+    url: '/admin/dept/queryDeptPullDownList',
+    method: 'get',
+  });
+}

+ 203 - 0
src/api/system/role.ts

@@ -0,0 +1,203 @@
+import { http } from '@/utils/http/axios';
+import { Role, RolePageRequest, RolePageResponse, RoleForm, AssignedPermissions } from '@/types/role/type';
+
+/**
+ * @description: 添加管理角色
+ */
+export function addAdminRole(params) {
+  return http.request({
+    url: '/role/addAdmin',
+    method: 'POST',
+    params,
+  });
+}
+
+export interface RoleType<T> {
+  permissionList?: T[];
+  remark?: string;
+  roleName?: string;
+  roleCode?: string;
+  roleId?: number;
+}
+
+export interface PermissionType {
+  workshopCode: string;
+  permissionId: string;
+}
+
+/**
+ * @description: 添加用户角色
+ */
+export function addRole(params: RoleType<PermissionType>) {
+  return http.request({
+    url: '/role/add',
+    method: 'POST',
+    params,
+  });
+}
+
+/**
+ * @description: 修改用户角色
+ */
+export function updateRole(params: RoleType<PermissionType>) {
+  return http.request({
+    url: '/role/update',
+    method: 'POST',
+    params,
+  });
+}
+
+/**
+ * @description: 查询管理角色信息
+ */
+export function roleAdminInfo(params) {
+  return http.request({
+    url: '/role/infoAdmin',
+
+    params,
+  });
+}
+
+/**
+ * @description: 查询用户角色信息
+ */
+export function roleUserInfo(params) {
+  return http.request({
+    url: '/role/info',
+
+    params,
+  });
+}
+
+/**
+ * @description: 编辑管理角色
+ */
+export function editAdminRole(params) {
+  return http.request({
+    url: '/role/updateAdmin',
+    method: 'POST',
+    params,
+  });
+}
+
+/**
+ * @description: 删除管理角色
+ */
+export function delAdminRole(params) {
+  return http.request({
+    url: '/role/deleteAdmin',
+    method: 'POST',
+    params,
+  });
+}
+
+/**
+ * @description: 删除用户角色
+ */
+export function delUserRole(params) {
+  return http.request({
+    url: '/role/delete',
+    method: 'POST',
+    params,
+  });
+}
+
+/**
+ * @description: 角色列表
+ */
+export function roleList(params?) {
+  return http.request({
+    url: '/role/pageList',
+    params,
+  });
+}
+
+/**
+ * @description: 所有角色列表
+ */
+export function roleAllList(params?) {
+  return http.request({
+    url: '/role/getAllRoles',
+
+    params,
+  });
+}
+
+/**
+ * @description: 获取所有权限
+ */
+export function permissionList() {
+  return http.request({
+    url: '/role/listAllPermission',
+  });
+}
+
+/** @description: 获取功能权限 */
+export function getFeaturePermissions() {
+  return http.request({
+    url: '/role/listFunctionPermission',
+  });
+}
+
+/**
+ * v4: 获取自己拥有的和自己创建的角色(分页)
+ */
+export function getRolesPage(params: RolePageRequest) {
+  return http.request<RolePageResponse>({
+    url: '/admin/role/queryRolePage',
+    method: 'POST',
+    data: params,
+  });
+}
+
+/**
+ * v4: 获取自己拥有和自己创建的角色(全量)
+ */
+export function getRoles() {
+  return http.request<Role[]>({
+    url: '/admin/role/getRoleList',
+    method: 'GET',
+  });
+}
+
+/**
+ * v4: 创建角色
+ */
+export function createRole(data: RoleForm) {
+  return http.request({
+    url: '/admin/role/addRole',
+    method: 'POST',
+    data,
+  });
+}
+
+/**
+ * v4: 编辑角色
+ */
+export function editRole(data: RoleForm) {
+  return http.request({
+    url: '/admin/role/updateRole',
+    method: 'POST',
+    data,
+  });
+}
+
+/**
+ * v4:删除菜单角色
+ */
+export function deleteRole(roleId: number) {
+  return http.request({
+    url: `/admin/role/deleteRole?roleId=${roleId}`,
+    method: 'DELETE',
+  });
+}
+
+/**
+ * v4:获取角色已分配的权限(相机、菜单、功能)
+ */
+export function getAssignedPerms(roleId: number) {
+  return http.request<AssignedPermissions>({
+    url: `/admin/role/getSelectedPerm?roleId=${roleId}`,
+    method: 'GET',
+  });
+}

+ 262 - 0
src/api/system/user-operate.ts

@@ -0,0 +1,262 @@
+import { http } from '@/utils/http/axios';
+import type { PaginationResponse } from '@/types/common/type';
+
+export interface UserType {
+  userId?: number;
+  password?: string;
+  deptId?: number | null;
+  username?: string;
+  staffNo?: string;
+  mobile?: string;
+  isDisabled?: boolean | number;
+  realname?: string;
+  roleIdList?: number[];
+  passwordRe?: string;
+  /** 租户id */
+  tenantId?: number;
+}
+
+interface AdminUserType {
+  /** 昵称 */
+  nickname: string;
+  /** 登录用户名 */
+  username: string;
+  /** 部门id */
+  deptId?: number;
+  /** 员工编号 */
+  staffNo?: string;
+  /** 密码 */
+  password: string;
+  /** 所属租户id */
+  tenantId: number;
+}
+
+export interface DeptListItem {
+  children: [];
+  createdAt: string;
+  createdBy: string;
+  deptName: string;
+  id: number;
+  isDeleted: number;
+  isDisabled: number;
+  orderNum: number;
+  parentId: string;
+  tenantId: number;
+  updatedAt: string;
+  updatedBy: string;
+}
+
+export interface RoleListItem {
+  createdAt: string;
+  createdBy: number;
+  id: number;
+  isDeleted: number;
+  roleName: string;
+  tenantId: number;
+  updatedAt: string;
+  updatedBy: null;
+}
+export interface UserLisItem {
+  avatar: string;
+  createdAt: string;
+  createdBy: null;
+  deptId: number;
+  deptList: DeptListItem[];
+  email: null;
+  gender: null;
+  id: number;
+  isDeleted: number;
+  isDisabled: number;
+  mobile: null;
+  password: string;
+  realname: string;
+  remark: null;
+  roleList: RoleListItem[];
+  roleType: number;
+  staffNo: string;
+  tenantId: number;
+  updatedAt: string;
+  updatedBy: null;
+  username: string;
+}
+
+/** root用户给某个租户添加管理员 */
+export function addAdminUser(params: AdminUserType) {
+  return http.request({
+    url: '/user/adds',
+    method: 'POST',
+    params,
+  });
+}
+
+// 添加普通用户-交付管理员
+export function addSingleUser(params: UserType) {
+  return http.request(
+    {
+      url: '/admin/user/saveUser',
+      method: 'POST',
+      params,
+    },
+    {
+      isTransformResponse: false,
+    },
+  );
+}
+
+//添加批量用户
+export function addMultipleUser(params: File) {
+  return http.request({
+    url: '/user/import',
+    method: 'POST',
+    params,
+  });
+}
+
+export interface UserTypeDel {
+  deleteStatus?: string;
+  deptId?: number;
+  email?: string;
+  isEnable?: boolean;
+  mobile?: string;
+  nickname?: string;
+  opertor?: string;
+  password?: string;
+  postId?: string;
+  remark?: string;
+  roleIds?: string[];
+  sex?: string;
+  staffNo?: string;
+  userId?: number;
+  username?: string;
+  updateTime?: string;
+  createTime?: string;
+  certify?: string;
+}
+
+export interface UserProps {
+  userId: number;
+}
+//删除用户
+export function delUser(params: UserProps) {
+  return http.request({
+    url: '/admin/user/deleteUser',
+    method: 'POST',
+    params,
+  });
+}
+
+//修改用户
+export function updateUser(params: UserType) {
+  return http.request(
+    {
+      url: '/admin/user/updateUser',
+      method: 'POST',
+      params,
+    },
+    {
+      isTransformResponse: false,
+    },
+  );
+}
+
+//获取单个用户信息
+// export function getUser(params: string): Promise<UserType> {
+//   return http.request({
+//     url: '/user/info',
+//     method: 'get',
+//     params,
+//   });
+// }
+
+export interface UserList {
+  pageNumber: number;
+  totalPage: number;
+  pageSize: number;
+  page: number;
+  records: UserTypeDel[];
+  totalCount: number;
+  pageNum: number;
+}
+
+export interface QueryUser {
+  staffNo?: string; //工号
+  realname?: string; //姓名
+  mobile?: string; //手机号
+  roleName?: string; //角色
+  deptName?: string; //组织
+  pageNumber?: number; //当前页数
+  pageSize?: number; //每页个数
+  deptId?: string;
+  roleId?: string;
+  userName: string; //登录用户
+}
+
+export interface UserPramas {
+  realname?: string; // 用户姓名
+  mobile?: string; // 手机号
+  staffNo?: string; // 工号
+  deptId?: number; // 部门
+  roleId?: number; // 角色id
+}
+
+export interface QueryUserPramas {
+  pageNumber: number; //当前页数
+  pageSize: number; //每页个数
+  queryParam: UserPramas;
+}
+
+//获取单个用户信息
+export function getUserList(params: QueryUserPramas | null): Promise<PaginationResponse<UserLisItem>> {
+  return http.request({
+    url: '/admin/user/queryUserPage',
+    method: 'post',
+    params,
+  });
+}
+
+/* V4: 修改密码参数 */
+interface ResetCodeType {
+  userId: number;
+  newPwd: string;
+}
+
+// V4: 修改密码
+export function resetCode(data: ResetCodeType) {
+  return http.request({
+    url: '/admin/user/changePassword',
+    method: 'POST',
+    data,
+  });
+}
+
+export interface AddTenantAdminProps {
+  username: string;
+  realname: string;
+  roleIdList: number[];
+  isDisabled: boolean | number;
+  password: string;
+  userId?: number;
+  passwordRe?: string;
+}
+
+// V4: 添加租户管理员
+export function addTenantAdmin(data: AddTenantAdminProps) {
+  return http.request({
+    url: 'admin/user/saveTenantAdmin',
+    method: 'POST',
+    data,
+  });
+}
+
+// V4: 删除用户
+export function deleteUser(params: UserProps) {
+  return http.request(
+    {
+      url: `admin/user/deleteUser?userId=${params.userId}`,
+      method: 'DELETE',
+    },
+    {
+      isTransformResponse: false,
+    },
+  );
+}

BIN
src/assets/icons/delete.png


BIN
src/assets/icons/edit.png


+ 2 - 31
src/hooks/useSceneInfos.ts

@@ -1,19 +1,7 @@
 import { computed, ref } from 'vue';
 import { getShopSpaceList, getCamerasByWorkShopId } from '@/api/scene/scene';
 import { CompanyInfoItem } from '@/types/scene/type.ts';
-type ElTreeItem = {
-  value: any;
-  label: string;
-  children?: ElTreeItem[];
-};
-
-type TreeProps = {
-  /** level:1-数据读取至公司 2-数据读取至工厂 3-数据读取至工位 */
-  level: number;
-  labelKey: string;
-  valueKey: string;
-  disabled?: boolean;
-};
+import { calculateTreeData, ElTreeItem, TreeProps } from '@/utils';
 
 export function useSceneInfos() {
   const scenesInfos = ref<CompanyInfoItem[]>([]);
@@ -27,29 +15,12 @@ export function useSceneInfos() {
     return scenesInfos.value.reduce((total, next) => {
       let newArr: any[] = [];
       if (next.children && next.children.length) {
-        newArr = next.children.reduce(
-          (subTotal, subNext) => [...subTotal, ...subNext.children],
-          [],
-        );
+        newArr = next.children.reduce((subTotal, subNext) => [...subTotal, ...subNext.children], []);
       }
       return [...total, ...newArr];
     }, []);
   });
 
-  const calculateTreeData = (infos: any[], treeProps: TreeProps, level: number): ElTreeItem[] => {
-    return infos.map((data) => {
-      return {
-        value: data[treeProps.valueKey],
-        label: data[treeProps.labelKey],
-        children:
-          data.children && data.children.length && treeProps.level > level
-            ? calculateTreeData(data.children, treeProps, level + 1)
-            : [],
-        disabled: treeProps.disabled && level < treeProps.level,
-      };
-    });
-  };
-
   const getScenesTree = (treeProps: TreeProps) => {
     getShopSpaceList().then((res) => {
       scenesInfos.value = res;

+ 88 - 57
src/router/full-routes.ts

@@ -323,61 +323,61 @@ export const disasterPreventionRoute = {
   redirect: '',
 };
 
-export const userRoutes: AppRouteRecordRaw =
-  /**
-   * 用户管理
-   */
-  {
-    path: '/user',
-    name: 'User',
-    component: 'LAYOUT',
-    meta: {
-      icon: 'UserOutlined',
-      title: '用户管理',
-    },
-    children: [
-      {
-        // 账号管理
-        path: 'account',
-        name: 'UserAccount',
-        component: '/system/user/user',
-        meta: {
-          icon: '',
-          title: '账号管理',
-        },
-      },
-      {
-        // 角色管理
-        path: 'role',
-        name: 'UserRole',
-        component: '/system/role/role',
-        meta: {
-          icon: '',
-          title: '角色管理',
-        },
-      },
-      {
-        // 组织管理
-        path: 'department',
-        name: 'UserDepartment',
-        component: '/auth/dept/dept',
-        meta: {
-          icon: '',
-          title: '组织管理',
-        },
-      },
-      {
-        // 岗位管理 (目前不需要)
-        path: 'post',
-        name: 'UserPost',
-        component: '/auth/post/post',
-        meta: {
-          icon: '',
-          title: '岗位管理',
-        },
-      },
-    ],
-  };
+// export const userRoutesOld: AppRouteRecordRaw =
+//   /**
+//    * 用户管理
+//    */
+//   {
+//     path: '/user',
+//     name: 'User',
+//     component: 'LAYOUT',
+//     meta: {
+//       icon: 'UserOutlined',
+//       title: '用户管理',
+//     },
+//     children: [
+//       {
+//         // 账号管理
+//         path: 'account',
+//         name: 'UserAccount',
+//         component: '/system/user/user',
+//         meta: {
+//           icon: '',
+//           title: '账号管理',
+//         },
+//       },
+//       {
+//         // 角色管理
+//         path: 'role',
+//         name: 'UserRole',
+//         component: '/system/role/role',
+//         meta: {
+//           icon: '',
+//           title: '角色管理',
+//         },
+//       },
+//       {
+//         // 组织管理
+//         path: 'department',
+//         name: 'UserDepartment',
+//         component: '/auth/dept/dept',
+//         meta: {
+//           icon: '',
+//           title: '组织管理',
+//         },
+//       },
+//       {
+//         // 岗位管理 (目前不需要)
+//         path: 'post',
+//         name: 'UserPost',
+//         component: '/auth/post/post',
+//         meta: {
+//           icon: '',
+//           title: '岗位管理',
+//         },
+//       },
+//     ],
+//   };
 
 // export const systemRoutesOld =
 //   /**
@@ -495,7 +495,38 @@ export const platformRoutes = {
         icon: 'UserOutlined',
         title: '用户管理',
       },
-      children: [],
+      children: [
+        {
+          // 组织管理
+          path: 'department',
+          name: 'UserDepartment',
+          component: '/auth/dept/dept',
+          meta: {
+            icon: '',
+            title: '组织管理',
+          },
+        },
+        {
+          // 角色管理
+          path: 'role',
+          name: 'UserRole',
+          component: '/system/role/role',
+          meta: {
+            icon: '',
+            title: '角色管理',
+          },
+        },
+        {
+          // 账号管理
+          path: 'account',
+          name: 'UserAccount',
+          component: '/system/user/user',
+          meta: {
+            icon: '',
+            title: '账号管理',
+          },
+        },
+      ],
     },
     {
       // 菜单管理
@@ -570,7 +601,7 @@ export const exceptionRouters =
 export const fullRoutes: AppRouteRecordRaw[] = [
   disasterPreventionRoute,
 
-  userRoutes,
+  // userRoutes,
 
   // systemRoutes,
   platformRoutes,

+ 29 - 0
src/utils/index.ts

@@ -292,3 +292,32 @@ export const colorRGB2Hex = (color: string): string[] => {
 
   return [hex, Number(array![4]) * 100 + '%'];
 };
+
+export type ElTreeItem = {
+  value: any;
+  label: string;
+  children?: ElTreeItem[];
+};
+
+export type TreeProps = {
+  /** level:1-数据读取至公司 2-数据读取至工厂 3-数据读取至工位 */
+  level: number;
+  labelKey: string;
+  valueKey: string;
+  disabled?: boolean;
+};
+
+/** 生成element-plus树状结构的数据 */
+export const calculateTreeData = (infos: any[], treeProps: TreeProps, level: number): ElTreeItem[] => {
+  return infos.map((data) => {
+    return {
+      value: data[treeProps.valueKey],
+      label: data[treeProps.labelKey],
+      children:
+        data.children && data.children.length && treeProps.level > level
+          ? calculateTreeData(data.children, treeProps, level + 1)
+          : [],
+      disabled: treeProps.disabled && level < treeProps.level,
+    };
+  });
+};

+ 2 - 2
src/views/auth/dept/dept.vue

@@ -72,8 +72,8 @@
   import CreateDrawer_shangfei from './CreateDrawer-shangfei.vue';
   import { useGlobSetting } from '@/hooks/setting';
   import type { DeptTreeItem } from '@/types/dept/type';
-  import editIcon from '@/assets/images/reportmessage/edit.png';
-  import deleteIcon from '@/assets/images/reportmessage/delete.png';
+  import editIcon from '@/assets/icons/edit.png';
+  import deleteIcon from '@/assets/icons/delete.png';
   import { PERM_USER } from '@/types/permission/constants';
   import { ResultEnum } from '@/enums/httpEnum';
 

+ 12 - 24
src/views/system/role/components/RoleDrawer.vue

@@ -1,18 +1,12 @@
 <template>
   <el-drawer :title="title" v-model="drawerOpened" @close="reset">
-    <el-form 
-      label-position="left" 
-      label-width="80px" 
-      :model="formData" 
-      :rules="formRules"
-      ref="formInstance"
-    >
+    <el-form label-position="left" label-width="80px" :model="formData" :rules="formRules" ref="formInstance">
       <el-form-item label="角色名称" prop="roleName">
         <el-input placeholder="角色名称" v-model="formData.roleName" />
       </el-form-item>
 
       <el-form-item label="角色权限">
-        <PermissioTreeCard title="相机权限" :tree-data="cameraPermTreeData" ref="cameraCardInstance" />
+        <!-- <PermissioTreeCard title="平台入口权限" :tree-data="menuPermTreeData" ref="menuCardInstance" /> -->
         <PermissioTreeCard title="菜单权限" :tree-data="menuPermTreeData" ref="menuCardInstance" />
         <PermissioTreeCard title="功能权限" :tree-data="funcPermTreeData" ref="funcCardInstance" />
       </el-form-item>
@@ -36,7 +30,6 @@
   import { FormRules, FormInstance, ElMessage } from 'element-plus';
   import useMenuPermTree from '../hooks/useMenuPermissionTree';
   import useFuncPermTree from '../hooks/useFunctionPermissionTree';
-  import useCameraPermTree from '../hooks/useCameraPermissionTree';
   import { createRole, editRole, getAssignedPerms } from '@/api/system/role';
   import { PermissionTreeKey } from '@/types/permission/type';
 
@@ -45,17 +38,15 @@
   }>();
 
   const emits = defineEmits<{
-    (e: 'submitted'): void;  // 提交之后触发的事件
+    (e: 'submitted'): void; // 提交之后触发的事件
   }>();
 
-  const { cameraPermTreeData } = useCameraPermTree();
   const { menuPermTreeData } = useMenuPermTree();
-  const { funcPermTreeData} = useFuncPermTree();
+  const { funcPermTreeData } = useFuncPermTree();
 
   const drawerOpened = ref(false);
-  const cameraCardInstance = ref<InstanceType<typeof PermissioTreeCard>>();
   const menuCardInstance = ref<InstanceType<typeof PermissioTreeCard>>();
-  const funcCardInstance = ref<InstanceType<typeof PermissioTreeCard>>();   
+  const funcCardInstance = ref<InstanceType<typeof PermissioTreeCard>>();
 
   // 表单相关
   const defaultFormData = (): RoleForm => ({
@@ -72,7 +63,7 @@
     remark: {},
   };
   const formInstance = ref<FormInstance>();
-  
+
   const isEditing = computed(() => formData.id != null);
 
   /**
@@ -102,13 +93,12 @@
     } catch (e) {
       console.error(e);
     }
-  }
+  };
 
   const displayAssignedPermissions = (result: AssignedPermissions) => {
     if (result.cameraIds?.length) {
       // 相机树很有可能会有 id 重复的情况,比如说 一个camera id 和 一个 workspace id 相同,这样会导致 tree 节点 value 不唯一,因此需要给个前缀
-      const cameraIds = result.cameraIds.map(id => `camera-${id}`);
-      cameraCardInstance.value?.setAssignedPermissions(cameraIds);
+      const cameraIds = result.cameraIds.map((id) => `camera-${id}`);
     }
 
     if (result.menuIds?.length) {
@@ -118,7 +108,7 @@
     if (result.permIds?.length) {
       funcCardInstance.value?.setAssignedPermissions(result.permIds);
     }
-  }
+  };
 
   /**
    * 重置表单
@@ -126,7 +116,6 @@
   const reset = () => {
     formInstance.value?.resetFields();
     Object.assign(formData, defaultFormData());
-    cameraCardInstance.value?.reset();
     menuCardInstance.value?.reset();
     funcCardInstance.value?.reset();
   };
@@ -135,7 +124,6 @@
    * 提交。创建和编辑统一
    */
   const submit = async () => {
-    formData.cameraIds = cleanCameraPermissions(cameraCardInstance.value!.getSelectedPermissions());
     formData.menuIds = menuCardInstance.value!.getSelectedPermissions();
     formData.permIds = funcCardInstance.value!.getSelectedPermissions();
 
@@ -150,13 +138,13 @@
     } catch (e) {
       console.error(e);
     }
-  }
+  };
 
   /**
    * 获取到的相机的权限码是 camera-xxx, 例如 camera-11, 提交后端转换成数字 11
    */
   const cleanCameraPermissions = (perms: PermissionTreeKey[]) => {
-    return perms.map(perm => {
+    return perms.map((perm) => {
       if (typeof perm === 'string' && perm.includes('-')) {
         const splits = perm.split('-');
         return +splits[1];
@@ -165,7 +153,7 @@
       // 否则正常返回
       return perm;
     });
-  }
+  };
 
   defineExpose({ open });
 </script>

+ 10 - 6
src/views/system/user/user.vue

@@ -26,7 +26,13 @@
             </template>
             添加用户
           </el-button>
-          <el-button color="#1890FF" @click="openAddMultipleDrawer" style="margin-left: 18px" plain  v-permission="{ action: [PERM_USER.ACCOUNT_ADD] }">
+          <el-button
+            color="#1890FF"
+            @click="openAddMultipleDrawer"
+            style="margin-left: 18px"
+            plain
+            v-permission="{ action: [PERM_USER.ACCOUNT_ADD] }"
+          >
             <template #icon>
               <el-icon>
                 <DocumentAdd />
@@ -170,7 +176,6 @@
   import { Plus, DocumentAdd, Edit, Delete, Stamp } from '@element-plus/icons-vue';
   import { EditType, OptionsProps, SearchParamsProps } from './types';
   import { RoleTypeEnum } from '@/types/role/constants';
-  import useSceneInfos from '@/hooks/useSceneInfos';
   import { getAllDepartments } from '@/api/auth/dept';
   import { getRoles } from '@/api/system/role';
   import { getUserList, UserLisItem, deleteUser } from '@/api/system/user-operate';
@@ -184,15 +189,14 @@
   import CreateDrawer from './CreateDrawer.vue';
   import ResetCodeDrawer from './ResetCodeDrawer.vue';
   import CreateAdminDrawer from './CreateAdminDrawer.vue';
-  import editIcon from '@/assets/images/reportmessage/edit.png';
-  import deleteIcon from '@/assets/images/reportmessage/delete.png';
+  import editIcon from '@/assets/icons/edit.png';
+  import deleteIcon from '@/assets/icons/delete.png';
   import { SYS_TENANT_ID } from '@/utils/useTargetTenantIdSetting';
   import { PERM_USER } from '@/types/permission/constants';
+  import { calculateTreeData } from '@/utils';
 
   const userStore = useUserStore();
   const { getUserInfo } = storeToRefs(userStore);
-  const sceneInfos = useSceneInfos();
-  const { calculateTreeData } = sceneInfos;
   const userList = ref<UserLisItem[]>([]);
   const searchFormRef = ref<InstanceType<typeof SearchForm>>();
   const createDrawerRef = ref<InstanceType<typeof CreateDrawer>>();