index.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <!-- -->
  2. <template>
  3. <v-card class="pa-5 d-flex flex-column align-center" :class="{'card-box': !props.hideWidth}" :elevation="props.elevation">
  4. <div class="resume-header mt-15 mb-8" style="width: 700px;">
  5. <div class="resume-title">修改登录密码</div>
  6. </div>
  7. <CtForm ref="CtFormRef" :items="formItems" style="width: 700px;"></CtForm>
  8. <div class="mb-15">
  9. <v-btn class="buttons mt-5" color="primary" :loading="loading" @click.stop="handleCommit">保存</v-btn>
  10. <div v-if="!props.hideGoBack" style="text-align: center;">
  11. <v-btn class="mt-3" color="primary" variant="text" @click="router.go(-1)">返回</v-btn>
  12. </div>
  13. </div>
  14. </v-card>
  15. <Loading :visible="overlay"></Loading>
  16. </template>
  17. <script setup>
  18. import { ref } from 'vue'
  19. import Snackbar from '@/plugins/snackbar'
  20. // import { useI18n } from '@/hooks/web/useI18n'
  21. import { useRouter } from 'vue-router'; const router = useRouter()
  22. import { entUpdatePassword } from '@/api/enterprise'
  23. const props = defineProps({
  24. entChangePassword: {
  25. type: Boolean,
  26. default: false
  27. },
  28. hideGoBack: {
  29. type: Boolean,
  30. default: false
  31. },
  32. hideWidth: {
  33. type: Boolean,
  34. default: false
  35. },
  36. elevation: {
  37. type: String,
  38. default: '2'
  39. }
  40. })
  41. defineOptions({name: 'staff-changePassword'})
  42. // const { t } = useI18n() // 强制修改密码不能使用
  43. const CtFormRef = ref()
  44. const formItems = ref({
  45. options: [
  46. {
  47. type: 'text',
  48. key: 'password',
  49. value: '',
  50. label: '请输入新密码 *',
  51. rules: [
  52. value => {
  53. if (value) return true
  54. return '请输入新密码'
  55. },
  56. value => {
  57. if (!(/^[\s]+$/.test(value))) return true
  58. return '请输入新密码'
  59. },
  60. value => {
  61. if (/^.{8,}$/.test(value)) return true
  62. return '请输入至少8位数的密码'
  63. }
  64. ]
  65. },
  66. {
  67. type: 'text',
  68. key: 'passwordConfirm',
  69. value: '',
  70. label: '请再次输入新密码 *',
  71. rules: [
  72. value => {
  73. if (value) return true
  74. return '请再次输入新密码'
  75. },
  76. value => {
  77. if (!(/^[\s]+$/.test(value))) return true
  78. return '请再次输入新密码'
  79. },
  80. value => {
  81. if (/^.{8,}$/.test(value)) return true
  82. return '请输入至少8位数的密码'
  83. }
  84. ]
  85. },
  86. ]
  87. })
  88. const loading = ref(false)
  89. const handleCommit = async () => {
  90. const { valid } = await CtFormRef.value.formRef.validate()
  91. if (!valid) return
  92. const params = {}
  93. const baseInfo = JSON.parse(localStorage.getItem('entBaseInfo') || "null") || null
  94. if (baseInfo?.id) params.id = baseInfo.id
  95. formItems.value.options.forEach(e => { params[e.key] = e.value })
  96. // 邮箱登录密码校验
  97. if (params.password !== params.passwordConfirm) return Snackbar.warning('两次输入的密码不一致,请确认')
  98. loading.value = true
  99. await entUpdatePassword(params)
  100. Snackbar.success('修改成功')
  101. if (props.entChangePassword) {
  102. localStorage.setItem('entUpdatePassword', 'doNotNeedChange')
  103. setTimeout(() => {
  104. loading.value = false
  105. window.location.href = '/recruit/enterprise'
  106. }, 1500)
  107. } else {
  108. loading.value = false
  109. router.go(-1)
  110. }
  111. }
  112. </script>
  113. <style lang="scss" scoped>
  114. </style>