From b714922b36d51f3d63aacd698dd3a1b8b236003f Mon Sep 17 00:00:00 2001 From: yuan <3558860895@qq.com> Date: Wed, 27 Nov 2024 00:39:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AD=A6=E7=94=9F=E7=AB=AF?= =?UTF-8?q?=E4=B8=BB=E9=A1=B5=EF=BC=8C=E5=AE=8C=E5=96=84=E5=AD=A6=E7=94=9F?= =?UTF-8?q?=E5=85=B6=E4=BB=96=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/SysUserController.java | 11 + .../student/StudentHomePageController.java | 9 + .../java/com/ruoyi/test/domain/DO/UserDO.java | 20 ++ .../main/java/com/ruoyi/test/domain/User.java | 2 + .../java/com/ruoyi/test/domain/Vo/UserVo.java | 2 + .../com/ruoyi/test/seriver/IUserService.java | 3 +- .../test/seriver/Impl/UserServiceImpl.java | 33 +++ vue2/vue/src/components/Aside.vue | 23 +- vue2/vue/src/components/Header.vue | 72 ++++-- vue2/vue/src/components/Login.vue | 6 +- vue2/vue/src/router/index.js | 17 +- vue2/vue/src/store.js | 7 + vue2/vue/src/views/Student/Exam.vue | 14 +- vue2/vue/src/views/Student/ScoreList.vue | 14 +- vue2/vue/src/views/user/Profile.vue | 215 ++++++++++++++++++ 15 files changed, 404 insertions(+), 44 deletions(-) create mode 100644 ruoyi-test/src/main/java/com/ruoyi/test/domain/DO/UserDO.java create mode 100644 vue2/vue/src/views/user/Profile.vue diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java index 095c3cf..3251336 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java @@ -3,6 +3,8 @@ package com.ruoyi.web.controller.system; import java.util.List; import java.util.stream.Collectors; import javax.servlet.http.HttpServletResponse; + +import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.ArrayUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -253,4 +255,13 @@ public class SysUserController extends BaseController { return success(deptService.selectDeptTreeList(dept)); } + + @ApiOperation("获取userid") + @GetMapping("/getUserId") + public Long getUserId(){ + SysUser sysUser = SecurityUtils.getLoginUser().getUser(); + Long id = sysUser.getUserId(); + return id; + } + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/student/StudentHomePageController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/student/StudentHomePageController.java index 518b8b8..334fa8c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/student/StudentHomePageController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/test/student/StudentHomePageController.java @@ -8,6 +8,7 @@ import com.ruoyi.test.domain.Answer; import com.ruoyi.test.domain.DO.AnswerDO; import com.ruoyi.test.domain.DO.AnswerSheetDO; import com.ruoyi.test.domain.DO.QuestionAnswerDO; +import com.ruoyi.test.domain.DO.UserDO; import com.ruoyi.test.domain.Markedtest; import com.ruoyi.test.domain.Questionbank; import com.ruoyi.test.domain.Vo.AnswerVo; @@ -123,4 +124,12 @@ public class StudentHomePageController { return R.fail("批改提交失败!"); } + @ApiOperation("获取user信息") + @GetMapping("getUserById") + public R getUserById() { + SysUser sysUser = SecurityUtils.getLoginUser().getUser(); + Long id = sysUser.getUserId(); + return R.ok(iUserService.getUserById(id)); + } + } diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/domain/DO/UserDO.java b/ruoyi-test/src/main/java/com/ruoyi/test/domain/DO/UserDO.java new file mode 100644 index 0000000..79cd8d7 --- /dev/null +++ b/ruoyi-test/src/main/java/com/ruoyi/test/domain/DO/UserDO.java @@ -0,0 +1,20 @@ +package com.ruoyi.test.domain.DO; + +import lombok.Data; + +@Data +public class UserDO { + private Long userId; + private String name; + private String tname; + private Long age; + private String sex; + private String birthday; + private String telephone; + private String grade; + private String Class1; + private String teacherName; + private String email; + private String studentnumber; + +} diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/domain/User.java b/ruoyi-test/src/main/java/com/ruoyi/test/domain/User.java index 8e4906b..1b90b92 100644 --- a/ruoyi-test/src/main/java/com/ruoyi/test/domain/User.java +++ b/ruoyi-test/src/main/java/com/ruoyi/test/domain/User.java @@ -19,6 +19,8 @@ public class User { private long state; private String roleKey; private long zhId; + private String email; + private String studentnumber; public long getUserId() { diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/domain/Vo/UserVo.java b/ruoyi-test/src/main/java/com/ruoyi/test/domain/Vo/UserVo.java index 67b2abb..bc630f7 100644 --- a/ruoyi-test/src/main/java/com/ruoyi/test/domain/Vo/UserVo.java +++ b/ruoyi-test/src/main/java/com/ruoyi/test/domain/Vo/UserVo.java @@ -18,4 +18,6 @@ public class UserVo { private String telephone; private String grade; private long state; + private String email; + private String studentnumber; } diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/IUserService.java b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/IUserService.java index f36f36b..bf61e76 100644 --- a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/IUserService.java +++ b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/IUserService.java @@ -1,6 +1,7 @@ package com.ruoyi.test.seriver; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.ruoyi.test.domain.DO.UserDO; import com.ruoyi.test.domain.User; import com.ruoyi.test.domain.Vo.UserVo; @@ -31,5 +32,5 @@ public interface IUserService { User user(Long id); - + UserDO getUserById(Long id); } diff --git a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/UserServiceImpl.java b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/UserServiceImpl.java index 264a0dc..0d47318 100644 --- a/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/UserServiceImpl.java +++ b/ruoyi-test/src/main/java/com/ruoyi/test/seriver/Impl/UserServiceImpl.java @@ -4,14 +4,21 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.bean.BeanUtils; +import com.ruoyi.test.domain.DO.UserDO; +import com.ruoyi.test.domain.StudentClass; +import com.ruoyi.test.domain.TeacherManageClass; import com.ruoyi.test.domain.User; import com.ruoyi.test.domain.Vo.UserVo; +import com.ruoyi.test.mapper.StudentClassMapper; +import com.ruoyi.test.mapper.TeacherManageClassMapper; import com.ruoyi.test.mapper.UserMapper; import com.ruoyi.test.seriver.IUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; @@ -22,6 +29,12 @@ public class UserServiceImpl extends ServiceImpl implements IUs @Autowired private UserMapper userMapper; + @Autowired + private StudentClassMapper studentClassMapper; + + @Autowired + private TeacherManageClassMapper teacherManageClassMapper; + @Override public IPage selectStudentList(int pagenum) { Page page = new Page<>(pagenum,10); @@ -117,6 +130,26 @@ public class UserServiceImpl extends ServiceImpl implements IUs return userMapper.selectOne(queryWrapper); } + @Override + public UserDO getUserById(Long id) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + queryWrapper.eq(User::getUserId,id); + User user = userMapper.selectOne(queryWrapper); + UserDO userDO = new UserDO(); + BeanUtils.copyProperties(user,userDO); + StudentClass studentClass = studentClassMapper.selectOne(new LambdaQueryWrapper().eq(StudentClass::getStudentid, id)); + userDO.setClass1(studentClass.getClass1()); + TeacherManageClass teacherManageClass = teacherManageClassMapper.selectOne( + new LambdaQueryWrapper() + .eq(TeacherManageClass::getClass1, studentClass.getClass1()) + .eq(TeacherManageClass::getGrade, studentClass.getGrade())); + User user1 = userMapper.selectOne( + new LambdaQueryWrapper() + .eq(User::getUserId, teacherManageClass.getTeacherid())); + userDO.setTeacherName(user1.getTname()); + return userDO; + } + public List up(List list){ List list1 = new ArrayList<>(); for(User user:list){ diff --git a/vue2/vue/src/components/Aside.vue b/vue2/vue/src/components/Aside.vue index 5bc4291..bc46a09 100644 --- a/vue2/vue/src/components/Aside.vue +++ b/vue2/vue/src/components/Aside.vue @@ -1,4 +1,3 @@ - @@ -33,6 +29,11 @@ \ No newline at end of file +.left-section { + flex: 1; +} + +.collapse-icon { + cursor: pointer; + font-size: 20px; +} + +.logout-container { + display: flex; + align-items: center; +} + +.logout-btn { + cursor: pointer; + font-size: 16px; + color: #409EFF; + padding: 5px 10px; + border-radius: 4px; + transition: background-color 0.3s ease, color 0.3s ease; +} + +.logout-btn:hover { + background-color: #409EFF; + color: #fff; +} + diff --git a/vue2/vue/src/components/Login.vue b/vue2/vue/src/components/Login.vue index 2ca84b5..fcce6e4 100644 --- a/vue2/vue/src/components/Login.vue +++ b/vue2/vue/src/components/Login.vue @@ -98,13 +98,13 @@ export default { this.setToken(token); // Store token using Vuex action if (res.data.role === '超级管理员') { // 超级管理员直接登录任何页面 - window.location.href = res.data.role === '老师' ? 'http://localhost:8082' : 'http://localhost:8081'; + window.location.href = res.data.role === '老师' ? 'http://localhost:8082' : 'http://localhost:8081/user/profile'; } else if (res.data.role === role) { // 根据角色跳转 if (role === '老师') { window.location.href = 'http://localhost:8082'; } else if (role === '学生') { - window.location.href = 'http://localhost:8081'; + window.location.href = 'http://localhost:8081/user/profile'; } } else { alert('该角色无权限'); @@ -135,7 +135,7 @@ export default { }, mounted() { this.fetchCaptcha(); // Get captcha when component is mounted - } + }, }; diff --git a/vue2/vue/src/router/index.js b/vue2/vue/src/router/index.js index d37c45c..36d52d0 100644 --- a/vue2/vue/src/router/index.js +++ b/vue2/vue/src/router/index.js @@ -8,6 +8,11 @@ import store from '../store'; // 引入 Vuex store Vue.use(VueRouter); const routes = [ + { + path: '/user/profile', + name: 'Profile', + component: () => import('../views/user/Profile.vue'), + }, { path:'/student/testPaperDetail', name:'TestPaperDetail', @@ -31,12 +36,6 @@ const routes = [ component: () => import(/* webpackChunkName: "about" */ '../views/Student/Exam.vue'), meta: {requiresAuth: true} }, - { - path: '/', - name: 'home', - component: HomeView, - meta: { requiresAuth: true } // 标记该页面需要登录 - }, { path: '/login', component: Login @@ -46,9 +45,9 @@ const routes = [ component: Register }, { - path: '/about', - name: 'about', - component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue') + path: '/homeView', + name: 'HomeView', + component: () => import(/* webpackChunkName: "about" */ '../views/HomeView.vue') } ]; diff --git a/vue2/vue/src/store.js b/vue2/vue/src/store.js index 3f5a9fb..626a1d7 100644 --- a/vue2/vue/src/store.js +++ b/vue2/vue/src/store.js @@ -8,6 +8,10 @@ export default new Vuex.Store({ token: localStorage.getItem('Authorization') || '', // 初始化 token }, mutations: { + logout(state) { + state.user = null; // 清空用户信息 + state.token = null; + }, setToken(state, token) { state.token = token; localStorage.setItem('Authorization', token); @@ -24,5 +28,8 @@ export default new Vuex.Store({ clearToken({ commit }) { commit('clearToken'); }, + logout({ commit }) { + commit('logout'); // 提交 mutation 清空所有数据 + }, }, }); diff --git a/vue2/vue/src/views/Student/Exam.vue b/vue2/vue/src/views/Student/Exam.vue index dcc2c2d..788b568 100644 --- a/vue2/vue/src/views/Student/Exam.vue +++ b/vue2/vue/src/views/Student/Exam.vue @@ -82,7 +82,6 @@ export default { components: {Aside, Header}, data() { return { - collapse: false, paperTypes: ["固定试卷", "时段试卷", "班级试卷"], // 试卷类型 subjects: ["语文", "数学"], // 学科 selectedType: "班级试卷", // 默认选中的试卷类型 @@ -119,6 +118,19 @@ export default { }, }, methods: { + collapse(){ + //点击收缩按钮触发 + this.isCollapse = !this.isCollapse + if(this.isCollapse){ + this.sideWidth = 64 + this.collapseBtnClass = 'el-icon-s-unfold' + this.logoTextShow = false + }else{ + this.sideWidth = 200 + this.collapseBtnClass = 'el-icon-s-fold' + this.logoTextShow = true + } + }, startExam(id,name,subject,time) { this.$router.push({ name: "ExamPaper", query: { id:id ,name: name, subject: subject ,time:time} }); }, diff --git a/vue2/vue/src/views/Student/ScoreList.vue b/vue2/vue/src/views/Student/ScoreList.vue index 37c51de..b7a27fc 100644 --- a/vue2/vue/src/views/Student/ScoreList.vue +++ b/vue2/vue/src/views/Student/ScoreList.vue @@ -67,7 +67,6 @@ export default { components: { Aside, Header }, data() { return { - collapse: false, isCollapse: false, sideWidth: 200, logoTextShow: true, @@ -80,6 +79,19 @@ export default { }; }, methods: { + collapse(){ + //点击收缩按钮触发 + this.isCollapse = !this.isCollapse + if(this.isCollapse){ + this.sideWidth = 64 + this.collapseBtnClass = 'el-icon-s-unfold' + this.logoTextShow = false + }else{ + this.sideWidth = 200 + this.collapseBtnClass = 'el-icon-s-fold' + this.logoTextShow = true + } + }, async fetchScores() { this.loading = true; try { diff --git a/vue2/vue/src/views/user/Profile.vue b/vue2/vue/src/views/user/Profile.vue new file mode 100644 index 0000000..e26adf2 --- /dev/null +++ b/vue2/vue/src/views/user/Profile.vue @@ -0,0 +1,215 @@ + + + + + +