zhangjie преди 1 ден
родител
ревизия
47c948fc5d

+ 4 - 4
src/api/admin.ts

@@ -59,18 +59,18 @@ export function splitCourseTemplate(): Promise<AxiosResponse<blob>> {
 // 授权管理
 // 授权管理信息
 export function getAuthInfo(): Promise<AuthInfo> {
-  return axios.post('/api/admin/auth/info');
+  return axios.post('/api/admin/sys/auth/info');
 }
 // 授权管理信息编辑
 export function updateAuthInfo(
   datas: AuthUpdateParams
-): Promise<{ id: number }> {
-  return axios.post('/api/admin/auth/save', datas);
+): Promise<CommonActionRes> {
+  return axios.post('/api/admin/sys/auth/update', datas);
 }
 
 // 导出硬件信息
 export function exportHardwareInfo(): Promise<AxiosResponse<blob>> {
-  return axios.post('/api/admin/auth/export', {}, { responseType: 'blob' });
+  return axios.post('/api/admin/sys/auth/export', {}, { responseType: 'blob' });
 }
 
 // 配置管理

+ 7 - 2
src/api/types/user.ts

@@ -1,4 +1,9 @@
-import { RoleType, BatchAddRole, UserSource } from '@/constants/enumerate';
+import {
+  AllRoleType,
+  RoleType,
+  BatchAddRole,
+  UserSource,
+} from '@/constants/enumerate';
 import { PageResult, PageParams } from './common';
 
 export interface LoginData {
@@ -19,7 +24,7 @@ export interface UserItem {
   // 来源 (例如:内部用户)
   source: UserSource;
   // 角色 (例如:学校管理员, 扫描员)
-  role: RoleType;
+  role: AllRoleType;
   // 角色名称
   roleName: string;
   // 状态 (启用/禁用)

+ 6 - 0
src/assets/style/element-custom.scss

@@ -20,6 +20,12 @@
       background-image: linear-gradient(180deg, #f9f9f9 0%, #f1f1f1 100%);
     }
   }
+
+  .el-table__cell {
+    .el-button + .el-button {
+      margin-left: 8px;
+    }
+  }
 }
 
 // .el-pagination

+ 8 - 2
src/constants/enumerate.ts

@@ -12,8 +12,6 @@ export const ENABLE_TYPE = {
 // 基础 -------------->
 // 角色
 export const ROLE_TYPE = {
-  // "SYS_ADMIN"|"SCANNER"|"SUBJECT_HEADER"|"INSPECTOR"|"MARKER"|"SCHOOL_VIEWER"|"SCHOOL_ADMIN"|"COLLEGE_ADMIN"|"SCAN_ADMIN"
-  // SYS_ADMIN: '系统管理员',
   SCANNER: '扫描员',
   SUBJECT_HEADER: '科组长',
   INSPECTOR: '复核员',
@@ -25,6 +23,14 @@ export const ROLE_TYPE = {
 
 export type RoleType = keyof typeof ROLE_TYPE;
 
+// "SYS_ADMIN"|"SCANNER"|"SUBJECT_HEADER"|"INSPECTOR"|"MARKER"|"SCHOOL_VIEWER"|"SCHOOL_ADMIN"|"COLLEGE_ADMIN"|"SCAN_ADMIN"
+export const ALL_ROLE_TYPE = {
+  ...ROLE_TYPE,
+  SYS_ADMIN: '系统管理员',
+  SCAN_ADMIN: '扫描管理员',
+};
+export type AllRoleType = keyof typeof ALL_ROLE_TYPE;
+
 // 批量新增角色
 export const BATCH_ADD_ROLE = {
   SUBJECT_HEADER: '科组长',

+ 1 - 1
src/router/guard/permission.ts

@@ -16,7 +16,7 @@ export default function setupUserLoginInfoGuard(router: Router) {
     if (!appStore.appMenus.length) {
       const useStore = useUserStore();
       // TODO:测试
-      appStore.fetchLocalMenu();
+      appStore.fetchLocalMenu(useStore.role);
       // await appStore.fetchServerMenu(useStore.role);
       console.log(useStore.role);
     }

+ 1 - 1
src/router/routes/modules/admin.ts

@@ -3,7 +3,7 @@ import { AppRouteRecordRaw } from '../types';
 
 const ADMIN: AppRouteRecordRaw = {
   path: '/admin',
-  name: 'base',
+  name: 'admin',
   component: DEFAULT_LAYOUT,
   meta: {
     requiresAuth: true,

+ 10 - 5
src/store/modules/app/index.ts

@@ -1,11 +1,12 @@
 import { defineStore } from 'pinia';
 import { UserMenuItem } from '@/api/types/user';
 import { getUserPrivilegeMenu } from '@/api/user';
+import { RoleType } from '@/constants/enumerate';
 import { AppState, AppMenuItem } from './types';
 import { relateRoutes } from './relation';
+import { sysAdminMenus, adminMenus } from './menuData';
 
-// import { sysAdminMenus as menus } from './menuData';
-import { adminMenus as menus } from './menuData';
+type AllRoleType = RoleType | 'SYS_ADMIN';
 
 function getMenu(privilegeData: UserMenuItem[]): {
   menuList: AppMenuItem[];
@@ -82,13 +83,17 @@ const useAppStore = defineStore('app', {
     setInfo(partial: Partial<AppState>) {
       this.$patch(partial);
     },
-    fetchLocalMenu() {
-      const userMenus = menus;
+    fetchLocalMenu(role: AllRoleType) {
+      const userMenus = role === 'SYS_ADMIN' ? sysAdminMenus : adminMenus;
       const { menuList, validRoutes } = getMenu(userMenus);
       this.appMenus = menuList;
       this.validRoutes = validRoutes;
     },
-    async fetchServerMenu() {
+    async fetchServerMenu(role: AllRoleType) {
+      if (role === 'SYS_ADMIN') {
+        this.fetchLocalMenu(role);
+        return;
+      }
       const userMenus = await getUserPrivilegeMenu();
       const { menuList, validRoutes } = getMenu(userMenus);
       this.appMenus = menuList;

+ 3 - 2
src/store/modules/app/menuData.ts

@@ -6,6 +6,7 @@ export const sysAdminMenus = [
     privilegetype: 'MENU',
     parentCode: '',
     seq: 1,
+    privilegeUri: 'SchoolManage',
   },
   {
     id: 2,
@@ -14,8 +15,7 @@ export const sysAdminMenus = [
     privilegetype: 'MENU',
     parentCode: '',
     seq: 2,
-
-    roles: ['ADMIN'],
+    privilegeUri: 'SetManage',
   },
   {
     id: 3,
@@ -24,6 +24,7 @@ export const sysAdminMenus = [
     privilegetype: 'MENU',
     parentCode: '',
     seq: 3,
+    privilegeUri: 'AuthManage',
   },
 ];
 

+ 1 - 0
src/store/modules/app/relation.ts

@@ -23,4 +23,5 @@ export const relateRoutes = {
   ExamManage: ['ExamEdit'],
   SubjectManage: ['PaperStructEdit', 'OptionalRuleEdit'],
   ScanManage: ['ScanCourseStats', 'ScanPointStats', 'SignPaperStats'],
+  SchoolManage: ['RoleManage'],
 };

+ 3 - 0
src/store/modules/user/index.ts

@@ -28,6 +28,9 @@ const useUserStore = defineStore('user', {
     userInfo(state: UserState): UserState {
       return { ...state };
     },
+    isSuperAdmin(state: UserState): boolean {
+      return state.role === 'SYS_ADMIN';
+    },
     isSchoolAdmin(state: UserState): boolean {
       return state.role === 'SCHOOL_ADMIN';
     },

+ 2 - 2
src/utils/filter.ts

@@ -1,7 +1,7 @@
 import {
   DEFAULT_LABEL,
   ENABLE_TYPE,
-  ROLE_TYPE,
+  ALL_ROLE_TYPE,
   EXAM_TYPE,
   MARKING_MODE,
   LOG_TYPE,
@@ -17,7 +17,7 @@ export const dictFilter = {
   enable: (val: boolean) =>
     ENABLE_TYPE[val as keyof typeof ENABLE_TYPE] || DEFAULT_LABEL,
   role: (val: string) =>
-    ROLE_TYPE[val as keyof typeof ROLE_TYPE] || DEFAULT_LABEL,
+    ALL_ROLE_TYPE[val as keyof typeof ALL_ROLE_TYPE] || DEFAULT_LABEL,
   examType: (val: string) =>
     EXAM_TYPE[val as keyof typeof EXAM_TYPE] || DEFAULT_LABEL,
   markingMode: (val: string) =>

+ 7 - 2
src/views/admin/school-manage/ModifySchool.vue

@@ -72,7 +72,11 @@
   import { ref, reactive, computed } from 'vue';
   import type { FormInstance, FormRules } from 'element-plus';
   import { ElMessage } from 'element-plus';
-  import type { SchoolItem, SchoolStatusInfo } from '@/api/types/admin';
+  import type {
+    SchoolItem,
+    SchoolStatusInfo,
+    SchoolUpdateParam,
+  } from '@/api/types/admin';
   import useModal from '@/hooks/modal';
   import useLoading from '@/hooks/loading';
   import { objAssign, objModifyAssign } from '@/utils/utils';
@@ -101,7 +105,8 @@
   const title = computed(() => `${isEdit.value ? '编辑' : '新增'}学校`);
 
   const formRef = ref<FormInstance>();
-  const initialFormState: Partial<SchoolItem> = {
+  const initialFormState: Partial<SchoolUpdateParam> = {
+    id: undefined,
     name: '',
     province: '',
     city: '',

+ 2 - 2
src/views/admin/school-manage/SchoolManage.vue

@@ -36,7 +36,7 @@
       </el-table-column>
       <el-table-column prop="province" label="省份" />
       <el-table-column prop="city" label="城市" />
-      <el-table-column label="操作" width="240">
+      <el-table-column label="操作" width="300">
         <template #default="scope">
           <el-button type="primary" link @click="onEdit(scope.row)">
             修改
@@ -131,7 +131,7 @@
   });
 
   const { dataList, pagination, getList, toPage, pageSizeChange } =
-    useTable<SchoolItem>(schoolListPage, searchModel, false);
+    useTable<SchoolItem>(schoolListPage, searchModel, true);
 
   // table action
   const curRow = ref({} as SchoolItem);