From 9b85e466d4ce21bb704c01ac3729737f3146bdc8 Mon Sep 17 00:00:00 2001
From: 819527061@qq.com <123456>
Date: 星期二, 11 六月 2024 14:47:09 +0800
Subject: [PATCH] docs:密码强度

---
 pages/login/resetPassword/resetPassword.vue |  251 ++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 204 insertions(+), 47 deletions(-)

diff --git a/pages/login/resetPassword/resetPassword.vue b/pages/login/resetPassword/resetPassword.vue
index b862f88..c94086e 100644
--- a/pages/login/resetPassword/resetPassword.vue
+++ b/pages/login/resetPassword/resetPassword.vue
@@ -5,21 +5,53 @@
 			:rules="rules"
 			ref="uForm"
 			label-width="80px">
-			<u-form-item prop="password"
+      <template v-if="isShowPassword">
+			  <u-form-item prop="originalPassword"
 				label="瀵嗙爜"
 				required
 				borderBottom>
 				<u-input v-if='inputType==="password"'
-					v-model="modelForm.password"
+					v-model="modelForm.originalPassword"
 					border="surround"
 					placeholder="璇疯緭鍏ュ瘑鐮�(浠呮敮鎸佹暟瀛楀瓧姣嶄笅鍒掔嚎)"
 					:type='inputType' />
 				<u-input v-else
-					v-model="modelForm.password"
+					v-model="modelForm.originalPassword"
 					border="surround"
 					placeholder="璇疯緭鍏ュ瘑鐮�(浠呮敮鎸佹暟瀛楀瓧姣嶄笅鍒掔嚎)"
 					:type='inputType' />
 			</u-form-item>
+      </template>
+      <u-form-item prop="password"
+                   label="瀵嗙爜"
+                   required
+                   borderBottom>
+        <u-input v-if='inputType==="password"'
+                 v-model="modelForm.password"
+                 border="surround"
+                 placeholder="璇疯緭鍏ュ瘑鐮�(浠呮敮鎸佹暟瀛楀瓧姣嶄笅鍒掔嚎)"
+                 :type='inputType' />
+        <u-input v-else
+                 v-model="modelForm.password"
+                 border="surround"
+                 placeholder="璇疯緭鍏ュ瘑鐮�(浠呮敮鎸佹暟瀛楀瓧姣嶄笅鍒掔嚎)"
+                 :type='inputType' />
+      </u-form-item>
+      <view class="intensity">
+        <view class="psdText">瀵嗙爜寮哄害</view>
+        <view
+            class="line"
+            :class="[level.includes('low') ? 'low' : '']"></view>
+        <view
+            class="line"
+            :class="[level.includes('middle') ? 'middle' : '']"></view>
+        <view
+            class="line"
+            :class="[level.includes('high') ? 'high' : '']"></view>
+        <div class="warningtext">
+          瀵嗙爜搴旂敱8-16浣嶆暟瀛椼�佸瓧姣嶃�佺鍙风粍鎴愩�傝涓嶈浣跨敤瀹规槗琚寽鍒扮殑瀵嗙爜
+        </div>
+      </view>
 			<u-form-item prop="secondPassword"
 				label="浜屾纭"
 				required
@@ -62,63 +94,146 @@
 <script>
 	export default {
 		data() {
+      const validatePass = (rule, value, callback) => {
+        if (this.modelForm.password !== "") {
+          if (value !== this.modelForm.password) {
+            callback(new Error("涓ゆ杈撳叆瀵嗙爜涓嶄竴鑷�!"));
+          } else {
+            callback();
+          }
+        } else {
+          callback();
+        }
+      };
+      const checkPassword = (rule, value, callback) => {
+        // let roles = this.$store.getters.roles;//褰撳墠鐢ㄦ埛瑙掕壊id
+        // let passL = 8;
+        // if (roles.concat(1)){
+        //   passL = 10
+        // }
+        let passL = 8;
+        this.level = []
+        if(!value) {
+          return callback('瀵嗙爜涓嶈兘涓虹┖')
+        }
+        if(value.length < passL) {
+          return callback(`瀵嗙爜涓嶈兘灏戜簬${passL}浣峘)
+        }
+        if(value.length > 16) {
+          return callback('瀵嗙爜涓嶈兘澶т簬16浣�')
+        }
+        //鏍¢獙鏄暟瀛�
+        const regex1 = /^\d+$/
+        // 鏍¢獙瀛楁瘝
+        const regex2 = /^[A-Za-z]+$/
+        // 鏍¢獙绗﹀彿
+        const regex3 =
+            /^[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]路~锛丂#锟�%鈥︹��&*锛堬級鈥斺�擻-+={}|銆娿�嬶紵锛氣�溾�濄�愩�戙�侊紱鈥�'锛屻�傘�乚+$/
+        if(regex1.test(value)) {
+          this.level.push('low')
+          return callback('瀵嗙爜寮哄害杩囦綆')
+        }else if(regex2.test(value)) {
+          this.level.push('low')
+          return callback('瀵嗙爜寮哄害杩囦綆')
+        }else if(regex3.test(value)) {
+          this.level.push('low')
+          return callback('瀵嗙爜寮哄害杩囦綆')
+        }else if(/^[A-Za-z\d]+$/.test(value)) {
+          this.level.push('low')
+          this.level.push('middle')
+          return callback('瀵嗙爜寮哄害杩囦綆')
+        }else if(
+            /^[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]路~锛丂#锟�%鈥︹��&*锛堬級鈥斺�擻-+={}|銆娿�嬶紵锛氣�溾�濄�愩�戙�侊紱鈥�'锛屻�傘�乗d]+$/.test(
+                value
+            )
+        ) {
+          this.level.push('low')
+          this.level.push('middle')
+          return callback('瀵嗙爜寮哄害杩囦綆')
+        }else if(
+            /^[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]路~锛丂#锟�%鈥︹��&*锛堬級鈥斺�擻-+={}|銆娿�嬶紵锛氣�溾�濄�愩�戙�侊紱鈥�'锛屻�傘�丄-Za-z]+$/.test(
+                value
+            )
+        ) {
+          this.level.push('low')
+          this.level.push('middle')
+          return callback('瀵嗙爜寮哄害杩囦綆')
+        } else if (
+            /^[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]路~锛丂#锟�%鈥︹��&*锛堬級鈥斺�擻-+={}|銆娿�嬶紵锛氣�溾�濄�愩�戙�侊紱鈥�'锛屻�傘�丄-Za-z\d]+$/.test(
+                value
+            )
+        ) {
+          this.level.push('low')
+          this.level.push('middle')
+          this.level.push('high')
+        }
+        return callback()
+      };
 			return {
+        isShowPassword:true,
+        level:[],
 				userInfo: {},
 				checkboxValue: [],
 				inputType: 'password',
 				isFocus: false,
 				modelForm: {
+          originalPassword:'',  //鍘熷瘑鐮�
 					password: '',
-					secondPassword: ''
+					secondPassword: '',
+          username:'',
+          userId:''
 				},
 				processLoading: false,
 				rules: {
-					password: [{
-							type: 'string',
-							required: true,
-							message: '璇峰~鍐欏瘑鐮�',
-							trigger: ['blur', 'change']
-						},
-						{
-							min: 2,
-							max: 10,
-							message: '瀵嗙爜闀垮害搴斾笉灏忎簬2浣�,涓嶅ぇ浜�10浣�  ',
-							trigger: ['blur', 'change']
-						},
-						{
-							pattern: /^[a-zA-Z0-9_]+$/,
-							message: '璇疯緭鍏ユ纭牸寮忕殑瀵嗙爜',
-							trigger: ['blur', 'change']
-						}
-					],
-					secondPassword: [{
-							type: 'string',
-							required: true,
-							message: '璇峰~鍐欎簩娆″瘑鐮�',
-							trigger: ['blur', 'change']
-						},
-						{
-							min: 2,
-							max: 10,
-							message: '瀵嗙爜闀垮害搴斾笉灏忎簬2,涓嶅ぇ浜�10',
-							trigger: ['blur', 'change']
-						}
-					]
+          originalPassword: [{
+            type: 'string',
+            required: this.isShowPassword,
+            message: '璇峰~鍐欏瘑鐮�',
+            trigger: ['blur', 'change']
+          }
+          ],
+          password:[{
+            required: true,
+            validator: checkPassword,
+            trigger: 'change'
+          }],
+          secondPassword: [{
+            required: true,
+            validator: validatePass,
+            trigger: "blur"
+          }]
 				}
 			}
 		},
 		computed: {
 			roleType() {
 				return uni.getStorageSync('roleType')
-			}
+			},
+      userId() {
+        if(uni.getStorageSync('userId')) {
+          this.modelForm.userId = uni.getStorageSync('userId')
+        }
+        return uni.getStorageSync('userId')
+      }
 		},
 		onLoad(params) {
 			if (this.roleType === 3) {
 				this.userInfo = JSON.parse(params.userInfo)
 			} else {
-				this.getUserInfo(params.phone, params.idCard)
+				const query = JSON.parse(params.userInfo)
+				this.getUserInfo( query.phone, query.idCard)
 			}
-
+      if(params.userInfo) {
+        this.modelForm.username = JSON.parse(params.userInfo).username   //username
+        this.modelForm.userId = JSON.parse(params.userInfo).userId   //userId
+        if(JSON.parse(params.userInfo).isShowPassword) {
+          this.isShowPassword = false
+        }else {
+          this.isShowPassword = true
+        }
+      }else {
+        this.isShowPassword = true
+      }
 		},
 		onReady() {
 			this.$refs.uForm.setRules(this.rules)
@@ -139,12 +254,13 @@
 				this.isFocus = true
 			},
 			process() {
-				if (this.modelForm.password !== this.modelForm.secondPassword) return uni.$u.toast('瀵嗙爜涓嶄竴鑷�,璇锋鏌�')
-				this.userInfo.password = this.modelForm.secondPassword;
-				this.processLoading = true;
+				if(!this.level.includes('middle') &&  !this.level.includes('high')) {
+          return this.$u.toast('瀵嗙爜寮哄害澶急')
+        }
 				this.$refs.uForm.validate().then(res => {
-					this.$reqAllJson('appUpdateById', this
-						.userInfo, { method: 'PUT', 'Content-type': 'application/json' }).then(res => {
+          this.processLoading = true;
+          console.log(this.modelForm,'this.modelForm===鍙傛暟')
+					this.$reqAllJson('appUpdateById', this.modelForm, { method: 'PUT', 'Content-type': 'application/json' }).then(res => {
 						this.processLoading = false;
 						if (res.code === 0) {
 							this.$u.toast('淇敼鎴愬姛,鍗冲皢鍥炲埌棣栭〉')
@@ -156,9 +272,11 @@
 						} else {
 							this.$u.toast(res.msg ? res.msg : '淇敼澶辫触')
 						}
-					})
-				}).catch(errors => {
-					uni.$u.toast('鏍¢獙澶辫触')
+					}).catch(e => {
+            // uni.$u.toast('鏍¢獙澶辫触')
+          }).finally(() => {
+            this.processLoading = false;
+          })
 				})
 			}
 		}
@@ -174,5 +292,44 @@
 		.process-button {
 			margin-top: vww(20);
 		}
+    .intensity {
+      width: 100%;
+      margin-top: 10rpx;
+      .psdText {
+        font-size: 14px;
+        margin-right: 10px;
+      }
+
+      .line {
+        display: inline-block;
+        width: 70rpx;
+        height: 8rpx;
+        background: #d8d8d8;
+        border-radius: 6rpx;
+        margin-right: 16rpx;
+
+        &.low {
+          background: #f4664a;
+        }
+
+        &.middle {
+          background: #ffb700;
+        }
+
+        &.high {
+          background: #2cbb79;
+        }
+      }
+
+      .level {
+        margin: 0 32rpx 0 16rpx;
+      }
+
+      .warningtext {
+        color: #5a5a5a;
+        font-size: 24rpx;
+        margin-top: 10rpx;
+      }
+    }
 	}
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.9.1