gongxiangp2/yedir/mindmap.html
chenpei d0dc94e36d feat: 将弹幕功能替换为AI聊天助手
新功能:
- 创建AI聊天助手组件(AIChatWidget)
- 支持文字+图片多模态对话
- 集成Gemini AI API
- 支持图片编辑和内容生成
- 实时对话历史管理
- 优雅的UI设计,支持黑夜模式

技术实现:
- 后端API代理Gemini API(/api/ai-chat)
- 支持最多5张图片上传
- 流式响应处理
- 对话历史管理
- Base64图片处理

配置:
- 在.env中添加Gemini API配置
- GEMINI_API_KEY
- GEMINI_API_BASE_URL
- GEMINI_MODEL

替换原弹幕功能,提供更强大的AI助手体验!
2025-10-27 17:45:37 +08:00

206 lines
7.3 KiB
HTML
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<title>思维导图 - 由壹点AIGC</title>
<link rel="icon" href="mind-map-main/dist/logo.ico">
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: "PingFang SC", "Microsoft YaHei", sans-serif;
overflow: hidden;
background-color: #f9f9f9;
}
#app-container {
position: fixed;
top: 64px; /* 顶部导航栏的高度 */
left: 0;
right: 0;
bottom: 0;
overflow: hidden;
}
#mindmap-container {
width: 100%;
height: 100%;
overflow: hidden;
}
#mindmap-container * {
margin: 0;
padding: 0;
}
</style>
<script>
// 自定义静态资源的路径
window.externalPublicPath = './mind-map-main/dist/'
// 接管应用
window.takeOverApp = false
</script>
</head>
<body>
<!-- 导入顶部导航栏 -->
<div id="navbar-container"></div>
<!-- 思维导图容器 -->
<div id="app-container">
<div id="mindmap-container"></div>
</div>
<!-- 加载导航栏 -->
<script>
fetch('public/navbar-fragment.html')
.then(response => response.text())
.then(html => {
document.getElementById('navbar-container').innerHTML = html;
// 高亮思维导图图标
setTimeout(() => {
const mindMapBtn = document.querySelector('.nav-right .icon-btn[title="思维导图"]');
if (mindMapBtn) {
mindMapBtn.style.backgroundColor = '#5b00d7';
mindMapBtn.style.color = '#fff';
}
}, 100);
})
.catch(error => {
console.error('加载导航栏失败:', error);
});
</script>
<!-- 思维导图初始化脚本 -->
<script>
const getDataFromBackend = () => {
return new Promise((resolve, reject) => {
// 尝试从本地存储获取数据
const savedData = localStorage.getItem('mindMapData');
if (savedData) {
try {
resolve(JSON.parse(savedData));
return;
} catch (e) {
console.error('解析存储的思维导图数据失败:', e);
}
}
// 默认数据
setTimeout(() => {
resolve({
mindMapData: {
root: {
data: {
text: '根节点'
},
children: []
},
theme: {
template: 'avocado',
config: {}
},
layout: 'logicalStructure',
config: {},
view: null
},
mindMapConfig: {},
lang: 'zh',
localConfig: null
});
}, 200);
});
};
const setTakeOverAppMethods = data => {
window.takeOverAppMethods = {};
// 获取思维导图数据的函数
window.takeOverAppMethods.getMindMapData = () => {
return data.mindMapData;
};
// 保存思维导图数据的函数
window.takeOverAppMethods.saveMindMapData = data => {
try {
localStorage.setItem('mindMapData', JSON.stringify({
mindMapData: data,
mindMapConfig: window.takeOverAppMethods.getMindMapConfig(),
lang: window.takeOverAppMethods.getLanguage(),
localConfig: window.takeOverAppMethods.getLocalConfig()
}));
} catch (e) {
console.error('保存思维导图数据失败:', e);
}
};
// 获取思维导图配置,也就是实例化时会传入的选项
window.takeOverAppMethods.getMindMapConfig = () => {
return data.mindMapConfig;
};
// 保存思维导图配置
window.takeOverAppMethods.saveMindMapConfig = config => {
data.mindMapConfig = config;
try {
localStorage.setItem('mindMapData', JSON.stringify(data));
} catch (e) {
console.error('保存思维导图配置失败:', e);
}
};
// 获取语言的函数
window.takeOverAppMethods.getLanguage = () => {
return data.lang;
};
// 保存语言的函数
window.takeOverAppMethods.saveLanguage = lang => {
data.lang = lang;
try {
localStorage.setItem('mindMapData', JSON.stringify(data));
} catch (e) {
console.error('保存语言设置失败:', e);
}
};
// 获取本地配置的函数
window.takeOverAppMethods.getLocalConfig = () => {
return data.localConfig;
};
// 保存本地配置的函数
window.takeOverAppMethods.saveLocalConfig = config => {
data.localConfig = config;
try {
localStorage.setItem('mindMapData', JSON.stringify(data));
} catch (e) {
console.error('保存本地配置失败:', e);
}
};
};
window.onload = async () => {
window.takeOverApp = true;
// 请求数据
const data = await getDataFromBackend();
// 设置全局的方法
setTakeOverAppMethods(data);
// 思维导图实例创建完成事件
window.addEventListener('app_inited', mindMap => {
console.log('思维导图实例已创建');
});
// 实例化页面
if (window.initApp) {
window.initApp();
} else {
console.error('找不到initApp方法,请确保已正确加载思维导图脚本');
}
};
</script>
<!-- 加载思维导图脚本和样式 -->
<link href="mind-map-main/dist/css/chunk-vendors.css" rel="stylesheet">
<link href="mind-map-main/dist/css/app.css" rel="stylesheet">
<script src="mind-map-main/dist/js/chunk-vendors.js"></script>
<script src="mind-map-main/dist/js/app.js"></script>
</body>
</html>