界面优化,宿舍分配只能分配所属学科宿舍
This commit is contained in:
parent
587ace2901
commit
48b47dfb99
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
|
@ -4,7 +4,7 @@
|
||||||
-->
|
-->
|
||||||
<template>
|
<template>
|
||||||
<div class="anticon" :class="getAppLogoClass" @click="goHome">
|
<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">
|
<div style="display: flex;" class="ml-2 truncate md:opacity-100" :class="getTitleClass" v-show="showTitle">
|
||||||
<!-- {{ title }} -->
|
<!-- {{ title }} -->
|
||||||
<!-- <span>英语四六级综合管理平台</span> -->
|
<!-- <span>英语四六级综合管理平台</span> -->
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
transition: all 0.5s;
|
transition: all 0.5s;
|
||||||
line-height: normal;
|
line-height: normal;
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
|
margin-bottom: 6px;
|
||||||
|
margin-top: 6px;
|
||||||
">
|
">
|
||||||
评阅人员管理系统
|
评阅人员管理系统
|
||||||
</span>
|
</span>
|
||||||
|
|
|
@ -179,11 +179,10 @@ export function createPermissionGuard(router: Router) {
|
||||||
userStore.setAllDictItemsByLocal();
|
userStore.setAllDictItemsByLocal();
|
||||||
}
|
}
|
||||||
// update-end--author:liaozhiyang---date:20240321---for:【QQYUN-8572】表格行选择卡顿问题(customRender中字典引起的)
|
// update-end--author:liaozhiyang---date:20240321---for:【QQYUN-8572】表格行选择卡顿问题(customRender中字典引起的)
|
||||||
if (permissionStore.getIsDynamicAddedRoute) {
|
|
||||||
next();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// 修改动态路由加载逻辑
|
||||||
|
if (!permissionStore.getIsDynamicAddedRoute) {
|
||||||
|
try {
|
||||||
// 构建后台菜单路由
|
// 构建后台菜单路由
|
||||||
const routes = await permissionStore.buildRoutesAction();
|
const routes = await permissionStore.buildRoutesAction();
|
||||||
routes.forEach((route) => {
|
routes.forEach((route) => {
|
||||||
|
@ -193,14 +192,27 @@ export function createPermissionGuard(router: Router) {
|
||||||
router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw);
|
router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw);
|
||||||
permissionStore.setDynamicAddedRoute(true);
|
permissionStore.setDynamicAddedRoute(true);
|
||||||
|
|
||||||
|
// 添加重定向逻辑
|
||||||
if (to.name === PAGE_NOT_FOUND_ROUTE.name) {
|
if (to.name === PAGE_NOT_FOUND_ROUTE.name) {
|
||||||
// 动态添加路由后,此处应当重定向到fullPath,否则会加载404页面内容
|
// 如果是404页面,尝试重定向到首页
|
||||||
next({ path: to.fullPath, replace: true, query: to.query });
|
next({ path: userStore.getUserInfo.homePath || PageEnum.BASE_HOME, replace: true });
|
||||||
} else {
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 重定向到目标路由
|
||||||
const redirectPath = (from.query.redirect || to.path) as string;
|
const redirectPath = (from.query.redirect || to.path) as string;
|
||||||
const redirect = decodeURIComponent(redirectPath);
|
const redirect = decodeURIComponent(redirectPath);
|
||||||
const nextData = to.path === redirect ? { ...to, replace: true } : { path: redirect };
|
const nextData = to.path === redirect ? { ...to, replace: true } : { path: redirect };
|
||||||
next(nextData);
|
next(nextData);
|
||||||
|
return;
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Failed to load dynamic routes:', error);
|
||||||
|
// 如果加载失败,重定向到首页
|
||||||
|
next({ path: PageEnum.BASE_HOME, replace: true });
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
next();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,7 +106,7 @@ const setting: ProjectConfig = {
|
||||||
// 菜单模式
|
// 菜单模式
|
||||||
mode: MenuModeEnum.INLINE,
|
mode: MenuModeEnum.INLINE,
|
||||||
// 菜单类型
|
// 菜单类型
|
||||||
type: MenuTypeEnum.SIDEBAR,
|
type: MenuTypeEnum.MIX,
|
||||||
// 菜单主题
|
// 菜单主题
|
||||||
theme: ThemeEnum.DARK,
|
theme: ThemeEnum.DARK,
|
||||||
// 分割菜单
|
// 分割菜单
|
||||||
|
|
|
@ -25,7 +25,7 @@ import { PageEnum } from '/@/enums/pageEnum';
|
||||||
|
|
||||||
// 系统权限
|
// 系统权限
|
||||||
interface AuthItem {
|
interface AuthItem {
|
||||||
// 菜单权限编码,例如:“sys:schedule:list,sys:schedule:info”,多个逗号隔开
|
// 菜单权限编码,例如:"sys:schedule:list,sys:schedule:info",多个逗号隔开
|
||||||
action: string;
|
action: string;
|
||||||
// 权限策略1显示2禁用
|
// 权限策略1显示2禁用
|
||||||
type: string | number;
|
type: string | number;
|
||||||
|
@ -184,84 +184,17 @@ export const usePermissionStore = defineStore({
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
switch (permissionMode) {
|
switch (permissionMode) {
|
||||||
case PermissionModeEnum.ROLE:
|
|
||||||
routes = filter(asyncRoutes, routeFilter);
|
|
||||||
routes = routes.filter(routeFilter);
|
|
||||||
// 将多级路由转换为二级
|
|
||||||
routes = flatMultiLevelRoutes(routes);
|
|
||||||
break;
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
// 后台菜单构建
|
|
||||||
case PermissionModeEnum.BACK:
|
case PermissionModeEnum.BACK:
|
||||||
const { createMessage, createWarningModal } = useMessage();
|
const { createMessage } = useMessage();
|
||||||
console.log(" --- 构建后台路由菜单 --- ")
|
console.log(" --- 构建后台路由菜单 --- ");
|
||||||
// 菜单加载提示
|
|
||||||
// createMessage.loading({
|
|
||||||
// content: t('sys.app.menuLoading'),
|
|
||||||
// duration: 1,
|
|
||||||
// });
|
|
||||||
|
|
||||||
// 从后台获取权限码,
|
// 从后台获取权限码
|
||||||
// 这个函数可能只需要执行一次,并且实际的项目可以在正确的时间被放置
|
|
||||||
let routeList: AppRouteRecordRaw[] = [];
|
let routeList: AppRouteRecordRaw[] = [];
|
||||||
try {
|
try {
|
||||||
routeList = await this.changePermissionCode();
|
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 = addSlashToRouteComponent(routeList);
|
||||||
// 动态引入组件
|
// 动态引入组件
|
||||||
routeList = transformObjToRoute(routeList);
|
routeList = transformObjToRoute(routeList);
|
||||||
|
@ -276,12 +209,40 @@ export const usePermissionStore = defineStore({
|
||||||
|
|
||||||
routeList = flatMultiLevelRoutes(routeList);
|
routeList = flatMultiLevelRoutes(routeList);
|
||||||
routes = [PAGE_NOT_FOUND_ROUTE, ...routeList];
|
routes = [PAGE_NOT_FOUND_ROUTE, ...routeList];
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Failed to build routes:', error);
|
||||||
|
// 如果构建失败,返回基础路由
|
||||||
|
routes = [PAGE_NOT_FOUND_ROUTE];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PermissionModeEnum.ROLE:
|
||||||
|
routes = filter(asyncRoutes, routeFilter);
|
||||||
|
routes = routes.filter(routeFilter);
|
||||||
|
routes = flatMultiLevelRoutes(routes);
|
||||||
|
break;
|
||||||
|
|
||||||
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
routes.push(ERROR_LOG_ROUTE);
|
routes.push(ERROR_LOG_ROUTE);
|
||||||
patchHomeAffix(routes);
|
patchHomeAffix(routes);
|
||||||
return routes;
|
return routes;
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Failed to build routes:', error);
|
||||||
|
return [PAGE_NOT_FOUND_ROUTE];
|
||||||
|
}
|
||||||
},
|
},
|
||||||
setAuthData(systemPermission) {
|
setAuthData(systemPermission) {
|
||||||
this.authList = systemPermission.auth;
|
this.authList = systemPermission.auth;
|
||||||
|
|
|
@ -66,6 +66,40 @@ export const searchFormSchema: FormSchema[] = [
|
||||||
component: 'Input',
|
component: 'Input',
|
||||||
//colProps: {span: 6},
|
//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[] = [
|
export const formSchema: FormSchema[] = [
|
||||||
|
|
|
@ -70,7 +70,7 @@
|
||||||
style="width: 120px"
|
style="width: 120px"
|
||||||
v-model:value="record.dormitoryName"
|
v-model:value="record.dormitoryName"
|
||||||
:disabled="record.dormitoryName != null"
|
:disabled="record.dormitoryName != null"
|
||||||
@focus="handleFocus(record.sex, record)"
|
@focus="handleFocus(record)"
|
||||||
@change="handleChange(record.userId, record.dormitoryName, record)"
|
@change="handleChange(record.userId, record.dormitoryName, record)"
|
||||||
filterables
|
filterables
|
||||||
>
|
>
|
||||||
|
@ -366,11 +366,12 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// 定义 handleFocus 函数
|
// 定义 handleFocus 函数
|
||||||
async function handleFocus(sex, record) {
|
async function handleFocus(record) {
|
||||||
console.log('dormitory11:', record.dormitoryId);
|
console.log('dormitory11:', record.dormitoryId);
|
||||||
console.log('性别:', sex);
|
console.log('性别:', record.sex);
|
||||||
|
console.log('学科:', record.majorId);
|
||||||
try {
|
try {
|
||||||
const response = await selectBySex({ sex });
|
const response = await selectBySex({ sex: record.sex, majorId: record.majorId });
|
||||||
console.log('响应:', response);
|
console.log('响应:', response);
|
||||||
// 检查响应是否为数组
|
// 检查响应是否为数组
|
||||||
if (Array.isArray(response)) {
|
if (Array.isArray(response)) {
|
||||||
|
|
Loading…
Reference in New Issue