界面优化,宿舍分配只能分配所属学科宿舍
This commit is contained in:
parent
587ace2901
commit
48b47dfb99
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
|
@ -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> -->
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
transition: all 0.5s;
|
||||
line-height: normal;
|
||||
padding: 5px;
|
||||
margin-bottom: 6px;
|
||||
margin-top: 6px;
|
||||
">
|
||||
评阅人员管理系统
|
||||
</span>
|
||||
|
|
|
@ -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();
|
||||
});
|
||||
}
|
||||
|
|
|
@ -106,7 +106,7 @@ const setting: ProjectConfig = {
|
|||
// 菜单模式
|
||||
mode: MenuModeEnum.INLINE,
|
||||
// 菜单类型
|
||||
type: MenuTypeEnum.SIDEBAR,
|
||||
type: MenuTypeEnum.MIX,
|
||||
// 菜单主题
|
||||
theme: ThemeEnum.DARK,
|
||||
// 分割菜单
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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[] = [
|
||||
|
|
|
@ -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)) {
|
||||
|
|
Loading…
Reference in New Issue