index.vue 3.3 KB

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