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 [editKeys, setEditKeys] = useState<React.Key[]>([]); const [activeKeys, setActiveKeys] = useState<string[]>([]); const [versionData, setVersionData] = useState([]); const [selectSesion, setSelectSesion] = useState([]); const [selectValue, setSelectValue] = useState(''); const [tableDatas, setTableData] = useState({}); // 测试节点类型 const getTestNode = async () => { try { const { data } = await getTestNodeType({}); const newData = data.map((item: string) => { return { label: item, value: item }; }); setSelectSesion(newData); setSelectValue(newData[0]?.label); fetchVersionList(newData[0]?.label); } catch (error) {} };

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 ; // }, }, { title: '用例库名称', dataIndex: 'caseLibraryName', align: 'center', }, { title: '交付件模板', dataIndex: 'deliveryTemplate', align: 'center', renderFormItem: (_, { recordKey, dataIndex, isEditable, record }) => { return ( <Upload showUploadList={false} action="/api/upload" onChange={(info) => { if (info.file.status === 'done') { message.success(${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={}>Upload ); }, }, { title: '测试周期(天)', dataIndex: 'testCycle', align: 'center', }, { title: '参考投入人力(人天)', dataIndex: 'referenceInputManpower', align: 'center', }, { title: '操作', valueType: 'option', width: 120, align: 'center', render: (text, record, _, action) => [ <a key="editable" onClick={() => { action?.startEditable?.(record.key); }} > 配置 ,

    <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="riskmMonthly" style={{ marginBottom: 15 }}> <span style={{ fontWeight: 'bold', fontSize: '14px' }}>测试节点类型: <Select style={{ width: 230 }} options={selectSesion} value={selectValue} onChange={handleSelectChange} />

  <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;

测试节点版本配置 - 管理系统

原文地址: https://www.cveoy.top/t/topic/qjLX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录