Commit 042e2609 by zhaochengxiang

资产价值评分

parent d0c7360a
...@@ -45,6 +45,14 @@ export function* setupFilterElementIdsConfig(payload) { ...@@ -45,6 +45,14 @@ export function* setupFilterElementIdsConfig(payload) {
return yield call(service.setupFilterElementIdsConfig, payload); return yield call(service.setupFilterElementIdsConfig, payload);
} }
export function* listComputableElements() {
return yield call(service.listComputableElements);
}
export function* computeBySelectElements(payload) {
return yield call(service.computeBySelectElements, payload);
}
export function* addOrUpdateDataAsset(payload) { export function* addOrUpdateDataAsset(payload) {
return yield call(service.addOrUpdateDataAsset, payload); return yield call(service.addOrUpdateDataAsset, payload);
} }
...@@ -224,3 +232,7 @@ export function* uploadDataAssetExcel(payload) { ...@@ -224,3 +232,7 @@ export function* uploadDataAssetExcel(payload) {
export function* subs(payload) { export function* subs(payload) {
return yield call(service.subs, payload); return yield call(service.subs, payload);
} }
export function* getScore(payload) {
return yield call(service.getScore, payload);
}
\ No newline at end of file
...@@ -36,6 +36,14 @@ export function setupFilterElementIds(payload) { ...@@ -36,6 +36,14 @@ export function setupFilterElementIds(payload) {
return PostJSON("/dataassetmanager/elementApi/setupFilterElementIds", payload); return PostJSON("/dataassetmanager/elementApi/setupFilterElementIds", payload);
} }
export function listComputableElements() {
return GetJSON("/dataassetmanager/elementApi/listComputableElements");
}
export function computeBySelectElements(payload) {
return PostJSON("/dataassetmanager/elementApi/computeBySelectElements", payload);
}
export function listFilterElementIdsConfig() { export function listFilterElementIdsConfig() {
return PostJSON("/dataassetmanager/configApi/listFilterElementIds"); return PostJSON("/dataassetmanager/configApi/listFilterElementIds");
} }
...@@ -231,3 +239,7 @@ export function uploadDataAssetExcel(payload) { ...@@ -231,3 +239,7 @@ export function uploadDataAssetExcel(payload) {
export function subs(payload) { export function subs(payload) {
return Get("/dataassetmanager/subApi/subs", payload); return Get("/dataassetmanager/subApi/subs", payload);
} }
export function getScore(payload) {
return GetJSON("/dataassetmanager/dataAssetApi/getScoreByDirectoryId", payload);
}
\ No newline at end of file
import React, { useEffect, useState, useRef, useContext } from 'react'; import React, { useEffect, useState, useRef, useContext } from 'react';
import { useMount, useUnmount } from 'ahooks'; import { useMount, useUnmount } from 'ahooks';
import {Card, Spin, Tooltip, Tree, Dropdown, Menu, Modal, AutoComplete} from 'antd'; import {Card, Spin, Tooltip, Tree, Dropdown, Menu, Modal, AutoComplete} from 'antd';
import { PlusOutlined, ImportOutlined,ExportOutlined,ReloadOutlined, SettingOutlined } from '@ant-design/icons'; import { PlusOutlined, ImportOutlined,ExportOutlined,ReloadOutlined, SettingOutlined, CalculatorOutlined } from '@ant-design/icons';
import classNames from 'classnames'; import classNames from 'classnames';
import { useContextMenu, Menu as RcMenu, Item as RcItem } from "react-contexify"; import { useContextMenu, Menu as RcMenu, Item as RcItem } from "react-contexify";
import LocalStorage from 'local-storage'; import LocalStorage from 'local-storage';
...@@ -14,6 +14,7 @@ import { showMessage, getQueryParam } from '../../../../util'; ...@@ -14,6 +14,7 @@ import { showMessage, getQueryParam } from '../../../../util';
import { AnchorTimestamp, AnchorId, AssetManageReference, AssetBrowseReference, ResourceBrowseReference, AssetMountReference, AnchorDirId, Asset1104ManageReference } from '../../../../util/constant'; import { AnchorTimestamp, AnchorId, AssetManageReference, AssetBrowseReference, ResourceBrowseReference, AssetMountReference, AnchorDirId, Asset1104ManageReference } from '../../../../util/constant';
import { highlightSearchContentByTerms } from '../../../../util'; import { highlightSearchContentByTerms } from '../../../../util';
import { AppContext } from '../../../../App'; import { AppContext } from '../../../../App';
import ComputeScore from './ComputeScore';
import './AssetTree.less'; import './AssetTree.less';
import 'react-contexify/dist/ReactContexify.css'; import 'react-contexify/dist/ReactContexify.css';
...@@ -48,6 +49,7 @@ const AssetTree = (props) => { ...@@ -48,6 +49,7 @@ const AssetTree = (props) => {
const [ customDirectoryModalVisible, setCustomDirectoryModalVisible ] = useState(false); const [ customDirectoryModalVisible, setCustomDirectoryModalVisible ] = useState(false);
const [ customDirectoryAction, setCustomDirectoryAction ] = useState(''); const [ customDirectoryAction, setCustomDirectoryAction ] = useState('');
const [options, setOptions] = useState([]); const [options, setOptions] = useState([]);
const [ computeScoreVisible, setComputeScoreVisible ] = useState(false);
const [modal, contextHolder] = Modal.useModal(); const [modal, contextHolder] = Modal.useModal();
...@@ -564,6 +566,13 @@ const AssetTree = (props) => { ...@@ -564,6 +566,13 @@ const AssetTree = (props) => {
} }
} }
const onComputeScoreCancel = (refresh=false) => {
setComputeScoreVisible(false);
if (refresh) {
}
}
const displayMenu = (e) => { const displayMenu = (e) => {
show(e, { show(e, {
position: { position: {
...@@ -655,6 +664,9 @@ const AssetTree = (props) => { ...@@ -655,6 +664,9 @@ const AssetTree = (props) => {
<Tooltip title="自定义目录"> <Tooltip title="自定义目录">
<SettingOutlined className='default' onClick={customDir} style={{ fontSize:16,cursor:'pointer' }} /> <SettingOutlined className='default' onClick={customDir} style={{ fontSize:16,cursor:'pointer' }} />
</Tooltip> </Tooltip>
<Tooltip title="资产价值评分">
<CalculatorOutlined className='default' onClick={() => {setComputeScoreVisible(true)}} style={{ fontSize:16,cursor:'pointer' }} />
</Tooltip>
</div> </div>
)} )}
bordered={false} bordered={false}
...@@ -722,6 +734,10 @@ const AssetTree = (props) => { ...@@ -722,6 +734,10 @@ const AssetTree = (props) => {
action={ customDirectoryAction } action={ customDirectoryAction }
dirId= { currentDirId } dirId= { currentDirId }
/> />
<ComputeScore
visible={computeScoreVisible}
onCancel={ onComputeScoreCancel }
/>
{ {
(reference!==AssetMountReference) && <RcMenu id={MENU_ID}> (reference!==AssetMountReference) && <RcMenu id={MENU_ID}>
<RcItem id="edit" onClick={editDir}> <RcItem id="edit" onClick={editDir}>
......
import React, { useEffect, useState, useMemo } from 'react';
import { Modal, Checkbox, Row, Input, Col, Space, Button } from 'antd';
import { dispatch } from '../../../../model';
import { showMessage } from '../../../../util';
const FC = (props) => {
const { visible, onCancel } = props;
const [keyword, setKeyword] = useState('');
const [elements, setElements] = useState([]);
const [checkedValues, setCheckedValues] = useState([]);
const [confirmLoading, setConfirmLoading] = useState(false);
useEffect(() => {
if (visible) {
getComputableElements();
}
//eslint-disable-next-line react-hooks/exhaustive-deps
}, [visible])
const filterElements = useMemo(() => {
return elements?.filter(item => (item.name||'').indexOf(keyword)!==-1);
}, [keyword, elements])
const getComputableElements = () => {
dispatch({
type: 'assetmanage.listComputableElements',
callback: data => {
setElements(data);
}
})
}
const onSearchChange = (e) => {
setKeyword(e.target.value);
}
const onCheckboxChange = (newValues) => {
setCheckedValues(newValues);
}
const reset = () => {
setConfirmLoading(false);
setKeyword('');
setCheckedValues([]);
setElements([]);
}
const onOk = () => {
if ((checkedValues||[]).length === 0) {
showMessage('info', '请先选择要素');
return;
}
setConfirmLoading(true);
dispatch({
type: 'assetmanage.computeBySelectElements',
payload: {
data: checkedValues
},
callback: data => {
setConfirmLoading(false);
reset();
onCancel?.(true);
},
error: () => {
setConfirmLoading(false);
}
})
}
return (
<Modal
forceRender
title='资产价值评分'
visible={visible}
width={800}
confirmLoading={confirmLoading}
onCancel={() => {
reset();
onCancel?.();
}}
footer={
<Space>
<Button onClick={() => onCancel?.() }>取消</Button>
<Button type="primary" onClick={ onOk } loading={ confirmLoading }>计算</Button>
</Space>
}
>
<div>
<div className='mb-3'>资产要素</div>
<Input
value={keyword}
allowClear
placeholder='请输入资产要素'
style={{ marginBottom:10 }}
onChange={(e) => { onSearchChange(e) }}
/>
<div style={{ maxHeight: 500, overflow: 'auto' }}>
<Checkbox.Group value={checkedValues} onChange={onCheckboxChange} style={{ width: '100%' }}>
<Row>
{
elements?.map((item, index) => {
const exsit = filterElements?.some(filterItem => filterItem.id === item.id);
return (
<Col key={index} span={6} style={{ display: exsit?'':'none' }}>
<Checkbox value={item.id||''}>{item.name||''}</Checkbox>
</Col>
);
})
}
</Row>
</Checkbox.Group>
</div>
</div>
</Modal>
);
}
export default FC;
\ No newline at end of file
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