Atlantis Web界面定制:打造团队专属的操作控制台
Atlantis作为Terraform的自动化部署工具,其Web界面是团队日常操作的核心入口。默认界面虽功能完整,但通过定制化可显著提升团队协作效率。本文将从样式调整、功能扩展、部署流程三个维度,详解如何打造符合团队需求的专属控制台。
界面定制基础:目录结构与核心文件
Atlantis的Web界面资源集中在server/static/目录下,采用经典的前端三层架构:
- 样式层:server/static/css/custom.css负责界面个性化,server/static/css/skeleton.css提供基础布局框架
- 脚本层:server/static/js/xterm-5.3.0.js实现终端模拟器,server/static/js/jquery-3.5.1.min.js处理DOM操作
- 资源层:server/static/images/存放图标和图片资源,包含512px高分辨率的应用图标
样式定制:从品牌色到响应式布局
品牌标识植入
通过修改custom.css中的.header类,可将团队Logo和品牌色融入界面:
.header {
margin-top: 2.5vh;
text-align: center;
background-image: url('images/team-logo.png');
background-repeat: no-repeat;
background-position: left 20px center;
padding-left: 80px;
}
.navbar-link {
color: #2c3e50; /* 团队主色调 */
}
.button-primary {
background-color: #3498db; /* 行动按钮色 */
border-color: #3498db;
}
响应式布局优化
针对不同设备调整控制台布局,在skeleton.css的媒体查询块中添加:
/* 适配平板设备 */
@media (min-width: 768px) and (max-width: 1024px) {
.lock-grid {
grid-template-columns: repeat(3, 1fr);
}
}
/* 移动端优化 */
@media (max-width: 767px) {
.lock-grid {
grid-template-columns: 1fr;
}
.navbar-link {
font-size: 10px;
padding: 0 8px;
}
}
暗色模式实现
通过CSS变量和JavaScript切换实现暗色模式,在custom.css中定义:
:root {
--bg-color: #ffffff;
--text-color: #222222;
--grid-bg: #f9f9f9;
}
[data-theme="dark"] {
--bg-color: #1a1a1a;
--text-color: #e0e0e0;
--grid-bg: #2d2d2d;
}
body {
background-color: var(--bg-color);
color: var(--text-color);
}
.lock-grid {
background-color: var(--grid-bg);
}
功能扩展:JavaScript交互增强
自定义数据过滤器
在现有JavaScript基础上添加项目筛选功能,创建server/static/js/filters.js:
// 项目路径过滤
document.getElementById('path-filter').addEventListener('input', function(e) {
const filter = e.target.value.toLowerCase();
document.querySelectorAll('.lock-row').forEach(row => {
const path = row.querySelector('.lock-path').textContent.toLowerCase();
row.style.display = path.includes(filter) ? '' : 'none';
});
});
// 时间范围筛选
document.getElementById('time-filter').addEventListener('change', function(e) {
const days = parseInt(e.target.value);
const cutoff = new Date();
cutoff.setDate(cutoff.getDate() - days);
document.querySelectorAll('.lock-datetime').forEach(el => {
const lockDate = new Date(el.dataset.timestamp);
const row = el.closest('.lock-row');
row.style.display = lockDate >= cutoff ? '' : 'none';
});
});
批量操作功能
扩展批量解锁功能,在server/static/js/batch-actions.js中实现:
// 全选切换
document.getElementById('select-all').addEventListener('change', function(e) {
document.querySelectorAll('.lock-selector').forEach(checkbox => {
checkbox.checked = e.target.checked;
});
});
// 批量解锁
document.getElementById('batch-unlock').addEventListener('click', async function() {
const selectedLocks = Array.from(document.querySelectorAll('.lock-selector:checked'))
.map(cb => cb.dataset.lockId);
if (selectedLocks.length === 0) return;
try {
const response = await fetch('/api/locks/batch-unlock', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ lockIds: selectedLocks })
});
if (response.ok) {
selectedLocks.forEach(id => {
document.querySelector(`[data-lock-id="${id}"]`).closest('.lock-row').remove();
});
showNotification('成功解锁选中项目', 'success');
}
} catch (error) {
showNotification('解锁失败: ' + error.message, 'error');
}
});
部署与版本控制
定制资源打包
修改项目根目录的Makefile,添加自定义资源打包步骤:
# 自定义前端资源打包
build-frontend:
@echo "Building custom frontend assets..."
# 编译CSS
cat server/static/css/normalize.css server/static/css/skeleton.css server/static/css/custom.css > server/static/css/bundle.css
# 压缩JS
uglifyjs server/static/js/*.js -o server/static/js/bundle.min.js
# 添加版本标识
echo "const ASSETS_VERSION = '$(shell git rev-parse --short HEAD)';" >> server/static/js/bundle.min.js
配置管理最佳实践
采用环境变量控制界面特性,修改server/user_config.go添加配置项:
type UIConfig struct {
CustomLogoPath string `json:"custom_logo_path"`
EnableDarkMode bool `json:"enable_dark_mode"`
DefaultTheme string `json:"default_theme"`
}
// 从环境变量加载UI配置
func LoadUIConfig() UIConfig {
return UIConfig{
CustomLogoPath: os.Getenv("ATLANTIS_UI_LOGO_PATH"),
EnableDarkMode: os.Getenv("ATLANTIS_UI_DARK_MODE") == "true",
DefaultTheme: os.Getenv("ATLANTIS_DEFAULT_THEME"),
}
}
效果展示与迭代优化
定制前后对比
界面定制前后对比
左侧为默认界面,右侧为定制后的团队专属控制台,包含:
- 团队配色方案与Logo
- 项目分类标签系统
- 高级筛选工具栏
- 批量操作按钮组
用户反馈收集
在界面添加反馈入口,创建server/static/js/feedback.js:
// 反馈表单提交
document.getElementById('feedback-form').addEventListener('submit', function(e) {
e.preventDefault();
const feedbackText = document.getElementById('feedback-text').value;
const rating = document.querySelector('input[name="rating"]:checked').value;
fetch('/api/feedback', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
feedback: feedbackText,
rating: rating,
uiVersion: ASSETS_VERSION,
timestamp: new Date().toISOString()
})
}).then(() => {
document.getElementById('feedback-form').reset();
alert('感谢您的反馈!');
});
});
总结与后续扩展方向
通过CSS变量定制、JavaScript功能增强和配置系统扩展,Atlantis Web界面可完美适配团队工作流。后续可探索:
- 插件系统:开发界面插件架构,支持团队独立开发功能模块
- 实时协作:集成WebSocket实现多人操作状态同步
- 数据可视化:添加Terraform执行统计仪表盘
完整的定制方案已归档至项目的custom-ui分支,包含所有示例代码和配置文件。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



