Commit 77e993c0 by zhaochengxiang

元数据对比

parent 5cb71edb
......@@ -778,4 +778,12 @@ export function* setOwner(payload) {
export function* 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) {
//模型和元数据关联
export function findAssociationMetadataByModelId(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';
import RecatalogModal from './RecatalogModal';
import ExportOptions from './export-options';
import ApprovalTip from './approval-tip';
import MetadataCompare from './metadata-compare';
import './EditModel.less';
......@@ -37,6 +38,10 @@ const EditModel = (props) => {
const [approvalData, setApprovalData] = useState()
const [currentApprovalModelId, setApprovalModelId] = useState()
const [privilege, setPrivilege] = useState()
const [metadataCompareParams, setMetadataCompareParams] = useState({
visible: false,
item: undefined,
})
const [recatalogParams, setRecatalogParams] = useState({
visible: false,
ids: undefined,
......@@ -329,7 +334,7 @@ const EditModel = (props) => {
type: 'datamodel.deleteDataModel',
payload: {
params: {
id: modelerData?.id
id: modelerId
}
},
callback: () => {
......@@ -346,12 +351,24 @@ const EditModel = (props) => {
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 = () => {
setExportParams({ visible: true })
}
const onExportInfo = () => {
window.open(`/api/datamodeler/easyDataModelerExport/modelBaseDataExcel?ids=${modelerData?.id}`);
window.open(`/api/datamodeler/easyDataModelerExport/modelBaseDataExcel?ids=${modelerId}`);
}
const onChangeCatalog = () => {
......@@ -476,6 +493,9 @@ const EditModel = (props) => {
>
复制模型
</PermissionButton>
<Button type='primary' ghost onClick={onMetadataCompare}>
元数据对比
</Button>
<PermissionButton
type='primary'
onClick={onExport}
......@@ -714,9 +734,18 @@ const EditModel = (props) => {
visible={historyAndVersionDrawerVisible}
onCancel={onHistoryAndVersionDrawerCancel}
/>
<MetadataCompare
{...metadataCompareParams}
onCancel={() => {
setMetadataCompareParams({
visible: false,
item: undefined,
})
}}
/>
<ExportOptions
{...exportParams}
ids={modelerData?.id?[modelerData?.id]:[]}
ids={modelerId?[modelerId]:[]}
onCancel={() => {
setExportParams({ visible: false })
}}
......
......@@ -13,6 +13,7 @@ import PermissionRcItem from '../../../../util/Component/PermissionRcItem';
import TagCell from './tag-help';
import BranchModelSync from './branch-model-sync';
import ModelCompareSelectModel from './model-compare-select-model';
import MetadataCompare from './metadata-compare';
import './ModelTable.less';
import 'react-contexify/dist/ReactContexify.css';
......@@ -162,6 +163,10 @@ const ModelTable = (props) => {
visible: false,
item: undefined,
})
const [metadataCompareParams, setMetadataCompareParams] = useState({
visible: false,
item: undefined,
})
const expandedDataMapRef = useRef(new Map());
const shouldScrollRef = useRef(false);
......@@ -677,6 +682,11 @@ const ModelTable = (props) => {
visible: true,
item: currentItem,
})
} else if (key === 'metadata-compare') {
setMetadataCompareParams({
visible: true,
item: currentItem,
})
}
}
......@@ -777,6 +787,13 @@ const ModelTable = (props) => {
>
模型对比
</PermissionRcItem>
<PermissionRcItem
id='metadata-compare'
defaultPermission={true}
onClick={handleItemClick}
>
元数据对比
</PermissionRcItem>
{
view !== 'branch' && <PermissionRcItem
id='auth-transfer'
......@@ -864,6 +881,15 @@ const ModelTable = (props) => {
})
}}
/>
<MetadataCompare
{...metadataCompareParams}
onCancel={() => {
setMetadataCompareParams({
visible: false,
item: undefined,
})
}}
/>
{ contextHolder }
</div>
);
......
......@@ -220,7 +220,7 @@ const VersionCompare = (props) => {
export default VersionCompare;
export const CompareDetail = ({ data }) => {
export const CompareDetail = ({ data, showIndex=true }) => {
const [selectedColumnTitles, setSelectedColumnTitles] = React.useState()
return (
......@@ -234,7 +234,7 @@ export const CompareDetail = ({ data }) => {
selectedColumnTitles={selectedColumnTitles}
onFilterChange={(val) => setSelectedColumnTitles(val)}
/>
<VersionCompareIndex data={data} />
{ showIndex && <VersionCompareIndex data={data} />}
</div>
<div style={{ flex: 1, paddingLeft: 10, overflow: 'hidden'}}>
<VersionCompareHeader data={data} direction='right' />
......@@ -244,7 +244,7 @@ export const CompareDetail = ({ data }) => {
onFilterChange={(val) => setSelectedColumnTitles(val)}
direction='right'
/>
<VersionCompareIndex data={data} direction='right'/>
{ showIndex && <VersionCompareIndex data={data} direction='right'/> }
</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