Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 633542a2be | |||
| ffe3dd1fc3 | |||
| 701889d22f | |||
| 1c97f3bd1e |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -21,7 +21,7 @@ ALERT_CONFIG_FILE = 'alert_config.json'
|
||||
# 应用配置
|
||||
APP_NAME = "项目服务管理面板"
|
||||
APP_VERSION = "v3.4.1"
|
||||
APP_PORT = 16022
|
||||
APP_PORT = 16023
|
||||
|
||||
# 监控配置
|
||||
DEFAULT_THRESHOLDS = {
|
||||
|
||||
@@ -446229,3 +446229,7 @@
|
||||
127.0.0.1 - - [25/Jun/2026 12:10:58] "GET /api/alerts HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [25/Jun/2026 12:10:58] "GET /api/system/stats HTTP/1.1" 200 -
|
||||
127.0.0.1 - - [25/Jun/2026 12:11:07] "GET /api/projects HTTP/1.1" 200 -
|
||||
[2026-06-25 12:19:01] 项目服务管理面板 v3.4.1 初始化完成
|
||||
[2026-06-25 12:19:01] 启动 项目服务管理面板,端口: 16023
|
||||
[2026-06-25 12:29:07] 项目服务管理面板 v3.4.1 初始化完成
|
||||
[2026-06-25 12:29:07] 启动 项目服务管理面板,端口: 16023
|
||||
|
||||
@@ -177,6 +177,7 @@
|
||||
<button onclick="filterType('cli')" class="filter-bar-btn" data-type="cli"><i class="ri-terminal-box-line"></i> CLI工具</button>
|
||||
<button onclick="filterType('extension')" class="filter-bar-btn" data-type="extension"><i class="ri-chrome-line"></i> 插件</button>
|
||||
<button onclick="showAddServiceModal()" class="filter-bar-btn add-btn"><i class="ri-add-circle-line"></i> 新增服务</button>
|
||||
<button onclick="showAddWebModal()" class="filter-bar-btn add-btn"><i class="ri-server-line"></i> 新增Web服务</button>
|
||||
</div>
|
||||
|
||||
<!-- 项目列表 -->
|
||||
@@ -750,6 +751,63 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 新增Web服务模态框 -->
|
||||
<div id="addWebModal" class="modal-overlay hidden">
|
||||
<div class="card rounded-xl modal-content p-6">
|
||||
<div class="flex items-center justify-between mb-4">
|
||||
<h3 class="font-bold text-lg">新增Web服务</h3>
|
||||
<button onclick="closeAddWebModal()" class="text-gray-400 hover:text-white"><i class="ri-close-line text-xl"></i></button>
|
||||
</div>
|
||||
|
||||
<form id="addWebForm" onsubmit="saveWebProject(event)">
|
||||
<div class="mb-3">
|
||||
<label class="block text-gray-400 text-sm mb-1">服务ID *</label>
|
||||
<input type="text" id="webProjectId" required class="w-full bg-gray-700 text-gray-200 px-3 py-2 rounded-lg" placeholder="唯一标识,如:my-service">
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="block text-gray-400 text-sm mb-1">服务名称 *</label>
|
||||
<input type="text" id="webProjectName" required class="w-full bg-gray-700 text-gray-200 px-3 py-2 rounded-lg" placeholder="显示名称">
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="block text-gray-400 text-sm mb-1">端口 *</label>
|
||||
<input type="text" id="webProjectPorts" required class="w-full bg-gray-700 text-gray-200 px-3 py-2 rounded-lg" placeholder="多个端口用逗号分隔,如:8080,8081">
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="block text-gray-400 text-sm mb-1">项目目录</label>
|
||||
<input type="text" id="webProjectDir" class="w-full bg-gray-700 text-gray-200 px-3 py-2 rounded-lg" placeholder="相对于works目录,如:tech-blog">
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="block text-gray-400 text-sm mb-1">启动命令</label>
|
||||
<input type="text" id="webProjectStartCmd" class="w-full bg-gray-700 text-gray-200 px-3 py-2 rounded-lg" placeholder="如:python3 app.py">
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="block text-gray-400 text-sm mb-1">停止命令</label>
|
||||
<input type="text" id="webProjectStopCmd" class="w-full bg-gray-700 text-gray-200 px-3 py-2 rounded-lg" placeholder="可选">
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="block text-gray-400 text-sm mb-1">后台URL</label>
|
||||
<input type="text" id="webProjectAdminUrl" class="w-full bg-gray-700 text-gray-200 px-3 py-2 rounded-lg" placeholder="如:http://localhost:8080/admin">
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="block text-gray-400 text-sm mb-1">描述</label>
|
||||
<input type="text" id="webProjectDesc" class="w-full bg-gray-700 text-gray-200 px-3 py-2 rounded-lg" placeholder="简要描述">
|
||||
</div>
|
||||
|
||||
<div class="flex justify-end gap-2">
|
||||
<button type="button" onclick="closeAddWebModal()" class="btn bg-gray-600 hover:bg-gray-700 px-4 py-2 rounded-lg">取消</button>
|
||||
<button type="submit" class="btn bg-green-600 hover:bg-green-700 px-4 py-2 rounded-lg">添加</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 邮件通知规则模态框 -->
|
||||
<div id="emailRuleModal" class="modal-overlay hidden">
|
||||
<div class="card rounded-xl modal-content p-6">
|
||||
@@ -1816,6 +1874,68 @@
|
||||
localStorage.setItem('customServices', JSON.stringify(services));
|
||||
}
|
||||
|
||||
// ==================== 新增Web服务管理 ====================
|
||||
|
||||
function showAddWebModal() {
|
||||
document.getElementById('addWebForm').reset();
|
||||
document.getElementById('addWebModal').classList.remove('hidden');
|
||||
}
|
||||
|
||||
function closeAddWebModal() {
|
||||
document.getElementById('addWebModal').classList.add('hidden');
|
||||
}
|
||||
|
||||
function saveWebProject(event) {
|
||||
event.preventDefault();
|
||||
|
||||
const id = document.getElementById('webProjectId').value.trim();
|
||||
const name = document.getElementById('webProjectName').value.trim();
|
||||
const portsStr = document.getElementById('webProjectPorts').value.trim();
|
||||
const directory = document.getElementById('webProjectDir').value.trim();
|
||||
const startCmd = document.getElementById('webProjectStartCmd').value.trim();
|
||||
const stopCmd = document.getElementById('webProjectStopCmd').value.trim();
|
||||
const adminUrl = document.getElementById('webProjectAdminUrl').value.trim();
|
||||
const description = document.getElementById('webProjectDesc').value.trim();
|
||||
|
||||
// 解析端口
|
||||
const ports = portsStr.split(',').map(p => parseInt(p.trim())).filter(p => !isNaN(p));
|
||||
if (ports.length === 0) {
|
||||
alert('请输入有效的端口号');
|
||||
return;
|
||||
}
|
||||
|
||||
const data = {
|
||||
id: id,
|
||||
name: name,
|
||||
type: 'web',
|
||||
ports: ports,
|
||||
directory: directory,
|
||||
start_cmd: startCmd || 'python3 app.py',
|
||||
stop_cmd: stopCmd,
|
||||
admin_url: adminUrl,
|
||||
description: description
|
||||
};
|
||||
|
||||
fetch('/api/projects/add', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(data)
|
||||
})
|
||||
.then(res => res.json())
|
||||
.then(result => {
|
||||
if (result.error) {
|
||||
alert('错误: ' + result.error);
|
||||
return;
|
||||
}
|
||||
closeAddWebModal();
|
||||
loadProjects();
|
||||
alert('Web服务添加成功!');
|
||||
})
|
||||
.catch(err => {
|
||||
alert('添加失败: ' + err.message);
|
||||
});
|
||||
}
|
||||
|
||||
// ==================== 邮件通知规则管理 ====================
|
||||
|
||||
function getEmailRules() {
|
||||
|
||||
Reference in New Issue
Block a user