定制化个人中心

This commit is contained in:
aixianling
2022-03-14 10:43:58 +08:00
parent 41dc57f1ac
commit fcb6bbf956
2 changed files with 195 additions and 1 deletions

View File

@@ -0,0 +1,195 @@
<template>
<section class="AppUserInfo">
<ai-detail>
<ai-title slot="title" title="个人中心" isShowBottomBorder/>
<template #content>
<ai-card title="个人资料">
<template #right>
<span style="color:#999" v-text="'(如需修改基本信息,请联系管理员)'"/>
</template>
<template #content>
<el-row type="flex" justify="space-between">
<ai-wrapper>
<ai-info-item label="姓名" :value="user.info.name"/>
<ai-info-item label="手机号码" :value="user.info.phone"/>
<ai-info-item label="角色" :value="user.info.roleName"/>
<ai-info-item label="部门" :value="user.info.departName"/>
<ai-info-item label="职位" :value="user.info.position"/>
</ai-wrapper>
<ai-avatar :value="user.info.avatar" :editable="false"/>
</el-row>
</template>
</ai-card>
<ai-card title="数据权限">
<template #right>
<span style="color:#999" v-text="'(如需修改基本信息,请联系管理员)'"/>
</template>
<template #content>
<ai-wrapper>
<ai-info-item label="所属地区" :value="areaName" isLine/>
</ai-wrapper>
</template>
</ai-card>
<ai-card title="密码设置">
<template #right>
<el-button type="text" @click="submitForm">保存</el-button>
</template>
<template #content>
<el-form :model="form" ref="ruleForm" :rules="rules" label-width="100px" size="small">
<el-form-item label="绑定手机:" prop="phone">
<el-row type="flex" align="middle">
<span>{{ user.info.phone }}</span>
<el-button type="primary" style="margin-left: 8px" @click="getCode(user.info.phone,true)"
:disabled="codeBtn">获取验证码
<span v-if="num>0&&codeBtn" style="color:red;">({{ num }}s)</span>
</el-button>
</el-row>
</el-form-item>
<el-form-item label="验证码:" prop="code">
<el-input v-model.trim="form.code" clearable placeholder="请输入短信验证码"/>
<el-input style="position: fixed; bottom: -9999px"></el-input>
</el-form-item>
<el-form-item label="新密码:" prop="pass">
<el-input type="password" auto-complete="new-password" v-model.trim="form.pass" clearable
placeholder="8-16位需要包含字母和数字及特殊字符(~!@#$%^&*,.?_-)"
show-password/>
</el-form-item>
<el-form-item label="确认密码:" prop="checkPass">
<el-input type="password" auto-complete="new-password" placeholder="再次输入密码"
v-model.trim="form.checkPass" clearable
show-password/>
</el-form-item>
</el-form>
</template>
</ai-card>
</template>
</ai-detail>
</section>
</template>
<script>
import {mapMutations, mapState} from "vuex";
export default {
name: "AppUserInfo",
label: "个人中心(秀山版本)",
props: {
instance: Function,
},
computed: {
...mapState(['user']),
rules() {
const validatePass = (rule, value, callback) => {
const reg = /^(?=.*\d)(?=.*[a-zA-Z])(?=.*[~!@#$%^&*,.?_-])[\da-zA-Z~!@#$%^&*,.?_-]{8,16}$/;
if (!reg.test(value)) {
callback(new Error('数字和字母及特殊字符(~!@#$%^&*,.?_-)组合,长度8到16位'));
} else {
if (this.form.checkPass !== '') {
this.$refs.ruleForm.validateField('checkPass');
}
callback();
}
}
return {
currentPass: [
{required: true, message: '请填写当前密码', trigger: 'blur'}
],
code: [
{required: true, message: '请填写验证码', trigger: 'blur'}
],
pass: [
{validator: validatePass, trigger: 'blur', required: true}
],
checkPass: [
{
validator: (r, v, cb) => v ? v != this.form.pass ? cb('两次输入密码不一致') : cb() : cb('请再次输入密码'),
trigger: 'blur',
required: true
}
],
}
},
areaName(){
return this.user?.info?.areaList?.join("")
}
},
data() {
return {
form: {},
timer: null,
codeBtn: false,
num: 60,
}
},
methods: {
...mapMutations(['SignOut']),
getCode(phone, flag) {
const TEL_REGEXP = /^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/;
if (TEL_REGEXP.test(phone)) {
this.instance.post(`/admin/user/checkPhone`, null, {
params: {phone, flag}
}).then(res => {
if (res.code == 0) {
this.$message.success("请查看手机短信!");
this.timer = setInterval(() => {
if (this.num > 0) {
this.codeBtn = true;
this.num--;
} else if (this.num == 0) {
this.codeBtn = false;
this.num = 60;
clearInterval(this.timer);
}
}, 1000)
} else {
this.$message.error("验证码发送失败!");
}
})
} else {
this.$message.error("手机号格式错误!");
}
},
submitForm() {
this.$refs.ruleForm.validate(v => {
if (v) {
let {pass: newPwd, code} = this.form
this.instance.post(`/admin/user/update-pwd`, null, {
params: {
phone: this.user.info.phone,
newPwd, code
}
}).then(res => {
if (res?.code == 0) {
this.$confirm("村微提醒您,更换密码成功!", {
showCancelButton: false
}).then(() => this.SignOut()).catch(() => 0)
}
})
}
})
}
}
}
</script>
<style lang="scss" scoped>
.AppUserInfo {
height: 100%;
::v-deep .ai-list__content--wrapper {
flex-direction: column;
}
::v-deep .el-input__inner {
-webkit-text-security: disc !important;
}
}
</style>

View File

@@ -1,6 +1,5 @@
{
"AppDictionary": "数据字典",
"AppUserInfo": "个人中心",
"AppRightsManager": "权限管理",
"AppAccountRole": "账号角色",
"AppMenuManager": "菜单管理"