起因是因为公司需要一个移动端的支付页面,之前没写过,猛然间接到这样一个任务,有点儿手足无措,经过多方面的研究,最终还是顺利完成了,写篇博客,记录此次的收获,以后再接再厉。

 

Vue自定义数字键盘--移动端买单支付页面

 

html部分:

<!-- 登录frm -->

<!DOCTYPE html>

<html>

 

<head>

<meta charset="UTF-8">

<meta name="viewport"

content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0" />

<meta name="format-detection" content="telephone=no,email=no,date=no,address=no">

<title>支付</title>

<link rel="stylesheet" type="text/css" href="css/api.css" />

<link rel="stylesheet" type="text/css" href="css/aui.css" />

<link rel="stylesheet" type="text/css" href="css/aui.2.0-override.css" />

<link rel="stylesheet" type="text/css" href="css/pay.css">

</head>

 

<body>

<div id="wrap" class="flex-wrap flex-vertical" v-cloak>

<div id="main" class="flex-con">

<div class="aui-content aui-margin-b-15 box-3">

<ul class="aui-list aui-media-list aui-margin-t-20 aui-margin-b-15">

<li class="aui-list-item aui-list-item-middle"

style="padding-right:0.75rem;width:100%;margin:0 auto;">

<div class="aui-media-list-item-inner"

style="width:auto;display: flex;margin:0 auto;text-align: center;">

<div class="aui-list-item-media" style="width: 3rem;">

<img src="image/bank.png" class="aui-img-round aui-list-img-sm">

</div>

<div class="aui-list-item-inner">

<div class="aui-list-item-text">

<div class="aui-list-item-title" style="font-size:17px;">西安唐车商贸有限公司</div>

</div>

<div class="aui-list-item-text">

<div class="text">门店</div>

<div style="margin-left:10px;font-size:13px;">西安唐车商贸有限公司</div>

</div>

</div>

</div>

</li>

</ul>

</div>

<div class="aui-content-padded aui-margin-t-20 box-1">

<div>金额</div>

<ul class="aui-list aui-form-list">

<li class="aui-list-item">

<div class="aui-list-item-inner">

<div class="aui-list-item-label">

</div>

<div class="aui-list-item-input">

<input placeholder="请输入付款金额" style="font-size:26px;" style="font-size:50rpx;"

decimal="2" type="text" pattern="[0-9]*" v-model="paymentAmount" id="thisInput"

@click="thisFocus()">

</div>

</div>

</li>

</ul>

</div>

 

<!-- 备注 -->

<div class="aui-content-padded aui-margin-t-20" @click="remarksFun()">

<div class="remarks">{{remarks==''?'填写备注':remarks}}</div>

</div>

 

<!-- 键盘 -->

 

<div id="footer" v-if="customKeyboard">

<div>

<div class="aui-content-padded sweep">

全国三百万商户都在用

<div class="code">秒付码</div>

</div>

</div>

<div class="keyboard clear">

<div class="left-content">

<div class="number-item press-active" tapmode @click="input(1);">

<p class="text-font-size">1</p>

</div>

<div class="number-item press-active" tapmode @click="input(2);">

<p class="text-font-size">2</p>

</div>

<div class="number-item press-active" tapmode @click="input(3);">

<p class="text-font-size">3</p>

</div>

<div class="number-item press-active" tapmode @click="input(4);">

<p class="text-font-size">4</p>

</div>

<div class="number-item press-active" tapmode @click="input(5);">

<p class="text-font-size">5</p>

</div>

<div class="number-item press-active" tapmode @click="input(6);">

<p class="text-font-size">6</p>

</div>

<div class="number-item press-active" tapmode @click="input(7);">

<p class="text-font-size">7</p>

</div>

<div class="number-item press-active" tapmode @click="input(8);">

<p class="text-font-size">8</p>

</div>

<div class="number-item press-active" tapmode @click="input(9);">

<p class="text-font-size">9</p>

</div>

<div class="number-item press-active" tapmode @click="input('.');">

<p class="text-font-size">.</p>

</div>

<div class="number-item press-active" tapmode @click="input(0);">

<p class="text-font-size">0</p>

</div>

<div class="number-item press-active" tapmode>

<p class="text-font-size">&nbsp;</p>

</div>

</div>

<div class="right-content">

<div class="control-item press-active" tapmode @click="deleteFun();">

<img class="delete-btn-img" src="image/del.png">

</div>

 

<div class="control-item-x2 press-active"

:style="paymentAmount!=''?'background:#0080ff;':'background:#67b2fd;'" id="submit_btn_Box"

tapmode @click="sumbitFun();">

<p class="text-font-size" id="ensureText" style="color:#fff;font-size:18px;">确认支付</p>

</div>

</div>

</div>

</div>

</div>

</div>

<script src="js/jquery-1.8.2.min.js"></script>

<script src="js/layer_mobile/layer.js"></script>

<script src="js/vue.js"></script>

<script src="js/api.js"></script>

<script src="js/aui-dialog.js"></script>

<script src="js/pay.js"></script>

</body>

 

</html>

 

CSS部分:

.head-icon {

width: 7rem;

height: 7rem;

margin: 3rem auto 1rem;

border-radius: 100%;

background-position: center center;

border: 1px solid #DDDDDD;

}

 

.head-name {

font-size: 1rem;

text-align: center;

color: #555;

padding-bottom: 1rem;

}

 

/*Input*/

.clear {

clear: both;

}

 

.money-box {

margin: 1rem;

border: 1px solid #DDDDDD;

border-radius: 0.25rem;

overflow: hidden;

}

 

.money-box input {

outline: none;

width: 100%;

height: 3rem;

font-size: 1.3rem;

padding: 0.25rem 0.75rem;

}

 

.remarks{

font-size:14px;

padding-left:0.75rem;

color:#67b2fd;

}

 

/*Keyboard*/

#footer {

width: 100%;

position: fixed;

bottom: 0;

left: 0;

background: #FFF;

border-top: 1px solid #DDDDDD !important;

}

 

#footer .keyboard {

width: 100%;

border-top: 1px solid #DDDDDD !important;

}

 

#footer .keyboard .left-content {

width: 75%;

float: left;

}

 

#footer .keyboard .right-content {

width: 25%;

float: left;

}

 

#footer .delete-btn-img {

display: inline;

width: 1.5rem;

height: 1rem;

vertical-align: middle;

}

 

#footer .text-font-size {

font-size: 30px;

color: #333;

}

 

#footer .active {

background-color: #ff5400;

}

 

#footer .active .text-font-size {

color: #ffffff !important;

}

 

#footer .left-content .number-item {

float: left;

width: 33.3333%;

height: 2.5rem;

line-height: 2.5rem;

text-align: center;

overflow: hidden;

border-bottom: 1px solid #DDDDDD !important;

border-right: 1px solid #DDDDDD !important;

}

 

#footer .right-content .control-item {

float: left;

width: 100%;

height: 2.5rem;

line-height: 2.5rem;

text-align: center;

overflow: hidden;

border-bottom: 1px solid #DDDDDD !important;

}

 

#footer .right-content .control-item-x2 {

width: 100%;

height: 7.5rem;

line-height: 7.5rem;

text-align: center;

overflow: hidden;

}

 

#footer .press-active:active {

background-color: #F2F2F2;

}

 

#footer .disabled {

background-color: #dddddd;

}

 

/*提示框*/

 

.imagebox {

overflow: hidden;

padding: 20px;

}

 

.imagebox img {

width: 50px;

height: 50px;

float: left;

margin-right: 10px;

}

 

.imagebox span {

line-height: 50px;

float: left;

}

 

#footer #submit_btn_Box .text-font-size {

width: 50px;

line-height: 30px;

}

 

#footer #submit_btn_Box {

display: flex;

align-items: center;

justify-content: center;

}

 

.content {

background: #FFF;

}

 

.moneybox {

border-top: 1px solid #CCC;

padding: 15px 20px;

}

 

.moneybox h5 {

font-weight: normal;

font-size: 0.8rem;

color: #555;

}

 

.moneyinput {

 

overflow: hidden;

}

 

.moneyinput strong {

float: left;

font-size: 2rem;

color: #333;

width: 2.5rem;

font-weight: 600;

line-height: 2.5rem;

}

 

.moneyinput div {

padding-left: 2.5rem;

position: relative;

z-index: 333;

}

 

.moneyinput div input {

font-size: 1.6rem;

font-weight: 600;

color: #333;

height: 2.5rem;

line-height: 2.5rem;

flex: 1;

}

 

.box-1,

.box-2 {

background-color: #fff;

}

 

.box-3 .text {

background-color: #ccc;

padding: 0px 3px;

font-size: 8px;

border-radius: 5px;

color: #fff;

display: inline-block;

}

 

.aui-media-list {

width: 100%;

margin: 0 auto;

}

 

.box-1 .aui-list-item-label {

width: 1%;

text-align: center;

font-size: 20px;

font-weight: bold;

}

 

.box-1,

.box-2 {

border-radius: 4px;

border: 1px solid #eee;

padding: 5px 15px;

}

 

.box-1 li.aui-list-item {

padding-left: 0;

}

 

.box-2 .aui-list-item {

padding-right: 0.75rem;

}

 

.box-2 input[type="text"] {

height: 1.5rem;

font-size: 12px;

/* border: 1px solid #eee; */

padding: 0 15px;

border-radius: 5px;

margin-left: 0px;

}

 

.box-3 .aui-list .aui-list-item-text {

font-size: 0.7rem;

color: #757575;

position: relative;

-webkit-box-sizing: border-box;

box-sizing: border-box;

display: -webkit-box;

display: -webkit-flex;

display: flex;

-webkit-box-pack: justify;

-webkit-justify-content: flex-start;

justify-content: flex-start;

-webkit-align-items: center;

align-items: center;

}

 

#main {

background: #f1eff6;

}

 

/* 修改input默认样式开始 */

 

/* WebKit browsers */

input::-webkit-input-placeholder {

color: #a7a7a7;

font-size: 16px;

}

 

/* Mozilla Firefox 4 to 18 */

input:-moz-placeholder {

color: #a7a7a7;

opacity: 1;

font-size: 16px;

}

 

/* Mozilla Firefox 19+ */

input::-moz-placeholder {

color: #a7a7a7;

opacity: 1;

font-size: 16px;

}

 

/* Internet Explorer 10+ */

input:-ms-input-placeholder {

color: #a7a7a7;

font-size: 16px;

}

/* 修改input默认样式结束 */

 

.aui-list {

position: relative;

font-size: 0.8rem;

background-color: none;

border-top: 0px solid #dddddd;

}

 

.aui-list .aui-list-item {

list-style: none;

margin: 0;

padding: 0;

padding-left: 0.75rem;

color: #212121;

border-bottom: 0px solid #dddddd;

position: relative;

min-height: 2.2rem;

-webkit-box-sizing: border-box;

box-sizing: border-box;

display: -webkit-box;

display: -webkit-flex;

display: flex;

-webkit-box-pack: justify;

-webkit-justify-content: space-between;

justify-content: space-between;

}

 

.sweep{

color: #858489;

text-align: center;

margin-top: 20px;

font-size:12px;

}

.sweep .code{

color: #0080ff;

display: inline-block;

}

 

JS部分:

var app = new Vue({

el: '#wrap',

data: {

customKeyboard: true,//自定义键盘的显示隐藏,false隐藏,true显示

paymentAmount: '',//支付金额

remarks: '',//备注内容

inputValue: [],//输入的数字

},

// 在 'methods' 对象中定义方法

methods: {

//获取支付金额

thisFocus() {

$('#thisInput').focus();

},

//获取备注

remarksFun() {

var that = this;

var dialog = new auiDialog();

dialog.alert({

title: "填写备注",

msg: '=====',

buttons: ['取消', '确定'],

input: true //是否有input输入框

}, function (ret) {

if (ret.buttonIndex) {

that.remarks = ret.text;

}

})

},

//删除输入的数值

deleteFun() {

//如果没有输入,直接返回

if (!this.paymentAmount.length) return false;

//否则删除最后一个

this.paymentAmount = this.paymentAmount.substring(0, this.paymentAmount.length - 1);

},

//获取键盘值

input(data) {

//如果包含小数点,直接返回

if (this.paymentAmount.indexOf('.') > -1) {

this.paymentAmount = this.paymentAmount

}

 

//如果有小数点且小数点位数不小于2

if (this.paymentAmount.indexOf('.') > -1 && this.paymentAmount.substring(this.paymentAmount.indexOf('.') + 1).length < 2)

this.paymentAmount = this.paymentAmount + data;

//没有小数点

if (!(this.paymentAmount.indexOf('.') > -1)) {

//如果第一位是0,只能输入小数点

if (data == 0 && this.paymentAmount.length == 0) {

this.paymentAmount = '0.';

} else if (data == '.' && this.paymentAmount.length == 0) {

//如果第一位是小数点

this.paymentAmount = '0.';

} else {

if (this.paymentAmount.length && Number(this.paymentAmount.charAt(0)) === 0) return;

this.paymentAmount = this.paymentAmount + data;

}

}

},

 

//提交订单

sumbitFun() {

var payAmount = this.paymentAmount;//支付金额

var remarksInput = this.remarks;//获取备注

console.log(remarksInput);

if (payAmount == '' || payAmount == null || payAmount == undefined) {

layer.open({

content: '请输入支付金额',

skin: 'msg',

time: 2 //2秒后自动关闭

});

}

},

},

//页面挂载

mounted() {

this.thisFocus();

setTimeout(() => {

this.thisFocus()

}, 0);

},

 

create: function () { }

})

 

使用到的js文件

<script src="js/jquery-1.8.2.min.js"></script>

<script src="js/layer_mobile/layer.js"></script>

<script src="js/vue.js"></script>

<script src="js/api.js"></script>

<script src="js/aui-dialog.js"></script>

均可以自行下载,也可以加QQ517861163

 

 

 

相关文章: