|
|
@ -9,7 +9,7 @@ |
|
|
|
:size="104" |
|
|
|
:size="104" |
|
|
|
:src="userForm.model.avatar || '//cn.gravatar.com/avatar/?s=256&d=mm'" |
|
|
|
:src="userForm.model.avatar || '//cn.gravatar.com/avatar/?s=256&d=mm'" |
|
|
|
class="cursor-pointer" |
|
|
|
class="cursor-pointer" |
|
|
|
@click="attachmentSelect.visible = true" |
|
|
|
@click="handleOpenUpdateAvatarForm" |
|
|
|
/> |
|
|
|
/> |
|
|
|
</a-tooltip> |
|
|
|
</a-tooltip> |
|
|
|
<div class="mt-4 mb-1 text-xl font-medium leading-5" style="color: rgba(0, 0, 0, 0.85)"> |
|
|
|
<div class="mt-4 mb-1 text-xl font-medium leading-5" style="color: rgba(0, 0, 0, 0.85)"> |
|
|
@ -207,7 +207,7 @@ |
|
|
|
:width="400" |
|
|
|
:width="400" |
|
|
|
icon="safety-certificate" |
|
|
|
icon="safety-certificate" |
|
|
|
> |
|
|
|
> |
|
|
|
<template slot="footer"> |
|
|
|
<template #footer> |
|
|
|
<a-button key="back" @click="handleCloseMFAuthModal"> 取消</a-button> |
|
|
|
<a-button key="back" @click="handleCloseMFAuthModal"> 取消</a-button> |
|
|
|
<ReactiveButton |
|
|
|
<ReactiveButton |
|
|
|
key="submit" |
|
|
|
key="submit" |
|
|
@ -224,38 +224,47 @@ |
|
|
|
<a-form-model ref="mfaForm" :model="mfaParam" :rules="mfaParam.rules" layout="vertical"> |
|
|
|
<a-form-model ref="mfaForm" :model="mfaParam" :rules="mfaParam.rules" layout="vertical"> |
|
|
|
<a-form-model-item v-if="mfaUsed" label="两步验证码" prop="authcode"> |
|
|
|
<a-form-model-item v-if="mfaUsed" label="两步验证码" prop="authcode"> |
|
|
|
<a-input v-model="mfaParam.authcode" :maxLength="6"> |
|
|
|
<a-input v-model="mfaParam.authcode" :maxLength="6"> |
|
|
|
<a-icon slot="prefix" style="color: rgba(0, 0, 0, 0.25)" type="safety-certificate" /> |
|
|
|
<template #prefix> |
|
|
|
|
|
|
|
<a-icon style="color: rgba(0, 0, 0, 0.25)" type="safety-certificate" /> |
|
|
|
|
|
|
|
</template> |
|
|
|
</a-input> |
|
|
|
</a-input> |
|
|
|
</a-form-model-item> |
|
|
|
</a-form-model-item> |
|
|
|
<a-form-model-item v-if="!mfaUsed" :help="`MFAKey:${mfaParam.mfaKey}`" label="1. 请扫描二维码或导入 key"> |
|
|
|
<a-form-model-item v-if="!mfaUsed" :help="`MFAKey:${mfaParam.mfaKey}`" label="1. 请扫描二维码或导入 key"> |
|
|
|
<template slot="extra"> |
|
|
|
<template #extra> |
|
|
|
<span class="text-red-600" |
|
|
|
<span class="text-red-600"> |
|
|
|
>* 建议保存此二维码或 MFAKey,验证设备丢失将无法找回,只能通过重置密码关闭二步验证。</span |
|
|
|
* 建议保存此二维码或 MFAKey,验证设备丢失将无法找回,只能通过重置密码关闭二步验证。 |
|
|
|
> |
|
|
|
</span> |
|
|
|
</template> |
|
|
|
</template> |
|
|
|
<img :src="mfaParam.qrImage" width="100%" /> |
|
|
|
<img :src="mfaParam.qrImage" width="100%" /> |
|
|
|
</a-form-model-item> |
|
|
|
</a-form-model-item> |
|
|
|
<a-form-model-item v-if="!mfaUsed" label="2. 验证两步验证码" prop="authcode"> |
|
|
|
<a-form-model-item v-if="!mfaUsed" label="2. 验证两步验证码" prop="authcode"> |
|
|
|
<a-input v-model="mfaParam.authcode" :maxLength="6"> |
|
|
|
<a-input v-model="mfaParam.authcode" :maxLength="6"> |
|
|
|
<a-icon slot="prefix" style="color: rgba(0, 0, 0, 0.25)" type="safety-certificate" /> |
|
|
|
<template #prefix> |
|
|
|
|
|
|
|
<a-icon style="color: rgba(0, 0, 0, 0.25)" type="safety-certificate" /> |
|
|
|
|
|
|
|
</template> |
|
|
|
</a-input> |
|
|
|
</a-input> |
|
|
|
</a-form-model-item> |
|
|
|
</a-form-model-item> |
|
|
|
</a-form-model> |
|
|
|
</a-form-model> |
|
|
|
</a-modal> |
|
|
|
</a-modal> |
|
|
|
|
|
|
|
|
|
|
|
<AttachmentSelectModal |
|
|
|
<a-modal v-model="updateAvatarForm.visible" title="修改头像"> |
|
|
|
:multiSelect="false" |
|
|
|
<a-form layout="vertical"> |
|
|
|
:visible.sync="attachmentSelect.visible" |
|
|
|
<a-form-item label="头像链接:"> |
|
|
|
title="选择头像" |
|
|
|
<AttachmentInput ref="avatarInput" v-model="updateAvatarForm.avatar" /> |
|
|
|
@confirm="handleSelectAvatar" |
|
|
|
</a-form-item> |
|
|
|
/> |
|
|
|
</a-form> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<template #footer> |
|
|
|
|
|
|
|
<a-button type="primary" @click="handleUpdateAvatar">确定</a-button> |
|
|
|
|
|
|
|
<a-button @click="updateAvatarForm.visible = false">关闭</a-button> |
|
|
|
|
|
|
|
</template> |
|
|
|
|
|
|
|
</a-modal> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</template> |
|
|
|
</template> |
|
|
|
|
|
|
|
|
|
|
|
<script> |
|
|
|
<script> |
|
|
|
import apiClient from '@/utils/api-client' |
|
|
|
import apiClient from '@/utils/api-client' |
|
|
|
import { mapGetters, mapMutations } from 'vuex' |
|
|
|
import { mapGetters, mapMutations } from 'vuex' |
|
|
|
import MD5 from 'md5.js' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export default { |
|
|
|
export default { |
|
|
|
data() { |
|
|
|
data() { |
|
|
@ -270,6 +279,12 @@ export default { |
|
|
|
attachmentSelect: { |
|
|
|
attachmentSelect: { |
|
|
|
visible: false |
|
|
|
visible: false |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
updateAvatarForm: { |
|
|
|
|
|
|
|
avatar: undefined, |
|
|
|
|
|
|
|
visible: false, |
|
|
|
|
|
|
|
saving: false, |
|
|
|
|
|
|
|
saveErrored: false |
|
|
|
|
|
|
|
}, |
|
|
|
userForm: { |
|
|
|
userForm: { |
|
|
|
model: {}, |
|
|
|
model: {}, |
|
|
|
saving: false, |
|
|
|
saving: false, |
|
|
@ -431,17 +446,6 @@ export default { |
|
|
|
this.userForm.errored = false |
|
|
|
this.userForm.errored = false |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
}, |
|
|
|
handleSelectAvatar({ raw }) { |
|
|
|
|
|
|
|
if (raw.length) { |
|
|
|
|
|
|
|
this.userForm.model.avatar = encodeURI(raw[0].path) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
this.attachmentSelect.visible = false |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
handleSelectGravatar() { |
|
|
|
|
|
|
|
this.userForm.model.avatar = |
|
|
|
|
|
|
|
'//cn.gravatar.com/avatar/' + new MD5().update(this.userForm.model.email).digest('hex') + '&d=mm' |
|
|
|
|
|
|
|
this.attachmentSelect.visible = false |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
handleMFASwitch(useMFAuth) { |
|
|
|
handleMFASwitch(useMFAuth) { |
|
|
|
this.mfaParam.switch.loading = true |
|
|
|
this.mfaParam.switch.loading = true |
|
|
|
if (!useMFAuth && this.mfaUsed) { |
|
|
|
if (!useMFAuth && this.mfaUsed) { |
|
|
@ -508,6 +512,17 @@ export default { |
|
|
|
this.mfaParam.authcode = null |
|
|
|
this.mfaParam.authcode = null |
|
|
|
this.mfaParam.qrImage = null |
|
|
|
this.mfaParam.qrImage = null |
|
|
|
this.mfaParam.mfaKey = null |
|
|
|
this.mfaParam.mfaKey = null |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
handleOpenUpdateAvatarForm() { |
|
|
|
|
|
|
|
this.updateAvatarForm.avatar = this.userForm.model.avatar |
|
|
|
|
|
|
|
this.updateAvatarForm.visible = true |
|
|
|
|
|
|
|
this.$nextTick(() => { |
|
|
|
|
|
|
|
this.$refs.avatarInput.focus() |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
handleUpdateAvatar() { |
|
|
|
|
|
|
|
this.userForm.model.avatar = this.updateAvatarForm.avatar |
|
|
|
|
|
|
|
this.updateAvatarForm.visible = false |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|