Commit 7d8eed98 by zhaochengxiang

评估方案

parent 00240e9c
......@@ -75,6 +75,6 @@
"last 1 safari version"
]
},
"proxy": "http://139.198.127.28:17277",
"proxy": "http://139.198.127.28:17279",
"homepage": "http://myhost/data-govern"
}
......@@ -24,6 +24,7 @@ import EditTemplate from './view/Manage/ModelConfig/Component/EditTemplate';
import AssetTree from './view/Manage/AssetManage/Component/AssetTree';
import Asset1104Manage from './view/Manage/Asset1104Manage';
import AssetTask from './view/Manage/AssetTask';
import AssetEvaluate from './view/Manage/AssetEvaluate';
import DataService from './view/Manage/Pdata';
import DataServiceDetail from './view/Manage/Pdata/Component/ServiceDetail';
import GrantedDataServiceList from './view/Manage/Pdata/Component/GrantedList';
......@@ -223,6 +224,7 @@ export class App extends React.Component {
<Route path={'/center-home/menu/asset-browse'} component={AssetBrowse} exact />
<Route path={'/center-home/menu/asset-recycle'} component={AssetRecycle} exact />
<Route path={'/center-home/menu/asset-task'} component={AssetTask} exact />
<Route path={'/center-home/menu/asset-evaluate'} component={AssetEvaluate} exact />
<Route path={'/center-home/menu/asset-1104-manage'} component={Asset1104Manage} exact />
<Route path={'/center-home/menu/data-service'} component={DataService} exact />
<Route path={'/center-home/data-model-action'} component={EditModel} exact />
......
......@@ -291,4 +291,20 @@ export function* getViewUrlByWorkbookId(payload) {
export function* saveWorkbookByType(payload) {
return yield call(service.saveWorkbookByType, payload)
}
export function* getEvaluations(payload) {
return yield call(service.getEvaluations, payload)
}
export function* saveEvaluation(payload) {
return yield call(service.saveEvaluation, payload)
}
export function* runEvaluation(payload) {
return yield call(service.runEvaluation, payload)
}
export function* deleteEvaluations(payload) {
return yield call(service.deleteEvaluations, payload)
}
\ No newline at end of file
......@@ -54,7 +54,11 @@ export const routes = [
{
name: 'asset-task',
text: '资产盘点任务',
}
},
{
name: 'asset-evaluate',
text: '资产评估',
},
]
}
];
......
......@@ -298,4 +298,20 @@ export function getViewUrlByWorkbookId(payload) {
export function saveWorkbookByType(payload) {
return Post("/dataassetmanager/reportApi/saveWorkbook", payload)
}
export function getEvaluations(payload) {
return GetJSON('/dataassetmanager/evaluationApi/listProjects', payload)
}
export function saveEvaluation(payload) {
return PostJSON('/dataassetmanager/evaluationApi/saveProject', payload)
}
export function runEvaluation(payload) {
return PostJSON('/dataassetmanager/evaluationApi/run', payload)
}
export function deleteEvaluations(payload) {
return PostJSON('/dataassetmanager/evaluationApi/deleteProjects', payload)
}
\ No newline at end of file
import { useState } from "react"
export interface Page {
pageSize: number
pageNum: number
}
export const defaultPageSize = 20
export const defaultPageSizeOptions = [10, 20, 50, 100]
export type PageSizeOptions = typeof defaultPageSizeOptions[number]
export const defaultPage = {
pageSize: defaultPageSize,
pageNum: 1
}
export function usePage(pageSize?: number): [Page, React.Dispatch<React.SetStateAction<Page>>, (pageNum: number) => void] {
const [page, setPage] = useState<Page>(() => ({
pageSize: pageSize ?? defaultPageSize, pageNum: 1,
}))
const gotoPage = (pageNum: number) => {
setPage(prev => ({ ...prev, pageNum }))
}
return [page, setPage, gotoPage]
}
export type PageType = ReturnType<typeof usePage>[0]
export function paginate<T>(list: T[] | undefined, page: Page) {
if (list) {
const { pageSize, pageNum } = page
const start = (pageNum - 1) * pageSize
const end = start + pageSize
return list.slice(start, end)
}
return list
}
\ No newline at end of file
import React from 'react'
import { Modal, Spin, Button, Form } from "antd"
const FC = (props) => {
const { visible, onCancel } = props
const [waiting, setWaiting] = React.useState(false)
const [loading, setLoading] = React.useState(false)
const basicRef = React.useRef(null)
const close = (refresh = false) => {
setWaiting(false)
setLoading(false)
onCancel?.(refresh)
}
const save = async () => {
try {
} catch (e) {
}
}
const footer = React.useMemo(() => {
return [
<Button key={'cancel'}
onClick={() => close()}
>取消</Button>,
<Button key={'save'} type='primary'
disabled={waiting}
onClick={() => save()}
>保存</Button>
]
}, [close, save, waiting])
return (
<Modal
visible={visible}
footer={footer}
width='50%'
bodyStyle={{ padding: '15px 15px 0px 15px', overflowX: 'auto', maxHeight: '80vh' }}
title='新增评估方案'
centered destroyOnClose
onCancel={() => { close() }}
>
<Spin spinning={loading || waiting}>
<Basic ref={basicRef} />
</Spin>
</Modal>
)
}
export default FC
const Basic = React.forwardRef(function ({ }, ref) {
const [form] = Form.useForm()
React.useImperativeHandle(ref, () => ({
validate: async () => {
return await form.validateFields()
},
}), [form])
return (
<Form
form={form}
labelCol={{ span: 6 }}
wrapperCol={{ span: 18 }}
autoComplete="off"
>
<Form.Item
label="方案名称"
name="name"
rules={[{ required: true, message: '请输入方案名称!' }]}
>
<Input placeholder="请输入方案名称" />
</Form.Item>
</Form>
)
})
\ No newline at end of file
import React from 'react'
import { debounceTime, Subject } from 'rxjs'
import { Space, Input, Table, Button } from 'antd'
import { defaultPage, usePage } from '../../../util/page'
import { dispatch } from '../../../model'
import './index.less'
const FC = (props) => {
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 })
})
return () => {
$$keyword.unsubscribe()
}
}, [])
React.useEffect(() => {
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.getEvaluations',
payload: {
pageNum: args.params.page,
pageSize: args.params.size,
keyword: args.params.keyword,
},
callback: data => {
setLoading(false)
setData(data?.data)
setTotal(data?.total)
},
error: () => {
setLoading(false)
}
})
}
return (
<div className='asset-evalute'>
<div className='header px-3'>
<Space>
<Button>新增</Button>
</Space>
<Space>
<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
.asset-evalute {
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
......@@ -16,6 +16,7 @@ import AssetBrowse from './AssetBrowse';
import AssetRecycle from './AssetRecycle';
import AssetTask from './AssetTask';
import Asset1104Manage from "./Asset1104Manage";
import AssetEvaluate from "./AssetEvaluate";
class Manage extends Component {
......@@ -41,6 +42,7 @@ class Manage extends Component {
<Route path={`${match.path}/asset-recycle`} component={AssetRecycle} />
<Route path={`${match.path}/asset-task`} component={AssetTask} />
<Route path={`${match.path}/1104-asset`} component={Asset1104Manage} />
<Route path={`${match.path}/asset-evaluate`} component={AssetEvaluate} />
</Switch>
) : (
<GetSession {...this.props} />
......
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