Commit ca2a3711 by zhaochengxiang

任务管理

parent 87cafcd5
......@@ -478,4 +478,16 @@ export function* getSearchProperties() {
export function* searchModelBySearchProperties(payload) {
return yield call(datamodelerService.searchModelBySearchProperties, payload)
}
export function* getCompareJobList() {
return yield call(datamodelerService.getCompareJobList)
}
export function* getCompareJobStates() {
return yield call(datamodelerService.getCompareJobStates)
}
export function* deleteCompareJobs(payload) {
return yield call(datamodelerService.deleteCompareJobs, payload)
}
\ No newline at end of file
......@@ -430,4 +430,17 @@ export function getSearchProperties() {
export function searchModelBySearchProperties(payload) {
return PostJSON("/datamodeler/easyDataModelerCURD/searchEasyDataModelerDataModelsByModelSearchProperties", payload);
}
/* compare */
export function getCompareJobList() {
return GetJSON("/datamodeler/easyDataModelModelCompareJob/listAll")
}
export function getCompareJobStates() {
return GetJSON("/datamodeler/easyDataModelModelCompareJob/getJobStatusTypes")
}
export function deleteCompareJobs(payload) {
return Delete("/datamodeler/easyDataModelModelCompareJob/delModelCompareJobs", payload)
}
\ No newline at end of file
import React from "react"
import { Tabs } from "antd"
import TaskManage from './task-manage'
import TaskReport from './task-report'
const FC = (props) => {
const [activeKey, setActiveKey] = React.useState('manage')
return (
<div>
model compare
</div>
<Tabs className='' activeKey={activeKey} onChange={(val) => { setActiveKey(val) }}>
<Tabs.TabPane tab='任务管理' key='manage'>
<TaskManage />
</Tabs.TabPane>
<Tabs.TabPane tab='任务报告' key='report'>
<TaskReport />
</Tabs.TabPane>
</Tabs>
)
}
......
import React from 'react'
import { Pagination, Space, Button, Select, Input, Tooltip, Modal } from 'antd'
import { defaultPage } from '../../../util/hooks/page'
import Table from '../../../util/Component/Table'
import { dispatch } from '../../../model'
import { paginate, showMessage } from '../../../util'
const FC = (props) => {
const [args, setArgs] = React.useState({
state: undefined,
keyword: undefined,
page: defaultPage.pageNum,
size: defaultPage.pageSize,
})
const [loading, setLoading] = React.useState(false)
const [data, setData] = React.useState()
const [loadingStates, setLoadingStates] = React.useState(false)
const [states, setStates] = React.useState()
const [selectedRows, setSelectedRows] = React.useState()
const [modal, contextHolder] = Modal.useModal()
React.useEffect(() => {
getStates()
getTasks()
}, [])
const setArgsByParams = React.useCallback((params) => {
setArgs((prev) => {
return {...prev, ...params}
})
}, [])
const [tableData, total] = React.useMemo(() => {
let newTableData = [...data??[]]
if (args.state) {
newTableData = newTableData.filter(item => item.jobStatusType?.id === args.state)
}
if (args.keyword) {
newTableData = newTableData.filter(item =>
(item.jobShowNumber??'').indexOf(args.keyword) !== -1
|| (item.jobName??'').indexOf(args.keyword) !== -1
|| (item.jobDesc??'').indexOf(args.keyword) !== -1
)
}
return [paginate(newTableData, args.page, args.size), newTableData.length]
}, [data, args])
const cols = [
{
title: '序号',
dataIndex: 'index',
width:60,
render:(_, __, index)=> ((args.page-1)*args.size+index+1)
},
{
title: '任务编号',
dataIndex: 'jobShowNumber',
},
{
title: '任务名称',
dataIndex: 'jobName',
},
{
title: '任务描述',
dataIndex: 'jobDesc',
},
{
title: '任务状态',
dataIndex: 'jobStatusType',
render: (_, record) => record.jobStatusType?.name
},
// {
// title: '对比范围',
// dataIndex: 'compareRange',
// },
{
title: '模型状态',
dataIndex: 'modelStatusTypes',
render: (_, record) => (record.modelStatusTypes??[]).map(item => item.name).toString()
},
// {
// title: '对比策略',
// dataIndex: 'strategyItemPropertyTypes',
// },
// {
// title: '调度配置',
// dataIndex: 'jobSchedule',
// },
{
title: '负责人',
dataIndex: 'ownerName',
},
{
title: '更新时间',
dataIndex: 'modifiedTs',
render: (_, record) => record.modifiedTs ? new Date(record.modifiedTs).toLocaleString() : ''
},
]
const getStates = () => {
setLoadingStates(true)
dispatch({
type: 'datamodel.getCompareJobStates',
callback: data => {
setLoadingStates(false)
setStates(data)
},
error: () => {
setLoadingStates(false)
}
})
}
const getTasks = () => {
setLoading(true)
dispatch({
type: 'datamodel.getCompareJobList',
callback: data => {
setLoading(false)
setData(data)
},
error: () => {
setLoading(false)
}
})
}
const onAddClick = () => {
}
const onBatchDeleteClick = () => {
modal.confirm({
title:'提示',
content: '您确定要删除这些任务吗?',
okText: '确认',
cancelText: '取消',
onOk: () => {
dispatch({
type: 'datamodel.deleteCompareJobs',
payload: {
modelCompareJobIds: (selectedRows??[]).map(item => item.id).toString()
},
callback: data => {
showMessage('success', '删除成功')
setSelectedRows()
getTasks()
}
})
}
})
}
const onVisbleColConfigClick = () => {
}
return (
<div>
<div className='flex' style={{ justifyContent: 'space-between' }}>
<Space>
<Button onClick={onAddClick}>新增任务</Button>
<Tooltip title={(selectedRows??[]).length===0?'请先选择任务':''}>
<Button onClick={onBatchDeleteClick} disabled={(selectedRows??[]).length===0}>删除</Button>
</Tooltip>
<Button onClick={onVisbleColConfigClick}>可见列设置</Button>
</Space>
<Space>
<Select allowClear
loading={loadingStates}
placeholder="请选择状态"
value={args.state}
onChange={(val) => {
setArgsByParams({ state: val, page: 1 })
}}
style={{ width: 160 }}
>
{ (states??[]).map(item => (
<Select.Option key={item.id} value={item.id}>{item.name}</Select.Option>
)) }
</Select>
<Input size="middle"
placeholder="任务编号/名称/描述搜索"
value={args.keyword}
bordered={true} allowClear
onChange={(e) => {
setArgsByParams({ keyword: e.target.value, page: 1 })
}}
/>
</Space>
</div>
<div className='pt-3'>
<Table
extraColWidth={32}
loading={loading}
columns={cols??[]}
dataSource={tableData??[]}
pagination={false}
rowSelection={{
selectedRowKeys: (selectedRows??[]).map(item => item.id),
onChange: (selectedRowKeys, selectedRows) => {
setSelectedRows(selectedRows)
},
}}
/>
{
(total!==0) && <Pagination
className="text-center mt-3"
showSizeChanger
onChange={(page,size) => {
setArgsByParams({ page, size })
}}
current={args.page}
pageSize={args.size}
defaultCurrent={1}
total={total}
showTotal={() => `共${total??0}项`}
/>
}
</div>
{contextHolder}
</div>
)
}
export default FC
\ No newline at end of file
import React from 'react'
const FC = (props) => {
return (
<div>
task report
</div>
)
}
export default FC
\ No newline at end of file
......@@ -8,7 +8,6 @@ import UpdateRule from './update-rule'
import UpdateRuleTemplate from './update-rule-template'
import PermissionButton from '../../../../util/Component/PermissionButton'
import { showMessage } from "../../../../util"
import { render } from "@testing-library/react"
const nodeItems = [
{ key: 'name', title: '名称' },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment