feat: Add xplay welcome page (#10733)

This commit is contained in:
ssongliu 2025-10-23 16:27:11 +08:00 committed by wanghe-fit2cloud
parent da23b8e6d9
commit 7ff39c91da
4 changed files with 48 additions and 0 deletions

View file

@ -2,6 +2,8 @@ package v2
import (
"encoding/base64"
"os"
"path"
"github.com/1Panel-dev/1Panel/core/app/api/v2/helper"
"github.com/1Panel-dev/1Panel/core/app/dto"
@ -125,6 +127,20 @@ func (b *BaseApi) GetResponsePage(c *gin.Context) {
helper.SuccessWithData(c, pageCode)
}
func (b *BaseApi) GetWelcomePage(c *gin.Context) {
count, _, _ := logService.PageLoginLog(c, dto.SearchLgLogWithPage{PageInfo: dto.PageInfo{Page: 1, PageSize: 10}})
if count != 1 {
helper.Success(c)
return
}
file, err := os.ReadFile(path.Join(global.CONF.Base.InstallDir, "1panel/welcome/index.html"))
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, string(file))
}
// @Tags Auth
// @Summary Get Setting For Login
// @Success 200 {object} dto.SystemSetting

View file

@ -16,5 +16,6 @@ func (s *BaseRouter) InitRouter(Router *gin.RouterGroup) {
baseRouter.POST("/login", baseApi.Login)
baseRouter.POST("/logout", baseApi.LogOut)
baseRouter.GET("/setting", baseApi.GetLoginSetting)
baseRouter.GET("/welcome", baseApi.GetWelcomePage)
}
}

View file

@ -20,3 +20,8 @@ export const logOutApi = () => {
export const getLoginSetting = () => {
return http.get<Login.LoginSetting>('/core/auth/setting');
};
export const getWelcomePage = () => {
return http.get<string>('/core/auth/welcome');
};

View file

@ -302,6 +302,10 @@
<LicenseImport ref="licenseRef" />
<QuickJump @search="onLoadBaseInfo(false, 'all')" ref="quickJumpRef" />
<DialogPro v-model="welcomeOpen" size="w-70">
<div ref="shadowContainer" />
</DialogPro>
</div>
</template>
@ -323,6 +327,7 @@ import { getSettingInfo, listAllSimpleNodes, loadUpgradeInfo } from '@/api/modul
import { GlobalStore } from '@/store';
import { storeToRefs } from 'pinia';
import { routerToFileWithPath, routerToPath } from '@/utils/router';
import { getWelcomePage } from '@/api/modules/auth';
const router = useRouter();
const globalStore = GlobalStore();
@ -331,6 +336,9 @@ const appRef = ref();
const isSafety = ref();
const welcomeOpen = ref();
const shadowContainer = ref();
const chartOption = ref('network');
let timer: NodeJS.Timer | null = null;
let isInit = ref<boolean>(true);
@ -692,6 +700,21 @@ const fetchData = () => {
onLoadSimpleNode();
};
const loadWelcome = async () => {
await getWelcomePage().then((res) => {
if (res.data) {
welcomeOpen.value = true;
nextTick(() => {
const shadowRoot = shadowContainer.value.attachShadow({ mode: 'open' });
shadowRoot.innerHTML = res.data;
});
localStorage.setItem('welcomeShow', 'false');
} else {
localStorage.setItem('welcomeShow', 'false');
}
});
};
onBeforeRouteUpdate((to, from, next) => {
if (to.name === 'home') {
clearTimer();
@ -707,6 +730,9 @@ const clearTimer = () => {
onMounted(() => {
fetchData();
if (localStorage.getItem('welcomeShow') !== 'false') {
loadWelcome();
}
});
onBeforeUnmount(() => {