新增是否开启用户注册功能
This commit is contained in:
		
							parent
							
								
									8ed7916b61
								
							
						
					
					
						commit
						5397e345ca
					
				| 
						 | 
				
			
			@ -0,0 +1,38 @@
 | 
			
		|||
package com.ruoyi.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.util.StringUtils;
 | 
			
		||||
import org.springframework.web.bind.annotation.PostMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.ruoyi.common.core.controller.BaseController;
 | 
			
		||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
			
		||||
import com.ruoyi.common.core.domain.model.RegisterBody;
 | 
			
		||||
import com.ruoyi.framework.web.service.SysRegisterService;
 | 
			
		||||
import com.ruoyi.system.service.ISysConfigService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 注册验证
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
public class SysRegisterController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private SysRegisterService registerService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysConfigService configService;
 | 
			
		||||
 | 
			
		||||
    @PostMapping("/register")
 | 
			
		||||
    public AjaxResult register(@RequestBody RegisterBody user)
 | 
			
		||||
    {
 | 
			
		||||
        if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser"))))
 | 
			
		||||
        {
 | 
			
		||||
            return error("当前系统没有开启注册功能!");
 | 
			
		||||
        }
 | 
			
		||||
        String msg = registerService.register(user);
 | 
			
		||||
        return StringUtils.isEmpty(msg) ? success() : error(msg);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -19,6 +19,7 @@ user.password.not.valid=* 5-50个字符
 | 
			
		|||
user.email.not.valid=邮箱格式错误
 | 
			
		||||
user.mobile.phone.number.not.valid=手机号格式错误
 | 
			
		||||
user.login.success=登录成功
 | 
			
		||||
user.register.success=注册成功
 | 
			
		||||
user.notfound=请重新登录
 | 
			
		||||
user.forcelogout=管理员强制退出,请重新登录
 | 
			
		||||
user.unknown.error=未知错误,请重新登录
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,7 @@
 | 
			
		|||
package com.ruoyi.common.constant;
 | 
			
		||||
 | 
			
		||||
import io.jsonwebtoken.Claims;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 通用常量信息
 | 
			
		||||
 * 
 | 
			
		||||
| 
						 | 
				
			
			@ -47,6 +49,11 @@ public class Constants
 | 
			
		|||
     */
 | 
			
		||||
    public static final String LOGOUT = "Logout";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 注册
 | 
			
		||||
     */
 | 
			
		||||
    public static final String REGISTER = "Register";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 登录失败
 | 
			
		||||
     */
 | 
			
		||||
| 
						 | 
				
			
			@ -95,7 +102,7 @@ public class Constants
 | 
			
		|||
    /**
 | 
			
		||||
     * 用户名称
 | 
			
		||||
     */
 | 
			
		||||
    public static final String JWT_USERNAME = "sub";
 | 
			
		||||
    public static final String JWT_USERNAME = Claims.SUBJECT;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户头像
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -63,4 +63,16 @@ public class UserConstants
 | 
			
		|||
    /** 校验返回结果码 */
 | 
			
		||||
    public final static String UNIQUE = "0";
 | 
			
		||||
    public final static String NOT_UNIQUE = "1";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户名长度限制
 | 
			
		||||
     */
 | 
			
		||||
    public static final int USERNAME_MIN_LENGTH = 2;
 | 
			
		||||
    public static final int USERNAME_MAX_LENGTH = 20;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 密码长度限制
 | 
			
		||||
     */
 | 
			
		||||
    public static final int PASSWORD_MIN_LENGTH = 5;
 | 
			
		||||
    public static final int PASSWORD_MAX_LENGTH = 20;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
package com.ruoyi.common.core.domain.model;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 用户注册对象
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class RegisterBody extends LoginBody
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -96,8 +96,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
 | 
			
		|||
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
 | 
			
		||||
                // 过滤请求
 | 
			
		||||
                .authorizeRequests()
 | 
			
		||||
                // 对于登录login 验证码captchaImage 允许匿名访问
 | 
			
		||||
                .antMatchers("/login", "/captchaImage").anonymous()
 | 
			
		||||
                // 对于登录login 注册register 验证码captchaImage 允许匿名访问
 | 
			
		||||
                .antMatchers("/login", "/register", "/captchaImage").anonymous()
 | 
			
		||||
                .antMatchers(
 | 
			
		||||
                        HttpMethod.GET,
 | 
			
		||||
                        "/",
 | 
			
		||||
| 
						 | 
				
			
			@ -126,7 +126,6 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
 | 
			
		|||
        httpSecurity.addFilterBefore(corsFilter, LogoutFilter.class);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * 强散列哈希加密实现
 | 
			
		||||
     */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,7 +65,7 @@ public class AsyncFactory
 | 
			
		|||
                logininfor.setOs(os);
 | 
			
		||||
                logininfor.setMsg(message);
 | 
			
		||||
                // 日志状态
 | 
			
		||||
                if (Constants.LOGIN_SUCCESS.equals(status) || Constants.LOGOUT.equals(status))
 | 
			
		||||
                if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER))
 | 
			
		||||
                {
 | 
			
		||||
                    logininfor.setStatus(Constants.SUCCESS);
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,115 @@
 | 
			
		|||
package com.ruoyi.framework.web.service;
 | 
			
		||||
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
import org.springframework.util.StringUtils;
 | 
			
		||||
import com.ruoyi.common.constant.Constants;
 | 
			
		||||
import com.ruoyi.common.constant.UserConstants;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysUser;
 | 
			
		||||
import com.ruoyi.common.core.domain.model.RegisterBody;
 | 
			
		||||
import com.ruoyi.common.core.redis.RedisCache;
 | 
			
		||||
import com.ruoyi.common.exception.user.CaptchaException;
 | 
			
		||||
import com.ruoyi.common.exception.user.CaptchaExpireException;
 | 
			
		||||
import com.ruoyi.common.utils.MessageUtils;
 | 
			
		||||
import com.ruoyi.common.utils.SecurityUtils;
 | 
			
		||||
import com.ruoyi.framework.manager.AsyncManager;
 | 
			
		||||
import com.ruoyi.framework.manager.factory.AsyncFactory;
 | 
			
		||||
import com.ruoyi.system.service.ISysConfigService;
 | 
			
		||||
import com.ruoyi.system.service.ISysUserService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 注册校验方法
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@Component
 | 
			
		||||
public class SysRegisterService
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysUserService userService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysConfigService configService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private RedisCache redisCache;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 注册
 | 
			
		||||
     */
 | 
			
		||||
    public String register(RegisterBody registerBody)
 | 
			
		||||
    {
 | 
			
		||||
        String msg = "", username = registerBody.getUsername(), password = registerBody.getPassword();
 | 
			
		||||
 | 
			
		||||
        boolean captchaOnOff = configService.selectCaptchaOnOff();
 | 
			
		||||
        // 验证码开关
 | 
			
		||||
        if (captchaOnOff)
 | 
			
		||||
        {
 | 
			
		||||
            validateCaptcha(username, registerBody.getCode(), registerBody.getUuid());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (StringUtils.isEmpty(username))
 | 
			
		||||
        {
 | 
			
		||||
            msg = "用户名不能为空";
 | 
			
		||||
        }
 | 
			
		||||
        else if (StringUtils.isEmpty(password))
 | 
			
		||||
        {
 | 
			
		||||
            msg = "用户密码不能为空";
 | 
			
		||||
        }
 | 
			
		||||
        else if (username.length() < UserConstants.USERNAME_MIN_LENGTH
 | 
			
		||||
                || username.length() > UserConstants.USERNAME_MAX_LENGTH)
 | 
			
		||||
        {
 | 
			
		||||
            msg = "账户长度必须在2到20个字符之间";
 | 
			
		||||
        }
 | 
			
		||||
        else if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
 | 
			
		||||
                || password.length() > UserConstants.PASSWORD_MAX_LENGTH)
 | 
			
		||||
        {
 | 
			
		||||
            msg = "密码长度必须在5到20个字符之间";
 | 
			
		||||
        }
 | 
			
		||||
        else if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(username)))
 | 
			
		||||
        {
 | 
			
		||||
            msg = "保存用户'" + username + "'失败,注册账号已存在";
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            SysUser sysUser = new SysUser();
 | 
			
		||||
            sysUser.setUserName(username);
 | 
			
		||||
            sysUser.setNickName(username);
 | 
			
		||||
            sysUser.setPassword(SecurityUtils.encryptPassword(registerBody.getPassword()));
 | 
			
		||||
            boolean regFlag = userService.registerUser(sysUser);
 | 
			
		||||
            if (!regFlag)
 | 
			
		||||
            {
 | 
			
		||||
                msg = "注册失败,请联系系统管理人员";
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.REGISTER,
 | 
			
		||||
                        MessageUtils.message("user.register.success")));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return msg;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 校验验证码
 | 
			
		||||
     * 
 | 
			
		||||
     * @param username 用户名
 | 
			
		||||
     * @param code 验证码
 | 
			
		||||
     * @param uuid 唯一标识
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    public void validateCaptcha(String username, String code, String uuid)
 | 
			
		||||
    {
 | 
			
		||||
        String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
 | 
			
		||||
        String captcha = redisCache.getCacheObject(verifyKey);
 | 
			
		||||
        redisCache.deleteObject(verifyKey);
 | 
			
		||||
        if (captcha == null)
 | 
			
		||||
        {
 | 
			
		||||
            throw new CaptchaExpireException();
 | 
			
		||||
        }
 | 
			
		||||
        if (!code.equalsIgnoreCase(captcha))
 | 
			
		||||
        {
 | 
			
		||||
            throw new CaptchaException();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -105,6 +105,14 @@ public interface ISysUserService
 | 
			
		|||
     */
 | 
			
		||||
    public int insertUser(SysUser user);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 注册用户信息
 | 
			
		||||
     * 
 | 
			
		||||
     * @param user 用户信息
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    public boolean registerUser(SysUser user);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改用户信息
 | 
			
		||||
     * 
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -246,6 +246,17 @@ public class SysUserServiceImpl implements ISysUserService
 | 
			
		|||
        return rows;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 注册用户信息
 | 
			
		||||
     * 
 | 
			
		||||
     * @param user 用户信息
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    public boolean registerUser(SysUser user)
 | 
			
		||||
    {
 | 
			
		||||
        return userMapper.insertUser(user) > 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改保存用户信息
 | 
			
		||||
     * 
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,6 +15,18 @@ export function login(username, password, code, uuid) {
 | 
			
		|||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 注册方法
 | 
			
		||||
export function register(data) {
 | 
			
		||||
  return request({
 | 
			
		||||
    url: '/register',
 | 
			
		||||
    headers: {
 | 
			
		||||
      isToken: false
 | 
			
		||||
    },
 | 
			
		||||
    method: 'post',
 | 
			
		||||
    data: data
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 获取用户详细信息
 | 
			
		||||
export function getInfo() {
 | 
			
		||||
  return request({
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,6 +43,11 @@ export const constantRoutes = [
 | 
			
		|||
    component: (resolve) => require(['@/views/login'], resolve),
 | 
			
		||||
    hidden: true
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    path: '/register',
 | 
			
		||||
    component: (resolve) => require(['@/views/register'], resolve),
 | 
			
		||||
    hidden: true
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    path: '/404',
 | 
			
		||||
    component: (resolve) => require(['@/views/error/404'], resolve),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -44,6 +44,9 @@
 | 
			
		|||
          <span v-if="!loading">登 录</span>
 | 
			
		||||
          <span v-else>登 录 中...</span>
 | 
			
		||||
        </el-button>
 | 
			
		||||
        <div style="float: right;" v-if="register">
 | 
			
		||||
          <router-link class="link-type" :to="'/register'">立即注册</router-link>
 | 
			
		||||
        </div>
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
    </el-form>
 | 
			
		||||
    <!--  底部  -->
 | 
			
		||||
| 
						 | 
				
			
			@ -73,15 +76,18 @@ export default {
 | 
			
		|||
      },
 | 
			
		||||
      loginRules: {
 | 
			
		||||
        username: [
 | 
			
		||||
          { required: true, trigger: "blur", message: "用户名不能为空" }
 | 
			
		||||
          { required: true, trigger: "blur", message: "请输入您的账号" }
 | 
			
		||||
        ],
 | 
			
		||||
        password: [
 | 
			
		||||
          { required: true, trigger: "blur", message: "密码不能为空" }
 | 
			
		||||
          { required: true, trigger: "blur", message: "请输入您的密码" }
 | 
			
		||||
        ],
 | 
			
		||||
        code: [{ required: true, trigger: "change", message: "验证码不能为空" }]
 | 
			
		||||
        code: [{ required: true, trigger: "change", message: "请输入验证码" }]
 | 
			
		||||
      },
 | 
			
		||||
      loading: false,
 | 
			
		||||
      // 验证码开关
 | 
			
		||||
      captchaOnOff: true,
 | 
			
		||||
      // 注册开关
 | 
			
		||||
      register: false,
 | 
			
		||||
      redirect: undefined
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,208 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <div class="register">
 | 
			
		||||
    <el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form">
 | 
			
		||||
      <h3 class="title">若依后台管理系统</h3>
 | 
			
		||||
      <el-form-item prop="username">
 | 
			
		||||
        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号">
 | 
			
		||||
          <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
 | 
			
		||||
        </el-input>
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
      <el-form-item prop="password">
 | 
			
		||||
        <el-input
 | 
			
		||||
          v-model="registerForm.password"
 | 
			
		||||
          type="password"
 | 
			
		||||
          auto-complete="off"
 | 
			
		||||
          placeholder="密码"
 | 
			
		||||
          @keyup.enter.native="handleRegister"
 | 
			
		||||
        >
 | 
			
		||||
          <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
 | 
			
		||||
        </el-input>
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
      <el-form-item prop="confirmPassword">
 | 
			
		||||
        <el-input
 | 
			
		||||
          v-model="registerForm.confirmPassword"
 | 
			
		||||
          type="password"
 | 
			
		||||
          auto-complete="off"
 | 
			
		||||
          placeholder="确认密码"
 | 
			
		||||
          @keyup.enter.native="handleRegister"
 | 
			
		||||
        >
 | 
			
		||||
          <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
 | 
			
		||||
        </el-input>
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
      <el-form-item prop="code" v-if="captchaOnOff">
 | 
			
		||||
        <el-input
 | 
			
		||||
          v-model="registerForm.code"
 | 
			
		||||
          auto-complete="off"
 | 
			
		||||
          placeholder="验证码"
 | 
			
		||||
          style="width: 63%"
 | 
			
		||||
          @keyup.enter.native="handleRegister"
 | 
			
		||||
        >
 | 
			
		||||
          <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
 | 
			
		||||
        </el-input>
 | 
			
		||||
        <div class="register-code">
 | 
			
		||||
          <img :src="codeUrl" @click="getCode" class="register-code-img"/>
 | 
			
		||||
        </div>
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
      <el-form-item style="width:100%;">
 | 
			
		||||
        <el-button
 | 
			
		||||
          :loading="loading"
 | 
			
		||||
          size="medium"
 | 
			
		||||
          type="primary"
 | 
			
		||||
          style="width:100%;"
 | 
			
		||||
          @click.native.prevent="handleRegister"
 | 
			
		||||
        >
 | 
			
		||||
          <span v-if="!loading">注 册</span>
 | 
			
		||||
          <span v-else>注 册 中...</span>
 | 
			
		||||
        </el-button>
 | 
			
		||||
        <div style="float: right;">
 | 
			
		||||
          <router-link class="link-type" :to="'/login'">使用已有账户登录</router-link>
 | 
			
		||||
        </div>
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
    </el-form>
 | 
			
		||||
    <!--  底部  -->
 | 
			
		||||
    <div class="el-register-footer">
 | 
			
		||||
      <span>Copyright © 2018-2021 ruoyi.vip All Rights Reserved.</span>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import { getCodeImg, register } from "@/api/login";
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "Register",
 | 
			
		||||
  data() {
 | 
			
		||||
    const equalToPassword = (rule, value, callback) => {
 | 
			
		||||
      if (this.registerForm.password !== value) {
 | 
			
		||||
        callback(new Error("两次输入的密码不一致"));
 | 
			
		||||
      } else {
 | 
			
		||||
        callback();
 | 
			
		||||
      }
 | 
			
		||||
    };
 | 
			
		||||
    return {
 | 
			
		||||
      codeUrl: "",
 | 
			
		||||
      registerForm: {
 | 
			
		||||
        username: "",
 | 
			
		||||
        password: "",
 | 
			
		||||
        confirmPassword: "",
 | 
			
		||||
        code: "",
 | 
			
		||||
        uuid: ""
 | 
			
		||||
      },
 | 
			
		||||
      registerRules: {
 | 
			
		||||
        username: [
 | 
			
		||||
          { required: true, trigger: "blur", message: "请输入您的账号" },
 | 
			
		||||
          { min: 2, max: 20, message: '用户账号长度必须介于 2 和 20 之间', trigger: 'blur' }
 | 
			
		||||
        ],
 | 
			
		||||
        password: [
 | 
			
		||||
          { required: true, trigger: "blur", message: "请输入您的密码" },
 | 
			
		||||
          { min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' }
 | 
			
		||||
        ],
 | 
			
		||||
        confirmPassword: [
 | 
			
		||||
          { required: true, trigger: "blur", message: "请再次输入您的密码" },
 | 
			
		||||
          { required: true, validator: equalToPassword, trigger: "blur" }
 | 
			
		||||
        ],
 | 
			
		||||
        code: [{ required: true, trigger: "change", message: "请输入验证码" }]
 | 
			
		||||
      },
 | 
			
		||||
      loading: false,
 | 
			
		||||
      captchaOnOff: true
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  created() {
 | 
			
		||||
    this.getCode();
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getCode() {
 | 
			
		||||
      getCodeImg().then(res => {
 | 
			
		||||
        this.captchaOnOff = res.captchaOnOff === undefined ? true : res.captchaOnOff;
 | 
			
		||||
        if (this.captchaOnOff) {
 | 
			
		||||
          this.codeUrl = "data:image/gif;base64," + res.img;
 | 
			
		||||
          this.registerForm.uuid = res.uuid;
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    handleRegister() {
 | 
			
		||||
      this.$refs.registerForm.validate(valid => {
 | 
			
		||||
        if (valid) {
 | 
			
		||||
          this.loading = true;
 | 
			
		||||
          register(this.registerForm).then(res => {
 | 
			
		||||
            const username = this.registerForm.username;
 | 
			
		||||
            this.$alert("<font color='red'>恭喜你,您的账号 " + username + " 注册成功!</font>", '系统提示', {
 | 
			
		||||
              dangerouslyUseHTMLString: true
 | 
			
		||||
            }).then(() => {
 | 
			
		||||
              this.$router.push("/login");
 | 
			
		||||
            }).catch(() => {});
 | 
			
		||||
          }).catch(() => {
 | 
			
		||||
            this.loading = false;
 | 
			
		||||
            if (this.captchaOnOff) {
 | 
			
		||||
              this.getCode();
 | 
			
		||||
            }
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style rel="stylesheet/scss" lang="scss">
 | 
			
		||||
.register {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  justify-content: center;
 | 
			
		||||
  align-items: center;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  background-image: url("../assets/images/login-background.jpg");
 | 
			
		||||
  background-size: cover;
 | 
			
		||||
}
 | 
			
		||||
.title {
 | 
			
		||||
  margin: 0px auto 30px auto;
 | 
			
		||||
  text-align: center;
 | 
			
		||||
  color: #707070;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.register-form {
 | 
			
		||||
  border-radius: 6px;
 | 
			
		||||
  background: #ffffff;
 | 
			
		||||
  width: 400px;
 | 
			
		||||
  padding: 25px 25px 5px 25px;
 | 
			
		||||
  .el-input {
 | 
			
		||||
    height: 38px;
 | 
			
		||||
    input {
 | 
			
		||||
      height: 38px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .input-icon {
 | 
			
		||||
    height: 39px;
 | 
			
		||||
    width: 14px;
 | 
			
		||||
    margin-left: 2px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
.register-tip {
 | 
			
		||||
  font-size: 13px;
 | 
			
		||||
  text-align: center;
 | 
			
		||||
  color: #bfbfbf;
 | 
			
		||||
}
 | 
			
		||||
.register-code {
 | 
			
		||||
  width: 33%;
 | 
			
		||||
  height: 38px;
 | 
			
		||||
  float: right;
 | 
			
		||||
  img {
 | 
			
		||||
    cursor: pointer;
 | 
			
		||||
    vertical-align: middle;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
.el-register-footer {
 | 
			
		||||
  height: 40px;
 | 
			
		||||
  line-height: 40px;
 | 
			
		||||
  position: fixed;
 | 
			
		||||
  bottom: 0;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  text-align: center;
 | 
			
		||||
  color: #fff;
 | 
			
		||||
  font-family: Arial;
 | 
			
		||||
  font-size: 12px;
 | 
			
		||||
  letter-spacing: 1px;
 | 
			
		||||
}
 | 
			
		||||
.register-code-img {
 | 
			
		||||
  height: 38px;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -436,7 +436,8 @@ export default {
 | 
			
		|||
      // 表单校验
 | 
			
		||||
      rules: {
 | 
			
		||||
        userName: [
 | 
			
		||||
          { required: true, message: "用户名称不能为空", trigger: "blur" }
 | 
			
		||||
          { required: true, message: "用户名称不能为空", trigger: "blur" },
 | 
			
		||||
          { min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
 | 
			
		||||
        ],
 | 
			
		||||
        nickName: [
 | 
			
		||||
          { required: true, message: "用户昵称不能为空", trigger: "blur" }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -537,7 +537,8 @@ create table sys_config (
 | 
			
		|||
insert into sys_config values(1, '主框架页-默认皮肤样式名称',     'sys.index.skinName',            'skin-blue',     'Y', 'admin', sysdate(), '', null, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow' );
 | 
			
		||||
insert into sys_config values(2, '用户管理-账号初始密码',         'sys.user.initPassword',         '123456',        'Y', 'admin', sysdate(), '', null, '初始化密码 123456' );
 | 
			
		||||
insert into sys_config values(3, '主框架页-侧边栏主题',           'sys.index.sideTheme',           'theme-dark',    'Y', 'admin', sysdate(), '', null, '深色主题theme-dark,浅色主题theme-light' );
 | 
			
		||||
insert into sys_config values(4, '账号自助-验证码开关',       'sys.account.captchaOnOff',      'true',          'Y', 'admin', sysdate(), '', null, '是否开启登录验证码功能(true开启,false关闭)');
 | 
			
		||||
insert into sys_config values(4, '账号自助-验证码开关',           'sys.account.captchaOnOff',      'true',          'Y', 'admin', sysdate(), '', null, '是否开启验证码功能(true开启,false关闭)');
 | 
			
		||||
insert into sys_config values(5, '账号自助-是否开启用户注册功能', 'sys.account.registerUser',      'false',         'Y', 'admin', sysdate(), '', null, '是否开启注册用户功能(true开启,false关闭)');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
		Loading…
	
		Reference in New Issue