Commit ae779580 by zhaochengxiang

bug fix

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