在线考试系统(三)优化登录页面和主页开发

优化登录页面

安装element-ui

cnpm install element-ui –S

在这里插入图片描述

引入element-ui

引入分为完整引入和按需引入两种模式,按需引入可以缩小项目的体积,这里我们选择完整引入。就是在main.js里面引入
在这里插入图片描述

使用element-ui

修改login.vue页面最外层的div为< el-card > ==
在这里插入图片描述
== 启动前端,访问登录页面看效果

在这里插入图片描述

优化登录页面

安装sass和iview

是一门高于 CSS 的元语言,它能用来清晰地、结构化地描述文件样式,有着比普通 CSS 更加强大的功能。
Sass 能够提供更简洁、更优雅的语法,同时提供多种功能来创建可维护和管理的样式表。

cnpm install node-sass --save-dev       //安装node-sass
cnpm install sass-loader --save-dev     //安装依赖包sass-loader
cnpm install style-loader --save-dev    //安装style-loader
cnpm install iview –save

main.js中引入iview

在这里插入图片描述

导入去除空格工具js文件

在这里插入图片描述

导入login.vue页面以及附属静态文件

== assets/img assets/css/main.css ==
在这里插入图片描述

修改App.vue的样式

在这里插入图片描述

启动测试

启动项目访问登录页面
在这里插入图片描述

创建主页

common中导入主页相关文件

在这里插入图片描述

配置路由

在这里插入图片描述

import Vue from 'vue'
import Router from 'vue-router'
//导入刚刚编写的组件
import Login from '@/components/page/Login'
import Home from '@/components/common/Home'
//使用vue对象注册路由
Vue.use(Router)
//通过export导出自定义路由对象,帮助我们跳转页面
export default new Router({
	routes:[
		{
			path:'/login',//login是App.vue的子组件
			name:'Login',
			component:Login//表示对应的登录组件地址
		},
		{
			path:'/home',//home是App.vue的子组件
			name:'Home',
			component:Home
		
		}
	]
})

启动测试

访问登录页面,输入账号密码点击登录
在这里插入图片描述

修改主页菜单为动态数据(Sidebar.vue)

数据库

在这里插入图片描述
需要清洗成以下格式发送给前端
在这里插入图片描述

后端

VO类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

持久层

在这里插入图片描述

业务层

在这里插入图片描述

package cn.exam.service.impl;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
import java.util.stream.Collectors;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.exam.dao.mapper.RoleMenuMapper;
import cn.exam.service.RoleMenuService;
import cn.exam.vo.MenuInfoVO;

@Service
@Transactional
public class RoleMenuServiceImpl implements RoleMenuService {

	@Autowired
	private RoleMenuMapper roleMenuMapper;

	/**
	 * 根据角色id
	 * @param roleIdList 角色列表
	 */
	@Override
	public List<MenuInfoVO> queryMenuList(List<String> roleIdList) {
		List<MenuInfoVO> menuList = roleMenuMapper.queryMenuList(roleIdList);
//		System.out.println(menuList);
		// 一级菜单
		List<MenuInfoVO> menuVOS = menuList.stream().filter(f -> f.getMenuDegree().equals(0)).collect(Collectors.toList());
		// 二级菜单
		List<MenuInfoVO> menuVOS1 = menuList.stream().filter(f -> f.getMenuDegree().equals(1)).collect(Collectors.toList());
//		System.out.println("二级菜单menuVOS1="+menuVOS1);
		//根据菜单的id去重排序
		ArrayList<MenuInfoVO> infos2 = menuVOS1.stream().collect(
					/*Collectors.collectingAndThen
						 * 接受两个参数,第一个参数用于 reduce操作,而第二参数用于 map操作。
						 * 先把流中的所有元素传递给第一个参数,然后把生成的集合传递给第二个参数来处理。
					 */
					Collectors.collectingAndThen( 
							//Collectors.toCollection 就是把集合中的元素转换成参数指定的集合类型进行保存。
							Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MenuInfoVO::getMenuId))),
							ArrayList::new 
							)
				);
		//forEach() 方法用于遍历动态数组中每一个元素并执行特定操作。
		menuVOS.forEach(y -> {
			List<MenuInfoVO> collect = infos2.stream().filter(q -> q.getParentId().equals(y.getMenuId())).collect(Collectors.toList());
			System.out.println("collect="+collect);//对二级菜单进行分组
			collect.forEach(q -> q.setIndex(q.getMenuIndex()));
			y.setIndex(y.getMenuIndex());
			y.setSubs(collect);
		});
//		System.out.println("menuVOS:"+menuVOS);
		return menuVOS;
	}
}

业务层测试类

在这里插入图片描述

控制层LoginController

在这里插入图片描述

/**
     *  根据角色Id菜单查询
     * @param userRoleVO   角色id
     * @param response 响应体
     */
    @RequestMapping("queryMenuByRoleId.htm")
    public void queryMenuList(@RequestBody UserRoleVO userRoleVO, HttpServletResponse response) {
        //把角色roleId转成json数组
        JSONArray array = JSON.parseArray(userRoleVO.getRoleId());
        List<String> roleIdList = new ArrayList<>();
        for (Object json : array) {
            JSONObject jsonObject = JSON.parseObject(json.toString());
            Object roleId1 = jsonObject.get("roleId");
            roleIdList.add(roleId1.toString());
        }
        ResultDTO<List<MenuInfoVO>> resultDTO = new ResultDTO<>();
        //根据角色id查询出来菜单数据
        List<MenuInfoVO> menuVOS = roleMenuService.queryMenuList(roleIdList);
        // jdk8新特性 stream流处理去重
        ArrayList<MenuInfoVO> infos2 = menuVOS.stream()
                .collect(Collectors.collectingAndThen(
                        Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MenuInfoVO::getMenuId))),
                        ArrayList::new));
        resultDTO.setResult(infos2);
        resultDTO.buildReturnCode(SystemCode.RET_CODE_SUCC, SystemCode.RET_MSG_SUCC);
        sendJson(resultDTO, response);
    }

postMan测试

在这里插入图片描述

前端

这里要修改下后端Login方法存入roleId
在这里插入图片描述

迭代Login.vue页面

在这里插入图片描述

迭代Sidebar.vue页面

在这里插入图片描述
在这里插入图片描述

测试

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值