界面优化,宿舍分配只能分配所属学科宿舍

This commit is contained in:
Xubx 2025-05-19 15:51:43 +08:00
parent 587ace2901
commit 48b47dfb99
8 changed files with 129 additions and 119 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -4,7 +4,7 @@
-->
<template>
<div class="anticon" :class="getAppLogoClass" @click="goHome">
<img style="width: 100%;" src="../../../assets/images/logo-red.png" />
<img style="width: 100%;" src="../../../assets/images/logo-white.png" />
<div style="display: flex;" class="ml-2 truncate md:opacity-100" :class="getTitleClass" v-show="showTitle">
<!-- {{ title }} -->
<!-- <span>英语四六级综合管理平台</span> -->

View File

@ -9,6 +9,8 @@
transition: all 0.5s;
line-height: normal;
padding: 5px;
margin-bottom: 6px;
margin-top: 6px;
">
评阅人员管理系统
</span>

View File

@ -179,28 +179,40 @@ export function createPermissionGuard(router: Router) {
userStore.setAllDictItemsByLocal();
}
// update-end--author:liaozhiyang---date:20240321---for【QQYUN-8572】表格行选择卡顿问题customRender中字典引起的
if (permissionStore.getIsDynamicAddedRoute) {
next();
return;
// 修改动态路由加载逻辑
if (!permissionStore.getIsDynamicAddedRoute) {
try {
// 构建后台菜单路由
const routes = await permissionStore.buildRoutesAction();
routes.forEach((route) => {
router.addRoute(route as unknown as RouteRecordRaw);
});
router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw);
permissionStore.setDynamicAddedRoute(true);
// 添加重定向逻辑
if (to.name === PAGE_NOT_FOUND_ROUTE.name) {
// 如果是404页面尝试重定向到首页
next({ path: userStore.getUserInfo.homePath || PageEnum.BASE_HOME, replace: true });
return;
}
// 重定向到目标路由
const redirectPath = (from.query.redirect || to.path) as string;
const redirect = decodeURIComponent(redirectPath);
const nextData = to.path === redirect ? { ...to, replace: true } : { path: redirect };
next(nextData);
return;
} catch (error) {
console.error('Failed to load dynamic routes:', error);
// 如果加载失败,重定向到首页
next({ path: PageEnum.BASE_HOME, replace: true });
return;
}
}
// 构建后台菜单路由
const routes = await permissionStore.buildRoutesAction();
routes.forEach((route) => {
router.addRoute(route as unknown as RouteRecordRaw);
});
router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw);
permissionStore.setDynamicAddedRoute(true);
if (to.name === PAGE_NOT_FOUND_ROUTE.name) {
// 动态添加路由后此处应当重定向到fullPath否则会加载404页面内容
next({ path: to.fullPath, replace: true, query: to.query });
} else {
const redirectPath = (from.query.redirect || to.path) as string;
const redirect = decodeURIComponent(redirectPath);
const nextData = to.path === redirect ? { ...to, replace: true } : { path: redirect };
next(nextData);
}
next();
});
}

View File

@ -106,7 +106,7 @@ const setting: ProjectConfig = {
// 菜单模式
mode: MenuModeEnum.INLINE,
// 菜单类型
type: MenuTypeEnum.SIDEBAR,
type: MenuTypeEnum.MIX,
// 菜单主题
theme: ThemeEnum.DARK,
// 分割菜单

View File

@ -25,7 +25,7 @@ import { PageEnum } from '/@/enums/pageEnum';
// 系统权限
interface AuthItem {
// 菜单权限编码,例如:“sys:schedule:list,sys:schedule:info”,多个逗号隔开
// 菜单权限编码,例如:"sys:schedule:list,sys:schedule:info",多个逗号隔开
action: string;
// 权限策略1显示2禁用
type: string | number;
@ -184,104 +184,65 @@ export const usePermissionStore = defineStore({
return;
};
switch (permissionMode) {
case PermissionModeEnum.ROLE:
routes = filter(asyncRoutes, routeFilter);
routes = routes.filter(routeFilter);
// 将多级路由转换为二级
routes = flatMultiLevelRoutes(routes);
break;
try {
switch (permissionMode) {
case PermissionModeEnum.BACK:
const { createMessage } = useMessage();
console.log(" --- 构建后台路由菜单 --- ");
// 从后台获取权限码
let routeList: AppRouteRecordRaw[] = [];
try {
routeList = await this.changePermissionCode();
// 组件地址前加斜杠处理
routeList = addSlashToRouteComponent(routeList);
// 动态引入组件
routeList = transformObjToRoute(routeList);
case PermissionModeEnum.ROUTE_MAPPING:
routes = filter(asyncRoutes, routeFilter);
routes = routes.filter(routeFilter);
const menuList = transformRouteToMenu(routes, true);
routes = filter(routes, routeRemoveIgnoreFilter);
routes = routes.filter(routeRemoveIgnoreFilter);
menuList.sort((a, b) => {
return (a.meta?.orderNo || 0) - (b.meta?.orderNo || 0);
});
// 构建后台路由菜单
const backMenuList = transformRouteToMenu(routeList);
this.setBackMenuList(backMenuList);
this.setFrontMenuList(menuList);
// 将多级路由转换为二级
routes = flatMultiLevelRoutes(routes);
break;
// 删除meta.ignoreRoute项
routeList = filter(routeList, routeRemoveIgnoreFilter);
routeList = routeList.filter(routeRemoveIgnoreFilter);
// 后台菜单构建
case PermissionModeEnum.BACK:
const { createMessage, createWarningModal } = useMessage();
console.log(" --- 构建后台路由菜单 --- ")
// 菜单加载提示
// createMessage.loading({
// content: t('sys.app.menuLoading'),
// duration: 1,
// });
routeList = flatMultiLevelRoutes(routeList);
routes = [PAGE_NOT_FOUND_ROUTE, ...routeList];
} catch (error) {
console.error('Failed to build routes:', error);
// 如果构建失败,返回基础路由
routes = [PAGE_NOT_FOUND_ROUTE];
}
break;
// 从后台获取权限码,
// 这个函数可能只需要执行一次,并且实际的项目可以在正确的时间被放置
let routeList: AppRouteRecordRaw[] = [];
try {
routeList = await this.changePermissionCode();
//routeList = (await getMenuList()) as AppRouteRecordRaw[];
// update-begin----author:sunjianlei---date:20220315------for: 判断是否是 vue3 版本的菜单 ---
// let hasIndex: boolean = false;
// let hasIcon: boolean = false;
// for (let menuItem of routeList) {
// // 条件1判断组件是否是 layouts/default/index
// if (!hasIndex) {
// hasIndex = menuItem.component === 'layouts/default/index';
// }
// // 条件2判断图标是否带有 冒号
// if (!hasIcon) {
// hasIcon = !!menuItem.meta?.icon?.includes(':');
// }
// // 满足任何一个条件都直接跳出循环
// if (hasIcon || hasIndex) {
// break;
// }
// }
// // 两个条件都不满足,就弹出提示框
// if (!hasIcon && !hasIndex) {
// // 延迟1.5秒之后再出现提示,否则提示框出不来
// setTimeout(
// () =>
// createWarningModal({
// title: '检测提示',
// content:
// '当前菜单表是 <b>Vue2版本</b>,导致菜单加载异常!<br>点击确认切换到Vue3版菜单',
// onOk:function () {
// switchVue3Menu();
// location.reload();
// }
// }),
// 100
// );
// }
// update-end----author:sunjianlei---date:20220315------for: 判断是否是 vue3 版本的菜单 ---
} catch (error) {
console.error(error);
}
// 组件地址前加斜杠处理 author: lsq date:2021-09-08
routeList = addSlashToRouteComponent(routeList);
// 动态引入组件
routeList = transformObjToRoute(routeList);
case PermissionModeEnum.ROLE:
routes = filter(asyncRoutes, routeFilter);
routes = routes.filter(routeFilter);
routes = flatMultiLevelRoutes(routes);
break;
// 构建后台路由菜单
const backMenuList = transformRouteToMenu(routeList);
this.setBackMenuList(backMenuList);
case PermissionModeEnum.ROUTE_MAPPING:
routes = filter(asyncRoutes, routeFilter);
routes = routes.filter(routeFilter);
const menuList = transformRouteToMenu(routes, true);
routes = filter(routes, routeRemoveIgnoreFilter);
routes = routes.filter(routeRemoveIgnoreFilter);
menuList.sort((a, b) => {
return (a.meta?.orderNo || 0) - (b.meta?.orderNo || 0);
});
this.setFrontMenuList(menuList);
routes = flatMultiLevelRoutes(routes);
break;
}
// 删除meta.ignoreRoute项
routeList = filter(routeList, routeRemoveIgnoreFilter);
routeList = routeList.filter(routeRemoveIgnoreFilter);
routeList = flatMultiLevelRoutes(routeList);
routes = [PAGE_NOT_FOUND_ROUTE, ...routeList];
break;
routes.push(ERROR_LOG_ROUTE);
patchHomeAffix(routes);
return routes;
} catch (error) {
console.error('Failed to build routes:', error);
return [PAGE_NOT_FOUND_ROUTE];
}
routes.push(ERROR_LOG_ROUTE);
patchHomeAffix(routes);
return routes;
},
setAuthData(systemPermission) {
this.authList = systemPermission.auth;

View File

@ -66,6 +66,40 @@ export const searchFormSchema: FormSchema[] = [
component: 'Input',
//colProps: {span: 6},
},
// 用户专业id
{
label: '用户专业ID',
field: 'userMajorId',
component: 'Input',
},
// 身份
{
label: '身份',
field: 'identity',
component: 'Select',
componentProps: {
options: [
{ label: '行政人员', value: 1 },
{ label: '学生', value: 2 },
{ label: '本校老师', value: 3 },
{ label: '外校老师', value: 4 },
],
},
},
// 学科
{
label: '学科',
field: 'majorId',
component: 'Select',
componentProps: {
options: [
{ label: '语文', value: 1 },
{ label: '地理', value: 4 },
{ label: '历史', value: 7 },
{ label: '政治', value: 8 },
],
},
},
];
//表单数据
export const formSchema: FormSchema[] = [

View File

@ -70,7 +70,7 @@
style="width: 120px"
v-model:value="record.dormitoryName"
:disabled="record.dormitoryName != null"
@focus="handleFocus(record.sex, record)"
@focus="handleFocus(record)"
@change="handleChange(record.userId, record.dormitoryName, record)"
filterables
>
@ -366,11 +366,12 @@
}
// handleFocus
async function handleFocus(sex, record) {
async function handleFocus(record) {
console.log('dormitory11:', record.dormitoryId);
console.log('性别:', sex);
console.log('性别:', record.sex);
console.log('学科:', record.majorId);
try {
const response = await selectBySex({ sex });
const response = await selectBySex({ sex: record.sex, majorId: record.majorId });
console.log('响应:', response);
//
if (Array.isArray(response)) {