1
This commit is contained in:
parent
0195976033
commit
e9dc5f1754
@ -1,6 +1,6 @@
|
|||||||
import React, {useState, useEffect} from 'react';
|
import React, {useState, useEffect} from 'react';
|
||||||
import {PageContainer} from '@ant-design/pro-layout';
|
import {PageContainer} from '@ant-design/pro-layout';
|
||||||
import {Button, Card, Form, Input, InputNumber, Select, Switch, Space, Menu, Tabs, Row, Col, message} from 'antd';
|
import {Button, Card, Form, Input, InputNumber, Select, Switch, Space, Menu, Tabs, Row, Col, message, ColorPicker} from 'antd';
|
||||||
import type {NodeDesignData} from './types';
|
import type {NodeDesignData} from './types';
|
||||||
import * as service from './service';
|
import * as service from './service';
|
||||||
|
|
||||||
@ -13,11 +13,27 @@ const TAB_CONFIG = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
// 渲染具体的表单控件
|
// 渲染具体的表单控件
|
||||||
const renderField = (schema: any) => {
|
const renderField = (schema: any, fieldPath: string) => {
|
||||||
const commonProps = {
|
const commonProps = {
|
||||||
placeholder: `请输入${schema.title}`,
|
placeholder: `请输入${schema.title}`,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 颜色字段路径列表
|
||||||
|
const colorFields = [
|
||||||
|
'ports.groups.in.attrs.circle.fill',
|
||||||
|
'ports.groups.in.attrs.circle.stroke',
|
||||||
|
'ports.groups.out.attrs.circle.fill',
|
||||||
|
'ports.groups.out.attrs.circle.stroke',
|
||||||
|
'style.fill',
|
||||||
|
'style.stroke',
|
||||||
|
'style.iconColor'
|
||||||
|
];
|
||||||
|
|
||||||
|
// 检查是否是颜色字段
|
||||||
|
if (colorFields.some(path => fieldPath.endsWith(path))) {
|
||||||
|
return <ColorPicker showText/>;
|
||||||
|
}
|
||||||
|
|
||||||
if (schema.enum) {
|
if (schema.enum) {
|
||||||
return (
|
return (
|
||||||
<Select
|
<Select
|
||||||
@ -72,7 +88,7 @@ const FormRenderer: React.FC<{
|
|||||||
{readOnly ? (
|
{readOnly ? (
|
||||||
<span style={{color: '#666'}}>{position.default || '-'}</span>
|
<span style={{color: '#666'}}>{position.default || '-'}</span>
|
||||||
) : (
|
) : (
|
||||||
renderField(position)
|
renderField(position, `${portPath}.position`)
|
||||||
)}
|
)}
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
@ -197,7 +213,7 @@ const FormRenderer: React.FC<{
|
|||||||
{readOnly ? (
|
{readOnly ? (
|
||||||
<span style={{color: '#666'}}>{value.default || '-'}</span>
|
<span style={{color: '#666'}}>{value.default || '-'}</span>
|
||||||
) : (
|
) : (
|
||||||
renderField(value)
|
renderField(value, fieldPath)
|
||||||
)}
|
)}
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
);
|
);
|
||||||
@ -259,25 +275,58 @@ const NodeDesignForm: React.FC = () => {
|
|||||||
// 处理 Tab 切换
|
// 处理 Tab 切换
|
||||||
const handleTabChange = (key: string) => {
|
const handleTabChange = (key: string) => {
|
||||||
setActiveTab(key);
|
setActiveTab(key);
|
||||||
form.resetFields();
|
// 不需要重置表单
|
||||||
};
|
};
|
||||||
|
|
||||||
// 处理保存
|
// 处理保存
|
||||||
const handleSave = async () => {
|
const handleSave = async () => {
|
||||||
try {
|
try {
|
||||||
const values = await form.validateFields();
|
const values = await form.validateFields();
|
||||||
const { base, ...otherValues } = values;
|
console.log('Form values:', values);
|
||||||
|
|
||||||
|
// 提取基本信息字段
|
||||||
|
const baseFields = {
|
||||||
|
nodeType: values['base.nodeType'],
|
||||||
|
nodeCode: values['base.nodeCode'],
|
||||||
|
nodeName: values['base.nodeName'],
|
||||||
|
category: values['base.category'],
|
||||||
|
description: values['base.description']
|
||||||
|
};
|
||||||
|
|
||||||
|
// 移除基本信息字段,处理 UI 配置
|
||||||
|
const uiValues = {...values};
|
||||||
|
delete uiValues['base.nodeType'];
|
||||||
|
delete uiValues['base.nodeCode'];
|
||||||
|
delete uiValues['base.nodeName'];
|
||||||
|
delete uiValues['base.category'];
|
||||||
|
delete uiValues['base.description'];
|
||||||
|
|
||||||
|
// 将扁平的键值对转换为嵌套对象
|
||||||
|
const convertToNestedObject = (flatObj: any) => {
|
||||||
|
const result: any = {};
|
||||||
|
|
||||||
|
Object.keys(flatObj).forEach(key => {
|
||||||
|
const parts = key.split('.');
|
||||||
|
let current = result;
|
||||||
|
|
||||||
|
for (let i = 0; i < parts.length - 1; i++) {
|
||||||
|
current[parts[i]] = current[parts[i]] || {};
|
||||||
|
current = current[parts[i]];
|
||||||
|
}
|
||||||
|
|
||||||
|
current[parts[parts.length - 1]] = flatObj[key];
|
||||||
|
});
|
||||||
|
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
const saveData = {
|
const saveData = {
|
||||||
...selectedNode,
|
...selectedNode,
|
||||||
nodeType: base.nodeType,
|
...baseFields,
|
||||||
nodeCode: base.nodeCode,
|
uiVariables: convertToNestedObject(uiValues)
|
||||||
nodeName: base.nodeName,
|
|
||||||
category: base.category,
|
|
||||||
description: base.description,
|
|
||||||
uiVariables: otherValues // 其他表单数据
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
console.log('Save data:', saveData);
|
||||||
await service.saveNodeDefinition(saveData);
|
await service.saveNodeDefinition(saveData);
|
||||||
message.success('保存成功');
|
message.success('保存成功');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user