import React, { useEffect, useState } from 'react'
import { Spin, Popconfirm, Tree, Row, Col, Button, Input, Table } from 'antd';
import { connect } from 'react-redux';
import ProTable from '@ant-design/pro-table';
import moment from 'moment';
import TaskModal from '../components/taskModal';
import { parseHumanReadable } from 'cron-js-parser';
import './style.less';
function AcquisitionTask(props) {
const { loading, clientHeight, actions, dispatch, dataSources, adapters, tasks } = props;
const [pageSize, setPageSize] = useState(10);
const [currentPage, setCurrentPage] = useState(1);
const [searchValue, setSearchValue] = useState('')
const [visible, setVisible] = useState(false);//是否展示新增编辑模态框
const [editData, setEditData] = useState(null);//模态框编辑数据
const queryData = (search) => {
const query = {
// limit: search ? 10 : pageSize || 10,
// page: search ? 1 : currentPage || 1,
taskName: searchValue
}
dispatch(actions.metadataAcquisition.getTasks(query));
}
useEffect(() => {
dispatch(actions.metadataAcquisition.getDataSources());
dispatch(actions.metadataAcquisition.getAdapters())
queryData();
}, [pageSize, currentPage]);
const handleDelete = (id) => {
dispatch(actions.metadataAcquisition.deleteTask(id)).then(() => {
queryData();
});
};
//cron表达式转中文
const transCron = (value) => {
try {
let lang = 'zh_CN' //english
let obj = {
atSeconds: [1, 5, 10],
runEveryXMins: {
startAt: 10,
every: 10
},
runEveryHourInRange: {
from: 2,
to: 20
},
isEveryDay: true,
atYears: [2020, 2022]
};
return (parseHumanReadable(value, obj, lang))
} catch (err) {
return '-'
}
}
const onFinish = (values) => {
const dataToSave = {
taskName: values?.taskName,
retryCount: values?.retryCount,
retryTime: values?.retryTime,
retried: values?.retried ? true : false,
dataSourceId: values?.dataSourceId,
cron: values?.cron,
}
if (editData) {
dispatch(actions.metadataAcquisition.modifyTask(editData?.id, dataToSave)).then(res => {
if (res.success) {
setVisible(false);
setEditData(null);
queryData();
}
})
} else {
dataToSave.enabled = true;
dataToSave.autoReleased = true;
dataToSave.storageStrategy = "增量";
dispatch(actions.metadataAcquisition.addTask(dataToSave)).then(res => {
if (res.success) {
setVisible(false);
setEditData(null);
queryData();
}
})
}
}
const columns = [
{
title: '任务名称',
dataIndex: 'taskName',
},
{
title: '数据源名称',
dataIndex: 'dataSourceName',
render: (text, record) => {
return record?.dataSource?.name
}
},
{
title: '适配器类型',
dataIndex: 'adapter',
render: (text, record) => {
const adapterInfo = record?.dataSource?.adapter
return adapterInfo?.adapterName
}
},
{
title: '采集方式',
dataIndex: 'control',
render: (text, record) => {
const adapterInfo = record?.dataSource?.adapter
return adapterInfo?.mode
}
},
{
title: '执行周期',
dataIndex: 'cron',
// render: (text, record) => {
// return transCron(record?.cron);
// }
},
{
title: '重复次数',
dataIndex: 'retryCount',
},
{
title: '时间间隔(分钟)',
dataIndex: 'retryTime',
},
{
title: '操作',
width: 300,
key: 'option',
valueType: 'option',
render: (text, record) => {
const options = [];
options.push( {
}} style={{ marginRight: 8 }}>立即执行)
const enabledText = record?.enabled ? '禁用' : '启用';
options.push( {
dispatch(actions.metadataAcquisition.modifyTask(record?.id, { enabled: !record?.enabled }, '采集任务' + enabledText)).then(res => {
if (res.success) {
queryData();
}
})
}} style={{ marginRight: 8 }}>{enabledText})
options.push( {
const adapterInfo = adapters?.find(x => x.id == record?.adapter)
setVisible(true)
record.adapterInfo = adapterInfo
setEditData(record)
}} style={{ marginRight: 8 }}>编辑)
options.push(
handleDelete(record.id)}
okText="是"
cancelText="否"
>
删除
)
return options;
},
},
];
return
{ setSearchValue(e.target.value) }}
style={{ width: 220, marginRight: 15 }} placeholder="数据源或任务名称" />
{
// return {`共${Math.ceil(total / pageSize)}页,${total}项`}
// },
// onShowSizeChange: (currentPage, pageSize) => {
// setCurrentPage(currentPage);
// setPageSize(pageSize);
// },
// onChange: (page, pageSize) => {
// setCurrentPage(page);
// setPageSize(pageSize);
// }
}}
dataSource={tasks?.rows || []}
options={false}
/>
{
visible && {
setVisible(false)
setEditData(null)
}
}
editData={editData}
visible={visible}
onFinish={onFinish}
dataSourceFilter={dataSources?.rows?.map(s => {
s.disabled = !!tasks?.rows?.find(x => x.dataSourceId == s.id);
return s;
})}
{...props}
/>
}
}
function mapStateToProps(state) {
const {
auth, global, datasources, adapters, tasks
} = state;
return {
loading: datasources.isRequesting || adapters?.isRequesting,
clientHeight: global.clientHeight,
actions: global.actions,
dataSources: datasources?.data || {},
adapters: adapters?.data || [],
tasks: tasks?.data || [],
};
}
export default connect(mapStateToProps)(AcquisitionTask);