This commit is contained in:
gaoyunqi
2024-04-22 12:34:27 +08:00
7 changed files with 91 additions and 14 deletions

View File

@ -47,6 +47,17 @@ export function loginApi(params: LoginParams, mode: ErrorMessageMode = 'modal')
},
);
}
export function singleLoginApi(params, mode) {
return defHttp.post(
{
url: Api.Login + '/' + params.ltpasToken,
params:{},
},
{
errorMessageMode: mode,
},
);
}
/**
* @description: getUserInfo

View File

@ -90,7 +90,7 @@
});
</script>
<style scoped>
.commonInfo /deep/.ant-input-disabled {
.commonInfo :deep(.ant-input-disabled){
border: none;
background-color: transparent;
color: inherit;

View File

@ -2,6 +2,7 @@ import { ref } from 'vue';
const isEditorOpen = ref(false);
const hasAjaxError = ref(false);
const isSingleLogin = ref(false);
function ajaxError() {
hasAjaxError.value = true;
@ -14,7 +15,8 @@ export default function() {
return {
isEditorOpen,
hasAjaxError,
ajaxError
ajaxError,
isSingleLogin
}
}

View File

@ -1,11 +1,11 @@
<template>
<Layout :class="prefixCls" v-bind="lockEvents">
<LayoutFeatures />
<LayoutHeader fixed v-if="getShowFullHeaderRef" />
<Layout :class="prefixCls" v-bind="lockEvents">z
<LayoutFeatures v-if="showSide"/>
<LayoutHeader fixed v-if="getShowFullHeaderRef && showSide"/>
<Layout :class="[layoutClass]">
<LayoutSideBar v-if="getShowSidebar || getIsMobile" />
<LayoutSideBar v-if="(getShowSidebar || getIsMobile) && showSide"/>
<Layout :class="`${prefixCls}-main`">
<LayoutMultipleHeader />
<LayoutMultipleHeader v-if="showSide"/>
<LayoutContent />
<LayoutFooter />
</Layout>
@ -14,7 +14,7 @@
</template>
<script lang="ts">
import { defineComponent, computed, unref } from 'vue';
import { defineComponent, computed, unref, ref } from 'vue';
import { Layout } from 'ant-design-vue';
import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
@ -29,6 +29,8 @@
import { useLockPage } from '/@/hooks/web/useLockPage';
import { useAppInject } from '/@/hooks/web/useAppInject';
import useGlobalFlag from '/@/hooks/core/useGlobalFlag';
import { useRoute } from 'vue-router';
export default defineComponent({
name: 'DefaultLayout',
@ -46,6 +48,16 @@
const { getIsMobile } = useAppInject();
const { getShowFullHeaderRef } = useHeaderSetting();
const { getShowSidebar, getIsMixSidebar, getShowMenu } = useMenuSetting();
const globalFlag = useGlobalFlag();
const route = useRoute();
let showSide = ref(true)
const { isSingleLogin } = globalFlag;
if (route.query.isSingleLogin) {
isSingleLogin.value = true
}
if (isSingleLogin.value) {
showSide.value = false
}
// Create a lock screen monitor
const lockEvents = useLockPage();
@ -66,6 +78,7 @@
getIsMixSidebar,
layoutClass,
lockEvents,
showSide
};
},
});

View File

@ -6,7 +6,7 @@ import { PageEnum } from '/@/enums/pageEnum';
import { ROLES_KEY, TOKEN_KEY, USER_INFO_KEY } from '/@/enums/cacheEnum';
import { getAuthCache, setAuthCache } from '/@/utils/auth';
import { GetUserInfoModel, LoginParams, RoleInfo } from '/@/api/system/login/model';
import { doLogout, getUserInfo, loginApi } from '/@/api/system/login';
import { doLogout, getUserInfo, loginApi, singleLoginApi } from '/@/api/system/login';
import { useI18n } from '/@/hooks/web/useI18n';
import { useMessage } from '/@/hooks/web/useMessage';
import { router } from '/@/router';
@ -123,6 +123,25 @@ export const useUserStore = defineStore({
return Promise.reject(error);
}
},
/**
* @description: singleLogin
*/
async singleLogin(
params: any
): Promise<GetUserInfoModel | null> {
try {
const data = await singleLoginApi(params, params.mode);
const { token } = data;
// save token
this.setToken(token);
router.replace(params.targetURL)
return await this.afterLoginAction(false);
} catch (error) {
return Promise.reject(error);
}
},
async afterLoginAction(goHome?: boolean): Promise<GetUserInfoModel | null> {
if (!this.getToken) return null;

View File

@ -793,7 +793,7 @@ ${hasTemplatePrint ? ' reactive ' : ''}
import useEventBus from '/@/hooks/event/useEventBus';
const { bus, CREATE_FLOW, FLOW_PROCESSED } = useEventBus();
const { bus, CREATE_FLOW, FLOW_PROCESSED, FORM_LIST_MODIFIED } = useEventBus();
const { notification } = useMessage();
const { t } = useI18n();
@ -1450,12 +1450,20 @@ ${hasTemplatePrint ? ' reactive ' : ''}
onMounted(() => {
${ model.listConfig.isLeftMenu ? `fetch();` : ''}
bus.on(FLOW_PROCESSED, handleRefresh);
bus.on(CREATE_FLOW, handleRefresh);
if (schemaIdComputedRef.value) {
bus.on(FLOW_PROCESSED, handleRefresh);
bus.on(CREATE_FLOW, handleRefresh);
} else {
bus.on(FORM_LIST_MODIFIED, handleRefresh);
}
});
onUnmounted(() => {
bus.off(FLOW_PROCESSED, handleRefresh);
bus.off(CREATE_FLOW, handleRefresh);
if (schemaIdComputedRef.value) {
bus.off(FLOW_PROCESSED, handleRefresh);
bus.off(CREATE_FLOW, handleRefresh);
} else {
bus.off(FORM_LIST_MODIFIED, handleRefresh);
}
});
function getActions(record: Recordable):ActionItem[] {
${

View File

@ -0,0 +1,24 @@
<template>
<div style="width: 100%; height: 300px; display: flex;justify-content: center;align-items: center;">
<a-spin />
</div>
</template>
<script lang="ts" setup>
import { useUserStore } from '/@/store/modules/user';
import { onMounted } from 'vue';
import { useRouter } from 'vue-router';
const { currentRoute } = useRouter();
const userStore = useUserStore();
onMounted(async () => {
const fullPath = currentRoute.value.fullPath;
const list = fullPath.split('targetURL=');
const targetURL = list[1];
let params = {...currentRoute.value.query, targetURL: targetURL, mode: 'none' }; //不要默认的错误提示
await userStore.singleLogin(params);
});
</script>
<style lang="less">
</style>