Commit ae779580 by zhaochengxiang

bug fix

parent 6eab010a
...@@ -113,6 +113,7 @@ export class App extends React.Component { ...@@ -113,6 +113,7 @@ export class App extends React.Component {
}}> }}>
<AssetTree <AssetTree
reference={AssetMountReference} reference={AssetMountReference}
metadataIds={hostParams.data}
checkable={true} checkable={true}
onCheck={(values) => { onCheck={(values) => {
hostParams?.callback&&hostParams?.callback(values); hostParams?.callback&&hostParams?.callback(values);
......
import React, { useEffect, useState, useContext, useMemo, useRef } from 'react'; import React, { useEffect, useState, useContext, useMemo, useRef } from 'react';
import { Form, Spin, Input, Descriptions, Space, Button, Tooltip, Select, Cascader, Radio, Divider, Typography, Modal, Row, Col, Pagination } from 'antd'; import { Form, Spin, Input, Descriptions, Space, Button, Tooltip, Select, Cascader, Radio, Divider, Typography, Modal, Row, Col, Pagination, Dropdown, Menu, message } from 'antd';
import { DownOutlined, UpOutlined, QuestionCircleOutlined } from '@ant-design/icons'; import { DownOutlined, UpOutlined, QuestionCircleOutlined } from '@ant-design/icons';
import LocalStorage from 'local-storage'; import LocalStorage from 'local-storage';
...@@ -12,14 +12,14 @@ import Separate from './Separate'; ...@@ -12,14 +12,14 @@ import Separate from './Separate';
import AssetTagModal from './AssetTagModal'; import AssetTagModal from './AssetTagModal';
import { AnchorId, AnchorDirId, AssetManageReference } from '../../../../util/constant'; import { AnchorId, AnchorDirId, AssetManageReference } from '../../../../util/constant';
import IndexCode from './IndexCode'; import IndexCode from './IndexCode';
// import Upload from './Upload'; import Upload from './Upload';
import Table from '../../ResizeableTable'; import Table from '../../ResizeableTable';
import { CancelSvg, EditSvg, SaveSvg, FullScreenSvg, CancelFullScreenSvg } from './AssetSvg'; import { CancelSvg, EditSvg, SaveSvg, FullScreenSvg, CancelFullScreenSvg } from './AssetSvg';
// import SelectUser from '../../Model/Component/SelectUsers'; import SelectUser from '../../Model/Component/SelectUsers';
// import SelectFilter from '../../Model/Component/SelectFilter'; import SelectFilter from '../../Model/Component/SelectFilter';
import { checkDataAssetEditable } from '../../../../service/dataassetmanager'; import { checkDataAssetEditable } from '../../../../service/dataassetmanager';
// import download from '../../../../util/download'; import download from '../../../../util/download';
import SelectStandard from './SelectStandard'; import SelectStandard from './SelectStandard';
import AttributeMaintain from './AttributeMaintain'; import AttributeMaintain from './AttributeMaintain';
...@@ -32,6 +32,7 @@ const AssetAction = (props) => { ...@@ -32,6 +32,7 @@ const AssetAction = (props) => {
const [ assetParams, setAssetParams ] = useState({ assets: {}, attributes: [], attributesFoldMap: {} }); const [ assetParams, setAssetParams ] = useState({ assets: {}, attributes: [], attributesFoldMap: {} });
const [ elements, setElements ] = useState([]); const [ elements, setElements ] = useState([]);
const [ wholeElements, setWholeElements ] = useState([]); const [ wholeElements, setWholeElements ] = useState([]);
const [currentAttribute, setCurrentAttribute] = useState();
const [ metadataId, setMetadataId ] = useState(''); const [ metadataId, setMetadataId ] = useState('');
const [ loading, setLoading ] = useState(false); const [ loading, setLoading ] = useState(false);
const [ confirmLoading, setConfirmLoading ] = useState(false); const [ confirmLoading, setConfirmLoading ] = useState(false);
...@@ -226,6 +227,7 @@ const AssetAction = (props) => { ...@@ -226,6 +227,7 @@ const AssetAction = (props) => {
} else { } else {
setMetadataId(''); setMetadataId('');
setAssetParams({...assetParams, ...{assets: {}, attributes: []}}); setAssetParams({...assetParams, ...{assets: {}, attributes: []}});
setCurrentAttribute();
getElements(); getElements();
} }
} }
...@@ -482,6 +484,9 @@ const AssetAction = (props) => { ...@@ -482,6 +484,9 @@ const AssetAction = (props) => {
}) })
setAssetParams({ assets: data, attributes: _attributes, attributesFoldMap: newAttributesFoldMap }); setAssetParams({ assets: data, attributes: _attributes, attributesFoldMap: newAttributesFoldMap });
if ((_attributes??[]).length > 0) {
setCurrentAttribute(_attributes[0])
}
let _fieldsValue = {}; let _fieldsValue = {};
(data.elements||[]).forEach(element => { (data.elements||[]).forEach(element => {
...@@ -668,16 +673,16 @@ const AssetAction = (props) => { ...@@ -668,16 +673,16 @@ const AssetAction = (props) => {
} catch (errInfo) { } catch (errInfo) {
console.log('Validate Failed:', errInfo); console.log('Validate Failed:', errInfo);
setConfirmLoading(false); showMessage('warn', '请完成资产必填项')
} }
} }
const onFoldButtonClick = (attribute, fold) => { // const onFoldButtonClick = (attribute, fold) => {
let newAttributesFoldMap = {...attributesFoldMap}; // let newAttributesFoldMap = {...attributesFoldMap};
newAttributesFoldMap[attribute] = fold; // newAttributesFoldMap[attribute] = fold;
setAssetParams({...assetParams, attributesFoldMap: newAttributesFoldMap}); // setAssetParams({...assetParams, attributesFoldMap: newAttributesFoldMap});
} // }
const onFullScreenClick = () => { const onFullScreenClick = () => {
setFullScreen(!fullScreen); setFullScreen(!fullScreen);
...@@ -752,22 +757,22 @@ const AssetAction = (props) => { ...@@ -752,22 +757,22 @@ const AssetAction = (props) => {
) )
} }
// if (element.name==='数据关键用户' || element.name?.toLowerCase()==='业务数据owner' || element.name?.toLowerCase()==='it责任人') { if (element.name==='数据关键用户' || element.name?.toLowerCase()==='业务数据owner' || element.name?.toLowerCase()==='it责任人') {
// return <SelectUser return <SelectUser
// type='edit' type='edit'
// loading={loadingUsers} loading={loadingUsers}
// users={users} users={users}
// disabled={element.manualMaintain==='否'} disabled={element.manualMaintain==='否'}
// /> />
// } }
// if (element.name==='业务责任部门' || element.name?.toLowerCase()==='it责任部门') { if (element.name==='业务责任部门' || element.name?.toLowerCase()==='it责任部门') {
// return <SelectFilter return <SelectFilter
// loading={loadingDepartments} loading={loadingDepartments}
// data={departments} data={departments}
// disabled={element.manualMaintain==='否'} disabled={element.manualMaintain==='否'}
// /> />
// } }
if (element.name === '主题域分组') { if (element.name === '主题域分组') {
return ( return (
...@@ -851,32 +856,32 @@ const AssetAction = (props) => { ...@@ -851,32 +856,32 @@ const AssetAction = (props) => {
return <IndexCode value={item.value||''} terms={terms} />; return <IndexCode value={item.value||''} terms={terms} />;
} }
// if (item.name==='数据关键用户' || item.name?.toLowerCase()==='业务数据owner' || item.name?.toLowerCase()==='it责任人' || item.name==='创建人' || item.name==='更新人') { if (item.name==='数据关键用户' || item.name?.toLowerCase()==='业务数据owner' || item.name?.toLowerCase()==='it责任人' || item.name==='创建人' || item.name==='更新人') {
// return <SelectUser return <SelectUser
// type='detail' type='detail'
// users={users} users={users}
// terms={terms} terms={terms}
// value={item.value||''} value={item.value||''}
// /> />
// } }
return <span className='text-color'>{highlightSearchContentByTerms(item.value||'', terms)}</span>; return <span className='text-color'>{highlightSearchContentByTerms(item.value||'', terms)}</span>;
} }
// const onExportClick = () => { const onExportClick = () => {
// dispatch({ dispatch({
// type: 'assetmanage.exportMetadataAttributes', type: 'assetmanage.exportMetadataAttributes',
// payload: { payload: {
// responseType: 'blob', responseType: 'blob',
// params: { params: {
// tableId: metadata?.metadataTableId tableId: metadata?.metadataTableId
// } }
// }, },
// callback: (res) => { callback: (res) => {
// download(res); download(res);
// } }
// }) })
// } }
const onSelectStandardCancel = (refresh = false) => { const onSelectStandardCancel = (refresh = false) => {
setSelectStandardParam({ visible: false, id: undefined }); setSelectStandardParam({ visible: false, id: undefined });
...@@ -999,78 +1004,86 @@ const AssetAction = (props) => { ...@@ -999,78 +1004,86 @@ const AssetAction = (props) => {
spinning={loading} spinning={loading}
> >
<Form form={form} onValuesChange={onValuesChange}> <Form form={form} onValuesChange={onValuesChange}>
{ <Radio.Group className='mb-3' value={currentAttribute} onChange={(e) => {
attributes?.map((attribute, index) => { setCurrentAttribute(e.target.value)
return <div key={index}> }}>
<Divider orientation='left'>{attribute}</Divider> {
<Descriptions column={1} bordered> (attributes??[]).map((item,key) => (
{ <Radio.Button key={key} value={item}>{item}</Radio.Button>
wholeElements?.length>0 && elements?.map((element, index) => { ))
if (element.type!==attribute || element.name === '资产项') return null; }
</Radio.Group>
let interpretation = null; {
const filterElements = wholeElements?.filter(_element => _element.id === element.id); attributes?.map((attribute, index) => {
if (filterElements.length>0) { return <div key={index} style={{ display: (attribute===currentAttribute)?'':'none' }}>
interpretation = filterElements[0].interpretation; <Descriptions column={1} bordered>
} {
wholeElements?.length>0 && elements?.map((element, index) => {
if (element.type!==attribute || element.name === '资产项') return null;
let interpretation = null;
const filterElements = wholeElements?.filter(_element => _element.id === element.id);
if (filterElements.length>0) {
interpretation = filterElements[0].interpretation;
}
return ( return (
<Descriptions.Item <Descriptions.Item
key={index} key={index}
label={ label={
<span> <span>
{element.name} {element.name}
{ {
(currentAction==='add'||currentAction==='edit') && element.required && <span style={{ color: 'red' }}>*</span> (currentAction==='add'||currentAction==='edit') && element.required && <span style={{ color: 'red' }}>*</span>
}
</span>
} }
</span> labelStyle={{ width: 180 }}
} >
labelStyle={{ width: 180 }} {
> (currentAction==='add'||currentAction==='edit') ?
{ <Row gutter={8} align='middle'>
(currentAction==='add'||currentAction==='edit') ? <Col span={22}>
<Row gutter={8} align='middle'> <Form.Item
<Col span={22}> label=''
<Form.Item name={element.name}
label='' rules={[{ required: element.required }]}
name={element.name} style={{ marginBottom: 0 }}
rules={[{ required: element.required }]} >
style={{ marginBottom: 0 }} {elementEditComponent(element)}
> </Form.Item>
{elementEditComponent(element)}
</Form.Item>
</Col>
{
interpretation && <Col span={2}>
<Tooltip placement="left" title={interpretation}>
<QuestionCircleOutlined style={{ fontSize: 16 }} />
</Tooltip>
</Col> </Col>
} {
</Row> interpretation && <Col span={2}>
: <React.Fragment> <Tooltip placement="left" title={interpretation}>
<Row gutter={8} align='middle'> <QuestionCircleOutlined style={{ fontSize: 16 }} />
<Col span={22}> </Tooltip>
{ elementDetailComponent(element) } </Col>
</Col> }
{ </Row>
interpretation && <Col span={2}> : <React.Fragment>
<Tooltip placement="left" title={interpretation}> <Row gutter={8} align='middle'>
<QuestionCircleOutlined style={{ fontSize: 16 }} /> <Col span={22}>
</Tooltip> { elementDetailComponent(element) }
</Col> </Col>
} {
</Row> interpretation && <Col span={2}>
</React.Fragment> <Tooltip placement="left" title={interpretation}>
} <QuestionCircleOutlined style={{ fontSize: 16 }} />
</Descriptions.Item> </Tooltip>
) </Col>
}) }
} </Row>
</Descriptions> </React.Fragment>
</div> }
}) </Descriptions.Item>
} )
})
}
</Descriptions>
</div>
})
}
</Form> </Form>
</Spin> </Spin>
...@@ -1098,34 +1111,44 @@ const AssetAction = (props) => { ...@@ -1098,34 +1111,44 @@ const AssetAction = (props) => {
字段级维护 字段级维护
</Button> </Button>
} }
<Button type='primary' onClick={() => { <Dropdown overlay={
if (metadata?.metadataTableId) { <Menu onClick={({ key })=>{
app?.setGlobalState?.({ if (key === 'lineage') {
message: 'data-govern-show-metadata-relation', if (metadata?.metadataTableId) {
data: { id: metadata?.metadataTableId, type: 'lineage' } app?.setGlobalState?.({
}) message: 'data-govern-show-metadata-relation',
} else { data: { id: metadata?.metadataTableId, type: 'lineage' }
showMessage("warn","该资产目录没有关联元数据信息"); })
} } else {
}}> showMessage("warn","该资产目录没有关联元数据信息");
血缘关系 }
</Button> } else if (key === 'impact') {
<Button type='primary' onClick={() => { if (metadata?.metadataTableId) {
if (metadata?.metadataTableId) { app?.setGlobalState?.({
app?.setGlobalState?.({ message: 'data-govern-show-metadata-relation',
message: 'data-govern-show-metadata-relation', data: { id: metadata?.metadataTableId, type: 'impact' }
data: { id: metadata?.metadataTableId, type: 'impact' } })
}) } else {
} else { showMessage("warn","该资产目录没有关联元数据信息");
showMessage("warn","该资产目录没有关联元数据信息"); }
} }
}}> }}>
影响关系 <Menu.Item key="lineage">血缘分析</Menu.Item>
</Button> <Menu.Item key="impact">影响分析</Menu.Item>
</Menu>
}>
<Button>
<Space>
关系分析
<DownOutlined />
</Space>
</Button>
</Dropdown>
<Input size="middle" <Input size="middle"
placeholder="搜索中英文名称/业务规则" placeholder="搜索中英文名称/业务规则"
value={keyword} value={keyword}
bordered={true} allowClear bordered={true} allowClear
style={{ width: 200 }}
onChange={(e) => { onChange={(e) => {
setPagination({...paginate, pageNum: 1}) setPagination({...paginate, pageNum: 1})
setKeyword(e.target.value) setKeyword(e.target.value)
...@@ -1142,7 +1165,7 @@ const AssetAction = (props) => { ...@@ -1142,7 +1165,7 @@ const AssetAction = (props) => {
</Space> </Space>
<Table <Table
className='mt-2' className='mt-3'
loading={loadingMetadataColumnList} loading={loadingMetadataColumnList}
columns={permissionId?columns:columns.filter(item => item.dataIndex !== 'permission')} columns={permissionId?columns:columns.filter(item => item.dataIndex !== 'permission')}
rowKey='_id' rowKey='_id'
......
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