2021-12-14 18:36:19 +08:00
|
|
|
|
<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>
|
2021-12-27 11:47:10 +08:00
|
|
|
|
<ai-info-item label="姓名" :value="user.info.name"/>
|
2021-12-14 18:36:19 +08:00
|
|
|
|
<ai-info-item label="手机号码" :value="user.info.phone"/>
|
|
|
|
|
|
<ai-info-item label="角色" :value="user.info.roleName"/>
|
2021-12-27 11:47:10 +08:00
|
|
|
|
<ai-info-item label="部门" :value="user.info.departName"/>
|
2021-12-14 18:36:19 +08:00
|
|
|
|
<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="user.info.areaList.join('')" isLine/>
|
|
|
|
|
|
<ai-info-item label="所属党组织" :value="user.info.organizationName" 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
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
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>
|