前端车牌键盘组件
父组件
// 粘贴回去后格式化一下<div class="input-plate-wrap"><div v-for="(item, index) in keyBoard.kbLenght" :key="index"><divclass="plate-item"v-if="index != keyBoard.kbLenght - 1":class="{ active: index === keyBoard.indexNum }"@click.stop="carPlateInput(index)">{{ keyBoard.value[index] || "" }}</div><!-- 新能源多一位车牌 --><divclass="plate-item"v-if="index == keyBoard.kbLenght - 1":class="{ active: index === keyBoard.indexNum }"@click.stop="carPlateInput(index)"><!-- 如果没有车牌号显示新能源标 --><div>{{ keyBoard.value[index] }}</div><divv-if="isNull(keyBoard.value[index])"style="color: #1aad19"><!-- <text class="iconfont icondiandongche">新</text> -->新</div></div></div></div><keyboard:kbShow="keyBoard.isShow":kbIndex="keyBoard.indexNum":kbType="keyBoard.kbLenght"@childValue="keyboardValue"@childClose="keyboardClose"@childIndex="keyboardIndex"@childDel="keyboardDel"></keyboard>// 记得引入组件// 这个是键盘组件
import keyboard from "@/components/.....";// 这是mixin
import carKeyBoardMixins from "@/components/......";components: {keyboard,},mixins: [carKeyBoardMixins],// css 样式.jd-input-plate-wrap {display: flex;margin-top: 30upx;.plate-item {position: relative;display: flex;flex: 1;margin: 0 3px;height: 32px;width: 25px;// font-size: @fontSize + 6upx;border: 1px solid #173574;align-items: center;justify-content: center;border-radius: 6px;// background-color: #ffffff;&.active {border: 1px solid #3e6ed4;// background-color: #eafff6;}&:nth-child(2) {margin-right: 30px;&:after {display: block;position: absolute;content: '';height: 10px;width: 10px;right: -26px;border-radius: 12px;background-color: #c3c2cb;}}}.point {display: flex;width: 14px;height: 14px;border-radius: 14px;margin-top: 40px;background-color: #c3c2cb;}// .icondiandongche {// color: @color-green;// font-size: @fontSize + 20upx;// }
}
mixin中键盘的方法 (注:复制后格式化一下)
<script>
import Vue from "vue";export default {data() {return {// 键盘字段keyBoard: {//键盘isShow: false,isShowModel: false,kbLenght: 8, //车牌输入框长度indexNum: " ", //点击车牌设置焦点的下标value: [], //键盘值},carPlateColor: 1,switchover: true,};},// created(){// this.carPlateInit()// },methods: {// 清空键盘输入值resetClick() {this.keyBoard.value = [];// this.carPlateInit()},// 搜索处理键盘输入值processingData() {if (this.switchover == false) {var str = "";for (let i = 0; i < this.keyBoard.value.length; i++) {str += this.keyBoard.value[i];}this.queryParams.plateNumber = str;this.keyBoard.isShow = false;}},//动态添加对象setObject(obj, key, value) {Vue.set(obj, key, value);},// 判断类型方法isNull(res) {if (res == undefined ||res == null ||res == "null" ||res === "" ||res == "undefined" ||JSON.stringify(res) === "{}") {return true;} else {return false;}},//删除键盘值keyboardDel(res) {this.setObject(this.keyBoard.value, res, "");if (this.isNull(this.keyBoard.value[7])) {this.carPlateColor = 1; //蓝色车牌}},// 初始化// carPlateInit() {// var defaultCarPlate = $APPCONFIG.carPlateHeadWord;// //默认车牌号每个为空// for (var i = 0; i < this.keyBoard.kbLenght; i++) {// this.keyBoard.value.push("");// }// //键盘默认省份// for (var i = 0; i < defaultCarPlate.length; i++) {// this.keyBoard.value[i] = defaultCarPlate[i];// }// },//车牌焦点下标keyboardIndex(res) {this.keyBoard.indexNum = res;},//键盘点击返回的值keyboardValue(res) {this.setObject(this.keyBoard.value, this.keyBoard.indexNum, res);if (!this.isNull(this.keyBoard.value[7])) {this.carPlateColor = 2; //绿色车牌}},//关闭keyboardClose(res) {this.keyBoard.isShow = res;this.keyBoard.isShowModel = res;this.keyBoard.indexNum = ""; //关闭键盘键盘高亮取消},carPlateInput(res) {this.keyBoard.isShow = true; //显示键盘this.keyBoard.indexNum = res; //设置键盘焦点下标},carPlateInputModel(res) {this.keyBoard.isShowModel = true; //显示键盘this.keyBoard.indexNum = res; //设置键盘焦点下标},},
};
</script><style></style>
键盘子组件 (注:复制后格式化一下)
<template><div class="keyboard-wrap" v-if="kbShow" @click.stop><div class="head"><div class="done" @click="done">完成<text class="iconfont iconxiala-"></text></div></div><div class="key-list"><!-- {{ keyboardList }} --><divclass="colspan"v-if="index === currentIndex"v-for="(item, index) in keyboardList":key="index"><divclass="uni-flex"v-for="(secondItem, secondIndex) in item":key="secondIndex"><divclass="item":class="{ disable: thridItem.split(',')[1] == 'f' }"v-for="(thridItem, thridIndex) in secondItem":key="thridIndex"@click.stop="touchstartActive(thridItem)"><div class="content">{{ thridItem.split(",")[0] }}</div></div></div></div><!-- 删除键 --><div class="item del-item" @click.stop="del"><!-- <div class="content">X</div> --><i class="el-icon-delete"></i></div></div></div>
</template>
<script>
import carKeyBoardMixins from "@/components/mixins/keyword.vue";
export default {data() {return {keyboardList: [], //键盘类型kblength: "",currentIndex: 0, //键盘区当前下标};},mixins: [carKeyBoardMixins],props: ["kbIndex", "kbType", "kbShow"],mounted() {document.addEventListener("click", this.bodyCloseMenus);this.keyboardList = [[["陕", "京", "粤", "津", "晋", "冀", "蒙", "辽", "吉", "黑"],["苏", "浙", "皖", "闽", "赣", "鲁", "鄂", "沪", "宁"],["桂", "琼", "川", "贵", "云", "藏", "新", "渝"],["豫", "湘", "青", "甘"],],[["1,f", "2,f", "3,f", "4,f", "5,f", "6,f", "7,f", "8,f", "9,f", "0,f"],["Q", "W", "E", "R", "T", "Y", "U", "I,f", "O", "P"],["A", "S", "D", "F", "G", "H", "J", "K", "L", ""],["Z", "X", "C", "V", "B", "N", "M", "", "", ""],],[["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"],["Q", "W", "E", "R", "T", "Y", "U", "I,f", "O,f", "P"],["A", "S", "D", "F", "G", "H", "J", "K", "L", ""],["Z", "X", "C", "V", "B", "N", "M", "", "", ""],],[["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"],["Q", "W", "E", "R", "T", "Y", "U", "I,f", "O,f", "P"],["A", "S", "D", "F", "G", "H", "J", "K", "L", ""],["Z", "X", "C", "V", "B", "N", "M", "", "", ""],],[["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"],["Q", "W", "E", "R", "T", "Y", "U", "I,f", "O,f", "P"],["A", "S", "D", "F", "G", "H", "J", "K", "L", ""],["Z", "X", "C", "V", "B", "N", "M", "", "", ""],],[["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"],["Q", "W", "E", "R", "T", "Y", "U", "I,f", "O,f", "P"],["A", "S", "D", "F", "G", "H", "J", "K", "L", ""],["Z", "X", "C", "V", "B", "N", "M", "", "", ""],],[["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"],["Q", "W", "E", "R", "T", "Y", "U", "I,f", "O,f", "P"],["A", "S", "D", "F", "G", "H", "J", "K", "L", "警"],["Z", "X", "C", "V", "B", "N", "M", "学", "", ""],],[["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"],["Q", "W", "E", "R", "T", "Y", "U", "I,f", "O,f", "P"],["A", "S", "D", "F", "G", "H", "J", "K", "L", ""],["Z", "X", "C", "V", "B", "N", "M", "黄", "", ""],],];},watch: {//获取键盘区域下标kbIndex: {immediate: true,handler(res) {//转为数字类型,防止数据类型不能匹配this.currentIndex = Number(res);},},},beforeDestroy() {document.removeEventListener("click", this.bodyCloseMenus);},methods: {bodyCloseMenus() {if (this.kbShow == true) {this.$emit("childClose", "");}},done() {this.kbShow = true;this.$emit("childClose", "");},//删除del() {this.$emit("childDel", this.currentIndex);if (this.currentIndex == 0) {return;}this.currentIndex--;this.$emit("childIndex", this.currentIndex);},//点击事件touchstartActive(res) {//键盘包含f字符不执行if (res.split(",")[1] == "f" || res == "") {return;}this.$emit("childValue", res);if (this.currentIndex == this.kbType - 1) {return;}this.currentIndex++;this.$emit("childIndex", this.currentIndex);},},
};
</script><style lang="less">
.keyboard-wrap {position: absolute;left: 0;top: 40px;width: 520px;z-index: 999;box-shadow: 0 0 30px rgba(0, 0, 0, 0.1);box-sizing: border-box;background: #284e9d;padding: 0 15px;// 安全区// padding-bottom: constant(safe-area-inset-bottom); /* 兼容 iOS < 11.2 */// padding-bottom: env(safe-area-inset-bottom); /* 兼容 iOS >= 11.2 */.head {overflow: hidden;background-color: #284e9d;.done {cursor: pointer;float: right;width: 60px;height: 45px;line-height: 45px;text-align: center;color: #fff;font-size: 18px;.iconfont {margin-left: 6px;// font-size: 24px;}}}.key-list {position: relative;padding: 4px 0;}.uni-flex {display: flex;justify-content: center;}/*iphone键盘*/.item {width: 50px;height: 50px;line-height: 50px;margin: 6px 0;text-align: center;box-sizing: content-box;color: #fff;.content {// line-height: 90px;background: rgb(6 30 71);font-size: 18px;border-radius: 4px;margin: 0 5px;box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1);}&.disable .content {background-color: rgb(6 30 71);color: #616668;}&.item:not(.disable):active .content {background-color: #317dfb;color: #fff;}}.item:hover {cursor: pointer;}.del-item {position: absolute;width: 40px;height: 50px;line-height: 50px;border-radius: 4px;top: 75%;right: 25px;background: rgb(6 30 71);font-size: 18px;.iconfont {line-height: 1;// font-size: 50px;}}
}
</style>
相关文章:
前端车牌键盘组件
父组件 // 粘贴回去后格式化一下<div class"input-plate-wrap"><div v-for"(item, index) in keyBoard.kbLenght" :key"index"><divclass"plate-item"v-if"index ! keyBoard.kbLenght - 1":class"{ ac…...
什么是脚本文件,脚本的执行,脚本格式等
1.脚本文件是什么? 脚本文件是包含一系列计算机命令的文本文件,通常用于自动化任务、自定义功能或执行特定操作。这些命令通常按照一定的编程语法和语义规则编写,以便计算机能够逐行解释和执行它们。脚本文件通常包含了一组操作,…...
react 实战- 玩转 react 全家桶(进阶)学习
一个命令是怎么运行起来的? Shell运行一个命令,实际上是运行一个脚本 环境变量 装了node以后,node的路径,就被注册到了环境变量里. 一个js的东西,可以注册? bin Webpack配置 构建 import A from A , const Arequire(A) 为什么可以这么写?为哈都行?本质上,是构建工…...
【Python】取火柴小游戏(八什博弈)
# 火柴游戏:Python编程示例 当我们想要玩一个简单而有趣的游戏,同时又想锻炼自己的编程技能时,一个经典的选择就是火柴游戏。这个游戏的规则很简单:有一堆火柴,每次可以拿走1到6根,两名玩家轮流取火柴&…...
【Redis安装】Ubuntu和Centos
此处安装的是 Redis5 在 Ubuntu 系统上 切换到 root 用户下,su 命令切换使用 apt 可以搜索 redis 相关软件包 apt search redis使用 apt 命令安装 redis apt install redis手动修改配置文件 redis.conf cd /etc/redis/ vim redis.conf修改以下两处 重启服务器 …...
【Java】ArrayList集合使用
ArrayList集合常见方法 方法名称说明public boolean add(E e)将元素插入到指定位置的arraylist中,返回值:返回boolean类型public E remove(int index)删除 arraylist里的单个元素,返回值:返回删除之前的元素public E set(int inde…...
【proteus】8086仿真/汇编:创建项目并添加汇编代码文件
1.创建好新项目 2.点击source code 弹出VSM 3. 4.注意两个都不勾选 可以看到schematic有原理图出现 5. 再次点击source code 6.project/project settings,取消勾选embed 7. add 8.输入文件名保存后: 注意:proteus不用写dos的相关语句 。...
如何给Github上的开源项目提交PR?
前言 对于一个热爱开源的程序员而言,学会给GitHub上的开源项目提交PR这是迈出开源的第一步。今天我们就来说说如何向GitHub的开源项目提交PR,当然你提交的PR可以是一个项目的需求迭代、也可以是一个Bug修复、再或者是一些内容文本翻译等等,并…...
【Java】小计 TCP UDP的区别
面向连接 TCP面向连接,需要连接,而UDP不需要建立连接 可靠性 TCP协议通过确认应答、连接管理、流量控制、拥塞控制来确保可靠性传输;UDP不保证可靠性传输。 性能 TCP传输效率慢,需要较多的资源开销,UDP传输效率快&am…...
Day 1 Vue 页面框架
现在前端框架越来越像后端了,特别是TypeScript这样的语言出现后,开发前端的体验跟后端渐渐接近了。当然,作为一个后端,直接上手前端,还是有很多坑要填的。 本次开发,前端页面框架直接选择Vue。原因很简单&…...
ChatGPT课件汇总介绍
第二节:有效管理 Token,充分发挥 ChatGPT 的能力 OpenAI 官方计算token的测试地址:https://platform.openai.com/tokenizer 第三节:探索ChatGPT在不同领域的创新应用 1、小说撰写 1、我希望你能作为一个小说家。我会给你一个主题,请写出有创意的、吸引人的故事,能够长时…...
自然语言处理---RNN、LSTM、GRU模型
RNN模型 RNN模型概述 RNN(Recurrent Neural Network),中文称作循环神经网络,它一般以序列数据为输入,通过网络内部的结构设计有效捕捉序列之间的关系特征,一般也是以序列形式进行输出。RNN的循环机制使模型隐层上一时间步产生的…...
rust学习——方法 Method
文章目录 方法 Method定义方法self、&self 和 &mut self方法名跟结构体字段名相同 带有多个参数的方法关联函数多个 impl 定义为枚举实现方法 rust 结构体与枚举的区别回答1回答2 方法 Method 从面向对象语言过来的同学对于方法肯定不陌生,class 里面就充斥…...
目录遍历漏洞
漏洞挖掘之目录遍历漏洞 (baidu.com) 从0到1完全掌握目录遍历漏洞 0x01 什么是目录遍历漏洞 目录遍历漏洞是由于网站存在配置缺陷,导致网站目录可以被任意浏览,这会导致网站很多隐私文件与目录泄露。 比如数据库备份文件、配置文件等,攻击…...
Python基础入门例程10-NP10 牛牛最好的朋友们
目录 描述 输入描述: 输出描述: 示例1 解答: 说明: 描述 牛牛有两个最好的朋友,他们的名字分别用input读入记录在两个字符串中,请使用字符串连接()帮助牛牛将两个朋友的名字依…...
html web前端,登录,post请求提交 json带参
html web前端,登录,post请求提交 json带参 3ca9855b3fd279fa17d46f01dc652030.jpg <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title></t…...
防火墙实验
防火墙 ping(网络测试工具,测试主机之间的可达性)原理: 发送一些小的网络数据包(ICMP数据包)到目标主机,并等待目标主机返回一个响应(通常是回显应答 Echo Reply)。 ss…...
php中进程、线程、协程详细讲解
目录 一、什么是进程、线程、协程 1、什么是进程(Process): 2 、什么是线程(Thread): 3、什么是协程(Coroutine): 二、 进程、线程、协程的关系 1、进程与线程关系 …...
无线通信中SINR的含义
在无线通信中,SINR代表"Signal-to-Interference-plus-Noise Ratio",即信号与干扰加噪声比。这是一个重要的性能度量,用于评估和描述接收信号的质量,以及在无线通信系统中的通信性能。 SINR考虑了以下三个关键因素&…...
pnp单目相机标定测距
参考:opencv 单目相机pnp测距(Cpp)-CSDN博客...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例
目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...
