衡山 22/12/11 vue6

目录

在这里插入图片描述

页面布局流程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注册页面七大改动

<template>
	<h1>Regist</h1>
	<van-form @submit="onSubmit">
	  <van-cell-group inset>
	    <van-field
	      v-model="username"
	      name="用户名"
	      label="用户名"
	      placeholder="用户名"
	      :rules="[
			  { required: true, message: '请填写用户名' },
		      {validator:checkUsername,message:'用户已经被注册'}
		  ]"
	    />
	    <van-field
	      v-model="password"
	      type="password"
	      name="密码"
	      label="密码"
	      placeholder="密码"
	      :rules="[{ required: true, message: '请填写密码' }]"
	    />
		<van-field
		  v-model="re_password"
		  type="password"
		  name="密码"
		  label="密码"
		  placeholder="再次输入密码密码"
		  :rules="[  
			  { required: true, message: '再次输入密码密码' },
			  {validator:checkRePassword,message:'两次输入密码不一致'}
			  ]"
		/>
	  </van-cell-group>
	  <div style="margin: 16px;">
	    <van-button round block type="primary" native-type="submit">
	      提交
	    </van-button>
	  </div>
	</van-form>
	
</template>

<script lang="ts" setup>
	import { ref } from 'vue';
	
	const username = ref('');
	const password = ref('');
	const re_password = ref('');
	
	
	const onSubmit = (values) => {
      console.log('submit', values);
    };
	
	// function onSubmit(values){
	// 	console.log('submit', values);
	// }
	
	const checkRePassword = (value)=>{
		console.log("检查两次密码是否一致")
		if(password.value != re_password.value){
			return false
		}
		return true
	}
	
	function checkUsername(){
		console.log("检查用户是否重名")
		
		return '${username.value}已经被注册'
	}
	
	
</script>

<style>
</style>

验证用户名是都被占用

在这里插入图片描述

在这里插入图片描述

密码两次验证

在这里插入图片描述
在这里插入图片描述

api管理

在这里插入图片描述

在这里插入图片描述
serviceAxios.ts

import axios from "axios";
import serverConfig from "@/config";

// import qs from "qs";


// 创建 axios 请求实例
const serviceAxios = axios.create({
  baseURL: serverConfig.baseURL, // 基础请求地址
  timeout: 10000,                // 请求超时设置
  withCredentials: false,        // 跨域请求是否需要携带cookie
});


// 创建请求拦截(发送请求的时候,携带上一些头信息)
serviceAxios.interceptors.request.use(
  (config) => {
    // 这里可以添加自己的业务逻辑,如请求时加token等 Authorization
    console.log("请求配置", config);
    return config;
  },
  (error) => {
    Promise.reject(error);
  }
);

// 创建响应拦截
serviceAxios.interceptors.response.use(
  (res) => {
    let data = res.data;
    // 处理自己的业务逻辑,比如判断 token 是否过期等等
    // 代码块
    return data;
  },
  (error) => {
    let message = "请求出错了!!状态码:"+error.response.status;
    return Promise.reject(message);
  }
);


export default serviceAxios;

.env.develipment

VITE_API_TARGET_URL=https://mock.presstime.cn/mock/635364243ea0490082820ad1/example/

vite.config.ts

import { defineConfig,loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue';
import Components from 'unplugin-vue-components/vite';
import { VantResolver } from 'unplugin-vue-components/resolvers';
import { createStyleImportPlugin } from 'vite-plugin-style-import'
import { resolve } from 'path'

export default({command, mode}) => defineConfig({
  plugins: [
    vue(),
    Components({
      resolvers: [VantResolver()],
    }),
	createStyleImportPlugin({
	  resolves: [{
		  libraryName: '@nutui/nutui',
		  libraryNameChangeCase: 'pascalCase',
		  resolveStyle: (name) => {
			return `@nutui/nutui/dist/packages/${name.toLowerCase()}/index.scss`
		  },
	  }]
	}),
  ],
  css: {
	  preprocessorOptions: {
		scss: {
		  // 配置 nutui 全局 scss 变量
		  additionalData: `@import "@nutui/nutui/dist/styles/variables.scss";`
		}
	  }
	},
  resolve: {
	   // 配置别名(方便)
       alias: [
			{ find: '@', replacement: resolve(__dirname, 'src') },
			{ find: '_c', replacement: resolve(__dirname, 'src/components') },
			{ find: '_v', replacement: resolve(__dirname, 'src/views') },
		]
    },
	server: {
		// host: true,
		// hmr: true,
		proxy: {
		  '/api': {
			// 根据不同运行环境加载不同的配置文件
			target: loadEnv(mode, process.cwd()).VITE_API_TARGET_URL,
			// 根据配置文件加载
			// target: serverConfig.server.dev,
			changeOrigin: true,
			rewrite: (path) => path.replace(/^\/api/, '')
		  }
		}
	  },

});

user.ts

import serviceAxios from "@/utils/serviceAxios"

// 调用检查用户名是否重复接口
// /check/username?username=cali
export const checkUsername = (params) =>{
	return serviceAxios({
		url: '/check/username',
		method: 'get',
		params
	})
};

export const createUser = (params) =>{
	return serviceAxios({
		url: '/user',
		method: 'post',
		params
	})
};

Regist.vue

<template>
	<h1>Rgeist</h1>
	<van-form @submit="onSubmit">
	  <van-cell-group inset>
	    <van-field
	      v-model="username"
	      name="用户名"
	      label="用户名"
	      placeholder="用户名"
	      :rules="[
			  { required: true, message: '请填写用户名' },
			  { validator: checkUserRepete, message: '用户已经被注册'}
			  ]"
	    />
	    <van-field
	      v-model="password"
	      type="password"
	      name="密码"
	      label="密码"
	      placeholder="密码"
	      :rules="[{ required: true, message: '请填写密码' }]"
	    />
		<van-field
		  v-model="re_password"
		  type="password"
		  name="密码"
		  label="密码"
		  placeholder="密码"
		  :rules="[
			  { required: true, message: '请确认密码' },
			  { validator: checkRePassword, message: '两次密码不一致'}
			]"
		/>
	  </van-cell-group>
	  <div style="margin: 16px;">
	    <van-button round block type="primary" native-type="submit">
	      提交
	    </van-button>
	  </div>
	</van-form>
</template>

<script setup lang="ts">
	import {ref} from 'vue'
	import {checkUsername} from '@/api/user'
	
	const username = ref("")
	const password = ref("")
	const re_password = ref("")
	
	
	function onSubmit(){
		console.log("Onsubmit...")
		// 调用注册接口
		// 1. api/user.ts => 定义请求api函数
		// 2. 在onSubmit调用请求api函数  Toast提示,成功、失败
	}
	
	function checkUserRepete(name){
		console.log("检查用户名是否重名")
		// return false
		// return `${username.value}已经被注册`
		// return `${name}已经被注册`
		var parmas = {"username":name}
		checkUsername(parmas)
		// 上面的内容执行成功
		.then(res => {
			console.log("api result", res)
			if(res.code != 0){
				return false
			}
			return true
		})
		// 上面checkUsername+then执行出错
		.catch(err => {
			console.log("error")
			return `出错了:${err}`
		})
		
	}
	
	function checkRePassword(){
		if(password.value != re_password.value){
			return false
		}
		return true
	}
	
	// 请求api -> axios -> 请求 url => /check/username
	// 将基础url放到配置文件中 => https://mock.presstime.cn/mock/635364243ea0490082820ad1/example/
	// /api/check/username => https://xxxxxxxxx/example/check/username
	// yarn dev => 开发环境development => 加载.env.development
	// 

</script>

<style>
</style>

index.ts

const serverConfig = {
baseURL: “/api”, // 请求基础地址,可根据环境自定义
useTokenAuthorization: true, // 是否开启 token 认证
};
export default serverConfig;

注册

在这里插入图片描述

在这里插入图片描述

登录接口

在这里插入图片描述

login

<template>
	<!-- @submit => 绑定提交事件 => 定义onSubmit函数 -->
	<van-form @submit="onSubmit">
	  <van-cell-group inset>
		  <!-- v-model=>定义username/password -->
	    <van-field
	      v-model="username"
	      name="username"
	      label="用户名"
	      placeholder="用户名"
	      :rules="[{ required: true, message: '请填写用户名' }]"
	    />
	    <van-field
	      v-model="password"
	      type="password"
	      name="password"
	      label="密码"
	      placeholder="密码"
	      :rules="[{ required: true, message: '请填写密码' }]"
	    />
	  </van-cell-group>
	  <div style="margin: 16px;">
	    <van-button round block type="primary"  native-type="submit">
	      提交
	    </van-button>
	  </div>
	</van-form>
</template>

<script setup lang="ts">
	import {ref} from 'vue'
	// import {Toast} from 'vant'
	import { showSuccessToast, showFailToast } from 'vant';
	import 'vant/es/toast/style';
	import {login} from '@/api/user'
	import router from '@/router'
	
	var username = ref("")
	var password = ref("")
	
	function onSubmit(data){
		console.log("on Submit")
		// 定义接口函数
		// 调用接口函数
		login(data)
		.then(res=>{
			if(res.code != 0){
				showFailToast('失败文案');
			}else{
				showSuccessToast('成功文案');
				localStorage.setItem("username1",res.data.username)
				router.push({
					name:"home",
					query: {date:new Date().getTime()}
				})
			}
		})
		.catch(err=>{
			console.log("出错了~",err)
		})
		
		// if(username.value=="admin" && password.value=="123456"){
		// 	console.log("成功")
		// 	showSuccessToast('成功文案');
		// 	// Toast.success('成功文案');
			
		// }else{
		// 	console.log("失败")
		// 	showFailToast('失败文案');
		// 	// Toast.fail('失败文案');
		// }
	}
	
</script>

<style>
</style>

Regist:

<template>
	<h1>Rgeist</h1>
	<van-form @submit="onSubmit">
	  <van-cell-group inset>
	    <van-field
	      v-model="username"
	      name="username"
	      label="用户名"
	      placeholder="用户名"
	      :rules="[
			  { required: true, message: '请填写用户名' },
			  { validator: checkUserRepete, message: '用户已经被注册'}
			  ]"
	    />
	    <van-field
	      v-model="password"
	      type="password"
	      name="password"
	      label="密码"
	      placeholder="密码"
	      :rules="[{ required: true, message: '请填写密码' }]"
	    />
		<van-field
		  v-model="re_password"
		  type="password"
		  name="re_password"
		  label="密码"
		  placeholder="密码"
		  :rules="[
			  { required: true, message: '请确认密码' },
			  { validator: checkRePassword, message: '两次密码不一致'}
			]"
		/>
	  </van-cell-group>
	  <div style="margin: 16px;">
	    <van-button round block type="primary" native-type="submit">
	      提交
	    </van-button>
	  </div>
	</van-form>
</template>

<script setup lang="ts">
	import {ref} from 'vue'
	import {checkUsername, createUser} from '@/api/user'
	import { showSuccessToast, showFailToast } from 'vant';
	import router from '@/router'
	import 'vant/es/toast/style';
	
	const username = ref("")
	const password = ref("")
	const re_password = ref("")
	
	
	function onSubmit(data){
		console.log("Onsubmit...")
		// 调用注册接口
		// 1. api/user.ts => 定义请求api函数
		// 2. 在onSubmit调用请求api函数  Toast提示,成功、失败
		// var data = {
		// 	"username":username.value,
		// 	"password":password.value,
		// 	"re_password":re_password.value
		// }
		createUser(data)
		.then(res=>{
			console.log(res)
			if(res.code != 0){
				showFailToast('失败文案');
			}else{
				showSuccessToast('成功文案');
				router.push({
					name:"login",
					query: {date:new Date().getTime()}
				})
			}
		})
		.catch(err=>{
			
		})
	}
	
	function checkUserRepete(name){
		console.log("检查用户名是否重名")
		// return false
		// return `${username.value}已经被注册`
		// return `${name}已经被注册`
		var parmas = {"username":name}
		var result = checkUsername(parmas)
		// 上面的内容执行成功
		.then(res => {
			console.log("api result", res)
			if(res.code != 0){
				return false
			}
			return true
		})
		// 上面checkUsername+then执行出错
		.catch(err => {
			console.log("error")
			return `出错了:${err}`
		})
		return result
	}
	
	function checkRePassword(){
		if(password.value != re_password.value){
			return false
		}
		return true
	}
	
	// 请求api -> axios -> 请求 url => /check/username
	// 将基础url放到配置文件中 => https://mock.presstime.cn/mock/635364243ea0490082820ad1/example/
	// /api/check/username => https://xxxxxxxxx/example/check/username
	// yarn dev => 开发环境development => 加载.env.development
	// 

</script>

<style>
</style>

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值