增加测试平台功能,系统设置,支持多个角色,分配菜单

This commit is contained in:
qiaoxinjiu
2026-04-22 10:00:17 +08:00
parent 6d5d69cbde
commit 4395d9fb22
42 changed files with 4239 additions and 81 deletions

View File

@@ -12,7 +12,7 @@
<span class="ct-img-yhm">&nbsp;</span>
<input
id="username"
v-model="username"
v-model.trim="username"
name="username"
class="input_text"
tabindex="1"
@@ -20,7 +20,8 @@
type="text"
size="25"
autocomplete="off"
placeholder="学号">
placeholder="用户名"
@keyup.enter="handleLogin">
</div>
<div class="ct_input" style="height:60px;width: 254px">
<span class="ct_img_mm">&nbsp;</span>
@@ -34,14 +35,13 @@
type="password"
size="25"
autocomplete="off"
placeholder="密码">
placeholder="密码"
@keyup.enter="handleLogin">
</div>
<input class="btn_login" value="登录" @click="handleLogin">
</div>
<div class="account-oprate clearfix">
<router-link :to="{ name: 'register' }">
<a class="regist-btn">注册</a>
</router-link>
<router-link :to="{ name: 'register' }" class="regist-btn">注册</router-link>
</div>
</div>
</div>
@@ -49,31 +49,70 @@
<script>
import { Login } from '@/api/Userapi'
import { getRoleList } from '@/api/rbacApi'
export default {
name: 'Login',
data() {
return {
msg: ' ',
username: null,
password: null
msg: '',
username: '',
password: ''
}
},
methods: {
handleLogin() {
if (!this.username || !this.password) {
this.msg = 'username、password 为必传参数'
return
}
Login({
studentId: this.username,
username: this.username,
password: this.password
}).then(data => {
if (data.code === 200 && data.success === 'true') {
localStorage.setItem('userinfo', JSON.stringify(data.data.userinfo))
localStorage.setItem('Token', data.data.token)
this.$store.commit('SetRole', data.data.userinfo.userStatus)
}).then(res => {
if (res && res.code === 20000) {
const data = res.data || {}
const user = {
id: data.id,
username: data.username,
realName: data.real_name,
mobile: data.mobile,
email: data.email,
avatar: data.avatar,
status: data.status,
lastLoginTime: data.last_login_time,
createdBy: data.created_by,
createdTime: data.created_time,
updatedTime: data.updated_time,
roleIds: data.role_ids || []
}
localStorage.setItem('authUser', JSON.stringify(user))
if (data.token) {
localStorage.setItem('accessToken', data.token)
} else {
localStorage.removeItem('accessToken')
}
this.$store.commit('SetCurrentUser', user)
this.$store.commit('SetRole', user.roleIds)
this.$store.commit('SetUserMenus', [])
this.loadUserMenus(user)
this.msg = ''
this.$message.success('登录成功')
this.$router.push({ path: '/effekt' })
} else {
this.msg = data.message
this.msg = (res && res.message) || '用户名或密码错误!'
}
})
},
loadUserMenus(user) {
const roleId = user && user.roleIds && user.roleIds.length ? user.roleIds[0] : undefined
if (!roleId) {
return
}
getRoleList({ roleId }).then(res => {
const menus = res && Array.isArray(res.data) ? res.data : []
this.$store.commit('SetUserMenus', menus)
}).catch(() => {})
}
}
}

View File

@@ -5,8 +5,8 @@
<div class="location-title"><h1>注册</h1></div>
<el-form ref="ruleForm" :model="ruleForm" status-icon :rules="rules" label-width="100px" class="demo-ruleForm">
<el-form-item label="学号" prop="studentId">
<el-input v-model="ruleForm.studentId" type="text" placeholder="学号" autocomplete="off"></el-input>
<el-form-item label="用户名" prop="username">
<el-input v-model.trim="ruleForm.username" type="text" placeholder="用户名" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input v-model="ruleForm.password" type="password" placeholder="密码" autocomplete="off"></el-input>
@@ -14,22 +14,17 @@
<el-form-item label="确认密码" prop="checkPass">
<el-input v-model="ruleForm.checkPass" type="password" placeholder="确认密码" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="姓名" prop="name">
<el-input v-model="ruleForm.name" placeholder="姓名" autocomplete="off"></el-input>
<el-form-item label="手机号" prop="mobile">
<el-input v-model.trim="ruleForm.mobile" placeholder="手机号" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="性别" prop="gender">
<el-input v-model="ruleForm.gender" placeholder="性别" autocomplete="off"></el-input>
<el-form-item label="邮箱" prop="email">
<el-input v-model.trim="ruleForm.email" type="text" placeholder="邮箱" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="学院" prop="faculty">
<el-input v-model="ruleForm.faculty" type="text" placeholder="学院" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="年级" prop="grade">
<el-input v-model="ruleForm.grade" type="text" placeholder="年级" autocomplete="off"></el-input>
</el-form-item>
<el-form-item>
<el-form-item class="register-actions">
<el-button class="enter-btn" type="primary" :disabled="!select" @click="submitForm('ruleForm')">
立即注册
</el-button>
<el-button class="login-link-btn" type="text" @click="goLogin">去登录</el-button>
</el-form-item>
</el-form>
</div>
@@ -61,9 +56,9 @@ export default {
callback()
}
}
const validateStudentId = (rule, value, callback) => {
const validateUsername = (rule, value, callback) => {
if (value === '') {
callback(new Error('请输入学号'))
callback(new Error('请输入用户名'))
return
}
callback()
@@ -72,22 +67,16 @@ export default {
return {
select: true,
ruleForm: {
studentId: '',
username: '',
password: '',
checkPass: '',
name: '',
gender: '',
faculty: '',
grade: ''
mobile: '',
email: ''
},
rules: {
studentId: [{ required: true, validator: validateStudentId, trigger: 'blur' }],
username: [{ required: true, validator: validateUsername, trigger: 'blur' }],
password: [{ required: true, validator: validatePass, trigger: 'blur' }],
checkPass: [{ required: true, validator: validatePass2, trigger: 'blur' }],
name: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
gender: [{ required: true, message: '请输入性别', trigger: 'blur' }],
faculty: [{ required: true, message: '请输入学院', trigger: 'blur' }],
grade: [{ required: true, message: '请输入年级', trigger: 'blur' }]
checkPass: [{ required: true, validator: validatePass2, trigger: 'blur' }]
}
}
},
@@ -99,18 +88,17 @@ export default {
},
handleRegister() {
Register({
studentId: this.ruleForm.studentId,
username: this.ruleForm.username,
password: this.ruleForm.password,
name: this.ruleForm.name,
gender: this.ruleForm.gender,
faculty: this.ruleForm.faculty,
grade: this.ruleForm.grade
mobile: this.ruleForm.mobile,
email: this.ruleForm.email,
createdBy: 1
}).then(data => {
if (data.code === 200 && data.success === 'true') {
if (data && data.id) {
this.open('注册成功')
this.$router.push({ name: 'login' })
} else {
this.open(data.message)
this.open(data.message || '注册失败')
}
})
},
@@ -120,6 +108,9 @@ export default {
this.handleRegister()
}
})
},
goLogin() {
this.$router.push({ name: 'login' })
}
}
}
@@ -140,4 +131,20 @@ export default {
float: left;
width: 80%;
}
.register-actions .el-form-item__content {
display: flex;
flex-direction: column;
align-items: flex-start;
}
.login-link-wrap {
width: 100%;
margin-top: 8px;
text-align: right;
}
.login-link-btn {
padding-right: 0;
}
</style>