- 1、使用npm create project 在前端创建一个vue项目
- 2、新建vue项目后,在vue.config.js中配置跨域请求代理
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
transpileDependencies: true,
lintOnSave:false,
devServer: {
open: true,
host: 'localhost',
port: 8080,
https: false,
//以上的ip和端口是我们本机的;下面为需要跨域的
proxy: {//配置跨域
'/api': {
target: 'http://127.0.0.1:8000',//这里后台的地址模拟的;应该填写你们真实的后台接口
ws: true,
changOrigin: true,//允许跨域
pathRewrite: {
'^/api': ''//请求的时候使用这个api就可以
}
//rewrite:(path)=>path.replace(/^\/api/,"")
}
}
}
})
- 3、新建一个command.js文件用于生成唯一的UUID
var generateUUID=function(){
let d = new Date().getTime();
if(window.performance && typeof window.performance.now === "function"){
d += performance.now(); //use high-precision timer if available
}
let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
let r = (d + Math.random()*16)%16 | 0;
d = Math.floor(d/16);
return (c=='x' ? r : (r&0x3|0x8)).toString(16);
});
return uuid;
}
export {
generateUUID
}
- 4、新建一个login.vue组件,并编写相应逻辑代码
<template>
<div id="master">
<label for="">图形验证码:</label>
<input type="text" v-model="input_image_code">
<img :src="image_code" alt="" @click="get_image_code"><br/>
<span v-show="show_errmsg_status">{{show_errmsg}}</span>
<button @click="check_image_code">验证</button><br/>
</div>
</template>
<script>
import axios from 'axios'
import { generateUUID } from '@/js/command' //导入command.js
export default {
data() {
return {
image_code: '',
input_image_code:'',
UUID:'',
show_errmsg:'',
show_errmsg_status:false
}
},
methods: {
get_image_code() {
this.UUID=generateUUID()
this.image_code='http://127.0.0.1:8000/image_code/'+ this.UUID
},
// 获取文本框中输入的验证码,向后端发起请求验证验证码
check_image_code(){
axios.post('/api/image_code/'+this.UUID+'/',{
image_code:this.input_image_code,
responseType: 'json',
})
.then((res)=>{
if(res.data.errmsg==='ok'){
this.show_errmsg_status=true;
this.show_errmsg='验证成功'
}else{
this.show_errmsg_status=true;
this.show_errmsg='验证失败'
}
})
.catch(err=>{
console.log('失败')
})
}
},
mounted () {
// 页面挂载后调用方法获取后端验证码显示在页面上
this.get_image_code();
},
}
</script>
<style scoped>
*{
margin: 0px;
padding: 0px;
}
#master{
text-align: center;
}
label{
color: grey;
}
img{
width: 100px;
height: 30px;
padding-top: 10px;
}
</style>
- 5、在router文件夹下的index.js中配置login组件的路由
{ path:'/login', name:'login',component:()=>import('@/views/login')},
- 6、在main.js下导入router使用router
import Vue from 'vue'
import App from './App.vue'
import router from './router'
Vue.config.productionTip = false
new Vue({
router,
render: h => h(App)
}).$mount('#app')
- 7、在app.vue下使用router视图
<template>
<div id="app">
<!-- home视图 -->
<router-view></router-view>
</div>
</template>