Browse Source

解决生产模式报错问题、登录页面优化

hongrunxia 4 months ago
parent
commit
d8bc58d148

+ 1 - 1
src/components/Form/src/jeecg/components/MineCascader/mineData.api.ts

@@ -2,7 +2,7 @@ import { defHttp } from '/@/utils/http/axios';
 
 enum Api {
   // 获取执法处、地区、矿信息数据
-  getSjmbStructData = 'sys/user/getSjmbStructData',
+  getSjmbStructData = '/sys/user/getSjmbStructData',
   getUserMinePermissionData = '/sys/user/getUserMinePermissionData',
 }
 

+ 1 - 1
src/utils/env.ts

@@ -19,7 +19,7 @@ export function getAppEnvConfig() {
   const ENV = (import.meta.env.DEV
     ? // Get the global configuration (the configuration will be extracted independently when packaging)
       (import.meta.env as unknown as GlobEnvConfig)
-    : global[ENV_NAME as any]) as unknown as GlobEnvConfig;
+    : window[ENV_NAME as any]) as unknown as GlobEnvConfig;
 
   const {
     VITE_GLOB_APP_TITLE,

+ 133 - 132
src/views/sys/login/Login.vue

@@ -1,6 +1,7 @@
 <template>
   <div :class="prefixCls" class="relative w-full h-full px-4">
-    <AppLocalePicker class="absolute text-white top-4 right-4 enter-x xl:text-gray-600" :showText="false" v-if="!sessionTimeout && showLocale" />
+    <AppLocalePicker class="absolute text-white top-4 right-4 enter-x xl:text-gray-600" :showText="false"
+      v-if="!sessionTimeout && showLocale" />
     <AppDarkModeToggle class="absolute top-3 right-7 enter-x" v-if="!sessionTimeout" />
     <span class="-enter-x xl:hidden">
       <AppLogo :alwaysShowTitle="true" />
@@ -11,7 +12,7 @@
         <div class="hidden min-h-full pl-4 mr-4 xl:flex xl:flex-col xl:w-6/12">
           <AppLogo class="-enter-x" />
           <div class="my-auto">
-            <img :alt="title" src="../../../assets/svg/login-box-bg.svg" class="w-1/2 -mt-16 -enter-x" />
+            <!-- <img :alt="title" src="../../../assets/svg/login-box-bg.svg" class="w-1/2 -mt-16 -enter-x" /> -->
             <div class="mt-10 font-medium text-white -enter-x">
               <span class="inline-block mt-4 text-3xl"> {{ t('sys.login.signInTitle') }}</span>
             </div>
@@ -21,10 +22,8 @@
           </div>
         </div>
         <div class="flex w-full h-full py-5 xl:h-auto xl:py-0 xl:my-0 xl:w-6/12">
-          <div
-            :class="`${prefixCls}-form`"
-            class="relative w-full px-5 py-8 mx-auto my-auto rounded-md shadow-md xl:ml-16 xl:bg-transparent sm:px-8 xl:p-4 xl:shadow-none sm:w-3/4 lg:w-2/4 xl:w-auto enter-x"
-          >
+          <div :class="`${prefixCls}-form`"
+            class="relative w-full px-5 py-8 mx-auto my-auto rounded-md shadow-md xl:ml-16 xl:bg-transparent sm:px-8 xl:p-4 xl:shadow-none sm:w-3/4 lg:w-2/4 xl:w-auto enter-x">
             <LoginForm />
             <ForgetPasswordForm />
             <RegisterForm />
@@ -37,172 +36,174 @@
   </div>
 </template>
 <script lang="ts" setup>
-  import { computed } from 'vue';
-  import { AppLogo } from '/@/components/Application';
-  import { AppLocalePicker, AppDarkModeToggle } from '/@/components/Application';
-  import LoginForm from './LoginForm.vue';
-  import ForgetPasswordForm from './ForgetPasswordForm.vue';
-  import RegisterForm from './RegisterForm.vue';
-  import MobileForm from './MobileForm.vue';
-  import QrCodeForm from './QrCodeForm.vue';
-  import { useGlobSetting } from '/@/hooks/setting';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useLocaleStore } from '/@/store/modules/locale';
-  import { useLoginState, LoginStateEnum } from './useLogin';
-  defineProps({
-    sessionTimeout: {
-      type: Boolean,
-    },
-  });
-
-  const globSetting = useGlobSetting();
-  const { prefixCls } = useDesign('login');
-  const { t } = useI18n();
-  const localeStore = useLocaleStore();
-  const showLocale = localeStore.getShowPicker;
-  const title = computed(() => globSetting?.title ?? '');
-  const { handleBackLogin } = useLoginState();
-  handleBackLogin();
+import { computed } from 'vue';
+import { AppLogo } from '/@/components/Application';
+import { AppLocalePicker, AppDarkModeToggle } from '/@/components/Application';
+import LoginForm from './LoginForm.vue';
+import ForgetPasswordForm from './ForgetPasswordForm.vue';
+import RegisterForm from './RegisterForm.vue';
+import MobileForm from './MobileForm.vue';
+import QrCodeForm from './QrCodeForm.vue';
+import { useGlobSetting } from '/@/hooks/setting';
+import { useI18n } from '/@/hooks/web/useI18n';
+import { useDesign } from '/@/hooks/web/useDesign';
+import { useLocaleStore } from '/@/store/modules/locale';
+import { useLoginState, LoginStateEnum } from './useLogin';
+defineProps({
+  sessionTimeout: {
+    type: Boolean,
+  },
+});
+
+const globSetting = useGlobSetting();
+const { prefixCls } = useDesign('login');
+const { t } = useI18n();
+const localeStore = useLocaleStore();
+const showLocale = localeStore.getShowPicker;
+const title = computed(() => globSetting?.title ?? '');
+const { handleBackLogin } = useLoginState();
+handleBackLogin();
 </script>
 <style lang="less">
-  @prefix-cls: ~'@{namespace}-login';
-  @logo-prefix-cls: ~'@{namespace}-app-logo';
-  @countdown-prefix-cls: ~'@{namespace}-countdown-input';
-  @dark-bg: #293146;
+@prefix-cls: ~'@{namespace}-login';
+@logo-prefix-cls: ~'@{namespace}-app-logo';
+@countdown-prefix-cls: ~'@{namespace}-countdown-input';
+@dark-bg: #293146;
 
-  html[data-theme='dark'] {
-    .@{prefix-cls} {
-      background-color: @dark-bg;
+html[data-theme='dark'] {
+  .@{prefix-cls} {
+    background-color: @dark-bg;
 
-      &::before {
-        background-image: url(/@/assets/svg/login-bg-dark.svg);
-      }
+    &::before {
+      background-image: url(/@/assets/svg/login-bg-dark.svg);
+    }
 
-      .ant-input,
-      .ant-input-password {
-        background-color: #232a3b;
-      }
+    .ant-input,
+    .ant-input-password {
+      background-color: #232a3b;
+    }
 
-      .ant-btn:not(.ant-btn-link):not(.ant-btn-primary) {
-        border: 1px solid #4a5569;
-      }
+    .ant-btn:not(.ant-btn-link):not(.ant-btn-primary) {
+      border: 1px solid #4a5569;
+    }
 
-      &-form {
-        background: transparent !important;
-      }
+    &-form {
+      background: transparent !important;
+    }
 
-      .app-iconify {
-        color: #fff;
-      }
+    .app-iconify {
+      color: #fff;
     }
+  }
+
+  input.fix-auto-fill,
+  .fix-auto-fill input {
+    -webkit-text-fill-color: #c9d1d9 !important;
+    box-shadow: inherit !important;
+  }
+}
+
+.@{prefix-cls} {
+  min-height: 100%;
+  overflow: hidden;
+
+  @media (max-width: @screen-xl) {
+    background-color: #293146;
 
-    input.fix-auto-fill,
-    .fix-auto-fill input {
-      -webkit-text-fill-color: #c9d1d9 !important;
-      box-shadow: inherit !important;
+    .@{prefix-cls}-form {
+      background-color: #fff;
     }
   }
 
-  .@{prefix-cls} {
-    min-height: 100%;
-    overflow: hidden;
+  &::before {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    margin-left: -48%;
+    background-image: url(/@/assets/svg/login-bg.svg);
+    background-position: 100%;
+    background-repeat: no-repeat;
+    background-size: auto 100%;
+    content: '';
+
     @media (max-width: @screen-xl) {
-      background-color: #293146;
+      display: none;
+    }
+  }
 
-      .@{prefix-cls}-form {
-        background-color: #fff;
-      }
+  .@{logo-prefix-cls} {
+    position: absolute;
+    top: 12px;
+    height: 30px;
+
+    &__title {
+      font-size: 16px;
+      color: #fff;
     }
 
-    &::before {
-      position: absolute;
-      top: 0;
-      left: 0;
-      width: 100%;
-      height: 100%;
-      margin-left: -48%;
-      background-image: url(/@/assets/svg/login-bg.svg);
-      background-position: 100%;
-      background-repeat: no-repeat;
-      background-size: auto 100%;
-      content: '';
-      @media (max-width: @screen-xl) {
-        display: none;
-      }
+    img {
+      width: 32px;
     }
+  }
 
+  .container {
     .@{logo-prefix-cls} {
-      position: absolute;
-      top: 12px;
-      height: 30px;
+      display: flex;
+      width: 60%;
+      height: 80px;
 
       &__title {
-        font-size: 16px;
+        font-size: 24px;
         color: #fff;
       }
 
       img {
-        width: 32px;
+        width: 48px;
       }
     }
+  }
 
-    .container {
-      .@{logo-prefix-cls} {
-        display: flex;
-        width: 60%;
-        height: 80px;
-
-        &__title {
-          font-size: 24px;
-          color: #fff;
-        }
+  &-sign-in-way {
+    .anticon {
+      font-size: 22px;
+      color: #888;
+      cursor: pointer;
 
-        img {
-          width: 48px;
-        }
+      &:hover {
+        color: @primary-color;
       }
     }
+  }
 
-    &-sign-in-way {
-      .anticon {
-        font-size: 22px;
-        color: #888;
-        cursor: pointer;
+  input:not([type='checkbox']) {
+    min-width: 360px;
 
-        &:hover {
-          color: @primary-color;
-        }
-      }
+    @media (max-width: @screen-xl) {
+      min-width: 320px;
     }
 
-    input:not([type='checkbox']) {
-      min-width: 360px;
-
-      @media (max-width: @screen-xl) {
-        min-width: 320px;
-      }
-
-      @media (max-width: @screen-lg) {
-        min-width: 260px;
-      }
-
-      @media (max-width: @screen-md) {
-        min-width: 240px;
-      }
-
-      @media (max-width: @screen-sm) {
-        min-width: 160px;
-      }
+    @media (max-width: @screen-lg) {
+      min-width: 260px;
     }
 
-    .@{countdown-prefix-cls} input {
-      min-width: unset;
+    @media (max-width: @screen-md) {
+      min-width: 240px;
     }
 
-    .ant-divider-inner-text {
-      font-size: 12px;
-      color: @text-color-secondary;
+    @media (max-width: @screen-sm) {
+      min-width: 160px;
     }
   }
+
+  .@{countdown-prefix-cls} input {
+    min-width: unset;
+  }
+
+  .ant-divider-inner-text {
+    font-size: 12px;
+    color: @text-color-secondary;
+  }
+}
 </style>

+ 91 - 112
src/views/system/loginmini/MiniCodelogin.vue

@@ -21,7 +21,8 @@
                 </div>
               </div>
               <div class="aui-formButton">
-                <a class="aui-linek-code aui-link-register" @click="goBackHandleClick">{{ t('sys.login.backSignIn') }}</a>
+                <a class="aui-linek-code aui-link-register" @click="goBackHandleClick">{{ t('sys.login.backSignIn')
+                }}</a>
               </div>
             </form>
           </div>
@@ -30,28 +31,6 @@
               <span>{{ t('sys.login.otherSignIn') }}</span>
             </div>
           </div>
-          <div class="aui-flex" :class="`${prefixCls}-sign-in-way`">
-            <div class="aui-flex-box">
-              <div class="aui-third-login">
-                <a href="" title="github" @click="onThirdLogin('github')"><GithubFilled /></a>
-              </div>
-            </div>
-            <div class="aui-flex-box">
-              <div class="aui-third-login">
-                <a href="" title="企业微信" @click="onThirdLogin('wechat_enterprise')"><icon-font class="item-icon" type="icon-qiyeweixin3" /></a>
-              </div>
-            </div>
-            <div class="aui-flex-box">
-              <div class="aui-third-login">
-                <a href="" title="钉钉" @click="onThirdLogin('dingtalk')"><DingtalkCircleFilled /></a>
-              </div>
-            </div>
-            <div class="aui-flex-box">
-              <div class="aui-third-login">
-                <a href="" title="微信" @click="onThirdLogin('wechat_open')"><WechatFilled /></a>
-              </div>
-            </div>
-          </div>
         </div>
       </div>
     </div>
@@ -61,105 +40,105 @@
 </template>
 
 <script lang="ts" setup name="mini-code-login">
-  import { ref, onUnmounted } from 'vue';
-  import { getLoginQrcode, getQrcodeToken } from '/@/api/sys/user';
-  import { useUserStore } from '/@/store/modules/user';
-  import { QrCode } from '/@/components/Qrcode/index';
-  import ThirdModal from '/@/views/sys/login/ThirdModal.vue';
-  import logoImg from '/@/assets/loginmini/icon/jeecg_logo.png';
-  import adTextImg from '/@/assets/loginmini/icon/jeecg_ad_text.png';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { GithubFilled, WechatFilled, DingtalkCircleFilled, createFromIconfontCN } from '@ant-design/icons-vue';
+import { ref, onUnmounted } from 'vue';
+import { getLoginQrcode, getQrcodeToken } from '/@/api/sys/user';
+import { useUserStore } from '/@/store/modules/user';
+import { QrCode } from '/@/components/Qrcode/index';
+import ThirdModal from '/@/views/sys/login/ThirdModal.vue';
+import logoImg from '/@/assets/loginmini/icon/jeecg_logo.png';
+import adTextImg from '/@/assets/loginmini/icon/jeecg_ad_text.png';
+import { useI18n } from '/@/hooks/web/useI18n';
+import { useDesign } from '/@/hooks/web/useDesign';
+import { GithubFilled, WechatFilled, DingtalkCircleFilled, createFromIconfontCN } from '@ant-design/icons-vue';
 
-  const IconFont = createFromIconfontCN({
-    scriptUrl: '//at.alicdn.com/t/font_2316098_umqusozousr.js',
-  });
-  const { prefixCls } = useDesign('minilogin');
-  const { t } = useI18n();
-  const qrCodeUrl = ref<string>('');
-  let timer: IntervalHandle;
-  const state = ref('0');
-  const thirdModalRef = ref();
-  const userStore = useUserStore();
-  const emit = defineEmits(['go-back', 'success', 'register']);
+const IconFont = createFromIconfontCN({
+  scriptUrl: '//at.alicdn.com/t/font_2316098_umqusozousr.js',
+});
+const { prefixCls } = useDesign('minilogin');
+const { t } = useI18n();
+const qrCodeUrl = ref<string>('');
+let timer: IntervalHandle;
+const state = ref('0');
+const thirdModalRef = ref();
+const userStore = useUserStore();
+const emit = defineEmits(['go-back', 'success', 'register']);
 
-  //加载二维码信息
-  function loadQrCode() {
-    state.value = '0';
-    getLoginQrcode().then((res) => {
-      qrCodeUrl.value = res.qrcodeId;
-      if (res.qrcodeId) {
-        openTimer(res.qrcodeId);
-      }
-    });
-  }
-  //监控扫码状态
-  function watchQrcodeToken(qrcodeId) {
-    getQrcodeToken({ qrcodeId: qrcodeId }).then((res) => {
-      let token = res.token;
-      if (token == '-2') {
-        //二维码过期重新获取
-        loadQrCode();
-        clearInterval(timer);
-      }
-      //扫码成功
-      if (res.success) {
-        state.value = '2';
-        clearInterval(timer);
-        setTimeout(() => {
-          userStore.qrCodeLogin(token);
-        }, 500);
-      }
-    });
-  }
+//加载二维码信息
+function loadQrCode() {
+  state.value = '0';
+  getLoginQrcode().then((res) => {
+    qrCodeUrl.value = res.qrcodeId;
+    if (res.qrcodeId) {
+      openTimer(res.qrcodeId);
+    }
+  });
+}
+//监控扫码状态
+function watchQrcodeToken(qrcodeId) {
+  getQrcodeToken({ qrcodeId: qrcodeId }).then((res) => {
+    let token = res.token;
+    if (token == '-2') {
+      //二维码过期重新获取
+      loadQrCode();
+      clearInterval(timer);
+    }
+    //扫码成功
+    if (res.success) {
+      state.value = '2';
+      clearInterval(timer);
+      setTimeout(() => {
+        userStore.qrCodeLogin(token);
+      }, 500);
+    }
+  });
+}
 
-  /** 开启定时器 */
-  function openTimer(qrcodeId) {
+/** 开启定时器 */
+function openTimer(qrcodeId) {
+  watchQrcodeToken(qrcodeId);
+  closeTimer();
+  timer = setInterval(() => {
     watchQrcodeToken(qrcodeId);
-    closeTimer();
-    timer = setInterval(() => {
-      watchQrcodeToken(qrcodeId);
-    }, 1500);
-  }
+  }, 1500);
+}
 
-  /** 关闭定时器 */
-  function closeTimer() {
-    if (timer) clearInterval(timer);
-  }
+/** 关闭定时器 */
+function closeTimer() {
+  if (timer) clearInterval(timer);
+}
 
-  /**
-   * 第三方登录
-   * @param type
-   */
-  function onThirdLogin(type) {
-    thirdModalRef.value.onThirdLogin(type);
-  }
+/**
+ * 第三方登录
+ * @param type
+ */
+function onThirdLogin(type) {
+  thirdModalRef.value.onThirdLogin(type);
+}
 
-  /**
-   * 初始化表单
-   */
-  function initFrom() {
-    loadQrCode();
-  }
+/**
+ * 初始化表单
+ */
+function initFrom() {
+  loadQrCode();
+}
 
-  /**
-   * 返回
-   */
-  function goBackHandleClick() {
-    emit('go-back');
-    closeTimer();
-  }
+/**
+ * 返回
+ */
+function goBackHandleClick() {
+  emit('go-back');
+  closeTimer();
+}
 
-  onUnmounted(() => {
-    closeTimer();
-  });
+onUnmounted(() => {
+  closeTimer();
+});
 
-  defineExpose({
-    initFrom,
-  });
+defineExpose({
+  initFrom,
+});
 </script>
 <style lang="less" scoped>
-  @import '/@/assets/loginmini/style/home.less';
-  @import '/@/assets/loginmini/style/base.less';
+@import '/@/assets/loginmini/style/home.less';
+@import '/@/assets/loginmini/style/base.less';
 </style>

+ 533 - 576
src/views/system/loginmini/MiniLogin.vue

@@ -2,75 +2,52 @@
   <div :class="prefixCls" class="login-background-img">
     <AppLocalePicker class="absolute top-4 right-4 enter-x xl:text-gray-600" :showText="false" />
     <AppDarkModeToggle class="absolute top-3 right-7 enter-x" />
-    <div class="aui-logo" v-if="!getIsMobile">
-      <div>
-        <h3>
-          <img :src="logoImg" alt="jeecg" />
-        </h3>
-      </div>
-    </div>
-    <div v-else class="aui-phone-logo">
-      <img :src="logoImg" alt="jeecg" />
-    </div>
+
     <div v-show="type === 'login'">
       <div class="aui-content">
         <div class="aui-container">
           <div class="aui-form">
             <div class="aui-image">
-              <div class="aui-image-text">
-                <img :src="adTextImg" />
-              </div>
+
             </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>
-                  <div class="aui-flex-box" :class="activeIndex === 'phoneLogin' ? 'activeNav on' : ''" @click="loginClick('phoneLogin')"
-                    >{{ t('sys.login.mobileSignInFormTitle') }}
+                  <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-form-item>
-                      </div>
-                      <div class="aui-inputClear">
-                        <i class="icon icon-code"></i>
-                        <a-form-item>
-                          <a-input class="fix-auto-fill" type="text" :placeholder="t('sys.login.inputCode')" v-model:value="formData.inputCode" />
+                          <a-input class="fix-auto-fill" type="password" :placeholder="t('sys.login.password')"
+                            v-model:value="formData.password" />
                         </a-form-item>
-                        <div class="aui-code">
-                          <img v-if="randCodeData.requestCodeSuccess" :src="randCodeData.randCodeImage" @click="handleChangeCheckCode" />
-                          <img v-else style="margin-top: 2px; max-width: initial" :src="codeImg" @click="handleChangeCheckCode" />
-                        </div>
                       </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>
@@ -90,31 +67,30 @@
                   <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>
@@ -125,46 +101,12 @@
                 <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
-                    >
-                  </div>
-                  <div class="aui-flex">
-                    <a class="aui-linek-code aui-flex-box" @click="codeHandleClick">{{ t('sys.login.qrSignInFormTitle') }}</a>
-                  </div>
-                  <div class="aui-flex">
-                    <a class="aui-linek-code aui-flex-box" @click="registerHandleClick">{{ t('sys.login.registerButton') }}</a>
+                      {{ t('sys.login.loginButton') }}</a-button>
                   </div>
+
                 </div>
               </div>
-              <a-form @keyup.enter.native="loginHandleClick">
-                <div class="aui-flex aui-third-text">
-                  <div class="aui-flex-box aui-third-border">
-                    <span>{{ t('sys.login.otherSignIn') }}</span>
-                  </div>
-                </div>
-                <div class="aui-flex" :class="`${prefixCls}-sign-in-way`">
-                  <div class="aui-flex-box">
-                    <div class="aui-third-login">
-                      <a title="github" @click="onThirdLogin('github')"><GithubFilled /></a>
-                    </div>
-                  </div>
-                  <div class="aui-flex-box">
-                    <div class="aui-third-login">
-                      <a title="企业微信" @click="onThirdLogin('wechat_enterprise')"><icon-font class="item-icon" type="icon-qiyeweixin3" /></a>
-                    </div>
-                  </div>
-                  <div class="aui-flex-box">
-                    <div class="aui-third-login">
-                      <a title="钉钉" @click="onThirdLogin('dingtalk')"><DingtalkCircleFilled /></a>
-                    </div>
-                  </div>
-                  <div class="aui-flex-box">
-                    <div class="aui-third-login">
-                      <a title="微信" @click="onThirdLogin('wechat_open')"><WechatFilled /></a>
-                    </div>
-                  </div>
-                </div>
-              </a-form>
+
             </div>
           </div>
         </div>
@@ -187,545 +129,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: '123456',
-    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();
-      }
+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);
     }
-  );
-  /**
-   * 监听账号变化,清除部门信息
-   */
-  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();
-      }
+    return deptName;
+  };
+});
+//监听验证码和输入框的修改
+watch(
+  () => [formData.inputCode, phoneFormData.smscode],
+  () => {
+    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;
-  }
-
-  /**
-   * 账号或者手机登录
-   */
-  async function loginHandleClick() {
-    if (unref(activeIndex) === 'accountLogin') {
-      accountLogin();
-    } else {
-      //手机号登录
-      phoneLogin();
+);
+/**
+ * 监听账号变化,清除部门信息
+ */
+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 accountLogin() {
-    if (!formData.username) {
-      createMessage.warn(t('sys.login.accountPlaceholder'));
-      return;
-    }
-    if (!formData.password) {
-      createMessage.warn(t('sys.login.passwordPlaceholder'));
+);
+
+//初始化数据
+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;
     }
-    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 (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 (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 (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);
       }
-    } 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 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,
+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,
         mode: 'none', //不要默认的错误提示
+      })
+    );
+    if (userInfo) {
+      notification.success({
+        message: t('sys.login.loginSuccessTitle'),
+        description: `${t('sys.login.loginSuccessDesc')}: ${userInfo.realname}`,
+        duration: 3,
       });
-      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);
       }
-    } catch (error) {
-      notification.error({
-        message: t('sys.api.errorTip'),
-        description: error.message || t('sys.login.networkExceptionMsg'),
+    }
+  } catch (error) {
+    notification.error({
+      message: t('sys.api.errorTip'),
+      description: error.message || t('sys.login.networkExceptionMsg'),
+      duration: 3,
+    });
+    handleChangeCheckCode();
+  } finally {
+    loginLoading.value = false;
+  }
+}
+
+/**
+ * 手机号登录
+ */
+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,
       });
-    } finally {
-      loginLoading.value = false;
     }
+  } 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;
+}
+
+/**
+ * 获取手机验证码
+ */
+async function getLoginCode() {
+  if (!phoneFormData.mobile) {
+    createMessage.warn(t('sys.login.mobilePlaceholder'));
+    return;
+  }
+  // 代码逻辑说明: 【issues/8567】严重:修改密码存在水平越权问题:登录应该用登录模板不应该用忘记密码的模板---
+  const result = await getCaptcha({ mobile: phoneFormData.mobile, smsmode: SmsEnum.LOGIN }).catch((res) => {
+    if (res.code === ExceptionEnum.PHONE_SMS_FAIL_CODE) {
+      openCaptchaModal(true, {});
     }
-    // 代码逻辑说明: 【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);
-      }
+  });
+  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);
     }
   }
-
-  /**
-   * 第三方登录
-   * @param type
-   */
-  function onThirdLogin(type) {
-    thirdModalRef.value.onThirdLogin(type);
-  }
-
-  /**
-   * 忘记密码
-   */
-  function forgetHandelClick() {
-    type.value = 'forgot';
-    setTimeout(() => {
-      forgotRef.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;
   }
+});
+</script>
 
-  /**
-   * 返回登录页面
-   */
-  function goBack() {
-    activeIndex.value = 'accountLogin';
-    type.value = 'login';
+<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) {
+    font-size: 14px;
+    color: #9a9a9a;
   }
+}
+</style>
 
-  /**
-   * 忘记密码/注册账号回调事件
-   * @param value
-   */
-  function handleSuccess(value) {
-    Object.assign(formData, value);
-    Object.assign(phoneFormData, { mobile: '', smscode: '' });
-    type.value = 'login';
-    activeIndex.value = 'accountLogin';
-    handleChangeCheckCode();
-  }
+<style lang="less">
+@prefix-cls: ~'@{namespace}-mini-login';
+@dark-bg: #293146;
 
-  /**
-   * 注册
-   */
-  function registerHandleClick() {
-    type.value = 'register';
-    setTimeout(() => {
-      registerRef.value.initForm();
-    }, 300);
-  }
+html[data-theme='dark'] {
+  .@{prefix-cls} {
+    background-color: @dark-bg !important;
+    background-image: none;
 
-  /**
-   * 注册
-   */
-  function codeHandleClick() {
-    type.value = 'codeLogin';
-    setTimeout(() => {
-      codeRef.value.initFrom();
-    }, 300);
-  }
+    &::before {
+      background-image: url(/@/assets/svg/login-bg-dark.svg);
+    }
 
-  onMounted(() => {
-    //加载验证码
-    handleChangeCheckCode();
-    // 恢复已记住的用户名
-    const saved = $ls.get(REMEMBER_USERNAME_KEY);
-    if (saved) {
-      formData.username = saved;
-      rememberMe.value = true;
+    .aui-inputClear {
+      background-color: #232a3b !important;
     }
-  });
-</script>
 
-<style lang="less" scoped>
-  @import '/@/assets/loginmini/style/home.less';
-  @import '/@/assets/loginmini/style/base.less';
+    .ant-input,
+    .ant-input-password {
+      background-color: #232a3b !important;
+    }
 
-  :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;
-  }
+    .ant-btn:not(.ant-btn-link):not(.ant-btn-primary) {
+      border: 1px solid #4a5569 !important;
+    }
 
-  .aui-get-code:hover {
-    color: #1573e9;
-  }
+    &-form {
+      background: @dark-bg !important;
+    }
 
-  .code-shape {
-    border-color: #dadada !important;
-    color: #aaa !important;
-  }
+    .app-iconify {
+      color: #fff !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) {
-      font-size: 14px;
-      color: #9a9a9a;
+    .aui-inputClear input,
+    .aui-input-line input,
+    .aui-choice {
+      color: #c9d1d9 !important;
     }
-  }
-</style>
 
-<style lang="less">
-  @prefix-cls: ~'@{namespace}-mini-login';
-  @dark-bg: #293146;
+    .aui-formBox {
+      background-color: @dark-bg !important;
+    }
 
-  html[data-theme='dark'] {
-    .@{prefix-cls} {
+    .aui-third-text span {
       background-color: @dark-bg !important;
-      background-image: none;
+    }
 
-      &::before {
-        background-image: url(/@/assets/svg/login-bg-dark.svg);
-      }
-      .aui-inputClear {
-        background-color: #232a3b !important;
-      }
-      .ant-input,
-      .ant-input-password {
-        background-color: #232a3b !important;
-      }
+    .aui-form-nav .aui-flex-box {
+      color: #c9d1d9 !important;
+    }
 
-      .ant-btn:not(.ant-btn-link):not(.ant-btn-primary) {
-        border: 1px solid #4a5569 !important;
-      }
+    .aui-formButton .aui-linek-code {
+      background: @dark-bg !important;
+      color: white !important;
+    }
 
-      &-form {
-        background: @dark-bg !important;
-      }
+    .aui-code-line {
+      border-left: none !important;
+    }
 
-      .app-iconify {
-        color: #fff !important;
-      }
-      .aui-inputClear input,
-      .aui-input-line input,
-      .aui-choice {
-        color: #c9d1d9 !important;
-      }
+    .ant-checkbox-inner,
+    .aui-success h3 {
+      border-color: #c9d1d9;
+    }
 
-      .aui-formBox {
-        background-color: @dark-bg !important;
-      }
-      .aui-third-text span {
-        background-color: @dark-bg !important;
-      }
-      .aui-form-nav .aui-flex-box {
-        color: #c9d1d9 !important;
-      }
+    // 代码逻辑说明: 【QQYUN-6363】这个样式代码有问题,不在里面,导致表达式有问题------------
+    &-sign-in-way {
+      .anticon {
+        font-size: 22px !important;
+        color: #888 !important;
+        cursor: pointer !important;
 
-      .aui-formButton .aui-linek-code {
-        background: @dark-bg !important;
-        color: white !important;
-      }
-      .aui-code-line {
-        border-left: none !important;
-      }
-      .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;
-
-          &: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;
-    }
-    .aui-third-login a {
-      background: transparent;
-    }
+  .ant-divider-inner-text {
+    font-size: 12px !important;
+    color: @text-color-secondary !important;
+  }
+
+  .aui-third-login a {
+    background: transparent;
   }
+}
 </style>