2025-09-09 16:23:08 +08:00

156 lines
5.6 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="pay-container">
<!-- <view class="header">
<text class="title">手机缴费</text>
</view> -->
<view class="form-container">
<!-- 手机号码输入 -->
<view class="form-item">
<view class="label">手机号码</view>
<input class="input" type="number" v-model="phoneNumber" placeholder="请输入手机号码" maxlength="11" @input="onPhoneInput" />
</view>
<!-- 运营商选择 -->
<view class="form-item" v-if="showOperatorSelect">
<view class="label">选择运营商</view>
<view class="operator-list">
<view class="operator-item" :class="{ 'active': selectedOperator === 'chinaMobile' }" @click="selectOperator('chinaMobile')">
<image class="operator-icon" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/payTheFees_yidong.png" mode="aspectFit" />
<text>移动</text>
</view>
<view class="operator-item" :class="{ 'active': selectedOperator === 'chinaUnicom' }" @click="selectOperator('chinaUnicom')">
<image class="operator-icon" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/payTheFees_liantong.png" mode="aspectFit" />
<text>中国联通</text>
</view>
<view class="operator-item" :class="{ 'active': selectedOperator === 'chinaTelecom' }" @click="selectOperator('chinaTelecom')">
<image class="operator-icon" src="https://wechat-img-file.oss-cn-beijing.aliyuncs.com/payTheFees_dianxin.png" mode="aspectFit" />
<text>中国电信</text>
</view>
</view>
</view>
<!-- 自动识别的运营商显示 -->
<view class="form-item" v-else-if="selectedOperator">
<view class="label">运营商</view>
<view class="selected-operator">
<image class="operator-icon" :src="getOperatorIcon()" mode="aspectFit" />
<text>{{ getOperatorName() }}</text>
<text class="change-btn" @click="showOperatorSelect = true">更换</text>
</view>
</view>
<!-- 缴费金额 -->
<view class="form-item">
<view class="label">缴费金额</view>
<input class="input amount-input" type="number" v-model="amount" placeholder="请输入金额" />
<view class="amount-list">
<view class="amount-item" v-for="item in amountOptions" :key="item" @click="selectAmount(item)">{{ item }}</view>
</view>
</view>
<!-- 缴费按钮 -->
<button class="pay-btn" :disabled="!isFormValid" @click="handlePay">立即缴费</button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
phoneNumber: '',
selectedOperator: '',
amount: '',
amountOptions: [10, 20, 30, 50, 100, 200],
showOperatorSelect: false
}
},
computed: {
isFormValid() {
// 简单验证手机号11位选择了运营商金额大于0
return this.phoneNumber.length === 11 &&
this.selectedOperator &&
this.amount &&
Number(this.amount) > 0;
}
},
methods: {
onPhoneInput() {
if (this.phoneNumber.length >= 3) {
this.autoDetectOperator();
}
},
autoDetectOperator() {
// 获取手机号前3位或前4位
const prefix = this.phoneNumber.substring(0, 3);
const prefix4 = this.phoneNumber.substring(0, 4);
// 中国移动号段
const chinaMobilePrefixes = ['134', '135', '136', '137', '138', '139', '147', '150', '151', '152', '157', '158', '159', '178', '182', '183', '184', '187', '188', '198'];
// 中国联通号段
const chinaUnicomPrefixes = ['130', '131', '132', '145', '155', '156', '166', '175', '176', '185', '186'];
// 中国电信号段
const chinaTelecomPrefixes = ['133', '149', '153', '173', '177', '180', '181', '189', '199'];
if (chinaMobilePrefixes.includes(prefix) || chinaMobilePrefixes.includes(prefix4)) {
this.selectedOperator = 'chinaMobile';
this.showOperatorSelect = false;
} else if (chinaUnicomPrefixes.includes(prefix) || chinaUnicomPrefixes.includes(prefix4)) {
this.selectedOperator = 'chinaUnicom';
this.showOperatorSelect = false;
} else if (chinaTelecomPrefixes.includes(prefix) || chinaTelecomPrefixes.includes(prefix4)) {
this.selectedOperator = 'chinaTelecom';
this.showOperatorSelect = false;
} else {
// 无法识别时显示选择界面
this.showOperatorSelect = true;
}
},
selectOperator(operator) {
this.selectedOperator = operator;
this.showOperatorSelect = false;
},
selectAmount(amount) {
this.amount = amount;
},
handlePay() {
if (this.isFormValid) {
uni.showToast({
title: '缴费成功',
icon: 'success'
});
}
},
getOperatorName() {
switch (this.selectedOperator) {
case 'chinaMobile':
return '中国移动';
case 'chinaUnicom':
return '中国联通';
case 'chinaTelecom':
return '中国电信';
default:
return '';
}
},
getOperatorIcon() {
switch (this.selectedOperator) {
case 'chinaMobile':
return 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/payTheFees_yidong.png';
case 'chinaUnicom':
return 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/payTheFees_liantong.png';
case 'chinaTelecom':
return 'https://wechat-img-file.oss-cn-beijing.aliyuncs.com/payTheFees_dianxin.png';
default:
return '';
}
}
}
}
</script>
<style>
@import url("./index.css");
</style>