Files

83 lines
2.4 KiB
JavaScript

export function formatDate(iso) {
if (!iso) return "";
const d = new Date(iso);
const p = n => String(n).padStart(2, "0");
return `${d.getFullYear()}/${p(d.getMonth() + 1)}/${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}`;
}
export function formatVersionFilename(filename) {
// e.g. "uuid_20240101_153000.json" → "2024/01/01 15:30:00"
const match = filename.match(/(\d{4})(\d{2})(\d{2})_(\d{2})(\d{2})(\d{2})/);
if (!match) return filename;
const [, y, mo, d, h, mi, s] = match;
return `${y}/${mo}/${d} ${h}:${mi}:${s}`;
}
/**
* 截取当前 ComfyUI canvas 缩略图,返回 base64 data URL
* 缩放到 320x180
*/
export function captureCanvasThumbnail() {
try {
const canvas = document.querySelector("canvas");
if (!canvas) return null;
const thumb = document.createElement("canvas");
thumb.width = 320;
thumb.height = 180;
const ctx = thumb.getContext("2d");
ctx.fillStyle = "#1a1a1a";
ctx.fillRect(0, 0, 320, 180);
// 保持比例居中绘制
const scale = Math.min(320 / canvas.width, 180 / canvas.height);
const w = canvas.width * scale;
const h = canvas.height * scale;
const x = (320 - w) / 2;
const y = (180 - h) / 2;
ctx.drawImage(canvas, x, y, w, h);
return thumb.toDataURL("image/png");
} catch (e) {
console.warn("[yeban-WM] 截图失败:", e);
return null;
}
}
export function debounce(fn, delay) {
let timer;
return (...args) => {
clearTimeout(timer);
timer = setTimeout(() => fn(...args), delay);
};
}
/**
* 获取标签栏的工作流名称
*/
export function getActiveTabName() {
try {
return window.app.extensionManager?.workflow?.activeWorkflow?.filename || "";
} catch {
return "";
}
}
/**
* 更新标签栏的工作流名称
*/
export function setActiveTabName(name) {
try {
if (window.app.extensionManager?.workflow?.activeWorkflow) {
window.app.extensionManager.workflow.activeWorkflow.filename = name;
}
} catch (e) {
console.warn("[yeban-WM] 更新标签栏失败:", e);
}
}
/**
* 生成默认工作流名称
*/
export function generateDefaultWorkflowName() {
const now = new Date();
const timestamp = now.getTime();
return `Workflow_${timestamp}`;
}