Commit ce14da50 by zhaochengxiang

单个模型合并到基线

parent c644c4db
...@@ -572,7 +572,7 @@ export function deleteBranch(payload) { ...@@ -572,7 +572,7 @@ export function deleteBranch(payload) {
} }
export function getBranchDiffForked(payload) { export function getBranchDiffForked(payload) {
return GetJSON("/datamodeler/easyDataModelerBranching/diffForkedEasyDataModelerDataModel", payload) return GetJSON("/datamodeler/easyDataModelerBranching/diffEasyDataModelerDataModelWithForked", payload)
} }
export function joinBranch(payload) { export function joinBranch(payload) {
......
...@@ -13,7 +13,7 @@ import './VersionCompare.less'; ...@@ -13,7 +13,7 @@ import './VersionCompare.less';
const { Text, Paragraph } = Typography; const { Text, Paragraph } = Typography;
const { Option } = Select; const { Option } = Select;
const defaultColumnTitles = ['序号', '中文名称', '英文名称', '类型', '业务含义']; export const defaultColumnTitles = ['序号', '中文名称', '英文名称', '类型', '业务含义'];
const VersionCompare = (props) => { const VersionCompare = (props) => {
......
import React from 'react' import React from 'react'
import { Modal, Button, Spin, } from 'antd' import { Modal, Button, Spin, Form, Checkbox, Typography, Tooltip } from 'antd'
import { dispatch } from '../../../../model' import { dispatch } from '../../../../model'
import VersionCompareHeader from './VersionCompareHeader'
import VersionCompareTable from './VersionCompareTable'
import VersionCompareIndex from './VersionCompareIndex'
import { defaultColumnTitles } from './VersionCompare'
import FilterColumnAction from './FilterColumnAction'
import './VersionCompare.less'
const FC = (props) => { const FC = (props) => {
const { items, branchId, visible, onCancel } = props const { items, visible, onCancel } = props
const [waiting, setWaiting] = React.useState(false) const [waiting, setWaiting] = React.useState(false)
const close = (val) => { const close = (val) => {
...@@ -13,7 +20,19 @@ const FC = (props) => { ...@@ -13,7 +20,19 @@ const FC = (props) => {
} }
const save = () => { const save = () => {
setWaiting(true)
dispatch({
type: 'datamodel.joinBranch',
payload: {
ids: (items??[]).map(item => item.id).toString(),
},
callback: data => {
close(true)
},
error: () => {
setWaiting(false)
}
})
} }
const footer = React.useMemo(() => { const footer = React.useMemo(() => {
...@@ -32,14 +51,14 @@ const FC = (props) => { ...@@ -32,14 +51,14 @@ const FC = (props) => {
<Modal <Modal
visible={visible} visible={visible}
footer={footer} footer={footer}
width={800} width='80%'
bodyStyle={{ padding: '15px', overflowX: 'auto', maxHeight: '80vh' }} bodyStyle={{ padding: '15px', overflowX: 'auto', height: '80vh' }}
title='合并到基线' title='合并到基线'
centered destroyOnClose centered destroyOnClose
onCancel={() => { close() }} onCancel={() => { close() }}
> >
<Spin spinning={waiting}> <Spin spinning={waiting}>
<Diff items={items} branchId={branchId} /> <Diff items={items} />
</Spin> </Spin>
</Modal> </Modal>
) )
...@@ -47,29 +66,119 @@ const FC = (props) => { ...@@ -47,29 +66,119 @@ const FC = (props) => {
export default FC export default FC
export const Diff = React.forwardRef(function ({ items, branchId, }, ref) { export const Diff = React.forwardRef(function ({ items }, ref) {
const [loading, setLoading] = React.useState(false)
const [data, setData] = React.useState()
const [onlyShowChange, setOnlyShowChange] = React.useState(true)
const [attrSelectedTitles, setAttrSelectedTitles] = React.useState(defaultColumnTitles)
const [attrColumns, setAttrColumns] = React.useState()
React.useEffect(() => { React.useEffect(() => {
if ((items??[]).length>0) { if ((items??[]).length>0) {
getDiffForked() getDiffForked()
} }
}, [items]) }, [items, onlyShowChange])
const attrFilterColumns = React.useMemo(() => {
return (attrColumns??[]).filter(column => column.option===false || (attrSelectedTitles??[]).indexOf(column.title) !== -1)
}, [attrSelectedTitles, attrColumns])
const getDiffForked = () => { const getDiffForked = () => {
setLoading(true)
dispatch({ dispatch({
type: 'datamodel.getBranchDiffForked', type: 'datamodel.getBranchDiffForked',
payload: { payload: {
id: items[0].id, id: items[0].id,
branchId, includeSame: !onlyShowChange,
}, },
callback: data => { callback: data => {
setLoading(false)
setData(data)
const newAttrOptionColumns = [];
(data?.heads?.columnHead||[]).forEach((item, index) => {
newAttrOptionColumns.push({
title: item||'',
dataIndex: `column${index}`,
render: (attrValue, record, index) => {
let stateClassName = '';
if (attrValue?.state==='ADD' || attrValue?.state==='UPDATE') {
stateClassName = 'add';
} else if (attrValue?.state === 'DELETE') {
stateClassName = 'delete';
}
return (
<Typography.Paragraph>
<Tooltip title={attrValue?.value||''}>
<Typography.Text className={stateClassName} ellipsis={true}>{attrValue?.value||''}</Typography.Text>
</Tooltip>
</Typography.Paragraph>
);
},
width: (item==='序号')?60: 150,
ellipsis: true,
option: true,
});
})
const newAttrColumns = [...newAttrOptionColumns, {
title: <FilterColumnAction columns={newAttrOptionColumns} defaultSelectedKeys={defaultColumnTitles} onChange={onFilterChange} />,
dataIndex: 'columnFilter',
render: (_, record, index) => {
return '';
},
width: 40,
ellipsis: true,
option: false
}];
setAttrColumns(newAttrColumns)
},
error: () => {
setLoading(false)
} }
}) })
} }
const onOnlyShowChange = (e) => {
setOnlyShowChange(e.target.checked)
}
const onFilterChange = (values) => {
setAttrSelectedTitles(values)
}
return ( return (
<div> <div className='model-version-compare'>
basic <Form layout='inline'>
<Form.Item label='分支版本'>
</Form.Item>
<Form.Item label='基线版本'>
</Form.Item>
<Form.Item>
<Checkbox onChange={onOnlyShowChange} checked={onlyShowChange}>仅显示差异</Checkbox>
</Form.Item>
</Form>
<div className='py-5'>
<Spin spinning={loading} >
{
data && <div className='flex'>
<div style={{ flex: 1, borderRight: '1px solid #EFEFEF', paddingRight: 10, overflow: 'hidden'}}>
<VersionCompareHeader data={data} />
<VersionCompareTable data={data} columns={attrFilterColumns} />
<VersionCompareIndex data={data} />
</div>
<div style={{ flex: 1, paddingLeft: 10, overflow: 'hidden'}}>
<VersionCompareHeader data={data} direction='right' />
<VersionCompareTable data={data} columns={attrFilterColumns} direction='right' />
<VersionCompareIndex data={data} direction='right'/>
</div>
</div>
}
</Spin>
</div>
</div> </div>
) )
}) })
\ No newline at end of file
...@@ -360,6 +360,16 @@ class Model extends React.Component { ...@@ -360,6 +360,16 @@ class Model extends React.Component {
} }
} }
onBatchMerge = () => {
const { tableData, selectModelerIds } = this.state
this.setState({
mergeToMasterParams: {
visible: true,
items: (tableData??[]).filter(item => (selectModelerIds??[]).indexOf(item.id) !== -1),
}
})
}
onAuthTransfer = (item) => { onAuthTransfer = (item) => {
if (item) { if (item) {
this.setState({ this.setState({
...@@ -770,6 +780,17 @@ class Model extends React.Component { ...@@ -770,6 +780,17 @@ class Model extends React.Component {
</PermissionButton> </PermissionButton>
} }
{
currentView === 'branch' && <PermissionButton
defaultPermission={true}
tip={(selectModelerIds||[]).length===0?'请先选择模型':''}
onClick={this.onBatchMerge}
disabled={(selectModelerIds||[]).length===0}
>
合并到基线
</PermissionButton>
}
<PermissionButton <PermissionButton
defaultPermission={canDelete} defaultPermission={canDelete}
tip={(selectModelerIds||[]).length===0?'请先选择模型':''} tip={(selectModelerIds||[]).length===0?'请先选择模型':''}
......
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