86 lines
3.6 KiB
HTML
86 lines
3.6 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
|
<meta name="referrer" content="no-referrer">
|
|
<meta name="description" content="WithMind 以 AI Agent 为核心,构建企业专属 AI 能力体系,落地本地私有化部署、专属企业知识库、四大行业技能插件,实现全员 AI 赋能。">
|
|
<meta name="keywords" content="WithMind,AI Agent,企业AI,私有化部署,知识库,模型网关,创作平台">
|
|
<meta property="og:title" content="WithMind — 企业专属 AI 能力体系">
|
|
<meta property="og:description" content="以 AI Agent 为核心的全员 AI 赋能系统:本地私有部署、企业知识库沉淀、四大行业技能插件。">
|
|
<meta property="og:type" content="website">
|
|
<link rel="icon" type="image/x-icon" sizes="16x16 32x32 48x48" href="<%= BASE_URL %>favicon.ico">
|
|
<link rel="icon" type="image/png" sizes="32x32" href="<%= BASE_URL %>favicon-32x32.png">
|
|
<link rel="apple-touch-icon" sizes="180x180" href="<%= BASE_URL %>apple-touch-icon.png">
|
|
<title>WithMind — 企业专属 AI 能力体系</title>
|
|
<script src="<%= BASE_URL %>flexible.js"></script>
|
|
<style type="text/css">
|
|
body {
|
|
margin: 0;
|
|
}
|
|
/* 占位 spinner,vue 异步挂载期间显示,挂载完成 (app-mounted 事件) 后淡出 */
|
|
#app-placeholder {
|
|
position: fixed;
|
|
inset: 0;
|
|
width: 100vw;
|
|
height: 100vh;
|
|
background: #ffffff;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
z-index: 9999;
|
|
}
|
|
#app-placeholder .spinner {
|
|
width: 48px;
|
|
height: 48px;
|
|
border: 4px solid #e0e0e0;
|
|
border-top-color: #3f2b96;
|
|
border-radius: 50%;
|
|
animation: spin 0.8s linear infinite;
|
|
}
|
|
@keyframes spin { to { transform: rotate(360deg); } }
|
|
/* vue 挂载后真实内容淡入 */
|
|
.app-fadein { animation: appFadeIn 0.4s ease-out; }
|
|
@keyframes appFadeIn { from { opacity: 0; } to { opacity: 1; } }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<noscript>
|
|
<strong>WithMind 官网需要启用 JavaScript 才能正常运行,请开启后继续访问。</strong>
|
|
</noscript>
|
|
<div id="app">
|
|
<div id="app-placeholder" aria-hidden="true">
|
|
<div class="spinner"></div>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
// 等 main.js 里的 mounted() 钩子派发 app-mounted 事件,然后占位淡出 + 真实内容淡入
|
|
(function(){
|
|
var app = document.getElementById('app');
|
|
var placeholder = document.getElementById('app-placeholder');
|
|
if (!app || !placeholder) return;
|
|
var done = false;
|
|
function onMounted() {
|
|
if (done) return;
|
|
done = true;
|
|
document.removeEventListener('app-mounted', onMounted);
|
|
// 占位淡出
|
|
placeholder.style.transition = 'opacity 0.4s';
|
|
placeholder.style.opacity = '0';
|
|
// 真实内容淡入
|
|
app.classList.add('app-fadein');
|
|
// 0.45s 后移除占位 DOM
|
|
setTimeout(function(){
|
|
if (placeholder.parentNode) placeholder.parentNode.removeChild(placeholder);
|
|
}, 450);
|
|
}
|
|
document.addEventListener('app-mounted', onMounted);
|
|
// 兜底: 5 秒后强制收尾 (防止 vue 异常时占位永远停留)
|
|
setTimeout(onMounted, 5000);
|
|
})();
|
|
</script>
|
|
<!-- built files will be auto injected -->
|
|
</body>
|
|
</html>
|