|
@@ -6,34 +6,62 @@
|
|
|
}"
|
|
|
>
|
|
|
<div class="forget">
|
|
|
- <p class="title primaryColor">找回密码</p>
|
|
|
- <div class="form">
|
|
|
- <ul v-for="(item, index) in forgetInfo" :key="index">
|
|
|
- <li v-for="(sub, i) in item.arr" :key="i">
|
|
|
- <span :class="{ require: sub.required }">{{ sub.label }}:</span>
|
|
|
- <div class="input">
|
|
|
- <input
|
|
|
- :maxlength="sub.maxLength"
|
|
|
- v-model="sub.val"
|
|
|
- :placeholder="sub.validate"
|
|
|
- @blur="handleBlur(sub)"
|
|
|
- type="text"
|
|
|
- />
|
|
|
- </div>
|
|
|
- <span class="requiretxt primaryColor">
|
|
|
- <!-- {{ sub.showValidate && sub.required ? sub.validate : "" }} -->
|
|
|
- </span>
|
|
|
- </li>
|
|
|
- </ul>
|
|
|
- </div>
|
|
|
- <div class="button primarybtn" @click="comfirm">下一步</div>
|
|
|
+ <template v-if="!code">
|
|
|
+ <p class="title primaryColor">找回密码</p>
|
|
|
+ <div class="form">
|
|
|
+ <ul v-for="(item, index) in forgetInfo" :key="index">
|
|
|
+ <li v-for="(sub, i) in item.arr" :key="i">
|
|
|
+ <span :class="{ require: sub.required }">{{ sub.label }}:</span>
|
|
|
+ <div class="input">
|
|
|
+ <input
|
|
|
+ :maxlength="sub.maxLength"
|
|
|
+ v-model="sub.val"
|
|
|
+ type="text"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <span class="requiretxt primaryColor">
|
|
|
+ <!-- {{ sub.showValidate && sub.required ? sub.validate : "" }} -->
|
|
|
+ </span>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ </div>
|
|
|
+ <div class="button primarybtn" @click="comfirm">下一步</div>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template v-else>
|
|
|
+ <p class="title primaryColor">修改密码</p>
|
|
|
+ <div class="form">
|
|
|
+ <ul v-for="(item, index) in modifyInfo" :key="index">
|
|
|
+ <li v-for="(sub, i) in item.arr" :key="i">
|
|
|
+ <span :class="{ require: sub.required }">{{ sub.label }}:</span>
|
|
|
+ <div class="input">
|
|
|
+ <input
|
|
|
+ :maxlength="sub.maxLength"
|
|
|
+ v-model="sub.val"
|
|
|
+ :type="sub.type || 'text'"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <span class="requiretxt primaryColor">{{ sub.validate }}</span>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ </div>
|
|
|
+ <div class="button primarybtn" @click="modify">
|
|
|
+ 确认
|
|
|
+ <span v-if="hadsuccess" @click.stop>
|
|
|
+ <img :src="require('@/assets/images/success.png')" alt="" />
|
|
|
+ 修改成功</span
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-// import { encodeStr } from '@/config/utils'
|
|
|
-// import { Base64 } from 'js-base64'
|
|
|
+import { encodeStr } from "@/config/utils";
|
|
|
+import { Base64 } from "js-base64";
|
|
|
+
|
|
|
+import { checkCanEditPsd, updatePwd } from "@/config/api";
|
|
|
|
|
|
const forgetInfo = [
|
|
|
{
|
|
@@ -65,7 +93,33 @@ export default {
|
|
|
data() {
|
|
|
return {
|
|
|
forgetInfo,
|
|
|
- gender: 1,
|
|
|
+ modifyInfo: [
|
|
|
+ {
|
|
|
+ group: "user",
|
|
|
+ arr: [
|
|
|
+ {
|
|
|
+ label: "登录密码",
|
|
|
+ key: "newPassword",
|
|
|
+ required: true,
|
|
|
+ val: "",
|
|
|
+ type: "password",
|
|
|
+ validate:
|
|
|
+ "密码长度为6-12位,区分字母大小写。登录密码可以由字母、数字、特殊字符组成。",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "密码确认",
|
|
|
+ key: "comfirmPassword",
|
|
|
+ val: "",
|
|
|
+ required: true,
|
|
|
+ type: "password",
|
|
|
+ validate: "请再次输入密码。",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ code: "",
|
|
|
+ userName: "",
|
|
|
+ hadsuccess: false,
|
|
|
};
|
|
|
},
|
|
|
methods: {
|
|
@@ -74,6 +128,9 @@ export default {
|
|
|
},
|
|
|
reset() {
|
|
|
this.forgetInfo = forgetInfo;
|
|
|
+ this.modifyInfo = modifyInfo;
|
|
|
+ this.code = "";
|
|
|
+ this.userName = "";
|
|
|
},
|
|
|
async comfirm() {
|
|
|
let params = {};
|
|
@@ -82,29 +139,78 @@ export default {
|
|
|
for (let j = 0; j < item.length; j++) {
|
|
|
let sub = item[j];
|
|
|
params[sub["key"]] = sub["val"];
|
|
|
- console.log(sub["key"], sub.showValidate && sub.required);
|
|
|
- if (sub.showValidate && sub.required) {
|
|
|
+ if (!params[sub["key"]] && sub.required) {
|
|
|
return alert("请补充信息");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // params.password encodeStr(Base64.encode(this.password)),
|
|
|
-
|
|
|
- let result = await this.$http({
|
|
|
- method: "post",
|
|
|
- data: params,
|
|
|
- url: "/api/web/resetPassword",
|
|
|
+ checkCanEditPsd(params, (res) => {
|
|
|
+ if (res.data) {
|
|
|
+ this.code = res.data;
|
|
|
+ this.userName = params.userName;
|
|
|
+ } else {
|
|
|
+ alert("注册姓名与身份码不匹配,请重新输入");
|
|
|
+ }
|
|
|
});
|
|
|
- if (result.code === 0) {
|
|
|
- alert("密码已重置为初始密码");
|
|
|
- this.reset();
|
|
|
- this.$router.push({ path: "/" });
|
|
|
- setTimeout(() => {
|
|
|
- window.scrollTo(0, 0);
|
|
|
- this.$bus.$emit("showLogin", true);
|
|
|
- }, 1000);
|
|
|
+ },
|
|
|
+ modify() {
|
|
|
+ let params = {};
|
|
|
+ for (let i = 0; i < this.modifyInfo.length; i++) {
|
|
|
+ let item = this.modifyInfo[i].arr;
|
|
|
+ for (let j = 0; j < item.length; j++) {
|
|
|
+ let sub = item[j];
|
|
|
+ params[sub["key"]] = sub["val"];
|
|
|
+ if (!params[sub["key"]] && sub.required) {
|
|
|
+ return alert("请补充信息");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (
|
|
|
+ !(params.newPassword.length >= 6 && params.newPassword.length <= 12)
|
|
|
+ ) {
|
|
|
+ return alert("密码长度需为6-12位");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (params["newPassword"] !== params["comfirmPassword"]) {
|
|
|
+ return alert("两次输入的密码不一致");
|
|
|
}
|
|
|
+
|
|
|
+ updatePwd(
|
|
|
+ {
|
|
|
+ code: this.code,
|
|
|
+ newPassword: encodeStr(Base64.encode(params.newPassword)),
|
|
|
+ userName: this.userName,
|
|
|
+ },
|
|
|
+ () => {
|
|
|
+ this.modifyInfo = [
|
|
|
+ {
|
|
|
+ group: "user",
|
|
|
+ arr: [
|
|
|
+ {
|
|
|
+ label: "登录密码",
|
|
|
+ key: "newPassword",
|
|
|
+ required: true,
|
|
|
+ val: "",
|
|
|
+ type: "password",
|
|
|
+ validate:
|
|
|
+ "密码长度为6-12位,区分字母大小写。登录密码可以由字母、数字、特殊字符组成。",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "密码确认",
|
|
|
+ key: "comfirmPassword",
|
|
|
+ val: "",
|
|
|
+ required: true,
|
|
|
+ type: "password",
|
|
|
+ validate: "请再次输入密码。",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ ];
|
|
|
+ this.hadsuccess = true;
|
|
|
+ }
|
|
|
+ );
|
|
|
},
|
|
|
},
|
|
|
};
|
|
@@ -143,6 +249,7 @@ export default {
|
|
|
margin-bottom: 20px;
|
|
|
.input {
|
|
|
border: #ebebeb 1px solid;
|
|
|
+ width: 320px;
|
|
|
}
|
|
|
> span {
|
|
|
display: inline-block;
|
|
@@ -169,6 +276,24 @@ export default {
|
|
|
.button {
|
|
|
width: 280px;
|
|
|
margin-top: 40px;
|
|
|
+ position: relative;
|
|
|
+ span {
|
|
|
+ position: absolute;
|
|
|
+ left: 280px;
|
|
|
+ min-width: 180px;
|
|
|
+ color: #000;
|
|
|
+ display: inline-block;
|
|
|
+ vertical-align: middle;
|
|
|
+ cursor: auto;
|
|
|
+ img {
|
|
|
+ width: 24px;
|
|
|
+ height: 24px;
|
|
|
+ position: relative;
|
|
|
+ top: -2px;
|
|
|
+ margin-right: 4px;
|
|
|
+ vertical-align: middle;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|