feat: add Space aggregate login
This commit is contained in:
@@ -25,6 +25,26 @@ const errorText = ref('')
|
||||
const successTitle = ref('')
|
||||
const successDesc = ref('')
|
||||
|
||||
const socialPendingKeys = {
|
||||
token: 'zsglpt_social_pending_bind_token',
|
||||
provider: 'zsglpt_social_pending_bind_provider',
|
||||
nickname: 'zsglpt_social_pending_bind_nickname',
|
||||
avatar: 'zsglpt_social_pending_bind_avatar_url',
|
||||
}
|
||||
|
||||
const providerLabels = {
|
||||
qq: 'QQ',
|
||||
wx: '微信',
|
||||
alipay: '支付宝',
|
||||
}
|
||||
|
||||
const pendingSocial = reactive({
|
||||
token: '',
|
||||
provider: '',
|
||||
nickname: '',
|
||||
avatar_url: '',
|
||||
})
|
||||
|
||||
const emailLabel = computed(() => (emailVerifyEnabled.value ? '邮箱 *' : '邮箱(可选)'))
|
||||
const emailHint = computed(() => (emailVerifyEnabled.value ? '必填,用于账号验证' : '选填,用于找回密码和接收通知'))
|
||||
|
||||
@@ -55,6 +75,35 @@ function clearAlerts() {
|
||||
successDesc.value = ''
|
||||
}
|
||||
|
||||
function loadPendingSocialBind() {
|
||||
try {
|
||||
pendingSocial.token = window.sessionStorage.getItem(socialPendingKeys.token) || ''
|
||||
pendingSocial.provider = window.sessionStorage.getItem(socialPendingKeys.provider) || ''
|
||||
pendingSocial.nickname = window.sessionStorage.getItem(socialPendingKeys.nickname) || ''
|
||||
pendingSocial.avatar_url = window.sessionStorage.getItem(socialPendingKeys.avatar) || ''
|
||||
if (pendingSocial.nickname && !form.username) {
|
||||
form.username = pendingSocial.nickname.replace(/[^\w\u4e00-\u9fa5]/g, '').slice(0, 20)
|
||||
}
|
||||
} catch {
|
||||
pendingSocial.token = ''
|
||||
pendingSocial.provider = ''
|
||||
pendingSocial.nickname = ''
|
||||
pendingSocial.avatar_url = ''
|
||||
}
|
||||
}
|
||||
|
||||
function clearPendingSocialBind() {
|
||||
try {
|
||||
Object.values(socialPendingKeys).forEach((key) => window.sessionStorage.removeItem(key))
|
||||
} catch {
|
||||
// ignore storage failures
|
||||
}
|
||||
pendingSocial.token = ''
|
||||
pendingSocial.provider = ''
|
||||
pendingSocial.nickname = ''
|
||||
pendingSocial.avatar_url = ''
|
||||
}
|
||||
|
||||
async function onSubmit() {
|
||||
clearAlerts()
|
||||
|
||||
@@ -104,11 +153,15 @@ async function onSubmit() {
|
||||
email,
|
||||
captcha_session: captchaSession.value,
|
||||
captcha,
|
||||
social_bind_token: pendingSocial.token || undefined,
|
||||
})
|
||||
|
||||
successTitle.value = res?.message || '注册成功'
|
||||
successDesc.value = res?.need_verify ? '请检查您的邮箱(包括垃圾邮件文件夹)' : ''
|
||||
ElMessage.success('注册成功')
|
||||
if (pendingSocial.token) {
|
||||
clearPendingSocialBind()
|
||||
}
|
||||
|
||||
form.username = ''
|
||||
form.password = ''
|
||||
@@ -134,6 +187,7 @@ function goLogin() {
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
loadPendingSocialBind()
|
||||
await refreshCaptcha()
|
||||
await loadEmailVerifyStatus()
|
||||
})
|
||||
@@ -158,6 +212,15 @@ onMounted(async () => {
|
||||
class="alert"
|
||||
/>
|
||||
|
||||
<el-alert
|
||||
v-if="pendingSocial.token"
|
||||
type="info"
|
||||
:closable="false"
|
||||
show-icon
|
||||
class="alert"
|
||||
:title="`注册后绑定${providerLabels[pendingSocial.provider] || '快捷登录'}`"
|
||||
/>
|
||||
|
||||
<el-form label-position="top">
|
||||
<el-form-item label="用户名 *">
|
||||
<el-input v-model="form.username" placeholder="至少3个字符" autocomplete="username" />
|
||||
|
||||
Reference in New Issue
Block a user