123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- <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>
|