Commit 77e993c0 by zhaochengxiang

元数据对比

parent 5cb71edb
...@@ -778,4 +778,12 @@ export function* setOwner(payload) { ...@@ -778,4 +778,12 @@ export function* setOwner(payload) {
export function* findAssociationMetadataByModelId(payload) { export function* findAssociationMetadataByModelId(payload) {
return yield call(datamodelerService.findAssociationMetadataByModelId, payload) return yield call(datamodelerService.findAssociationMetadataByModelId, payload)
}
export function* getMatchMetadataTableById(payload) {
return yield call(datamodelerService.getMatchMetadataTableById, payload)
}
export function* getModelMetadataCompareResult(payload) {
return yield call(datamodelerService.getModelMetadataCompareResult, payload)
} }
\ No newline at end of file
...@@ -734,4 +734,12 @@ export function setOwner(payload) { ...@@ -734,4 +734,12 @@ export function setOwner(payload) {
//模型和元数据关联 //模型和元数据关联
export function findAssociationMetadataByModelId(payload) { export function findAssociationMetadataByModelId(payload) {
return GetJSON("/datamodeler/easyDataModelerMetadataAssociation/findAssociationByModelId", payload) return GetJSON("/datamodeler/easyDataModelerMetadataAssociation/findAssociationByModelId", payload)
}
export function getMatchMetadataTableById(payload) {
return PostJSON("/shandatamodeler/easyDataModelerCompareMetadata/getMatchMetadataTableById", payload)
}
export function getModelMetadataCompareResult(payload) {
return GetJSON("/shandatamodeler/easyDataModelerCompareMetadata/getModelMetadataCompareResult", payload)
} }
\ No newline at end of file
...@@ -19,6 +19,7 @@ import PermissionButton from '../../../../util/Component/PermissionButton'; ...@@ -19,6 +19,7 @@ import PermissionButton from '../../../../util/Component/PermissionButton';
import RecatalogModal from './RecatalogModal'; import RecatalogModal from './RecatalogModal';
import ExportOptions from './export-options'; import ExportOptions from './export-options';
import ApprovalTip from './approval-tip'; import ApprovalTip from './approval-tip';
import MetadataCompare from './metadata-compare';
import './EditModel.less'; import './EditModel.less';
...@@ -37,6 +38,10 @@ const EditModel = (props) => { ...@@ -37,6 +38,10 @@ const EditModel = (props) => {
const [approvalData, setApprovalData] = useState() const [approvalData, setApprovalData] = useState()
const [currentApprovalModelId, setApprovalModelId] = useState() const [currentApprovalModelId, setApprovalModelId] = useState()
const [privilege, setPrivilege] = useState() const [privilege, setPrivilege] = useState()
const [metadataCompareParams, setMetadataCompareParams] = useState({
visible: false,
item: undefined,
})
const [recatalogParams, setRecatalogParams] = useState({ const [recatalogParams, setRecatalogParams] = useState({
visible: false, visible: false,
ids: undefined, ids: undefined,
...@@ -329,7 +334,7 @@ const EditModel = (props) => { ...@@ -329,7 +334,7 @@ const EditModel = (props) => {
type: 'datamodel.deleteDataModel', type: 'datamodel.deleteDataModel',
payload: { payload: {
params: { params: {
id: modelerData?.id id: modelerId
} }
}, },
callback: () => { callback: () => {
...@@ -346,12 +351,24 @@ const EditModel = (props) => { ...@@ -346,12 +351,24 @@ const EditModel = (props) => {
window.open(`/data-govern/data-model-action?${Action}=add&${CatalogId}=${privilege?.catalogId??''}&${ModelerId}=${modelerId}`) window.open(`/data-govern/data-model-action?${Action}=add&${CatalogId}=${privilege?.catalogId??''}&${ModelerId}=${modelerId}`)
} }
const onMetadataCompare = () => {
if (!modelerData?.id) {
showMessage('warn', '正在获取模型,请稍后再试')
return;
}
setMetadataCompareParams({
visible: true,
item: modelerData,
})
}
const onExport = () => { const onExport = () => {
setExportParams({ visible: true }) setExportParams({ visible: true })
} }
const onExportInfo = () => { const onExportInfo = () => {
window.open(`/api/datamodeler/easyDataModelerExport/modelBaseDataExcel?ids=${modelerData?.id}`); window.open(`/api/datamodeler/easyDataModelerExport/modelBaseDataExcel?ids=${modelerId}`);
} }
const onChangeCatalog = () => { const onChangeCatalog = () => {
...@@ -476,6 +493,9 @@ const EditModel = (props) => { ...@@ -476,6 +493,9 @@ const EditModel = (props) => {
> >
复制模型 复制模型
</PermissionButton> </PermissionButton>
<Button type='primary' ghost onClick={onMetadataCompare}>
元数据对比
</Button>
<PermissionButton <PermissionButton
type='primary' type='primary'
onClick={onExport} onClick={onExport}
...@@ -714,9 +734,18 @@ const EditModel = (props) => { ...@@ -714,9 +734,18 @@ const EditModel = (props) => {
visible={historyAndVersionDrawerVisible} visible={historyAndVersionDrawerVisible}
onCancel={onHistoryAndVersionDrawerCancel} onCancel={onHistoryAndVersionDrawerCancel}
/> />
<MetadataCompare
{...metadataCompareParams}
onCancel={() => {
setMetadataCompareParams({
visible: false,
item: undefined,
})
}}
/>
<ExportOptions <ExportOptions
{...exportParams} {...exportParams}
ids={modelerData?.id?[modelerData?.id]:[]} ids={modelerId?[modelerId]:[]}
onCancel={() => { onCancel={() => {
setExportParams({ visible: false }) setExportParams({ visible: false })
}} }}
......
...@@ -13,6 +13,7 @@ import PermissionRcItem from '../../../../util/Component/PermissionRcItem'; ...@@ -13,6 +13,7 @@ import PermissionRcItem from '../../../../util/Component/PermissionRcItem';
import TagCell from './tag-help'; import TagCell from './tag-help';
import BranchModelSync from './branch-model-sync'; import BranchModelSync from './branch-model-sync';
import ModelCompareSelectModel from './model-compare-select-model'; import ModelCompareSelectModel from './model-compare-select-model';
import MetadataCompare from './metadata-compare';
import './ModelTable.less'; import './ModelTable.less';
import 'react-contexify/dist/ReactContexify.css'; import 'react-contexify/dist/ReactContexify.css';
...@@ -162,6 +163,10 @@ const ModelTable = (props) => { ...@@ -162,6 +163,10 @@ const ModelTable = (props) => {
visible: false, visible: false,
item: undefined, item: undefined,
}) })
const [metadataCompareParams, setMetadataCompareParams] = useState({
visible: false,
item: undefined,
})
const expandedDataMapRef = useRef(new Map()); const expandedDataMapRef = useRef(new Map());
const shouldScrollRef = useRef(false); const shouldScrollRef = useRef(false);
...@@ -677,6 +682,11 @@ const ModelTable = (props) => { ...@@ -677,6 +682,11 @@ const ModelTable = (props) => {
visible: true, visible: true,
item: currentItem, item: currentItem,
}) })
} else if (key === 'metadata-compare') {
setMetadataCompareParams({
visible: true,
item: currentItem,
})
} }
} }
...@@ -777,6 +787,13 @@ const ModelTable = (props) => { ...@@ -777,6 +787,13 @@ const ModelTable = (props) => {
> >
模型对比 模型对比
</PermissionRcItem> </PermissionRcItem>
<PermissionRcItem
id='metadata-compare'
defaultPermission={true}
onClick={handleItemClick}
>
元数据对比
</PermissionRcItem>
{ {
view !== 'branch' && <PermissionRcItem view !== 'branch' && <PermissionRcItem
id='auth-transfer' id='auth-transfer'
...@@ -864,6 +881,15 @@ const ModelTable = (props) => { ...@@ -864,6 +881,15 @@ const ModelTable = (props) => {
}) })
}} }}
/> />
<MetadataCompare
{...metadataCompareParams}
onCancel={() => {
setMetadataCompareParams({
visible: false,
item: undefined,
})
}}
/>
{ contextHolder } { contextHolder }
</div> </div>
); );
......
...@@ -220,7 +220,7 @@ const VersionCompare = (props) => { ...@@ -220,7 +220,7 @@ const VersionCompare = (props) => {
export default VersionCompare; export default VersionCompare;
export const CompareDetail = ({ data }) => { export const CompareDetail = ({ data, showIndex=true }) => {
const [selectedColumnTitles, setSelectedColumnTitles] = React.useState() const [selectedColumnTitles, setSelectedColumnTitles] = React.useState()
return ( return (
...@@ -234,7 +234,7 @@ export const CompareDetail = ({ data }) => { ...@@ -234,7 +234,7 @@ export const CompareDetail = ({ data }) => {
selectedColumnTitles={selectedColumnTitles} selectedColumnTitles={selectedColumnTitles}
onFilterChange={(val) => setSelectedColumnTitles(val)} onFilterChange={(val) => setSelectedColumnTitles(val)}
/> />
<VersionCompareIndex data={data} /> { showIndex && <VersionCompareIndex data={data} />}
</div> </div>
<div style={{ flex: 1, paddingLeft: 10, overflow: 'hidden'}}> <div style={{ flex: 1, paddingLeft: 10, overflow: 'hidden'}}>
<VersionCompareHeader data={data} direction='right' /> <VersionCompareHeader data={data} direction='right' />
...@@ -244,7 +244,7 @@ export const CompareDetail = ({ data }) => { ...@@ -244,7 +244,7 @@ export const CompareDetail = ({ data }) => {
onFilterChange={(val) => setSelectedColumnTitles(val)} onFilterChange={(val) => setSelectedColumnTitles(val)}
direction='right' direction='right'
/> />
<VersionCompareIndex data={data} direction='right'/> { showIndex && <VersionCompareIndex data={data} direction='right'/> }
</div> </div>
</div> </div>
} }
......
import React from 'react'
import { Modal, Checkbox, Spin, Select } from 'antd'
import { CompareDetail } from './VersionCompare'
import { dispatch } from '../../../../model'
import { AppContext } from '../../../../App'
const FC = ({ visible, item, onCancel }) => {
const close = () => {
onCancel?.()
}
return (
<Modal
title='元数据对比'
visible={visible}
footer={null}
width='80%'
bodyStyle={{ padding: '15px', overflowX: 'auto', height: '80vh' }}
centered destroyOnClose
onCancel={() => { close() }}
>
<Basic item={item} />
</Modal>
)
}
export default FC
const Basic = ({ item }) => {
const [loadingMetadata, setLoadingMetadata] = React.useState(false)
const [metadata, setMetadata] = React.useState()
const [loadingResult, setLoadingResult] = React.useState(false)
const [result, setResult] = React.useState()
const [onlyShowChange, setOnlyShowChange] = React.useState(true)
const app = React.useContext(AppContext)
React.useEffect(() => {
if (item) {
getMetadata()
}
}, [item])
React.useEffect(() => {
if (metadata && item) {
compare()
}
}, [metadata, item, onlyShowChange])
const onOnlyShowChange = (e) => {
setOnlyShowChange(e.target.checked)
}
const getMetadata = () => {
setLoadingMetadata(true)
dispatch({
type: 'datamodel.getMatchMetadataTableById',
payload: {
params: {
envId: app?.env,
easyDataModelerDataModelId: item?.id,
}
},
callback: data => {
setLoadingMetadata(false)
setMetadata(data)
},
error: () => {
setLoadingMetadata(false)
}
})
}
const compare = () => {
setLoadingResult(true)
dispatch({
type: 'datamodel.getModelMetadataCompareResult',
payload: {
easyDataModelerDataModelId: item?.id,
metadataId: metadata?.metadataId,
leftModel: false,
},
callback: data => {
setLoadingResult(false)
setResult(data)
},
error: () => {
setLoadingResult(false)
}
})
}
return (
<Spin spinning={loadingMetadata}>
<div className='model-version-compare'>
<div className='flex'>
<div style={{ flex: 1, paddingRight: 10, overflow: 'hidden'}}>
<span>{`元数据:${metadata?.metadataFullPath??'暂无数据'}`}</span>
</div>
<div style={{ flex: 1, paddingLeft: 10, overflow: 'hidden'}}>
<div className='flex' style={{ justifyContent: 'space-between', alignItems: 'center' }}>
<span>{`模型:${item?.path}/${item?.name}`}</span>
{/* <Checkbox onChange={onOnlyShowChange} checked={onlyShowChange}>
仅显示差异
</Checkbox> */}
</div>
</div>
</div>
<div className='py-5'>
<Spin spinning={loadingResult} >
<CompareDetail data={result} showIndex={false} />
</Spin>
</div>
</div>
</Spin>
)
}
\ 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