Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ea8165bbd8 | ||
|
|
2d5abe5975 |
@@ -0,0 +1,17 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# param-hub 启动脚本(setsid 完全脱离终端,确保持久运行)
|
||||||
|
APP_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||||
|
PID_FILE="$APP_DIR/app.pid"
|
||||||
|
PYTHON="/home/hz1/miniconda3/envs/openclaw/bin/python3"
|
||||||
|
cd "$APP_DIR"
|
||||||
|
if [ -f "$PID_FILE" ]; then
|
||||||
|
PID=$(cat "$PID_FILE")
|
||||||
|
if ps -p $PID > /dev/null 2>&1; then
|
||||||
|
echo "param-hub 已在运行 (PID: $PID)"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
setsid nohup "$PYTHON" app.py > logs/app.log 2>&1 &
|
||||||
|
echo $! > "$PID_FILE"
|
||||||
|
sleep 2
|
||||||
|
echo "param-hub 已启动 (PID: $(cat $PID_FILE))"
|
||||||
+14
-7
@@ -1586,7 +1586,7 @@
|
|||||||
${imageUrls.map((url, idx) => `
|
${imageUrls.map((url, idx) => `
|
||||||
<div class="relative w-24 h-24 border rounded-lg overflow-hidden group">
|
<div class="relative w-24 h-24 border rounded-lg overflow-hidden group">
|
||||||
<img src="${url}" class="w-full h-full object-cover">
|
<img src="${url}" class="w-full h-full object-cover">
|
||||||
<button onclick="removeImage(${idx})" class="absolute top-1 right-1 w-6 h-6 bg-red-500 text-white rounded-full opacity-0 group-hover:opacity-100 transition flex items-center justify-center">
|
<button type="button" onclick="removeImage(${idx})" class="absolute top-1 right-1 w-6 h-6 bg-red-500 text-white rounded-full opacity-0 group-hover:opacity-100 transition flex items-center justify-center">
|
||||||
<i class="ri-close-line"></i>
|
<i class="ri-close-line"></i>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -1594,10 +1594,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="flex gap-2">
|
<div class="flex gap-2">
|
||||||
<input type="file" id="imageInput" accept="image/*" multiple class="hidden" onchange="handleImageUpload(event, '${type}')">
|
<input type="file" id="imageInput" accept="image/*" multiple class="hidden" onchange="handleImageUpload(event, '${type}')">
|
||||||
<button onclick="document.getElementById('imageInput').click()" class="px-4 py-2 bg-gray-100 text-gray-600 rounded-lg hover:bg-gray-200 text-sm">
|
<button type="button" onclick="document.getElementById('imageInput').click()" class="px-4 py-2 bg-gray-100 text-gray-600 rounded-lg hover:bg-gray-200 text-sm">
|
||||||
<i class="ri-image-add-line mr-1"></i>选择图片
|
<i class="ri-image-add-line mr-1"></i>选择图片
|
||||||
</button>
|
</button>
|
||||||
<button onclick="pasteImageFromClipboard('${type}')'" class="px-4 py-2 bg-gray-100 text-gray-600 rounded-lg hover:bg-gray-200 text-sm">
|
<button type="button" onclick="pasteImageFromClipboard('${type}')'" class="px-4 py-2 bg-gray-100 text-gray-600 rounded-lg hover:bg-gray-200 text-sm">
|
||||||
<i class="ri-clipboard-line mr-1"></i>粘贴图片
|
<i class="ri-clipboard-line mr-1"></i>粘贴图片
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -1843,10 +1843,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex gap-2 opacity-0 group-hover:opacity-100 transition">
|
<div class="flex gap-2 opacity-0 group-hover:opacity-100 transition">
|
||||||
<button onclick="editSubcategory(${index})" class="px-2 py-1 text-blue-600 hover:bg-blue-50 rounded text-sm">
|
<button type="button" onclick="editSubcategory(${index})" class="px-2 py-1 text-blue-600 hover:bg-blue-50 rounded text-sm">
|
||||||
<i class="ri-edit-line"></i>
|
<i class="ri-edit-line"></i>
|
||||||
</button>
|
</button>
|
||||||
<button onclick="deleteSubcategory(${index})" class="px-2 py-1 text-red-600 hover:bg-red-50 rounded text-sm">
|
<button type="button" onclick="deleteSubcategory(${index})" class="px-2 py-1 text-red-600 hover:bg-red-50 rounded text-sm">
|
||||||
<i class="ri-delete-bin-line"></i>
|
<i class="ri-delete-bin-line"></i>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -1884,10 +1884,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex gap-2 opacity-0 group-hover:opacity-100 transition">
|
<div class="flex gap-2 opacity-0 group-hover:opacity-100 transition">
|
||||||
<button onclick="editField(${index})" class="px-2 py-1 text-blue-600 hover:bg-blue-50 rounded text-sm">
|
<button type="button" onclick="editField(${index})" class="px-2 py-1 text-blue-600 hover:bg-blue-50 rounded text-sm">
|
||||||
<i class="ri-edit-line"></i>
|
<i class="ri-edit-line"></i>
|
||||||
</button>
|
</button>
|
||||||
<button onclick="deleteField(${index})" class="px-2 py-1 text-red-600 hover:bg-red-50 rounded text-sm">
|
<button type="button" onclick="deleteField(${index})" class="px-2 py-1 text-red-600 hover:bg-red-50 rounded text-sm">
|
||||||
<i class="ri-delete-bin-line"></i>
|
<i class="ri-delete-bin-line"></i>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -2239,6 +2239,13 @@
|
|||||||
document.getElementById('smartUpdateModal').addEventListener('click', function(e) { if (e.target === this) closeSmartUpdateModal(); });
|
document.getElementById('smartUpdateModal').addEventListener('click', function(e) { if (e.target === this) closeSmartUpdateModal(); });
|
||||||
document.getElementById('fieldModal').addEventListener('click', function(e) { if (e.target === this) closeFieldModal(); });
|
document.getElementById('fieldModal').addEventListener('click', function(e) { if (e.target === this) closeFieldModal(); });
|
||||||
|
|
||||||
|
// 防止 itemForm 原生提交(保存统一走 saveItem,避免表单 GET 提交导致页面跳转/刷新)
|
||||||
|
document.addEventListener('submit', function(e) {
|
||||||
|
if (e.target && e.target.id === 'itemForm') {
|
||||||
|
e.preventDefault();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// ============ 智能添加功能 ============
|
// ============ 智能添加功能 ============
|
||||||
|
|
||||||
let smartAddType = '';
|
let smartAddType = '';
|
||||||
|
|||||||
Reference in New Issue
Block a user