微信小程序记住密码密码眼睛,开箱即用

WXML


密码输入框“眼睛”

  • 通过switch切换open的值(true/false)
switch() {
  this.setData({
     open: !this.data.open
  })
},
data: {
    open: false, // ,密码眼睛---默认不显示密码
    focus:false, // ,密码眼睛---是否获取焦点
},
  • password = "{{!open}}"  同时open也控制input的password属性是否开启
<input type="text" password="{{!open}}" />
  • 通过三目运算符动态切换“眼睛”的显示(注意图片引用路径)
<image 
    src="{{open?'../../images/open_eye.png':'../../images/no_eye.png'}}" 
    class="eye" 
/>

输入框值双向绑定

  • input标签中添加bindinput监听输入框事件
<input 
    placeholder-style="color:#000000" 
    bindinput="usernameInput" 
    placeholder="请输入手机号/邮箱" 
/>
  • 在data中声明要监听的属性
 data: {
    username: "", // 用户名
  },
  • 在input的值中绑定声明的值
<input 
    placeholder-style="color:#000000" 
    bindinput="usernameInput" 
    value="{{username}}" 
    placeholder="请输入手机号/邮箱" 
/>
  • 通过方法进行输入框内容双向绑定
//获取输入框内容
  usernameInput(e) {
    this.setData({
      username: e.detail.value
    })
  },

完整代码

<!--pages/login/login.wxml-->
<view class="content">
  <view class="winmet">
    XXXX
  </view>

  <!-- 图标开始 -->
  <view class="logo">
    <image src="/images/logo.png" mode="#" />
  </view>
  <!-- 图标结束 -->

  <view class="inputBox">
    <!-- 输入框s -->
    <view>
      <!-- 账号 -->
      <view class="inputBorder">
        <input class="weui-input" placeholder-style="color:#000000" bindinput="usernameInput" value="{{username}}" placeholder="请输入手机号/邮箱" />
      </view>
      <!-- 密码 -->
      <view class="inputBorder m-t-30">
        <view class="flex_s_b">
          <input placeholder-style="color:#000"  bindinput="passwordInput" 
          value="{{password}}" 
          type="text" password="{{!open}}"
          bindfocus="focus" bindblur="blur"
          placeholder="请输入密码" />
          // 通过switch切换open的值(true/false),
          //  password="{{!open}}" 同时open也控制input的password属性是否开启
          // 通过三目运算符动态切换“眼睛”的显示
          <image catchtap="switch" src="{{open?'../../images/open_eye.png':'../../images/no_eye.png'}}" class="eye"  />
          <view style="border: 1rpx solid rgb(179, 173, 173);">
          </view>
          
          <view class="f-c-d p-l-35" bind:tap="goForgetPwd">
            忘记密码
          </view>
        </view>
      </view>
      <!-- 密码 -->
    </view>
    <!-- 输入框e -->

    <!-- 记住用户名、密码s -->
    <view class="flex_s_b p-20 m-t-20">
      <view>
        <switch type="checkbox" checked="{{switchChecked}}" bindswitcheck="switchChecked" bindchange="bindswitchchange" style="transform:scale(0.8)" />记住密码
      </view>
      <view class="" bind:tap="register">注册</view>
    </view>
    <!-- 记住用户名、密码e -->

    <!-- 登录按钮s -->
    <view class="loginBtn m-t-20" open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo" bindtap="login">
      登录
    </view>
    <!-- 登录按钮e -->
  </view>

  <view class="info">
    <view>
      登录/注册表示您同意
      <text style="color: #3455A2;">《用户协议》</text>
      和
      <text style="color: #3455A2;">《隐私政策》</text>
    </view>
  </view>
</view>

JS


// pages/login/login.js
const {
  fetch,
} = require("../../utils/request")
const md5 = require('js-md5')
Page({
  /**
   * 页面的初始数据
   */
  data: {
    checkedValue: false, //选中按钮
    username: "", // 用户名
    password: "", // 密码
    open: false, // ,密码眼睛---默认不显示密码
    focus: false, // ,密码眼睛---是否获取焦点
  },
  // 密码眼睛--s
  // 眼睛点击事件 catch阻止事件冒泡 
  switch() {
    this.setData({
      open: !this.data.open
    })
  },
  // 输入框聚焦时触发
  focus(){
    this.setData({
      focus:true
    })
  },
  // 输入框失去焦点时触发
  blur(){
    this.setData({
      focus:false
    })
  },
  // 密码眼睛--e
  //获取输入框内容
  usernameInput(e) {
    this.setData({
      username: e.detail.value
    })
  },
  passwordInput(e) {
    this.setData({
      password: e.detail.value
    })
  },

  // 登录按钮
  login() {
    if (this.data.username == "" && this.data.password !== "") {
      wx.showToast({
        icon: 'error',
        title: '账号不能为空',
      })
    } else if (this.data.username !== "" && this.data.password == "") {
      wx.showToast({
        icon: 'error',
        title: '密码不能为空',
      })
    } else if (this.data.username == "" && this.data.password == "") {
      wx.showToast({
        icon: 'error',
        title: '请输入账号密码',
      })
    } else {
      wx.showToast({
        title: '登录中',
        icon: 'loading',
        duration: 5000
      })
      var options = {
        service_code: "WINMET_APP_LOGIN_SYSTEM",
        params: {
          service_code: "WINMET_APP_LOGIN_SYSTEM",
          username: this.data.username,
          password: md5("fund_manager" + this.data.password),
          token: undefined,
          user_id: undefined,
        },
      };
      fetch(options).then((res) => {
        var that = this;
        var checkedValue = that.data.switchChecked;
        if(checkedValue == true) {
          wx.setStorageSync('username', this.data.username)
          wx.setStorageSync('password', this.data.password)
          wx.setStorageSync('checkedValue', that.data.switchChecked)
        } else {
          wx.setStorageSync('username', "")
          wx.setStorageSync('password', "")
          wx.setStorageSync('checkedValue', false)
        }
        if (res.statusCode == 200 && res.cookies != "") {
          console.log('登录结果---', res)
          wx.switchTab({
            url: '/pages/warn/warn',
          })
          const tokenInfo = res.data.results // 登录后返回的token信息
          wx.setStorage({
            key: "userData",
            data: JSON.stringify(tokenInfo)
          })
        } else {
          wx.showToast({
            icon: 'error',
            title: '账号或密码错误',
          })
        }
      });
    }
  },

  onChange(event) {
    this.setData({
      checked: event.detail,
    });
  },

  // 注册
  register() {
    wx.navigateTo({
      url: '/packageC/pages/register/register',
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.setData({
      username: wx.getStorageSync("username"),
      password: wx.getStorageSync("password"),
      switchChecked: wx.getStorageSync('checkedValue')
    })
  },
  //判断是否要记住密码
  bindswitchchange: function (event) {
    //得到值
    var checkedValue = event.detail.value;
    // console.log(checkedValue);
    var _this = this;
    if (checkedValue == true) {
      _this.setData({
        switchChecked: true,
      })
      console.log(checkedValue);
    } else if (checkedValue == false) {
      _this.setData({
        switchChecked: false
      })
    }
  },
  // 忘记密码
  goForgetPwd() {
    wx.navigateTo({
      url: '/packageC/pages/forgetPwd/forgetPwd',
    })
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})

WXSS


在WXML中有些类名是定义在app.wxss中的,但是皆为见名知意型,

比如flex_s_b 就是

display: flex
justify-content: space-between

m-t-30就是

margin-top: 30rpx

/* pages/login/login.wxss */
.content {
  height: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: space-between;
  box-sizing: border-box;
}

/* "胜遇评级" */
.winmet{
  margin-top: 250rpx;
  font-size: 40rpx;
}

/* 胜遇图标 */
.logo{
  margin-top: 70rpx;
}
/* 图标图片 */
.logo image{
  width: 200rpx;
  height: 130rpx;
}
/* 账号密码输入总框 */
.inputBox{
  margin-top: 70rpx;
}

/* 显示隐藏密码--s */
.eye {
  width: 40rpx;
  height: 40rpx;
  margin: 5rpx 20rpx 0rpx 0rpx;
  flex-shrink: 0;
}
/* 显示隐藏密码--e */


/* 输入框边框 */
.inputBorder{
  border: 1px solid rgb(218, 218, 228);
  background-color: rgb(4, 69, 165, 0.1);
  border-radius: 10rpx;
  padding: 20rpx 40rpx;
}
/* 登录按钮 */
.loginBtn{
  background-color: #3455A2;
  text-align: center;
  padding: 10rpx;
  border-radius: 30rpx;
  color: aliceblue;
  font-weight: 600;
}

/* 用户协议和隐私政策 */
.info{
  position: absolute;
  bottom: 70rpx;
  padding: 0rpx 40rpx;
  font-size: 28rpx;
  color: rgb(204, 203, 201);
}

/* 记住密码复选框---选中---样式 */
.wx-checkbox-input.wx-checkbox-input-checked{
  color: #3455A2;
}

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是微信小程序开发记住密码的代码示例,包括了密码加密和解密的方法: 1. 在 app.js 中设置全局变量: ```javascript App({ globalData: { // 用户信息 userInfo: null, // 用户登录状态 isLogin: false, // 用户名和密码 username: '', password: '', // 是否记住密码 rememberPassword: false } }) ``` 2. 在登录页面的 wxml 文件中添加复选框和绑定事件: ```html <checkbox class="remember" value="{{rememberPassword}}" bindchange="rememberPasswordChange">记住密码</checkbox> ``` 3. 在登录页面的 js 文件中添加记住密码事件: ```javascript // 记住密码事件 rememberPasswordChange: function (e) { var rememberPassword = e.detail.value.length > 0; this.setData({ rememberPassword: rememberPassword }) if (!rememberPassword) { // 如果取消记住密码,则清除密码 this.setData({ password: '' }) } }, ``` 4. 在登录页面的 js 文件中添加密码加密和解密方法: ```javascript // 加密密码 encryptPassword: function (password) { return password; }, // 解密密码 decryptPassword: function (password) { return password; }, ``` 5. 在登录页面的 js 文件中添加登录事件,如果记住密码,则将密码加密后存储在本地: ```javascript // 登录事件 login: function () { var that = this; // 加载中提示 wx.showLoading({ title: '登录中...', }) // 模拟登录 setTimeout(function () { wx.hideLoading(); var username = that.data.username; var password = that.data.password; if (username == 'admin' && password == '123456') { // 登录成功 var rememberPassword = that.data.rememberPassword; if (rememberPassword) { // 如果记住密码,则将密码加密后存储在本地 wx.setStorageSync('password', that.encryptPassword(password)); } else { // 如果不记住密码,则清除密码 wx.removeStorageSync('password'); } // 更新全局变量 getApp().globalData.isLogin = true; getApp().globalData.username = username; getApp().globalData.password = password; // 跳转到首页 wx.switchTab({ url: '../index/index', }) } else { // 登录失败,弹出提示 wx.showToast({ title: '用户名或密码错误', icon: 'none' }) } }, 2000) }, ``` 6. 在登录页面的 onLoad 方法中从本地存储中读取密码,并解密后赋值给密码输入框: ```javascript // 从本地存储中读取密码 var password = wx.getStorageSync('password'); if (password) { // 如果有存储密码,则将密码解密后赋值给密码输入框 password = that.decryptPassword(password); that.setData({ password: password, rememberPassword: true }) } ``` 这样就可以实现微信小程序记住密码功能了。需要注意的是,密码在本地存储时需要加密,以保证安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值