feat: 添加用户类型字段到注册表单,并优化注册加载状态

This commit is contained in:
AN 2025-05-20 12:41:16 +08:00
parent 6589f3d0e5
commit ec36d089d1
2 changed files with 26 additions and 7 deletions

View File

@ -132,6 +132,8 @@ declare namespace Api {
password?: string; password?: string;
/** 确认密码 */ /** 确认密码 */
confirmPassword?: string; confirmPassword?: string;
/** 用户类型 */
userType?: string;
} }
/** login token data */ /** login token data */

View File

@ -14,6 +14,7 @@ defineOptions({
const { toggleLoginModule } = useRouterPush(); const { toggleLoginModule } = useRouterPush();
const { formRef, validate } = useNaiveForm(); const { formRef, validate } = useNaiveForm();
const { loading: codeLoading, startLoading: startCodeLoading, endLoading: endCodeLoading } = useLoading(); const { loading: codeLoading, startLoading: startCodeLoading, endLoading: endCodeLoading } = useLoading();
const { loading: registerLoading, startLoading: startRegisterLoading, endLoading: endRegisterLoading } = useLoading();
const codeUrl = ref<string>(); const codeUrl = ref<string>();
const captchaEnabled = ref<boolean>(false); const captchaEnabled = ref<boolean>(false);
@ -25,7 +26,8 @@ const model: Api.Auth.RegisterForm = reactive({
username: '', username: '',
code: '', code: '',
password: '', password: '',
confirmPassword: '' confirmPassword: '',
userType: 'sys_user'
}); });
type RuleKey = Extract<keyof Api.Auth.RegisterForm, 'username' | 'password' | 'confirmPassword' | 'code' | 'tenantId'>; type RuleKey = Extract<keyof Api.Auth.RegisterForm, 'username' | 'password' | 'confirmPassword' | 'code' | 'tenantId'>;
@ -43,9 +45,9 @@ const rules = computed<Record<RuleKey, App.Global.FormRule[]>>(() => {
}); });
async function handleSubmit() { async function handleSubmit() {
await validate();
try { try {
// request to register await validate();
startRegisterLoading();
const { error } = await fetchRegister({ const { error } = await fetchRegister({
tenantId: model.tenantId, tenantId: model.tenantId,
username: model.username, username: model.username,
@ -53,12 +55,20 @@ async function handleSubmit() {
code: model.code, code: model.code,
uuid: model.uuid, uuid: model.uuid,
grantType: 'password', grantType: 'password',
userType: model.userType,
clientId: import.meta.env.VITE_APP_CLIENT_ID clientId: import.meta.env.VITE_APP_CLIENT_ID
}); });
if (error) return; if (error) {
handleFetchCaptchaCode();
return;
}
window.$message?.success('注册成功'); window.$message?.success('注册成功');
//
toggleLoginModule('pwd-login');
} catch { } catch {
handleFetchCaptchaCode(); handleFetchCaptchaCode();
} finally {
endRegisterLoading();
} }
} }
@ -93,9 +103,16 @@ handleFetchCaptchaCode();
</script> </script>
<template> <template>
<NForm ref="formRef" :model="model" :rules="rules" size="large" :show-label="false" @keyup.enter="handleSubmit"> <NForm
ref="formRef"
:model="model"
:rules="rules"
size="large"
:show-label="false"
@keyup.enter="() => !registerLoading && handleSubmit()"
>
<NFormItem v-if="tenantEnabled" path="tenantId"> <NFormItem v-if="tenantEnabled" path="tenantId">
<TenantSelect v-model:value="model.tenantId" :enabled="tenantEnabled" /> <NSelect v-model:value="model.tenantId" :options="tenantOption" :enabled="tenantEnabled" />
</NFormItem> </NFormItem>
<NFormItem path="username"> <NFormItem path="username">
<NInput v-model:value="model.username" :placeholder="$t('page.login.common.userNamePlaceholder')" /> <NInput v-model:value="model.username" :placeholder="$t('page.login.common.userNamePlaceholder')" />
@ -128,7 +145,7 @@ handleFetchCaptchaCode();
</div> </div>
</NFormItem> </NFormItem>
<NSpace vertical :size="18" class="w-full"> <NSpace vertical :size="18" class="w-full">
<NButton type="primary" size="large" block @click="handleSubmit"> <NButton type="primary" size="large" block :loading="registerLoading" @click="handleSubmit">
{{ $t('page.login.common.register') }} {{ $t('page.login.common.register') }}
</NButton> </NButton>
<NButton size="large" block @click="toggleLoginModule('pwd-login')"> <NButton size="large" block @click="toggleLoginModule('pwd-login')">