定制小程序开发理解vue-admin-template模板,连接后端改造登陆功能

定制小程序开发首先修改统一请求路径定制小程序开发为我们自己的登陆接口,在.env.development文件中

  1. # base api
  2. VUE_APP_BASE_API = 'http://localhost:8081/api/dsxs/company'

定制小程序开发打开登陆页面,src/views/login/index.vue

  1. <template>
  2. <div class="login-container">
  3. <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on" label-position="left">
  4. <div class="title-container">
  5. <h3 class="title">Login Form</h3>
  6. </div>
  7. <el-form-item prop="username">
  8. <span class="svg-container">
  9. <svg-icon icon-class="user" />
  10. </span>
  11. <el-input
  12. ref="username"
  13. v-model="loginForm.username"
  14. placeholder="Username"
  15. name="username"
  16. type="text"
  17. tabindex="1"
  18. auto-complete="on"
  19. />
  20. </el-form-item>
  21. <el-form-item prop="password">
  22. <span class="svg-container">
  23. <svg-icon icon-class="password" />
  24. </span>
  25. <el-input
  26. :key="passwordType"
  27. ref="password"
  28. v-model="loginForm.password"
  29. :type="passwordType"
  30. placeholder="Password"
  31. name="password"
  32. tabindex="2"
  33. auto-complete="on"
  34. @keyup.enter.native="handleLogin"
  35. />
  36. <span class="show-pwd" @click="showPwd">
  37. <svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" />
  38. </span>
  39. </el-form-item>
  40. <el-button :loading="loading" type="primary" style="width:100%;margin-bottom:30px;" @click.native.prevent="handleLogin">Login</el-button>
  41. <div class="tips">
  42. <span style="margin-right:20px;">username: admin</span>
  43. <span> password: any</span>
  44. </div>
  45. </el-form>
  46. </div>
  47. </template>

可以看到页面使用组件对loginForm进行名称和密码的绑定

  1. data() {
  2. const validateUsername = (rule, value, callback) => {
  3. if (!validUsername(value)) {
  4. callback(new Error('Please enter the correct user name'))
  5. } else {
  6. callback()
  7. }
  8. }
  9. const validatePassword = (rule, value, callback) => {
  10. if (value.length < 6) {
  11. callback(new Error('The password can not be less than 6 digits'))
  12. } else {
  13. callback()
  14. }
  15. }

这段代码则为对输入的内容进行验证

看登陆的方法

  1. handleLogin() {
  2. this.$refs.loginForm.validate(valid => {
  3. if (valid) {
  4. this.loading = true
  5. this.$store.dispatch('user/login', this.loginForm).then(() => {
  6. this.$router.push({ path: this.redirect || '/' })
  7. this.loading = false
  8. }).catch(() => {
  9. this.loading = false
  10. })
  11. } else {
  12. return false
  13. }
  14. })
  15. }

其中 this.$store.dispatch('user/login', this.loginForm),不是请求后台user/login接口,而是转到modules下的user.js中的login方法,打开store/modules/user.js可以看到login方法。而login方法则是调用api/user.js中的login方法。

此时修改store/modules/user.js接收后台传来的响应数据

  1. const actions = {
  2. // user login
  3. login({ commit }, userInfo) {
  4. const { username, password } = userInfo
  5. return new Promise((resolve, reject) => {
  6. login({ username: username.trim(), password: password }).then(response => {
  7. console.log(response)
  8. const { data } = response
  9. commit('SET_TOKEN', response.data.token)
  10. setToken(response.data.token)
  11. resolve()
  12. }).catch(error => {
  13. reject(error)
  14. })
  15. })
  16. },

同时在api/user.js中修改为我们后台的请求地址

  1. import request from '@/utils/request'
  2. export function login(data) {
  3. return request({
  4. url: 'userlogin',
  5. method: 'post',
  6. data
  7. })
  8. }
  9. export function getInfo(token) {
  10. return request({
  11. url: 'userinfo',
  12. method: 'get',
  13. params: { token }
  14. })
  15. }

此时可以发现模板采用的登陆方式是请求两次,第一次通过用户名密码请求后端,后端判断后,返回对应的token。然后在通过getInfo方法请求后端,获取用户真实信息。

在编写后端之前还需要修改utils/request.js,因为默认是20000为成功,而我们平时返回的是200

  1. // if the custom code is not 20000, it is judged as an error.
  2. if (res.code !== 200) {
  3. Message({
  4. message: res.message || 'Error',
  5. type: 'error',
  6. duration: 5 * 1000
  7. })

简单的编写后端代码,登陆方法根据账号密码查出用户信息,根据用户id与name生成token并返回,userinfo则是对token进行获取,在查出对应值进行返回。

  1. @CrossOrigin
  2. @RestController
  3. @RequestMapping("/api/dsxs/company")
  4. public class CompanyuserController {
  5. @Autowired
  6. private CompanyuserService companyuserService;
  7. //后台登陆
  8. @PostMapping("userlogin")
  9. @ResponseBody
  10. public R userlogin(@RequestBody UserVo userVo){
  11. Companyuser companyuser = companyuserService.login(userVo);
  12. String token = JwtHelper.createToken(companyuser.getId(), companyuser.getName());
  13. return R.ok().data("token",token);
  14. }
  15. //返回信息
  16. @GetMapping("userinfo")
  17. public R userinfo( String token){
  18. Integer userId = JwtHelper.getUserId(token);
  19. System.out.println("====");
  20. Companyuser user = companyuserService.getById(userId);
  21. HashMap<String, String> map = new HashMap<>();
  22. map.put("name",user.getName());
  23. map.put("avatar",user.getAvatar());
  24. return R.ok().data("name",user.getName()).data("avatar",user.getAvatar());
  25. }
  26. }

我这里使用@注解解决的跨域问题。

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发