/*
Copyright (C) 2025 QuantumNous
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
For commercial licensing, please contact support@quantumnous.com
*/
import React from 'react';
import {
Button,
Progress,
Tag,
Typography
} from '@douyinfe/semi-ui';
import {
Palette,
ZoomIn,
Shuffle,
Move,
FileText,
Blend,
Upload,
Minimize2,
RotateCcw,
PaintBucket,
Focus,
Move3D,
Monitor,
UserCheck,
HelpCircle,
CheckCircle,
Clock,
Copy,
FileX,
Pause,
XCircle,
Loader,
AlertCircle,
Hash,
Video
} from 'lucide-react';
const colors = [
'amber',
'blue',
'cyan',
'green',
'grey',
'indigo',
'light-blue',
'lime',
'orange',
'pink',
'purple',
'red',
'teal',
'violet',
'yellow',
];
// Render functions
function renderType(type, t) {
switch (type) {
case 'IMAGINE':
return (
}>
{t('绘图')}
);
case 'UPSCALE':
return (
}>
{t('放大')}
);
case 'VIDEO':
return (
}>
{t('视频')}
);
case 'EDITS':
return (
}>
{t('编辑')}
);
case 'VARIATION':
return (
}>
{t('变换')}
);
case 'HIGH_VARIATION':
return (
}>
{t('强变换')}
);
case 'LOW_VARIATION':
return (
}>
{t('弱变换')}
);
case 'PAN':
return (
}>
{t('平移')}
);
case 'DESCRIBE':
return (
}>
{t('图生文')}
);
case 'BLEND':
return (
}>
{t('图混合')}
);
case 'UPLOAD':
return (
}>
上传文件
);
case 'SHORTEN':
return (
}>
{t('缩词')}
);
case 'REROLL':
return (
}>
{t('重绘')}
);
case 'INPAINT':
return (
}>
{t('局部重绘-提交')}
);
case 'ZOOM':
return (
}>
{t('变焦')}
);
case 'CUSTOM_ZOOM':
return (
}>
{t('自定义变焦-提交')}
);
case 'MODAL':
return (
}>
{t('窗口处理')}
);
case 'SWAP_FACE':
return (
}>
{t('换脸')}
);
default:
return (
}>
{t('未知')}
);
}
}
function renderCode(code, t) {
switch (code) {
case 1:
return (
}>
{t('已提交')}
);
case 21:
return (
}>
{t('等待中')}
);
case 22:
return (
}>
{t('重复提交')}
);
case 0:
return (
}>
{t('未提交')}
);
default:
return (
}>
{t('未知')}
);
}
}
function renderStatus(type, t) {
switch (type) {
case 'SUCCESS':
return (
}>
{t('成功')}
);
case 'NOT_START':
return (
}>
{t('未启动')}
);
case 'SUBMITTED':
return (
}>
{t('队列中')}
);
case 'IN_PROGRESS':
return (
}>
{t('执行中')}
);
case 'FAILURE':
return (
}>
{t('失败')}
);
case 'MODAL':
return (
}>
{t('窗口等待')}
);
default:
return (
}>
{t('未知')}
);
}
}
const renderTimestamp = (timestampInSeconds) => {
const date = new Date(timestampInSeconds * 1000);
const year = date.getFullYear();
const month = ('0' + (date.getMonth() + 1)).slice(-2);
const day = ('0' + date.getDate()).slice(-2);
const hours = ('0' + date.getHours()).slice(-2);
const minutes = ('0' + date.getMinutes()).slice(-2);
const seconds = ('0' + date.getSeconds()).slice(-2);
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
};
function renderDuration(submit_time, finishTime, t) {
if (!submit_time || !finishTime) return 'N/A';
const start = new Date(submit_time);
const finish = new Date(finishTime);
const durationMs = finish - start;
const durationSec = (durationMs / 1000).toFixed(1);
const color = durationSec > 60 ? 'red' : 'green';
return (
}>
{durationSec} {t('秒')}
);
}
export const getMjLogsColumns = ({
t,
COLUMN_KEYS,
copyText,
openContentModal,
openImageModal,
isAdminUser,
}) => {
return [
{
key: COLUMN_KEYS.SUBMIT_TIME,
title: t('提交时间'),
dataIndex: 'submit_time',
render: (text, record, index) => {
return