|
@@ -67,18 +67,18 @@
|
|
|
class="auth-form"
|
|
class="auth-form"
|
|
|
@submit.prevent="handleRegister"
|
|
@submit.prevent="handleRegister"
|
|
|
>
|
|
>
|
|
|
- <el-form-item prop="account">
|
|
|
|
|
|
|
+ <el-form-item prop="studentId">
|
|
|
<el-input
|
|
<el-input
|
|
|
- v-model="registerForm.account"
|
|
|
|
|
- placeholder="请输入账号"
|
|
|
|
|
|
|
+ v-model="registerForm.studentId"
|
|
|
|
|
+ placeholder="请输入学号"
|
|
|
:prefix-icon="User"
|
|
:prefix-icon="User"
|
|
|
size="large"
|
|
size="large"
|
|
|
/>
|
|
/>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
- <el-form-item prop="username">
|
|
|
|
|
|
|
+ <el-form-item prop="name">
|
|
|
<el-input
|
|
<el-input
|
|
|
- v-model="registerForm.username"
|
|
|
|
|
- placeholder="请输入用户名"
|
|
|
|
|
|
|
+ v-model="registerForm.name"
|
|
|
|
|
+ placeholder="请输入真实姓名"
|
|
|
:prefix-icon="User"
|
|
:prefix-icon="User"
|
|
|
size="large"
|
|
size="large"
|
|
|
/>
|
|
/>
|
|
@@ -103,6 +103,17 @@
|
|
|
size="large"
|
|
size="large"
|
|
|
/>
|
|
/>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
+ <el-form-item label="校园卡">
|
|
|
|
|
+ <el-upload
|
|
|
|
|
+ v-model:file-list="cardFileList"
|
|
|
|
|
+ :auto-upload="false"
|
|
|
|
|
+ list-type="picture-card"
|
|
|
|
|
+ :limit="1"
|
|
|
|
|
+ :on-preview="handlePreview"
|
|
|
|
|
+ >
|
|
|
|
|
+ <el-icon><Plus /></el-icon>
|
|
|
|
|
+ </el-upload>
|
|
|
|
|
+ </el-form-item>
|
|
|
<el-form-item>
|
|
<el-form-item>
|
|
|
<el-button
|
|
<el-button
|
|
|
type="primary"
|
|
type="primary"
|
|
@@ -126,8 +137,8 @@
|
|
|
import { reactive, ref } from 'vue'
|
|
import { reactive, ref } from 'vue'
|
|
|
import { useRoute, useRouter } from 'vue-router'
|
|
import { useRoute, useRouter } from 'vue-router'
|
|
|
import { ElMessage } from 'element-plus'
|
|
import { ElMessage } from 'element-plus'
|
|
|
-import { User, Lock, ArrowLeft } from '@element-plus/icons-vue'
|
|
|
|
|
-import type { FormInstance, FormRules } from 'element-plus'
|
|
|
|
|
|
|
+import { User, Lock, ArrowLeft, Plus } from '@element-plus/icons-vue'
|
|
|
|
|
+import type { FormInstance, FormRules, UploadFile } from 'element-plus'
|
|
|
import { getAuth } from '../api/endpoints/auth'
|
|
import { getAuth } from '../api/endpoints/auth'
|
|
|
import { useUserStore } from '../store'
|
|
import { useUserStore } from '../store'
|
|
|
|
|
|
|
@@ -148,12 +159,14 @@ const loginForm = reactive({
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
const registerForm = reactive({
|
|
const registerForm = reactive({
|
|
|
- account: '',
|
|
|
|
|
- username: '',
|
|
|
|
|
|
|
+ studentId: '',
|
|
|
|
|
+ name: '',
|
|
|
password: '',
|
|
password: '',
|
|
|
confirmPassword: ''
|
|
confirmPassword: ''
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
|
|
+const cardFileList = ref<UploadFile[]>([])
|
|
|
|
|
+
|
|
|
const validateConfirmPassword = (_rule: any, value: string, callback: any) => {
|
|
const validateConfirmPassword = (_rule: any, value: string, callback: any) => {
|
|
|
if (value !== registerForm.password) {
|
|
if (value !== registerForm.password) {
|
|
|
callback(new Error('两次输入密码不一致'))
|
|
callback(new Error('两次输入密码不一致'))
|
|
@@ -171,13 +184,13 @@ const loginRules = reactive<FormRules>({
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
const registerRules = reactive<FormRules>({
|
|
const registerRules = reactive<FormRules>({
|
|
|
- account: [
|
|
|
|
|
- { required: true, message: '请输入账号', trigger: 'blur' },
|
|
|
|
|
- { min: 4, max: 20, message: '账号长度4-20个字符', trigger: 'blur' }
|
|
|
|
|
|
|
+ studentId: [
|
|
|
|
|
+ { required: true, message: '请输入学号', trigger: 'blur' },
|
|
|
|
|
+ { min: 4, max: 20, message: '学号长度4-20个字符', trigger: 'blur' }
|
|
|
],
|
|
],
|
|
|
- username: [
|
|
|
|
|
- { required: true, message: '请输入用户名', trigger: 'blur' },
|
|
|
|
|
- { min: 2, max: 32, message: '用户名长度2-32个字符', trigger: 'blur' }
|
|
|
|
|
|
|
+ name: [
|
|
|
|
|
+ { required: true, message: '请输入真实姓名', trigger: 'blur' },
|
|
|
|
|
+ { min: 2, max: 32, message: '姓名长度2-32个字符', trigger: 'blur' }
|
|
|
],
|
|
],
|
|
|
password: [
|
|
password: [
|
|
|
{ required: true, message: '请输入密码', trigger: 'blur' },
|
|
{ required: true, message: '请输入密码', trigger: 'blur' },
|
|
@@ -203,15 +216,17 @@ const handleLogin = async () => {
|
|
|
|
|
|
|
|
if (res.code === 200) {
|
|
if (res.code === 200) {
|
|
|
const data = res.data!
|
|
const data = res.data!
|
|
|
|
|
+ const role = data.role || 'USER'
|
|
|
userStore.login({
|
|
userStore.login({
|
|
|
id: data.id ?? 0,
|
|
id: data.id ?? 0,
|
|
|
nickname: data.nickname || data.name || '用户',
|
|
nickname: data.nickname || data.name || '用户',
|
|
|
avatarUrl: data.avatarUrl ?? '',
|
|
avatarUrl: data.avatarUrl ?? '',
|
|
|
- role: data.role || 'USER',
|
|
|
|
|
- authStatus: data.authStatus || (data.role === 'ADMIN' ? 'AUTHENTICATED' : 'UNAUTHENTICATED'),
|
|
|
|
|
|
|
+ role,
|
|
|
|
|
+ authStatus: data.authStatus || (role === 'ADMIN' ? 'AUTHENTICATED' : 'UNAUTHENTICATED'),
|
|
|
})
|
|
})
|
|
|
ElMessage.success('登录成功')
|
|
ElMessage.success('登录成功')
|
|
|
- router.push((route.query.redirect as string) || '/')
|
|
|
|
|
|
|
+ const redirect = (route.query.redirect as string) || '/'
|
|
|
|
|
+ router.push(redirect)
|
|
|
} else {
|
|
} else {
|
|
|
ElMessage.error(res.message || '登录失败')
|
|
ElMessage.error(res.message || '登录失败')
|
|
|
}
|
|
}
|
|
@@ -222,6 +237,10 @@ const handleLogin = async () => {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+const handlePreview = (file: UploadFile) => {
|
|
|
|
|
+ if (file.url) window.open(file.url)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
const handleRegister = async () => {
|
|
const handleRegister = async () => {
|
|
|
const valid = await registerFormRef.value?.validate().catch(() => false)
|
|
const valid = await registerFormRef.value?.validate().catch(() => false)
|
|
|
if (!valid) return
|
|
if (!valid) return
|
|
@@ -230,18 +249,20 @@ const handleRegister = async () => {
|
|
|
try {
|
|
try {
|
|
|
const authApi = getAuth()
|
|
const authApi = getAuth()
|
|
|
const res = await authApi.register({
|
|
const res = await authApi.register({
|
|
|
- studentId: registerForm.account,
|
|
|
|
|
- name: registerForm.username,
|
|
|
|
|
|
|
+ studentId: registerForm.studentId,
|
|
|
|
|
+ name: registerForm.name,
|
|
|
password: registerForm.password,
|
|
password: registerForm.password,
|
|
|
|
|
+ campusCardImage: cardFileList.value[0]?.raw,
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
if (res.code === 200) {
|
|
if (res.code === 200) {
|
|
|
ElMessage.success('注册成功,请登录')
|
|
ElMessage.success('注册成功,请登录')
|
|
|
activeTab.value = 'login'
|
|
activeTab.value = 'login'
|
|
|
- registerForm.account = ''
|
|
|
|
|
- registerForm.username = ''
|
|
|
|
|
|
|
+ registerForm.studentId = ''
|
|
|
|
|
+ registerForm.name = ''
|
|
|
registerForm.password = ''
|
|
registerForm.password = ''
|
|
|
registerForm.confirmPassword = ''
|
|
registerForm.confirmPassword = ''
|
|
|
|
|
+ cardFileList.value = []
|
|
|
} else {
|
|
} else {
|
|
|
ElMessage.error(res.message || '注册失败')
|
|
ElMessage.error(res.message || '注册失败')
|
|
|
}
|
|
}
|