实现注册功能

This commit is contained in:
scholar 2024-09-10 11:35:49 +08:00
parent 2205526a79
commit b2dd170884
2 changed files with 74 additions and 55 deletions

View File

@ -19,7 +19,6 @@ export const login = (data: UserLoginVO) => {
// 注册 // 注册
export const register = (data: RegisterVO) => { export const register = (data: RegisterVO) => {
console.log("data: RegisterVO=========",data)
return request.post({ url: '/system/auth/register', data }) return request.post({ url: '/system/auth/register', data })
} }

View File

@ -37,6 +37,16 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24" style="padding-right: 10px; padding-left: 10px">
<el-form-item prop="username">
<el-input
v-model="registerData.registerForm.nickname"
placeholder="昵称"
size="large"
:prefix-icon="iconAvatar"
/>
</el-form-item>
</el-col>
<el-col :span="24" style="padding-right: 10px; padding-left: 10px"> <el-col :span="24" style="padding-right: 10px; padding-left: 10px">
<el-form-item prop="password"> <el-form-item prop="password">
<el-input <el-input
@ -86,7 +96,7 @@
</el-form> </el-form>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import {ElLoading, ElMessageBox} from 'element-plus' import { ElLoading } from 'element-plus'
import LoginFormTitle from './LoginFormTitle.vue' import LoginFormTitle from './LoginFormTitle.vue'
import type { RouteLocationNormalizedLoaded } from 'vue-router' import type { RouteLocationNormalizedLoaded } from 'vue-router'
import { useIcon } from '@/hooks/web/useIcon' import { useIcon } from '@/hooks/web/useIcon'
@ -110,35 +120,37 @@ const loginLoading = ref(false)
const verify = ref() const verify = ref()
const captchaType = ref('blockPuzzle') // blockPuzzle clickWord const captchaType = ref('blockPuzzle') // blockPuzzle clickWord
const getShow = computed(() => unref(getLoginState) === LoginStateEnum.REGISTER) const getShow = computed(() => unref(getLoginState) === LoginStateEnum.REGISTER)
const equalToPassword = (rule, value, callback) => { const equalToPassword = (rule, value, callback) => {
if (registerData.registerForm.password !== value) { if (registerData.registerForm.password !== value) {
callback(new Error("两次输入的密码不一致")); callback(new Error('两次输入的密码不一致'))
} else { } else {
callback(); callback()
}
} }
};
const registerRules = { const registerRules = {
tenantName: [ tenantName: [
{ required: true, trigger: "blur", message: "请输入您所属的租户" }, { required: true, trigger: 'blur', message: '请输入您所属的租户' },
{ min: 2, max: 20, message: "租户账号长度必须介于 2 和 20 之间", trigger: "blur" } { min: 2, max: 20, message: '租户账号长度必须介于 2 和 20 之间', trigger: 'blur' }
], ],
username: [ username: [
{ required: true, trigger: "blur", message: "请输入您的账号" }, { required: true, trigger: 'blur', message: '请输入您的账号' },
{ min: 2, max: 20, message: "用户账号长度必须介于 2 和 20 之间", trigger: "blur" } { min: 4, max: 30, message: '用户账号长度必须介于 4 和 30 之间', trigger: 'blur' }
],
nickname: [
{ required: true, trigger: 'blur', message: '请输入您的昵称' },
{ min: 0, max: 30, message: '昵称长度必须介于 0 和 30 之间', trigger: 'blur' }
], ],
password: [ password: [
{ required: true, trigger: "blur", message: "请输入您的密码" }, { required: true, trigger: 'blur', message: '请输入您的密码' },
{ min: 5, max: 20, message: "用户密码长度必须介于 5 和 20 之间", trigger: "blur" }, { min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' },
{ pattern: /^[^<>"'|\\]+$/, message: "不能包含非法字符:< > \" ' \\\ |", trigger: "blur" } { pattern: /^[^<>"'|\\]+$/, message: '不能包含非法字符:< > " \' \\\ |', trigger: 'blur' }
], ],
confirmPassword: [ confirmPassword: [
{ required: true, trigger: "blur", message: "请再次输入您的密码" }, { required: true, trigger: 'blur', message: '请再次输入您的密码' },
{ required: true, validator: equalToPassword, trigger: "blur" } { required: true, validator: equalToPassword, trigger: 'blur' }
] ]
} }
@ -148,27 +160,33 @@ const registerData = reactive({
tenantEnable: import.meta.env.VITE_APP_TENANT_ENABLE, tenantEnable: import.meta.env.VITE_APP_TENANT_ENABLE,
registerForm: { registerForm: {
tenantName: '', tenantName: '',
nickname: "芋艿", nickname: '',
tenantId: 0, tenantId: 0,
username: '', username: '',
password: '', password: '',
confirmPassword: "", confirmPassword: '',
captchaVerification: '' captchaVerification: ''
} }
}) })
async function handleRegister() { async function handleRegister(params) {
loading.value = true loading.value = true
try {
if (registerData.tenantEnable) {
await getTenantId() await getTenantId()
registerData.registerForm.tenantId = authUtil.getTenantId() registerData.registerForm.tenantId = authUtil.getTenantId()
}
LoginApi.register(registerData.registerForm).then(() => { if (registerData.captchaEnable) {
const username = registerData.registerForm.username; registerData.registerForm.captchaVerification = params.captchaVerification
ElMessageBox.alert("<font color='green'>恭喜你,您的账号 " + username + " 注册成功!</font>", "系统提示", { }
dangerouslyUseHTMLString: true,
type: "success", console.log(
}).then(async () => { 'registerData.registerForm.captchaVerification====',
const res = await LoginApi.login(registerData.registerForm) registerData.registerForm.captchaVerification
)
const res = await LoginApi.register(registerData.registerForm)
if (!res) { if (!res) {
return return
} }
@ -177,7 +195,9 @@ async function handleRegister() {
text: '正在加载系统中...', text: '正在加载系统中...',
background: 'rgba(0, 0, 0, 0.7)' background: 'rgba(0, 0, 0, 0.7)'
}) })
authUtil.removeLoginForm() authUtil.removeLoginForm()
authUtil.setToken(res) authUtil.setToken(res)
if (!redirect.value) { if (!redirect.value) {
redirect.value = '/' redirect.value = '/'
@ -188,19 +208,19 @@ async function handleRegister() {
} else { } else {
push({ path: redirect.value || permissionStore.addRouters[0].path }) push({ path: redirect.value || permissionStore.addRouters[0].path })
} }
} finally {
loginLoading.value = false loginLoading.value = false
loading.value.close() loading.value.close()
}) }
})
} }
// //
const getCode = async () => { const getCode = async () => {
// //
if (registerData.captchaEnable === 'false') { if (registerData.captchaEnable === 'false') {
await handleRegister() await handleRegister({})
} else { } else {
// //
// //
verify.value.show() verify.value.show()
} }