382 lines
15 KiB
Plaintext
382 lines
15 KiB
Plaintext
<template>
|
|
<div class="trial-myinfo">
|
|
<div class="trial-myinfo-left">
|
|
<div class="trial-myinfo-left-top">
|
|
<div class="trial-myinfo-head">
|
|
<!-- 个人头像 -->
|
|
{{ $t('trials:trials-myinfo:title:avater') }}
|
|
</div>
|
|
<div class="trial-myinfo-body">
|
|
<div>
|
|
{{ user.LastName }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="trial-myinfo-left-bottom">
|
|
<div class="trial-myinfo-head">
|
|
<!-- 用户基本信息 -->
|
|
{{ $t('trials:trials-myinfo:title:basicInfo') }}
|
|
</div>
|
|
<el-form ref="userForm" label-position="right" :model="user" :rules="userFormRules" label-width="120px">
|
|
<el-form-item v-if="user.Code" label="ID: " prop="Code">
|
|
<el-input v-model="user.Code" disabled />
|
|
</el-form-item>
|
|
<!-- 姓 -->
|
|
<el-form-item :disabled="user.UserTypeEnum === 8" :label="$t('trials:trials-myinfo:form:surname')" prop="LastName">
|
|
<el-input v-model="user.LastName" :placeholder="$t('trials:trials-myinfo:form:surname')"/>
|
|
</el-form-item>
|
|
<!-- 名 -->
|
|
<el-form-item :disabled="user.UserTypeEnum === 8" :label="$t('trials:trials-myinfo:form:givenname')" prop="FirstName">
|
|
<el-input v-model="user.FirstName" :placeholder="$t('trials:trials-myinfo:form:givenname')"/>
|
|
</el-form-item>
|
|
<!-- 性别 -->
|
|
<el-form-item :label="$t('trials:trials-myinfo:form:gender')" prop="Sex" style="margin-right:40px;">
|
|
<el-radio-group v-model="user.Sex">
|
|
<el-radio :label="1">Male</el-radio>
|
|
<el-radio :label="0">Female</el-radio>
|
|
</el-radio-group>
|
|
</el-form-item>
|
|
<!-- 单位 -->
|
|
<el-form-item :label="$t('trials:trials-myinfo:form:organization')" prop="OrganizationName">
|
|
<el-input v-model="user.OrganizationName" :placeholder="$t('trials:trials-myinfo:form:organization')"/>
|
|
</el-form-item>
|
|
<!-- 部门 -->
|
|
<el-form-item :label="$t('trials:trials-myinfo:form:department')" prop="DepartmentName">
|
|
<el-input v-model="user.DepartmentName" :placeholder="$t('trials:trials-myinfo:form:organization')"/>
|
|
</el-form-item>
|
|
<!-- 职位 -->
|
|
<el-form-item :label="$t('trials:trials-myinfo:form:position')" prop="PositionName">
|
|
<el-input v-model="user.PositionName" :placeholder="$t('trials:trials-myinfo:form:position')"/>
|
|
</el-form-item>
|
|
</el-form>
|
|
<!-- 保存 -->
|
|
<el-button
|
|
class="trial-info-btn"
|
|
type="primary"
|
|
size="small"
|
|
@click="handleSave"
|
|
>
|
|
{{ $t('trials:trials-myinfo:button:save') }}
|
|
</el-button>
|
|
</div>
|
|
</div>
|
|
<div class="trial-myinfo-right">
|
|
<div class="trial-myinfo-right-box">
|
|
<div class="trial-myinfo-head">
|
|
<!-- 账号信息 -->
|
|
{{ $t('trials:trials-myinfo:title:accountInfo') }}
|
|
</div>
|
|
<el-form label-position="right" label-width="150px">
|
|
<!-- 用户名 -->
|
|
<el-form-item :label="$t('trials:trials-myinfo:form:userName')" style="margin-bottom: 5px;" prop="UserName">
|
|
<span>{{ user.UserName }}</span>
|
|
</el-form-item>
|
|
<el-form-item label="" style="position: relative" prop="UserName">
|
|
<el-input v-model="userForm.UserName" :placeholder="$t('trials:trials-myinfo:form:userName')"/>
|
|
<!-- 修改 -->
|
|
<el-button :disabled="!userForm.UserName" class="saveBtn" type="primary" size="small" @click="setNewUserName">
|
|
{{ $t('trials:trials-myinfo:button:update') }}
|
|
</el-button>
|
|
</el-form-item>
|
|
<!-- 电话 -->
|
|
<el-form-item :label="$t('trials:trials-myinfo:form:phone')" style="margin-bottom: 5px;" prop="UserName">
|
|
<span>{{ user.Phone }}</span>
|
|
</el-form-item>
|
|
<el-form-item label="" style="position: relative" prop="UserName">
|
|
<el-input v-model="userForm.Phone" :placeholder="$t('trials:trials-myinfo:form:phone')"/>
|
|
<!-- 修改 -->
|
|
<el-button :disabled="!userForm.Phone" class="saveBtn" type="primary" size="small" @click="setNewPhone">
|
|
{{ $t('trials:trials-myinfo:button:update') }}
|
|
</el-button>
|
|
</el-form-item>
|
|
<!-- 邮箱 -->
|
|
<el-form-item :label="$t('trials:trials-myinfo:form:email')" style="margin-bottom: 5px;" prop="UserName">
|
|
<span>{{ user.EMail }}</span>
|
|
</el-form-item>
|
|
<el-form-item label="" style="margin-bottom: 10px;position: relative" prop="EMail">
|
|
<el-input v-model="userForm.EMail" @input="handleEmailChange" :placeholder="$t('trials:trials-myinfo:form:email')"/>
|
|
<el-button class="sendCode" :disabled="sendDisabled" type="primary" size="mini" @click="sendVerificationCode">{{ sendTitle }}</el-button>
|
|
</el-form-item>
|
|
<el-form-item label="" style="position: relative" prop="VerificationCode">
|
|
<el-input v-model="userForm.VerificationCode" :placeholder="$t('trials:researchForm:form:verifyCode')"/>
|
|
<!-- 修改 -->
|
|
<el-button :disabled="!userForm.EMail || !userForm.VerificationCode || sendDisabled" class="saveBtn" type="primary" size="small" @click="setNewEmail">
|
|
{{ $t('trials:trials-myinfo:button:update') }}
|
|
</el-button>
|
|
</el-form-item>
|
|
</el-form>
|
|
</div>
|
|
<div class="trial-myinfo-right-box">
|
|
<div class="trial-myinfo-head">
|
|
<!-- 修改密码 -->
|
|
{{ $t('trials:trials-myinfo:title:updatePaasord') }}
|
|
</div>
|
|
<el-form ref="passwordForm" label-position="right" :model="password" :rules="passwordFormRules" label-width="150px">
|
|
<!-- 旧密码 -->
|
|
<el-form-item :label="$t('recompose:form:oldPassword')" prop="OldPassWord">
|
|
<el-input v-model="password.OldPassWord" type="password" show-password auto-complete="new-password" :placeholder="$t('recompose:form:oldPassword')"/>
|
|
</el-form-item>
|
|
<!-- 新密码 -->
|
|
<el-form-item :label="$t('recompose:form:newPassword')" prop="NewPassWord">
|
|
<el-input v-model="password.NewPassWord" type="password" show-password auto-complete="new-password" :placeholder="$t('recompose:form:newPassword')"/>
|
|
</el-form-item>
|
|
<!-- 确认密码 -->
|
|
<el-form-item :label="$t('recompose:form:confirmPassword')" prop="ConfirmPassWord">
|
|
<el-input v-model="password.ConfirmPassWord" type="password" show-password auto-complete="new-password" :placeholder="$t('recompose:form:confirmPassword')"/>
|
|
</el-form-item>
|
|
</el-form>
|
|
<el-button
|
|
type="primary"
|
|
size="small"
|
|
class="trial-info-btn"
|
|
@click="save"
|
|
>
|
|
{{ $t('trials:trials-myinfo:button:save') }}
|
|
</el-button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { getUserTypeList, getUser, updateUser, modifyPassword } from '@/api/admin.js'
|
|
import { sendVerificationCode, setNewEmail, setNewPhone, setNewUserName } from '@/api/system/user.js'
|
|
import md5 from 'js-md5'
|
|
var timer = ''
|
|
var countdown = 60
|
|
import store from '@/store'
|
|
import { mapGetters } from 'vuex'
|
|
|
|
export default {
|
|
|
|
name: 'TrialsMyinfo',
|
|
data() {
|
|
return {
|
|
userTypeOptions: [],
|
|
user: {},
|
|
password: {},
|
|
userForm: {},
|
|
sendDisabled: true,
|
|
sendTitle: this.$t('trials:trials-myinfo:button:getVCode'), // '获取验证码'
|
|
userFormRules: {
|
|
UserName: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }],
|
|
UserTypeId: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change'] }],
|
|
IsZhiZhun: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change'] }],
|
|
OrganizationName: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }],
|
|
LastName: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }, { max: 50, message: `${this.$t('common:ruleMessage:maxLength')} 50` }],
|
|
FirstName: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }, { max: 50, message: `${this.$t('common:ruleMessage:maxLength')} 50` }],
|
|
Sex: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }],
|
|
Status: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }]
|
|
},
|
|
passwordFormRules: {
|
|
OldPassWord: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }],
|
|
NewPassWord: [
|
|
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
|
|
{
|
|
required: true,
|
|
trigger: 'blur',
|
|
validator: this.$validatePassword
|
|
},
|
|
],
|
|
ConfirmPassWord: [
|
|
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
|
|
{
|
|
required: true,
|
|
trigger: 'blur',
|
|
validator: this.$validatePassword
|
|
},
|
|
]
|
|
}
|
|
}
|
|
},
|
|
computed: {
|
|
...mapGetters(['userId', 'name'])
|
|
},
|
|
mounted() {
|
|
this.getUserInfo()
|
|
this.getUserTypeList()
|
|
},
|
|
methods: {
|
|
handleSave() {
|
|
this.$refs.userForm.validate(valid => {
|
|
console.log(valid)
|
|
if (valid) {
|
|
this.isDisabled = true
|
|
const selectedUserType = this.userTypeOptions.filter((item) => {
|
|
return item.Id === this.user.UserTypeId
|
|
})
|
|
if (selectedUserType.length > 0) {
|
|
this.user.userTypeEnum = selectedUserType[0].UserTypeEnum
|
|
}
|
|
// if (this.user.IsZhiZhun === true) {
|
|
// this.user.OrganizationName = 'ZhiZhun'
|
|
// }
|
|
if (this.user.Id) {
|
|
updateUser(this.user).then(res => {
|
|
this.isDisabled = false
|
|
this.$message.success(this.$t('trials:trials-myinfo:message:updateSuccessfully'))
|
|
this.getUserInfo()
|
|
}).catch(() => { this.isDisabled = false })
|
|
}
|
|
}
|
|
})
|
|
},
|
|
handleEmailChange() {
|
|
var reg = /^[A-Za-z0-9]+([_\.][A-Za-z0-9]+)*@([A-Za-z0-9\-]+\.)+[A-Za-z]{2,6}$/
|
|
if (this.userForm.EMail && reg.test(this.userForm.EMail)) {
|
|
this.sendDisabled = false
|
|
} else {
|
|
this.sendDisabled = true
|
|
}
|
|
},
|
|
sendVerificationCode() {
|
|
sendVerificationCode(this.userForm.EMail).then(() => {
|
|
this.settime(this)
|
|
// 发送成功
|
|
this.$message.success(this.$t('trials:trials-myinfo:message:sendSuccessfully'))
|
|
})
|
|
},
|
|
save() {
|
|
this.$refs.passwordForm.validate(valid => {
|
|
if (valid) {
|
|
if (this.password.NewPassWord !== this.password.ConfirmPassWord) {
|
|
this.$message.error(this.$t('passwordReset:formRule:passwordsDiffer'))
|
|
return
|
|
}
|
|
const param = {
|
|
UserId: this.userId,
|
|
NewPassWord: md5(this.password.NewPassWord),
|
|
OldPassWord: md5(this.password.OldPassWord)
|
|
}
|
|
modifyPassword(param).then(res => {
|
|
if (res.IsSuccess) {
|
|
// 修改成功,请重新登录账号
|
|
this.$message.success(this.$t('trials:trials-myinfo:message:modifyPWSuccessfully'))
|
|
setTimeout(() => {
|
|
this.logout()
|
|
}, 1000)
|
|
}
|
|
})
|
|
}
|
|
})
|
|
},
|
|
setNewEmail() {
|
|
setNewEmail(this.userForm.EMail, this.userForm.VerificationCode).then(() => {
|
|
this.userForm.EMail = ''
|
|
this.userForm.VerificationCode = ''
|
|
this.$message.success(this.$t('trials:trials-myinfo:message:updateSuccessfully'))
|
|
this.getUserInfo()
|
|
})
|
|
},
|
|
setNewUserName() {
|
|
setNewUserName(this.userForm.UserName).then(() => {
|
|
this.userForm.UserName = ''
|
|
this.$message.success(this.$t('trials:trials-myinfo:message:updateSuccessfully'))
|
|
this.getUserInfo()
|
|
})
|
|
},
|
|
setNewPhone() {
|
|
setNewPhone(this.userForm.Phone).then(() => {
|
|
this.userForm.Phone = ''
|
|
this.$message.success(this.$t('trials:trials-myinfo:message:updateSuccessfully'))
|
|
this.getUserInfo()
|
|
})
|
|
},
|
|
getUserInfo() {
|
|
const loading = this.$loading({
|
|
fullscreen: false,
|
|
lock: true,
|
|
text: 'Loading',
|
|
spinner: 'el-icon-loading',
|
|
background: 'rgba(0, 0, 0, 0.07)'
|
|
})
|
|
getUser(this.userId).then(async res => {
|
|
this.user = res.Result
|
|
/* eslint-disable */
|
|
zzSessionStorage.setItem('realName', this.user.RealName)
|
|
await store.dispatch('user/updateInfo')
|
|
loading.close()
|
|
}).catch(() => { loading.close() })
|
|
},
|
|
settime(obj) {
|
|
if (countdown === 0) {
|
|
obj.sendDisabled = false
|
|
obj.sendTitle = this.$t('trials:trials-myinfo:button:getVCode')// '获取验证码'
|
|
countdown = 60
|
|
clearTimeout(timer)
|
|
return
|
|
} else {
|
|
obj.sendDisabled = true
|
|
obj.sendTitle = `${this.$t('trials:trials-myinfo:button:wait')}(${countdown}s)`
|
|
countdown--
|
|
// eslint-disable-next-line no-self-assign
|
|
countdown = countdown
|
|
timer = setTimeout(function() {
|
|
obj.settime(obj)
|
|
}, 1000)
|
|
}
|
|
},
|
|
getUserTypeList() {
|
|
getUserTypeList().then(res => {
|
|
if (res.IsSuccess) {
|
|
this.userTypeOptions = res.Result
|
|
}
|
|
})
|
|
},
|
|
async logout() {
|
|
/* eslint-disable */
|
|
var loginType = zzSessionStorage.getItem('loginType')
|
|
await this.$store.dispatch('user/logout')
|
|
if (loginType) {
|
|
this.$router.push(`/login?loginType=${loginType}`)
|
|
} else {
|
|
this.$router.push(`/login`)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
.trial-myinfo{
|
|
flex: 1;overflow: auto;display: flex;flex-direction: row;justify-content: space-around;
|
|
.trial-myinfo-head{
|
|
position: absolute;top: 40px;left: -10%;font-size: 14px;
|
|
}
|
|
.trial-myinfo-left{
|
|
overflow: auto;
|
|
background: #fff;width: calc(50% - 9px);margin: 6px 0;
|
|
padding-bottom: 50px;
|
|
.trial-myinfo-left-top{
|
|
width: 70%;padding-top: 100px;position: relative;margin: 0 auto;margin-bottom: 10px;
|
|
.trial-myinfo-body{
|
|
width:160px;height:160px;border-radius: 50%;background: #00bca0;display: flex;justify-content: center;align-items: center;
|
|
div{
|
|
color:#fff;font-size: 30px;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.saveBtn{
|
|
position: absolute;right: -10px;top:2px;transform: translateX(100%)
|
|
}
|
|
.trial-info-btn{
|
|
position: absolute;bottom: -60px;left: calc(100% + 10px);min-width: 97px;
|
|
}
|
|
.trial-myinfo-left-bottom{
|
|
width: 70%;padding-top: 100px;position: relative;margin: 0 auto;
|
|
}
|
|
.trial-myinfo-right{
|
|
overflow: auto;
|
|
background: #fff;width: calc(50% - 9px);margin: 6px 0;
|
|
padding-bottom: 50px;
|
|
.sendCode {
|
|
position: absolute;right: -10px;top: 50%;transform: translate(100%, -50%);
|
|
}
|
|
.trial-myinfo-right-box{
|
|
width: 70%;padding-top: 100px;position: relative;margin: 0 auto;
|
|
}
|
|
}
|
|
}
|
|
</style>
|