|
@@ -2416,6 +2416,28 @@ export default function WorkJobDetail() {
|
|
|
return statusMap[statusStr] || String(status) || t('workJobDetail.statusUnknown');
|
|
return statusMap[statusStr] || String(status) || t('workJobDetail.statusUnknown');
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+ // 判断状态是否为已完成
|
|
|
|
|
+ const isStatusCompleted = (status: string | number | undefined): boolean => {
|
|
|
|
|
+ if (!status) return false;
|
|
|
|
|
+
|
|
|
|
|
+ // 直接判断是否为字符串 'completed'
|
|
|
|
|
+ if (String(status).toLowerCase() === 'completed') {
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 从字典中查找状态文本
|
|
|
|
|
+ const statusStr = String(status).toLowerCase();
|
|
|
|
|
+ const statusItem = jobStatusDictList.find(item => String(item.value).toLowerCase() === statusStr);
|
|
|
|
|
+ const statusText = statusItem ? (statusItem.label || '') : String(status || '');
|
|
|
|
|
+ const statusTextLower = statusText.toLowerCase();
|
|
|
|
|
+
|
|
|
|
|
+ // 判断状态文本是否包含已完成相关的关键词
|
|
|
|
|
+ return statusTextLower.includes('已完成') ||
|
|
|
|
|
+ statusTextLower.includes('执行完成') ||
|
|
|
|
|
+ statusTextLower.includes('completed') ||
|
|
|
|
|
+ statusTextLower.includes('完成');
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
// 获取作业状态样式(与列表颜色一致)
|
|
// 获取作业状态样式(与列表颜色一致)
|
|
|
const getStatusStyle = (status: string | number | undefined): React.CSSProperties => {
|
|
const getStatusStyle = (status: string | number | undefined): React.CSSProperties => {
|
|
|
if (!status) {
|
|
if (!status) {
|
|
@@ -2662,12 +2684,14 @@ export default function WorkJobDetail() {
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div className="flex items-center gap-2 flex-shrink-0">
|
|
<div className="flex items-center gap-2 flex-shrink-0">
|
|
|
- <Button
|
|
|
|
|
- type="primary"
|
|
|
|
|
- onClick={() => navigate(`/work-job/archive${jobId ? `?id=${jobId}` : ''}`)}
|
|
|
|
|
- >
|
|
|
|
|
- {t('workJobDetail.archiveInfo')}
|
|
|
|
|
- </Button>
|
|
|
|
|
|
|
+ {isStatusCompleted(jobDetail?.status) && (
|
|
|
|
|
+ <Button
|
|
|
|
|
+ type="primary"
|
|
|
|
|
+ onClick={() => navigate(`/work-job/archive${jobId ? `?id=${jobId}` : ''}`)}
|
|
|
|
|
+ >
|
|
|
|
|
+ {t('workJobDetail.archiveInfo')}
|
|
|
|
|
+ </Button>
|
|
|
|
|
+ )}
|
|
|
<button
|
|
<button
|
|
|
onClick={() => {
|
|
onClick={() => {
|
|
|
// 设置菜单信息到 sessionStorage,以便 Dashboard 恢复菜单状态
|
|
// 设置菜单信息到 sessionStorage,以便 Dashboard 恢复菜单状态
|