Files
cmanager/src/views/tenant/account/index.vue
2024-02-02 15:04:47 +08:00

586 lines
17 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<basic-container>
<el-tabs v-model="activeName" class="tabs">
<el-tab-pane label="账户安全" name="accountSafe">
<el-row class="content">
<el-col :span="24">
<el-row>
<el-col :span="24" class="title">
<b>账户信息</b>
</el-col>
</el-row>
<el-row>
<el-col :span="24">登录账号{{userInfo.account}}</el-col>
</el-row>
<el-row>
<el-col :span="24">姓名{{userInfo.real_name}}</el-col>
</el-row>
<el-row>
<el-col :span="21">手机号码{{userInfo.account}}</el-col>
<el-col :sm="24" :lg="3">
<el-button type="text" @click="leaderBox = true" v-show="isAdmin">变更负责人</el-button>
</el-col>
</el-row>
</el-col>
</el-row>
<el-row class="content">
<el-col :span="24">
<el-row>
<el-col :span="24" class="title">
<b>账户安全</b>
</el-col>
</el-row>
<el-row>
<el-col :sm="24" :lg="6">登录密码已设置</el-col>
<el-col :sm="24" :lg="15">安全性高的密码可以使账号更安全</el-col>
<el-col :sm="24" :lg="3">
<el-button type="text" @click="passwordBox = true">修改密码</el-button>
</el-col>
</el-row>
<el-row>
<el-col :sm="24" :lg="6">绑定手机号码已绑定</el-col>
<el-col :sm="24" :lg="15">绑定手机后您即可享受丰富的手机服务如手机找回密码等</el-col>
<el-col :sm="24" :lg="3">
<el-button type="text" @click="phoneBox = true">换绑手机号码</el-button>
</el-col>
</el-row>
</el-col>
</el-row>
</el-tab-pane>
</el-tabs>
<!--修改负责人-->
<el-dialog
title="变更负责人"
append-to-body
:visible.sync="leaderBox"
:close-on-click-modal="false"
:close-on-press-escape="false"
width="30%"
@closed="closed"
:loading="leaderLoading"
>
<el-form
ref="leaderForm"
label-position="left"
label-width="110px"
size="small"
:rules="rules"
:model="leaderForm"
>
<el-form-item label="用户姓名" prop="realName">
<el-input v-model="leaderForm.realName" placeholder="请输入用户名"></el-input>
</el-form-item>
<el-form-item label="身份证号码" prop="idNumber">
<el-input v-model="leaderForm.idNumber" placeholder="请输入身份证号码"></el-input>
</el-form-item>
<el-form-item label="手机号码" prop="phone">
<el-input v-model="leaderForm.phone" placeholder="请输入手机号码"></el-input>
</el-form-item>
<el-form-item label="短信验证码" prop="code">
<el-input v-model="leaderForm.code" placeholder="请输入短信验证码">
<template slot="append">
<el-button
type="text"
@click="handleSend('leaderForm','phone')"
class="msg-text"
:loading="sending"
:disabled="msgKey"
>{{msgText}}</el-button>
</template>
</el-input>
</el-form-item>
<el-alert title="注:变更后初始密码为手机号后六位" type="warning" :closable="false"></el-alert>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button
icon="el-icon-check"
type="primary"
@click="submitLeader"
size="mini"
:loading="leaderLoading"
> </el-button>
<el-button
icon="el-icon-circle-close"
@click="leaderBox = false"
size="mini"
:loading="leaderLoading"
> </el-button>
</span>
</el-dialog>
<!--/修改负责人-->
<!--修改密码-->
<el-dialog
title="修改密码"
append-to-body
:visible.sync="passwordBox"
:close-on-click-modal="false"
:close-on-press-escape="false"
width="30%"
@closed="passwordClosed"
>
<el-form
ref="passwordForm"
label-position="left"
label-width="110px"
size="small"
:rules="rules"
:model="passwordForm"
>
<el-form-item label="原密码" prop="oldPassword">
<el-input
v-model="passwordForm.oldPassword"
auto-complete="off"
placeholder="请输入原登录密码"
:type="passwordType"
>
<i
class="el-icon-view el-input__icon"
slot="suffix"
@mouseenter="passwordType='input'"
@mouseleave="passwordType='password'"
></i>
</el-input>
</el-form-item>
<el-form-item label="新密码" prop="newPassword">
<el-input
v-model="passwordForm.newPassword"
placeholder="6-20位包含数字和字母"
:type="passwordType1"
>
<i
class="el-icon-view el-input__icon"
slot="suffix"
@mouseenter="passwordType1='input'"
@mouseleave="passwordType1='password'"
></i>
</el-input>
</el-form-item>
<el-form-item label="确认密码" prop="newPassword1">
<el-input
v-model="passwordForm.newPassword1"
placeholder="6-20位包含数字和字母"
:type="passwordType2"
>
<i
class="el-icon-view el-input__icon"
slot="suffix"
@mouseenter="passwordType2='input'"
@mouseleave="passwordType2='password'"
></i>
</el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button
icon="el-icon-check"
type="primary"
@click="submitPwd"
size="mini"
:loading="passwordLoading"
> </el-button>
<el-button
icon="el-icon-circle-close"
@click="passwordBox = false"
size="mini"
:loading="passwordLoading"
> </el-button>
</span>
</el-dialog>
<!--/修改密码-->
<!--修改手机号-->
<el-dialog
title="换绑手机号码"
append-to-body
:visible.sync="phoneBox"
:close-on-click-modal="false"
:close-on-press-escape="false"
width="30%"
@closed="phoneClosed"
>
<el-form
ref="phoneForm"
label-position="left"
label-width="110px"
size="small"
:rules="rules"
:model="phoneForm"
>
<el-form-item label="原手机号码" prop="oldPhone">
<el-input v-model="phoneForm.oldPhone" placeholder="请输入原手机号码" readonly></el-input>
</el-form-item>
<el-form-item label="新手机号码" prop="newPhone">
<el-input v-model="phoneForm.newPhone" placeholder="请输入要更换的手机号"></el-input>
</el-form-item>
<el-form-item label="短信验证码" prop="code">
<el-input v-model="phoneForm.code" placeholder="请输入短信验证码">
<template slot="append">
<el-button
type="text"
@click.prevent="handleSend('phoneForm','newPhone')"
class="msg-text"
:loading="sending"
:disabled="msgKey"
>{{msgText}}</el-button>
</template>
</el-input>
</el-form-item>
<el-alert title="注:变更后初始密码为手机号后六位" type="warning" :closable="false"></el-alert>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button
icon="el-icon-check"
type="primary"
@click="submitPhone"
size="mini"
:loading="phoneLoading"
> </el-button>
<el-button
icon="el-icon-circle-close"
@click="phoneBox = false"
size="mini"
:loading="phoneLoading"
> </el-button>
</span>
</el-dialog>
<!--/修改手机号-->
</basic-container>
</template>
<script>
import { isvalidatemobile, check18IdCardNo, password } from "@/util/validate";
import {
changeLeader,
changePwd,
sendCode,
changePhone,
} from "@/api/tenant/account";
import { resetRouter } from "@/router/router";
import { mapGetters } from "vuex";
import md5 from "js-md5";
const wait = 120;
export default {
data() {
const IdCardNo = (rule, value, callback) => {
if (check18IdCardNo(value)) {
callback();
} else {
callback(new Error("身份证格式不正确"));
}
};
const validatePhone = (rule, value, callback) => {
if (isvalidatemobile(value)[0]) {
callback(new Error(isvalidatemobile(value)[1]));
} else {
callback();
}
};
const validateCode = (rule, value, callback) => {
if (value && value.length !== 4) {
callback(new Error("验证码错误"));
} else {
callback();
}
};
const validatePassDef = (rule, value, callback) => {
if (
this.passwordForm.oldPassword &&
value === this.passwordForm.oldPassword
) {
callback(new Error("新密码不能与原密码相同"));
} else if (password(value)) {
callback(new Error("密码需要包含数字和字母并且长度为6-20位"));
} else {
callback();
}
};
const validatePassDef2 = (rule, value, callback) => {
if (value !== this.passwordForm.newPassword) {
callback(new Error("两次密码不一致"));
} else if (password(value)) {
callback(new Error("密码需要包含数字和字母并且长度为6-20位"));
} else {
callback();
}
};
const validatePhoneDef = (rule, value, callback) => {
if (value === this.phoneForm.oldPhone) {
callback(new Error("新手机号码与原手机号码不能相同"));
} else {
callback();
}
};
return {
passwordLoading: false,
leaderLoading: false,
phoneLoading: false,
sending: false,
passwordType: "password",
passwordType1: "password",
passwordType2: "password",
msgKey: false,
msgText: "获取验证码",
time: null,
activeName: "accountSafe",
accountForm: {},
leaderForm: {},
passwordForm: {},
phoneForm: {},
loading: false,
leaderBox: false,
passwordBox: false,
phoneBox: false,
rules: {
realName: [
{
required: true,
whitespace: true,
message: "请输入用户名",
trigger: "blur",
},
],
idNumber: [
{ required: true, message: "请输入身份证号", trigger: "blur" },
{ validator: IdCardNo, trigger: "blur" },
],
phone: [{ required: true, trigger: "blur", validator: validatePhone }],
code: [
{ required: true, message: "请输入短信验证码", trigger: "blur" },
{ validator: validateCode, trigger: "blur" },
],
oldPassword: [
{
required: true,
whitespace: true,
message: "请输入原来登录密码",
trigger: "blur",
},
],
newPassword: [
{
required: true,
whitespace: true,
message: "请输入新密码",
trigger: "blur",
},
{
validator: validatePassDef,
trigger: "blur",
},
],
newPassword1: [
{
required: true,
whitespace: true,
message: "请再次输入密码",
trigger: "blur",
},
{
validator: validatePassDef2,
trigger: "blur",
},
],
oldPhone: [
{ required: true, validator: validatePhone, trigger: "blur" },
],
newPhone: [
{
required: true,
message: "请输入要更换的手机号码",
trigger: "blur",
},
{
validator: validatePhoneDef,
trigger: "blur",
},
],
},
};
},
created() {
this.phoneForm = { oldPhone: this.userInfo.account };
},
components: {},
methods: {
/*发送验证码 */
handleSend(form, field) {
if (this.msgKey) return;
this.$refs[form].validateField(field, (error) => {
if (!error) {
this.sending = true;
sendCode(this[form][field]).then(
() => {
let time = wait;
this.msgText = `剩余${time--}s`;
this.msgKey = true;
this.time = setInterval(() => {
this.msgText = `剩余${time--}s`;
if (time <= 0) {
this.clearTime(); //清除定时器
}
}, 1000);
this.sending = false;
},
() => {
this.sending = false;
this.$message.error("发送失败!");
}
);
}
});
},
/*提交变更负责人*/
submitLeader() {
this.$refs.leaderForm.validate((valid) => {
if (valid) {
this.leaderLoading = true;
changeLeader(this.leaderForm).then(
() => {
this.leaderBox = false;
this.leaderLoading = false;
this.$store.dispatch("LogOut").then(() => {
resetRouter();
this.$router.push({ path: "/login" });
this.$message({
type: "success",
message: "操作成功,请重新登录!",
});
});
},
(error) => {
window.console.log(error);
this.leaderLoading = false;
}
);
}
});
},
/*提交修改密码 */
submitPwd() {
this.$refs.passwordForm.validate((valid) => {
if (valid) {
this.passwordLoading = true;
changePwd(
md5(this.passwordForm.oldPassword),
md5(this.passwordForm.newPassword),
md5(this.passwordForm.newPassword1)
).then(
() => {
this.passwordBox = false;
this.passwordLoading = false;
this.$store.dispatch("LogOut").then(() => {
resetRouter();
this.$router.push({ path: "/login" });
this.$message({
type: "success",
message: "操作成功,请重新登录!",
});
});
},
(error) => {
window.console.log(error);
this.passwordLoading = false;
}
);
}
});
},
/*提交修改手机号 */
submitPhone() {
this.$refs.phoneForm.validate((valid) => {
if (valid) {
this.phoneLoading = true;
changePhone(this.phoneForm).then(
() => {
this.phoneBox = false;
this.phoneLoading = false;
this.$store.dispatch("LogOut").then(() => {
resetRouter();
this.$router.push({ path: "/login" });
this.$message({
type: "success",
message: "操作成功,请重新登录!",
});
});
},
(error) => {
window.console.log(error);
this.phoneLoading = false;
}
);
}
});
},
closed() {
this.clearTime();
this.leaderForm = {};
if (this.$refs.leaderForm) {
this.$refs.leaderForm.resetFields();
}
},
passwordClosed() {
this.passwordForm = {};
if (this.$refs.passwordForm) {
this.$refs.passwordForm.resetFields();
}
},
phoneClosed() {
this.clearTime();
if (this.$refs.phoneForm) {
this.$refs.phoneForm.resetFields();
}
this.phoneForm = { oldPhone: this.userInfo.account };
},
/*清除code定时器 */
clearTime() {
this.msgText = "获取验证码";
this.msgKey = false;
clearInterval(this.time);
},
},
computed: {
...mapGetters(["userInfo"]),
isAdmin() {
return this.userInfo.is_master;
},
},
};
</script>
<style scoped>
.el-form-item{
margin-bottom: 22px !important;
}
.el-row {
margin-top: 10px;
}
.el-col {
margin-bottom: 0px;
line-height: 40px;
}
.el-form-item--mini.el-form-item, .el-form-item--small.el-form-item{
margin-bottom: 30px;
}
.tabs {
padding: 20px 10px 0;
}
.content {
border: 1px solid #333333;
padding: 10px 40px;
font-size: 16px;
margin: 30px 30px;
}
.msg-text {
display: block;
width: 120px;
font-size: 12px;
text-align: center;
cursor: pointer;
}
</style>