系统各配置优化

This commit is contained in:
Xubx 2025-03-04 15:47:57 +08:00
parent 0e890d96c5
commit dbc9d8b458
15 changed files with 1304 additions and 1354 deletions

2
.env
View File

@ -2,7 +2,7 @@
VITE_PORT = 3100 VITE_PORT = 3100
# 网站标题 # 网站标题
VITE_GLOB_APP_TITLE = JeecgBoot 企业级低代码平台 VITE_GLOB_APP_TITLE = 哈尔滨师范大学评阅人员管理系统
# 简称,用于配置文件名字 不要出现空格、数字开头等特殊字符 # 简称,用于配置文件名字 不要出现空格、数字开头等特殊字符
VITE_GLOB_APP_SHORT_NAME = JeecgBootAdmin VITE_GLOB_APP_SHORT_NAME = JeecgBootAdmin

View File

@ -157,7 +157,7 @@
</style> </style>
<div class="app-loading"> <div class="app-loading">
<div class="app-loading-wrap"> <div class="app-loading-wrap">
<img src="/resource/img/logo.png" class="app-loading-logo" alt="Logo" /> <!--<img src="/logo.png" class="app-loading-logo" alt="Logo" />-->
<div class="app-loading-dots"> <div class="app-loading-dots">
<span class="dot dot-spin"><i></i><i></i><i></i><i></i></span> <span class="dot dot-spin"><i></i><i></i><i></i><i></i></span>
</div> </div>

BIN
logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@ -4,9 +4,10 @@
--> -->
<template> <template>
<div class="anticon" :class="getAppLogoClass" @click="goHome"> <div class="anticon" :class="getAppLogoClass" @click="goHome">
<img src="../../../assets/images/logo.png" /> <img style="width: 100%;" src="../../../assets/images/logo-red.png" />
<div class="ml-2 truncate md:opacity-100" :class="getTitleClass" v-show="showTitle"> <div style="display: flex;" class="ml-2 truncate md:opacity-100" :class="getTitleClass" v-show="showTitle">
{{ title }} <!-- {{ title }} -->
<!-- <span>英语四六级综合管理平台</span> -->
</div> </div>
</div> </div>
</template> </template>
@ -62,10 +63,13 @@
padding-left: 7px; padding-left: 7px;
cursor: pointer; cursor: pointer;
transition: all 0.2s ease; transition: all 0.2s ease;
// //
&.jeecg-layout-mix-sider-logo,&.jeecg-layout-menu-logo{ &.jeecg-layout-mix-sider-logo,
&.jeecg-layout-menu-logo {
background: @sider-logo-bg-color; background: @sider-logo-bg-color;
} }
// &.light { // &.light {
// border-bottom: 1px solid @border-color-base; // border-bottom: 1px solid @border-color-base;
// } // }

View File

@ -1,6 +1,20 @@
<template> <template>
<div class="scrollbar"> <div class="scrollbar">
<div ref="wrap" :class="[wrapClass, 'scrollbar__wrap', native ? '' : 'scrollbar__wrap--hidden-default']" :style="style" @scroll="handleScroll"> <div ref="wrap" :class="[wrapClass, 'scrollbar__wrap', native ? '' : 'scrollbar__wrap--hidden-default']"
:style="style" @scroll="handleScroll">
<div style="display: flex; justify-content: center; align-items: center">
<span style="
font-size: 18px;
font-weight: 700;
transition: all 0.5s;
line-height: normal;
padding: 5px;
">
评阅人员管理系统
</span>
</div>
<component :is="tag" ref="resize" :class="['scrollbar__view', viewClass]" :style="viewStyle"> <component :is="tag" ref="resize" :class="['scrollbar__view', viewClass]" :style="viewStyle">
<slot></slot> <slot></slot>
</component> </component>

View File

@ -11,12 +11,8 @@
<template #overlay> <template #overlay>
<Menu @click="handleMenuClick"> <Menu @click="handleMenuClick">
<MenuItem key="doc" :text="t('layout.header.dropdownItemDoc')" icon="ion:document-text-outline" v-if="getShowDoc" /> <MenuItem key="password" :text="t('layout.header.dropdownItemSwitchPassword')"
<MenuDivider v-if="getShowDoc" /> icon="ant-design:edit-outlined" />
<MenuItem key="account" :text="t('layout.header.dropdownItemSwitchAccount')" icon="ant-design:setting-outlined" />
<MenuItem key="password" :text="t('layout.header.dropdownItemSwitchPassword')" icon="ant-design:edit-outlined" />
<MenuItem key="depart" :text="t('layout.header.dropdownItemSwitchDepart')" icon="ant-design:cluster-outlined" />
<MenuItem key="cache" :text="t('layout.header.dropdownItemRefreshCache')" icon="ion:sync-outline" />
<!-- <MenuItem <!-- <MenuItem
v-if="getUseLockPage" v-if="getUseLockPage"
key="lock" key="lock"
@ -242,6 +238,7 @@
&-dropdown-overlay { &-dropdown-overlay {
// update-begin--author:liaozhiyang---date:20231226---forQQYUN-7512 // update-begin--author:liaozhiyang---date:20231226---forQQYUN-7512
width: 160px; width: 160px;
// update-end--author:liaozhiyang---date:20231226---forQQYUN-7512 // update-end--author:liaozhiyang---date:20231226---forQQYUN-7512
.ant-dropdown-menu-item { .ant-dropdown-menu-item {
min-width: 160px; min-width: 160px;

View File

@ -3,15 +3,11 @@
<!-- left start --> <!-- left start -->
<div :class="`${prefixCls}-left`"> <div :class="`${prefixCls}-left`">
<!-- logo --> <!-- logo -->
<AppLogo v-if="getShowHeaderLogo || getIsMobile" :class="`${prefixCls}-logo`" :theme="getHeaderTheme" :style="getLogoWidth" /> <AppLogo v-if="getShowHeaderLogo || getIsMobile" :class="`${prefixCls}-logo`" :theme="getHeaderTheme"
<LayoutTrigger :style="getLogoWidth" />
v-if="(getShowContent && getShowHeaderTrigger && !getSplit && !getIsMixSidebar) || getIsMobile" <LayoutTrigger v-if="(getShowContent && getShowHeaderTrigger && !getSplit && !getIsMixSidebar) || getIsMobile"
:theme="getHeaderTheme" :theme="getHeaderTheme" :sider="false" />
:sider="false"
/>
<LayoutBreadcrumb v-if="getShowContent && getShowBread" :theme="getHeaderTheme" /> <LayoutBreadcrumb v-if="getShowContent && getShowBread" :theme="getHeaderTheme" />
<!-- 欢迎语 -->
<span v-if="getShowContent && getShowBreadTitle && !getIsMobile" :class="[prefixCls, `${prefixCls}--${getHeaderTheme}`,'headerIntroductionClass']"> {{t('layout.header.welcomeIn')}} {{ title }} </span>
</div> </div>
<!-- left end --> <!-- left end -->
@ -23,24 +19,13 @@
<!-- action --> <!-- action -->
<div :class="`${prefixCls}-action`"> <div :class="`${prefixCls}-action`">
<AppSearch :class="`${prefixCls}-action__item `" v-if="getShowSearch" />
<ErrorAction v-if="getUseErrorHandle" :class="`${prefixCls}-action__item error-action`" /> <ErrorAction v-if="getUseErrorHandle" :class="`${prefixCls}-action__item error-action`" />
<Notify v-if="getShowNotice" :class="`${prefixCls}-action__item notify-item`" />
<FullScreen v-if="getShowFullScreen" :class="`${prefixCls}-action__item fullscreen-item`" /> <FullScreen v-if="getShowFullScreen" :class="`${prefixCls}-action__item fullscreen-item`" />
<LockScreen v-if="getUseLockPage" />
<AppLocalePicker v-if="getShowLocalePicker" :reload="true" :showText="false" :class="`${prefixCls}-action__item`" />
<UserDropDown :theme="getHeaderTheme" /> <UserDropDown :theme="getHeaderTheme" />
<SettingDrawer v-if="getShowSetting" :class="`${prefixCls}-action__item`" /> <SettingDrawer v-if="getShowSetting" :class="`${prefixCls}-action__item`" />
<!-- ai助手 -->
<Aide></Aide>
</div> </div>
</Header> </Header>
<LoginSelect ref="loginSelectRef" @success="loginSelectOk"></LoginSelect> <LoginSelect ref="loginSelectRef" @success="loginSelectOk"></LoginSelect>
</template> </template>
@ -249,10 +234,13 @@
.headerIntroductionClass { .headerIntroductionClass {
color: rgba(255, 255, 255, 0.6); color: rgba(255, 255, 255, 0.6);
} }
.anticon, .truncate {
.anticon,
.truncate {
color: rgba(255, 255, 255, 0.8); color: rgba(255, 255, 255, 0.8);
} }
} }
//update-end---author:scott ---date::2022-09-30 for-------------- //update-end---author:scott ---date::2022-09-30 for--------------
} }
</style> </style>

View File

@ -65,13 +65,13 @@ const setting: ProjectConfig = {
// 头部配置 // 头部配置
headerSetting: { headerSetting: {
// 背景色 // 背景色
bgColor: HEADER_PRESET_BG_COLOR_LIST[0], bgColor: HEADER_PRESET_BG_COLOR_LIST[5],
// 固定头部 // 固定头部
fixed: true, fixed: true,
// 是否显示顶部 // 是否显示顶部
show: true, show: true,
// 主题 // 主题
theme: ThemeEnum.LIGHT, theme: ThemeEnum.DARK,
// 开启锁屏功能 // 开启锁屏功能
useLockPage: true, useLockPage: true,
// 显示全屏按钮 // 显示全屏按钮
@ -87,7 +87,7 @@ const setting: ProjectConfig = {
// 菜单配置 // 菜单配置
menuSetting: { menuSetting: {
// 背景色 // 背景色
bgColor: SIDE_BAR_BG_COLOR_LIST[0], bgColor: SIDE_BAR_BG_COLOR_LIST[3],
// 是否固定住左侧菜单 // 是否固定住左侧菜单
fixed: true, fixed: true,
// 菜单折叠 // 菜单折叠

View File

@ -1,13 +0,0 @@
<template>
<div>
<h1>学生信息</h1>
</div>
</template>
<script>
export default {
}
</script>
<style></style>

View File

@ -1,5 +1,8 @@
<template> <template>
<IndexDef v-if="indexStyle === 0"></IndexDef> <div class="mod-home">
<h3>欢迎使用评阅人员管理系统</h3>
</div>
<!--<IndexDef v-if="indexStyle === 0"></IndexDef>
<IndexChart v-if="indexStyle === 1"></IndexChart> <IndexChart v-if="indexStyle === 1"></IndexChart>
<IndexBdc v-if="indexStyle == 2"></IndexBdc> <IndexBdc v-if="indexStyle == 2"></IndexBdc>
<IndexTask v-if="indexStyle == 3"></IndexTask> <IndexTask v-if="indexStyle == 3"></IndexTask>
@ -11,14 +14,20 @@
<a-radio :value="2">业务统计</a-radio> <a-radio :value="2">业务统计</a-radio>
<a-radio :value="3">我的任务</a-radio> <a-radio :value="3">我的任务</a-radio>
</a-radio-group> </a-radio-group>
</div> </div>-->
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ref } from 'vue'; //import { ref } from 'vue';
import IndexDef from './homePage/IndexDef.vue'; //import IndexDef from './homePage/IndexDef.vue';
import IndexChart from './homePage/IndexChart.vue'; //import IndexChart from './homePage/IndexChart.vue';
import IndexBdc from './homePage/IndexBdc.vue'; //import IndexBdc from './homePage/IndexBdc.vue';
import IndexTask from './homePage/IndexTask.vue'; //import IndexTask from './homePage/IndexTask.vue';
const indexStyle = ref(0); //const indexStyle = ref(0);
</script> </script>
<style>
.mod-home {
line-height: 2.5;
text-align: center;
}
</style>

View File

@ -1,29 +1,30 @@
<template> <template>
<LoginFormTitle v-show="getShow" class="enter-x" /> <LoginFormTitle v-show="getShow" class="enter-x" />
<Form class="p-4 enter-x" :model="formData" :rules="getFormRules" ref="formRef" v-show="getShow" @keypress.enter="handleLogin"> <Form class="p-4 enter-x" :model="formData" :rules="getFormRules" ref="formRef" v-show="getShow"
@keypress.enter="handleLogin">
<FormItem name="account" class="enter-x"> <FormItem name="account" class="enter-x">
<Input size="large" v-model:value="formData.account" :placeholder="t('sys.login.userName')" class="fix-auto-fill" /> <Input size="large" v-model:value="formData.account" :placeholder="t('sys.login.userName')"
class="fix-auto-fill" />
</FormItem> </FormItem>
<FormItem name="password" class="enter-x"> <FormItem name="password" class="enter-x">
<InputPassword size="large" visibilityToggle v-model:value="formData.password" :placeholder="t('sys.login.password')" /> <InputPassword size="large" visibilityToggle v-model:value="formData.password"
:placeholder="t('sys.login.password')" />
</FormItem> </FormItem>
<!--验证码--> <!--验证码-->
<ARow class="enter-x"> <ARow class="enter-x">
<ACol :span="12"> <ACol :span="12">
<FormItem name="inputCode" class="enter-x"> <FormItem name="inputCode" class="enter-x">
<Input size="large" v-model:value="formData.inputCode" :placeholder="t('sys.login.inputCode')" style="min-width: 100px" /> <Input size="large" v-model:value="formData.inputCode" :placeholder="t('sys.login.inputCode')"
style="min-width: 100px" />
</FormItem> </FormItem>
</ACol> </ACol>
<ACol :span="8"> <ACol :span="8">
<FormItem :style="{ 'text-align': 'right', 'margin-left': '20px' }" class="enter-x"> <FormItem :style="{ 'text-align': 'right', 'margin-left': '20px' }" class="enter-x">
<img <img v-if="randCodeData.requestCodeSuccess" style="margin-top: 2px; max-width: initial"
v-if="randCodeData.requestCodeSuccess" :src="randCodeData.randCodeImage" @click="handleChangeCheckCode" />
style="margin-top: 2px; max-width: initial" <img v-else style="margin-top: 2px; max-width: initial" src="../../../assets/images/checkcode.png"
:src="randCodeData.randCodeImage" @click="handleChangeCheckCode" />
@click="handleChangeCheckCode"
/>
<img v-else style="margin-top: 2px; max-width: initial" src="../../../assets/images/checkcode.png" @click="handleChangeCheckCode" />
</FormItem> </FormItem>
</ACol> </ACol>
</ARow> </ARow>
@ -76,10 +77,17 @@
<Divider class="enter-x">{{ t('sys.login.otherSignIn') }}</Divider> <Divider class="enter-x">{{ t('sys.login.otherSignIn') }}</Divider>
<div class="flex justify-evenly enter-x" :class="`${prefixCls}-sign-in-way`"> <div class="flex justify-evenly enter-x" :class="`${prefixCls}-sign-in-way`">
<a @click="onThirdLogin('github')" title="github"><GithubFilled /></a> <a @click="onThirdLogin('github')" title="github">
<a @click="onThirdLogin('wechat_enterprise')" title="企业微信"> <icon-font class="item-icon" type="icon-qiyeweixin3" /></a> <GithubFilled />
<a @click="onThirdLogin('dingtalk')" title="钉钉"><DingtalkCircleFilled /></a> </a>
<a @click="onThirdLogin('wechat_open')" title="微信"><WechatFilled /></a> <a @click="onThirdLogin('wechat_enterprise')" title="企业微信"> <icon-font class="item-icon"
type="icon-qiyeweixin3" /></a>
<a @click="onThirdLogin('dingtalk')" title="钉钉">
<DingtalkCircleFilled />
</a>
<a @click="onThirdLogin('wechat_open')" title="微信">
<WechatFilled />
</a>
</div> </div>
</Form> </Form>
<!-- 第三方登录相关弹框 --> <!-- 第三方登录相关弹框 -->

View File

@ -1,11 +1,12 @@
<template> <template>
<div class="app-loading"> <div class="app-loading">
<div class="app-loading-wrap"> <div class="app-loading-wrap">
<img src="/resource/img/logo.png" class="app-loading-logo" alt="Logo"> <!--<img src="/resource/img/logo.png" class="app-loading-logo" alt="Logo">-->
<div class="app-loading-dots"> <div class="app-loading-dots">
<span class="dot dot-spin"><i></i><i></i><i></i><i></i></span> <span class="dot dot-spin"><i></i><i></i><i></i><i></i></span>
</div> </div>
<div class="app-loading-title">JeecgBoot 企业级低代码平台</div> <div class="app-loading-title">哈尔滨师范大学</div>
<div class="app-loading-title">评阅人员管理系统</div>
</div> </div>
</div> </div>
</template> </template>
@ -88,7 +89,6 @@
</script> </script>
<style scoped> <style scoped>
html[data-theme='dark'] .app-loading { html[data-theme='dark'] .app-loading {
background-color: #2c344a; background-color: #2c344a;
} }
@ -192,27 +192,30 @@
-webkit-animation-delay: 1.2s; -webkit-animation-delay: 1.2s;
animation-delay: 1.2s; animation-delay: 1.2s;
} }
@keyframes antRotate { @keyframes antRotate {
to { to {
-webkit-transform: rotate(405deg); -webkit-transform: rotate(405deg);
transform: rotate(405deg); transform: rotate(405deg);
} }
} }
@-webkit-keyframes antRotate { @-webkit-keyframes antRotate {
to { to {
-webkit-transform: rotate(405deg); -webkit-transform: rotate(405deg);
transform: rotate(405deg); transform: rotate(405deg);
} }
} }
@keyframes antSpinMove { @keyframes antSpinMove {
to { to {
opacity: 1; opacity: 1;
} }
} }
@-webkit-keyframes antSpinMove { @-webkit-keyframes antSpinMove {
to { to {
opacity: 1; opacity: 1;
} }
} }
</style> </style>

View File

@ -2,85 +2,64 @@
<div :class="prefixCls" class="login-background-img"> <div :class="prefixCls" class="login-background-img">
<AppLocalePicker class="absolute top-4 right-4 enter-x xl:text-gray-600" :showText="false" /> <AppLocalePicker class="absolute top-4 right-4 enter-x xl:text-gray-600" :showText="false" />
<AppDarkModeToggle class="absolute top-3 right-7 enter-x" /> <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 v-show="type === 'login'">
<div class="aui-content"> <div class="aui-content">
<div class="aui-container"> <div class="aui-container">
<div class="aui-form"> <div class="aui-form">
<div class="aui-image"> <div class="aui-image">
<div class="aui-image-text"> <div class="aui-image-text">
<img :src="adTextImg" /> <div>
<span class="introduce-text1">哈尔滨师范大学</span>
<br>
<span class="introduce-text">评阅人员管理系统</span>
<br>
<br>
<!--<span class="introduce-text" style="font-size: 18px;">深入分析 多维展示</span>-->
</div>
</div> </div>
</div> </div>
<div class="aui-formBox"> <div class="aui-formBox">
<div class="aui-formWell"> <div class="aui-formWell">
<div class="aui-flex aui-form-nav investment_title"> <div class="aui-flex aui-form-nav investment_title">
<div class="aui-flex-box" :class="activeIndex === 'accountLogin' ? 'activeNav on' : ''" @click="loginClick('accountLogin')" <div class="aui-flex-box" :class="activeIndex === 'accountLogin' ? 'activeNav on' : ''"
>{{ t('sys.login.signInFormTitle') }} @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> </div>
</div> </div>
<div class="aui-form-box" style="height: 180px"> <div class="aui-form-box" style="height: 140px">
<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-account">
<div class="aui-inputClear"> <div class="aui-inputClear">
<i class="icon icon-code"></i> <i class="icon icon-code"></i>
<a-form-item> <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> </a-form-item>
</div> </div>
<div class="aui-inputClear"> <div class="aui-inputClear">
<i class="icon icon-password"></i> <i class="icon icon-password"></i>
<a-form-item> <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> </a-form-item>
</div> </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-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-flex">
<div class="aui-flex-box">
<div class="aui-choice">
<a-input class="fix-auto-fill" type="checkbox" v-model:value="rememberMe" />
<span style="margin-left: 5px">{{ t('sys.login.rememberMe') }}</span>
</div>
</div>
<div class="aui-forget">
<a @click="forgetHandelClick"> {{ t('sys.login.forgetPassword') }}</a>
</div>
</div>
</div> </div>
</a-form> </a-form>
<a-form v-else ref="phoneFormRef" :model="phoneFormData" @keyup.enter.native="loginHandleClick"> <a-form v-else ref="phoneFormRef" :model="phoneFormData" @keyup.enter.native="loginHandleClick">
<div class="aui-account phone"> <div class="aui-account phone">
<div class="aui-inputClear phoneClear"> <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>
<div class="aui-inputClear"> <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"> <div v-if="showInterval" class="aui-code" @click="getLoginCode">
<a>{{ t('component.countdown.normalText') }}</a> <a>{{ t('component.countdown.normalText') }}</a>
</div> </div>
<div v-else class="aui-code"> <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> </div>
</div> </div>
@ -92,42 +71,11 @@
{{ t('sys.login.loginButton') }}</a-button> {{ t('sys.login.loginButton') }}</a-button>
</div> </div>
<div class="aui-flex"> <div class="aui-flex">
<a class="aui-linek-code aui-flex-box" @click="codeHandleClick">{{ t('sys.login.qrSignInFormTitle') }}</a> <a class="aui-linek-code aui-flex-box" @click="registerHandleClick">{{ t('sys.login.registerButton')
</div> }}</a>
<div class="aui-flex">
<a class="aui-linek-code aui-flex-box" @click="registerHandleClick">{{ t('sys.login.registerButton') }}</a>
</div> </div>
</div> </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> </div>
</div> </div>
@ -148,9 +96,7 @@
</template> </template>
<script lang="ts" setup name="login-mini"> <script lang="ts" setup name="login-mini">
import { getCaptcha, getCodeInfo } from '/@/api/sys/user'; import { getCaptcha, getCodeInfo } from '/@/api/sys/user';
import { computed, onMounted, reactive, ref, toRaw, unref } from 'vue'; import { onMounted, reactive, ref, toRaw, unref } from 'vue';
import codeImg from '/@/assets/images/checkcode.png';
import { Rule } from '/@/components/Form';
import { useUserStore } from '/@/store/modules/user'; import { useUserStore } from '/@/store/modules/user';
import { useMessage } from '/@/hooks/web/useMessage'; import { useMessage } from '/@/hooks/web/useMessage';
import { useI18n } from '/@/hooks/web/useI18n'; import { useI18n } from '/@/hooks/web/useI18n';
@ -159,29 +105,22 @@
import MiniForgotpad from './MiniForgotpad.vue'; import MiniForgotpad from './MiniForgotpad.vue';
import MiniRegister from './MiniRegister.vue'; import MiniRegister from './MiniRegister.vue';
import MiniCodelogin from './MiniCodelogin.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 adTextImg from '/@/assets/loginmini/icon/jeecg_ad_text.png';
import { AppLocalePicker, AppDarkModeToggle } from '/@/components/Application'; import { AppLocalePicker, AppDarkModeToggle } from '/@/components/Application';
import { useLocaleStore } from '/@/store/modules/locale'; import { useLocaleStore } from '/@/store/modules/locale';
import { useDesign } from "/@/hooks/web/useDesign"; import { useDesign } from "/@/hooks/web/useDesign";
import { useAppInject } from "/@/hooks/web/useAppInject"; import { useAppInject } from "/@/hooks/web/useAppInject";
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('mini-login'); const { prefixCls } = useDesign('mini-login');
const { notification, createMessage } = useMessage(); const { notification, createMessage } = useMessage();
const userStore = useUserStore(); const userStore = useUserStore();
const { t } = useI18n(); const { t } = useI18n();
const localeStore = useLocaleStore(); const localeStore = useLocaleStore();
const showLocale = localeStore.getShowPicker;
const randCodeData = reactive<any>({ const randCodeData = reactive<any>({
randCodeImage: '', randCodeImage: '',
requestCodeSuccess: false, requestCodeSuccess: false,
checkKey: null, checkKey: null,
}); });
const rememberMe = ref<string>('0');
// //
const activeIndex = ref<string>('accountLogin'); const activeIndex = ref<string>('accountLogin');
const type = ref<string>('login'); const type = ref<string>('login');
@ -214,11 +153,6 @@
const loginLoading = ref<boolean>(false); const loginLoading = ref<boolean>(false);
const { getIsMobile } = useAppInject(); const { getIsMobile } = useAppInject();
defineProps({
sessionTimeout: {
type: Boolean,
},
});
/** /**
* 获取验证码 * 获取验证码
@ -355,23 +289,7 @@
} }
} }
/**
* 第三方登录
* @param type
*/
function onThirdLogin(type) {
thirdModalRef.value.onThirdLogin(type);
}
/**
* 忘记密码
*/
function forgetHandelClick() {
type.value = 'forgot';
setTimeout(() => {
forgotRef.value.initForm();
}, 300);
}
/** /**
* 返回登录页面 * 返回登录页面
@ -403,29 +321,35 @@
}, 300); }, 300);
} }
/**
* 注册
*/
function codeHandleClick() {
type.value = 'codeLogin';
setTimeout(() => {
codeRef.value.initFrom();
}, 300);
}
onMounted(() => { onMounted(() => {
// //
handleChangeCheckCode(); handleChangeCheckCode();
}); });
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
@import '/@/assets/loginmini/style/home.less'; @import '/@/assets/loginmini/style/home.less';
@import '/@/assets/loginmini/style/base.less'; @import '/@/assets/loginmini/style/base.less';
//
.introduce-text1 {
font-size: 30px;
color: #fff;
font-weight: bold;
transform: translate(-50%, -50%);
}
.introduce-text {
font-size: 40px;
color: #fff;
font-weight: bold;
transform: translate(-50%, -50%);
}
:deep(.ant-input:focus) { :deep(.ant-input:focus) {
box-shadow: none; box-shadow: none;
} }
.aui-get-code { .aui-get-code {
float: right; float: right;
position: relative; position: relative;
@ -452,6 +376,7 @@
position: absolute; position: absolute;
margin-right: 10px; margin-right: 10px;
} }
.aui-link-login { .aui-link-login {
height: 42px; height: 42px;
padding: 10px 15px; padding: 10px 15px;
@ -462,6 +387,7 @@
flex: 1; flex: 1;
color: #fff; color: #fff;
} }
.aui-phone-logo { .aui-phone-logo {
position: absolute; position: absolute;
margin-left: 10px; margin-left: 10px;
@ -469,6 +395,7 @@
top: 2px; top: 2px;
z-index: 4; z-index: 4;
} }
.top-3 { .top-3 {
top: 0.45rem; top: 0.45rem;
} }
@ -486,9 +413,11 @@ html[data-theme='dark'] {
&::before { &::before {
background-image: url(/@/assets/svg/login-bg-dark.svg); background-image: url(/@/assets/svg/login-bg-dark.svg);
} }
.aui-inputClear { .aui-inputClear {
background-color: #232a3b !important; background-color: #232a3b !important;
} }
.ant-input, .ant-input,
.ant-input-password { .ant-input-password {
background-color: #232a3b !important; background-color: #232a3b !important;
@ -505,16 +434,21 @@ html[data-theme='dark'] {
.app-iconify { .app-iconify {
color: #fff !important; color: #fff !important;
} }
.aui-inputClear input,.aui-input-line input,.aui-choice{
.aui-inputClear input,
.aui-input-line input,
.aui-choice {
color: #c9d1d9 !important; color: #c9d1d9 !important;
} }
.aui-formBox { .aui-formBox {
background-color: @dark-bg !important; background-color: @dark-bg !important;
} }
.aui-third-text span { .aui-third-text span {
background-color: @dark-bg !important; background-color: @dark-bg !important;
} }
.aui-form-nav .aui-flex-box { .aui-form-nav .aui-flex-box {
color: #c9d1d9 !important; color: #c9d1d9 !important;
} }
@ -523,12 +457,16 @@ html[data-theme='dark'] {
background: @dark-bg !important; background: @dark-bg !important;
color: white !important; color: white !important;
} }
.aui-code-line { .aui-code-line {
border-left: none !important; border-left: none !important;
} }
.ant-checkbox-inner,.aui-success h3{
.ant-checkbox-inner,
.aui-success h3 {
border-color: #c9d1d9; border-color: #c9d1d9;
} }
//update-begin---author:wangshuai ---date:20230828 forQQYUN-6363------------ //update-begin---author:wangshuai ---date:20230828 forQQYUN-6363------------
&-sign-in-way { &-sign-in-way {
.anticon { .anticon {
@ -541,6 +479,7 @@ html[data-theme='dark'] {
} }
} }
} }
//update-end---author:wangshuai ---date:20230828 forQQYUN-6363------------ //update-end---author:wangshuai ---date:20230828 forQQYUN-6363------------
} }
@ -554,6 +493,7 @@ html[data-theme='dark'] {
font-size: 12px !important; font-size: 12px !important;
color: @text-color-secondary !important; color: @text-color-secondary !important;
} }
.aui-third-login a { .aui-third-login a {
background: transparent; background: transparent;
} }