| <template> | 
|     <view class="password"> | 
|         <view class="password_tip"> | 
|             <image src="@/static/password_ic_tip@2x.png" alt="" /> | 
|             <text>绑定手机号可以更好地保护您的账户安全,保护个人信息不被侵害。</text> | 
|         </view> | 
|         <view class="password_list"> | 
|             <view class="password_list_item"> | 
|                 <text>当前绑定</text> | 
|                 <view class="password_list_item_box"> | 
|                     <input type="number" disabled v-model="userInfo.companyUser.phone" maxlength="11"> | 
|                 </view> | 
|             </view> | 
|             <view class="password_list_item"> | 
|                 <text>新手机号</text> | 
|                 <view class="password_list_item_box"> | 
|                     <input type="text" v-model="form.newPhone" maxlength="11" placeholder="请输入新手机号"> | 
|                 </view> | 
|             </view> | 
|             <view class="password_list_item"> | 
|                 <text>验证码</text> | 
|                 <view class="password_list_item_box"> | 
|                     <input type="text" v-model="form.verificationCode" maxlength="4" placeholder="请输入手机验证码"> | 
|                     <p @click="getVerificationCode" v-if="!code.isOpen">获取验证码</p> | 
|                     <p v-else>{{code.num}}</p> | 
|                 </view> | 
|             </view> | 
|         </view> | 
|         <view class="password_footer"> | 
|             <button v-preventReClick class="password_footer_submit" @click="submit"> | 
|                 <text>完成</text> | 
|             </button> | 
|         </view> | 
|     </view> | 
| </template> | 
|   | 
| <script> | 
|     import { mapState } from 'vuex' | 
|     import { phoneRegular } from '@/common/config.js' | 
|     export default { | 
|         data() { | 
|             return { | 
|                 form: { | 
|                     newPhone: '', | 
|                     verificationCode: '' | 
|                 }, | 
|                 code: { | 
|                     num: 60, | 
|                     isOpen: false, | 
|                     timer: 0 | 
|                 } | 
|             }; | 
|         }, | 
|         computed: mapState([ | 
|             'userInfo' | 
|         ]), | 
|         methods: { | 
|             // 获取验证码 | 
|             getVerificationCode() { | 
|                 this.code.isOpen = true | 
|                 this.code.timer = setInterval(() => { | 
|                     if (this.code.num === 0) { | 
|                         clearInterval(this.code.timer) | 
|                         this.code.isOpen = false | 
|                         this.code.num = 60 | 
|                     } | 
|                     this.code.num = this.code.num - 1 | 
|                 }, 1000) | 
|             }, | 
|             // 提交修改 | 
|             submit() { | 
|                 if (!this.form.newPhone) { | 
|                     uni.showToast({ title: '新手机号不能为空', icon: 'none', duration: 2000 }); | 
|                 } else if (!phoneRegular.test(this.form.newPhone)) { | 
|                     uni.showToast({ title: '手机号不合法', icon: 'none', duration: 2000 }); | 
|                 } else if (!this.form.verificationCode) { | 
|                     uni.showToast({ title: '验证码不能为空', icon: 'none', duration: 2000 }); | 
|                 } else { | 
|                     console.log('可以提交') | 
|                 } | 
|             } | 
|         } | 
|     } | 
| </script> | 
|   | 
| <style lang="scss" scoped> | 
|     .password { | 
|         width: 100%; | 
|         .password_tip { | 
|             padding: 20rpx 30rpx; | 
|             display: flex; | 
|             background: #F7F7F7; | 
|             box-sizing: border-box; | 
|             image { | 
|                 width: 24rpx; | 
|                 height: 24rpx; | 
|                 margin-right: 10rpx; | 
|                 margin-top: 8rpx; | 
|             } | 
|             text { | 
|                 font-size: 24rpx; | 
|                 font-weight: 400; | 
|                 color: #666666; | 
|             } | 
|         } | 
|         .password_list { | 
|             padding: 0 30rpx; | 
|             .password_list_item { | 
|                 display: flex; | 
|                 align-items: center; | 
|                 height: 90rpx; | 
|                 border-bottom: 1rpx solid #E5E5E5; | 
|                 text { | 
|                     width: 150rpx; | 
|                     flex-shrink: 0; | 
|                     font-size: 30rpx; | 
|                     font-weight: 400; | 
|                     color: #222222; | 
|                 } | 
|                 .password_list_item_box { | 
|                     display: flex; | 
|                     justify-content: space-between; | 
|                     flex: 1; | 
|                     input { | 
|                         border: none; | 
|                         font-size: 30rpx; | 
|                     } | 
|                     input::-webkit-input-placeholder { | 
|                         font-size: 28rpx; | 
|                         font-weight: 400; | 
|                         color: #B2B2B2; | 
|                     } | 
|                     p { | 
|                         font-size: 26rpx; | 
|                         font-weight: 400; | 
|                         color: #4275FC; | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|         .password_footer { | 
|             margin-top: 80rpx; | 
|             padding: 0 30rpx; | 
|             .password_footer_submit { | 
|                 width: 100%; | 
|                 height: 88rpx; | 
|                 border: none; | 
|                 background: #4275FC; | 
|                 box-shadow: 0 0 12rpx 0 rgba(0, 0, 0, 0.08); | 
|                 border-radius: 8rpx; | 
|                 display: flex; | 
|                 align-items: center; | 
|                 justify-content: center; | 
|                 text { | 
|                     font-size: 30rpx; | 
|                     font-weight: 500; | 
|                     color: #FFFFFF; | 
|                 } | 
|             } | 
|         } | 
|     } | 
| </style> |