Spring Boot+Vue 实战(二):后台搭建以及登陆页面的开发

1.搭建后台

开发工具idea,直接初始化SpringBoot项目,然后点击下一步
在这里插入图片描述
填写组织名和项目名,然后点击下一步
在这里插入图片描述
选择web模块,然后点击下一步
在这里插入图片描述
填写项目名,以及项目的存放的位置,这个自己选定,点击完成
在这里插入图片描述

2.登陆页面的开发

注意我们的项目是前后台分离的,那么前后台的代码是分开部署的,问题来了,前后台是怎么进行数据交互的呢?
其实很简单前台的请求通过后台的Restful API进行json格式的数据交换,不同于jsp,后台不涉及前台页面的本身。
在开发完的是时候,前台可以通过Nginx进行部署,在nginx的配置文件中,配置与后台相互交互的端口,后台的代码直接java -jar运行即可,因为后台框架直接是SpringBoot,这样也可以直接简化开发的步骤。

  • 前端页面开发
    我的前台的开发的软件是vscode,大家直接可以去百度下载一个引进后项目如图所示,这里就可以看到我们之前介绍的vue的项目䣌结构了,若是还不是很清楚的话,就去看看前面的文章吧。引进项目的方法是 File->Open Folder 然后选择你要打开的项目即可
    在这里插入图片描述
    引进来之后在导航栏有一个Terminal(终端)-> New Terminal,然后在终端直接输入npm run dev然后再浏览器访问http://localhost:8080,出现如图所示的页面,就为成功。
    在这里插入图片描述
    接下来就开始撸代码了,首先开发我们的登陆页面,在src\components 文件上右击,New Folder先创建一个login文件夹,然后再文件夹下New File创建一个名字为Login.vue的文件,代码如下:
<template>
  <div>
      用户名:<input type="text" v-model="username" placeholder="请输入用户名"/>
      <br><br>
      密码: <input type="password" v-model="password" placeholder="请输入密码"/>
      <br><br>
      <button v-on:click="login">登录</button>
  </div>
</template>

<script>

export default {
  name: 'Login',
  data () {
    return {
      username: '',
      password: '',
      responseResult: []
    }
  },
  methods: {
    login () {
      this.$axios.post('/login', {
        username: this.username,
        password: this.password
      }).then(successResponse => {
        if (successResponse.data.code === 200) {
          this.$router.replace({path: '/index'})
        }
      }).catch(failResponse => {
        console.log('failResponse', failResponse)
      })
    }
  }
}
</script>

这里直接就是一个form表单的提交,然后就是两个input标签输入框,输入框与vue中的data的数据进行绑定username和password,其中用了一个v-model的指令进行数据的双向绑定

  • 首页的页面开发
    在src下新建一个home文件夹,表示首页所在的位置,然后再文件夹下新建一个Index.vue,代码如下
<template>
  <div class="hello">
    <h1>欢迎来到首页</h1>
    <h2>{{msg}}</h2>
  </div>
</template>

<script>
export default {
  name: 'Index',
  data () {
    return {
      msg: 'Welcome to Your Vue.js App'
    }
  }
}
</script>

<style scoped>
h1 {
  font-weight: normal;
}
</style>

这个首页的代码就先这样吧,后面再做开发,先简陋着看看先,代码斗志直接从HelloWorld.vue中直接粘贴赋值过来的,HelloWorld真强大,这里有一个插值表达式{{msg}}这是vue里面的用法,就是直接可以把data中的数据再页面中进行展示。

  • 前端相关的配置
    修改/src/main.js,代码如下:
import Vue from 'vue'
import App from './App'
import router from './router'
// 设置反向代理,前端请求默认发送到 http://localhost:8081/demo
var axios = require('axios')
axios.defaults.baseURL = 'http://localhost:8081/demo'
// 全局注册,之后可在其他组件中通过 this.$axios 发送数据
Vue.prototype.$axios = axios
Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

他就会提示你,然后你就直接再终端输入npm install --save axios即可,因为项目依赖于这个模块,必须安装进来

Failed to compile with 1 errors                                                                              22:26:54
This dependency was not found:

* axios in ./src/main.js

To install it, you can run: npm install --save axios
  • 配置页面路由
    修改 src\router\index.js 代码如下
import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
// 导入刚才编写的组件
import Login from '@/components/login/Login'
import Index from '@/components/home/Index'
//引入路由
Vue.use(Router)

export default new Router({
  routes: [
  //下面就是配置组件于路由的对应规则
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    },
    {
      path: '/login',
      name: 'Login',
      component: Login
    },
    {
      path: '/index',
      name: 'Index',
      component: Index
    }
  ]
})

  • 跨域支持
    为了让后端能够找打前端,需要进行跨域支持的配置。在 config\index.js 中,找到 proxyTable 位置,如下
    proxyTable: {
      '/demo': {
        target: 'http://localhost:8081',
        changeOrigin: true,
        pathRewrite: {
          '^/demo': ''
        }
      }
    }

最后直接再终端直接运行命令npm run dev即可,然后再浏览器访问:localhost:8080/#/login,就可以看到如下页面
在这里插入图片描述
最后直接使用element-ui的快捷组建修改登陆页面,按一下步骤执行即可

  1. 在项目根目录执行命令:npm i element-ui -S进行安装
  2. 在main.js中引入element:
    import Element from ‘element-ui’
    import ‘element-ui/lib/theme-chalk/index.css’;
  3. Vue.use(Element)
  4. 在组件中直接使用,最后登陆官网https://element.eleme.cn/#/zh-CN/component/installation只要粘贴你要用的组件的代码到你的项目中即可
    在这里插入图片描述
    最后粘贴出登陆的代码如下:
<template>
  <body id="paper">
    <el-form :model="loginForm" :rules="rules" class="login-container" label-position="left"
             label-width="0px" v-loading="loading">
      <h3 class="login_title">欢迎登录</h3>
      <el-form-item prop="username">
        <el-input type="text" v-model="username"
                  auto-complete="off" placeholder="账号"></el-input>
      </el-form-item>
      <el-form-item prop="password">
        <el-input type="password" v-model="password"
                  auto-complete="off" placeholder="密码"></el-input>
      </el-form-item>
      <el-checkbox class="login_remember" v-model="checked"
                   label-position="left"><span style="color: #505458">记住密码</span></el-checkbox>
      <el-form-item style="width: 100%">
        <el-button type="primary" style="width: 40%;background: #007bff;border: none" v-on:click="login">登录</el-button>
        <router-link to="register"><el-button type="primary" style="width: 40%;background: #007bff;border: none">注册</el-button></router-link>
      </el-form-item>
    </el-form>
  </body>
</template>
<script>
export default{
  data () {
    return {
      rules: {
        username: [{required: true, message: '用户名不能为空', trigger: 'blur'}],
        password: [{required: true, message: '密码不能为空', trigger: 'blur'}]
      },
      checked: true,
      username: '',
      password: '',
      loading: false
    }
  },
  methods: {
    login () {
      this.$axios.post('/login', {
        username: this.username,
        password: this.password
      }).then(resp => {
        if (resp.data.code === 200) {

        } else {

        }
      })
        .catch(failResponse => {})
    }
  }
}
</script>
<style>
   #paper {
    background:url("../../assets/timg.jpg") no-repeat;
    background-position: center;
    height: 100%;
    width: 100%;
    background-size: cover;
    position: fixed;
  }
   body{
     margin: -5px 0px;
   }
  .login-container {
    border-radius: 15px;
    background-clip: padding-box;
    margin: 190px auto;
    width: 350px;
    padding: 35px 35px 15px 35px;
    background: #fff;
    border: 1px solid #eaeaea;
    box-shadow: 0 0 25px #cac6c6;
  }
  .login_title {
    margin: 0px auto 40px auto;
    text-align: center;
    color: #505458;
  }
  .login_remember {
    margin: 0px 0px 35px 0px;
    text-align: left;
  }
  /*.login_button {*/
    /*background: #505458;*/
  /*}*/
  /*el_checkbox {*/
    /*background: #505458;*/
  /*}*/
</style>

更多的教程请关注:非科班的科班

发布了49 篇原创文章 · 获赞 32 · 访问量 2210

猜你喜欢

转载自blog.csdn.net/qq_43255017/article/details/103883452
今日推荐