Commit 6dfe77bb by zhaochengxiang

任务管理

parent c8194e8a
......@@ -19,6 +19,7 @@ const ModelConfig = loadable(()=> import('./view/Manage/ModelConfig'));
const AssetManage = loadable(()=> import('./view/Manage/AssetManage'));
const AssetResourceBrowse = loadable(()=> import('./view/Manage/AssetResourceBrowse'));
const AssetBrowse = loadable(()=> import('./view/Manage/AssetBrowse'));
const TaskManage = loadable(()=> import('./view/Manage/AssetTask'));
const AssetRecycle = loadable(()=> import('./view/Manage/AssetRecycle'));
const DatasourceManage = loadable(()=> import('./view/Manage/DatasourceManage'));
const AssetDetailPage = loadable(()=> import('./view/Manage/AssetManage/Component/AssetDetailPage'));
......@@ -158,6 +159,7 @@ export class App extends React.Component {
<Route path={'/center-home/menu/asset-manage'} component={AssetManage} exact />
<Route path={'/center-home/menu/asset-resource-browse'} component={AssetResourceBrowse} exact />
<Route path={'/center-home/menu/asset-browse'} component={AssetBrowse} exact />
<Route path={'/center-home/menu/task-manage'} component={TaskManage} exact />
<Route path={'/center-home/menu/asset-recycle'} component={AssetRecycle} exact />
<Route path={'/center-home/menu/msd-define'} component={DataMasterDefine} exact />
<Route path={'/center-home/menu/msd-manage'} component={DataMasterManage} exact />
......
......@@ -288,4 +288,8 @@ export function* getResourceBatchEditInfo(payload) {
export function* resourceBatchEdit(payload) {
return yield call(service.resourceBatchEdit, payload)
}
export function* getTasks(payload) {
return yield call(service.getTasks, payload)
}
\ No newline at end of file
......@@ -40,6 +40,10 @@ export const routes = [
text: '资产浏览'
},
{
name: 'task-manage',
text: '任务管理',
},
{
name: 'asset-recycle',
text: '未挂载资产',
},
......
......@@ -278,4 +278,8 @@ export function getPreviewRangeByDirId(payload) {
export function resourceBatchEdit(payload) {
return PostJSON("/dataassetmanager/resourceApi/batchEdit", payload)
}
\ No newline at end of file
}
export function getTasks(payload) {
return GetJSON("/dataassetmanager/resource/taskApi/listTasksByPage", payload)
}
\ No newline at end of file
......@@ -147,13 +147,10 @@ const FC = (props) => {
window?.addEventListener("storage", storageChange)
return () => {
window?.removeEventListener("storage", storageChange)
}
return () => {
$$keyword.unsubscribe()
$$assetDirectorySubject.unsubscribe()
$$assetActionSubject.unsubscribe()
window?.removeEventListener("storage", storageChange)
}
//eslint-disable-next-line react-hooks/exhaustive-deps
}, [])
......
import React from 'react'
import { debounceTime, Subject } from 'rxjs'
import { DatePicker, Space, Input } from 'antd'
import { defaultPage, usePage } from '../../../util/hooks/page'
import Table from '../../../util/Component/Table'
import { dispatch } from '../../../model'
import './index.less'
import { getQueryParam } from '../../../util'
const FC = (props) => {
const id = getQueryParam('id', props?.location?.search)
const [args, setArgs] = React.useState(() => ({
params: {
page: defaultPage.pageNum,
size: defaultPage.pageSize,
keyword: undefined,
startTime: undefined,
endTime: undefined,
},
}))
const [loading, setLoading] = React.useState(false)
const [data, setData] = React.useState()
const [total, setTotal] = React.useState()
const $keyword = React.useMemo(() => new Subject(), [])
const [keyword, setKeyword] = React.useState()
const [page, setPage] = usePage()
const mountRef = React.useRef(false)
const setArgsAndPage = React.useCallback((params) => {
// 设置查询参数时将分页置为1
setPage(prevpg => {
setArgs((prev) => {
const newparams = params ? { ...prev.params, ...params } : undefined
return { params: { ...newparams, page: 1, size: prevpg.pageSize } }
})
return ({ ...prevpg, pageNum: 1 })
})
//eslint-disable-next-line react-hooks/exhaustive-deps
}, [])
const setPageAndArgs = React.useCallback((page) => {
setPage(prev => ({ ...prev, ...page }))
setArgs((prev) => {
return { params: { ...prev.params, page: page.pageNum, size: page.pageSize } }
})
//eslint-disable-next-line react-hooks/exhaustive-deps
}, [])
React.useEffect(() => {
const $$keyword = $keyword.pipe(debounceTime(1000)).subscribe((keyword) => {
setArgsAndPage({ keyword })
})
if (id) {
setKeyword(id)
$keyword.next(id)
}
return () => {
$$keyword.unsubscribe()
}
}, [])
React.useEffect(() => {
if (id && !mountRef.current) {
if (args.params.keyword) {
mountRef.current = true
getTasks()
}
} else {
getTasks()
}
}, [args])
const cols = [
{
title: '任务编号',
dataIndex: 'taskNO',
},
{
title: '数量',
dataIndex: 'resourceNum',
},
{
title: '已分配',
dataIndex: 'distributedNum',
},
{
title: '已梳理',
dataIndex: 'sortedNum',
},
{
title: '已完成',
dataIndex: 'doneNum',
},
{
title: '分配人',
dataIndex: 'creator',
},
{
title: '分配时间',
dataIndex: 'createTime',
},
]
const getTasks = () => {
setLoading(true)
dispatch({
type: 'assetmanage.getTasks',
payload: {
pageNum: args.params.page,
pageSize: args.params.size,
keyword: args.params.keyword,
beginTime: args.params.startTime??'',
endTime: args.params.endTime??'',
},
callback: data => {
setLoading(false)
setData(data?.data)
setTotal(data?.total)
},
error: () => {
setLoading(false)
}
})
}
return (
<div className='task-manage'>
<div className='header px-3'>
<Space>
<div />
</Space>
<Space>
<DatePicker.RangePicker
format="YYYY-MM-DD"
onChange={(values) => {
setArgsAndPage({ startTime: (values??[]).length>0?values[0].valueOf():'', endTime: (values??[]).length>1?values[1].valueOf():'' })
}}
style={{ width: 240 }}
/>
<Input size="middle"
placeholder="任务编号/分配人"
value={keyword}
bordered={true} allowClear
onChange={(e) => {
const keyword = e.target.value
setKeyword(keyword)
$keyword.next((keyword??'').trim())
}}
style={{
width: 250
}}
/>
</Space>
</div>
<div className='px-3 pt-3'>
<Table
maxHeight='calc(100vh - 285px - 46px)'
loading={loading}
columns={cols}
dataSource={data||[]}
pageSize={page.pageSize} pageNum={page.pageNum} total={total ?? 0}
onPaginate={(page, pageSize) => {
setPageAndArgs({ pageNum: page, pageSize })
}}
/>
</div>
</div>
)
}
export default FC
\ No newline at end of file
.task-manage {
height: 100%;
background-color: #fff;
.header {
display: flex;
flex: none;
height: 57px;
border-bottom: 1px solid #EFEFEF;
justify-content: space-between;
align-items: center;
}
}
\ No newline at end of file
......@@ -13,6 +13,7 @@ import AssetManage from './AssetManage';
import AssetResourceBrowse from './AssetResourceBrowse';
import AssetBrowse from './AssetBrowse';
import AssetRecycle from './AssetRecycle';
import TaskManage from './AssetTask';
import DataMasterDefine from "./DataMaster/Define";
import DataMasterManage from "./DataMaster/Manage";
import MetadataHarvester from './MetadataHarvester';
......@@ -37,6 +38,7 @@ class Manage extends Component {
<Route path={`${match.path}/asset-manage`} component={AssetManage} />
<Route path={`${match.path}/asset-resource-browse`} component={AssetResourceBrowse} />
<Route path={`${match.path}/asset-browse`} component={AssetBrowse} />
<Route path={`${match.path}/task-manage`} component={TaskManage} />
<Route path={`${match.path}/asset-recycle`} component={AssetRecycle} />
<Route path={`${match.path}/msd-define`} component={DataMasterDefine} />
<Route path={`${match.path}/msd-manage`} component={DataMasterManage} />
......
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