uniapp踩坑之项目:uniapp数字键盘组件—APP端

news2024/11/27 0:43:27

//在components文件夹创建digitKeyboard文件夹,再创建digitKeyboard.vue

<!-- 数字键盘 -->
<template>
    <view class="digit-keyboard">
        <view class="digit-keyboard_bg" @tap="hide"></view>
        <view class="digit-keyboard_area">
            <!-- <view class="input-area">
                <view class="item">{{label}}:</view>
                <view class="item">
                    <input :placeholder="inputVal" v-model="val" class="input" @input="input" disabled />
                </view>
                <view class="item">
                    <button type="primary" size="mini" @tap="confirm">确定</button>
                </view>
            </view> -->
            <view class="number-area">
                <view class="item" @tap="modifyNum(1)">1</view>
                <view class="item" @tap="modifyNum(2)">2</view>
                <view class="item" @tap="modifyNum(3)">3</view>
                <view class="item" @tap="modifyNum('del')">
                    <icon type="cancel" size="20" />
                </view>
                <view class="item" @tap="modifyNum(4)">4</view>
                <view class="item" @tap="modifyNum(5)">5</view>
                <view class="item" @tap="modifyNum(6)">6</view>
                <view class="item" @tap="modifyNum('add')">加1</view>
                <view class="item" @tap="modifyNum(7)">7</view>
                <view class="item" @tap="modifyNum(8)">8</view>
                <view class="item" @tap="modifyNum(9)">9</view>
                <view class="item" style="background-color:#2278FA;color: #ffffff;" @tap="confirm">确定</view>
                <view class="item" @tap="modifyNum('-')">-</view>
                <view class="item" @tap="modifyNum(0)">0</view>
                <view class="item" @tap="modifyNum('.')">.</view>
                <view class="item" @tap="modifyNum('clear')">清除</view>
            </view>
        </view>
    </view>
</template>

<script>
import NP from '../../utils/numberPrecision'
export default {
    props: {
        inputVal: {
            type: [String],
            default: ''
        },
        label: {
            type: String,
            default: '现金'
        },

    },
    data() {
        return {
            val: ''
        };
    },
    created() {

    },
    methods: {
        input() {
            // this.$emit('cancel');
            let val = this.val;
            console.log(val);
            this.$emit('inputFocus', val);
        },
        //隐藏
        hide() {
            this.$emit('cancel');
        },
        confirm() {
            let val = this.val;
            let valNew = val.slice(-1);
            if (valNew == '.') {
                val = val.slice(0, -1);
            }
            this.$emit('confirm', val);
        },
        modifyNum(sign) {

            let {
                val
            } = this;
            //删除
            if (sign == 'del') {
                if (val.length > 0) {
                    let valNew = val.slice(0, -1);
                    if (valNew.length == 0) {
                        val = '';
                    } else {
                        val = valNew;
                    }
                }
            } else if (sign == 'add') { //加1
                val = NP.plus(Number(val), 1) + '';
            } else if (sign == 'minus') { //减1
                val = NP.minus(Number(val), 1) + '';
            } else if (sign == 'clear') { //清除
                val = '';
            } else if (sign == '-') { //代表负数
                if (val.indexOf('-') == -1) {
                    val = '-' + val;
                }
            } else if (sign == '.') { //点符号
                if (val.indexOf('.') == -1 && val.length > 0) {
                    val = val + '.';
                }
            } else {
                if ((val == '0' && sign == '0') || (val == '-0' && sign == '0') || (val == '0' && sign != '.') || (val == '-0' && sign != '.')) {
                    return;
                }
                val = val + sign;
            }
            //小数点大于3位不赋值
            let arr = val.split('.');
            if (arr.length == 2 && arr[1].length > 3) {
                return;
            }
            this.$emit('inputFocus', val);
            this.val = val;
        }
    }
}
</script>


<style lang="scss" scoped>
.digit-keyboard {
    position: fixed;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    z-index: 999;
}

.digit-keyboard_bg {
    width: 100%;
    height: 100%;
    background: rgba($color: #000000, $alpha: 0.5);
}

.digit-keyboard_area {
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    background: #efefef;
    padding-bottom: 20upx;
}

.input-area {
    display: flex;
    align-items: center;
    padding: 10upx;
    background: #ffffff;

    .item {
        font-size: 28upx;

        &:nth-of-type(2) {
            flex: 1 0 auto;
            padding-right: 10upx;
        }

        &:nth-of-type(3) {
            font-size: 0;
        }
    }

    .input {
        background: #eeeeee;
        text-indent: 10upx;
        font-size: 28upx;
        height: 60upx;
    }
}

.number-area {
    display: flex;
    justify-content: space-around;
    flex-wrap: wrap;
    text-align: center;

    .item {
        margin-top: 20upx;
        flex: 0 0 22%;
        background: #ffffff;
        line-height: 80upx;
        font-size: 30upx;
        font-weight: bold;
    }
}
</style>

//main.js全局引入

// 数字键盘组件 在项目里main.js中配置如下代码

import digitKeyboard from './components/digitKeyboard/digitKeyboard.vue'
Vue.component('digitKeyboard', digitKeyboard)

 //单页面使用

//html
<input 
class="content-input" 
@click="clickInput" 
@input="input" 
v-model="inputValue" />
  <!-- 数字键盘 -->
<view>
<digitKeyboard 
v-if="isShowKeyboardWindow" 
@inputFocus="inputKeyboard" 
:inputVal="inputVal" 
:label="label" 
@cancel="isShowKeyboardWindow = false" 
@confirm="keyboardConfirm" />
</view>

//data
// 数字键盘 
inputVal: '',
label: '现金支付',
isShowKeyboardWindow: false,//是否显示键盘窗口

//js
// 数字键盘
inputKeyboard(e) {
    // console.log(e, '00000000000')
     this.inputValue = e //输入框双向绑定

     if (e) {
                this.isChecked1 = false
                this.isChecked2 = false
                this.isChecked3 = false
                this.isChecked4 = false
                this.isChecked5 = false
                this.isChecked6 = false
            }

        },

keyboardConfirm(val) {
            console.log(val)
            this.inputValue = val
            this.isShowKeyboardWindow = false

            this.isChecked1 = false;
            this.isChecked2 = false;
            this.isChecked3 = false;
            this.isChecked4 = false;
            this.isChecked5 = false;
            this.isChecked6 = false;
        },
// 输入框点击事件
clickInput() {
            this.isShowKeyboardWindow = true // 数字键盘组件显示
        },
//充值按钮
recharge: function (e) {
  // 进行判断
         if (this.inputValue !== '' || null || undefined) {// 为数字
                // 可调用支付接口
                // #ifdef APP-PLUS
                if (this.spaceCheck) {
                    this.commitDialog()
                } else {
                    // this.cancelDialog()
                }
                this.$refs.popupRef.show();
                // #endif
            }
            // 进行判断
            if (
               (this.inputValue == '' || null || undefined) 
                && this.current_tag == '' &&
                this.isChecked1 == false &&
                this.isChecked2 == false &&
                this.isChecked3 == false &&
                this.isChecked4 == false &&
                this.isChecked5 == false &&
                this.isChecked6 == false
            ) { // 为空
                // console.log(33333333);
                uni.showToast({
                    title: '请选择数值或输入内容!',
                    duration: 2000,
                    icon: 'none',
                });
                return false

            }
            else if (
                (this.inputValue == '' || null || undefined) && 
                this.current_tag &&
                this.isChecked1 == false &&
                this.isChecked2 == false &&
                this.isChecked3 == false &&
                this.isChecked4 == false &&
                this.isChecked5 == false &&
                this.isChecked6 == false
            ) {
                uni.showToast({
                    title: '请选择数值或输入内容!',
                    duration: 2000,
                    icon: 'none',
                });
                return false
            }


            if (this.current_tag || this.isChecked2 == true) {// 进行判断
                // 可调用支付接口
                // #ifdef APP-PLUS
                if (this.spaceCheck) {
                    this.commitDialog()
                } else {
                    // this.cancelDialog()
                }
                this.$refs.popupRef.show();
                // #endif
            }                    
        }

上一篇文章, 

vue2踩坑之项目:Swiper轮播图使用_意初的博客-CSDN博客文章浏览阅读456次。首先安装swiper插件,解决方法:npm 版本太高,切换一下就好了,引入Swiper,mounted里面调用https://blog.csdn.net/weixin_43928112/article/details/133681437

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

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

相关文章

【Spring Boot】发送邮件功能

发送邮件功能 一.pom.xml文件添加邮件依赖二.发送邮件信息&#xff08;1&#xff09;固定配置在application.yml&#xff08;2&#xff09;发送邮箱配成活&#xff08;3&#xff09;底层发送邮件方法&#xff08;4&#xff09;QQ邮箱开通smtp服务&#xff08;5&#xff09;网易…

基础课17——智能客服系统

客户服务是一种以客户为中心的服务模式&#xff0c;旨在提高客户满意度和忠诚度&#xff0c;促进企业业务增长和可持续发展。在客户服务中&#xff0c;企业需要了解客户需求&#xff0c;提供优质、高效、个性化的服务&#xff0c;解决客户问题&#xff0c;满足客户需求&#xf…

蓝图分离卷积BSConv 学习笔记 (附代码)

论文地址&#xff1a;https://arxiv.org/abs/2003.13549 代码地址&#xff1a;https://github.com/zeiss-microscopy/BSConv 1.是什么&#xff1f; BSConv是深度可分离卷积DSConv的升级版本&#xff0c;它更好地利用内核内部相关性来实现高效分离。具体而言&#xff0c;BSCo…

lerna + vite + typescript 多库,多应用共存项目脚手架模板

最近想把多个代码仓进行合并&#xff0c;形成一个大的代码仓&#xff0c;需要将各个库以及应用放在一个项目下&#xff0c;统一打包管理。会形成如下文件结构&#xff1a; 在网上找了一圈&#xff0c;没有找到合适的脚手架模板。索性自己弄一个吧&#xff0c;开源一下&#x…

云产品OSS免费试用获取奖励步骤

文章目录 1、获取活动链接2、报名参加3、试用产品领取产品试用权限上传文件开启加速传输提交作品 4、提交任务获取奖励 1、获取活动链接 活动时间2023.11.1&#xff5e;2023.11.30 名额有限&#xff0c;先到先得 进群群主获取活动链接 2、报名参加 直接点击链接进入小程序进…

Centralized Feature Pyramid for Object Detection解读

Centralized Feature Pyramid for Object Detection 问题 主流的特征金字塔集中于层间特征交互&#xff0c;而忽略了层内特征规则。尽管一些方法试图在注意力机制或视觉变换器的帮助下学习紧凑的层内特征表示&#xff0c;但它们忽略了对密集预测任务非常重要的被忽略的角点区…

自动驾驶算法(四):RRT*算法讲解与代码实现(基于采样的路径规划)

目录 1 RRT算法和RRT*算法 2 RRT*代码相比于RRT的改进 3 RRT*完整代码 1 RRT算法和RRT*算法 从上篇博客我们可以看出&#xff0c;RRT算法找到最短路径特别快。因为它是一段一段的过去的&#xff0c;但同时它产生的路径也是非常糟糕、随机的只要找到了终点就会结束。 因此我们…

INFINI Labs 产品更新 | Agent 全新重构,优化指标采集,支持集中配置管理,支持动态下发等功能

INFINI Labs 产品又更新啦~ 本次更新主要有 Agent、Console、Loadgen 等产品&#xff0c;其中 Agent 进行全新重构升级&#xff0c;新版限制了 CPU 资源消耗&#xff0c;优化了内存&#xff0c;相比旧版内存使用率降低 10 倍&#xff0c;极大的降低了对宿主服务器造成资源占用…

Postgresql在linux环境下以源码方式安装

linux环境下源码方式的安装 1.下载安装包&#xff08;源码安装方式&#xff09; 安装包下载 https://www.postgresql.org/ftp/source/ 2.安装postgresql ① 创建安装目录 mkdir /opt/pgsql12② 解压下载的安装包 cd /opt/pgsql12 tar -zxvf postgresql-12.16.tar.gz ③编…

【UE5 Cesium】actor随着视角远近来变化其本身大小

效果 步骤 1. 首先我将“DynamicPawn”设置为默认的pawn类 2. 新建一个父类为actor的蓝图&#xff0c;添加一个静态网格体组件 当事件开始运行后添加一个定时器&#xff0c;委托给一个自定义事件&#xff0c;每2s执行一次&#xff0c;该事件每2s获取一下“DynamicPawn”和acto…

【优秀毕设】基于vue+ssm+springboot的校园交友网站系统设计(附源码论文)

摘要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&a…

智能客服系统应用什么技术?

随着科技的飞速发展&#xff0c;智能客服系统逐渐出现在我们的生活中。这些系统不仅能够提供即时的客户服务&#xff0c;还可以通过人工智能等技术实现更加高效和准确的服务。那么&#xff0c;智能客服系统究竟应用了哪些技术呢&#xff1f;本文将详细解析。 1、机器学习技术 …

专访虚拟人科技:如何利用 3DCAT 实时云渲染打造元宇宙空间

自古以来&#xff0c;人们对理想世界的探索从未停止&#xff0c;而最近元宇宙的热潮加速了这一步伐&#xff0c;带来了许多新的应用。作为元宇宙的关键入口&#xff0c;虚拟现实&#xff08;VR&#xff09;将成为连接虚拟和现实的桥梁。苹果发布的VISION PRO头戴设备将人们对VR…

YOLOv8改进之更换BiFPN并融合P2小目标检测层

目录 1. BiFPN 1.1 FPN的演进 2. YOLOv8改进之更换BiFPN并融合P2小目标检测层 1. BiFPN BiFPN&#xff08;Bi-directional Feature Pyramid Network&#xff09;是一种用于目标检测和语义分割任务的神经网络架构&#xff0c;旨在改善特征金字塔网络&#xff08;Feature Pyram…

京东平台3个热门API接口的分享【附代码实例】

应用程序接口API&#xff08;Application Programming Interface&#xff09;&#xff0c;是提供特定业务输出能力、连接不同系统的一种约定。这里包括外部系统与提供服务的系统&#xff08;中后台系统&#xff09;或后台不同系统之间的交互点。包括外部接口、内部接口&#xf…

微服务接口测试中的参数传递

这是一个微服务蓬勃发展的时代。在微服务测试中&#xff0c;最典型的一种场景就是接口测试&#xff0c;其目标是验证微服务对客户端或其他微服务暴露的接口是否能够正常工作。对于最常见的基于Restful风格的微服务来说&#xff0c;其对外暴露的接口就是HTTP端点(Endpoint)。 这…

基于SSM的餐饮掌上设备点餐系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

纸白银可以双向交易吗?

纸白银是指以合约形式进行交易的白银&#xff0c;投资者可以通过期货市场进行买入和卖出操作。因此&#xff0c;纸白银是可以双向交易的。投资者既可以选择做多&#xff08;买入&#xff09;纸白银合约&#xff0c;也可以选择做空&#xff08;卖出&#xff09;纸白银合约&#…

Qt中正确的设置窗体的背景图片的几种方式

Qt中正确的设置窗体的背景图片的几种方式 QLabel加载图片方式之一Chapter1 Qt中正确的设置窗体的背景图片的几种方式一、利用styleSheet设置窗体的背景图片 Chapter2 Qt的主窗口背景设置方法一&#xff1a;最简单的方式是通过ui界面来设置&#xff0c;例如设置背景图片方法二 &…