Commit cdef19b3 by zhaochengxiang

存量导入日志

parent 9aeacc1b
...@@ -178,6 +178,10 @@ export function* importWordGenerateModel(payload) { ...@@ -178,6 +178,10 @@ export function* importWordGenerateModel(payload) {
return yield call(datamodelerService.importWordGenerateModel, payload); return yield call(datamodelerService.importWordGenerateModel, payload);
} }
export function* importWordLogs(payload) {
return yield call(datamodelerService.importWordLogs, payload);
}
export function* importWordGenerateModelDraft(payload) { export function* importWordGenerateModelDraft(payload) {
return yield call(datamodelerService.importWordGenerateModelDraft, payload); return yield call(datamodelerService.importWordGenerateModelDraft, payload);
} }
......
...@@ -133,6 +133,10 @@ export function importWordGenerateModel(payload) { ...@@ -133,6 +133,10 @@ export function importWordGenerateModel(payload) {
return PostFile("/datamodeler/easyDataModelerExport/word", payload); return PostFile("/datamodeler/easyDataModelerExport/word", payload);
} }
export function importWordLogs(payload) {
return PostJSON("/datamodeler/easyDataModelerExport/log/list", payload);
}
export function importWordGenerateModelDraft(payload) { export function importWordGenerateModelDraft(payload) {
return PostFile("/datamodeler/easyDataModelerExport/word/draft", payload); return PostFile("/datamodeler/easyDataModelerExport/word/draft", payload);
} }
......
...@@ -225,3 +225,16 @@ export function highlightSearchContentByTerms(content, terms) { ...@@ -225,3 +225,16 @@ export function highlightSearchContentByTerms(content, terms) {
return highlightSearchContent(processContent); return highlightSearchContent(processContent);
} }
export function formatDate(t) {
if (t === null) return '';
var date = new Date(t);
var YY = date.getFullYear() + '-';
var MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
var DD = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate());
var hh = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
var mm = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';
var ss = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds());
return YY + MM + DD +" "+hh + mm + ss;
}
\ No newline at end of file
...@@ -66,6 +66,17 @@ const DatasourceManage = (props) => { ...@@ -66,6 +66,17 @@ const DatasourceManage = (props) => {
useEffect(() => { useEffect(() => {
if (env && env.children) { if (env && env.children) {
env.children.forEach(domain => {
domain.id = domain.value;
domain.value = domain.key;
(domain.children||[]).forEach(system => {
system.id = system.value;
system.value = system.key;
})
})
setTreeData(env.children); setTreeData(env.children);
const defaultDomain = (env?.children||[]).length>0 ? env.children[0]: null; const defaultDomain = (env?.children||[]).length>0 ? env.children[0]: null;
...@@ -75,13 +86,20 @@ const DatasourceManage = (props) => { ...@@ -75,13 +86,20 @@ const DatasourceManage = (props) => {
if (defaultSystem) { if (defaultSystem) {
if (env?.value === domainId) { if (domainId!==null && env?.value === Number(domainId)) {
setTreeValue(Number(scopeId)); env.children.forEach(domain => {
(domain.children||[]).forEach(system => {
if (system.id === Number(scopeId)) {
setTreeValue(system.value);
}
})
})
setSelectedScope([Number(domainId), Number(catalogId), Number(scopeId)]); setSelectedScope([Number(domainId), Number(catalogId), Number(scopeId)]);
} else { } else {
setTreeValue(defaultSystem.value); setTreeValue(defaultSystem.value);
setSelectedScope([env?.value, defaultDomain.value, defaultSystem.value]); setSelectedScope([env?.value, defaultDomain.id, defaultSystem.id]);
} }
let _expandKeys = []; let _expandKeys = [];
...@@ -153,18 +171,14 @@ const DatasourceManage = (props) => { ...@@ -153,18 +171,14 @@ const DatasourceManage = (props) => {
const onScopeChange = (value) => { const onScopeChange = (value) => {
let domainId = '';
(treeData||[]).forEach(domain => { (treeData||[]).forEach(domain => {
(domain.children||[]).forEach(system => { (domain.children||[]).forEach(system => {
if (system.value === value) { if (system.value === value) {
domainId = domain.value setTreeValue(value);
setSelectedScope([env?.value, domain.id, system.id]);
} }
}) })
}) })
setTreeValue(value);
setSelectedScope([env?.value, domainId, value]);
} }
const onDatabaseChange = (value) => { const onDatabaseChange = (value) => {
......
import React, { useState, useEffect } from 'react';
import { Button, Upload, Drawer, Table, Pagination, Divider, Form } from 'antd';
import { UploadOutlined } from '@ant-design/icons';
import { dispatch, dispatchLatest } from '../../../../model';
import { showMessage, formatDate } from '../../../../util';
const ImportStockWordModal = (props) => {
const { onCancel, onSuccess, visible, catalogId } = props;
const [ fileList, setFileList ] = useState([]);
const [ confirmLoading, setConfirmLoading ] = useState(false);
const [ loading, setLoading ] = useState(false);
const [ logs, setLogs ] = useState([]);
const [ pagination, setPagination ] = useState( { pageNum: 1, pageSize: 20 } );
const { pageNum, pageSize } = pagination;
const [ total, setTotal ] = useState(0);
const columns = [
{
title: '序号',
dataIndex: 'key',
render: (text, record, index) => {
return (index+1).toString();
},
width: 60,
},
{
title: '开始时间',
dataIndex: 'startTime',
width: 200,
ellipsis: true,
render: (_, record, __) => {
return formatDate(record.startTime);
}
},
{
title: '结束时间',
dataIndex: 'endTime',
width: 200,
ellipsis: true,
render: (_, record, __) => {
return formatDate(record.endTime);
}
},
{
title: '耗时',
dataIndex: 'costTime',
width: 100,
ellipsis: true,
render: (_, record, __) => {
return record.costTime?`${Number(record.costTime/1000)}秒`:'';
}
},
{
title: '导入人',
dataIndex: 'operator',
width: 100,
ellipsis: true,
},
{
title: '导入状态',
dataIndex: 'state',
ellipsis: true,
}
]
useEffect(() => {
if (visible) {
setPagination({ pageNum: 1, pageSize: 20 });
getLogs();
}
//eslint-disable-next-line react-hooks/exhaustive-deps
}, [visible])
const getLogs = (p = 1, s = 20) => {
setLoading(true);
dispatch({
type: 'datamodeler.importWordLogs',
payload: {
params: {
page: p,
pageSize: s
}
},
callback: data => {
setLoading(false);
setTotal(data.totalElements);
setLogs(data.content||[]);
},
error: () => {
setLoading(false);
}
})
}
const uploadProps = {
onRemove: file => {
const index = fileList.indexOf(file);
const newFileList = fileList.slice();
newFileList.splice(index, 1);
setFileList(newFileList);
},
beforeUpload: file => {
setFileList([file]);
return false;
},
fileList: fileList || [],
accept: ".doc,.docx",
};
const handleOk = () => {
if ((fileList || []).length === 0) {
showMessage('info', '请先选择Word文件上传');
return;
}
setConfirmLoading(true);
dispatchLatest({
type: 'datamodel.importWordGenerateModel',
payload: {
params: {
catalogId,
stateId: ''
},
fileList
},
callback: data => {
setConfirmLoading(false);
getLogs(pageNum, pageSize);
onSuccess && onSuccess();
},
error: () => {
setConfirmLoading(false);
}
})
}
const reset = () => {
setConfirmLoading(false);
setFileList([]);
}
return (
<Drawer
forceRender
visible={ visible }
title='存量模型导入'
width={900}
placement="right"
closable={ true }
onClose={() => {
reset();
onCancel && onCancel();
}}
>
<div className='mt-3'>
<Form layout='inline'>
<Form.Item label='Word上传:'>
<Upload style={{ display: 'inline' }} {...uploadProps }>
<Button icon={
<UploadOutlined />}>
选择文件上传
</Button>
</Upload>
</Form.Item>
<Form.Item>
<Button type='primary' onClick={handleOk} loading={confirmLoading}>确定导入</Button>
</Form.Item>
</Form>
</div>
<Divider orientation="left">导入日志</Divider>
<Table
className='mt-3'
columns={columns||[]}
rowKey={'id'}
dataSource={logs||[]}
pagination={false}
loading={loading}
expandable={{
expandedRowRender: record => <p style={{ margin: 0 }}>{record.message||''}</p>
}}
sticky
/>
<Pagination
className="text-center mt-3"
showSizeChanger
showQuickJumper
onChange={(_pageNum, _pageSize) => {
setPagination({ pageNum: _pageNum||1, pageSize: _pageSize || 20 });
getLogs(_pageNum||1, _pageSize||20);
}}
onShowSizeChange={(_pageNum, _pageSize) => {
setPagination({ pageNum: _pageNum || 1, pageSize: _pageSize || 20 });
getLogs(_pageNum||1, _pageSize||20);
}}
current={pageNum}
pageSize={pageSize}
defaultCurrent={1}
total={total}
pageSizeOptions={[10,20]}
showTotal={total => `共 ${total} 条`}
/>
</Drawer>
)
}
export default ImportStockWordModal;
\ No newline at end of file
...@@ -6,7 +6,7 @@ import { dispatchLatest } from '../../../../model'; ...@@ -6,7 +6,7 @@ import { dispatchLatest } from '../../../../model';
import { showMessage } from '../../../../util'; import { showMessage } from '../../../../util';
const ImportWordModal = (props) => { const ImportWordModal = (props) => {
const { onCancel, visible, catalogId, reference = '' } = props; const { onCancel, visible, catalogId } = props;
const [ fileList, setFileList ] = useState([]); const [ fileList, setFileList ] = useState([]);
const [ confirmLoading, setConfirmLoading ] = useState(false); const [ confirmLoading, setConfirmLoading ] = useState(false);
...@@ -37,11 +37,11 @@ const ImportWordModal = (props) => { ...@@ -37,11 +37,11 @@ const ImportWordModal = (props) => {
setConfirmLoading(true); setConfirmLoading(true);
dispatchLatest({ dispatchLatest({
type: (reference==='stock')?'datamodel.importWordGenerateModel':'datamodel.importWordGenerateModelDraft', type: 'datamodel.importWordGenerateModelDraft',
payload: { payload: {
params: { params: {
catalogId, catalogId,
stateId: (reference==='stock')?'':'1' stateId: '1'
}, },
fileList fileList
}, },
...@@ -49,12 +49,8 @@ const ImportWordModal = (props) => { ...@@ -49,12 +49,8 @@ const ImportWordModal = (props) => {
setConfirmLoading(false); setConfirmLoading(false);
reset(); reset();
if (onCancel) { if (onCancel) {
if (reference==='stock') {
onCancel(true);
} else {
onCancel(false, data||[]); onCancel(false, data||[]);
} }
}
}, },
error: () => { error: () => {
setConfirmLoading(false); setConfirmLoading(false);
...@@ -71,7 +67,7 @@ const ImportWordModal = (props) => { ...@@ -71,7 +67,7 @@ const ImportWordModal = (props) => {
<Modal <Modal
forceRender forceRender
visible={visible} visible={visible}
title={(reference==='')?'Word导入':'存量模型导入'} title='Word导入'
width={520} width={520}
confirmLoading={confirmLoading} confirmLoading={confirmLoading}
onCancel={() => { onCancel={() => {
......
...@@ -9,6 +9,7 @@ import TemplateCURDDrawer from './Component/TemplateCURDDrawer'; ...@@ -9,6 +9,7 @@ import TemplateCURDDrawer from './Component/TemplateCURDDrawer';
import ConstraintDetailDrawer from './Component/ConstraintDetailDrawer'; import ConstraintDetailDrawer from './Component/ConstraintDetailDrawer';
import ImportModal from './Component/ImportModal'; import ImportModal from './Component/ImportModal';
import ImportWordModal from './Component/ImportWordModal'; import ImportWordModal from './Component/ImportWordModal';
import ImportStockWordDrawer from './Component/ImportStockWordDrawer';
import ExportDDLModal from './Component/ExportDDLModal'; import ExportDDLModal from './Component/ExportDDLModal';
import RecatalogModal from './Component/RecatalogModal'; import RecatalogModal from './Component/RecatalogModal';
import { showMessage, showNotifaction } from '../../../util'; import { showMessage, showNotifaction } from '../../../util';
...@@ -28,7 +29,7 @@ class Model extends React.Component { ...@@ -28,7 +29,7 @@ class Model extends React.Component {
constraintDetailDrawerVisible: false, constraintDetailDrawerVisible: false,
importModalVisible: false, importModalVisible: false,
importWordModalVisible: false, importWordModalVisible: false,
importWordModalReference: '', importStockWordDrawerVisible: false,
exportDDLModalVisible: false, exportDDLModalVisible: false,
recatalogModalVisible: false, recatalogModalVisible: false,
catalogId: '', catalogId: '',
...@@ -198,7 +199,7 @@ class Model extends React.Component { ...@@ -198,7 +199,7 @@ class Model extends React.Component {
return; return;
} }
this.setState({ importWordModalVisible: true, importWordModalReference: '' }); this.setState({ importWordModalVisible: true });
} }
...@@ -368,6 +369,14 @@ class Model extends React.Component { ...@@ -368,6 +369,14 @@ class Model extends React.Component {
} }
} }
onImportStockWordDrawerCancel = () => {
this.setState({ importStockWordDrawerVisible: false });
}
onImportStockWordSuccess = () => {
this.onTableChange();
}
onExportDDLModalCancel = () => { onExportDDLModalCancel = () => {
this.setState({ exportDDLModalVisible: false }); this.setState({ exportDDLModalVisible: false });
} }
...@@ -382,11 +391,11 @@ class Model extends React.Component { ...@@ -382,11 +391,11 @@ class Model extends React.Component {
} }
importStockModel = () => { importStockModel = () => {
this.setState({ importWordModalVisible: true, importWordModalReference: 'stock' }); this.setState({ importStockWordDrawerVisible: true });
} }
render() { render() {
const { importModalVisible, catalogId, loadingTableData, selectModelerIds, keyword, filterTableData, selectModelerNames, importModalAddMode, exportErwinLoading, exportDDLModalVisible, templateCURDDrawerVisible, wordTemplateModalVisible, constraintDetailDrawerVisible, importWordModalVisible, loadingStates, modelStates, currentModelState, currentView, recatalogModalVisible, exportDDLModalReference, currentModel, importWordModalReference, offset } = this.state; const { importModalVisible, catalogId, loadingTableData, selectModelerIds, keyword, filterTableData, selectModelerNames, importModalAddMode, exportErwinLoading, exportDDLModalVisible, templateCURDDrawerVisible, wordTemplateModalVisible, constraintDetailDrawerVisible, importWordModalVisible, importStockWordDrawerVisible , loadingStates, modelStates, currentModelState, currentView, recatalogModalVisible, exportDDLModalReference, currentModel, offset } = this.state;
const content = ( const content = (
<ModelTable <ModelTable
...@@ -494,7 +503,13 @@ class Model extends React.Component { ...@@ -494,7 +503,13 @@ class Model extends React.Component {
visible={importWordModalVisible} visible={importWordModalVisible}
onCancel={this.onImportWordModalCancel} onCancel={this.onImportWordModalCancel}
catalogId={catalogId} catalogId={catalogId}
reference={importWordModalReference} />
<ImportStockWordDrawer
visible={importStockWordDrawerVisible}
onCancel={this.onImportStockWordDrawerCancel}
catalogId={catalogId}
onSuccess={this.onImportStockWordSuccess}
/> />
<AppContext.Consumer> <AppContext.Consumer>
......
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