mpvue+ weapp微信小程序

心已赠人 2024-04-19 15:27 173阅读 0赞

1.检查版本

查看node和npm是否安装成功
  1. node -v
  2. npm-v

版本查看

查看vue-cli版本

  1. vue -v

在这里插入图片描述

2.创建mpvue项目

  1. vue init mpvue/mpvue-quickstart my-project

3.安装van-weapp组件库

注意:目前vant已经支持了npm的方式,但是由于node_modules目录下的代码是不会被编进dist目录下的,所以暂时只能用git方式使用

  1. 克隆项目:git clone https://github.com/youzan/vant-weapp.git
  2. 将dist目录下的所有文件复制到你项目的/static/vant/目录下
    在这里插入图片描述

4.如何引用van-weapp组件

使用van-weapp组件,我们只需要在对应页面的main.json文件中填入以下代码即可:
在这里插入图片描述

5.配置axios

  1. axios.defaults.timeout = 50000;
  2. axios.defaults.headers.post[ 'Content-Type' ] = 'application/x-www-form-urlencoded;charset=UTF-8';
  3. axios.defaults.adapter = function (config) {
  4. return new Promise((resolve, reject) => {
  5. let data = config.method === 'get' ? config.params : config.data;
  6. wx.request({
  7. url:config.url,
  8. method:config.method,
  9. data:data,
  10. success:(res)=>{ return resolve(res)},
  11. fail:(err)=>{ return reject(err)}
  12. })
  13. })
  14. }
  15. // axios 拦截器
  16. function Instance () {
  17. //请求拦截器
  18. axios.interceptors.request.use(function ( request ) {
  19. // request.headers.token = 'token=11124654654687';
  20. // console.log(request) //请求成功
  21. return request
  22. }, function ( error ) {
  23. // console.log(error); //请求失败
  24. return Promise.reject(error);
  25. });
  26. // 添加响应拦截器
  27. axios.interceptors.response.use(function ( response ) {
  28. console.log(response.data.data) //响应成功
  29. return response;
  30. }, function ( error ) {
  31. // console.log(error); //响应失败
  32. return Promise.reject(error);
  33. });
  34. }
  35. Instance()
  36. function get (url,params) {
  37. return axios({
  38. method:'get',
  39. url:url,
  40. params:params
  41. })
  42. }
  43. function post (url,params) {
  44. return axios({
  45. method:'post',
  46. url:url,
  47. data:params
  48. })
  49. }

6.Vuex配置

  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. Vue.use(Vuex);
  4. const store = new Vuex.Store({
  5. state:{
  6. //后台接口访问地址相同的部分,例如:http://localhost:8080
  7. baseUrl:''
  8. }
  9. })
  10. export default store;

7.编写登录页面

在这里插入图片描述
注意:文件名称自定义,根据个人习惯自定义
登录模块:
index.vue

  1. <template>
  2. <div>
  3. <!--登录-->
  4. <van-row :span="24">
  5. <view class="banner">
  6. <div style="margin: 20rpx 35rpx;">
  7. <van-field
  8. placeholder="请输入手机号"
  9. label="手机号"
  10. left-icon="phone"
  11. type="number"
  12. clearable
  13. border="true"
  14. :error="telephoneError"
  15. @blur="inputInfoTelephone"
  16. @focus="focusInfoTelephone"
  17. />
  18. </div>
  19. <div style="margin: 20rpx 35rpx;">
  20. <van-field
  21. placeholder="请输入密码"
  22. label="密码"
  23. left-icon="friends"
  24. clearable
  25. border="true"
  26. :error="passwordError"
  27. password="true"
  28. @blur="inputInfoPassword"
  29. @focus="focusInfoPassword"
  30. />
  31. </div>
  32. <div style="margin: 120rpx 35rpx;text-align: center">
  33. <van-button round color="#FFBC1A" @click="loginInfo">登录</van-button>
  34. </div>
  35. </view>
  36. </van-row>
  37. <van-toast id="van-toast" />
  38. </div>
  39. </template>
  40. <script>
  41. // 引入css样式
  42. import login from '../../pages/login/login.css'
  43. import axios from 'axios'
  44. import Toast from '../../../static/vant/toast/toast';
  45. import store from '../../vuex/store'
  46. export default {
  47. name: "login",
  48. data(){
  49. return{
  50. canIUse:true,
  51. telephoneError:false,
  52. passwordError:false,
  53. telephone:'',
  54. password:'',
  55. //请求接口
  56. loginInfoUrl:'',
  57. }
  58. },
  59. computed:{
  60. url(){
  61. return store.state.baseUrl
  62. }
  63. },
  64. methods:{
  65. //登录
  66. loginInfo(){
  67. let that = this;
  68. if(that.telephone == ''){
  69. that.telephoneError = true;
  70. return false;
  71. }
  72. if(that.password == ''){
  73. that.passwordError = true;
  74. return false;
  75. }
  76. var user = {
  77. username:'admin',
  78. account:that.telephone
  79. };
  80. axios.post(
  81. that.url + that.loginInfoUrl,
  82. user
  83. ).then(response=>{
  84. if(response.data.code == 200) {
  85. //用户信息存储到本地缓存
  86. wx.setStorageSync("user",response.data.data);//用户
  87. //跳转页面
  88. const url = '../market/main';
  89. wx.switchTab({ url: url})
  90. } else if(response.data.code == 206) {
  91. Toast.fail('用户名或密码错误');
  92. return false;
  93. }
  94. })
  95. },
  96. //监听手机号输入框内容发生变化
  97. inputInfoTelephone(val){
  98. this.telephone = val.mp.detail.value
  99. },
  100. //监听密码输入框内容发生变化
  101. inputInfoPassword(val){
  102. this.password = val.mp.detail.value
  103. },
  104. //手机号输入框聚焦
  105. focusInfoTelephone(){
  106. this.telephoneError = false;
  107. },
  108. //密码输入框聚焦
  109. focusInfoPassword(){
  110. this.passwordError = false;
  111. }
  112. },
  113. }
  114. </script>
  115. <style>
  116. .van-cell{
  117. /*border: 1rpx solid #eaeaea;*/
  118. border-radius: 50rpx !important;
  119. border-bottom: 0rpx !important;
  120. }
  121. .banner{
  122. position: absolute;
  123. top:0px;
  124. bottom: 0px;
  125. width: 100%;
  126. padding-top: 450rpx;
  127. background-image: url("http://hbimg.huabanimg.com/8d210c31f9a0c7ed0c15e3a1c92e83425314b52119b7bf-HjpZds_fw658");
  128. /*background-position-x: center;*/
  129. background-size: cover;
  130. }
  131. .van-cell:after{
  132. border-bottom: 0rpx !important;
  133. }
  134. .van-button--normal{
  135. padding: 0rpx 300rpx !important;
  136. }
  137. .van-icon{
  138. margin-right: 10rpx !important;
  139. }
  140. .van-cell__title{
  141. min-width: 60rpx !important;
  142. max-width: 100rpx !important;
  143. }
  144. .van-toast--icon{
  145. width: 205rpx !important;
  146. }
  147. </style>

在这里插入图片描述
在这里插入图片描述
main.json

  1. {
  2. "navigationBarTitleText": "授权登录",
  3. "usingComponents": {
  4. "van-row": "../../static/vant/row/index",
  5. "van-col": "../../static/vant/col/index",
  6. "van-field": "../../static/vant/field/index",
  7. "van-cell-group": "../../static/vant/cell-group/index",
  8. "van-button": "../../static/vant/button/index",
  9. "van-toast": "../../static/vant/toast/index"
  10. }
  11. }

mian.js

  1. import Vue from 'vue'
  2. import App from './index'
  3. const app = new Vue(App)
  4. app.$mount()

login.css

  1. .header {
  2. margin: 90rpx 0 90rpx 50rpx;
  3. border-bottom: 1px solid #ccc;
  4. text-align: center;
  5. width: 650rpx;
  6. height: 300rpx;
  7. line-height: 450rpx;
  8. }
  9. .header image {
  10. width: 160rpx;
  11. height: 140rpx;
  12. }
  13. .content {
  14. margin-left: 50rpx;
  15. margin-bottom: 90rpx;
  16. }
  17. .content text {
  18. display: block;
  19. color: #9d9d9d;
  20. margin-top: 40rpx;
  21. }
  22. .bottom {
  23. border-radius: 80rpx;
  24. margin: 70rpx 50rpx;
  25. font-size: 30rpx;
  26. }
  27. .imageHeader {
  28. width: 100rpx;
  29. height: 92rpx;
  30. text-align: center;
  31. /*background-color: #FFBC1A;*/
  32. border-radius: 50%;
  33. border: 2rpx solid #FFBC1A;
  34. padding-top: 8rpx;
  35. margin-left: 45%;
  36. }
  37. .imageHeader image {
  38. width: 80rpx;
  39. height: 80rpx;
  40. }
  41. .imageButton{
  42. padding: 0px;
  43. line-height:0px;
  44. border:0px;
  45. background-color:transparent;
  46. border: 0px;
  47. }
  48. .imageButton::after{
  49. border: 0px;
  50. }

需要完整代码:请留言…

发表评论

表情:
评论列表 (有 0 条评论,173人围观)

还没有评论,来说两句吧...

相关阅读