APICloud AVM框架 封装车牌号输入键盘组件

vant+vue在静态页面实现车牌号软键盘 1.因为是在html静态页面中使用,所以要先引入vant.css、vant.js、vue.js到需要使用的html页面;2.将实现好的车牌软键盘功能放到一个js里面,再将该组件使用js方式引入到html界面,同样该组件的css代码也要引入;2. 当在多个静态页面需要使用该组件时,如何封装成组件?1、如何将选中的车牌号回显在需要显示的表单中? 阅读详情

AVM(Application-View-Model)前端组件化开发模式基于标准Web Components组件化思想,提供包含虚拟DOM和Runtime的编程框架avm.js以及多端统一编译工具,完全兼容Web Components标准,同时兼容Vue和React语法糖编写代码,编译工具将Vue和React相关语法糖编译转换为avm.js代码。

基于标准 Web Components 组件化思想,兼容 Vue / React 语法特性,通过一次编码,分别编译为 App、小程序代码,实现多端开发。

组件功能介绍

封装了车牌号输入键盘,支持燃油汽车、新能源车辆、教练车、挂车、警车5种模式。针对输入的车牌号进行了正则验证。

如有其他类型的车牌需要输入,可在此基础上进行添加即可,主要是控制号牌长度和一些固定的字。

示例展示

组件开发

组件文件

car-num-keyboard.stml

<template>
	<view class={"keyboard-box-bg" + (transition?' keyboard-box-bg-transition':'')}>
		<view style="height:100%;"></view>
		<view class={"keyboard-box" + (transition?' keyboard-box-transition':'')}>
			<view class="header">
				<text @click="cancelLicense">取消</text>
				<text>{licenseType}</text>
				<text @click="successLicense">完成</text>
			</view>
			<view class="license-number">
				<view class="license-number-item" v-for="item in licenseNumber">
					<text>{item}</text>
				</view>
			</view>
			<view class="keyboard">
				<view class="keyboard-item" v-for="item in provinces" data-value={item} @click="setNumber" v-show="!isProvince">
					<text class="keyboard-item-title">{item}</text>
				</view>
				<view class="keyboard-item-key" v-for="item in licenseKey" data-value={item} @click="setNumberKey" v-show="isProvince">
					<text class="keyboard-item-title">{item}</text>
				</view>
				<image class="keyboard-item-ico" src='../../image/key-back.png' mode="widthFix" @click="delLicenseNUmber"></image>
			</view>
		</view>
		<safe-area></safe-area>
	</view>
</template>
<script>
	export default {
		name: 'car-num-keyboard',
		installed(){
			 if(this.props.mode=='new'){
				this.data.licenseNumber=['','','','','','','',''];
				this.data.licenseType='新能源汽车号牌';
				this.data.numberLength = 8;
			}
			else if(this.props.mode=='trailer'){
				this.data.licenseNumber=['','','','','','','挂'];
				this.data.licenseType='挂车号牌';
				this.data.numberLength = 6;
			}
			else if(this.props.mode=='instructional'){
				this.data.licenseNumber=['','','','','','','学'];
				this.data.licenseType='挂车号牌';
				this.data.numberLength = 6;
			}
			else if(this.props.mode=='police'){
				this.data.licenseNumber=['','','','','','','警'];
				this.data.licenseType='警车号牌';
				this.data.numberLength = 6;
			}
			else{
				this.data.licenseNumber = ['', '', '', '', '', '', ''];
				this.data.licenseType='燃油汽车号牌';
				this.data.numberLength = 7;
			}     
			this.data.keyBoards = this.data.licenseKey;
			setTimeout(()=>{
				this.data.transition = true;
			}, 50);
		},
		props:{
			mode:String
		},
		data() {
			return{
				provinces: ['京', '津', '冀', '晋', '蒙', '辽', '吉', '黑', '沪', '苏', '浙', '皖', '闽', '赣', '鲁', '豫', '鄂', '湘', '粤', '桂', '琼', '渝', '川', '贵', '云', '藏', '陕', '甘', '青', '宁', '新'],         
				licenseNumber: [],
				licenseKey: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'],
				keyBoards: [],
				isProvince: false,
				licenseNumberIndex: 0,
				licenseType: '燃油汽车号牌',
				mode:'',
				numberLength:7,
				transition: false
			}
		},
		methods: {
			setNumber(e) {
				if (this.data.licenseNumberIndex == 0) {
					this.data.licenseNumber[0] = e.dataset.value;
					this.data.licenseNumberIndex += 1;
					this.data.isProvince = true;
				}
			},
			setNumberKey(e) {
				if (this.data.licenseNumberIndex < this.data.numberLength) {
					this.data.licenseNumber[this.data.licenseNumberIndex] = e.dataset.value;
					this.data.licenseNumberIndex += 1;
				}
			},
			delLicenseNUmber() {
				this.data.licenseNumberIndex -= 1;
				if (this.data.licenseNumberIndex == 0) {
					this.data.isProvince = false;
				}
				this.data.licenseNumber[this.data.licenseNumberIndex] = '';
			},
			cancelLicense() {
				this.fire('cancal','');
			},
			successLicense() {
				let licenseNumber = this.data.licenseNumber.join('');
				//校验车牌号
				const carReg=/^(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z](([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳使领]))$/;
				if(!carReg.test(licenseNumber)){
				api.confirm({
						title: '提醒',
						msg: '您输入的车牌号可能无效,是否继续使用?',
						buttons: ['确定', '取消']
					}, (ret, err) => {
						// var index = ret.buttonIndex;
						if(ret.buttonIndex==1){					
							this.fire('getNum',{carNum:licenseNumber,mode:this.props.mode});
						}
					});
				}
				else{
					this.fire('getNum',{carNum:licenseNumber,mode:this.props.mode});
				}    
			}
		}
	}
</script>
<style>
	.keyboard-box-bg{
		position: absolute;
		width: 100%;
		height: 100%;
		background-color: rgba(0,0,0,0.1);
		transition-property: background-color;
		transition-duration: 0.3s;
	}
	.keyboard-box-bg-transition{
		background-color: rgba(0,0,0,0.4);
	}
	.keyboard-box{
		align-items: center;
		position: absolute;
		bottom: 0;
		width: 100%;
		background-color: white;
		box-sizing: border-box;
		transform: translateY(100%);
		transition-property: transform;
		transition-duration: 0.3s;
	}
	.keyboard-box-transition{
		transform: translateY(0);
	}
	.header {
		background-color: #dddddd;
		flex-flow: row nowrap;
		justify-content: space-between;
		align-items: center;
		padding: 8px 15px;
		width: 100%;
	}
	.license-number {
		flex-flow: row nowrap;
		justify-content: space-between;
		align-items: center;
		padding: 30px;
		background-color: #ffffff;
		width: 100%;
	}
	.license-number-item {
		width: 10%;
		justify-content: center;
		align-items: center;
		border: 0.5px solid #cccccc;
		border-radius: 5px;
		padding: 5px 0;
		min-height: 35px;
	}
	.keyboard {
		background-color: #ffffff;
		width: 100%;
	}
	.keyboard {
		flex-flow: row wrap;
		align-items: center;
		padding: 0 10px 10px 10px;
	}
	.keyboard-item {
		width: 12.5%;
		justify-content: center;
		align-items: center;
	}
	.keyboard-item-key {
		width: 10%;
		justify-content: center;
		align-items: center;
	}
	.keyboard-item-title {
		border: 0.5px solid #ccc;
		border-radius: 5px;
		padding: 5px 10px;
		margin: 10px 0;
	}
	.keyboard-item-ico {
		width: 30px;
		margin-left: 10px;
	}
</style>

组件使用说明

本组件是基于AVM.js开发的多端组件,通常同时适配Android、iOS、小程序、H5 , 具体支持情况还要看每个组件的说明文档。

首先需要登录开发平台,http://www.apicloud.com。 通过控制平台右上方的模块Store进入,然后选择AVM组件。

 

找到对应模块进入,也可通过搜索栏,通过组件名称关键字进行检索。 

进入模块详情,点击立即下载下载完整的组件安装包。  

组件压缩包的文件目录如下

 

 

 也可通过查看模块文档 来了解模块的具体参数,引用的原生模块,注意事项等。 

 具体在项目中的使用步骤是,第一步将压缩文件中的car-num-keyboard.stml文件拷贝到项目的components目录,通过阅读readme.md 文档和查看demo示例文件 demo-car-num-keyboard.stml在需要开发的stml文件中,引入组件文件,完成页面的开发。

在调用键盘的时候,是通过v-if 进行键盘的显示和隐藏,v-if  false的情况会销毁元素,所以需要传递的动态值,必须要在元素重新创建之前进行赋值操作。如下图所示,先后顺序很重要。

demo-car-num-keyboard.stml 

<template>
	<view class="page">
		<safe-area></safe-area>			
		<view class="car-box" data-mode="oil" @click="openCarNumKeyboard">
			<text class="car-label">燃油汽车号牌</text>
			<text class="car-num">{carNumber}</text>
		</view>
		<view class="car-box" data-mode="new" @click="openCarNumKeyboard">
			<text class="car-label">新能源汽车号牌</text>
			<text class="car-num">{carNumber1}</text>
		</view>
		<view class="car-box" data-mode="trailer" @click="openCarNumKeyboard">
			<text class="car-label">挂车号牌</text>
			<text class="car-num">{carNumber2}</text>
		</view>
		<view class="car-box" data-mode="instructional" @click="openCarNumKeyboard">
			<text class="car-label">教练车号牌</text>
			<text class="car-num">{carNumber3}</text>
		</view>
		<view class="car-box" data-mode="police" @click="openCarNumKeyboard">
			<text class="car-label">警车号牌</text>
			<text class="car-num">{carNumber4}</text>
		</view>
		<car-num-keyboard v-bind:mode={mode} v-if="isSetCarNum" oncancal="claseKeyboard" ongetNum="getCarNum"></car-num-keyboard>
	</view>
</template>
<script>
	import '../../components/car-num-keyboard.stml'
	export default {
		name: 'license-number',
		apiready(){
			
		},
		data() {
			return{
				carNumber:'',
				carNumber1:'',
				carNumber2:'',
				carNumber3:'',
				carNumber4:'',
				isSetCarNum:false,
				mode:''
			}
		},
		methods: {
			openCarNumKeyboard(e){			
				this.data.mode = e.dataset.mode;
				this.data.isSetCarNum = true;//传递动态值 先传值初始化元素
			},
			claseKeyboard(e){
				this.data.isSetCarNum = false;
				this.data.mode = '';
			},
			getCarNum(e){
				this.data.isSetCarNum = false;
				if(e.detail.mode=='new'){
					this.data.carNumber1=e.detail.carNum;
				}
				else if(e.detail.mode=='trailer'){
					this.data.carNumber2=e.detail.carNum;
				}
				else if(e.detail.mode=='instructional'){
					this.data.carNumber3=e.detail.carNum;
				}
				else if(e.detail.mode=='police'){
					this.data.carNumber4=e.detail.carNum;
				}
				else{
					this.data.carNumber = e.detail.carNum;
				}
			}
		}
	}
</script>
<style>
	.page {
		height: 100%;
		background-color: #ffffff;
	}
	.car-box{
		margin: 10px;
		padding-bottom: 5px;
		border-bottom: 0.5px solid #cccccc;
	}
	.car-label{
		font-size: 15px;
		color: #666666;
	}
	.car-num{
		font-size: 20px;
		min-height: 20px;
	}
</style>

如果在AVM组件库中,没有找到实际项目中需要的组件,可以自己尝试封装组件。

这是组件化开发的在线文档地址

 

 

微信小程序车牌号输入组件(虚拟键盘) 本文参考 微信小程序中实现车牌输入功能, 进行了更加细致的键盘划分、删除等功能 文中给出代码都是截图,完整代码在文末贴出。 组件效果 组件功能: 其中虚拟键盘、新能源车牌等功能均可使用 封装成一个组件可以直接 Import 使用 可以给定默认初始值(如 gif 中所示) 父组件通过 change 事件可以监听到车牌号每一次的变化 组件部分样式也可以给定 class 来自定义 可以规范用户输入车牌号,防止乱输引起的数据库错乱 组件思路 根据车牌号的规则,根据不同的第几位生成键盘 例如:第一位为省. 阅读详情

相关推荐

【Vue2 + Vant】LicenseKeyboard 车牌号键盘输入组件

车牌号键盘输入组件

Komorebi_00的博客 797

前端实现车牌号输入框组件封装

uniapp 实现自定义车牌号码选择

qq_42415827的博客 4476

vue 车牌号输入专用键盘

vue 车牌号输入专用键盘, 提供输入框自定义插槽、只读等功能

Vue H5 前端自定义车牌号输入键盘(支持新能源)

这个项目是基于 vue2+vant 写的录入车牌的键盘, 有需要的伙伴可以参考一下;

Hubery96的博客 4297

Isaac Sim 6 利用Replicator实现高效语义分割与实例分割(实践指南5.10)

本文详细介绍了如何利用Isaac Sim 6的Replicator工具高效生成语义分割和实例分割数据集。通过虚拟环境自动标注,效率提升20倍以上,特别适用于农业机器人等计算机视觉项目。文章包含环境配置、场景构建、批量标注技巧及实例分割处理等实战指南,帮助开发者快速掌握合成数据生成技术。

weixin_42526415的博客 266

DFT实训教程笔记2(bibili版本)- Scan synthesis practice

文章目录Scan synthesis practice 本博文是博主记录DFT实训教程的笔记版本,此笔记并没有对所有的知识进行记录,仅仅以自身的认知水平,来记录了一些部分笔记并加上了自己的理解。 Scan synthesis practice How to design scan clock structure? 假设一块chip里面有好几十个clock domain,如果每一个clock domain都用一个scan clock虽然会非常清晰,但是IO数目肯定不够用。 clock group: 1、no

ciscomonkey的博客 9082

vue 移动端车牌号输入键盘组件

组件资源地址:https://download.youkuaiyun.com/download/qq_38886284/87705249?spm=1001.2014.3001.5501需要的小伙伴请到这里下载哟~组件效果: PropsEventsSlots使用示例:

qq_38886284的博客 945

【opencv3 学习记录】第二章 读取显示保存视频

一:捕获视频函数 1.函数:cv2.VideoCapture(参数) 2.参数说明: (1)开启摄像头:参数一般为0,你可以通过设置成 1 或 者其他的来选择别的摄像头。 (2)从文件夹中获取视频:参数为字符串形式的文件路径 3.示例: cap = cv2.VideoCapture(0) #cap:存放参数 二:读取视频函数 1.函数:cap.read() 2.函数说明: (1)cap.read 中cap与捕获视频函数存放函数一致,可以自己命名.括号一般不用填写 (2)ret,f

m0_64448543的博客 3272

vue移动端车牌号输入键盘组件封装(支持新能源车牌和uniapp)

支持点击输入框删除或输入车牌,可直接在uniapp项目中运行,将view标签换为div、并且将rpx单位换成px可在vue项目里运行。

m0_52685922的博客 5963

别再手动巡检了!用Zabbix 5.0 + SNMPv2自动监控华为S系列交换机(附完整命令集)

本文详细介绍了如何利用Zabbix 5.0与SNMPv2实现华为S系列交换机的自动化监控,告别低效的手动巡检。通过配置SNMPv2c安全基线、核心功能启用及Zabbix Server端深度配置,构建7×24小时监控体系,实时预警接口状态、流量波动等关键指标,大幅提升运维效率与故障响应速度。

weixin_30940783的博客 628

Apache Hop集成Spring Boot实战:从配置到执行HPL文件

本文详细介绍了将Apache Hop集成到Spring Boot应用中的完整实战方案。通过配置核心依赖、初始化Hop环境、编写服务层逻辑,实现了在Java应用中程序化执行HPL管道文件,从而将可视化ETL能力无缝嵌入微服务架构,提升数据处理的自动化与可维护性。

blue42的博客 476

vue h5 车牌键盘 输入插件

接下来带大家用一个键盘输入车牌号的的使用 看下效果图 首先在compoents里引入写好的插件 <template> <view class="keyboard-wrap" v-if="kbShow"> <view class="head"> <view class="done" @tap="done"> 完成 <text class="iconfont iconxiala-"></text> </v

S_m_r的博客 4846

用Python实现斗地主游戏(终端版)

马上就要过年了 大家也都放假了吧 过年必不可少的活动 打牌! 今天带大家来写一份斗地主 (又是好多天没怎么更新,忙成狗啊) 那么实现一个斗地主呢 我们肯定要先完善卡牌系统 from collections import Counter import numpy as np import itertools def cmp_to_key(mycmp): 'Convert a cmp= function into a key= function' class K: def _

Miku_wx的博客 9855

vue 车牌号键盘

结合vant框架 效果图 组件页面 <template> <div class="keyboard"> <div class="keytitle"> 请点击选择车牌号 <span>(绿色虚线为新能源)</span> </div> <div class="input-box" @click="clickShowKeyboard"> <li..

weixin_42269163的博客 2684

28、基准剂量法:原理、应用与计算详解

本文详细介绍了基准剂量法(BMD)的原理、在监管机构中的应用以及具体的计算方法。内容涵盖样本量与BMD的关系、主要监管机构如EPA对BMD的应用、BMD的模型选择与数据拟合过程、拟合优度评估、下置信限(BMDL)计算,以及实验设计对BMD结果的影响。同时,还讨论了剂量指标和响应选择的关键问题,为理解和应用基准剂量法提供了全面的参考。

info6的博客 280

【K8S系列】Kubernetes Pod节点CrashLoopBackOff 状态及解决方案详解【已解决】

在 Kubernetes 中,Pod 的状态为 **`CrashLoopBackOff`** 表示某个容器在启动后崩溃,Kubernetes > 尝试重启该容器,但由于持续崩溃,重启的间隔时间逐渐增加。下面将详细介绍 `CrashLoopBackOff > `状态的原因、解决方案及相关命令的输出解释。

颜淡慕潇 8380

vue 自定义键盘组件_Vue2基于mint框架,移动端实现自定义安全键盘

Vue2基于mint框架,移动端实现自定义安全键盘2年前阅读 3331评论 0喜欢 2### 1、新建一个jianpan_test.vue子组件,写入以下代码```车牌前缀 {{item}}export default {computed: {result() {return {showTyper: this.showTyper,carNumber: this.carNu...

weixin_42498006的博客 725

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

[vue]移动端软键盘处理方案

https://www.jianshu.com/p/3c6a08af5203

sxl131415的博客 1332

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

vue2 uniapp加 Search 搜索 或Input 输入框 实现车辆软键盘 app

uniapp 选择车辆组件是一个基于Vue.js的可复用组件,它允许用户输入车牌号并从预定义的车辆列表中选择车辆。组件提供了自动联想和键盘控制功能,以便用户能够快速、方便地选择车辆。

weixin_61662162的博客 662

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

vue H5输入车牌号格子化和自制弹出键盘

【代码】vue H5输入车牌号格子化和自制弹出键盘。

zengdaoqiang的博客 932

手机端车牌号码键盘的vue组件

手机端车牌号码键盘的vue组件源码在 https://github.com/Pinenutss/... 欢迎给星星~~

weixin_33751566的博客 1991

个人封装的vue2.0版本下的车牌号键盘组件以及页面中的运用

个人封装的vue2.0版本下的车牌号键盘组件以及页面中的运用

2301_76370692的博客 784

vue 实现简单的车牌键盘 包括新能源 移动端 电脑端都可以用哦!(使用了elementui) 复制下来直接可以用v-model接收到输入的值

vue 车牌键盘 包括新能源 移动端 电脑端都可以用哦!(使用了elementui) 复制下来直接可以用v-model接收到输入的值 创建新的vue文件 粘贴进去即可在项目中进行引入 直接使用 v-model 进行接收即可

yxxxxxxxxh的博客 3190

vue h5实现车牌号输入框

哈喽,大家好,最近鹏仔开发的项目是学校校内车辆超速方面的统计检测方面的系统,在开发过程中发现有个小功能,就是用户移动端添加车牌号,刚开始想着就一个输入框,提交时正则效验一下格式就行,最后感觉不是很方便,所以就简单自己手写了一个H5车牌号软键盘,由于每天工作比较忙,就没封装成插件了,趁着晚上空闲,给大家整理一下demo,复制即可使用,或者自行封装一个组件调用也可以(代码中一些写法可能过于粗糙,时间有限,任务多,就粗糙写一下吧,反正功能是实现了)。第三、四、五、六位是字母和数字,不包含O;第八位是 电车选项。

鹏仔工作室的秘密基地 1474

封装车牌号码输入组件

【代码】封装车牌号码输入组件。

人间草木 669
上一篇: APICloud AVM框架 开发CRM客户管理系统
下一篇: APICloud AVM 封装验证码输入框组件
白鱼赤乌
博客等级 码龄10年 7粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白鱼赤乌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值