赞
踩
1.1 request.js请求工具
- //定制请求的实例
-
- //导入axios npm install axios
- import axios from 'axios';
- //定义一个变量,记录公共的前缀 , baseURL
- const baseURL = '/api';
- const instance = axios.create({baseURL})
-
-
- //添加响应拦截器
- instance.interceptors.response.use(
- result=>{
- return result.data;
- },
- err=>{
- alert('服务异常');
- return Promise.reject(err);//异步的状态转化成失败的状态
- }
- )
-
- export default instance;
2.1 编写注册接口
- //导入request.js请求工具
- import request from '@/utils/request.js'
-
- //提供调用注册接口的函数
- export const userRegisterService = (registerData)=>{
- //借助于UrlSearchParams完成传递
- const params = new URLSearchParams()
- for(let key in registerData){
- params.append(key,registerData[key]);
- }
- return request.post('/user/register',params);
- }
-
3.1 编写页面
3.2 给表单绑定数据
3.3 定义表单校验规则
3.4 调用注册接口
- ```html
- <script setup>
- import { User, Lock } from '@element-plus/icons-vue'
- import { ref } from 'vue'
- //控制注册与登录表单的显示, 默认显示注册
- const isRegister = ref(false)
-
- //定义数据模型
- const registerData = ref({
- username: '',
- password: '',
- rePassword: ''
- })
-
- //校验密码的函数
- const checkRePassword = (rule, value, callback) => {
- if (value === '') {
- callback(new Error('请再次确认密码'))
- } else if (value !== registerData.value.password) {
- callback(new Error('请确保两次输入的密码一样'))
- } else {
- callback()
- }
- }
-
- //定义表单校验规则
- const rules = {
- username: [
- { required: true, message: '请输入用户名', trigger: 'blur' },
- { min: 5, max: 16, message: '长度为5~16位非空字符', trigger: 'blur' }
- ],
- password: [
- { required: true, message: '请输入密码', trigger: 'blur' },
- { min: 5, max: 16, message: '长度为5~16位非空字符', trigger: 'blur' }
- ],
- rePassword: [
- { validator: checkRePassword, trigger: 'blur' }
- ]
- }
-
- //调用后台接口,完成注册
- import { userRegisterService} from '@/api/user.js'
- const register = async () => {
- //registerData是一个响应式对象,如果要获取值,需要.value
- let result = await userRegisterService(registerData.value);
- if (result.code === 0) {
- //成功了
- alert(result.msg ? result.msg : '注册成功');
- }else{
- //失败了
- alert('注册失败')
- }
- //alert(result.msg ? result.msg : '注册成功');
- // ElMessage.success(result.msg ? result.msg : '注册成功')
- }
-
- </script>
-
- <template>
- <el-row class="login-page">
- <el-col :span="12" class="bg"></el-col>
- <el-col :span="6" :offset="3" class="form">
- <!-- 注册表单 -->
- <el-form ref="form" size="large" autocomplete="off" v-if="isRegister" :model="registerData" :rules="rules">
- <el-form-item>
- <h1>注册</h1>
- </el-form-item>
- <el-form-item prop="username">
- <el-input :prefix-icon="User" placeholder="请输入用户名" v-model="registerData.username"></el-input>
- </el-form-item>
- <el-form-item prop="password">
- <el-input :prefix-icon="Lock" type="password" placeholder="请输入密码"
- v-model="registerData.password"></el-input>
- </el-form-item>
- <el-form-item prop="rePassword">
- <el-input :prefix-icon="Lock" type="password" placeholder="请输入再次密码"
- v-model="registerData.rePassword"></el-input>
- </el-form-item>
- <!-- 注册按钮 -->
- <el-form-item>
- <el-button class="button" type="primary" auto-insert-space @click="register">
- 注册
- </el-button>
- </el-form-item>
- <el-form-item class="flex">
- <el-link type="info" :underline="false" @click="isRegister = false">
- ← 返回
- </el-link>
- </el-form-item>
- </el-form>
- <!-- 登录表单 -->
- <el-form ref="form" size="large" autocomplete="off" v-else>
- <el-form-item>
- <h1>登录</h1>
- </el-form-item>
- <el-form-item>
- <el-input :prefix-icon="User" placeholder="请输入用户名"></el-input>
- </el-form-item>
- <el-form-item>
- <el-input name="password" :prefix-icon="Lock" type="password" placeholder="请输入密码"></el-input>
- </el-form-item>
- <el-form-item class="flex">
- <div class="flex">
- <el-checkbox>记住我</el-checkbox>
- <el-link type="primary" :underline="false">忘记密码?</el-link>
- </div>
- </el-form-item>
- <!-- 登录按钮 -->
- <el-form-item>
- <el-button class="button" type="primary" auto-insert-space>登录</el-button>
- </el-form-item>
- <el-form-item class="flex">
- <el-link type="info" :underline="false" @click="isRegister = true">
- 注册 →
- </el-link>
- </el-form-item>
- </el-form>
- </el-col>
- </el-row>
- </template>
-
- <style lang="scss" scoped>
- /* 样式 */
- .login-page {
- height: 100vh;
- background-color: #fff;
-
- .bg {
- background: url('@/assets/logo2.png') no-repeat 60% center / 240px auto,
- url('@/assets/login_bg.jpg') no-repeat center / cover;
- border-radius: 0 20px 20px 0;
- }
-
- .form {
- display: flex;
- flex-direction: column;
- justify-content: center;
- user-select: none;
-
- .title {
- margin: 0 auto;
- }
-
- .button {
- width: 100%;
- }
-
- .flex {
- width: 100%;
- display: flex;
- justify-content: space-between;
- }
- }
- }
- </style>
- ```
-
3.1 跨域问题
3.1.1 修改request.js
- //定制请求的实例
-
- //导入axios npm install axios
- import axios from 'axios';
- //定义一个变量,记录公共的前缀 , baseURL
- const baseURL = '/api';
- const instance = axios.create({baseURL})
-
-
- //添加响应拦截器
- instance.interceptors.response.use(
- result=>{
- return result.data;
- },
- err=>{
- alert('服务异常');
- return Promise.reject(err);//异步的状态转化成失败的状态
- }
- )
-
- export default instance;
3.1.2 修改vite.config.js
- import { fileURLToPath, URL } from 'node:url'
-
- import { defineConfig } from 'vite'
- import vue from '@vitejs/plugin-vue'
-
- // https://vitejs.dev/config/
- export default defineConfig({
- plugins: [
- vue(),
- ],
- resolve: {
- alias: {
- '@': fileURLToPath(new URL('./src', import.meta.url))
- }
- },
- server:{
- proxy:{
- '/api':{//获取路径中包含了/api的请求
- target:'http://localhost:8080',//后台服务所在的源
- changeOrigin:true,//修改源
- rewrite:(path)=>path.replace(/^\/api/,'')///api替换为''
- }
- }
- }
- })
4.1 测试
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。