From 1983a65cfcebf0ab679ee9029cec1bdb88e523d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A5=9E=E7=A0=81-=E6=96=B9=E6=99=93=E8=BE=89?= Date: Sat, 31 Jan 2026 21:16:43 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E5=90=8C=E6=AD=A5=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E5=8C=BA=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 登录控制器、布局及前端页面调整 - 学校/会员/学生/基础数据等视图与组件更新 - Mock 与 ruoyi-ui 配置更新 --- .../pangu/web/controller/LoginController.java | 118 ++++++++++++------ pangu-ui/package.json | 2 +- pangu-ui/src/layout/index.vue | 6 +- pangu-ui/src/mock/school.js | 6 +- pangu-ui/src/views/base/class/index.vue | 2 +- pangu-ui/src/views/base/grade/index.vue | 2 +- pangu-ui/src/views/base/region/index.vue | 2 +- pangu-ui/src/views/base/subject/index.vue | 2 +- pangu-ui/src/views/dashboard/index.vue | 4 +- pangu-ui/src/views/member/index.vue | 2 +- .../views/school/components/ClassDialog.vue | 2 +- .../views/school/components/GradeDialog.vue | 2 +- .../views/school/components/SchoolDialog.vue | 2 +- pangu-ui/src/views/school/index.vue | 2 +- pangu-ui/src/views/student/index.vue | 2 +- ruoyi-ui/src/views/base/grade/index.vue | 22 ++-- 16 files changed, 108 insertions(+), 70 deletions(-) diff --git a/pangu-admin/src/main/java/com/pangu/web/controller/LoginController.java b/pangu-admin/src/main/java/com/pangu/web/controller/LoginController.java index fb0e26d..af726e5 100644 --- a/pangu-admin/src/main/java/com/pangu/web/controller/LoginController.java +++ b/pangu-admin/src/main/java/com/pangu/web/controller/LoginController.java @@ -68,13 +68,19 @@ public class LoginController { } /** - * 获取路由信息(菜单) + * 获取路由信息(菜单),与需求文档 3.2 功能模块一致:学校管理、会员管理、学生管理、应用管理、基础数据、系统管理、系统监控、系统工具 */ @GetMapping("/getRouters") public AjaxResult getRouters() { List> menus = new ArrayList<>(); - // 基础数据菜单 + // 需求文档:学校管理、会员管理、学生管理、应用管理、基础数据(与系统管理同级)。Vue Router 要求 path 以 / 开头 + menus.add(createMenuItem("School", "/school", "school/index", "学校管理", "education")); + menus.add(createMenuItem("Member", "/member", "member/index", "会员管理", "peoples")); + menus.add(createMenuItem("Student", "/student", "student/index", "学生管理", "people")); + menus.add(createMenuItem("Application", "/application", "application/index", "应用管理", "component")); + + // 基础数据(目录,子菜单:年级、班级、学科、区域) Map baseData = new HashMap<>(); baseData.put("name", "Base"); baseData.put("path", "/base"); @@ -83,51 +89,83 @@ public class LoginController { baseData.put("component", "Layout"); baseData.put("alwaysShow", true); baseData.put("meta", createMeta("基础数据", "dict", false, null)); - List> baseChildren = new ArrayList<>(); - - // 年级管理 - Map grade = new HashMap<>(); - grade.put("name", "Grade"); - grade.put("path", "grade"); - grade.put("hidden", false); - grade.put("component", "base/grade/index"); - grade.put("meta", createMeta("年级管理", "tree", false, null)); - baseChildren.add(grade); - - // 班级管理 - Map pgClass = new HashMap<>(); - pgClass.put("name", "Class"); - pgClass.put("path", "class"); - pgClass.put("hidden", false); - pgClass.put("component", "base/class/index"); - pgClass.put("meta", createMeta("班级管理", "peoples", false, null)); - baseChildren.add(pgClass); - - // 学科管理 - Map subject = new HashMap<>(); - subject.put("name", "Subject"); - subject.put("path", "subject"); - subject.put("hidden", false); - subject.put("component", "base/subject/index"); - subject.put("meta", createMeta("学科管理", "education", false, null)); - baseChildren.add(subject); - - // 区域管理 - Map region = new HashMap<>(); - region.put("name", "Region"); - region.put("path", "region"); - region.put("hidden", false); - region.put("component", "base/region/index"); - region.put("meta", createMeta("区域管理", "tree-table", false, null)); - baseChildren.add(region); - + baseChildren.add(createMenuItem("Grade", "grade", "base/grade/index", "年级管理", "tree-table")); + baseChildren.add(createMenuItem("Class", "class", "base/class/index", "班级管理", "list")); + baseChildren.add(createMenuItem("Subject", "subject", "base/subject/index", "学科管理", "education")); + baseChildren.add(createMenuItem("Region", "region", "base/region/index", "区域管理", "tree")); baseData.put("children", baseChildren); menus.add(baseData); + // RuoYi 系统管理 + Map system = new HashMap<>(); + system.put("name", "System"); + system.put("path", "/system"); + system.put("hidden", false); + system.put("redirect", "noRedirect"); + system.put("component", "Layout"); + system.put("alwaysShow", true); + system.put("meta", createMeta("系统管理", "system", false, null)); + List> systemChildren = new ArrayList<>(); + systemChildren.add(createMenuItem("User", "user", "system/user/index", "用户管理", "user")); + systemChildren.add(createMenuItem("Role", "role", "system/role/index", "角色管理", "peoples")); + systemChildren.add(createMenuItem("Menu", "menu", "system/menu/index", "菜单管理", "tree-table")); + systemChildren.add(createMenuItem("Dept", "dept", "system/dept/index", "部门管理", "tree")); + systemChildren.add(createMenuItem("Post", "post", "system/post/index", "岗位管理", "post")); + systemChildren.add(createMenuItem("Dict", "dict", "system/dict/index", "字典管理", "dict")); + systemChildren.add(createMenuItem("Config", "config", "system/config/index", "参数设置", "edit")); + systemChildren.add(createMenuItem("Notice", "notice", "system/notice/index", "通知公告", "message")); + system.put("children", systemChildren); + menus.add(system); + + // RuoYi 系统监控 + Map monitor = new HashMap<>(); + monitor.put("name", "Monitor"); + monitor.put("path", "/monitor"); + monitor.put("hidden", false); + monitor.put("redirect", "noRedirect"); + monitor.put("component", "Layout"); + monitor.put("alwaysShow", true); + monitor.put("meta", createMeta("系统监控", "monitor", false, null)); + List> monitorChildren = new ArrayList<>(); + monitorChildren.add(createMenuItem("Online", "online", "monitor/online/index", "在线用户", "online")); + monitorChildren.add(createMenuItem("Job", "job", "monitor/job/index", "定时任务", "job")); + monitorChildren.add(createMenuItem("Druid", "druid", "monitor/druid/index", "数据监控", "druid")); + monitorChildren.add(createMenuItem("Server", "server", "monitor/server/index", "服务监控", "server")); + monitorChildren.add(createMenuItem("Cache", "cache", "monitor/cache/index", "缓存监控", "redis")); + monitorChildren.add(createMenuItem("Operlog", "operlog", "monitor/operlog/index", "操作日志", "form")); + monitorChildren.add(createMenuItem("Logininfor", "logininfor", "monitor/logininfor/index", "登录日志", "logininfor")); + monitor.put("children", monitorChildren); + menus.add(monitor); + + // RuoYi 系统工具 + Map tool = new HashMap<>(); + tool.put("name", "Tool"); + tool.put("path", "/tool"); + tool.put("hidden", false); + tool.put("redirect", "noRedirect"); + tool.put("component", "Layout"); + tool.put("alwaysShow", true); + tool.put("meta", createMeta("系统工具", "guide", false, null)); + List> toolChildren = new ArrayList<>(); + toolChildren.add(createMenuItem("Gen", "gen", "tool/gen/index", "代码生成", "code")); + toolChildren.add(createMenuItem("Swagger", "swagger", "tool/swagger/index", "系统接口", "swagger")); + tool.put("children", toolChildren); + menus.add(tool); + return AjaxResult.success(menus); } + private Map createMenuItem(String name, String path, String component, String title, String icon) { + Map item = new HashMap<>(); + item.put("name", name); + item.put("path", path); + item.put("hidden", false); + item.put("component", component); + item.put("meta", createMeta(title, icon, false, null)); + return item; + } + private Map createMeta(String title, String icon, boolean noCache, String link) { Map meta = new HashMap<>(); meta.put("title", title); diff --git a/pangu-ui/package.json b/pangu-ui/package.json index 28f6218..b546dfa 100644 --- a/pangu-ui/package.json +++ b/pangu-ui/package.json @@ -26,4 +26,4 @@ "engines": { "node": ">=18.0.0" } -} +} \ No newline at end of file diff --git a/pangu-ui/src/layout/index.vue b/pangu-ui/src/layout/index.vue index 9bac434..8437184 100644 --- a/pangu-ui/src/layout/index.vue +++ b/pangu-ui/src/layout/index.vue @@ -88,12 +88,12 @@ * 布局组件(占位版本,待Agent-1完善) * @author pangu */ -import { Expand, Fold, Grid, HomeFilled, School, Setting, User, UserFilled } from '@element-plus/icons-vue' +import { getInfo, logout } from '@/api/user' +import { useUserStore } from '@/store/user' +import { Grid, HomeFilled, School, Setting, User, UserFilled } from '@element-plus/icons-vue' import { ElMessage } from 'element-plus' import { computed, onMounted, ref } from 'vue' import { useRoute, useRouter } from 'vue-router' -import { getInfo, logout } from '@/api/user' -import { useUserStore } from '@/store/user' const route = useRoute() const router = useRouter() diff --git a/pangu-ui/src/mock/school.js b/pangu-ui/src/mock/school.js index 66f939e..3097d27 100644 --- a/pangu-ui/src/mock/school.js +++ b/pangu-ui/src/mock/school.js @@ -56,14 +56,14 @@ const generateSchoolList = () => { { id: 121, name: '湖北省/黄冈市/黄州区' }, { id: 122, name: '湖北省/黄冈市/红安县' } ] - + const schoolNames = [ '武昌实验小学', '华师一附中', '武汉外国语学校', '水果湖第一小学', '武汉第二中学', '武汉六中', '江夏区第一中学', '武汉市第三中学', '红安县第一中学', '黄州中学', '武汉小学', '光谷第一小学', '华中科技大学附属小学', '武汉市育才小学', '武汉市常青第一学校' ] - + for (let i = 0; i < schoolNames.length; i++) { const region = regions[i % regions.length] list.push({ @@ -134,7 +134,7 @@ Mock.mock(/\/api\/school\/list/, 'get', (options) => { // 按学校名称筛选 if (schoolName) { - filteredList = filteredList.filter(item => + filteredList = filteredList.filter(item => item.schoolName.includes(schoolName) ) } diff --git a/pangu-ui/src/views/base/class/index.vue b/pangu-ui/src/views/base/class/index.vue index 4aebc7a..b17515e 100644 --- a/pangu-ui/src/views/base/class/index.vue +++ b/pangu-ui/src/views/base/class/index.vue @@ -89,10 +89,10 @@ * 班级管理页面 * @author pangu */ +import request from '@/utils/request' import { Delete, Edit, Plus, Refresh, Search } from '@element-plus/icons-vue' import { ElMessage, ElMessageBox } from 'element-plus' import { onMounted, ref } from 'vue' -import request from '@/utils/request' const loading = ref(false) const tableData = ref([]) diff --git a/pangu-ui/src/views/base/grade/index.vue b/pangu-ui/src/views/base/grade/index.vue index 0f77002..0c6f347 100644 --- a/pangu-ui/src/views/base/grade/index.vue +++ b/pangu-ui/src/views/base/grade/index.vue @@ -89,10 +89,10 @@ * 年级管理页面 * @author pangu */ +import request from '@/utils/request' import { Delete, Edit, Plus, Refresh, Search } from '@element-plus/icons-vue' import { ElMessage, ElMessageBox } from 'element-plus' import { onMounted, ref } from 'vue' -import request from '@/utils/request' const loading = ref(false) const tableData = ref([]) diff --git a/pangu-ui/src/views/base/region/index.vue b/pangu-ui/src/views/base/region/index.vue index b74fdd5..c84d5e9 100644 --- a/pangu-ui/src/views/base/region/index.vue +++ b/pangu-ui/src/views/base/region/index.vue @@ -99,10 +99,10 @@ * 区域管理页面 * @author pangu */ +import request from '@/utils/request' import { Delete, Edit, Plus, Refresh, Search, Sort } from '@element-plus/icons-vue' import { ElMessage, ElMessageBox } from 'element-plus' import { onMounted, ref } from 'vue' -import request from '@/utils/request' const loading = ref(false) const tableData = ref([]) diff --git a/pangu-ui/src/views/base/subject/index.vue b/pangu-ui/src/views/base/subject/index.vue index e3df3e1..e4d7597 100644 --- a/pangu-ui/src/views/base/subject/index.vue +++ b/pangu-ui/src/views/base/subject/index.vue @@ -89,10 +89,10 @@ * 学科管理页面 * @author pangu */ +import request from '@/utils/request' import { Delete, Edit, Plus, Refresh, Search } from '@element-plus/icons-vue' import { ElMessage, ElMessageBox } from 'element-plus' import { onMounted, ref } from 'vue' -import request from '@/utils/request' const loading = ref(false) const tableData = ref([]) diff --git a/pangu-ui/src/views/dashboard/index.vue b/pangu-ui/src/views/dashboard/index.vue index 1047847..6c5a76f 100644 --- a/pangu-ui/src/views/dashboard/index.vue +++ b/pangu-ui/src/views/dashboard/index.vue @@ -59,8 +59,8 @@ * 首页(占位版本,待Agent-1完善) * @author pangu */ -import { Grid, School, User, UserFilled } from '@element-plus/icons-vue' -import { reactive } from 'vue' +import { Grid, School, User, UserFilled } from '@element-plus/icons-vue'; +import { reactive } from 'vue'; const stats = reactive({ schoolCount: 128, diff --git a/pangu-ui/src/views/member/index.vue b/pangu-ui/src/views/member/index.vue index 88a2e72..29aea51 100644 --- a/pangu-ui/src/views/member/index.vue +++ b/pangu-ui/src/views/member/index.vue @@ -112,10 +112,10 @@ * 会员管理页面 * @author pangu */ +import request from '@/utils/request' import { Delete, Edit, Key, Plus, Refresh, Search } from '@element-plus/icons-vue' import { ElMessage, ElMessageBox } from 'element-plus' import { onMounted, ref } from 'vue' -import request from '@/utils/request' import MemberDialog from './components/MemberDialog.vue' import ResetPwdDialog from './components/ResetPwdDialog.vue' diff --git a/pangu-ui/src/views/school/components/ClassDialog.vue b/pangu-ui/src/views/school/components/ClassDialog.vue index af30691..7e378b3 100644 --- a/pangu-ui/src/views/school/components/ClassDialog.vue +++ b/pangu-ui/src/views/school/components/ClassDialog.vue @@ -48,9 +48,9 @@ * 新增班级弹窗 * @author pangu */ +import { addGradeClass, getClassOptions, getGradeOptions } from '@/api/school' import { ElMessage } from 'element-plus' import { onMounted, ref } from 'vue' -import { addGradeClass, getClassOptions, getGradeOptions } from '@/api/school' const emit = defineEmits(['success']) diff --git a/pangu-ui/src/views/school/components/GradeDialog.vue b/pangu-ui/src/views/school/components/GradeDialog.vue index fd784c2..3bb8dff 100644 --- a/pangu-ui/src/views/school/components/GradeDialog.vue +++ b/pangu-ui/src/views/school/components/GradeDialog.vue @@ -37,9 +37,9 @@ * 新增年级弹窗 * @author pangu */ +import { addSchoolGrade, getGradeOptions } from '@/api/school' import { ElMessage } from 'element-plus' import { onMounted, ref } from 'vue' -import { addSchoolGrade, getGradeOptions } from '@/api/school' const emit = defineEmits(['success']) diff --git a/pangu-ui/src/views/school/components/SchoolDialog.vue b/pangu-ui/src/views/school/components/SchoolDialog.vue index a65dc78..704d995 100644 --- a/pangu-ui/src/views/school/components/SchoolDialog.vue +++ b/pangu-ui/src/views/school/components/SchoolDialog.vue @@ -62,9 +62,9 @@ * 学校新增/编辑弹窗 * @author pangu */ +import { addSchool, updateSchool } from '@/api/school' import { ElMessage } from 'element-plus' import { computed, ref } from 'vue' -import { addSchool, updateSchool } from '@/api/school' // 接收父组件传递的区域树 const props = defineProps({ diff --git a/pangu-ui/src/views/school/index.vue b/pangu-ui/src/views/school/index.vue index c48eda9..f46041d 100644 --- a/pangu-ui/src/views/school/index.vue +++ b/pangu-ui/src/views/school/index.vue @@ -105,10 +105,10 @@ * 学校管理页面 * @author pangu */ +import request from '@/utils/request' import { Collection, Delete, Edit, Files, Plus, Refresh, Search } from '@element-plus/icons-vue' import { ElMessage, ElMessageBox } from 'element-plus' import { onMounted, ref, watch } from 'vue' -import request from '@/utils/request' import ClassDialog from './components/ClassDialog.vue' import GradeDialog from './components/GradeDialog.vue' import SchoolDialog from './components/SchoolDialog.vue' diff --git a/pangu-ui/src/views/student/index.vue b/pangu-ui/src/views/student/index.vue index 7abb19a..7293c97 100644 --- a/pangu-ui/src/views/student/index.vue +++ b/pangu-ui/src/views/student/index.vue @@ -108,10 +108,10 @@ * 学生管理页面 * @author pangu */ +import request from '@/utils/request' import { Delete, Edit, Plus, Refresh, Search, Upload } from '@element-plus/icons-vue' import { ElMessage, ElMessageBox } from 'element-plus' import { onMounted, ref, watch } from 'vue' -import request from '@/utils/request' import ImportDialog from './components/ImportDialog.vue' import StudentDialog from './components/StudentDialog.vue' diff --git a/ruoyi-ui/src/views/base/grade/index.vue b/ruoyi-ui/src/views/base/grade/index.vue index 0f77002..888c6e2 100644 --- a/ruoyi-ui/src/views/base/grade/index.vue +++ b/ruoyi-ui/src/views/base/grade/index.vue @@ -28,8 +28,8 @@ - - + +