测试节点版本配置 - 管理系统
import React, { useEffect, useRef, useState } from 'react'; import ContentCard from '@/components/ContentCard'; import { Button, Collapse, Popconfirm, Select, Space, message, Upload } from 'antd'; import { ActionType, EditableProTable, ProColumns } from '@ant-design/pro-table'; import { getOnlyKey } from '@/utils/utils'; import { PlusCircleOutlined, UploadOutlined } from '@ant-design/icons'; import './index.less'; import { isArray, isNumber } from 'lodash'; import { getNodeVersionList, getTestNodeType, addNodeVersion, updateNodeVersion, deletedNodeVersion, } from '@/services/configManage/nodeLibrary'; import { ProFormUploadButton } from '@ant-design/pro-form';
// import UserSelect from '@/components/UserSelect'; const { Panel } = Collapse;
const VersionConfiguration: React.FC = () => {
const actionRefs = useRef
const handleSelectChange = async (val: string) => { setSelectValue(val); fetchVersionList(val); };
const fetchVersionList = async (values: string) => { const result = await getNodeVersionList({ testNodeType: values }); setVersionData(result.data); const tableData = {}; const resluets: Record<string, unknown[]> = result.data; Object.entries(resluets).forEach(([version, datas]) => { tableData[version] = datas.map((item: any) => ({ ...item, key: item.id, })); }); setTableData(tableData); };
useEffect(() => {
getTestNode();
}, []);
const columns: ProColumns[] = [
{
title: '节点版本',
width: 80,
valueType: 'index',
align: 'center',
renderFormItem: ({ index }) => isNumber(index) && <>{index + 1}</>,
},
{
title: '测试项',
dataIndex: 'testItem',
align: 'center',
formItemProps: () => ({
rules: [{ required: true, message: '请输入测试项' }],
}),
},
{
title: '负责人',
dataIndex: 'leader',
align: 'center',
formItemProps: () => ({
rules: [{ required: true, message: '请输入负责人' }],
}),
// renderFormItem: () => {
// return ${info.file.name} file uploaded successfully);
const { response } = info.file;
const url = response?.data?.url;
actionRefs.current?.setDataSource?.((pre) =>
pre.map((item) => {
if (item.key === recordKey) {
return {
...item,
deliveryTemplate: url,
};
}
return item;
}),
);
} else if (info.file.status === 'error') {
message.error(${info.file.name} file upload failed.);
}
}}
>
<Button icon={
<Popconfirm
title="确定删除此行?"
key="delete"
onConfirm={async () => {
try {
const { code, msg } = await deletedNodeVersion({
id: record.id,
});
if ((code as unknown as string) !== 'BIZ_SUCCESS') throw new Error(msg);
message.success('删除成功!');
fetchVersionList(selectValue);
} catch (error) {}
}}
okText="确定"
cancelText="取消"
>
<a>删除</a>
</Popconfirm>,
],
},
];
return (
<div className="check-list-wrap">
<Collapse
ghost
activeKey={activeKeys}
onChange={(e) => setActiveKeys(isArray(e) ? e : [e])}
>
{Object.entries(versionData).map(([version, data]) => {
return (
<Panel header={version} key={version}>
<EditableProTable
rowKey="key"
recordCreatorProps={false}
actionRef={actionRefs}
columns={columns}
value={tableDatas[version]}
editable={{
type: 'single',
editableKeys: editKeys,
onSave: async (_, row) => {
const result = {
id: row.id,
testNode: selectValue,
testItem: row.testItem,
leader: row.leader,
caseLibraryName: row.caseLibraryName,
deliveryTemplate: row.deliveryTemplate,
testCycle: row.testCycle,
testNodeVersion: version,
referenceInputManpower: row.referenceInputManpower,
};
try {
const { code, msg } = row.id
? await updateNodeVersion(result)
: await addNodeVersion(result);
if ((code as unknown as string) !== 'BIZ_SUCCESS') throw new Error(msg);
message.success('保存成功!');
} catch (error) {}
},
onChange: setEditKeys,
actionRender: (row, config, defaultDoms) => {
return [defaultDoms.save, defaultDoms.cancel];
},
}}
search={false}
pagination={false}
bordered
/>
<Space>
<Button
style={{ border: '1px' }}
onClick={() => {
actionRefs.current?.addEditRecord?.({
key: getOnlyKey(),
});
}}
>
<PlusCircleOutlined />
</Button>
</Space>
</Panel>
);
})}
</Collapse>
</div>
</ContentCard>
); }; export default VersionConfiguration;