mirror of
				https://github.com/YunaiV/ruoyi-vue-pro.git
				synced 2025-11-04 08:06:12 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			114 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
<template>
 | 
						|
	<view class="mix-get-code" @click="getCode">
 | 
						|
		<view v-if="loading" class="loading">
 | 
						|
			<mix-icon-loading size="28rpx" color="#0083ff"></mix-icon-loading>
 | 
						|
		</view>
 | 
						|
		<text class="text" :class="{disabled: timeDown > 0}">
 | 
						|
			{{ timeDown > 0 ? '重新获取 ' + timeDown + 's' : '获取验证码' }}
 | 
						|
		</text>
 | 
						|
	</view>
 | 
						|
</template>
 | 
						|
 | 
						|
<script>
 | 
						|
	/**
 | 
						|
	 * 手机验证码
 | 
						|
	 * @prop mobile 手机号
 | 
						|
	 * @prop templateCode 短信模版id
 | 
						|
	 */
 | 
						|
	import {checkStr} from '@/common/js/util'
 | 
						|
	export default {
 | 
						|
		//获取手机验证码
 | 
						|
		name: 'MixMobileCode',
 | 
						|
		data() {
 | 
						|
			return {
 | 
						|
				loading: false,
 | 
						|
				timeDown: ''
 | 
						|
			}
 | 
						|
		},
 | 
						|
		props: {
 | 
						|
			mobile: {
 | 
						|
				type: String,
 | 
						|
				default: ''
 | 
						|
			},
 | 
						|
			templateCode: {
 | 
						|
				type: String,
 | 
						|
				default: ''
 | 
						|
			},
 | 
						|
			action: {
 | 
						|
				type: String,
 | 
						|
				default: '用户注册' //设置支付密码
 | 
						|
			}
 | 
						|
		},
 | 
						|
		methods: {
 | 
						|
			//获取验证码
 | 
						|
			async getCode(){
 | 
						|
				if(this.timeDown > 0){
 | 
						|
					return;
 | 
						|
				}
 | 
						|
				this.$util.throttle(()=>{
 | 
						|
					const mobile = this.mobile || this.$store.state.userInfo.username;;
 | 
						|
					if(!checkStr(mobile, 'mobile')){
 | 
						|
						this.$util.msg('手机号码格式不正确');
 | 
						|
						return;
 | 
						|
					}
 | 
						|
					this.loading = true;
 | 
						|
					this.$request('smsCode', 'send', {
 | 
						|
						mobile,
 | 
						|
						action: this.action, //uni短信必填
 | 
						|
						TemplateCode: this.templateCode, //阿里云必填
 | 
						|
					}).then(response=>{
 | 
						|
						this.$util.msg(response.msg);
 | 
						|
						this.loading = false;
 | 
						|
						if(response.status === 1){
 | 
						|
							this.countDown(60);
 | 
						|
						}
 | 
						|
					}).catch(err=>{
 | 
						|
						this.$util.msg('验证码发送失败');
 | 
						|
						this.loading = false;
 | 
						|
						console.log(err);
 | 
						|
					})
 | 
						|
				}, 2000)
 | 
						|
			},
 | 
						|
			//倒计时
 | 
						|
			countDown(timer){
 | 
						|
				timer --;
 | 
						|
				this.timeDown = timer;
 | 
						|
				if(timer > 0){
 | 
						|
					setTimeout(()=>{
 | 
						|
						this.countDown(timer);
 | 
						|
					}, 1000)
 | 
						|
				}
 | 
						|
			},
 | 
						|
		}
 | 
						|
	}
 | 
						|
</script>
 | 
						|
 | 
						|
<style scoped lang="scss">
 | 
						|
	.mix-get-code{
 | 
						|
		flex-shrink: 0;
 | 
						|
		display: flex;
 | 
						|
		justify-content: space-between;
 | 
						|
		align-items: center;
 | 
						|
		height: 36rpx;
 | 
						|
		
 | 
						|
		&:before{
 | 
						|
			content: '';
 | 
						|
			width: 0;
 | 
						|
			height: 40;
 | 
						|
			border-right: 1px solid #f0f0f0;
 | 
						|
		}
 | 
						|
		.loading{
 | 
						|
			margin-right: 8rpx;
 | 
						|
		}
 | 
						|
		.text{
 | 
						|
			line-height: 28rpx;
 | 
						|
			font-size: 26rpx;
 | 
						|
			color: #40a2ff;
 | 
						|
			
 | 
						|
			&.disabled{
 | 
						|
				color: #ccc;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
</style>
 |