update launcher app api config
This commit is contained in:
@@ -33,7 +33,7 @@ export const FALLBACK_APPS: LauncherApp[] = [
|
|||||||
displayName: 'LMS',
|
displayName: 'LMS',
|
||||||
description: '자율주행 교육 과정, 실습 콘텐츠, 사용자 학습 이력을 통합 관리하는 학습 관리 시스템입니다.',
|
description: '자율주행 교육 과정, 실습 콘텐츠, 사용자 학습 이력을 통합 관리하는 학습 관리 시스템입니다.',
|
||||||
subtitle: '자율주행 교육 콘텐츠\n학습 관리 시스템',
|
subtitle: '자율주행 교육 콘텐츠\n학습 관리 시스템',
|
||||||
videoPath: '/video/lms.mp4',
|
videoPath: './video/lms.mp4',
|
||||||
iconKey: 'graduation',
|
iconKey: 'graduation',
|
||||||
launchUrl: 'http://localhost:5176',
|
launchUrl: 'http://localhost:5176',
|
||||||
devAppPath: './apps/lms/lms-fe',
|
devAppPath: './apps/lms/lms-fe',
|
||||||
|
|||||||
@@ -2,6 +2,13 @@ import type { LauncherApp } from '../config/apps'
|
|||||||
|
|
||||||
const DEFAULT_DETAIL_URL = 'https://www.futuredrive.net/solutions/astudio'
|
const DEFAULT_DETAIL_URL = 'https://www.futuredrive.net/solutions/astudio'
|
||||||
|
|
||||||
|
function resolvePackagedAssetPath(path?: string | null): string | null {
|
||||||
|
if (!path) return null
|
||||||
|
if (/^(https?:|file:|data:|blob:)/i.test(path)) return path
|
||||||
|
if (path.startsWith('/video/')) return `.${path}`
|
||||||
|
return path
|
||||||
|
}
|
||||||
|
|
||||||
interface AppViewProps {
|
interface AppViewProps {
|
||||||
app: LauncherApp
|
app: LauncherApp
|
||||||
isRunning: boolean
|
isRunning: boolean
|
||||||
@@ -17,6 +24,7 @@ function AppView({ app, isRunning, onShowManual, onFocusApp, onCloseApp }: AppVi
|
|||||||
const appTitle = titleRest
|
const appTitle = titleRest
|
||||||
? <>{titleFirst}<br /><span>{titleRest}</span></>
|
? <>{titleFirst}<br /><span>{titleRest}</span></>
|
||||||
: <span>{titleFirst}</span>
|
: <span>{titleFirst}</span>
|
||||||
|
const videoPath = resolvePackagedAssetPath(app.videoPath)
|
||||||
|
|
||||||
if (isRunning) {
|
if (isRunning) {
|
||||||
return (
|
return (
|
||||||
@@ -62,12 +70,12 @@ function AppView({ app, isRunning, onShowManual, onFocusApp, onCloseApp }: AppVi
|
|||||||
<div className="flex-1 flex items-start relative overflow-hidden pt-[80px] pb-[80px] pl-[52px]">
|
<div className="flex-1 flex items-start relative overflow-hidden pt-[80px] pb-[80px] pl-[52px]">
|
||||||
|
|
||||||
{/* 비디오 배경 */}
|
{/* 비디오 배경 */}
|
||||||
{app.videoPath && (
|
{videoPath && (
|
||||||
<>
|
<>
|
||||||
<video
|
<video
|
||||||
key={app.videoPath}
|
key={videoPath}
|
||||||
className="car-video"
|
className="car-video"
|
||||||
src={app.videoPath}
|
src={videoPath}
|
||||||
autoPlay
|
autoPlay
|
||||||
loop
|
loop
|
||||||
muted
|
muted
|
||||||
@@ -79,7 +87,7 @@ function AppView({ app, isRunning, onShowManual, onFocusApp, onCloseApp }: AppVi
|
|||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{!app.videoPath && (
|
{!videoPath && (
|
||||||
<div className="absolute inset-0 bg-[radial-gradient(ellipse_70%_50%_at_50%_50%,rgba(59,127,250,0.04)_0%,transparent_70%)]" />
|
<div className="absolute inset-0 bg-[radial-gradient(ellipse_70%_50%_at_50%_50%,rgba(59,127,250,0.04)_0%,transparent_70%)]" />
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user