u-code-input结合u-keyboard实现支付密码+数字键盘

u-code-input结合u-keyboard实现支付密码+数字键盘

  • 一、需求描述、框架
    • (一)技术框架
    • (二)需求
  • 二、效果图
  • 三、代码实现
    • (一)u-code-input组件小改造
    • (二)功能实现

一、需求描述、框架

(一)技术框架

  1. uniapp + uView2.0
  2. 采用了u-code-input验证码组件和u-keyboard键盘组件
  3. https://uviewui.com/components/codeInput.html
  4. https://uviewui.com/components/keyboard.html

(二)需求

  1. 实现支付密码的首次输入二次确认
  2. 不使用系统键盘,采用uView的数字键盘。如果使用系统键盘,虽然可以唤起数字类型的键盘,但输入法依然可以切换成中英文和符号输入。
  3. 输入框输入6位数后,按钮改为可用状态,否则为禁用状态

二、效果图

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

三、代码实现

(一)u-code-input组件小改造

  1. 把组件里的所有#ifndef APP-PLUS代码删掉,总共有3处,否则输入框的光标在APP端会不显示(俺也不知道为什么原组件要加上这个限制)
    在这里插入图片描述
  2. u-code-input__item元素,增加命中的class,方便对命中的框框加上命中的class
    在这里插入图片描述
  3. input元素,把原来的
 :focus="focus"

改为

:focus="!disabledKeyboard && focus"

在这里插入图片描述
查看官方文档描述如下:
在这里插入图片描述
虽然官方文档这么写,只需要设置:disabledKeyboard="true"就可以禁止唤起系统键盘,但是实测并不行!!!
原来是组件代码里disabledKeyboard只用在了input的disabled属性上,虽然禁用了input,但禁不住focus=true时的键盘自动唤起啊!

4、 增加input元素clickemit事件,因为input被禁用了,只能以click事件通知父组件输入框什么时候被点击了(点击了即获取焦点,唤起键盘)
在这里插入图片描述在这里插入图片描述
自此,u-code-input改造完毕~

(二)功能实现

1、DOM代码

<template><view><template v-if="firstStatus"><view class="code-box"><view class="code-title">请输入{{pswLength}}位支付密码</view><u-code-inputv-model="firstPsw":maxlength="pswLength":size="39"dot:disabledKeyboard="true":focus="firstPswFocus"@click="focusFirstPsw"></u-code-input><view class="code-desc">说明:支付密码仅用于在线支付时的付钱操作,请勿泄露给其他人。</view><u-button text="下一步" color="#ffd400" class="btn" :disabled="firstBtnDisabeld" @click="nextStep"></u-button></view></template><template v-else><view class="code-box"><view class="code-title">请再次输入,以确认密码</view><u-code-inputv-model="secondPsw":maxlength="pswLength":size="39"dot:disabledKeyboard="true":focus="secondPswFocus"@click="focusSecondPsw"></u-code-input><view class="code-desc">说明:支付密码仅用于在线支付时的付钱操作,请勿泄露给其他人。</view><u-button text="完 成" color="#ffd400" class="btn" :disabled="secondBtnDisabeld"  @click="submit"></u-button></view></template><!--  数字键盘  --><u-keyboard ref="uKeyboard" mode="number" class="keyboard":closeOnClickOverlay="true":tooltip="false":show="keyboardShow"@close="keyboardClose"@cancel="keyboardClose"@change="keyboardChange"@backspace="keyboardBackspace"></u-keyboard></view>
</template>

2、JS代码

<script>export default {data() {return {pswLength: 6,// 首次输入firstStatus: true,firstPsw: '',firstPswFocus: false,firstBtnDisabeld: true,// 确认密码secondPsw: '',secondPswFocus: false,secondBtnDisabeld: true,// 键盘keyboardShow: false,}},created() {this.focusFirstPsw();},watch: {firstPsw(val){// 首次密码输入结束if(val.length == this.pswLength){this.firstBtnDisabeld = false;this.keyboardShow = false;}else{this.firstBtnDisabeld = true;}},secondPsw(val){// 确认密码输入结束if(val.length == this.pswLength){if(this.firstPsw != val){uni.showToast({title: '两次密码不一致,请重新设置',icon: 'none',duration: 2000})setTimeout(()=>{this.resetPsw();}, 1000)}else{this.secondBtnDisabeld = false;this.keyboardShow = false;}}else{this.secondBtnDisabeld = true;}}},methods: {// 首次密码获取焦点focusFirstPsw(){this.firstPswFocus = true;this.keyboardShow = true;},// 下一步nextStep(){this.firstStatus = false;this.focusSecondPsw();},// 确认密码获取焦点focusSecondPsw(){this.secondPswFocus = true;this.keyboardShow = true;},// 提交后端submit(){// 对接接口uni.showToast({title: '设置成功',icon: 'none',duration: 2000})setTimeout(()=>{uni.navigateBack()}, 2000)},// 重新设置密码resetPsw(){this.firstPsw = '';this.firstStatus = true;this.firstBtnDisabeld = true;this.focusFirstPsw();this.secondPsw = '';this.secondBtnDisabeld = true;},/***************键盘****************/// 键盘keyboardClose(){this.keyboardShow = false;this.firstPswFocus = false;this.secondPswFocus = false;},// 按下键盘keyboardChange(val){if(this.firstStatus && this.firstPsw.length<this.pswLength){this.firstPsw += val;}else if(!this.firstStatus && this.secondPsw.length<this.pswLength){this.secondPsw += val;}},// 退格键被点击keyboardBackspace() {if(this.firstStatus){if(this.firstPsw.length) {this.firstPsw = this.firstPsw.substr(0, this.firstPsw.length - 1);}}else{if(this.secondPsw.length) {this.secondPsw = this.secondPsw.substr(0, this.secondPsw.length - 1);}}}}}
</script>

3、CSS

<style lang="scss" scoped>.code-box {padding: 30px;}.code-title {font-size: 22px;font-weight: bold;margin-bottom: 30px;}.code-desc{margin: 25px 0 10px 0;font-size: 14px;color: #888;}.btn {margin-top: 20px;}// 密码输入框::v-deep .u-code-input {justify-content: space-between;.u-code-input__item{border-radius: 4px;.u-code-input__item__dot{background-color: #232426 !important;}}// 命中框的边框颜色.u-code-input__item__active{border-color: #ffd400 !important;}} // 键盘笼罩改为透明::v-deep .keyboard .u-transition {background-color: transparent !important;}
</style>

本篇只是自己的一些想法,只做demo学习使用~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1541782.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

java 异常-Exception

异常的概念 Java 语言中&#xff0c;将程序执行中发生的不正常情况称为“异常”。&#xff08;开发过程中的语法错误和逻辑错误不是异常&#xff09; 执行过程中所发生的异常事件可分为两大类 &#xff08;1&#xff09;Error&#xff08;错误&#xff09;&#xff1a;Java 虚…

[Python]案例驱动最佳入门:股票分析 Python数据分析与可视化实战

在股票市场中&#xff0c;价格波动和投资决策紧密相连。通过数据分析&#xff0c;投资者可以识别市场趋势、价格波动背后的规律&#xff0c;并做出明智的投资决策。Python凭借其强大的数据处理和可视化功能&#xff0c;在金融市场分析中被广泛应用。本文将通过一个假设的股票市…

MySQL基础基础篇 - SQL

01 SQL通用语法 02 SQL分类 03 DDL语句 04 DML语句 05 DQL语句(单表查询) 05_01 学习总览 05_02 基本查询 05_03 条件查询 【应用实例】&#xff1a; 05_04 聚合函数 05_05 分组查询 05_06 排序查询 05_07 分页查询 【boss题目】&#xff1a; 05_08 执行顺序 06 DCL语句 【概…

如何设计出一个比较全面的测试用例

目录 1. 测试用例的基本要素(不需要执行结果) 2. 测试用例的给我们带来的好处 3. 用例编写步骤 4. 设计测试用例的方法 4.1 基于需求进行测试用例的设计 4.2 具体的设计方法 1.等价类 2.边界值 3.判定表&#xff08;因果图&#xff09; 4.正交表法 5.场景设计法 6.错误猜测…

JavaSE——String类

一、字符串构造 注意&#xff1a;String是引用类型&#xff0c;内部并不存储字符串本身。 有三种方式&#xff1a; public class Test1 {public static void main(String[] args) {// 使用常量串构造String s1 "hello java";System.out.println(s1);// 直接newSt…

20240921全国计算机二级Python考试(大头博士计算二级)

一、背景需求&#xff1a; 20240921我在上海应用技术大学44号楼考场参加2024年9月的全国计算机二级&#xff08;Python语言程序设计&#xff09;考试。 时隔多年&#xff0c;再次来到大学校园&#xff0c;恍若隔世 扫码找考场在哪里 考场须知 1、进考场&#xff0c;先刷身份证…

局域网内远程桌面怎么设置?3个远程桌面2个小技巧搞定!

在局域网内设置远程桌面&#xff0c;主要可以通过Windows系统自带的远程桌面功能来实现。 同时也可以借助一些专业的远程桌面软件来增强功能和安全性。 以下是详细的设置步骤及两个小技巧&#xff1a; 一、Windows系统自带远程桌面设置 1.启用远程桌面 在被控制的电脑上&am…

剑指offer JZ54 二叉搜索树的第k个节点

描述&#xff1a; 给定一棵结点数为n 二叉搜索树&#xff0c;请找出其中的第 k 小的TreeNode结点值。 1.返回第k小的节点值即可 2.不能查找的情况&#xff0c;如二叉树为空&#xff0c;则返回-1&#xff0c;或者k大于n等等&#xff0c;也返回-1 3.保证n个节点的值不一样 如…

李宏毅机器学习2023HW12—Reinforcement Learning强化学习

文章目录 TaskBaselineSimpleMedium Baseline—Policy GradientStrong Baseline——Actor-CriticBoss Baseline—Mask Task 实现深度强化学习方法: Policy GradientActor-Critic 环境&#xff1a;月球着陆器 Baseline Simple 定义优势函数(Advantage function)为执行完ac…

C++之Person类

首先设置头文件&#xff0c;将题目中的要求完成。 #include <iostream>using namespace std;class Person { public:Person();Person(string name, int id, string address);~Person();void setPerson(string name, int id, string address);void setName(string name);…

Kotlin编程全攻略:从基础到实战项目的系统学习资料

Kotlin作为一种现代、简洁的编程语言&#xff0c;正逐渐成为Android开发的新宠。本文将为您介绍一套全面的Kotlin学习资料&#xff0c;包括学习大纲、PDF文档、源代码以及配套视频教程&#xff0c;帮助您从Kotlin的基础语法到实战项目开发&#xff0c;系统地提升您的编程技能。…

2024年中国研究生数学建模竞赛B题(华为题目)WLAN组网中网络吞吐量建模一

2024年中国研究生数学建模竞赛B题&#xff08;华为题目&#xff09; WLAN组网中网络吞吐量建模 一、背景 无线局域网&#xff08;Wireless Local Area Network&#xff0c;WLAN&#xff09;是一种无线计算机网络&#xff0c;使用无线信道作为传输介质连接两个或多个设备。WL…

什么情况下会导致索引失效?

什么情况下会导致索引失效&#xff1f; 1. 组合索引非最左前缀2. LIKE查询%开头3. 字符串未加引号4. 不等比较5. 索引列运算6. OR连接查询 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1. 组合索引非最左前缀 描述&#xff1a;在组合索引…

Linux之实战命令02:shred应用实例(三十六)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

python sql中带引号字符串(单双引号)转义处理

描述&#xff1a; 最近在爬取数据保存到数据库时&#xff0c;遇到有引号的字符串插入MySQL报错&#xff1a;1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 转义字符串…

【大模型实战篇】关于Bert的一些实操回顾以及clip-as-service的介绍

最近在整理之前的一些实践工作&#xff0c;一方面是为了笔记记录&#xff0c;另一方面也是自己做一些温故知新&#xff0c;或许对于理解一些现在大模型工作也有助益。 1. 基于bert模型实现中文语句的embedding编码 首先是基于bert模型实现中文语句的embedding编码&#xff0c;…

828华为云征文|Flexus X实例GitLab部署构建流水线-私人一体化代码仓库~

目录 前言Gitlab 环境准备 GitLab部署 拉取GitLab镜像 创建映射目录 运行GitLab容器 修改gitlab.rb配置 开放端口 切换语言 创建项目 添加ssh密钥 克隆代码 CICD 什么是CICD Gitlab中使用CICD 什么是Runner 安装GitLab Runner 获取注册令牌 runner注册 交互…

2024华为杯数学建模竞赛E题

2024年中国研究生数学建模竞赛E题 高速公路应急车道紧急启用模型 高速公路拥堵现象的原因众多&#xff0c;除了交通事故外&#xff0c;最典型的就是部分路段出现瓶颈现象&#xff0c;主要原因是车辆汇聚&#xff0c;而拥堵后又容易蔓延。高速公路一些特定的路段容易形成堵点&…

8-Python基础编程之数据类型操作——字典和集合

Python基础编程之数据类型操作——字典和集合 字典概念定义意义操作增删改查遍历计算和判定 集合概念定义可变集合不可变集合 操作单一集合操作增删查 集合之间操作交集并集差值判定 字典 概念 无序的&#xff0c;可变的键值对的集合 定义 方式一直接定义&#xff1a; per…

Springboot使用ThreadPoolTaskScheduler轻量级多线程定时任务框架

简介&#xff1a; Spring注解定时任务使用不是很灵活&#xff0c;如果想要灵活的配置定时任务&#xff0c;可以使用xxl-job 或者 quartz等定时任务框架&#xff0c;但是过于繁琐&#xff0c;可能成本较大。所以可以使用ThreadPoolTaskScheduler来灵活处理定时任务 ThreadPoolT…