当前位置: 首页 > news >正文

Vue2移动端(H5项目)项目封装车牌选择组件

一、最终效果

在这里插入图片描述

二、参数配置

1、代码示例:

<t-keyword:isShow="isShow"@ok="isShow=false"@cancel="isShow=false"@inputchange="inputchange":finalValue="trailerNo"/>

2、配置参数(TKeyword Attributes)的属性

参数说明类型默认值
isShow是否弹起键盘Booleanfalse
cancelColor取消字体颜色String#2072ED
confirmColor确认背景颜色String#2072ED
isShowMask是否显示遮罩Booleantrue
isClickMask是否点击遮罩关闭键盘Booleantrue
maxLength最大输入长度Number8
finalValue最终显示的值 (下拉框顶部)String-

3、events 事件

事件名说明返回值
inputchange选中车牌键盘选中的值和最大输入长度
cancel点击取消按钮时触发-
ok点击确定按钮时触发-
delete点击键盘清除键,-

三、具体页面使用

<template><div class="start_judging_scrap_steel"><van-fieldv-model="trailerNo"centerclearablelabel="车牌号"@focus="isShow=true"placeholder="请输入车牌号"/><t-keyword:isShow="isShow"@ok="isShow=false"@cancel="isShow=false"@inputchange="inputchange":finalValue="trailerNo"/></div>
</template>
<script>
export default {name: 'startJudgingScrapSteel',data() {return {isShow: false,trailerNo: '', // 车牌号}},methods: {// 输入车牌号inputchange(val, maxLength) {if (this.trailerNo.length >= maxLength && val !== 'delete') {return false}if (val === 'delete') {this.trailerNo = this.trailerNo.slice(0, this.trailerNo.length - 1)} else {this.trailerNo += val.toUpperCase()}},},
};
</script>

三、源码

<template><div class="panel-wrap" v-if="isShow" data-value="exit" @click="colse_da"><div class="mask_layer" v-if="isShowMask"></div><div class="vehicle-panel" :style="{background:backgroundColor}" @click.stop><div class="topItem"><div class="check" @click.stop="check">中/英切换</div><div class="contentShow" v-if="finalValue">最终值:{{finalValue}}</div><div class="exit" :style="{color:cancelColor}" @click.stop="vehicleTap('cancel')">取消</div></div><!--省份简写键盘--><div v-if="keyBoardType === 1"><div class="vehicle-panel-row_province"><divclass="vehicle-panel-row-button":style="{border:buttonBorder}"v-for="(item,idx) in keyVehicle1"@click.stop="vehicleTap(item)":key="idx+item">{{item}}</div></div><div class="vehicle-panel-row_province"><divclass="vehicle-panel-row-button":style="{border:buttonBorder}"v-for="(item,idx) in keyVehicle2"@click.stop="vehicleTap(item)":key="idx+item">{{item}}</div></div><div class="vehicle-panel-row_province"><divclass="vehicle-panel-row-button":style="{border:buttonBorder}"v-for="(item,idx) in keyVehicle3"@click.stop="vehicleTap(item)":key="idx+item">{{item}}</div></div><div class="vehicle-panel-row_province"><divclass="vehicle-panel-row-button vehicle-panel-row-button-last"@click.stop="vehicleTap(item)"v-for="(item,idx) in keyVehicle4":style="{border:buttonBorder}":key="idx+item">{{item}}</div><div:style="{border:buttonBorder}"class="vehicle-panel-row-button vehicle-panel-row-button-img"><van-iconclass="vehicle-en-button-delete"name="close"@click.stop="vehicleTap('delete')"/></div></div></div><!--英文键盘  --><div v-else><div class="vehicle-panel-row"><divclass="vehicle-panel-row-button vehicle-panel-row-button-number"@click.stop="vehicleTap(item)"v-for="(item,idx) in keyNumber":style="{border:buttonBorder}":key="item+idx">{{item}}</div></div><div class="vehicle-panel-row"><divclass="vehicle-panel-row-button":style="{border:buttonBorder}"v-for="(item,idx) in keyEnInput1"@click.stop="vehicleTap(item)":key="idx+item">{{item}}</div></div><div class="vehicle-panel-row"><divclass="vehicle-panel-row-button":style="{border:buttonBorder}"v-for="(item,idx) in keyEnInput2"@click.stop="vehicleTap(item)":key="idx+item">{{item}}</div><div:style="{border:buttonBorder}"class="vehicle-panel-row-button vehicle-panel-row-button-img"><van-iconclass="vehicle-en-button-delete"name="close"@click.stop="vehicleTap('delete')"/></div></div><div class="vehicle-panel-row-last"><divclass="vehicle-panel-row-button vehicle-panel-row-button-last"@click.stop="vehicleTap(item)":style="{border:buttonBorder}"v-for="(item,idx) in keyEnInput3":key="idx+item">{{item}}</div><div:style="{border:buttonBorder,backgroundColor:confirmColor}"class="vehicle-panel-row-button vehicle-panel-ok"@click.stop="vehicleTap('ok')">确定</div></div></div></div></div>
</template>
<script>
import variables from '@/assets/css/variables.scss'
export default {name: 'TKeyword',props: {// 是否弹起键盘isShow: {type: Boolean,default: false},// 取消字体颜色cancelColor: {type: String,default: `#2072ED`},// 是否显示遮罩isShowMask: {type: Boolean,default: true},// 是否点击遮罩关闭键盘isClickMask: {type: Boolean,default: true},// 最大输入长度maxLength: {type: Number,default: 8},// 确认背景颜色confirmColor: {type: String,default: `#2072ED`},// 最终显示的值finalValue: {type: String}},data() {return {keyVehicle1: ['京', '津', '晋', '冀', '蒙', '辽', '吉', '黑', '沪'],keyVehicle2: ['苏', '浙', '皖', '闽', '赣', '鲁', '豫', '鄂', '湘'],keyVehicle3: ['粤', '桂', '琼', '渝', '川', '贵', '云', '藏'],keyVehicle4: ['陕', '甘', '青', '宁', '新', 'W'],keyNumber: '1234567890',keyEnInput1: 'QWERTYUP', // 没有IOkeyEnInput2: 'ASDFGHJKL',keyEnInput3: 'ZXCVBNM',backgroundColor: '#fff',keyBoardType: 1,buttonBorder: '1px solid #ccc'}},methods: {vehicleTap(event) {console.log(event)if (/^[\u4e00-\u9fa5]/.test(event)) {this.keyBoardType = 2}switch (event) {case 'delete':this.$emit('delete')this.$emit('inputchange', event, this.maxLength)breakcase 'ok':this.$emit('ok')breakcase 'cancel':this.$emit('cancel')breakdefault:this.$emit('inputchange', event, this.maxLength)}},// 点击遮罩关闭键盘mask-layercolse_da() {if (!this.isClickMask) {return}this.$emit('cancel')},check() {if (this.keyBoardType === 1) {this.keyBoardType = 2} else if (this.keyBoardType === 2) {this.keyBoardType = 1}}}
}
</script><style lang="scss" scoped>
:host {width: 100%;
}.panel-wrap {position: fixed;top: 0;left: 0;right: 0;bottom: 0;z-index: 9999;.mask_layer {position: absolute;top: 0;left: 0;right: 0;bottom: 0;background: rgba(0, 0, 0, 0.5);}.vehicle-panel {width: 100%;position: fixed;bottom: 0;display: flex;flex-direction: column;justify-content: center;z-index: 1000;background: #fff;padding-bottom: 10px;}.vehicle-panel-row_province {display: flex;justify-content: center;align-items: center;}.vehicle-panel-row {display: flex;justify-content: space-between;align-items: center;}.vehicle-panel-row-last {display: flex;justify-content: space-between;align-items: center;}.vehicle-panel-row-button {background-color: #fff;margin: 0 1vw;margin-top: 8px;width: 8.8vw;height: 40px;border-radius: 5px;display: flex;justify-content: center;align-items: center;}.vehicle-panel-row-button-number {background-color: #eee;}.vehicle-panel-row-button-last {width: 8.8vw;height: 40px;display: flex;justify-content: center;align-items: center;}.vehicle-hover {background-color: #ccc;}.vehicle-panel-row-button-img {display: flex;justify-content: center;align-items: center;}.vehicle-en-button-delete {width: 8.8vw;height: 40px;display: flex;justify-content: center;align-items: center;}.vehicle-panel-ok {background-color: #355db4;color: #fff;width: 50px;height: 40px;font-size: 16px;display: flex;justify-content: center;align-items: center;}.topItem {display: flex;justify-content: space-between;align-items: center;height: 40px;font-size: 16px;border: 1px solid #ebedf0;.check {margin-left: 10px;color: #355db4;flex: 0.5;}.exit {margin-left: 0;margin-right: 10px;flex: 0.5;text-align: right;}.contentShow {text-align: center;flex: 1;}}
}
</style>

相关文章

基于ElementUi再次封装基础组件文档


基于ant-design-vue再次封装基础组件文档


vue3+ts基于Element-plus再次封装基础组件文档

相关文章:

Vue2移动端(H5项目)项目封装车牌选择组件

一、最终效果 二、参数配置 1、代码示例&#xff1a; <t-keyword:isShow"isShow"ok"isShowfalse"cancel"isShowfalse"inputchange"inputchange":finalValue"trailerNo"/>2、配置参数&#xff08;TKeyword Attribute…...

四川财谷通信息技术有限公司抖音小店的优势

在数字化浪潮的推动下&#xff0c;电商行业迎来了前所未有的发展机遇&#xff0c;而抖音小店作为新兴的电商平台&#xff0c;凭借其独特的社交属性和便捷的购物体验&#xff0c;迅速赢得了广大消费者的青睐。在众多抖音小店中&#xff0c;四川财谷通信息技术有限公司旗下的抖音…...

2025届八股文:计算机网络高频重点面试题

鉴于排版复杂且篇幅过长&#xff0c;本文仅列举出问题&#xff0c;而未给出答案&#xff0c;有需要答案的同学可后台私信。整理总结不易&#xff0c;请尊重劳动成果&#xff0c;转载请注明出处。 目录 网络基础 HTTP TCP UDP IP PING WebSocket DNS 网络安全 网络基础…...

嵌入式和单片机有什么区别?

目录 &#xff08;1&#xff09;什么是嵌入式&#xff1f; &#xff08;2&#xff09;什么是单片机&#xff1f; &#xff08;3&#xff09;嵌入式和单片机的共同点 &#xff08;4&#xff09;嵌入式和单片机的区别 &#xff08;1&#xff09;什么是嵌入式&#xff1f; 关…...

JSON.stringify 和 JSON.parse

JSON.stringify 是一个将 JavaScript 对象转换为 JSON 字符串的方法&#xff0c;它有三个参数&#xff1a; JSON.stringify(value, replacer, space) 参数详解 value &#xff08;必需&#xff09;: 这是你想要转换为 JSON 字符串的 JavaScript 对象或数组。例如&#xff1a;…...

APP架构设计_2.用MVVM架构实现一个具体业务

2.MVVM架构图 3.MVVM 实现一个具体业务 3.1 界面层的实现 界面层实现时&#xff0c;需要遵循以下几点。 1&#xff09;选择实现界面的元素 界面元素可以用 view 或 compose 来实现&#xff0c;这里用 view 实现。 2&#xff09;提供一个状态容器 这里使用 ViewModel 作为状态容…...

安恒信息总裁宋端智,辞职了!活捉一枚新鲜出炉的餐饮人!

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…...

《javaEE篇》--定时器

定时器概念 当我们不需要某个线程立刻执行&#xff0c;而是在指定时间点或指定时间段之后执行&#xff0c;假如我们要定期清理数据库里的一些信息时&#xff0c;如果每次都手动清理的话就太麻烦&#xff0c;所以就可以使用定时器。定时器就可以比作一个闹钟&#xff0c;可以让…...

OpenLayers3, 缩放、平移、复位操作

文章目录 一、前言二、代码示例 一、前言 本文基于OpenLayers3实现地图缩放、平移和复位操作 二、代码示例 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htm…...

进程与线程(7)

IPC通信方式&#xff1a; 一、共享内存 system v &#xff1a; 共享内存 是一块&#xff0c;内核预留的空间 最高效的通信方式 (避免了用户空间 到 内核空间的数据拷贝) 二、IPC对象操作通用框架&#xff1a; key值 > 申请 》读写 》关闭 》卸载 1.ftok函数&#xff1a;…...

传知代码-自动化细胞核分割与特征分析(论文复现)

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 引言 细胞核分割和分类在医学研究和临床诊断中具有重要意义。精准的细胞核分割能够帮助医生更好地识别和分析细胞核的形态学特征&#xff0c;从而辅助疾病诊断、癌症检测以及药物研发。HoverNet是一种基于深度学…...

Vue UI - 可视化的Vue项目管理器

概述 Vue CLI 3.0 更新后&#xff0c;提供了一套全新的可视化Vue项目管理器 —— Vue UI。所以要想使用它&#xff0c;你的 Vue CL I版本必须要在v3.0以上。 一、启动Vue UI 1.1 环境准备 1.1.1 安装node.js 访问官网&#xff08;外网下载速度较慢&#xff09;或 http://nod…...

团队管理之敏捷开发

一、敏捷实践 敏捷开发中一直秉承的理念和宣言是&#xff1a;我们正在通过亲身实践以及帮助他人实践&#xff0c;揭示更好的软件开发方法。通过这项工作&#xff0c;我们认为&#xff1a;个体和交互胜过过程和工具、可以工作的软件胜过面面俱到的文档、客户合作胜过合同谈判、…...

Hive3:表的常用修改语句

1、表重命名 ALTER TABLE old_table_name RENAME TO new_table_name;如&#xff1a; ALTER TABLE score4 RENAME TO score5;2、修改表属性值 ALTER TABLE table_name SET TBLPROPERTIES table_properties; table_properties:: (property_name property_value, property…...

MidJourney付费失败的原因以及失败后如何取消或续订(文末附MidJourney,GPT-4o教程)

MidJourney付费失败的原因 MidJourney付费失败的原因可能包括支付方式无效、支付信息错误、网络问题、账户设置问题等。 ‌支付方式无效或信息错误‌&#xff1a;如果用户提供的支付方式&#xff08;如信用卡&#xff09;信息不正确&#xff0c;或者支付方式本身不支持该地区…...

PHP安全开发

安全开发 PHP 基础 增&#xff1a;insert into 表名(列名 1, 列名 2) value(‘列 1 值 1’, ‘列 2 值 2’); 删&#xff1a;delete from 表名 where 列名 ‘条件’; 改&#xff1a;update 表名 set 列名 数据 where 列名 ‘条件’; 查&#xff1a;select * from 表名 wher…...

【大模型从入门到精通32】开源库框架LangChain RAG 系统中的问答技术2

这里写目录标题 探索高级问答链类型MapReduce 和 Refine 技术 实用建议和最佳实践解决 RetrievalQA 限制结论进一步阅读和探索理论问题实践问题 探索高级问答链类型 MapReduce 和 Refine 技术 MapReduce 和 Refine 是设计用来规避由语言模型 (LM) 上下文窗口大小所导致的限制…...

MySQL 数据库管理

在 MySQL 中&#xff0c;数据库管理是非常基础但又至关重要的技能。无论是创建新的数据库、选择当前使用的数据库&#xff0c;还是查看数据库的相关信息&#xff0c;这些操作都是日常数据库管理中不可或缺的一部分。本文将详细介绍 MySQL 数据库管理的基本操作&#xff0c;包括…...

屏幕录制了一个视频,发现有些部分是不需要的,那么我们就用到视频剪辑的工具,利用必剪去删除中间的一部分视频,并且导出,然后利用格式工厂去压缩mp4文件的过程。

1、我们经常会去做一些视频教程或者软件的使用说明等等&#xff0c;做完了以后&#xff0c;会有增加字幕&#xff0c;或者去掉不需要一段视频。 2、打开必剪软件 3、点击【开始制作】 先将视频拖动到1的位置&#xff0c;然后将播放区中的视频&#xff0c;拖到2的区域&#xff…...

代码随想录跟练第六天——LeetCode

第454题.四数相加II 力扣题目链接(opens new window) 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) &#xff0c;使得 A[i] B[j] C[k] D[l] 0。 为了使问题简单化&#xff0c;所有的 A, B, C, D 具有相同的长度 N&#xff0c;且 0 ≤ N ≤…...

基于LangChain的RAG与Agent智能体开发 - 向量存储与向量检索,以及RAG增强检索实现

大家好&#xff0c;我是小锋老师&#xff0c;最近更新《2027版 基于LangChain的RAG与Agent智能体 开发视频教程》专辑&#xff0c;感谢大家支持。本课程主要介绍和讲解RAG&#xff0c;LangChain简介&#xff0c;接入通义千万大模型 &#xff0c;Ollama简介以及安装和使…...

计算机毕业设计springboot智能汽车租赁系统 基于SpringBoot的智慧出行车辆共享服务平台设计与实现 SpringBoot框架下城市智能租车与车辆调度管理系统开发

计算机毕业设计springboot智能汽车租赁系统 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着城市化进程加速推进和共享经济模式蓬勃发展&#xff0c;传统汽车租赁行业面临运营…...

开发者跨界金融科技:机遇与技能图谱

一、金融科技浪潮下的测试新机遇1.1 行业爆发式增长催生人才缺口全球金融数智化进程加速&#xff0c;银行业持续加码科技投入。据公开数据显示&#xff0c;2024年仅国有六大行金融科技投入超1250亿元&#xff0c;同比增长约2%。业务快速迭代与用户体验升级需求&#xff0c;推动…...

C# 扩展方法只会写 this 吗?C# 14 新语法直接把扩展方法玩出了花

从静态方法到扩展块# 传统的扩展方法需要每个方法都重复写 this 参数&#xff0c;且只能扩展方法。新语法通过 extension 关键字定义一个块&#xff0c;将目标类型集中声明。 传统写法是这样的 public static class StringExtensions {// 每个方法都要写一遍 (this string s…...

毕业设计实战:基于SSM的学生宿舍设备报修管理系统设计与实现全攻略

毕业设计实战&#xff1a;基于SSM的学生宿舍设备报修管理系统设计与实现全攻略 在开发“学生宿舍设备报修管理系统”这套毕设时&#xff0c;我曾因“故障上报与维修派单流程脱节”踩过一个关键坑。初期设计时&#xff0c;我将“学生报修”和“维修人员接单”视为两个独立的模块…...

如何永久保存微信聊天记录?免费开源工具WeChatMsg完整指南

如何永久保存微信聊天记录&#xff1f;免费开源工具WeChatMsg完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/W…...

数据标注技术指南:高效标注与数据质量优化实践

数据标注技术指南&#xff1a;高效标注与数据质量优化实践 【免费下载链接】cvat Annotate better with CVAT, the industry-leading data engine for machine learning. Used and trusted by teams at any scale, for data of any scale. 项目地址: https://gitcode.com/Git…...

基于RexUniNLU的Linux系统日志智能分析方案

基于RexUniNLU的Linux系统日志智能分析方案 1. 引言 每天面对海量的Linux系统日志&#xff0c;是不是感觉头大&#xff1f;服务器突然卡顿&#xff0c;排查问题就像大海捞针&#xff0c;一行行翻日志看得眼睛都花了。传统的关键词搜索和正则匹配已经跟不上现代运维的需求&…...

Day4 Python的函数和参数机制

函数的定义与调用最基本的函数结构如下&#xff1a;def greet(name): return f"Hello, {name}!" print(greet("Alice")) def 定义函数调用时传入对应参数如果参数数量或顺序不匹配&#xff0c;就会报错&#xff0c;这是最常见的问题之一。默认参数默认参数…...

Tendis水平扩展实战:在线数据迁移与节点扩容最佳实践

Tendis水平扩展实战&#xff1a;在线数据迁移与节点扩容最佳实践 【免费下载链接】Tendis Tendis is a high-performance distributed storage system fully compatible with the Redis protocol. 项目地址: https://gitcode.com/gh_mirrors/te/Tendis Tendis作为腾讯开…...