Commit cdef19b3 by zhaochengxiang

存量导入日志

parent 9aeacc1b
......@@ -178,6 +178,10 @@ export function* importWordGenerateModel(payload) {
return yield call(datamodelerService.importWordGenerateModel, payload);
}
export function* importWordLogs(payload) {
return yield call(datamodelerService.importWordLogs, payload);
}
export function* importWordGenerateModelDraft(payload) {
return yield call(datamodelerService.importWordGenerateModelDraft, payload);
}
......
......@@ -133,6 +133,10 @@ export function importWordGenerateModel(payload) {
return PostFile("/datamodeler/easyDataModelerExport/word", payload);
}
export function importWordLogs(payload) {
return PostJSON("/datamodeler/easyDataModelerExport/log/list", payload);
}
export function importWordGenerateModelDraft(payload) {
return PostFile("/datamodeler/easyDataModelerExport/word/draft", payload);
}
......
......@@ -224,4 +224,17 @@ export function highlightSearchContentByTerms(content, terms) {
processContent = searchContentAddDecorate(processContent, terms);
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) => {
useEffect(() => {
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);
const defaultDomain = (env?.children||[]).length>0 ? env.children[0]: null;
......@@ -75,13 +86,20 @@ const DatasourceManage = (props) => {
if (defaultSystem) {
if (env?.value === domainId) {
setTreeValue(Number(scopeId));
if (domainId!==null && env?.value === Number(domainId)) {
env.children.forEach(domain => {
(domain.children||[]).forEach(system => {
if (system.id === Number(scopeId)) {
setTreeValue(system.value);
}
})
})
setSelectedScope([Number(domainId), Number(catalogId), Number(scopeId)]);
} else {
setTreeValue(defaultSystem.value);
setSelectedScope([env?.value, defaultDomain.value, defaultSystem.value]);
setSelectedScope([env?.value, defaultDomain.id, defaultSystem.id]);
}
let _expandKeys = [];
......@@ -153,18 +171,14 @@ const DatasourceManage = (props) => {
const onScopeChange = (value) => {
let domainId = '';
(treeData||[]).forEach(domain => {
(domain.children||[]).forEach(system => {
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) => {
......
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';
import { showMessage } from '../../../../util';
const ImportWordModal = (props) => {
const { onCancel, visible, catalogId, reference = '' } = props;
const { onCancel, visible, catalogId } = props;
const [ fileList, setFileList ] = useState([]);
const [ confirmLoading, setConfirmLoading ] = useState(false);
......@@ -37,11 +37,11 @@ const ImportWordModal = (props) => {
setConfirmLoading(true);
dispatchLatest({
type: (reference==='stock')?'datamodel.importWordGenerateModel':'datamodel.importWordGenerateModelDraft',
type: 'datamodel.importWordGenerateModelDraft',
payload: {
params: {
catalogId,
stateId: (reference==='stock')?'':'1'
stateId: '1'
},
fileList
},
......@@ -49,11 +49,7 @@ const ImportWordModal = (props) => {
setConfirmLoading(false);
reset();
if (onCancel) {
if (reference==='stock') {
onCancel(true);
} else {
onCancel(false, data||[]);
}
onCancel(false, data||[]);
}
},
error: () => {
......@@ -71,7 +67,7 @@ const ImportWordModal = (props) => {
<Modal
forceRender
visible={visible}
title={(reference==='')?'Word导入':'存量模型导入'}
title='Word导入'
width={520}
confirmLoading={confirmLoading}
onCancel={() => {
......
......@@ -9,6 +9,7 @@ import TemplateCURDDrawer from './Component/TemplateCURDDrawer';
import ConstraintDetailDrawer from './Component/ConstraintDetailDrawer';
import ImportModal from './Component/ImportModal';
import ImportWordModal from './Component/ImportWordModal';
import ImportStockWordDrawer from './Component/ImportStockWordDrawer';
import ExportDDLModal from './Component/ExportDDLModal';
import RecatalogModal from './Component/RecatalogModal';
import { showMessage, showNotifaction } from '../../../util';
......@@ -28,7 +29,7 @@ class Model extends React.Component {
constraintDetailDrawerVisible: false,
importModalVisible: false,
importWordModalVisible: false,
importWordModalReference: '',
importStockWordDrawerVisible: false,
exportDDLModalVisible: false,
recatalogModalVisible: false,
catalogId: '',
......@@ -198,7 +199,7 @@ class Model extends React.Component {
return;
}
this.setState({ importWordModalVisible: true, importWordModalReference: '' });
this.setState({ importWordModalVisible: true });
}
......@@ -368,6 +369,14 @@ class Model extends React.Component {
}
}
onImportStockWordDrawerCancel = () => {
this.setState({ importStockWordDrawerVisible: false });
}
onImportStockWordSuccess = () => {
this.onTableChange();
}
onExportDDLModalCancel = () => {
this.setState({ exportDDLModalVisible: false });
}
......@@ -382,11 +391,11 @@ class Model extends React.Component {
}
importStockModel = () => {
this.setState({ importWordModalVisible: true, importWordModalReference: 'stock' });
this.setState({ importStockWordDrawerVisible: true });
}
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 = (
<ModelTable
......@@ -494,7 +503,13 @@ class Model extends React.Component {
visible={importWordModalVisible}
onCancel={this.onImportWordModalCancel}
catalogId={catalogId}
reference={importWordModalReference}
/>
<ImportStockWordDrawer
visible={importStockWordDrawerVisible}
onCancel={this.onImportStockWordDrawerCancel}
catalogId={catalogId}
onSuccess={this.onImportStockWordSuccess}
/>
<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