|
|
@@ -7,47 +7,45 @@
|
|
|
<div class="aui-content">
|
|
|
<div class="aui-container">
|
|
|
<div class="aui-form">
|
|
|
- <div class="aui-image">
|
|
|
-
|
|
|
- </div>
|
|
|
+ <div class="aui-image"> </div>
|
|
|
<div class="aui-formBox">
|
|
|
<div class="aui-formWell">
|
|
|
<div class="aui-flex aui-form-nav investment_title">
|
|
|
- <div class="aui-flex-box" :class="activeIndex === 'accountLogin' ? 'activeNav on' : ''"
|
|
|
- @click="loginClick('accountLogin')">{{ t('sys.login.signInFormTitle') }}
|
|
|
+ <div class="aui-flex-box" :class="activeIndex === 'accountLogin' ? 'activeNav on' : ''" @click="loginClick('accountLogin')"
|
|
|
+ >{{ t('sys.login.signInFormTitle') }}
|
|
|
</div>
|
|
|
-
|
|
|
</div>
|
|
|
<div class="aui-form-box" style="height: 240px">
|
|
|
- <a-form ref="loginRef" :model="formData" v-if="activeIndex === 'accountLogin'"
|
|
|
- @keyup.enter.native="loginHandleClick">
|
|
|
+ <a-form ref="loginRef" :model="formData" v-if="activeIndex === 'accountLogin'" @keyup.enter.native="loginHandleClick">
|
|
|
<div class="aui-account">
|
|
|
<div class="aui-inputClear">
|
|
|
<i class="icon icon-code"></i>
|
|
|
<a-form-item>
|
|
|
- <a-input class="fix-auto-fill" :placeholder="t('sys.login.userName')"
|
|
|
- v-model:value="formData.username" />
|
|
|
+ <a-input class="fix-auto-fill" :placeholder="t('sys.login.userName')" v-model:value="formData.username" />
|
|
|
</a-form-item>
|
|
|
</div>
|
|
|
<div class="aui-inputClear">
|
|
|
<i class="icon icon-password"></i>
|
|
|
<a-form-item>
|
|
|
- <a-input class="fix-auto-fill" type="password" :placeholder="t('sys.login.password')"
|
|
|
- v-model:value="formData.password" />
|
|
|
+ <a-input class="fix-auto-fill" type="password" :placeholder="t('sys.login.password')" v-model:value="formData.password" />
|
|
|
</a-form-item>
|
|
|
</div>
|
|
|
|
|
|
<div class="aui-inputClear" v-if="showDepart">
|
|
|
<i class="icon icon-depart"></i>
|
|
|
<div class="JLoginSelectDept">
|
|
|
- <a-select allow-clear style="width: 100%" :bordered="false"
|
|
|
- v-model:value="formData.loginOrgCode" :placeholder="t('sys.login.loginOrgCode')">
|
|
|
+ <a-select
|
|
|
+ allow-clear
|
|
|
+ style="width: 100%"
|
|
|
+ :bordered="false"
|
|
|
+ v-model:value="formData.loginOrgCode"
|
|
|
+ :placeholder="t('sys.login.loginOrgCode')"
|
|
|
+ >
|
|
|
<template #suffixIcon>
|
|
|
<Icon icon="ant-design:gold-outline" />
|
|
|
</template>
|
|
|
<template v-for="depart in departList" :key="depart.orgCode">
|
|
|
- <a-select-option :value="depart.orgCode">{{ getShortDeptName(depart.label)
|
|
|
- }}</a-select-option>
|
|
|
+ <a-select-option :value="depart.orgCode">{{ getShortDeptName(depart.label) }}</a-select-option>
|
|
|
</template>
|
|
|
</a-select>
|
|
|
</div>
|
|
|
@@ -67,30 +65,31 @@
|
|
|
<a-form v-else ref="phoneFormRef" :model="phoneFormData" @keyup.enter.native="loginHandleClick">
|
|
|
<div class="aui-account phone">
|
|
|
<div class="aui-inputClear phoneClear">
|
|
|
- <a-input class="fix-auto-fill" :placeholder="t('sys.login.mobile')"
|
|
|
- v-model:value="phoneFormData.mobile" />
|
|
|
+ <a-input class="fix-auto-fill" :placeholder="t('sys.login.mobile')" v-model:value="phoneFormData.mobile" />
|
|
|
</div>
|
|
|
<div class="aui-inputClear">
|
|
|
- <a-input class="fix-auto-fill" :maxlength="6" :placeholder="t('sys.login.smsCode')"
|
|
|
- v-model:value="phoneFormData.smscode" />
|
|
|
+ <a-input class="fix-auto-fill" :maxlength="6" :placeholder="t('sys.login.smsCode')" v-model:value="phoneFormData.smscode" />
|
|
|
<div v-if="showInterval" class="aui-code" @click="getLoginCode">
|
|
|
<a>{{ t('component.countdown.normalText') }}</a>
|
|
|
</div>
|
|
|
<div v-else class="aui-code">
|
|
|
- <span class="aui-get-code code-shape">{{ t('component.countdown.sendText',
|
|
|
- [unref(timeRuning)]) }}</span>
|
|
|
+ <span class="aui-get-code code-shape">{{ t('component.countdown.sendText', [unref(timeRuning)]) }}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="aui-inputClear" v-if="showDepart">
|
|
|
<div class="JLoginSelectDept">
|
|
|
- <a-select allow-clear style="width: 100%" :bordered="false"
|
|
|
- v-model:value="phoneFormData.loginOrgCode" :placeholder="t('sys.login.loginOrgCode')">
|
|
|
+ <a-select
|
|
|
+ allow-clear
|
|
|
+ style="width: 100%"
|
|
|
+ :bordered="false"
|
|
|
+ v-model:value="phoneFormData.loginOrgCode"
|
|
|
+ :placeholder="t('sys.login.loginOrgCode')"
|
|
|
+ >
|
|
|
<template #suffixIcon>
|
|
|
<Icon icon="ant-design:gold-outline" />
|
|
|
</template>
|
|
|
<template v-for="depart in departList" :key="depart.orgCode">
|
|
|
- <a-select-option :value="depart.orgCode">{{ getShortDeptName(depart.label)
|
|
|
- }}</a-select-option>
|
|
|
+ <a-select-option :value="depart.orgCode">{{ getShortDeptName(depart.label) }}</a-select-option>
|
|
|
</template>
|
|
|
</a-select>
|
|
|
</div>
|
|
|
@@ -101,12 +100,11 @@
|
|
|
<div class="aui-formButton">
|
|
|
<div class="aui-flex">
|
|
|
<a-button :loading="loginLoading" class="aui-link-login" type="primary" @click="loginHandleClick">
|
|
|
- {{ t('sys.login.loginButton') }}</a-button>
|
|
|
+ {{ t('sys.login.loginButton') }}</a-button
|
|
|
+ >
|
|
|
</div>
|
|
|
-
|
|
|
</div>
|
|
|
</div>
|
|
|
-
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -129,560 +127,560 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
<script lang="ts" setup name="login-mini">
|
|
|
-import { getCaptcha, getCodeInfo } from '/@/api/sys/user';
|
|
|
-import { computed, onMounted, reactive, ref, toRaw, unref, watch } from 'vue';
|
|
|
-import codeImg from '/@/assets/images/checkcode.png';
|
|
|
-import { Rule } from '/@/components/Form';
|
|
|
-import { useUserStore } from '/@/store/modules/user';
|
|
|
-import { useMessage } from '/@/hooks/web/useMessage';
|
|
|
-import { useI18n } from '/@/hooks/web/useI18n';
|
|
|
-import { SmsEnum } from '/@/views/sys/login/useLogin';
|
|
|
-import ThirdModal from '/@/views/sys/login/ThirdModal.vue';
|
|
|
-import MiniForgotpad from './MiniForgotpad.vue';
|
|
|
-import MiniRegister from './MiniRegister.vue';
|
|
|
-import MiniCodelogin from './MiniCodelogin.vue';
|
|
|
-// import logoImg from '/@/assets/loginmini/icon/jeecg_logo.png';
|
|
|
-import adTextImg from '/@/assets/loginmini/icon/jeecg_ad_text.png';
|
|
|
-import { AppLocalePicker, AppDarkModeToggle } from '/@/components/Application';
|
|
|
-import { useLocaleStore } from '/@/store/modules/locale';
|
|
|
-import { createLocalStorage } from '/@/utils/cache';
|
|
|
-import { useDesign } from '/@/hooks/web/useDesign';
|
|
|
-import { useAppInject } from '/@/hooks/web/useAppInject';
|
|
|
-import { GithubFilled, WechatFilled, DingtalkCircleFilled, createFromIconfontCN } from '@ant-design/icons-vue';
|
|
|
-import CaptchaModal from '@/components/jeecg/captcha/CaptchaModal.vue';
|
|
|
-import { useModal } from '@/components/Modal';
|
|
|
-import { ExceptionEnum } from '@/enums/exceptionEnum';
|
|
|
-import { defHttp } from '@/utils/http/axios';
|
|
|
-
|
|
|
-const IconFont = createFromIconfontCN({
|
|
|
- scriptUrl: '//at.alicdn.com/t/font_2316098_umqusozousr.js',
|
|
|
-});
|
|
|
-const { prefixCls } = useDesign('mini-login');
|
|
|
-const { notification, createMessage } = useMessage();
|
|
|
-const userStore = useUserStore();
|
|
|
-const { t } = useI18n();
|
|
|
-const $ls = createLocalStorage();
|
|
|
-const localeStore = useLocaleStore();
|
|
|
-const showLocale = localeStore.getShowPicker;
|
|
|
-const randCodeData = reactive<any>({
|
|
|
- randCodeImage: '',
|
|
|
- requestCodeSuccess: false,
|
|
|
- checkKey: null,
|
|
|
-});
|
|
|
-// 记住用户名
|
|
|
-const rememberMe = ref<boolean>(false);
|
|
|
-const REMEMBER_USERNAME_KEY = 'LOGIN_REMEMBER_USERNAME';
|
|
|
-//手机号登录还是账号登录
|
|
|
-const activeIndex = ref<string>('accountLogin');
|
|
|
-const type = ref<string>('login');
|
|
|
-//账号登录表单字段
|
|
|
-const formData = reactive<any>({
|
|
|
- inputCode: '',
|
|
|
- username: 'admin',
|
|
|
- password: 'admin123admin',
|
|
|
- loginOrgCode: '',
|
|
|
-});
|
|
|
-//手机登录表单字段
|
|
|
-const phoneFormData = reactive<any>({
|
|
|
- mobile: '',
|
|
|
- smscode: '',
|
|
|
- loginOrgCode: '',
|
|
|
-});
|
|
|
-const loginRef = ref();
|
|
|
-//第三方登录弹窗
|
|
|
-const thirdModalRef = ref();
|
|
|
-//扫码登录
|
|
|
-const codeRef = ref();
|
|
|
-//是否显示获取验证码
|
|
|
-const showInterval = ref<boolean>(true);
|
|
|
-//60s
|
|
|
-const timeRuning = ref<number>(60);
|
|
|
-//定时器
|
|
|
-const timer = ref<any>(null);
|
|
|
-//忘记密码
|
|
|
-const forgotRef = ref();
|
|
|
-//注册
|
|
|
-const registerRef = ref();
|
|
|
-const loginLoading = ref<boolean>(false);
|
|
|
-const { getIsMobile } = useAppInject();
|
|
|
-const [captchaRegisterModal, { openModal: openCaptchaModal }] = useModal();
|
|
|
-defineProps({
|
|
|
- sessionTimeout: {
|
|
|
- type: Boolean,
|
|
|
- },
|
|
|
-});
|
|
|
-//**********************查询部门逻辑begin**********************************************
|
|
|
-//用户部门
|
|
|
-const departList = ref([]);
|
|
|
-//部门显示
|
|
|
-const showDepart = computed(() => {
|
|
|
- return departList.value.length > 1;
|
|
|
-});
|
|
|
-//获取部门缩写
|
|
|
-const getShortDeptName = computed(() => {
|
|
|
- return (deptName) => {
|
|
|
- if (!deptName) return '';
|
|
|
- if (deptName.length > 18) {
|
|
|
- return '...' + deptName.substring(deptName.length - 18, deptName.length);
|
|
|
+ import { getCaptcha, getCodeInfo } from '/@/api/sys/user';
|
|
|
+ import { computed, onMounted, reactive, ref, toRaw, unref, watch } from 'vue';
|
|
|
+ import codeImg from '/@/assets/images/checkcode.png';
|
|
|
+ import { Rule } from '/@/components/Form';
|
|
|
+ import { useUserStore } from '/@/store/modules/user';
|
|
|
+ import { useMessage } from '/@/hooks/web/useMessage';
|
|
|
+ import { useI18n } from '/@/hooks/web/useI18n';
|
|
|
+ import { SmsEnum } from '/@/views/sys/login/useLogin';
|
|
|
+ import ThirdModal from '/@/views/sys/login/ThirdModal.vue';
|
|
|
+ import MiniForgotpad from './MiniForgotpad.vue';
|
|
|
+ import MiniRegister from './MiniRegister.vue';
|
|
|
+ import MiniCodelogin from './MiniCodelogin.vue';
|
|
|
+ // import logoImg from '/@/assets/loginmini/icon/jeecg_logo.png';
|
|
|
+ import adTextImg from '/@/assets/loginmini/icon/jeecg_ad_text.png';
|
|
|
+ import { AppLocalePicker, AppDarkModeToggle } from '/@/components/Application';
|
|
|
+ import { useLocaleStore } from '/@/store/modules/locale';
|
|
|
+ import { createLocalStorage } from '/@/utils/cache';
|
|
|
+ import { useDesign } from '/@/hooks/web/useDesign';
|
|
|
+ import { useAppInject } from '/@/hooks/web/useAppInject';
|
|
|
+ import { GithubFilled, WechatFilled, DingtalkCircleFilled, createFromIconfontCN } from '@ant-design/icons-vue';
|
|
|
+ import CaptchaModal from '@/components/jeecg/captcha/CaptchaModal.vue';
|
|
|
+ import { useModal } from '@/components/Modal';
|
|
|
+ import { ExceptionEnum } from '@/enums/exceptionEnum';
|
|
|
+ import { defHttp } from '@/utils/http/axios';
|
|
|
+
|
|
|
+ const IconFont = createFromIconfontCN({
|
|
|
+ scriptUrl: '//at.alicdn.com/t/font_2316098_umqusozousr.js',
|
|
|
+ });
|
|
|
+ const { prefixCls } = useDesign('mini-login');
|
|
|
+ const { notification, createMessage } = useMessage();
|
|
|
+ const userStore = useUserStore();
|
|
|
+ const { t } = useI18n();
|
|
|
+ const $ls = createLocalStorage();
|
|
|
+ const localeStore = useLocaleStore();
|
|
|
+ const showLocale = localeStore.getShowPicker;
|
|
|
+ const randCodeData = reactive<any>({
|
|
|
+ randCodeImage: '',
|
|
|
+ requestCodeSuccess: false,
|
|
|
+ checkKey: null,
|
|
|
+ });
|
|
|
+ // 记住用户名
|
|
|
+ const rememberMe = ref<boolean>(false);
|
|
|
+ const REMEMBER_USERNAME_KEY = 'LOGIN_REMEMBER_USERNAME';
|
|
|
+ //手机号登录还是账号登录
|
|
|
+ const activeIndex = ref<string>('accountLogin');
|
|
|
+ const type = ref<string>('login');
|
|
|
+ //账号登录表单字段
|
|
|
+ const formData = reactive<any>({
|
|
|
+ inputCode: '',
|
|
|
+ username: 'admin',
|
|
|
+ password: 'admin123admin',
|
|
|
+ loginOrgCode: '',
|
|
|
+ });
|
|
|
+ //手机登录表单字段
|
|
|
+ const phoneFormData = reactive<any>({
|
|
|
+ mobile: '',
|
|
|
+ smscode: '',
|
|
|
+ loginOrgCode: '',
|
|
|
+ });
|
|
|
+ const loginRef = ref();
|
|
|
+ //第三方登录弹窗
|
|
|
+ const thirdModalRef = ref();
|
|
|
+ //扫码登录
|
|
|
+ const codeRef = ref();
|
|
|
+ //是否显示获取验证码
|
|
|
+ const showInterval = ref<boolean>(true);
|
|
|
+ //60s
|
|
|
+ const timeRuning = ref<number>(60);
|
|
|
+ //定时器
|
|
|
+ const timer = ref<any>(null);
|
|
|
+ //忘记密码
|
|
|
+ const forgotRef = ref();
|
|
|
+ //注册
|
|
|
+ const registerRef = ref();
|
|
|
+ const loginLoading = ref<boolean>(false);
|
|
|
+ const { getIsMobile } = useAppInject();
|
|
|
+ const [captchaRegisterModal, { openModal: openCaptchaModal }] = useModal();
|
|
|
+ defineProps({
|
|
|
+ sessionTimeout: {
|
|
|
+ type: Boolean,
|
|
|
+ },
|
|
|
+ });
|
|
|
+ //**********************查询部门逻辑begin**********************************************
|
|
|
+ //用户部门
|
|
|
+ const departList = ref([]);
|
|
|
+ //部门显示
|
|
|
+ const showDepart = computed(() => {
|
|
|
+ return departList.value.length > 1;
|
|
|
+ });
|
|
|
+ //获取部门缩写
|
|
|
+ const getShortDeptName = computed(() => {
|
|
|
+ return (deptName) => {
|
|
|
+ if (!deptName) return '';
|
|
|
+ if (deptName.length > 18) {
|
|
|
+ return '...' + deptName.substring(deptName.length - 18, deptName.length);
|
|
|
+ }
|
|
|
+ return deptName;
|
|
|
+ };
|
|
|
+ });
|
|
|
+ //监听验证码和输入框的修改
|
|
|
+ watch(
|
|
|
+ () => [formData.inputCode, phoneFormData.smscode],
|
|
|
+ () => {
|
|
|
+ if ((formData.inputCode && formData.inputCode.length == 4) || (phoneFormData.smscode && phoneFormData.smscode.length == 6)) {
|
|
|
+ checkAccount();
|
|
|
+ }
|
|
|
}
|
|
|
- return deptName;
|
|
|
- };
|
|
|
-});
|
|
|
-//监听验证码和输入框的修改
|
|
|
-watch(
|
|
|
- () => [formData.inputCode, phoneFormData.smscode],
|
|
|
- () => {
|
|
|
- if ((formData.inputCode && formData.inputCode.length == 4) || (phoneFormData.smscode && phoneFormData.smscode.length == 6)) {
|
|
|
- checkAccount();
|
|
|
+ );
|
|
|
+ /**
|
|
|
+ * 监听账号变化,清除部门信息
|
|
|
+ */
|
|
|
+ watch(
|
|
|
+ () => [formData.username, phoneFormData.mobile, activeIndex.value],
|
|
|
+ () => {
|
|
|
+ formData.loginOrgCode = null;
|
|
|
+ phoneFormData.loginOrgCode = null;
|
|
|
+ departList.value = [];
|
|
|
+ if ((formData.inputCode && formData.inputCode.length == 4) || (phoneFormData.smscode && phoneFormData.smscode.length == 6)) {
|
|
|
+ checkAccount();
|
|
|
+ }
|
|
|
}
|
|
|
+ );
|
|
|
+
|
|
|
+ //初始化数据
|
|
|
+ let deptTimer;
|
|
|
+ function checkAccount() {
|
|
|
+ deptTimer && clearTimeout(deptTimer);
|
|
|
+ deptTimer = setTimeout(async () => {
|
|
|
+ let loginType = activeIndex.value === 'accountLogin' ? 'account' : 'phone';
|
|
|
+ // 验证条件提取
|
|
|
+ const isValidAccount = loginType === 'account' && formData.username && formData.password;
|
|
|
+ const isValidPhone = loginType == 'phone' && phoneFormData.mobile && phoneFormData.smscode;
|
|
|
+ let finalFormData = loginType == 'phone' ? { ...phoneFormData } : { ...formData };
|
|
|
+ if (!isValidAccount && !isValidPhone) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //查询部门信息前,优先进行账户校验
|
|
|
+ if (departList.value && departList.value.length == 0) {
|
|
|
+ let params = { ...finalFormData, loginType: activeIndex.value === 'accountLogin' ? 'account' : 'phone' };
|
|
|
+ if (loginType == 'account') {
|
|
|
+ params['checkKey'] = randCodeData.checkKey;
|
|
|
+ }
|
|
|
+ const res = await defHttp.post(
|
|
|
+ {
|
|
|
+ url: '/sys/loginGetUserDeparts',
|
|
|
+ params: { ...params },
|
|
|
+ },
|
|
|
+ { isTransformResponse: false }
|
|
|
+ );
|
|
|
+ if (res.success && res.result) {
|
|
|
+ let { departs, currentOrgCode } = res.result;
|
|
|
+ // 判断当前部门是否在所属的部门列表中
|
|
|
+ if (departs && departs.length > 0) {
|
|
|
+ // 代码逻辑说明: JHHB-790 用户部门变更,会出现这个情况(因为之前设置的这里只切换部门,过滤了公司和岗位信息)
|
|
|
+ const hasCurrentDepart = departs.some((item) => item.orgCode == currentOrgCode);
|
|
|
+ formData.loginOrgCode = hasCurrentDepart ? currentOrgCode : null;
|
|
|
+ phoneFormData.loginOrgCode = hasCurrentDepart ? currentOrgCode : null;
|
|
|
+ departList.value = departs.map((item) => {
|
|
|
+ return {
|
|
|
+ label: item.departName,
|
|
|
+ value: item.orgCode,
|
|
|
+ orgCode: item.orgCode,
|
|
|
+ departName: item.departName,
|
|
|
+ };
|
|
|
+ });
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //createMessage.warn(res.message);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }, 500);
|
|
|
+ }
|
|
|
+ //**********************查询部门逻辑end*************************************************
|
|
|
+ /**
|
|
|
+ * 获取验证码
|
|
|
+ */
|
|
|
+ function handleChangeCheckCode() {
|
|
|
+ formData.inputCode = '';
|
|
|
+ // 代码逻辑说明: [QQYUN-10775]验证码可以复用 #7674------------
|
|
|
+ randCodeData.checkKey = new Date().getTime() + Math.random().toString(36).slice(-4); // 1629428467008;
|
|
|
+ getCodeInfo(randCodeData.checkKey).then((res) => {
|
|
|
+ randCodeData.randCodeImage = res;
|
|
|
+ randCodeData.requestCodeSuccess = true;
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 切换登录方式
|
|
|
+ */
|
|
|
+ function loginClick(type) {
|
|
|
+ activeIndex.value = type;
|
|
|
}
|
|
|
-);
|
|
|
-/**
|
|
|
- * 监听账号变化,清除部门信息
|
|
|
- */
|
|
|
-watch(
|
|
|
- () => [formData.username, phoneFormData.mobile, activeIndex.value],
|
|
|
- () => {
|
|
|
- formData.loginOrgCode = null;
|
|
|
- phoneFormData.loginOrgCode = null;
|
|
|
- departList.value = [];
|
|
|
- if ((formData.inputCode && formData.inputCode.length == 4) || (phoneFormData.smscode && phoneFormData.smscode.length == 6)) {
|
|
|
- checkAccount();
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 账号或者手机登录
|
|
|
+ */
|
|
|
+ async function loginHandleClick() {
|
|
|
+ if (unref(activeIndex) === 'accountLogin') {
|
|
|
+ accountLogin();
|
|
|
+ } else {
|
|
|
+ //手机号登录
|
|
|
+ phoneLogin();
|
|
|
}
|
|
|
}
|
|
|
-);
|
|
|
-
|
|
|
-//初始化数据
|
|
|
-let deptTimer;
|
|
|
-function checkAccount() {
|
|
|
- deptTimer && clearTimeout(deptTimer);
|
|
|
- deptTimer = setTimeout(async () => {
|
|
|
- let loginType = activeIndex.value === 'accountLogin' ? 'account' : 'phone';
|
|
|
- // 验证条件提取
|
|
|
- const isValidAccount = loginType === 'account' && formData.username && formData.password;
|
|
|
- const isValidPhone = loginType == 'phone' && phoneFormData.mobile && phoneFormData.smscode;
|
|
|
- let finalFormData = loginType == 'phone' ? { ...phoneFormData } : { ...formData };
|
|
|
- if (!isValidAccount && !isValidPhone) {
|
|
|
+
|
|
|
+ async function accountLogin() {
|
|
|
+ if (!formData.username) {
|
|
|
+ createMessage.warn(t('sys.login.accountPlaceholder'));
|
|
|
return;
|
|
|
}
|
|
|
- //查询部门信息前,优先进行账户校验
|
|
|
- if (departList.value && departList.value.length == 0) {
|
|
|
- let params = { ...finalFormData, loginType: activeIndex.value === 'accountLogin' ? 'account' : 'phone' };
|
|
|
- if (loginType == 'account') {
|
|
|
- params['checkKey'] = randCodeData.checkKey;
|
|
|
- }
|
|
|
- const res = await defHttp.post(
|
|
|
- {
|
|
|
- url: '/sys/loginGetUserDeparts',
|
|
|
- params: { ...params },
|
|
|
- },
|
|
|
- { isTransformResponse: false }
|
|
|
+ if (!formData.password) {
|
|
|
+ createMessage.warn(t('sys.login.passwordPlaceholder'));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ loginLoading.value = true;
|
|
|
+
|
|
|
+ // 密码使用AES加密传输
|
|
|
+ const { userInfo } = await userStore.login(
|
|
|
+ toRaw({
|
|
|
+ password: formData.password,
|
|
|
+ username: formData.username,
|
|
|
+ loginOrgCode: formData.loginOrgCode,
|
|
|
+ captcha: formData.inputCode,
|
|
|
+ checkKey: randCodeData.checkKey,
|
|
|
+ mode: 'none', //不要默认的错误提示
|
|
|
+ })
|
|
|
);
|
|
|
- if (res.success && res.result) {
|
|
|
- let { departs, currentOrgCode } = res.result;
|
|
|
- // 判断当前部门是否在所属的部门列表中
|
|
|
- if (departs && departs.length > 0) {
|
|
|
- // 代码逻辑说明: JHHB-790 用户部门变更,会出现这个情况(因为之前设置的这里只切换部门,过滤了公司和岗位信息)
|
|
|
- const hasCurrentDepart = departs.some((item) => item.orgCode == currentOrgCode);
|
|
|
- formData.loginOrgCode = hasCurrentDepart ? currentOrgCode : null;
|
|
|
- phoneFormData.loginOrgCode = hasCurrentDepart ? currentOrgCode : null;
|
|
|
- departList.value = departs.map((item) => {
|
|
|
- return {
|
|
|
- label: item.departName,
|
|
|
- value: item.orgCode,
|
|
|
- orgCode: item.orgCode,
|
|
|
- departName: item.departName,
|
|
|
- };
|
|
|
- });
|
|
|
+ if (userInfo) {
|
|
|
+ notification.success({
|
|
|
+ message: t('sys.login.loginSuccessTitle'),
|
|
|
+ description: `${t('sys.login.loginSuccessDesc')}: ${userInfo.realname}`,
|
|
|
+ duration: 3,
|
|
|
+ });
|
|
|
+ // 登录成功后处理记住用户名
|
|
|
+ if (rememberMe.value && formData.username) {
|
|
|
+ $ls.set(REMEMBER_USERNAME_KEY, formData.username);
|
|
|
+ } else {
|
|
|
+ $ls.remove(REMEMBER_USERNAME_KEY);
|
|
|
}
|
|
|
- } else {
|
|
|
- //createMessage.warn(res.message);
|
|
|
}
|
|
|
+ } catch (error) {
|
|
|
+ notification.error({
|
|
|
+ message: t('sys.api.errorTip'),
|
|
|
+ description: error.message || t('sys.login.networkExceptionMsg'),
|
|
|
+ duration: 3,
|
|
|
+ });
|
|
|
+ handleChangeCheckCode();
|
|
|
+ } finally {
|
|
|
+ loginLoading.value = false;
|
|
|
}
|
|
|
- }, 500);
|
|
|
-}
|
|
|
-//**********************查询部门逻辑end*************************************************
|
|
|
-/**
|
|
|
- * 获取验证码
|
|
|
- */
|
|
|
-function handleChangeCheckCode() {
|
|
|
- formData.inputCode = '';
|
|
|
- // 代码逻辑说明: [QQYUN-10775]验证码可以复用 #7674------------
|
|
|
- randCodeData.checkKey = new Date().getTime() + Math.random().toString(36).slice(-4); // 1629428467008;
|
|
|
- getCodeInfo(randCodeData.checkKey).then((res) => {
|
|
|
- randCodeData.randCodeImage = res;
|
|
|
- randCodeData.requestCodeSuccess = true;
|
|
|
- });
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * 切换登录方式
|
|
|
- */
|
|
|
-function loginClick(type) {
|
|
|
- activeIndex.value = type;
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * 账号或者手机登录
|
|
|
- */
|
|
|
-async function loginHandleClick() {
|
|
|
- if (unref(activeIndex) === 'accountLogin') {
|
|
|
- accountLogin();
|
|
|
- } else {
|
|
|
- //手机号登录
|
|
|
- phoneLogin();
|
|
|
}
|
|
|
-}
|
|
|
|
|
|
-async function accountLogin() {
|
|
|
- if (!formData.username) {
|
|
|
- createMessage.warn(t('sys.login.accountPlaceholder'));
|
|
|
- return;
|
|
|
- }
|
|
|
- if (!formData.password) {
|
|
|
- createMessage.warn(t('sys.login.passwordPlaceholder'));
|
|
|
- return;
|
|
|
- }
|
|
|
- try {
|
|
|
- loginLoading.value = true;
|
|
|
-
|
|
|
- // 密码使用AES加密传输
|
|
|
- const { userInfo } = await userStore.login(
|
|
|
- toRaw({
|
|
|
- password: formData.password,
|
|
|
- username: formData.username,
|
|
|
- loginOrgCode: formData.loginOrgCode,
|
|
|
- captcha: formData.inputCode,
|
|
|
- checkKey: randCodeData.checkKey,
|
|
|
+ /**
|
|
|
+ * 手机号登录
|
|
|
+ */
|
|
|
+ async function phoneLogin() {
|
|
|
+ if (!phoneFormData.mobile) {
|
|
|
+ createMessage.warn(t('sys.login.mobilePlaceholder'));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!phoneFormData.smscode) {
|
|
|
+ createMessage.warn(t('sys.login.smsPlaceholder'));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ loginLoading.value = true;
|
|
|
+ const { userInfo }: any = await userStore.phoneLogin({
|
|
|
+ mobile: phoneFormData.mobile,
|
|
|
+ captcha: phoneFormData.smscode,
|
|
|
+ loginOrgCode: phoneFormData.loginOrgCode,
|
|
|
mode: 'none', //不要默认的错误提示
|
|
|
- })
|
|
|
- );
|
|
|
- if (userInfo) {
|
|
|
- notification.success({
|
|
|
- message: t('sys.login.loginSuccessTitle'),
|
|
|
- description: `${t('sys.login.loginSuccessDesc')}: ${userInfo.realname}`,
|
|
|
- duration: 3,
|
|
|
});
|
|
|
- // 登录成功后处理记住用户名
|
|
|
- if (rememberMe.value && formData.username) {
|
|
|
- $ls.set(REMEMBER_USERNAME_KEY, formData.username);
|
|
|
- } else {
|
|
|
- $ls.remove(REMEMBER_USERNAME_KEY);
|
|
|
+ if (userInfo) {
|
|
|
+ notification.success({
|
|
|
+ message: t('sys.login.loginSuccessTitle'),
|
|
|
+ description: `${t('sys.login.loginSuccessDesc')}: ${userInfo.realname}`,
|
|
|
+ duration: 3,
|
|
|
+ });
|
|
|
}
|
|
|
+ } catch (error) {
|
|
|
+ notification.error({
|
|
|
+ message: t('sys.api.errorTip'),
|
|
|
+ description: error.message || t('sys.login.networkExceptionMsg'),
|
|
|
+ duration: 3,
|
|
|
+ });
|
|
|
+ } finally {
|
|
|
+ loginLoading.value = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取手机验证码
|
|
|
+ */
|
|
|
+ async function getLoginCode() {
|
|
|
+ if (!phoneFormData.mobile) {
|
|
|
+ createMessage.warn(t('sys.login.mobilePlaceholder'));
|
|
|
+ return;
|
|
|
}
|
|
|
- } catch (error) {
|
|
|
- notification.error({
|
|
|
- message: t('sys.api.errorTip'),
|
|
|
- description: error.message || t('sys.login.networkExceptionMsg'),
|
|
|
- duration: 3,
|
|
|
+ // 代码逻辑说明: 【issues/8567】严重:修改密码存在水平越权问题:登录应该用登录模板不应该用忘记密码的模板---
|
|
|
+ const result = await getCaptcha({ mobile: phoneFormData.mobile, smsmode: SmsEnum.LOGIN }).catch((res) => {
|
|
|
+ if (res.code === ExceptionEnum.PHONE_SMS_FAIL_CODE) {
|
|
|
+ openCaptchaModal(true, {});
|
|
|
+ }
|
|
|
});
|
|
|
- handleChangeCheckCode();
|
|
|
- } finally {
|
|
|
- loginLoading.value = false;
|
|
|
+ if (result) {
|
|
|
+ const TIME_COUNT = 60;
|
|
|
+ if (!unref(timer)) {
|
|
|
+ timeRuning.value = TIME_COUNT;
|
|
|
+ showInterval.value = false;
|
|
|
+ timer.value = setInterval(() => {
|
|
|
+ if (unref(timeRuning) > 0 && unref(timeRuning) <= TIME_COUNT) {
|
|
|
+ timeRuning.value = timeRuning.value - 1;
|
|
|
+ } else {
|
|
|
+ showInterval.value = true;
|
|
|
+ clearInterval(unref(timer));
|
|
|
+ timer.value = null;
|
|
|
+ }
|
|
|
+ }, 1000);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * 手机号登录
|
|
|
- */
|
|
|
-async function phoneLogin() {
|
|
|
- if (!phoneFormData.mobile) {
|
|
|
- createMessage.warn(t('sys.login.mobilePlaceholder'));
|
|
|
- return;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 第三方登录
|
|
|
+ * @param type
|
|
|
+ */
|
|
|
+ function onThirdLogin(type) {
|
|
|
+ thirdModalRef.value.onThirdLogin(type);
|
|
|
}
|
|
|
- if (!phoneFormData.smscode) {
|
|
|
- createMessage.warn(t('sys.login.smsPlaceholder'));
|
|
|
- return;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 忘记密码
|
|
|
+ */
|
|
|
+ function forgetHandelClick() {
|
|
|
+ type.value = 'forgot';
|
|
|
+ setTimeout(() => {
|
|
|
+ forgotRef.value.initForm();
|
|
|
+ }, 300);
|
|
|
}
|
|
|
- try {
|
|
|
- loginLoading.value = true;
|
|
|
- const { userInfo }: any = await userStore.phoneLogin({
|
|
|
- mobile: phoneFormData.mobile,
|
|
|
- captcha: phoneFormData.smscode,
|
|
|
- loginOrgCode: phoneFormData.loginOrgCode,
|
|
|
- mode: 'none', //不要默认的错误提示
|
|
|
- });
|
|
|
- if (userInfo) {
|
|
|
- notification.success({
|
|
|
- message: t('sys.login.loginSuccessTitle'),
|
|
|
- description: `${t('sys.login.loginSuccessDesc')}: ${userInfo.realname}`,
|
|
|
- duration: 3,
|
|
|
- });
|
|
|
- }
|
|
|
- } catch (error) {
|
|
|
- notification.error({
|
|
|
- message: t('sys.api.errorTip'),
|
|
|
- description: error.message || t('sys.login.networkExceptionMsg'),
|
|
|
- duration: 3,
|
|
|
- });
|
|
|
- } finally {
|
|
|
- loginLoading.value = false;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 返回登录页面
|
|
|
+ */
|
|
|
+ function goBack() {
|
|
|
+ activeIndex.value = 'accountLogin';
|
|
|
+ type.value = 'login';
|
|
|
}
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * 获取手机验证码
|
|
|
- */
|
|
|
-async function getLoginCode() {
|
|
|
- if (!phoneFormData.mobile) {
|
|
|
- createMessage.warn(t('sys.login.mobilePlaceholder'));
|
|
|
- return;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 忘记密码/注册账号回调事件
|
|
|
+ * @param value
|
|
|
+ */
|
|
|
+ function handleSuccess(value) {
|
|
|
+ Object.assign(formData, value);
|
|
|
+ Object.assign(phoneFormData, { mobile: '', smscode: '' });
|
|
|
+ type.value = 'login';
|
|
|
+ activeIndex.value = 'accountLogin';
|
|
|
+ handleChangeCheckCode();
|
|
|
}
|
|
|
- // 代码逻辑说明: 【issues/8567】严重:修改密码存在水平越权问题:登录应该用登录模板不应该用忘记密码的模板---
|
|
|
- const result = await getCaptcha({ mobile: phoneFormData.mobile, smsmode: SmsEnum.LOGIN }).catch((res) => {
|
|
|
- if (res.code === ExceptionEnum.PHONE_SMS_FAIL_CODE) {
|
|
|
- openCaptchaModal(true, {});
|
|
|
- }
|
|
|
- });
|
|
|
- if (result) {
|
|
|
- const TIME_COUNT = 60;
|
|
|
- if (!unref(timer)) {
|
|
|
- timeRuning.value = TIME_COUNT;
|
|
|
- showInterval.value = false;
|
|
|
- timer.value = setInterval(() => {
|
|
|
- if (unref(timeRuning) > 0 && unref(timeRuning) <= TIME_COUNT) {
|
|
|
- timeRuning.value = timeRuning.value - 1;
|
|
|
- } else {
|
|
|
- showInterval.value = true;
|
|
|
- clearInterval(unref(timer));
|
|
|
- timer.value = null;
|
|
|
- }
|
|
|
- }, 1000);
|
|
|
- }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 注册
|
|
|
+ */
|
|
|
+ function registerHandleClick() {
|
|
|
+ type.value = 'register';
|
|
|
+ setTimeout(() => {
|
|
|
+ registerRef.value.initForm();
|
|
|
+ }, 300);
|
|
|
}
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * 第三方登录
|
|
|
- * @param type
|
|
|
- */
|
|
|
-function onThirdLogin(type) {
|
|
|
- thirdModalRef.value.onThirdLogin(type);
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * 忘记密码
|
|
|
- */
|
|
|
-function forgetHandelClick() {
|
|
|
- type.value = 'forgot';
|
|
|
- setTimeout(() => {
|
|
|
- forgotRef.value.initForm();
|
|
|
- }, 300);
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * 返回登录页面
|
|
|
- */
|
|
|
-function goBack() {
|
|
|
- activeIndex.value = 'accountLogin';
|
|
|
- type.value = 'login';
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * 忘记密码/注册账号回调事件
|
|
|
- * @param value
|
|
|
- */
|
|
|
-function handleSuccess(value) {
|
|
|
- Object.assign(formData, value);
|
|
|
- Object.assign(phoneFormData, { mobile: '', smscode: '' });
|
|
|
- type.value = 'login';
|
|
|
- activeIndex.value = 'accountLogin';
|
|
|
- handleChangeCheckCode();
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * 注册
|
|
|
- */
|
|
|
-function registerHandleClick() {
|
|
|
- type.value = 'register';
|
|
|
- setTimeout(() => {
|
|
|
- registerRef.value.initForm();
|
|
|
- }, 300);
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * 注册
|
|
|
- */
|
|
|
-function codeHandleClick() {
|
|
|
- type.value = 'codeLogin';
|
|
|
- setTimeout(() => {
|
|
|
- codeRef.value.initFrom();
|
|
|
- }, 300);
|
|
|
-}
|
|
|
-
|
|
|
-onMounted(() => {
|
|
|
- //加载验证码
|
|
|
- handleChangeCheckCode();
|
|
|
- // 恢复已记住的用户名
|
|
|
- const saved = $ls.get(REMEMBER_USERNAME_KEY);
|
|
|
- if (saved) {
|
|
|
- formData.username = saved;
|
|
|
- rememberMe.value = true;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 注册
|
|
|
+ */
|
|
|
+ function codeHandleClick() {
|
|
|
+ type.value = 'codeLogin';
|
|
|
+ setTimeout(() => {
|
|
|
+ codeRef.value.initFrom();
|
|
|
+ }, 300);
|
|
|
}
|
|
|
-});
|
|
|
+
|
|
|
+ onMounted(() => {
|
|
|
+ //加载验证码
|
|
|
+ handleChangeCheckCode();
|
|
|
+ // 恢复已记住的用户名
|
|
|
+ const saved = $ls.get(REMEMBER_USERNAME_KEY);
|
|
|
+ if (saved) {
|
|
|
+ formData.username = saved;
|
|
|
+ rememberMe.value = true;
|
|
|
+ }
|
|
|
+ });
|
|
|
</script>
|
|
|
|
|
|
<style lang="less" scoped>
|
|
|
-@import '/@/assets/loginmini/style/home.less';
|
|
|
-@import '/@/assets/loginmini/style/base.less';
|
|
|
-
|
|
|
-:deep(.ant-input:focus) {
|
|
|
- box-shadow: none;
|
|
|
-}
|
|
|
-
|
|
|
-.aui-get-code {
|
|
|
- float: right;
|
|
|
- position: relative;
|
|
|
- z-index: 3;
|
|
|
- background: #ffffff;
|
|
|
- color: #1573e9;
|
|
|
- border-radius: 100px;
|
|
|
- padding: 5px 16px;
|
|
|
- margin: 7px;
|
|
|
- border: 1px solid #1573e9;
|
|
|
- top: 12px;
|
|
|
-}
|
|
|
-
|
|
|
-.aui-get-code:hover {
|
|
|
- color: #1573e9;
|
|
|
-}
|
|
|
-
|
|
|
-.code-shape {
|
|
|
- border-color: #dadada !important;
|
|
|
- color: #aaa !important;
|
|
|
-}
|
|
|
-
|
|
|
-:deep(.jeecg-dark-switch) {
|
|
|
- position: absolute;
|
|
|
- margin-right: 10px;
|
|
|
-}
|
|
|
-
|
|
|
-.aui-link-login {
|
|
|
- height: 42px;
|
|
|
- padding: 10px 15px;
|
|
|
- font-size: 14px;
|
|
|
- border-radius: 8px;
|
|
|
- margin-top: 15px;
|
|
|
- margin-bottom: 8px;
|
|
|
- flex: 1;
|
|
|
- color: #fff;
|
|
|
-}
|
|
|
-
|
|
|
-.aui-phone-logo {
|
|
|
- position: absolute;
|
|
|
- margin-left: 10px;
|
|
|
- width: 60px;
|
|
|
- top: 2px;
|
|
|
- z-index: 4;
|
|
|
-}
|
|
|
-
|
|
|
-.top-3 {
|
|
|
- top: 0.45rem;
|
|
|
-}
|
|
|
-
|
|
|
-.JLoginSelectDept {
|
|
|
- margin: 5px auto;
|
|
|
-
|
|
|
- :deep(.ant-select-selection-placeholder) {
|
|
|
+ @import '/@/assets/loginmini/style/home.less';
|
|
|
+ @import '/@/assets/loginmini/style/base.less';
|
|
|
+
|
|
|
+ :deep(.ant-input:focus) {
|
|
|
+ box-shadow: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ .aui-get-code {
|
|
|
+ float: right;
|
|
|
+ position: relative;
|
|
|
+ z-index: 3;
|
|
|
+ background: #ffffff;
|
|
|
+ color: #1573e9;
|
|
|
+ border-radius: 100px;
|
|
|
+ padding: 5px 16px;
|
|
|
+ margin: 7px;
|
|
|
+ border: 1px solid #1573e9;
|
|
|
+ top: 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .aui-get-code:hover {
|
|
|
+ color: #1573e9;
|
|
|
+ }
|
|
|
+
|
|
|
+ .code-shape {
|
|
|
+ border-color: #dadada !important;
|
|
|
+ color: #aaa !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ :deep(.jeecg-dark-switch) {
|
|
|
+ position: absolute;
|
|
|
+ margin-right: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .aui-link-login {
|
|
|
+ height: 42px;
|
|
|
+ padding: 10px 15px;
|
|
|
font-size: 14px;
|
|
|
- color: #9a9a9a;
|
|
|
+ border-radius: 8px;
|
|
|
+ margin-top: 15px;
|
|
|
+ margin-bottom: 8px;
|
|
|
+ flex: 1;
|
|
|
+ color: #fff;
|
|
|
+ }
|
|
|
+
|
|
|
+ .aui-phone-logo {
|
|
|
+ position: absolute;
|
|
|
+ margin-left: 10px;
|
|
|
+ width: 60px;
|
|
|
+ top: 2px;
|
|
|
+ z-index: 4;
|
|
|
+ }
|
|
|
+
|
|
|
+ .top-3 {
|
|
|
+ top: 0.45rem;
|
|
|
+ }
|
|
|
+
|
|
|
+ .JLoginSelectDept {
|
|
|
+ margin: 5px auto;
|
|
|
+
|
|
|
+ :deep(.ant-select-selection-placeholder) {
|
|
|
+ font-size: 14px;
|
|
|
+ color: #9a9a9a;
|
|
|
+ }
|
|
|
}
|
|
|
-}
|
|
|
</style>
|
|
|
|
|
|
<style lang="less">
|
|
|
-@prefix-cls: ~'@{namespace}-mini-login';
|
|
|
-@dark-bg: #293146;
|
|
|
+ @prefix-cls: ~'@{namespace}-mini-login';
|
|
|
+ @dark-bg: #293146;
|
|
|
|
|
|
-html[data-theme='dark'] {
|
|
|
- .@{prefix-cls} {
|
|
|
- background-color: @dark-bg !important;
|
|
|
- background-image: none;
|
|
|
+ html[data-theme='dark'] {
|
|
|
+ .@{prefix-cls} {
|
|
|
+ background-color: @dark-bg !important;
|
|
|
+ background-image: none;
|
|
|
|
|
|
- &::before {
|
|
|
- background-image: url(/@/assets/svg/login-bg-dark.svg);
|
|
|
- }
|
|
|
+ &::before {
|
|
|
+ background-image: url(/@/assets/svg/login-bg-dark.svg);
|
|
|
+ }
|
|
|
|
|
|
- .aui-inputClear {
|
|
|
- background-color: #232a3b !important;
|
|
|
- }
|
|
|
+ .aui-inputClear {
|
|
|
+ background-color: #232a3b !important;
|
|
|
+ }
|
|
|
|
|
|
- .ant-input,
|
|
|
- .ant-input-password {
|
|
|
- background-color: #232a3b !important;
|
|
|
- }
|
|
|
+ .ant-input,
|
|
|
+ .ant-input-password {
|
|
|
+ background-color: #232a3b !important;
|
|
|
+ }
|
|
|
|
|
|
- .ant-btn:not(.ant-btn-link):not(.ant-btn-primary) {
|
|
|
- border: 1px solid #4a5569 !important;
|
|
|
- }
|
|
|
+ .ant-btn:not(.ant-btn-link):not(.ant-btn-primary) {
|
|
|
+ border: 1px solid #4a5569 !important;
|
|
|
+ }
|
|
|
|
|
|
- &-form {
|
|
|
- background: @dark-bg !important;
|
|
|
- }
|
|
|
+ &-form {
|
|
|
+ background: @dark-bg !important;
|
|
|
+ }
|
|
|
|
|
|
- .app-iconify {
|
|
|
- color: #fff !important;
|
|
|
- }
|
|
|
+ .app-iconify {
|
|
|
+ color: #fff !important;
|
|
|
+ }
|
|
|
|
|
|
- .aui-inputClear input,
|
|
|
- .aui-input-line input,
|
|
|
- .aui-choice {
|
|
|
- color: #c9d1d9 !important;
|
|
|
- }
|
|
|
+ .aui-inputClear input,
|
|
|
+ .aui-input-line input,
|
|
|
+ .aui-choice {
|
|
|
+ color: #c9d1d9 !important;
|
|
|
+ }
|
|
|
|
|
|
- .aui-formBox {
|
|
|
- background-color: @dark-bg !important;
|
|
|
- }
|
|
|
+ .aui-formBox {
|
|
|
+ background-color: @dark-bg !important;
|
|
|
+ }
|
|
|
|
|
|
- .aui-third-text span {
|
|
|
- background-color: @dark-bg !important;
|
|
|
- }
|
|
|
+ .aui-third-text span {
|
|
|
+ background-color: @dark-bg !important;
|
|
|
+ }
|
|
|
|
|
|
- .aui-form-nav .aui-flex-box {
|
|
|
- color: #c9d1d9 !important;
|
|
|
- }
|
|
|
+ .aui-form-nav .aui-flex-box {
|
|
|
+ color: #c9d1d9 !important;
|
|
|
+ }
|
|
|
|
|
|
- .aui-formButton .aui-linek-code {
|
|
|
- background: @dark-bg !important;
|
|
|
- color: white !important;
|
|
|
- }
|
|
|
+ .aui-formButton .aui-linek-code {
|
|
|
+ background: @dark-bg !important;
|
|
|
+ color: white !important;
|
|
|
+ }
|
|
|
|
|
|
- .aui-code-line {
|
|
|
- border-left: none !important;
|
|
|
- }
|
|
|
+ .aui-code-line {
|
|
|
+ border-left: none !important;
|
|
|
+ }
|
|
|
|
|
|
- .ant-checkbox-inner,
|
|
|
- .aui-success h3 {
|
|
|
- border-color: #c9d1d9;
|
|
|
- }
|
|
|
+ .ant-checkbox-inner,
|
|
|
+ .aui-success h3 {
|
|
|
+ border-color: #c9d1d9;
|
|
|
+ }
|
|
|
|
|
|
- // 代码逻辑说明: 【QQYUN-6363】这个样式代码有问题,不在里面,导致表达式有问题------------
|
|
|
- &-sign-in-way {
|
|
|
- .anticon {
|
|
|
- font-size: 22px !important;
|
|
|
- color: #888 !important;
|
|
|
- cursor: pointer !important;
|
|
|
+ // 代码逻辑说明: 【QQYUN-6363】这个样式代码有问题,不在里面,导致表达式有问题------------
|
|
|
+ &-sign-in-way {
|
|
|
+ .anticon {
|
|
|
+ font-size: 22px !important;
|
|
|
+ color: #888 !important;
|
|
|
+ cursor: pointer !important;
|
|
|
|
|
|
- &:hover {
|
|
|
- color: @primary-color !important;
|
|
|
+ &:hover {
|
|
|
+ color: @primary-color !important;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- input.fix-auto-fill,
|
|
|
- .fix-auto-fill input {
|
|
|
- -webkit-text-fill-color: #c9d1d9 !important;
|
|
|
- box-shadow: inherit !important;
|
|
|
- }
|
|
|
+ input.fix-auto-fill,
|
|
|
+ .fix-auto-fill input {
|
|
|
+ -webkit-text-fill-color: #c9d1d9 !important;
|
|
|
+ box-shadow: inherit !important;
|
|
|
+ }
|
|
|
|
|
|
- .ant-divider-inner-text {
|
|
|
- font-size: 12px !important;
|
|
|
- color: @text-color-secondary !important;
|
|
|
- }
|
|
|
+ .ant-divider-inner-text {
|
|
|
+ font-size: 12px !important;
|
|
|
+ color: @text-color-secondary !important;
|
|
|
+ }
|
|
|
|
|
|
- .aui-third-login a {
|
|
|
- background: transparent;
|
|
|
+ .aui-third-login a {
|
|
|
+ background: transparent;
|
|
|
+ }
|
|
|
}
|
|
|
-}
|
|
|
</style>
|