| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- <template>
- <div class="f-main">
- <div class="content-top">
- <p>密码重置</p>
- </div>
- <div class="f-form">
- <div class="page-part">
- <mt-field placeholder="新密码"
- type="password"
- :attr="{ maxlength: 20 }"
- :state="state.password"
- @blur.native.capture="validPasswordTip"
- @input.native="validPassword"
- v-model="news.password"></mt-field>
- <template v-if="news.password">
- <p class="pwd">密码强度 <em :class="{sm:progress === '弱', md: progress === '中', ld:progress === '强'}"></em> <em :class="{md: progress === '中', ld:progress === '强'}"></em> <em :class="{ld:progress === '强'}"></em> <span :class="{smstep:progress === '弱', mdstep: progress === '中', ldstep:progress === '强'}" v-text="progress">强</span></p>
- <p class="pwd">密码须为8-20字符的英文、数字混合</p>
- </template>
- </div>
- <div class="page-part">
- <mt-field placeholder="确认密码"
- type="password"
- :state="state.confirm"
- auto-complet="off"
- @blur.native.capture="validConfirm"
- v-model="news.confirm"></mt-field>
- </div>
- <div class="page-part">
- <mt-button size="large" type="primary" @click="sureAccount('last')">下一步</mt-button>
- </div>
- </div>
- </div>
- </template>
- <script>
- export default {
- name: 'step-new',
- props: ['tokenId'],
- data () {
- return {
- progress: '',
- state: {
- password: 'error',
- confirm: 'error'
- },
- news: {
- password: '',
- confirm: ''
- }
- }
- },
- methods: {
- // 弹窗处理
- downToast (type) {
- this.$toast({
- message: type,
- iconClass: 'el-icon-warning'
- })
- },
- // 验证密码强度
- validPassword () {
- let reg1 = /^(?=.{8,20})(((?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]))|((?=.*[0-9])((?=.*[a-zA-Z]))(?=.*[^a-zA-Z0-9]))).*$/
- let reg2 = /^(?=.{8,20})(((?=.*[0-9])(?=.*[a-z]))|((?=.*[0-9])(?=.*[A-Z]))).*$/
- if (reg1.test(this.news.password)) {
- this.progress = '强'
- } else if (reg2.test(this.news.password)) {
- this.progress = '中'
- } else {
- this.progress = '弱'
- }
- },
- // 验证新密码
- validPasswordTip () {
- let reg2 = /^(?=.{8,20})(((?=.*[0-9])(?=.*[a-z]))|((?=.*[0-9])(?=.*[A-Z]))).*$/
- if (!this.news.password) {
- this.downToast('请输入密码')
- this.state.password = 'error'
- } else {
- if (!reg2.test(this.news.password)) {
- this.downToast('密码须为8-20字符的英文、数字混合')
- this.state.password = 'warning'
- } else {
- this.state.password = 'success'
- if (this.news.confirm) {
- this.validConfirm()
- }
- }
- }
- },
- // 验证密码是否一致
- validConfirm () {
- if (!this.news.confirm) {
- this.downToast('请再次输入密码')
- this.state.confirm = 'error'
- } else {
- if (this.news.confirm === this.news.password) {
- this.state.confirm = 'success'
- } else {
- this.state.confirm = 'warning'
- this.downToast('两次输入密码不一致,请重新输入')
- }
- }
- },
- sureAccount (type) {
- if (this.state.password !== 'success' || this.state.confirm !== 'success') {
- this.downToast('请确认填写部分是否有误')
- } else {
- this.$indicator.open('验证中...')
- let param = new FormData()
- param.append('password', this.news.password)
- param.append('token', this.$route.query.token ? this.$route.query.token : this.tokenId)
- let config = {
- headers: {'Content-Type': 'multipart/form-data'}
- }
- this.$http.post(`/sso/resetPwd`, param, config)
- .then(response => {
- this.$indicator.close()
- if (response.data.success) {
- this.$emit('stepEvent', type)
- this.$emit('lastEvent', 'new')
- } else {
- this.downToast(response.data.errMsg)
- }
- }).catch((err) => {
- this.$indicator.close()
- this.downToast(err.errMsg)
- })
- }
- }
- }
- }
- </script>
|