Commit ce14da50 by zhaochengxiang

单个模型合并到基线

parent c644c4db
......@@ -572,7 +572,7 @@ export function deleteBranch(payload) {
}
export function getBranchDiffForked(payload) {
return GetJSON("/datamodeler/easyDataModelerBranching/diffForkedEasyDataModelerDataModel", payload)
return GetJSON("/datamodeler/easyDataModelerBranching/diffEasyDataModelerDataModelWithForked", payload)
}
export function joinBranch(payload) {
......
......@@ -13,7 +13,7 @@ import './VersionCompare.less';
const { Text, Paragraph } = Typography;
const { Option } = Select;
const defaultColumnTitles = ['序号', '中文名称', '英文名称', '类型', '业务含义'];
export const defaultColumnTitles = ['序号', '中文名称', '英文名称', '类型', '业务含义'];
const VersionCompare = (props) => {
......
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 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 { items, branchId, visible, onCancel } = props
const { items, visible, onCancel } = props
const [waiting, setWaiting] = React.useState(false)
const close = (val) => {
......@@ -13,7 +20,19 @@ const FC = (props) => {
}
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(() => {
......@@ -32,14 +51,14 @@ const FC = (props) => {
<Modal
visible={visible}
footer={footer}
width={800}
bodyStyle={{ padding: '15px', overflowX: 'auto', maxHeight: '80vh' }}
width='80%'
bodyStyle={{ padding: '15px', overflowX: 'auto', height: '80vh' }}
title='合并到基线'
centered destroyOnClose
onCancel={() => { close() }}
>
<Spin spinning={waiting}>
<Diff items={items} branchId={branchId} />
<Diff items={items} />
</Spin>
</Modal>
)
......@@ -47,29 +66,119 @@ const FC = (props) => {
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(() => {
if ((items??[]).length>0) {
getDiffForked()
}
}, [items])
}, [items, onlyShowChange])
const attrFilterColumns = React.useMemo(() => {
return (attrColumns??[]).filter(column => column.option===false || (attrSelectedTitles??[]).indexOf(column.title) !== -1)
}, [attrSelectedTitles, attrColumns])
const getDiffForked = () => {
setLoading(true)
dispatch({
type: 'datamodel.getBranchDiffForked',
payload: {
id: items[0].id,
branchId,
includeSame: !onlyShowChange,
},
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 (
<div>
basic
<div className='model-version-compare'>
<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>
)
})
\ No newline at end of file
......@@ -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) => {
if (item) {
this.setState({
......@@ -769,6 +779,17 @@ class Model extends React.Component {
变更目录
</PermissionButton>
}
{
currentView === 'branch' && <PermissionButton
defaultPermission={true}
tip={(selectModelerIds||[]).length===0?'请先选择模型':''}
onClick={this.onBatchMerge}
disabled={(selectModelerIds||[]).length===0}
>
合并到基线
</PermissionButton>
}
<PermissionButton
defaultPermission={canDelete}
......
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