基于SprnigBoot+ElementUI 整合Vue案例【公司案件管理系统】(二)

简介: 基于SprnigBoot+ElementUI 整合Vue案例【公司案件管理系统】

二、功能详情描述

1. 登录功能【注意页面布局以及样式跳转】

  1. 用户名输入之后,后端校验用户名与密码长度是否正确,不正确时给出提示。

95d4c8fdacdc4948bba06c069d6bbf0a.png

2. 后端对其用户名密码正确性进行校验


6863938f988c4290aeda86c1a6844772.png


3.  点击登录,跳转到欢迎界面


35c84b27e63a4bcbbdb639fdfb6f3ff2.png

2. 登录功能:后端代码实现【三层架构】

  • domain【User表】
package com.czxy.domain;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Table;
@Table(name = "`user`")
@Data           //自动生成构造set/get方法
public class User {
    @Column(name = "username")
    private String username;
    @Column(name = "pwd")
    private String password;
}
  • dao【UserMapper接口】
package com.czxy.dao;
import com.czxy.domain.User;
import tk.mybatis.mapper.common.Mapper;
@org.apache.ibatis.annotations.Mapper
public interface UserMapper extends Mapper<User> {
}
  • service【UserService接口】
package com.czxy.service;
import com.czxy.domain.User;
public interface UserService {
    //登录
    User login(User user);
}
  • service-impl【UserServiceImpl 接口实现类】
package com.czxy.service;
import com.czxy.dao.UserMapper;
import com.czxy.domain.Company;
import com.czxy.domain.User;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import javax.annotation.Resource;
import java.util.List;
@Service
@Transactional
public class UserServiceImpl implements UserService {
    @Resource
    private UserMapper userMapper;
    @Override
    public User login(User user) {
        Example example = new Example(User.class);
        // 条件判断
        Example.Criteria c = example.createCriteria();
        //判断用户名是否存在正确
        if (user.getUsername()!= null && !user.getUsername().equals("")){
            c.andEqualTo("username",user.getUsername());
        }
        //判断密码是否存在正确
        if (user.getPassword()!= null && !user.getPassword().equals("")){
            c.andEqualTo("pwd",user.getPassword());
        }
        //查询
        List<User> list = userMapper.selectByExample(example);
        //判断集合是否有数据,有则该用户存在,登录成功,反之
        if (list.size() > 0  && list != null ){
            return list.get(0);
        }
        return null ;
    }
}
  • controller【UserController】
package com.czxy.controler;
import com.czxy.domain.Company;
import com.czxy.domain.User;
import com.czxy.service.UserService;
import com.czxy.vo.BaseResult;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
@RestController
@RequestMapping("/user")
@CrossOrigin               //允许跨域
public class UserController {
    @Resource
    private UserService userService;
    @PostMapping("/login")
    public BaseResult login(@RequestBody User user, HttpSession session){
        User login = userService.login(user);
        System.out.println(login);
        if (login != null ){
            //登录成功
            session.setAttribute("loginUser",login);
            return BaseResult.ok("恭喜主人,登录成功!");
        }else {
            return BaseResult.error("用户名或密码不正确!");
        }
    }
}

3. 登录功能:前端实现

1. 导入reset.css处理页面边缘留白

e764e1b856ce4536a1296fccc2badc6b.png

reset.css

body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,th,td {
    margin: 0;
    padding: 0;
}
table {
    border-collapse: collapse;
    border-spacing: 0;
}
fieldset,img {
    border: 0;
}
address,caption,cite,code,dfn,em,strong,th,var {
    font-style: normal;
    font-weight: normal;
}
ol,ul {
    list-style: none;
}
caption,th {
    text-align: left;
}
h1,h2,h3,h4,h5,h6 {
    font-size: 100%;
    font-weight: normal;
}

14bbd7f7fe7b4f1f899a9e6b6747d8c6.png


  • App.vue
<template>
  <div id="app">
    <!-- 一级路由设置 -->
    <router-view></router-view>
  </div>
</template>
<script>
export default {
}
</script>
<style>
html,body,#app {
  height: 100%;
}
</style>


  • 路由设置

480234570f7a46148e11e7a52851105e.png

  • view -> Login.vue  创建登录页面
<template>
  <div class="login">
    <el-card class="box-card">
    <div slot="header" class="clearfix">
      <!-- 卡片标题 -->
        <el-link type="primary"  class="el-icon-s-home">传智专修学院</el-link>
    </div>
    <!-- 内容start -->
    <el-form :model="user" :rules="rules" ref="ruleForm" label-width="100px" >
        <el-form-item label="用户名" prop="username">
            <el-input v-model="user.username" placeholder="请输入用户名" prefix-icon="el-icon-user"></el-input>
        </el-form-item>
        <el-form-item label="密码" prop="pwd">
            <el-input v-model="user.pwd"  placeholder="请输入" prefix-icon="el-icon-lock" show-password></el-input>
        </el-form-item>
        <el-form-item>
            <el-button type="primary" @click="submitForm()">登录</el-button>
            <el-button @click="resetForm()">取消</el-button>
        </el-form-item>
    </el-form>
    <!-- 内容end -->
    </el-card>
  </div>
</template>
<script>
import axios from 'axios' ;
export default {
    data() {
        return {
          //用户对象
            user:{},
            //校验规则
            rules: {
              //对用户名进行校验
            username: [
                { required: true, message: '请输入用户名', trigger: 'blur' },
                { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' },
            ],
            //对密码进行校验
            pwd: [
                { required: true, message: '请输入密码', trigger: 'change' }
            ],  
            },
        };
    },
    methods: {
      // 登录成功
      submitForm() {
        this.$refs.ruleForm.validate( async(valid) => {
          let {data: baseResult } = await axios.post(`http://localhost:8888/user/login`,this.user);
            if (baseResult.code == 20000 ) {
                this.$message.success(baseResult.msg);
                this.$router.push("/homeLogin");
            }else {
                this.$message.error(baseResult.msg);
            }
        });
      },
      //取消重置方法
      resetForm() {
        this.$refs.ruleForm.resetFields();
      }
    }
}
</script>
<style>
/* 上下左右居中样式 */
.login {
    height: 100%;
    display: flex;
    flex-direction: row;
    justify-content: center;
    align-items: center;
    background-color: #b3c0d1;
}
/* 外围卡片背景、宽度样式设置 */
.box-card {
    background-color: #f0f8ff;
     width: 480px;
}
/* 字体设置 */
.el-link {
    font-size: 1.5rem;
}  
</style>
  • 登录页面详解

7463f42028f74a629f5b7217066a14a6.png

a52e45a308ba4160af2fa52d30b84023.png

0cb2136c9bdc4ecbba95fc0120e074dd.png

  • 登录成功,跳转到欢迎页面。【注重页面布局】
  1. 页面展示

88bd681accff4b44b48dc5590c771744.png

2. 布局样式代码

  • 设置Home.vue路由,分布设置二级路由视图【公司列表、案例列表、以及登录成功后的页面】

1442c8caea3d4539b68b2c113dd98d4d.png

  • 创建Home.vue欢迎导航页面
<template>
  <div id="app">
      <!-- 布局容器start -->
    <el-container>
      <el-header>公 司 司 法 案 件 管 理 系 统</el-header>
      <el-container>
          <el-aside width="200px">
              <!-- 导航列表start -->
              <el-menu
                default-active="$route.path"
                router
                class="el-menu-vertical-demo"
                >
                <el-submenu index="/">
                    <template slot="title">
                        <el-menu-item index="/homeLogin" >公司管理</el-menu-item>
                    </template>
                     <el-menu-item index="/company">公司列表</el-menu-item>
                    <el-menu-item index="/case">案件列表</el-menu-item> 
                </el-submenu>
              </el-menu>
              <!-- 导航列表end -->
          </el-aside>
          <el-container>
        <!-- 内容体start -->
          <el-main>
               <!-- 二级路由视图 -->
               <router-view></router-view>
          </el-main>
        <!-- 内容体end -->
        <!-- 底部start -->
          <el-footer>公 司 司 法 案 件 管 理 系 统 Element UI 版</el-footer>
        <!-- 底部start -->
          </el-container>
      </el-container>
    </el-container>
      <!-- 布局容器end -->
  </div>
</template>
<script>
export default {
}
</script>
<style>
/* 顶部标题样式 */
.el-header {
    background-color: #545c64;
    color: #bbbdbe;
    text-align: center;
    line-height: 60px;
    font-size: 2.5rem;
  }
  /* 底部演示 */
  .el-footer {
     background-color: #b3c0d1;
     color: #1b1b1b;
    text-align: center;
    line-height: 60px;
  }
  /* 中间内容体样式 */
  .el-main {
    background-color: #f5fffa;
    color: #118812;
  }
  /* 左边导航列表样式 */
  .el-aside {
    background-color: #D3DCE6;
    color: #333;
    text-align: center;
    line-height: 200px;
  }
  /* 外围满屏设置样式 */
  .el-container {
      height: 100%;
  }
</style>

Home.vue页面详解

5f99cde5c5184eb690870905b51c9963.png



相关文章
|
8天前
|
前端开发 JavaScript Java
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
53 13
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
|
9天前
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
55 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
7天前
|
SQL JavaScript 安全
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
44 11
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
|
11天前
|
人工智能 JavaScript 安全
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
55 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
|
6天前
|
移动开发 JavaScript API
Vue Router 核心原理
Vue Router 是 Vue.js 的官方路由管理器,用于实现单页面应用(SPA)的路由功能。其核心原理包括路由配置、监听浏览器事件和组件渲染等。通过定义路径与组件的映射关系,Vue Router 将用户访问的路径与对应的组件关联,支持哈希和历史模式监听 URL 变化,确保页面导航时正确渲染组件。
|
10天前
|
监控 JavaScript 前端开发
ry-vue-flowable-xg:震撼来袭!这款基于 Vue 和 Flowable 的企业级工程项目管理项目,你绝不能错过
基于 Vue 和 Flowable 的企业级工程项目管理平台,免费开源且高度定制化。它覆盖投标管理、进度控制、财务核算等全流程需求,提供流程设计、部署、监控和任务管理等功能,适用于企业办公、生产制造、金融服务等多个场景,助力企业提升效率与竞争力。
60 12
|
6天前
|
JavaScript 前端开发 开发者
Vue中的class和style绑定
在 Vue 中,class 和 style 绑定是基于数据驱动视图的强大功能。通过 class 绑定,可以动态更新元素的 class 属性,支持对象和数组语法,适用于普通元素和组件。style 绑定则允许以对象或数组形式动态设置内联样式,Vue 会根据数据变化自动更新 DOM。
|
6天前
|
JavaScript 前端开发 数据安全/隐私保护
Vue Router 简介
Vue Router 是 Vue.js 官方的路由管理库,用于构建单页面应用(SPA)。它将不同页面映射到对应组件,支持嵌套路由、路由参数和导航守卫等功能,简化复杂前端应用的开发。主要特性包括路由映射、嵌套路由、路由参数、导航守卫和路由懒加载,提升性能和开发效率。安装命令:`npm install vue-router`。
|
27天前
|
JavaScript 安全 API
iframe嵌入页面实现免登录思路(以vue为例)
通过上述步骤,可以在Vue.js项目中通过 `iframe`实现不同应用间的免登录功能。利用Token传递和消息传递机制,可以确保安全、高效地在主应用和子应用间共享登录状态。这种方法在实际项目中具有广泛的应用前景,能够显著提升用户体验。
54 8
|
28天前
|
存储 设计模式 JavaScript
Vue 组件化开发:构建高质量应用的核心
本文深入探讨了 Vue.js 组件化开发的核心概念与最佳实践。
74 1

热门文章

最新文章