setPassword.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <template>
  2. <div class="set-password-container">
  3. <!-- 将el-dialog改为直接显示 -->
  4. <div class="password-dialog">
  5. <div class="password-header">
  6. <span>设置密码</span>
  7. </div>
  8. <div class="password-body">
  9. <el-form ref="passwordForm" :model="form" label-position="right" :rules="rules" label-width="100px">
  10. <el-form-item label="旧密码" prop="oldPassword">
  11. <el-input v-model="form.oldPassword" type="password" show-password></el-input>
  12. </el-form-item>
  13. <el-form-item label="新密码" prop="newPassword">
  14. <el-input v-model="form.newPassword" type="password" show-password></el-input>
  15. </el-form-item>
  16. <el-form-item label="确认密码" prop="confirmPassword">
  17. <el-input v-model="form.confirmPassword" type="password" show-password></el-input>
  18. </el-form-item>
  19. </el-form>
  20. </div>
  21. <div class="password-footer">
  22. <el-button @click="submitNewPassword">确 定</el-button>
  23. <el-button @click="cancelSetPassword">取 消</el-button>
  24. </div>
  25. </div>
  26. </div>
  27. </template>
  28. <script>
  29. import { updateUserPwd } from "@/api/company/companyUser";
  30. import { removeToken } from "@/utils/auth";
  31. export default {
  32. name: "SetPassword",
  33. data() {
  34. const validateConfirmPass = (rule, value, callback) => {
  35. if (value !== this.form.newPassword) {
  36. callback(new Error("两次输入的密码不一致"));
  37. } else {
  38. callback();
  39. }
  40. };
  41. return {
  42. form: {
  43. oldPassword: "",
  44. newPassword: "",
  45. confirmPassword: ""
  46. },
  47. rules: {
  48. oldPassword: [
  49. {required: true, message: "旧密码不能为空", trigger: "blur"}
  50. ],
  51. newPassword: [
  52. {required: true, message: "新密码不能为空", trigger: "blur"},
  53. {
  54. pattern: /^(?=.*[A-Za-z])(?=.*\d)(?=.*[^A-Za-z0-9]).{8,20}$/,
  55. message: "密码长度为 8-20 位,必须包含字母、数字和特殊字符",
  56. trigger: ["blur", "change"],
  57. }
  58. ],
  59. confirmPassword: [
  60. {required: true, message: "确认密码不能为空", trigger: "blur"},
  61. {validator: validateConfirmPass, trigger: "blur"}
  62. ]
  63. },
  64. };
  65. },
  66. methods: {
  67. submitNewPassword() {
  68. this.$refs.passwordForm.validate(valid => {
  69. if (valid) {
  70. // 调用API设置新密码
  71. updateUserPwd(this.form.oldPassword, this.form.newPassword).then(res => {
  72. if (res.code === 200) {
  73. this.$message.success('密码设置成功');
  74. // 更新首次登录状态
  75. localStorage.setItem('isFirstLogin', 'false');
  76. // 清除token等信息
  77. this.cancelSetPassword();
  78. } else {
  79. this.$message.error(res.message || '密码设置失败')
  80. }
  81. })
  82. }
  83. });
  84. },
  85. cancelSetPassword() {
  86. // 清除token等信息
  87. removeToken()
  88. // 跳转到登录页面
  89. this.$router.push('/login')
  90. }
  91. }
  92. }
  93. </script>
  94. <style scoped>
  95. .set-password-container {
  96. display: flex;
  97. justify-content: center;
  98. align-items: center;
  99. height: 100vh;
  100. background-color: #f5f7fa;
  101. }
  102. .password-dialog {
  103. width: 400px;
  104. background: #fff;
  105. border-radius: 4px;
  106. box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
  107. overflow: hidden;
  108. }
  109. .password-header {
  110. padding: 15px;
  111. border-bottom: 1px solid #ebeef5;
  112. font-size: 16px;
  113. font-weight: bold;
  114. color: #1f2d3d;
  115. }
  116. .password-body {
  117. padding: 20px;
  118. }
  119. .password-footer {
  120. padding: 10px 20px;
  121. text-align: right;
  122. border-top: 1px solid #ebeef5;
  123. }
  124. </style>