195 lines
5.9 KiB
Vue
195 lines
5.9 KiB
Vue
|
|
<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>
|