feat(utils): 添加通用反序列化方法以处理JSON格式字符串

master
钟良源 4 months ago
parent 059a04cfd1
commit eeddc8ab8a

@ -1,7 +1,7 @@
import React from 'react';
import styles from '@/components/FlowEditor/node/style/baseOther.module.less';
import { Handle, Position, useStore } from '@xyflow/react';
import { isJSON } from '@/utils/common';
import { deserializeValue } from '@/utils/common';
import cronstrue from 'cronstrue/i18n';
interface NodeContentData {
@ -94,18 +94,18 @@ const renderSpecialNodeHandles = (isStartNode: boolean, isEndNode: boolean, data
}}
/>
))}
{dataIns.length > 0 && dataIns.map((_, index) => (
<Handle
key={`input-handle-${index}`}
type="target"
position={Position.Left}
id={dataIns[index].name || `input-${index}`}
style={{
...handleStyles.data,
top: `${70 + apiIns.length * 20 + index * 20}px`
}}
/>
))}
{dataIns.length > 0 && dataIns.map((_, index) => (
<Handle
key={`input-handle-${index}`}
type="target"
position={Position.Left}
id={dataIns[index].name || `input-${index}`}
style={{
...handleStyles.data,
top: `${70 + apiIns.length * 20 + index * 20}px`
}}
/>
))}
</>
);
};
@ -179,22 +179,26 @@ const renderRegularNodeHandles = (dataIns: any[], dataOuts: any[], apiIns: any[]
};
const formatFooter = (data: any) => {
switch (data.type) {
case 'WAIT':
const { duration } = data.customDef;
const hours = Math.floor(duration / 3600);
const minutes = Math.floor((duration % 3600) / 60);
const seconds = Math.floor(duration % 60);
return `${hours}小时${minutes}分钟${seconds}`;
case 'CYCLE':
const { intervalSeconds } = data.customDef;
return cronstrue.toString(intervalSeconds, { locale: 'zh_CN' });
case 'EVENTSEND':
case 'EVENTLISTENE':
const { name } = data.customDef;
return `事件: ${name}`;
default:
return '这个类型还没开发';
try {
switch (data.type) {
case 'WAIT':
const { duration } = deserializeValue(data.customDef);
const hours = Math.floor(duration / 3600);
const minutes = Math.floor((duration % 3600) / 60);
const seconds = Math.floor(duration % 60);
return `${hours}小时${minutes}分钟${seconds}`;
case 'CYCLE':
const { intervalSeconds } = deserializeValue(data.customDef);
return cronstrue.toString(intervalSeconds, { locale: 'zh_CN' });
case 'EVENTSEND':
case 'EVENTLISTENE':
const { name } = data.customDef;
return `事件: ${name}`;
default:
return '这个类型还没开发';
}
} catch (e) {
console.log(e);
}
};

@ -198,4 +198,35 @@ export function formatSeconds(value: string) {
result = `${parseInt(`${hourTime}`, 10)}小时${result}`;
}
return result;
}
}
/**
* JSON
* @param value -
* @returns JSON
*/
export const deserializeValue = (value: any): any => {
// 如果不是字符串类型,直接返回原值
if (typeof value !== 'string') {
return value;
}
// 如果是空字符串,返回原值
if (value === '') {
return value;
}
// 尝试解析JSON
try {
// 检查是否为有效的JSON格式
if (isJSON(value)) {
return JSON.parse(value);
}
// 不是JSON格式返回原值
return value;
} catch (error) {
// 解析失败,返回原值
console.warn('Failed to deserialize value:', value, error);
return value;
}
};
Loading…
Cancel
Save