Files
coinbus/yq/src/components/CommonHeader.vue
2026-01-16 10:32:27 +08:00

2132 lines
60 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>
<div class="header">
<div class="log"></div>
<div>
<!-- 未登录 -->
<div v-show="loginstatus">
<ul class="headList2">
<!-- 首页 -->
<!-- <li @click="handelJump(`/Home`)" disabled>{{ $t(`login.home`) }} </li> -->
<!-- 数据图表 -->
<!-- @click="handelJump(`/`)">{{$t(`login.Charts`)}}</el-menu-item> -->
<!-- <li @click="handelJump(`/`)" disabled>{{ $t(`login.Charts`) }} </li> -->
<!-- 登录 -->
<li @click="handelLogin" v-show="loginstatus">
{{ $t("login.btn") }}
</li>
<!-- 注册 -->
<li class="registered" v-show="loginstatus" @click="clickregistered">
{{ $t("login.registered") }}
</li>
<!-- 语言 -->
<li class="langs" @click="handelSwitching">{{ langs }}</li>
</ul>
</div>
<!-- 登录后 -->
<div v-show="!loginstatus">
<!-- 更新版本页头 -->
<div class="">
<el-menu
:default-active="activeIndex"
class="el-menu-demoNew"
mode="horizontal"
style="width: 100%"
background-color="#383d71"
text-color="#fff"
active-text-color="#f7931a"
>
<!-- <el-menu-item index="1" @click="handelJump(`/Home`)" disabled >{{$t(`login.home`)}}</el-menu-item> -->
<el-menu-item index="2" @click="handelJump(`/`)">{{
$t(`login.Charts`)
}}</el-menu-item>
<!-- <el-menu-item index="3" disabled>{{$t(`login.researchReport`)}}</el-menu-item> -->
<el-submenu index="4" id="submenuBox">
<template slot="title">
<span style="text-transform: none">{{
userName
}}</span></template
>
<el-menu-item index="4-1" @click.native="handelPeople">{{
$t(`login.personal`)
}}</el-menu-item>
<el-submenu index="4-2">
<template slot="title">{{
$t(`login.customerService`)
}}</template>
<el-menu-item index="4-2-1" @click.native="handelHelp">{{
$t(`login.submitWork`)
}}</el-menu-item>
<!-- <el-menu-item index="4-2-2" >{{$t(`login.historicalWork`)}}</el-menu-item> -->
<!-- <el-menu-item index="4-2-3" >{{$t(`login.onlineService`)}}</el-menu-item> -->
</el-submenu>
<!-- 消息订阅 -->
<el-menu-item index="4-3" @click.native="handelJump(`/Alarm`)">{{
$t(`login.subscribeBoard`)
}}</el-menu-item>
<!-- 账号升级 -->
<!-- <el-submenu index="4-4">
<template slot="title">{{$t(`login.accountUpgrade`)}}</template>
<el-menu-item index="4-4-1" @click.native="handelJump(`/privilegeLevel`)">{{$t(`login.accountUpgrade`)}}</el-menu-item>
<el-menu-item index="4-4-2">{{$t(`login.HistoryRecord`)}}</el-menu-item>
</el-submenu> -->
<!-- <el-menu-item index="4-5" v-show="identityLabel == `support` || identityLabel == `verifier`|| identityLabel == `admin`" >{{ $t(`login.publishResearchReport`) }}</el-menu-item> -->
<el-submenu
index="4-6"
v-show="
identityLabel == `accounting` || identityLabel == `admin`
"
>
<!-- 财务管理 -->
<template slot="title">{{ $t(`login.finance`) }}</template>
<el-menu-item
index="4-6-1"
@click.native="handelJump(`/BackgroundAddress`)"
>{{ $t(`login.backgroundAddress`) }}</el-menu-item
>
<el-menu-item
index="4-6-2"
@click.native="handelJump(`/RechargeRecord`)"
>{{ $t(`login.dataStatistics`) }}</el-menu-item
>
</el-submenu>
<!-- 客服管理 -->
<el-menu-item
index="4-7"
@click.native="handelJump(`/HelpBackstage`)"
v-show="identityLabel == `admin`"
>{{ $t(`login.CustomerManagemen`) }}</el-menu-item
>
<!-- <el-menu-item index="4-8" @click.native="handelJump(`/RechargeRecord`)" v-show="identityLabel == `admin`" >{{ $t(`login.dataStatistics`) }}</el-menu-item> -->
<el-menu-item index="4-9" @click.native="handelExit">{{
$t("login.exit")
}}</el-menu-item>
</el-submenu>
<!-- <el-menu-item index="5" @click.native="handelJump(`/privilegeLevel`)">{{$t(`login.accountUpgrade`)}}</el-menu-item> -->
<!-- <el-menu-item index="6" @click.native="handelJump(`/Alarm`)">{{$t(`login.subscribeBoard`)}}</el-menu-item> -->
<el-menu-item index="7" @click="handelSwitching">{{
langs
}}</el-menu-item>
</el-menu>
<ul class="headList2">
<!-- 首页 -->
<!-- <li @click="handelJump(`/Home`)">主页</li>
<li @click="handelJump(`/`)">数据图表</li>
<li @click="handelJump(`/research`)">研究报告</li> -->
<!-- 个人中心 -->
<!-- <li class="help">
<el-dropdown
trigger="click"
:modal-append-to-body="true"
szie="small"
class="loginMenu"
>
<span class="el-dropdown-link">
{{ $t("login.personal") }}
<i class="el-icon-arrow-down el-icon--right"></i>
</span>
<el-dropdown-menu slot="dropdown" class="header-new-dro">
<el-dropdown-item @click.native="handelPeople">
<span class="el-dropdown-link" style="text-transform: none">
{{ userName }}
</span></el-dropdown-item
>
<el-dropdown-item @click.native="handelHelp">{{
$t(`login.customerService`)
}}</el-dropdown-item>
<el-dropdown-item @click.native="handelJump(`/Alarm`)">
{{ $t(`login.subscribeBoard`) }}</el-dropdown-item
>
<el-dropdown-item
@click.native="handelJump(`/privilegeLevel`)"
>
账号升级
</el-dropdown-item>
<el-dropdown-item>发布研报</el-dropdown-item>
<el-dropdown-item>财务管理</el-dropdown-item>
<el-dropdown-item @click.native="handelJump(`/HelpBackstage`)"
>客服管理</el-dropdown-item
>
<el-dropdown-item>数据统计</el-dropdown-item>
<el-dropdown-item @click.native="handelExit">
{{ $t("login.exit") }}</el-dropdown-item
>
</el-dropdown-menu>
</el-dropdown>
</li>
<li @click="handelJump(`/Alarm`)">
{{ $t(`login.subscribeBoard`) }}
</li>
<li @click="handelJump(`/privilegeLevel`)">升级账号</li>
<li></li>
<li class="langs" @click="handelSwitching">{{ langs }}</li> -->
</ul>
</div>
</div>
</div>
<!-- 注册弹窗 -->
<el-dialog
class="registeredBox"
:append-to-body="true"
:modal-append-to-body="false"
:title="$t('login.registered')"
:visible.sync="dialogFormVisible"
:close-on-click-modal="false"
@close="handelRegister"
>
<el-form class="registeredForm" :model="registered">
<!-- 邮箱 -->
<el-form-item>
<span><span class="mandatory">*</span>{{ $t("login.mailbox") }}</span>
<el-input
@blur="handelFocus"
:placeholder="$t(`login.placeholderTitle`)"
v-model="registered.email"
size="small"
autocomplete="off"
></el-input>
<span v-show="rewriteEmail" class="rewriteEmail">{{
$t(`login.rewriteEmail`)
}}</span>
</el-form-item>
<el-form-item class="registeredUserBox">
<span
><span class="mandatory">*</span
>{{ $t("login.registeredName") }}</span
>
<el-input
:placeholder="$t(`login.placeholderTitle`)"
v-model="registered.userName"
size="small"
autocomplete="off"
class="inputBox"
></el-input>
<p class="prompt">{{ $t(`login.userPrompt`) }}</p>
</el-form-item>
<!--注册密码 -->
<el-form-item class="registeredPasswordBox">
<span
><span class="mandatory">*</span>{{ $t("login.password") }}</span
>
<el-input
:placeholder="$t(`login.placeholderTitle`)"
size="small"
v-model="registered.password"
show-password
></el-input>
<p class="prompt">{{ $t(`login.passwordPrompt`) }}</p>
</el-form-item>
<!-- 确认新密码 -->
<el-form-item>
<span
><span class="mandatory">*</span
>{{ $t(`login.ConfirmNewPassword`) }}</span
>
<el-input
v-model="ConfirmNewPsd"
size="small"
show-password
:placeholder="$t(`login.placeholderTitle`)"
autocomplete="off"
></el-input>
</el-form-item>
<!-- 电话 -->
<!-- <el-form-item>
<span>{{ $t("login.phone") }}</span>
<el-input :placeholder="$t(`login.placeholderTitle`)" size="small" v-model="registered.phone"></el-input>
</el-form-item> -->
<!-- 验证码 -->
<el-form-item class="authCode">
<span class="mandatoryBox"
><span class="mandatory">*</span>{{ $t("login.authCode") }}</span
>
<div>
<el-input
size="small"
:placeholder="$t(`login.VerificationCode`)"
v-model="registered.emailCode"
></el-input>
</div>
<!-- 获取验证码 -->
<el-button
size="small"
:disabled="codeBtn.btnStatus"
:class="{ forbban: codeBtn.btnStatus }"
@click="handelEmailCode"
type="success"
class="emailCodeButton"
>{{ $t(codeBtn.btnText) }}</el-button
>
</el-form-item>
<!-- 勾选同意 -->
<div class="checkBox">
<input type="checkbox" v-model="check" @click="checkbox($event)" />
<span>{{ $t("login.terms") }}</span>
</div>
<div class="describe">
<p v-show="show">{{ $t("login.agree") }}</p>
<p>
{{ $t("login.areAccount") }}
<span @click="handelLogin">{{ $t("login.btn") }}</span>
</p>
<!-- <p>Haven't received email confirmation? Resend Confirmation Email</p> -->
</div>
</el-form>
<div class="langBox">
<el-radio
class="radio"
@change="handelRadio('zh')"
v-model="radio"
label="zh"
>简体中文</el-radio
>
<el-radio
class="radio"
@change="handelRadio('en')"
v-model="radio"
label="en"
>English</el-radio
>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false" size="small">{{
$t("login.cancel")
}}</el-button>
<!-- 点击注册 -->
<el-button type="primary" @click="handelRegisteredEmail" size="small">{{
$t("login.registered")
}}</el-button>
</div>
</el-dialog>
<!-- 登录弹窗 -->
<el-dialog
:close-on-click-modal="false"
class="loginBOx"
:modal-append-to-body="false"
:append-to-body="true"
:title="$t('logins.data')"
:visible.sync="dialogLoginVisible"
style="z-index: 9999"
@close="handelCancel"
>
<!-- :before-close="handelClose" -->
<el-form
class="loginForm"
:model="form"
ref="loginForm"
@keydown.enter.native="handleSubmit"
>
<!-- 用户名 -->
<el-form-item class="userBox">
<span
><span class="mandatory">*</span>{{ $t("login.userName") }}</span
>
<el-input
type="text"
v-model="form.userName"
:placeholder="$t(`login.PleaseEnterYourUserName`)"
size="middle"
autocomplete="on"
name="userName111"
id="enterName"
class="enterName"
></el-input>
<span class="prompt">{{ $t(`login.userPrompt`) }} </span>
</el-form-item>
<!-- 密码输入 -->
<el-form-item class="passwordBox1">
<span
><span class="mandatory">*</span>{{ $t("login.password") }}</span
>
<el-input
size="middle"
:placeholder="$t(`login.PleasePassword`)"
type="password"
v-model="form.password"
show-password
class="enterName"
></el-input>
<span class="prompt">{{ $t(`login.passwordPrompt`) }} </span>
</el-form-item>
<!-- 验证码 -->
<el-form-item v-show="authCodeShow" class="authCode">
<span class="mandatoryBox"
><span class="mandatory">*</span>{{ $t("login.authCode") }}</span
>
<div>
<el-input
size="middle"
:placeholder="$t(`login.VerificationCode`)"
v-model="form.code"
></el-input>
</div>
<div>
<img class="codeImg" :src="codeSrc" alt="" />
<i @click="handelCode" class="icon el-icon-refresh"></i>
</div>
</el-form-item>
<!-- 没有账户? 注册 -->
<div class="loginDescribe">
<p>
{{ $t("login.account") }}
<span @click="clickregistered" style="color: #48a2ff">
{{ $t("login.registered") }}</span
>
</p>
<!-- 忘记密码? 重置密码 -->
<p>
{{ $t("login.forgotPassword") }}
<span @click="handelResetPassword" style="color: #48a2ff">{{
$t("login.resetPassword")
}}</span>
</p>
<!-- 邮件 -->
<!-- <p>
Haven't received email confirmation?
<span @click="dialogEmailVisible = true">
Resend Confirmation Email</span
>
</p> -->
</div>
</el-form>
<div class="langBox">
<el-radio
class="radio"
@change="handelRadio('zh')"
v-model="radio"
label="zh"
>简体中文</el-radio
>
<el-radio
class="radio"
@change="handelRadio('en')"
v-model="radio"
label="en"
>English</el-radio
>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handelCancel" size="small">{{
$t("login.cancel")
}}</el-button>
<el-button
type="primary"
@click="handleSubmit"
size="small"
class="loadingBtn"
:loading="loginLoading"
>
<span element-loading-spinner="el-icon-loading"></span>
{{ $t("login.login") }}</el-button
>
<!-- <el-button
type="primary"
@click="handleSwitchLanguage"
size="small"
class="loadingBtn"
>
<span
v-loading="loginLoading"
element-loading-spinner="el-icon-loading"
></span>
{{ $t("login.switchLanguages") }}</el-button
> -->
<!-- <el-button :plain="true" @click="open4">1</el-button> -->
</div>
</el-dialog>
<!-- 重置密码弹窗输入邮箱 -->
<!-- @keydown.enter.native="handelResetPasswordEmail" -->
<el-dialog
:close-on-click-modal="false"
:modal-append-to-body="false"
:append-to-body="true"
:title="$t(`login.resetPassword`)"
:visible.sync="dialogPasswordVisible"
class="passwordBox"
>
<el-form
class="passwordForm"
:model="passwordForm"
@submit.native.prevent
>
<el-form-item>
<span><span class="mandatory">*</span>{{ $t(`login.email`) }}</span>
<el-input
v-model="passwordForm.email"
size="small"
autocomplete="off"
@keydown.enter.native="handelResetPasswordEmail"
></el-input>
</el-form-item>
<p>{{ $t(`login.inputEmail`) }}</p>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogPasswordVisible = false" size="small">{{
$t(`login.cancel`)
}}</el-button>
<el-button
:loading="ResetPasswordLoading"
type="primary"
@click="handelResetPasswordEmail"
size="small"
>{{ $t(`login.emailVerification`) }}</el-button
>
</div>
</el-dialog>
<!-- 重置密码填写新密码 -->
<el-dialog
:modal-append-to-body="false"
:title="$t(`login.resetPassword`)"
:visible.sync="dialogNewPassword"
:append-to-body="true"
class="passwordBox"
:close-on-click-modal="false"
>
<el-form class="passwordForm" :model="passwordForm">
<el-form-item>
<span><span class="mandatory">*</span>{{ $t(`login.email`) }}</span>
<el-input
v-model="passwordForm.email"
disabled
size="small"
autocomplete="off"
></el-input>
</el-form-item>
<!-- 输入新密码 -->
<el-form-item>
<span
><span class="mandatory">*</span>{{ $t(`login.newPassword`) }}</span
>
<el-input
v-model="passwordForm.password"
size="small"
show-password
:placeholder="$t(`login.placeholderTitle`)"
autocomplete="off"
></el-input>
<p class="prompt" style="margin-top: 5px">
{{ $t(`login.passwordPrompt`) }}
</p>
</el-form-item>
<!-- 确认新密码 -->
<el-form-item>
<span
><span class="mandatory">*</span
>{{ $t(`login.ConfirmNewPassword`) }}</span
>
<el-input
v-model="ConfirmNewPassword"
size="small"
show-password
:placeholder="$t(`login.placeholderTitle`)"
autocomplete="off"
></el-input>
</el-form-item>
<el-form-item class="authCode">
<span class="mandatoryBox"
><span class="mandatory">*</span>{{ $t("login.authCode") }}</span
>
<div>
<el-input
size="small"
:placeholder="$t(`login.VerificationCode`)"
v-model="passwordForm.resetPwdCode"
></el-input>
</div>
<p style="margin-top: 2px">{{ $t(`login.emailCode`) }}</p>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogNewPassword = false" size="small">{{
$t(`login.cancel`)
}}</el-button>
<el-button type="primary" @click="handelNewPassword" size="small">{{
$t(`login.resetPassword`)
}}</el-button>
</div>
</el-dialog>
<!-- 重置邮箱弹窗 -->
<el-dialog
:modal-append-to-body="false"
:title="$t(`login.sendEmail`)"
:visible.sync="dialogEmailVisible"
:append-to-body="true"
class="passwordBox"
:close-on-click-modal="false"
>
<el-form class="passwordForm" :model="form">
<el-form-item>
<span><span class="mandatory">*</span>{{ $t(`login.email`) }}</span>
<el-input
v-model="form.name"
size="small"
autocomplete="off"
></el-input>
</el-form-item>
<p>{{ $t(`login.inputEmail`) }}</p>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogEmailVisible = false" size="small">{{
$t(`login.cancel`)
}}</el-button>
<el-button
type="primary"
@click="dialogEmailVisible = false"
size="small"
>{{ $t(`login.submit`) }}</el-button
>
</div>
</el-dialog>
<!-- 登录才能查看页面遮罩 -->
<div class="loginMain" v-show="lgMask">
<el-row>
<el-col :span="24">
<p>{{ $t(`login.loginMask`) }}</p>
<div class="lodinMaskBox">
<el-tag class="clickTag">{{ $t(`login.btn`) }}</el-tag>
<el-tag class="clickTag" type="success">{{
$t(`login.registered`)
}}</el-tag>
</div>
</el-col>
</el-row>
</div>
<!-- 注册通知弹窗 -->
<el-dialog
:modal-append-to-body="false"
:title="$t(`login.registrationNotice`)"
:visible.sync="registrationNotice"
:append-to-body="true"
class="passwordBox"
:close-on-click-modal="false"
>
<div class="registrationNoticeBox">
<p>{{ $t(`login.registrationPrompt`) }}</p>
<p>{{ $t(`login.registrationPrompt2`) }}</p>
<p>{{ $t(`login.registrationPrompt3`) }}</p>
<p>{{ $t(`login.registrationPrompt4`) }}</p>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="registrationNotice = false" size="small">{{
$t(`login.cancel`)
}}</el-button>
<el-button type="primary" @click="goRegister" size="small">{{
$t(`login.GoRegistered`)
}}</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { mapState } from "vuex";
import { POST, Delete } from "../api/http";
import { encryption } from "../util/fun";
import { Debounce } from "../util/processingData"; //防抖
export default {
data() {
return {
registrationNotice: false,
activeIndex: "",
show: false,
dialogEmailVisible: false,
dialogPasswordVisible: false,
dialogLoginVisible: false,
dialogFormVisible: false,
form: {
userName: "",
password: "",
code: "",
uuid: "",
},
formLabelWidth: "120px",
buttonShow: false,
token: "",
loginstatus: true,
loginLoading: false,
userName: "",
loginTime: "",
registered: {
userName: "",
password: "",
// phone: "",
email: "",
emailCode: "",
},
check: false,
lang: "",
radio: "",
langs: "",
codeSrc: "",
token: null,
registeredEmailCode: {
userName: "",
email: "",
},
dialogregisterCode: false,
passwordForm: {
email: "",
password: "",
resetPwdCode: "",
},
dialogNewPassword: false,
passwordCode: {
email: "",
},
codeBtn: {
btnStatus: false,
btnText: "login.getCode",
btnType: "primary",
},
codeTimer: null,
authCodeShow: false,
lgMask: false,
rewriteEmail: false,
ConfirmNewPassword: "",
checkVerification: "",
outTimer: "",
identity: {},
identityLabel: "",
navItem: "",
ResetPasswordLoading: false,
ConfirmNewPsd: "",
};
},
mounted() {
this.radio = this.$i18n.locale;
if (this.$i18n.locale == "en") {
this.langs = "简体中文";
} else if (this.$i18n.locale == "zh") {
this.langs = "English";
}
//取值token
this.token = localStorage.token;
// this.lgMask = localStorage.getItem("lgMask")
this.dialogLoginVisible = JSON.parse(
localStorage.getItem("dialogLoginVisible")
);
this.userName = localStorage.getItem("username");
this.navItem = JSON.parse(localStorage.getItem("params"));
//监听localstorage改变赋值
window.addEventListener("setItem", (e) => {
this.userName = localStorage.getItem("username") || ""; //用户名直接在缓存拿的
this.loginTime = localStorage.getItem("loginTime");
this.token = localStorage.token;
this.dialogLoginVisible = JSON.parse(
localStorage.getItem("dialogLoginVisible")
);
let arr = ["token", "username", "loginTime"];
if (arr.includes(e.key)) {
// this.lgMask = localStorage.getItem("lgMask")
console.log();
}
this.navItem = JSON.parse(localStorage.getItem("params"));
});
this.show = false;
this.identityLabel =
JSON.parse(localStorage.getItem("identity")).roleKey || "";
this.storeName = this.$store.state.user.userName;
},
watch: {
//监听有token 登录弹窗不弹出
token(val) {
console.log(val,"token ");
if (val) {
this.dialogLoginVisible = false;
this.$addStorageEvent(
1,
"dialogLoginVisible",
JSON.stringify(this.dialogLoginVisible)
);
this.loginstatus = false;
} else {
// this.dialogLoginVisible = false;
// this.$addStorageEvent(
// 1,
// "dialogLoginVisible",
// JSON.stringify(this.dialogLoginVisible)
// );
this.loginstatus = true;
this.userName = "";
}
},
//监听时间登录过期弹窗
loginTime(val) {
if (!val) {
localStorage.removeItem("token");
localStorage.removeItem("loginTime");
//弹出警告
if (this.$i18n.locale == "zh") {
// this.$message({
// message: "登录超时,请重新登录",
// type: "warning",
// customClass: "messageClass",
// });
} else if (this.$i18n.locale == "en") {
this.$message({
message: "Login timed out. Please log in again",
type: "warning",
customClass: "messageClass",
});
}
// this.dialogLoginVisible = true;
// this.$addStorageEvent(
// 1,
// "dialogLoginVisible",
// JSON.stringify(this.dialogLoginVisible)
// );
this.loginstatus = true;
}
},
//监听登录弹窗弹出LOading失效
dialogLoginVisible(val) {
if (val) {
this.dialogFormVisible = false;
}
this.$addStorageEvent(1, "loading", val);
},
//监听注册弹窗弹出LOading失效
dialogFormVisible(val) {
if (val) {
this.dialogLoginVisible = false;
this.$addStorageEvent(
1,
"dialogLoginVisible",
JSON.stringify(this.dialogLoginVisible)
);
} else {
this.show = false;
}
},
//监听语言切换
"$i18n.locale"(newValue) {
this.radio = this.$i18n.locale;
if (newValue == "en") {
this.langs = "简体中文";
} else if (newValue == "zh") {
this.langs = "English";
}
},
},
computed: {
//映射VUEX数据使用
...mapState({
loginUserName: (state) => state.user.userName,
}),
},
methods: {
//点击注册跳转至通知页
clickregistered() {
this.registrationNotice = true;
this.dialogLoginVisible = false;
this.$addStorageEvent(
1,
"dialogLoginVisible",
JSON.stringify(this.dialogLoginVisible)
);
},
goRegister() {
this.dialogFormVisible = true;
this.registrationNotice = false;
this.dialogLoginVisible = false;
this.$addStorageEvent(
1,
"dialogLoginVisible",
JSON.stringify(this.dialogLoginVisible)
);
},
//请求登录验证码图片
fetchCode: Debounce(async function () {
let list = await this.$API.getVerification();
let src = list.data.img;
this.codeSrc = "data:image/gif;base64," + src;
this.form.uuid = list.data.uuid;
}, 1000),
//请求注册验证码图片
fetchCodeEmail: Debounce(async function (userName, email) {
let list = await POST(userName, email);
//获取验证码后的提示信息
this.checkVerification = list.data.data;
if (list.data.code == 200) {
this.$message({
message: this.$t(`login.sendEmailCode`),
type: "success",
customClass: "messageClass",
});
} else {
//获取验证码失败清除按钮倒计时
clearTimeout(this.outTimer);
clearInterval(this.codeTimer);
//取消按钮禁用
this.codeBtn.btnStatus = false;
//按钮文字改成获取验证码
this.codeBtn.btnText = "login.getCode";
}
}, 500),
//请求重置密码验证码
fetchPasswordCode: Debounce(async function (address, email) {
this.ResetPasswordLoading = true;
let list = await POST(address, email);
// let list = await this.$API.getpasswrodCode()
if (list.data.code == 200) {
this.$message({
message: this.$t(`login.sendEmailCode`),
type: "success",
customClass: "messageClass",
});
this.dialogNewPassword = true;
this.dialogPasswordVisible = false;
} else {
// this.$message({
// message: this.$t(`login.newPasswordCodeFail`),
// type: "error",
// customClass: "messageClass",
// });
this.dialogNewPassword = false;
this.dialogPasswordVisible = true;
}
this.ResetPasswordLoading = false;
}, 500),
//请求重置密码
fetchNewPassword: Debounce(async function (address, data) {
let list = await POST(address, data);
// let list = await this.$API.getpasswrodCode()
if (list.data.code == 200) {
this.$message({
message: this.$t(`login.newPasswordSuccess`),
type: "success",
customClass: "messageClass",
});
//输入新密码弹窗隐藏 显示登录弹窗
this.dialogNewPassword = false;
this.dialogLoginVisible = true;
this.$addStorageEvent(
1,
"dialogLoginVisible",
JSON.stringify(this.dialogLoginVisible)
);
this.passwordForm.email = "";
this.passwordForm.password = "";
this.passwordForm.resetPwdCode = "";
// this.dialogPasswordVisible = false;
} else {
// this.$message({
// message: this.$t(`login.newPasswordCodeFail`),
// type: "warning",
// });
this.dialogNewPassword = true;
}
}, 500),
//请求个人中心
async fetchPersonal() {
const { data } = await this.$API.getpersonal();
if (data.code == 200) {
//拿到权限才跳转页面 关闭弹窗
this.identity = data.data.role;
this.identityLabel = data.data.role.roleKey;
//存入用户等级信息
this.$store.commit("handelIdentity", data.data.role);
localStorage.setItem("identity", JSON.stringify(data.data.role));
this.loginLoading = false;
if (this.identityLabel) {
if (this.$route.path !== "/") {
this.$router.push({
path: "/",
});
}
// 登录成功刷新更新当前页面
location.reload();
this.dialogLoginVisible = false;
this.loginstatus = false;
this.authCodeShow = false;
this.$addStorageEvent(
1,
"dialogLoginVisible",
JSON.stringify(this.dialogLoginVisible)
);
this.form.userName = "";
this.form.password = "";
this.form.uuid = "";
this.form.code = "";
} else {
//个人资料没拿到就删除token 重新登录
localStorage.removeItem("token");
this.form.userName = "";
this.form.password = "";
this.loginstatus = true;
this.dialogLoginVisible = true;
this.$addStorageEvent(
1,
"dialogLoginVisible",
JSON.stringify(this.dialogLoginVisible)
);
this.$addStorageEvent(1, "token", "");
localStorage.removeItem("username");
localStorage.setItem("identity", JSON.stringify({}));
}
this.identity = data.data.role;
this.identityLabel = data.data.role.roleKey;
//存入用户等级信息
localStorage.setItem("identity", JSON.stringify(data.data.role));
}
// this.personalList = data.data
},
//登录请求
fetchLogin: Debounce(async function (address, data) {
this.loginLoading = true;
let list = await POST(address, data);
//201 表示用户IP已变更
if (list.data.code == 201) {
//请求验证码
this.fetchCode();
this.authCodeShow = true;
this.dialogLoginVisible = true;
this.$addStorageEvent(
1,
"dialogLoginVisible",
JSON.stringify(this.dialogLoginVisible)
);
this.loginLoading = false;
return;
} else if (list.data.code == 200) {
this.token = list.data.data.access_token;
this.loginTime = list.data.data.expires_in;
this.userName = list.data.data.userName;
//存用户名 toekn 时间
this.$store.commit("handelName", list.data.data.userName);
this.storeName = list.data.data.userName;
this.$addStorageEvent(1, "username", list.data.data.userName);
this.$addStorageEvent(1, "token", list.data.data.access_token);
this.$addStorageEvent(1, "loginTime", list.data.data.expires_in);
//请求个人中心拿用户等级信息
this.fetchPersonal();
this.$addStorageEvent(1, "permissionMask", JSON.stringify(false));
} else {
this.loginLoading = false;
}
}, 500),
//调用登出接口
async handelDeleter(address, data) {
let list = await Delete(address);
this.$addStorageEvent(1, "maskShow", false);
},
//确认邮箱是否被注册
async fetchCheckMail(email) {
const data = await this.$API.getcheckMail(email);
//邮箱已被注册 就不能点击获取验证码
if (data.data.code == 301) {
this.codeBtn.btnStatus = true;
this.rewriteEmail = true; //警告邮箱已注册
} else {
this.codeBtn.btnStatus = false;
this.rewriteEmail = false;
}
},
//点击登录弹窗的取消
handelCancel() {
for (let key in this.form) {
//关闭清空
this.form[key] = null;
}
let flag = false;
this.$addStorageEvent(1, "dialogLoginVisible", JSON.stringify(flag));
this.dialogLoginVisible = false;
this.loginLoading = false;
},
//点击登录弹窗切换语言
handelRadio(value) {
this.$i18n.locale = value;
this.radio = this.$i18n.locale;
localStorage.setItem("lang", value);
},
//点击页面内切换语言
handelSwitching() {
if (this.$i18n.locale == "en") {
this.langs = "English";
this.$i18n.locale = "zh";
} else if (this.$i18n.locale == "zh") {
this.langs = "简体中文";
this.$i18n.locale = "en";
}
localStorage.setItem("lang", this.$i18n.locale);
},
//点击刷新验证码
handelCode() {
this.fetchCode();
},
//点击登录
handleSubmit() {
if (!this.form.userName) {
this.$message({
message: this.$t(`login.userNamePrompt`),
type: "error",
customClass: "messageClass",
});
return
}
if (!this.form.password) {
this.$message({
message: this.$t(`login.passwordPrompt1`),
type: "error",
customClass: "messageClass",
});
return
}
//去空格
this.form.userName = this.form.userName.trim();
this.form.password = this.form.password.trim();
if (this.form.userName !== "admin") {
//邮箱格式验证
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
let isMailbox = emailRegex.test(this.form.userName);
if (!isMailbox ) {
//用户名规则1.长度限制3<=用户名<=16; 字符限制:仅允许使用字母、数字、下划线 用户名必须以字母开头
const regex = /^[a-zA-Z][a-zA-Z0-9_]{2,15}$/; // 正则表达式
const isValid = regex.test(this.form.userName);
if (!isValid) {
// 如果输入不符合要求,可以根据具体需求给出错误提示或进行其他处理
this.$message({
message: this.$t(`login.userNamePrompt`),
type: "error",
customClass: "messageClass",
});
return;
}
}
//密码验证 8<=密码<=32 包含大小写字母、数字和特殊字符(!@#¥%……&*
let symbol = [];
const regexPassword =
/^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_]+$)(?![a-z0-9]+$)(?![a-z\W_]+$)(?![0-9\W_]+$)[a-zA-Z0-9\W_]{8,32}$/; // 正则表达式
const PasswordIsValid = regexPassword.test(this.form.password);
if (!PasswordIsValid) {
// 如果输入不符合要求,可以根据具体需求给出错误提示或进行其他处理
this.$message({
message: this.$t(`login.passwordPrompt1`),
type: "error",
customClass: "messageClass",
});
return;
}
}
//加密
const form = { ...this.form };
form.password = encryption(this.form.password);
this.fetchLogin("/auth/login", form);
},
//点击关闭
handelClose() {
this.dialogLoginVisible = false;
this.$addStorageEvent(
1,
"dialogLoginVisible",
JSON.stringify(this.dialogLoginVisible)
);
},
//点击注册弹窗关闭X
handelRegister() {
this.check = false;
this.registered.userName = "";
this.registered.password = "";
this.registered.email = "";
this.registered.emailCode = "";
this.rewriteEmail = false;
},
//点击退出
handelExit() {
this.handelDeleter("/auth/logout");
localStorage.removeItem("token");
// this.$addStorageEvent(1, "token", "");
this.form.userName = "";
this.form.password = "";
this.loginstatus = true;
this.dialogLoginVisible = true;
this.$addStorageEvent(
1,
"dialogLoginVisible",
JSON.stringify(this.dialogLoginVisible)
);
this.$addStorageEvent(1, "token", "");
localStorage.removeItem("username");
// this.$addStorageEvent(1, "permissionMask", JSON.stringify(false));
// let identity={
// roleId:0,
// roleName:"匿名用户",
// roleKey:"guest"
// }
localStorage.setItem("identity", JSON.stringify({}));
},
//点击获取邮箱验证码
handelEmailCode() {
this.registeredEmailCode.userName = this.registered.userName;
this.registeredEmailCode.email = this.registered.email;
if (
//必须输入邮箱和用户名
!(this.registeredEmailCode.userName && this.registeredEmailCode.email)
) {
this.$message({
message: this.$t(`login.warningEmailCode`),
type: "error",
customClass: "messageClass",
});
return;
}
this.fetchCodeEmail(`/auth/emailcode`, this.registeredEmailCode);
// 获取验证码后禁用按钮
this.codeBtn.btnStatus = true;
// 按钮倒计时
this.outTimer = setTimeout(() => {
this.countDown(60);
}, 5);
},
//点击注册弹窗的注册
handelRegisteredEmail() {
//判断同意条款是否选中
if (!this.check) {
this.show = true;
// this.registered.userName = "";
// this.registered.password = "";
this.$message({
message: this.$t(`login.check1`),
type: "warning",
customClass: "messageClass",
});
return;
} else {
this.show = false;
}
//判断密码不能为空
if (!this.registered.password) {
this.$message({
message: this.$t(`login.passwordValidation`),
type: "error",
customClass: "messageClass",
});
return;
}
//判断两次密码必须相同
if (this.registered.password !== this.ConfirmNewPsd) {
this.$message({
message: this.$t(`login.inconsistency`),
type: "warning",
customClass: "messageClass",
});
return;
}
//判断验证码不能为空
if (!this.registered.emailCode) {
this.$message({
message: this.$t(`login.CodeFailNull`),
type: "error",
customClass: "messageClass",
});
return;
}
//判断邮箱不能为空或者格式是否正确
// let reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/;
let reg = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
if (this.registered.email == "" || !reg.test(this.registered.email)) {
//弹出警告
if (this.$i18n.locale == "zh") {
this.$message({
message: "请检查邮箱格式是否正确(邮箱不能为空)!",
type: "error",
});
} else if (this.$i18n.locale == "en") {
this.$message({
message:
"Please check the mailbox is correct (mailbox cannot be empty)!",
type: "error",
customClass: "messageClass",
});
}
return;
}
if (this.rewriteEmail) {
//判断邮箱已被注册不能发起请求
//弹出警告
this.$message({
message: this.$t(`login.rewriteEmail`),
type: "error",
customClass: "messageClass",
});
return;
}
//判断用户是否点击了获取验证码 没有获取验证码随便输入不能点击注册\
if (!this.checkVerification && !this.codeBtn.btnStatus) {
this.$message({
message: this.$t(`login.checkVerification`),
type: "error",
customClass: "messageClass",
});
return;
}
//用户名规则1.长度限制3<=用户名<=16; 字符限制:仅允许使用字母、数字、下划线 用户名必须以字母开头
const regex = /^[a-zA-Z][a-zA-Z0-9_]{2,15}$/; // 正则表达式
const isValid = regex.test(this.registered.userName);
if (!isValid) {
// 如果输入不符合要求,可以根据具体需求给出错误提示或进行其他处理
this.$message({
message: this.$t(`login.userNamePrompt`),
type: "error",
customClass: "messageClass",
});
return;
}
// 密码验证 8<=密码<=32 包含大小写字母、数字和特殊字符(!@#¥%……&*
const regexPassword =
/^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_]+$)(?![a-z0-9]+$)(?![a-z\W_]+$)(?![0-9\W_]+$)[a-zA-Z0-9\W_]{8,32}$/; // 正则表达式
const PasswordIsValid = regexPassword.test(this.registered.password);
if (!PasswordIsValid) {
// 如果输入不符合要求,可以根据具体需求给出错误提示或进行其他处理
this.$message({
message: this.$t(`login.passwordPrompt1`),
type: "error",
customClass: "messageClass",
});
return;
}
const registered = { ...this.registered };
//加密
registered.password = encryption(this.registered.password);
this.fetchRegistered("/auth/register", registered);
},
//点击帮助
handelHelp() {
this.$router.push("help");
},
//个人中心
handelPeople() {
this.$router.push("/personal");
},
//注册请求
async fetchRegistered(address, data) {
let list = await POST(address, data);
//注册成功关闭注册弹窗 邮箱输入码弹窗 弹出登录弹窗
if (list.data.code == 200) {
this.dialogFormVisible = false;
this.dialogLoginVisible = true;
this.$addStorageEvent(
1,
"dialogLoginVisible",
JSON.stringify(this.dialogLoginVisible)
);
this.dialogregisterCode = false;
this.registered.userName = "";
this.registered.password = "";
this.registered.email = "";
this.registered.emailCode = "";
this.ConfirmNewPsd = "";
this.check = false;
this.rewriteEmail = false;
}
},
//点击获取重置密码验证码
handelResetPasswordEmail() {
if (!this.passwordForm.email) return;
this.passwordCode.email = this.passwordForm.email;
this.fetchPasswordCode(`/auth/resetPwdCode`, this.passwordCode);
// if (code !== 200) {
// this.$message({
// message: this.$t(`login.newPasswordCodeFail`),
// type: "warning",
// });
// return;
// }
// this.dialogNewPassword = true;
// this.dialogPasswordVisible = false;
},
//输入新密码,确认重置密码
handelNewPassword() {
//密码验证 8<=密码<=32 包含大小写字母、数字和特殊字符(!@#¥%……&*
const regexPassword =
/^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_]+$)(?![a-z0-9]+$)(?![a-z\W_]+$)(?![0-9\W_]+$)[a-zA-Z0-9\W_]{8,32}$/; // 正则表达式
const PasswordIsValid = regexPassword.test(this.passwordForm.password);
if (!PasswordIsValid) {
// 如果输入不符合要求,可以根据具体需求给出错误提示或进行其他处理
this.$message({
message: this.$t(`login.passwordPrompt1`),
type: "error",
customClass: "messageClass",
});
return;
}
//验证两次密码是否一致
if (this.passwordForm.password !== this.ConfirmNewPassword) {
this.$message({
message: this.$t(`login.inconsistency`),
type: "warning",
customClass: "messageClass",
});
return;
}
if (!this.passwordForm.resetPwdCode) {
this.$message({
message: this.$t(`login.CodeFailNull`),
type: "warning",
customClass: "messageClass",
});
return;
}
const passwordForm = { ...this.passwordForm };
//加密
passwordForm.password = encryption(this.passwordForm.password);
this.fetchNewPassword("/auth/resetPwd", passwordForm);
},
//判断CheckBOX是否选中
checkbox(e) {
// this.check = e.target.checked;
this.check = !this.check;
},
//点击登录界面的重置密码按钮
handelResetPassword() {
this.dialogPasswordVisible = true;
this.dialogLoginVisible = false;
this.$addStorageEvent(
1,
"dialogLoginVisible",
JSON.stringify(this.dialogLoginVisible)
);
},
//点击注册界面的登录按钮
handelLogin() {
this.dialogLoginVisible = true;
this.dialogFormVisible = false;
this.$addStorageEvent(
1,
"dialogLoginVisible",
JSON.stringify(this.dialogLoginVisible)
);
},
//验证码倒计时
countDown(val) {
//判断定时器是否存在
if (this.codeTimer) {
clearInterval(this.codeTimer);
}
//按钮文字改成发送中
this.codeBtn.btnText = "login.sending";
this.codeBtn.btnStatus = false;
//setTiemOut 执行一次
// setInterval 不断执行,需要条件才会停止
let tim = val;
this.codeTimer = setInterval(() => {
tim--;
if (tim === 0) {
clearInterval(this.codeTimer);
this.codeBtn.btnStatus = false;
//按钮文字改成获取验证码
this.codeBtn.btnText = "login.getCode";
} else {
this.codeBtn.btnStatus = true;
this.codeBtn.btnText = tim;
}
}, 1000);
},
//邮箱失焦验证是否注册过
handelFocus() {
setTimeout(() => {
//添加定时器判断 失焦时要判断同时未关闭弹窗
if (this.registered.email && this.dialogFormVisible) {
this.fetchCheckMail(this.registered.email);
}
}, 100);
},
//清除倒计时
clearCountDown() {
this.codeBtn.btnStatus = false;
this.codeBtn.btnText = "login.getCode";
//清除倒计时
clearInterval(this.codeTimer);
},
//跳转页面
handelJump(address) {
this.$router.push(address);
},
},
beforeDestroy() {
this.clearCountDown();
},
};
</script>
<style lang="scss" scoped >
.header {
position: relative;
width: 100%;
height: 60px;
// background-color: red;
// background: lavender;
// background: #fff;
// outline: 1px solid red;
display: flex;
align-items: center;
justify-content: space-between;
position: fixed;
line-height: 60px;
color: #b3c0d1;
left: 0%;
top: 0%;
z-index: 2000;
padding: 0px 20px;
// border-bottom: 1px solid rgba(0, 0, 0, 0.2);
background: #383d71;
box-shadow: 0px 2px 10px 2px #000;
.headerNavBox {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
// background: red;
padding: 0px 30px;
height: 100%;
// 头部导航菜单样式设置
.el-menu {
background: none;
::v-deep .el-menu--horizontal > .el-submenu .el-submenu__title {
color: #fff;
border: none !important;
height: 100%;
font-size: 14px;
}
.el-menu-item {
color: #fff;
border: none !important;
font-size: 14px;
}
.el-menu-item:hover {
background: none;
color: #f7931a !important;
font-weight: 500;
}
.el-menu--horizontal .el-menu .el-menu-item,
.el-menu--horizontal .el-menu .el-submenu__title {
font-size: 14px;
}
}
}
// // 头部导航菜单样式设置 二级导航文字颜色设置
::v-deep .el-menu--horizontal > .el-submenu .el-submenu__title {
// color: #fff;
// background: none ;
font-size: 14px;
}
.el-menu.el-menu--horizontal {
border: none;
}
}
// 头部导航菜单样式设置
::v-deep .el-menu--popup {
background: none !important;
}
// 头部导航菜单样式设置
::v-deep .el-menu--popup-bottom-start {
background: none !important;
}
// 头部导航菜单样式设置
// ::v-deep .el-menu--horizontal .el-menu .el-menu-item, .el-menu--horizontal .el-menu .el-submenu__title{
// font-size: 14px;
// background: rgba(0,0,0,0.8) ;
// color: #fff ;
// }
// // 头部导航菜单样式设置
// .el-menu--horizontal .el-menu .el-menu-item, .el-menu--horizontal .el-menu .el-submenu__title{
// font-size: 14px;
// background: rgba(0,0,0,0.8) ;
// color: #fff ;
// }
// // 头部导航菜单样式设置
// ::v-deep .el-menu--horizontal .el-menu .el-menu-item, .el-menu--horizontal .el-menu .el-submenu__title {
// font-size: 14px;
// background: rgba(0,0,0,0.8) ;
// color: #fff ;
// }
.registrationNoticeBox {
height: 200px;
p {
color: rgba(0, 0, 0, 0.8) !important;
margin-top: 10px !important;
}
}
.langs {
// outline: 1px solid red;
cursor: pointer;
text-decoration: underline;
}
.headList2 .langs:hover {
color: #f7931a;
}
.el-dialog {
z-index: 9999;
}
.headList,
.headList2 {
cursor: pointer;
position: absolute;
height: 100%;
display: flex;
align-items: center;
font-size: 13px;
color: rgba(0, 0, 0, 0.5);
padding-inline-start: 0px;
margin-block-end: 0px;
margin-block-start: 0px;
top: 0px;
color: #fff;
}
.headList {
left: 50px;
}
.headList2 {
right: 50px;
}
::-webkit-scrollbar {
/* //隐藏滚动条 */
width: 0 !important;
}
::-webkit-scrollbar {
/* //隐藏滚动条 */
width: 0 !important;
height: 0;
}
.header li {
list-style: none;
height: 30px;
line-height: 30px;
display: flex;
align-items: center;
justify-content: center;
}
.header li:hover {
// color: #000;
color: #f7931a;
}
.headList li {
margin-left: 15px;
}
.headList2 li {
margin-left: 15px;
}
.headList2 li {
padding: 5px 5px;
}
.headList li {
padding: 5px 5px;
}
.registered {
/* outline: 1px solid red; */
text-align: center;
outline: 1px solid rgba(0, 0, 0, 0.2);
}
/* 注册弹窗样式 */
.el-dialog {
z-index: 999999;
}
.registeredBox {
/* background: hotpink; */
z-index: 99998 !important;
width: 1000px;
margin: auto;
border: none;
outline: none;
/* background: #b3c0d1; */
text-align: left;
}
.registeredForm {
/* background: gold; */
margin-top: -30px;
}
.el-form-item {
/* background: paleturquoise; */
margin: 5px;
// height: 100px;
}
.registeredUserBox {
// outline: 1px solid red;
height: 105px;
position: relative;
.prompt {
position: absolute;
top: 80px;
left: 0px;
height: 20px;
line-height: 20px;
// display: none;
font-size: 12px;
color: #ff6365;
margin: 0;
}
// .inputBox:hover + .prompt{
// display: inline-block;
// }
}
.registeredPasswordBox {
height: 105px;
position: relative;
.prompt {
position: absolute;
top: 80px;
left: 0px;
height: 20px;
line-height: 20px;
margin: 0;
// display: none;
font-size: 12px;
color: #ff6365;
}
}
/* ----------注册弹窗勾选--------------- */
.checkBox {
display: flex;
// outline: 1px solid red;
/* outline: 1px solid red; */
width: 100%;
height: 40px;
position: relative;
align-items: center;
margin-bottom: 10px;
}
.checkBox span {
display: inline-block;
/* width: 500px; */
/* height: 50px; */
line-height: 18px;
/* outline: 1px solid red; */
font-size: 12px;
margin-left: 5px;
padding: 0 5px;
text-align: left;
}
.describe {
height: 25px;
/* outline: 1px solid red; */
display: flex;
flex-direction: column;
position: relative;
/* margin-top: -10px; */
/* background: #b3c0d1; */
}
.describe p:nth-of-type(1) {
color: #ff6365;
position: absolute;
top: -16px;
left: 30px;
}
.describe p:nth-of-type(2) {
// margin-top: 10px;
padding: 5px 0px;
}
.describe p {
// outline: 1px solid red;
/* outline: 1px solid red; */
line-height: 15px;
margin: 2px 0px;
text-align: left;
font-size: 12px;
}
.mandatory {
color: #ff6365;
}
.emailCodeButton {
// outline: 1px solid red;
// padding: 5px 10px;
color: #67c23a;
background: #f0f9eb;
border-radius: 4px;
cursor: pointer;
}
.emailCodeButton:hover {
background: #fdf6ec;
color: rgba(0, 0, 0, 0.5);
}
.forbban {
// background: rgba(0, 0, 0, 0.2);
width: 100px;
text-align: center;
// padding: 0px 10px;
// color: #fff;
// outline: 1px solid rgba(0, 0, 0, 0.2);
}
.rewriteEmail {
display: inline-block;
color: #ff6365;
// outline: 1px solid red;
height: 20px;
line-height: 20px;
position: absolute;
left: 6px;
top: 75px;
}
/* -------------登录弹窗样式---------------------- */
.loginBOx {
/* background: #ff6365; */
z-index: 99998 !important;
width: 60%;
/* height: 60%; */
margin: 0 auto;
}
.loginForm {
/* background: goldenrod; */
margin-top: -40px;
.authCode {
// outline: 1px solid red;
// display: flex;
// justify-content: space-between;
// background: gold;
margin-top: 10px;
// display: flex;
// flex-direction: column;
// flex-wrap: wrap;
// justify-content: space-between;
div:nth-of-type(1) {
// outline: 1px solid red;
width: 100%;
}
div:nth-of-type(2) {
// outline: 1px solid red;
.codeImg {
// position: absolute;
// top: 0px;
// right: 0px;
// outline: 1px solid red;
margin-top: 5px;
width: 150px;
height: 39px;
}
.icon {
font-size: 20px;
cursor: pointer;
// outline: 1px solid red;
position: absolute;
top: 95px;
left: 157px;
}
}
}
}
/* .loginDescribe{
background: #b3c0d1;
} */
.loginDescribe p {
line-height: 10px;
font-size: 11px;
}
.loginDescribe p span {
color: rgba(0, 0, 0, 0.8);
font-weight: 500;
cursor: pointer;
}
.el-form-item span {
font-size: 12px;
/* outline: 1px solid red; */
}
.langBox {
// outline: 1px solid red;
/* outline: 1px solid red; */
height: 30px;
display: flex;
align-items: center;
justify-content: left;
padding: 5px 0px;
}
.radio {
/* outline: 1px solid red; */
font-size: 10px;
/* color: red; */
}
/* .el-form-item .el-input__inner{
margin-top: -20px;
} */
.dialog-footer {
/* background: #ff6365; */
display: flex;
align-items: center;
justify-content: right;
margin-top: -30px;
}
.loadingBtn {
display: flex;
align-items: center;
justify-content: space-between;
}
.userBox {
// outline: 1px solid red;
height: 100px;
position: relative;
.prompt {
// outline: 1px solid red;
position: absolute;
top: 80px;
left: 0px;
height: 20px;
line-height: 20px;
display: none;
font-size: 12px;
color: #ff6365;
}
.enterName:hover + .prompt {
display: inline-block;
transition: 0.5s;
}
}
.passwordBox1 {
// outline: 1px solid red;
height: 110px;
position: relative;
.prompt {
// outline: 1px solid red;
position: absolute;
top: 80px;
left: 0px;
height: 20px;
line-height: 20px;
color: #ff6365;
display: none;
font-size: 12px;
}
.enterName:hover + .prompt {
display: inline-block;
transition: 0.5s;
}
}
/* -----------重置密码弹窗---------------- */
.passwordBox {
/* background: #b3c0d1; */
width: 70%;
margin: 0 auto;
z-index: 99998 !important;
}
.passwordForm {
/* background: #ff6365; */
margin-top: -40px;
}
.passwordBox p {
/* outline: 1px solid red; */
line-height: 15px;
color: #ff6365;
margin-top: -5px;
padding-left: 2px;
font-size: 12px;
}
// 登录才能查看页面的遮罩
.loginMain {
z-index: 9999 !important;
position: fixed;
top: 0px;
right: 0px;
width: 84%;
height: 100vh;
// outline: 1px solid red;
background: rgba(0, 0, 0, 0.6);
display: flex;
justify-content: center;
align-items: center;
p {
color: rgba(255, 255, 255, 0.8);
font-weight: 600;
// color: #000;
}
.lodinMaskBox {
// outline: 1px solid red;
display: flex;
justify-content: space-around;
// width: 100%;
}
.clickTag {
display: inline-block;
// outline: 1px solid red;
padding: 0px 30px;
}
}
</style>
<style lang="scss" scoped>
.header .v-modal {
//所有弹窗的默认遮罩
z-index: 99997 !important;
}
.el-input__inner {
border-color: rgba(0, 0, 0, 0.3);
transition: 0.3s;
margin-top: -20px;
// background: red;
}
::v-deep.el-popper .popper__arrow,
.el-popper .popper__arrow::after {
display: none;
}
// .el-popper[x-placement^=bottom] .popper__arrow{
// display: none !important;
// }
// .el-popper .popper__arrow::after{
// display: none !important;
// }
.el-input__inner:hover {
border-color: rgba(0, 0, 0, 0.6);
// color: #f7931a;
}
// ---------登录后显示的选择导航-------------------
.loginMenu {
position: relative;
color: rgba(0, 0, 0, 0.5);
color: #fff;
// z-index: 99999 !important;
}
.header-new-dro {
//点击用户名 下拉框层级改到最高 高于遮罩
z-index: 99999 !important;
}
.loginMenu:hover {
color: #f7931a;
// font-weight: 600;
}
.header-new-dro {
background: rgba(0, 0, 0, 0.7);
margin-left: 20px;
// position: absolute;
// width: 7%;
// right: 0px;
margin-left: 110px !important;
// outline: 1px solid red;
z-index: 99;
}
.el-dropdown-menu__item {
line-height: 25px;
padding: 0px 10px !important;
font-size: 12px;
color: #fff;
}
.el-popper .popper__arrow,
.el-popper .popper__arrow::after {
background: #67c23a;
position: absolute;
left: -200px;
opacity: 0;
}
</style>
<style >
/* 头部导航菜单样式设置 */
.el-menu--horizontal .el-menu .el-menu-item,
.el-menu--horizontal .el-menu .el-submenu__title {
font-size: 14px;
background: rgba(0, 0, 0, 0.8) !important;
color: #fff;
}
.el-menu--horizontal .el-menu .el-menu-item:hover,
.el-menu--horizontal:hover .el-menu:hover .el-submenu__title:hover {
color: #f7931a !important;
background: rgba(0, 0, 0, 0.9) !important;
font-weight: 500;
}
.el-menu--popup {
/* background: #fff !important; */
padding: 0px;
padding-top: 5px;
background: none !important;
}
</style>