pwd.vue 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. <template>
  2. <div class="sld_login">
  3. <div class="sld_login_header">
  4. <div class="content">
  5. <router-link tag="a" class="l_logo" :to="`/`">
  6. <img
  7. class="img"
  8. :src="filtersStore.getSiteLogo"
  9. :onerror="defaultImg"
  10. alt
  11. />
  12. </router-link>
  13. <div class="r_register_wrap">
  14. {{ L["想起密码?"] }}
  15. <a
  16. href="javascript:void(0)"
  17. class="go_register_btn"
  18. @click="goToPage('/login')"
  19. >
  20. {{ L["去登录"] }}
  21. </a>
  22. </div>
  23. </div>
  24. </div>
  25. <div class="sld_login_content">
  26. <img
  27. class="bg"
  28. :src="ImgBG? ImgBG : configInfo.main_user_forget_password_bg + ''"
  29. :onerror="defaultBgImg"
  30. alt
  31. />
  32. <div class="login">
  33. <div class="login_box">
  34. <div class="top">
  35. <div class="item1">{{ L["找回密码"] }}</div>
  36. </div>
  37. <div class="center">
  38. <div class="item account">
  39. <span
  40. style="color: #bbb; font-size: 21px; padding-top: 7px"
  41. class="icon iconfont icon-wode"
  42. ></span>
  43. <input
  44. type="text"
  45. v-model="memberEmail"
  46. :placeholder="L['请输入邮箱']"
  47. class="input"
  48. :disabled="emailDisabled"
  49. />
  50. <div
  51. data-type="userName"
  52. class="cancel"
  53. @click="clearInputVal('memberEmail')"
  54. :style="{ display: emailDisabled == true ? 'none' : 'block' }"
  55. >
  56. <span style="color: #bbb" class="iconfont icon-cuowu"></span>
  57. </div>
  58. </div>
  59. <div class="item password">
  60. <span
  61. style="color: #bbb; font-size: 18px; padding-top: 8px"
  62. class="icon iconfont icon-yanzhengma2"
  63. ></span>
  64. <input
  65. type="text"
  66. v-model="imgCode"
  67. :placeholder="L['请输入图形验证码']"
  68. class="input"
  69. />
  70. <img :src="showCodeImg" class="img_code" @click="getImgCode" />
  71. </div>
  72. <div class="item password">
  73. <span
  74. style="color: #bbb; font-size: 21px; padding-top: 7px"
  75. class="icon iconfont icon-mima1"
  76. ></span>
  77. <input
  78. :type="showPwdFlag ? 'text' : 'password'"
  79. v-model="password"
  80. :placeholder="L['请输入6~20位英文、数字、符号']"
  81. class="input"
  82. />
  83. <div class="cancel" @click="isShowPwd">
  84. <span
  85. :style="{
  86. color: '#bbb',
  87. fontSize: showPwdFlag ? '20px' : '16px',
  88. }"
  89. :class="{
  90. iconfont: true,
  91. 'icon-bukejian11': !showPwdFlag,
  92. 'icon-kejian': showPwdFlag,
  93. show_pwd: showPwdFlag,
  94. }"
  95. ></span>
  96. </div>
  97. </div>
  98. <div class="error">
  99. <span
  100. v-if="errorMsg"
  101. style="color: #e1251b; font-size: 14px"
  102. class="iconfont icon-jubao"
  103. ></span>
  104. {{ errorMsg }}
  105. </div>
  106. <a href="javascript:void(0)" @click="forgetPwd" class="login_btn">{{
  107. L["找回密码"]
  108. }}</a>
  109. </div>
  110. </div>
  111. </div>
  112. </div>
  113. </div>
  114. </template>
  115. <script setup>
  116. import { useRoute, useRouter } from "vue-router";
  117. import { ref, getCurrentInstance, onMounted, watch } from "vue";
  118. import { ElMessage } from "element-plus";
  119. // import { lang_zn } from "@/assets/language/zh";
  120. import { getCurLanguage } from '@/composables/common.js';
  121. import { useUserInfo } from "@/store/user.js";
  122. import { useFiltersStore } from "@/store/filter.js";
  123. const filtersStore = useFiltersStore();
  124. const configInfo = useUserInfo();
  125. // const L = lang_zn;
  126. const L = getCurLanguage();
  127. const memberEmail = ref(""); //用户邮箱
  128. const password = ref(""); //密码
  129. const route = useRoute();
  130. const errorMsg = ref(); //错误提示
  131. const router = useRouter();
  132. const { proxy } = getCurrentInstance();
  133. const showPwdFlag = ref(false); //密码是否明文显示,默认密文
  134. const showCodeImg = ref(""); //图形验证码图片
  135. const imgCodeKey = ref(""); //图形验证码的key
  136. const imgCode = ref(""); //图形验证码
  137. const defaultImg = ref("/common_top_logo.png");
  138. const defaultBgImg = ref("/assets/forget_pwd_bg.png");
  139. const resetEmailVal = ref("");
  140. const resetEmailCode = ref("");
  141. const emailDisabled = ref(false);
  142. const ImgBG = ref('')
  143. useHead({
  144. title: 'Forget Password',
  145. meta: [
  146. {
  147. name: "description",
  148. content: 'Forget Password',
  149. },
  150. {
  151. name: "keywords",
  152. content: 'Forget Password',
  153. },
  154. ],
  155. });
  156. //获取背景图
  157. const getBg = () => {
  158. get('v3/system/front/setting/getSettings?names=main_user_forget_password_bg').then(res=>{
  159. ImgBG.value = res.data[0]
  160. })
  161. }
  162. getBg()
  163. const forgetPwd = () => {
  164. let param = {};
  165. param.email = memberEmail.value;
  166. param.code = resetEmailCode.value;
  167. param.loginPwd = password.value;
  168. param.verifyCode = imgCode.value;
  169. param.verifyKey = imgCodeKey.value;
  170. //邮箱验证
  171. if (!param.email) {
  172. errorMsg.value = L["请输入邮箱"];
  173. return false;
  174. } else {
  175. let checkEmailVal = checkEmail(param.email);
  176. if (checkEmailVal !== true) {
  177. errorMsg.value = checkEmailVal;
  178. return;
  179. } else {
  180. errorMsg.value = "";
  181. }
  182. }
  183. //验证码校验
  184. let checkImgCodeVal = checkImgCode(param.verifyCode);
  185. if (checkImgCodeVal !== true) {
  186. errorMsg.value = checkImgCodeVal;
  187. return false;
  188. }
  189. //密码校验
  190. if (!param.loginPwd) {
  191. errorMsg.value = L["请输入密码"];
  192. return false;
  193. } else {
  194. let checkPwdVal = checkPwd(param.loginPwd);
  195. if (checkPwdVal !== true) {
  196. errorMsg.value = checkPwdVal;
  197. return false;
  198. }
  199. }
  200. post("v3/member/front/active/email/reset/pwd", param).then((res) => {
  201. if (res.state == 200) {
  202. //成功提示,并返回到登录页面
  203. ElMessage.success(res.msg);
  204. setTimeout(() => {
  205. goToPage("/login");
  206. }, 500);
  207. } else {
  208. //提示错误
  209. errorMsg.value = res.msg;
  210. }
  211. });
  212. };
  213. //清空输入框内容
  214. const clearInputVal = (type) => {
  215. if (type == "memberEmail") {
  216. memberEmail.value = "";
  217. }
  218. };
  219. //密码是否显示
  220. const isShowPwd = () => {
  221. showPwdFlag.value = !showPwdFlag.value;
  222. };
  223. watch([memberEmail, imgCode, password], () => {
  224. imgCode.value = imgCode.value.substring(0, 4);
  225. password.value = password.value.substring(0, 20);
  226. if (imgCode.value || memberEmail.value) {
  227. errorMsg.value = "";
  228. }
  229. });
  230. //获取图形验证码
  231. const getImgCode = () => {
  232. get("v3/captcha/common/getCaptcha", {}).then((res) => {
  233. if (res.state == 200) {
  234. showCodeImg.value = "data:image/png;base64," + res.data.captcha;
  235. imgCodeKey.value = res.data.key;
  236. }
  237. });
  238. };
  239. //通过replace方式跳转页面
  240. const goToPage = (type) => {
  241. router.replace({
  242. path: type,
  243. });
  244. };
  245. onMounted(() => {
  246. getImgCode(); //获取图形验证码
  247. document.body.classList.remove("el-popup-parent--hidden");
  248. resetEmailVal.value = route.query.email;
  249. resetEmailCode.value = route.query.code;
  250. // activeEmailId.value = route.query.id;
  251. if (
  252. resetEmailVal.value != "" &&
  253. resetEmailVal.value != null &&
  254. resetEmailVal.value != undefined
  255. ) {
  256. memberEmail.value = resetEmailVal.value;
  257. emailDisabled.value = true;
  258. }
  259. });
  260. </script>
  261. <style lang="scss" scoped>
  262. /*@import "../../../style/forgetPassword.scss";*/
  263. @import "@/assets/style/register.scss";
  264. .el-popup-parent--hidden {
  265. overflow: visible;
  266. }
  267. input[type="number"] {
  268. -moz-appearance: textfield;
  269. }
  270. input[type="number"]::-webkit-inner-spin-button,
  271. input[type="number"]::-webkit-outer-spin-button {
  272. -webkit-appearance: none;
  273. margin: 0;
  274. }
  275. </style>