学生注册和个人信息修改模块完成,简化了部分不必要的代码。
This commit is contained in:
parent
dc02ed8eb4
commit
399b6b3bb5
|
|
@ -3,8 +3,13 @@ import { request, longRequest } from '@/utils'
|
||||||
export default {
|
export default {
|
||||||
login: (data) => request.post('/login/student', data, { noNeedToken: true }),
|
login: (data) => request.post('/login/student', data, { noNeedToken: true }),
|
||||||
getAccount: () => request.get('/account'),
|
getAccount: () => request.get('/account'),
|
||||||
|
|
||||||
findStudentByStudentNo: (data) =>
|
findStudentByStudentNo: (data) =>
|
||||||
request.post('/user/findStudentByStudentNo', data, { noNeedToken: true }),
|
request.post('/user/findStudentByStudentNo', data, { noNeedToken: true }),
|
||||||
|
|
||||||
|
findStudentByusername: (data) => //依据用户名获取学生信息
|
||||||
|
request.post('/user/findStudentByusername', data, { noNeedToken: true }),
|
||||||
|
|
||||||
confirmQuestionAnswer: (data) =>
|
confirmQuestionAnswer: (data) =>
|
||||||
request.post('/user/confirmQuestionAnswer', data, { noNeedToken: true }),
|
request.post('/user/confirmQuestionAnswer', data, { noNeedToken: true }),
|
||||||
resetPassword: (data) =>
|
resetPassword: (data) =>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,194 @@
|
||||||
|
<template>
|
||||||
|
<CommonPage show-footer>
|
||||||
|
<div class="w-full f-c-c">
|
||||||
|
<div class="max-w-900 w-full flex justify-between gap-x-28">
|
||||||
|
<div class="flex-1 rounded-10 p-20" border="solid 1px #ccc">
|
||||||
|
<h3 class="m-b-20 text-center">修改信息</h3>
|
||||||
|
<n-form
|
||||||
|
ref="userInfoRef"
|
||||||
|
:model="userInfoValue"
|
||||||
|
:rules="userInofRules"
|
||||||
|
label-placement="left"
|
||||||
|
label-align="right"
|
||||||
|
label-width="58px"
|
||||||
|
:show-require-mark="false"
|
||||||
|
>
|
||||||
|
<n-form-item label="登录账号" path="username">
|
||||||
|
<n-input v-model:value="userInfoValue.username" disabled></n-input>
|
||||||
|
</n-form-item>
|
||||||
|
<n-form-item label="学号">
|
||||||
|
<n-input :value="disabledValue.studentNo" disabled></n-input>
|
||||||
|
</n-form-item>
|
||||||
|
<n-form-item label="中文名" path="chineseName">
|
||||||
|
<n-input v-model:value="userInfoValue.chineseName"></n-input>
|
||||||
|
</n-form-item>
|
||||||
|
<n-form-item label="班级">
|
||||||
|
<n-input :value="disabledValue.banji" disabled></n-input>
|
||||||
|
</n-form-item>
|
||||||
|
<n-form-item label="邮箱" path="email">
|
||||||
|
<n-input v-model:value="userInfoValue.email"></n-input>
|
||||||
|
</n-form-item>
|
||||||
|
<n-form-item label="问题" path="question">
|
||||||
|
<n-input v-model:value="userInfoValue.question"></n-input>
|
||||||
|
</n-form-item>
|
||||||
|
<n-form-item label="答案" path="answer">
|
||||||
|
<n-input v-model:value="userInfoValue.answer"></n-input>
|
||||||
|
</n-form-item>
|
||||||
|
<n-form-item class="f-c-c">
|
||||||
|
<n-button type="primary" @click="onSaveUserInfo">保存</n-button>
|
||||||
|
</n-form-item>
|
||||||
|
</n-form>
|
||||||
|
</div>
|
||||||
|
<div class="flex-1 rounded-10 p-20" border="solid 1px #ccc">
|
||||||
|
<h3 class="m-b-20 text-center">修改密码</h3>
|
||||||
|
<n-form
|
||||||
|
ref="pwdInfoRef"
|
||||||
|
:model="pwdInfoValue"
|
||||||
|
:rules="pwdInforRules"
|
||||||
|
label-placement="left"
|
||||||
|
label-align="right"
|
||||||
|
label-width="68px"
|
||||||
|
:show-require-mark="false"
|
||||||
|
>
|
||||||
|
<n-form-item label="当前密码" path="password">
|
||||||
|
<n-input
|
||||||
|
v-model:value="pwdInfoValue.password"
|
||||||
|
type="password"
|
||||||
|
placeholder="请输入密码"
|
||||||
|
></n-input>
|
||||||
|
</n-form-item>
|
||||||
|
<n-form-item label="新密码" path="newPassword">
|
||||||
|
<n-input
|
||||||
|
v-model:value="pwdInfoValue.newPassword"
|
||||||
|
type="password"
|
||||||
|
placeholder="请输入新密码"
|
||||||
|
></n-input>
|
||||||
|
</n-form-item>
|
||||||
|
<n-form-item label="确认密码" path="confirmPassword">
|
||||||
|
<n-input
|
||||||
|
v-model:value="pwdInfoValue.confirmPassword"
|
||||||
|
type="password"
|
||||||
|
placeholder="请重复输入新密码"
|
||||||
|
></n-input>
|
||||||
|
</n-form-item>
|
||||||
|
<n-form-item class="f-c-c">
|
||||||
|
<n-button type="primary" @click="onSavePwd">保存</n-button>
|
||||||
|
</n-form-item>
|
||||||
|
</n-form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</CommonPage>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref } from 'vue'
|
||||||
|
import api from '@/api/user'
|
||||||
|
import { confirmPasswordRule, emailRule, requiredRule, strictPasswordRule } from '@/utils/validator'
|
||||||
|
import { useUserStore } from '@/store'
|
||||||
|
import sha256 from 'crypto-js/sha256';
|
||||||
|
import { generateRandomString } from '@/utils';
|
||||||
|
|
||||||
|
const DEFAULT_PWD_VALUE = {
|
||||||
|
password: '',
|
||||||
|
newPassword: '',
|
||||||
|
confirmPassword: '',
|
||||||
|
}
|
||||||
|
|
||||||
|
const userStore = useUserStore()
|
||||||
|
|
||||||
|
const userInfoRef = ref(null)
|
||||||
|
const pwdInfoRef = ref(null)
|
||||||
|
|
||||||
|
const userInfoValue = ref({
|
||||||
|
username: '',
|
||||||
|
chineseName: '',
|
||||||
|
email: '',
|
||||||
|
question: '',
|
||||||
|
answer: '',
|
||||||
|
})
|
||||||
|
const disabledValue = ref({
|
||||||
|
banji: '',
|
||||||
|
studentNo: '',
|
||||||
|
})
|
||||||
|
const pwdInfoValue = ref({ ...DEFAULT_PWD_VALUE })
|
||||||
|
|
||||||
|
const userInofRules = ref({
|
||||||
|
username: requiredRule('用户名'),
|
||||||
|
chineseName: {
|
||||||
|
required: true,
|
||||||
|
trigger: 'blur',
|
||||||
|
min: 2,
|
||||||
|
message: '中文名不能少于2位',
|
||||||
|
},
|
||||||
|
email: emailRule(false),
|
||||||
|
question: requiredRule('问题'),
|
||||||
|
answer: requiredRule('答案'),
|
||||||
|
})
|
||||||
|
|
||||||
|
const pwdInforRules = ref({
|
||||||
|
password: requiredRule('密码'),
|
||||||
|
newPassword: strictPasswordRule(),
|
||||||
|
confirmPassword: confirmPasswordRule(pwdInfoValue, 'newPassword'),
|
||||||
|
})
|
||||||
|
|
||||||
|
//获取用户数据
|
||||||
|
const getUserInfo = async (myUsername) => {
|
||||||
|
try {
|
||||||
|
const res = await api.findStudentByusername({
|
||||||
|
username: myUsername || userStore.getUsername(),
|
||||||
|
})
|
||||||
|
|
||||||
|
const { banji, studentNo, username, chineseName, email, question } = res.data
|
||||||
|
disabledValue.value = {
|
||||||
|
banji,
|
||||||
|
studentNo,
|
||||||
|
}
|
||||||
|
userInfoValue.value = {
|
||||||
|
username,
|
||||||
|
chineseName,
|
||||||
|
email,
|
||||||
|
question,
|
||||||
|
answer: '',
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
;(err) => $message.error(err.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const onSaveUserInfo = () => {
|
||||||
|
userInfoRef.value?.validate(async (errors) => {
|
||||||
|
if (!errors) {
|
||||||
|
try {
|
||||||
|
const res = await api.updateUserInfo({
|
||||||
|
...userInfoValue.value,
|
||||||
|
})
|
||||||
|
$message.success('修改用户信息成功')
|
||||||
|
getUserInfo(userInfoValue.value.username)
|
||||||
|
} catch (err) {
|
||||||
|
$message.error(err.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const onSavePwd = () => {
|
||||||
|
pwdInfoRef.value?.validate(async (errors) => {
|
||||||
|
if (!errors) {
|
||||||
|
try {
|
||||||
|
const res = await api.updateUserPwd({
|
||||||
|
password: sha256(pwdInfoValue.value.password.trim()).toString(),
|
||||||
|
newPassword: sha256(pwdInfoValue.value.newPassword.trim()).toString(),
|
||||||
|
sessionId: generateRandomString(64)+pwdInfoValue.value.newPassword.trim(), //应付检查的无用字段
|
||||||
|
})
|
||||||
|
$message.success('修改密码成功')
|
||||||
|
pwdInfoValue.value = { ...DEFAULT_PWD_VALUE }
|
||||||
|
} catch (err) {
|
||||||
|
$message.error(err.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 执行
|
||||||
|
getUserInfo()
|
||||||
|
</script>
|
||||||
|
|
@ -23,21 +23,18 @@ export const useUserStore = defineStore('user', {
|
||||||
getId() {
|
getId() {
|
||||||
return isAdminEnd() ? this.adminInfo.id : this.userInfo.id
|
return isAdminEnd() ? this.adminInfo.id : this.userInfo.id
|
||||||
},
|
},
|
||||||
getSchoolId() {
|
|
||||||
return isAdminEnd() ? this.adminInfo.schoolId : this.userInfo.schoolId
|
|
||||||
},
|
|
||||||
getRole() {
|
getRole() {
|
||||||
return (isAdminEnd() ? this.adminInfo.role : this.userInfo.role) || []
|
return (isAdminEnd() ? this.adminInfo.role : this.userInfo.role) || []
|
||||||
},
|
},
|
||||||
// 获取包括User端用户和Admin端用户账户信息
|
// 获取包括User端用户和Admin端用户账户信息
|
||||||
async getAccountInfo() {
|
async getAccountInfo() {
|
||||||
const res = await api.getAccount()
|
const res = await api.getAccount()
|
||||||
const { username, name, role, id, schoolId } = res.data
|
const { username, name, role, id} = res.data
|
||||||
try {
|
try {
|
||||||
if (isAdminEnd()) {
|
if (isAdminEnd()) {
|
||||||
this.adminInfo = { username, name, role: [role], id, schoolId }
|
this.adminInfo = { username, name, role: [role], id}
|
||||||
} else {
|
} else {
|
||||||
this.userInfo = { username, name, role: [role], id, schoolId }
|
this.userInfo = { username, name, role: [role], id}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Promise.resolve(res.data)
|
return Promise.resolve(res.data)
|
||||||
|
|
|
||||||
|
|
@ -100,5 +100,17 @@ export default {
|
||||||
keepAlive: true,
|
keepAlive: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'PersonSetting',
|
||||||
|
path: 'person-setting',
|
||||||
|
component: () => import('./person-setting/index.vue'),
|
||||||
|
meta: {
|
||||||
|
title: '个人设置',
|
||||||
|
icon: 'ic:baseline-table-view',
|
||||||
|
role: ['student'],
|
||||||
|
requireAuth: true,
|
||||||
|
keepAlive: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,15 +10,6 @@
|
||||||
label-width="300px"
|
label-width="300px"
|
||||||
>
|
>
|
||||||
<div class="grid md:gap-x-30">
|
<div class="grid md:gap-x-30">
|
||||||
<n-form-item label="选择学校(从下拉框选择)" path="schoolId">
|
|
||||||
<n-select
|
|
||||||
v-model:value="formValue.schoolId"
|
|
||||||
filterable
|
|
||||||
placeholder="搜索学校(输入学校名字)"
|
|
||||||
:options="schoolOptions"
|
|
||||||
@search="handleSearchSchool"
|
|
||||||
/>
|
|
||||||
</n-form-item>
|
|
||||||
<n-form-item label="学号" path="studentNo">
|
<n-form-item label="学号" path="studentNo">
|
||||||
<n-input
|
<n-input
|
||||||
v-model:value="formValue.studentNo"
|
v-model:value="formValue.studentNo"
|
||||||
|
|
@ -94,7 +85,6 @@ const router = useRouter()
|
||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
const formRef = ref(null)
|
const formRef = ref(null)
|
||||||
const formValue = ref({
|
const formValue = ref({
|
||||||
schoolId: null,
|
|
||||||
studentNo: '',
|
studentNo: '',
|
||||||
chineseName: '',
|
chineseName: '',
|
||||||
banji: '',
|
banji: '',
|
||||||
|
|
@ -108,7 +98,6 @@ const formValue = ref({
|
||||||
const schoolOptions = ref([])
|
const schoolOptions = ref([])
|
||||||
|
|
||||||
const formRules = {
|
const formRules = {
|
||||||
schoolId: requiredRule('学校'),
|
|
||||||
studentNo: requiredRule('学号'),
|
studentNo: requiredRule('学号'),
|
||||||
chineseName: requiredRule('姓名'),
|
chineseName: requiredRule('姓名'),
|
||||||
banji: requiredRule('班级'),
|
banji: requiredRule('班级'),
|
||||||
|
|
@ -120,16 +109,6 @@ const formRules = {
|
||||||
answer: requiredRule('答案'),
|
answer: requiredRule('答案'),
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleSearchSchool = async (query) => {
|
|
||||||
const res = await api.getSchoolByschoolName({
|
|
||||||
name: query,
|
|
||||||
})
|
|
||||||
schoolOptions.value = res.data.map((item) => ({
|
|
||||||
label: item.name,
|
|
||||||
value: item.id + '',
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
|
|
||||||
const findExistUser = async () => {
|
const findExistUser = async () => {
|
||||||
const { studentNo } = formValue.value
|
const { studentNo } = formValue.value
|
||||||
const studentNoVal = studentNo.trim()
|
const studentNoVal = studentNo.trim()
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ public class HttpInterceptorConfig extends WebMvcConfigurationSupport {
|
||||||
.addPathPatterns("/api/**") //拦截所有请求,判断token是否合法决定是否需要登录
|
.addPathPatterns("/api/**") //拦截所有请求,判断token是否合法决定是否需要登录
|
||||||
.excludePathPatterns("/api/login/student","/api/login/admin","/api/login","/api/user/signUser",
|
.excludePathPatterns("/api/login/student","/api/login/admin","/api/login","/api/user/signUser",
|
||||||
"/api/user" +
|
"/api/user" +
|
||||||
"/findUserByStudentNoSchoolId","/api/school/getSchoolByName","/api/adminusers/findAdminuserByno","/api/adminusers/findAdminuserByAccountInRePwInfo",
|
"/findStudentByusername","/api/user/findStudentByStudentNo","/api/adminusers/findAdminuserByno","/api/adminusers/findAdminuserByAccountInRePwInfo",
|
||||||
"/api/adminusers" +
|
"/api/adminusers" +
|
||||||
"/signTeacher",
|
"/signTeacher",
|
||||||
"/api/adminusers" +
|
"/api/adminusers" +
|
||||||
|
|
|
||||||
|
|
@ -169,32 +169,6 @@ public class UserController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/findUserByStudentNoSchoolId")
|
|
||||||
public RespBean findUserByStudentNoSchoolId(@RequestBody Users user, HttpServletRequest request) // 根据学号学校Id获取学生的信息
|
|
||||||
{
|
|
||||||
String studentNo = user.getStudentNo();
|
|
||||||
// int schoolId = user.getSchoolId();
|
|
||||||
DecodeToken decodeToken = null;
|
|
||||||
try {
|
|
||||||
decodeToken = new DecodeToken(request);
|
|
||||||
} catch (JWTDecodeException ignored) {
|
|
||||||
}
|
|
||||||
;
|
|
||||||
if (decodeToken != null) { // 需要修改
|
|
||||||
String role = decodeToken.getRole();
|
|
||||||
if (role.equals("student") && !decodeToken.getStudentNo().equals(studentNo)) {
|
|
||||||
return RespBean.error("请尝试安全操作");
|
|
||||||
}
|
|
||||||
user = userService.findUserByStudentNoSchoolId(studentNo); // 用户信息
|
|
||||||
if (user != null) {
|
|
||||||
return RespBean.ok("获取学生信息成功", user);
|
|
||||||
} else {
|
|
||||||
return RespBean.error("学生学号不存在!");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return RespBean.error("请先登录。");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 通过学生学号查找学生信息
|
// 通过学生学号查找学生信息
|
||||||
@PostMapping("/findStudentByStudentNo")
|
@PostMapping("/findStudentByStudentNo")
|
||||||
|
|
@ -219,12 +193,12 @@ public class UserController {
|
||||||
|
|
||||||
Users pmuser = userService.findStudentByusername(user.getUsername());
|
Users pmuser = userService.findStudentByusername(user.getUsername());
|
||||||
if (pmuser == null) {
|
if (pmuser == null) {
|
||||||
Users u = userService.findUserByStudentNoSchoolId(user.getStudentNo()); // 用户信息
|
Users u = userService.findUserByStudentNo(user.getStudentNo()); // 用户信息
|
||||||
if (u != null) {
|
if (u != null) {
|
||||||
if (StringUtils.isBlank(u.getUsername())) {
|
if (StringUtils.isBlank(u.getUsername())) {
|
||||||
user.setSessionId(user.getSessionId().substring(64));
|
user.setSessionId(user.getSessionId().substring(64));
|
||||||
// user.setPassword(getBCryptPassword(user.getPassword()));
|
// user.setPassword(getBCryptPassword(user.getPassword()));
|
||||||
boolean results = userService.updateSignStudent(user);
|
boolean results = userService.updateSignStudent(user);// 更新注册数据
|
||||||
if (results) {
|
if (results) {
|
||||||
return RespBean.ok("修改学生注册信息成功");
|
return RespBean.ok("修改学生注册信息成功");
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -116,7 +116,7 @@ public class UserDaoImpl extends BaseDaoImpl<Users> implements UserDaoI {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Users getUserByUsername(String username) {
|
public Users getUserByUsername(String username) {
|
||||||
String hql = "from Users where username= '" + username + "'";
|
String hql = "from Users where username= '" + username + "'";
|
||||||
return this.get(hql);
|
return this.get(hql);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,9 @@ import com.example.aes.user.model.Json;
|
||||||
import com.example.aes.user.model.PMUser;
|
import com.example.aes.user.model.PMUser;
|
||||||
import com.example.aes.user.model.Users;
|
import com.example.aes.user.model.Users;
|
||||||
import org.springframework.security.core.userdetails.UserDetails;
|
import org.springframework.security.core.userdetails.UserDetails;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface UserServiceI {
|
public interface UserServiceI {
|
||||||
|
|
@ -55,7 +57,7 @@ public interface UserServiceI {
|
||||||
public List<PMUser> findStudentsByCondition(String studentNo,
|
public List<PMUser> findStudentsByCondition(String studentNo,
|
||||||
String chineseName, String stu_userName);
|
String chineseName, String stu_userName);
|
||||||
|
|
||||||
public Users findUserByStudentNoSchoolId(String studentNo);
|
public Users findUserByStudentNo(String studentNo);
|
||||||
|
|
||||||
public boolean updateSignStudent(PMUser user);// 修改学生注册信息
|
public boolean updateSignStudent(PMUser user);// 修改学生注册信息
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -374,11 +374,10 @@ public class UserServiceImpl implements UserServiceI {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Users findUserByStudentNoSchoolId(String studentNo) {
|
public Users findUserByStudentNo(String studentNo) {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
String hql = "from Users where studentNo='" + studentNo
|
String hql = "from Users where studentNo='" + studentNo + "'";
|
||||||
+ "' and schoolId='" ;
|
|
||||||
Users user = userDao.get(hql);
|
Users user = userDao.get(hql);
|
||||||
if (user != null) {
|
if (user != null) {
|
||||||
return user;
|
return user;
|
||||||
|
|
@ -415,8 +414,7 @@ public class UserServiceImpl implements UserServiceI {
|
||||||
String time = dateFormat.format(createDate);
|
String time = dateFormat.format(createDate);
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
String hql = "update Users set banji='" + user.getBanji()
|
String hql = "update Users set banji='" + user.getBanji()
|
||||||
+ "'where studentNo='" + user.getStudentNo()
|
+ "'where studentNo='" + user.getStudentNo();
|
||||||
+ "' and schoolId='" ;
|
|
||||||
int result = userDao.executeHql(hql);
|
int result = userDao.executeHql(hql);
|
||||||
if (result == 1)
|
if (result == 1)
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue