Commit bc88e3b4 by zhaochengxiang

模型导出

parent 0ced7e07
......@@ -250,6 +250,14 @@ export function* heartbeat() {
return yield call(datamodelerService.heartbeat);
}
export function* exportTableDDLAbstractList(payload) {
return yield call(datamodelerService.exportTableDDLAbstractList, payload);
}
export function* getExportTableDDL(payload) {
return yield call(datamodelerService.getExportTableDDL, payload);
}
export function* validateDataModel(payload) {
return yield call(datamodelerService.validateDataModel, payload);
}
......
......@@ -237,6 +237,14 @@ export function heartbeat() {
return Get("/datamodeler/easyDataModelerExport/heartbeat");
}
export function exportTableDDLAbstractList(payload) {
return PostJSON("/shandatamodeler/easyDataModelerExport/exportTableDDLAbstractList", payload);
}
export function getExportTableDDL(payload) {
return PostJSON("/shandatamodeler/easyDataModelerExport/getExportTableDDL", payload);
}
export function validateDataModel(payload) {
return PostJSON("/datamodeler/easyDataModelerConstraint/validateDataModel", payload);
}
......
......@@ -17,8 +17,7 @@ import EditInherited from './EditInherited';
import { ImportActionHeaderSubject } from './ImportActionManage';
import PermissionButton from '../../../../util/Component/PermissionButton';
import RecatalogModal from './RecatalogModal';
import ExportModel from './ExportOtherModal';
import ExportDDLModel from './ExportDDLModal';
import ExportOptions from './export-options';
import ApprovalTip from './approval-tip';
import './EditModel.less';
......@@ -45,9 +44,6 @@ const EditModel = (props) => {
const [exportParams, setExportParams] = useState({
visible: false
})
const [exportDDLParams, setExportDDLParams] = useState({
visible: false,
})
const [containerHeight, setContainerHeight] = useState(0)
const actionRef = useRef('');
......@@ -354,31 +350,6 @@ const EditModel = (props) => {
setExportParams({ visible: true })
}
const onExportCancel = (val) => {
setExportParams({ visible: false })
let _id = modelerData?.id
if (val === 'ddl') {
setExportDDLParams({ visible: true })
} else if (val === 'erwin') {
dispatch({
type: 'datamodel.exportERWinString',
payload: {
ids: _id,
},
callback: data => {
copy(JSON.stringify(data));
showNotifaction('提示', 'Erwin信息已成功复制到剪贴板', 5);
}
});
} else if (val === 'excel') {
window.open(`/api/datamodeler/easyDataModelerExport/excel?ids=${_id}`);
} else if (val === 'word') {
window.open(`/api/datamodeler/easyDataModelerExport/word/template?ids=${_id}`);
}
}
const onExportInfo = () => {
window.open(`/api/datamodeler/easyDataModelerExport/modelBaseDataExcel?ids=${modelerData?.id}`);
}
......@@ -700,19 +671,11 @@ const EditModel = (props) => {
visible={historyAndVersionDrawerVisible}
onCancel={onHistoryAndVersionDrawerCancel}
/>
<ExportModel
<ExportOptions
{...exportParams}
onCancel={onExportCancel}
/>
<ExportDDLModel
{...exportDDLParams}
reference='exportDDL'
ids={[modelerData?.id]}
names={[modelerData?.name]}
ids={modelerData?.id?[modelerData?.id]:[]}
onCancel={() => {
setExportDDLParams({
visible: false
})
setExportParams({ visible: false })
}}
/>
<EditInherited
......
import React, { useState } from 'react';
import { Modal, Button, Form, Radio } from 'antd';
const exportModes = [
{ name: '导出DDL', key: 'ddl' },
{ name: '导出Erwin', key: 'erwin' },
{ name: '导出Excel', key: 'excel' },
{ name: '导出Word', key: 'word' },
// { name: '导出模型信息', key: 'basicExcel' },
]
const ExportOtherModal = (props) => {
const { visible, onCancel } = props;
const [ modeKey, setModeKey ] = useState('');
const [ form ] = Form.useForm();
const onModeChange = (e) => {
setModeKey(e.target?.value);
}
const onOk = async() => {
try {
await form.validateFields();
reset();
onCancel && onCancel(modeKey);
} catch (errInfo) {
console.log('Validate Failed:', errInfo);
}
}
const cancel = () => {
reset();
onCancel && onCancel();
}
const reset = () => {
form.resetFields();
setModeKey('');
}
const footer = [
<Button
key="0"
onClick={cancel}
>
取消
</Button>,
<Button
key="1"
type="primary"
onClick={onOk}
>
确定
</Button>,
];
return (
<Modal
forceRender
visible={visible}
title='模型导出'
width={540}
onCancel={cancel}
footer={footer}
>
<Form form={form}>
<Form.Item
name='mode'
label='导出方式'
rules={[
{
required: true,
message: '请选择导出方式',
},
]}
>
<Radio.Group onChange={onModeChange} value={modeKey}>
{
exportModes.map((item, index) => {
return (
<Radio
value={item.key}
key={index}
>
{item.name}
</Radio>
);
})
}
</Radio.Group>
</Form.Item>
</Form>
</Modal>
)
}
export default ExportOtherModal;
\ No newline at end of file
import React from "react"
import { Modal, Button } from 'antd'
import { dispatch } from '../../../../model'
const FC = (props) => {
const { ids, visible, onCancel } = props
const basicRef = React.useRef()
const close = () => {
onCancel?.()
}
const download = () => {
}
const footer = React.useMemo(() => {
return [
<Button key={'cancel'}
onClick={() => close()}
>取消</Button>,
<Button key={'save'} type='primary'
onClick={() => download()}
>导出</Button>
]
}, [close, download])
return (
<Modal
visible={visible}
footer={footer}
width='80%'
bodyStyle={{ padding: '15px', height: '80vh', overflow: 'auto' }}
title='DDL导出详情'
centered destroyOnClose
onCancel={() => { close() }}
>
<Basic ref={basicRef} ids={ids} />
</Modal>
)
}
export default FC
const Basic = React.forwardRef(function ({ ids }, ref) {
const [loading, setLoading] = React.useState(false)
const [data, setData] = React.useState()
React.useImperativeHandle(ref, () => ({
}), [])
React.useEffect(() => {
if ((ids??[]).length > 0) {
exportTableDDLAbstractList()
}
}, [ids])
const exportTableDDLAbstractList = () => {
setLoading(true)
dispatch({
type: 'datamodel.exportTableDDLAbstractList',
payload: {
data: ids
},
callback: (data) => {
setLoading(false)
setData(data)
},
error: () => {
setLoading(false)
}
})
}
return (
<>
</>
)
})
\ No newline at end of file
import React from 'react';
import { Modal, Button, Form, Radio } from 'antd';
import copy from "copy-to-clipboard"
import { dispatch } from '../../../../model'
import { showNotifaction } from '../../../../util'
import ExportDDL from './export-ddl'
const exportModes = [
{ name: '导出DDL', key: 'ddl' },
{ name: '导出Erwin', key: 'erwin' },
{ name: '导出Excel', key: 'excel' },
{ name: '导出Word', key: 'word' },
]
const FC = (props) => {
const { ids, visible, onCancel } = props
const [exportDDLParams, setExportDDLParams] = React.useState({
visible: false
})
const basicRef = React.useRef()
const [form] = Form.useForm()
const save = async() => {
try {
await basicRef.current.validate()
const modeKey = basicRef.current.modeKey
if (modeKey === 'ddl') {
setExportDDLParams({ visible: true })
} if (modeKey === 'erwin') {
dispatch({
type: 'datamodel.exportERWinString',
payload: {
ids: (ids??[]).toString(),
},
callback: data => {
copy(JSON.stringify(data))
showNotifaction('提示', 'Erwin信息已成功复制到剪贴板', 5)
}
})
} else if (modeKey === 'excel') {
window.open(`/api/datamodeler/easyDataModelerExport/excel?ids=${(ids??[]).toString()}`)
} else if (modeKey === 'word') {
window.open(`/api/datamodeler/easyDataModelerExport/word/template?ids=${(ids??[]).toString()}`)
}
} catch (errInfo) {
console.log('Validate Failed:', errInfo);
}
}
const close = () => {
onCancel?.()
}
const footer = React.useMemo(() => {
return [
<Button key='cancel'
onClick={() => close()}
>取消</Button>,
<Button key='save' type='primary'
onClick={() => save()}
>保存</Button>
]
}, [close, save])
return (
<>
<Modal
visible={visible}
title='模型导出'
width={540}
footer={footer}
centered destroyOnClose
onCancel={() => { close() }}
>
<Basic ref={basicRef} />
</Modal>
<ExportDDL
{...exportDDLParams}
ids={ids}
onCancel={() => {
setExportDDLParams({ visible: false })
}}
/>
</>
)
}
export default FC
const Basic = React.forwardRef(function ({}, ref) {
const [modeKey, setModeKey] = React.useState()
const [form] = Form.useForm()
React.useImperativeHandle(ref, () => ({
validate: async () => {
return await form.validateFields()
},
modeKey
}), [form, modeKey])
const onModeChange = (e) => {
setModeKey(e.target?.value)
}
return (
<Form form={form}>
<Form.Item name='mode' label='导出方式'
rules={[{ required: true, message: '请选择导出方式' }]}
>
<Radio.Group onChange={onModeChange} value={modeKey}>
{
exportModes.map((item) => (
<Radio value={item.key} key={item.key}>
{item.name}
</Radio>
))
}
</Radio.Group>
</Form.Item>
</Form>
)
})
\ No newline at end of file
......@@ -10,7 +10,7 @@ import ModelTable from './Component/ModelTable';
import ImportModal from './Component/ImportModal';
import ImportStockWordDrawer from './Component/ImportStockWordDrawer';
import ExportDDLModal from './Component/ExportDDLModal';
import ExportOtherModal from './Component/ExportOtherModal';
import ExportOptions from './Component/export-options';
import RecatalogModal from './Component/RecatalogModal';
import HistoryAndVersionDrawer from './Component/HistoryAndVersionDrawer';
import { showMessage, showNotifaction, inputWidth, DeleteTipModal } from '../../../util';
......@@ -43,7 +43,7 @@ class Model extends React.Component {
importModalVisible: false,
importStockWordDrawerVisible: false,
exportDDLModalVisible: false,
exportOtherModalVisible: false,
exportOptionsVisible: false,
recatalogModalVisible: false,
historyAndVersionDrawerVisible: false,
catalogId: '',
......@@ -506,10 +506,6 @@ class Model extends React.Component {
this.setState({ exportDDLModalVisible: true, selectModelerNames: _selectModelerNames, exportDDLModalReference: 'exportDDL' });
}
onExportOtherBtnClick = () => {
this.setState({ exportOtherModalVisible: true });
}
startFlow = () => {
const { selectModelerIds, tableData } = this.state;
if ((selectModelerIds||[]).length === 0) {
......@@ -656,31 +652,6 @@ class Model extends React.Component {
this.setState({ exportDDLModalVisible: false });
}
onExportOtherModalCancel = (key='') => {
const { selectModelerIds } = this.state;
this.setState({ exportOtherModalVisible: false }, () => {
if (key === 'ddl') {
this.onExportDDLBtnClick();
} else if (key === 'erwin') {
dispatch({
type: 'datamodel.exportERWinString',
payload: {
ids: selectModelerIds.join(','),
},
callback: data => {
copy(JSON.stringify(data));
showNotifaction('提示', 'Erwin信息已成功复制到剪贴板', 5);
}
});
} else if (key === 'excel') {
window.open(`/api/datamodeler/easyDataModelerExport/excel?ids=${selectModelerIds.join(',')}`);
} else if (key === 'word') {
window.open(`/api/datamodeler/easyDataModelerExport/word/template?ids=${selectModelerIds.join(',')}`);
}
});
}
onRecatalogModalCancel = (refresh = false) => {
this.setState({ recatalogModalVisible: false });
if (refresh) {
......@@ -741,7 +712,7 @@ class Model extends React.Component {
}
render() {
const { importModalVisible, catalogId, loadingTableData, selectModelerIds, keyword, filterTableData, selectModelerNames, exportDDLModalVisible, exportOtherModalVisible, importStockWordDrawerVisible , loadingStates, modelStates, currentModelState, currentView, recatalogModalVisible, exportDDLModalReference, currentModel, offset, historyAndVersionDrawerVisible, modelerId, expandTree, showDeleteTip, colSettingModalVisible, visibleColNames, canExport, canExportInfo, canStartFlow, canChangeCatalog, canDelete, canAdd } = this.state;
const { importModalVisible, catalogId, loadingTableData, selectModelerIds, keyword, filterTableData, selectModelerNames, exportDDLModalVisible, exportOptionsVisible, importStockWordDrawerVisible , loadingStates, modelStates, currentModelState, currentView, recatalogModalVisible, exportDDLModalReference, currentModel, offset, historyAndVersionDrawerVisible, modelerId, expandTree, showDeleteTip, colSettingModalVisible, visibleColNames, canExport, canExportInfo, canStartFlow, canChangeCatalog, canDelete, canAdd } = this.state;
const classes = classNames('data-model', {
'data-model-collapse': !expandTree
......@@ -826,7 +797,9 @@ class Model extends React.Component {
<PermissionButton
defaultPermission={canExport}
tip={(selectModelerIds||[]).length===0?'请先选择模型':''}
onClick={this.onExportOtherBtnClick}
onClick={() => {
this.setState({ exportOptionsVisible: true })
}}
disabled={(selectModelerIds||[]).length===0}
>
导出
......@@ -1006,9 +979,12 @@ class Model extends React.Component {
onCancel={this.onExportDDLModalCancel}
/>
<ExportOtherModal
visible={exportOtherModalVisible}
onCancel={this.onExportOtherModalCancel}
<ExportOptions
visible={exportOptionsVisible}
ids={selectModelerIds}
onCancel={() => {
this.setState({ exportOptionsVisible: false })
}}
/>
<RecatalogModal
......
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