Commit 911a23a3 by zhaochengxiang

服务导入

parent cefdd8e6
......@@ -149,7 +149,7 @@ const ImportAssetDrawer = (props) => {
const handleOk = () => {
if ((fileList||[]).length === 0) {
showMessage('info', '请先选择模板上传');
showMessage('info', '请先选择文件上传');
return;
}
......
......@@ -36,7 +36,7 @@ const ImportElement = (props) => {
const handleOk = () => {
if ((fileList||[]).length === 0) {
showMessage('info', '请先选择模板上传');
showMessage('info', '请先选择文件上传');
return;
}
......
import React from 'react'
import { Drawer, Form, Table, Pagination, Divider, Upload, Button, Typography } from 'antd'
import { UploadOutlined, DownloadOutlined } from '@ant-design/icons';
import { Drawer, Form, Pagination, Divider, Upload, Button, Typography, Modal, Spin } from 'antd'
import { UploadOutlined, DownloadOutlined } from '@ant-design/icons'
import { dispatch } from '../../../../model'
import { AppContext } from '../../../../App'
import { showMessage } from '../../../../util'
import Table from '../../ResizeableTable'
const FC = (props) => {
const { onCancel, onSuccess, visible } = props
......@@ -9,12 +14,16 @@ const FC = (props) => {
const [confirmLoading, setConfirmLoading] = React.useState(false)
const [loading, setLoading] = React.useState(false)
const [logs, setLogs] = React.useState([])
const [ pagination, setPagination ] = useState( { pageNum: 1, pageSize: 20 } );
const { pageNum, pageSize } = pagination;
const [ total, setTotal ] = useState(0);
const [ users, setUsers ] = useState([]);
const [pagination, setPagination] = React.useState({ pageNum: 1, pageSize: 20 })
const [total, setTotal] = React.useState(0)
const [users, setUsers] = React.useState([])
const [confirmParams, setConfirmParams] = React.useState({
visible: false,
message: undefined,
fileId: undefined,
})
const app = useContext(AppContext);
const app = React.useContext(AppContext)
const columns = [
{
......@@ -30,18 +39,14 @@ const FC = (props) => {
dataIndex: 'startTime',
width: 200,
ellipsis: true,
render: (_, record, __) => {
return formatDate(record.startTime);
}
render: (_, record) => record.startTime ? new Date(record.startTime).toLocaleString() : ''
},
{
title: '结束时间',
dataIndex: 'endTime',
width: 200,
ellipsis: true,
render: (_, record, __) => {
return formatDate(record.endTime);
}
render: (_, record) => record.endTime ? new Date(record.endTime).toLocaleString() : ''
},
{
title: '耗时',
......@@ -57,68 +62,72 @@ const FC = (props) => {
dataIndex: 'operator',
width: 100,
ellipsis: true,
render: (text, record) => {
const user = users?.filter((user)=>user.pernr===text);
render: (_, record) => {
const temp = (record.operator??'').split(':')
if ((temp??[]).length >= 3) {
const user = (users??[]).filter((user)=>user.pernr === temp[2])
if (user && user.length > 0) {
return user[0].nachn?`${user[0].nachn}(${user[0].pernr})`:user[0].pernr;
return user[0].nachn?`${user[0].nachn}(${user[0].pernr})`:user[0].pernr
}
return text;
return temp[2]
}
return ''
}
},
{
title: '导入状态',
dataIndex: 'state',
ellipsis: true,
}
},
]
useEffect(() => {
React.useEffect(() => {
if (visible) {
setPagination({ pageNum: 1, pageSize: 20 });
getUsers();
getLogs();
getLogs()
getUsers()
}
//eslint-disable-next-line react-hooks/exhaustive-deps
}, [visible])
const getUsers = () => {
dispatch({
type: 'pds.getOwners',
callback: (data) => {
setUsers(data);
}
})
}
const downloadTemplate = () => {
window.open(`/api/dataassetmanager/dataAssetApi/getImportTemplate?templateType=${getTemplateType()}`);
window.open('/api/pdataservice/pdsCURD/exportPDSDataServiceTemplate?model=DataService')
}
const getLogs = (p = 1, s = 20) => {
setLoading(true);
const getLogs = () => {
setLoading(true)
setPagination(prev => {
dispatch({
type: 'assetmanage.importLogs',
type: 'pds.getImportLogs',
payload: {
page: p,
pageSize: s
page: prev.pageNum,
size: prev.pageSize
},
callback: data => {
setLoading(false);
setTotal(data.total);
setLogs(data.data||[]);
setLoading(false)
setTotal(data.totalElements)
setLogs(data.content||[])
},
error: () => {
setLoading(false);
setLoading(false)
}
})
}
const getUsers = () => {
dispatch({
type: 'pds.getOwners',
callback: (data) => {
setUsers(data);
}
return prev
})
}
const uploadProps = {
onRemove: file => {
const index = fileList.indexOf(file);
const newFileList = fileList.slice();
newFileList.splice(index, 1);
......@@ -142,32 +151,43 @@ const FC = (props) => {
};
const handleOk = () => {
if ((fileList||[]).length === 0) {
showMessage('info', '请先选择模板上传');
return;
showMessage('info', '请先选择文件上传')
return
}
setConfirmLoading(true);
setConfirmLoading(true)
dispatch({
type: 'assetmanage.assetImport',
payload: { fileList: fileList, params: { env: `${app?.env?.domainId}`, saveAsDraft: true } },
type: 'pds.addImportWithConfirm',
payload: {
fileList: fileList,
params: {
namespace: app?.env?.domainId
},
},
callback: data => {
setConfirmLoading(false);
setFileList([]);
getLogs(pageNum, pageSize);
showMessage('success', '导入动作完成,详情查看日志');
onSuccess && onSuccess(data||'');
setConfirmLoading(false)
setFileList([])
if (data?.fileId) {
setConfirmParams({
visible: true,
message: data?.message,
fileId: data?.fileId,
})
} else {
showMessage('error', '上传文件失败')
}
},
error: () => {
setConfirmLoading(false);
setConfirmLoading(false)
}
});
})
}
const reset = () => {
setConfirmLoading(false);
setFileList([]);
setConfirmLoading(false)
setPagination({ pageNum: 1, pageSize: 20 })
setFileList([])
}
return (
......@@ -179,7 +199,8 @@ const FC = (props) => {
closable
destroyOnClose
onClose={() => {
reset()
onCancel?.()
}}
>
<div className='mt-3'>
......@@ -210,7 +231,7 @@ const FC = (props) => {
loading={loading}
expandable={{
expandedRowRender: record => <React.Fragment>
{record.message?.split('<br/>').map((info, index) => {
{record.message?.split('\n').map((info, index) => {
return <Typography.Paragraph key={index}>{info}</Typography.Paragraph>
})}
</React.Fragment>
......@@ -223,21 +244,117 @@ const FC = (props) => {
showQuickJumper
onChange={(_pageNum, _pageSize) => {
setPagination({ pageNum: _pageNum||1, pageSize: _pageSize || 20 });
getLogs(_pageNum||1, _pageSize||20);
getLogs();
}}
onShowSizeChange={(_pageNum, _pageSize) => {
setPagination({ pageNum: _pageNum || 1, pageSize: _pageSize || 20 });
getLogs(_pageNum||1, _pageSize||20);
getLogs();
}}
current={pageNum}
pageSize={pageSize}
current={pagination.pageNum}
pageSize={pagination.pageSize}
defaultCurrent={1}
total={total}
pageSizeOptions={[10,20]}
showTotal={total => `共 ${total} 条`}
/>
<Confirm
{...confirmParams}
onCancel={(refresh) => {
setConfirmParams({
visible: false,
message: undefined,
fileId: undefined,
})
getLogs()
refresh && onSuccess?.()
}}
/>
</Drawer>
)
}
export default FC
const Confirm = ({ visible, message, fileId, onCancel }) => {
const [waiting, setWaiting] = React.useState(false)
const close = () => {
setWaiting(true)
dispatch({
type: 'pds.importConfirm',
payload: {
params: {
fileId,
isContinued: false,
},
},
callback: data => {
showMessage('success', '取消导入成功')
setWaiting(false)
onCancel?.()
},
error: () => {
setWaiting(false)
}
})
}
const save = () => {
setWaiting(true)
dispatch({
type: 'pds.importConfirm',
payload: {
params: {
fileId,
isContinued: true,
},
},
callback: data => {
showMessage('success', '上传文件成功,正在导入。。。')
setWaiting(false)
onCancel?.(true)
},
error: () => {
setWaiting(false)
}
})
}
const footer = React.useMemo(() => {
return [
<Button key={'cancel'}
onClick={() => close()}
>取消导入</Button>,
<Button key={'save'} type='primary'
disabled={waiting}
onClick={() => save()}
>继续导入</Button>
]
}, [close, save, waiting])
return (
<Modal
title='导入确认'
width={600}
visible={visible}
footer={footer}
destroyOnClose
maskClosable={false}
onCancel={() => {
close()
}}
bodyStyle={{
height: 400,
overflow: 'auto'
}}
>
<Spin spinning={waiting}>
{
(message??'').split('\n').map((info, index) => {
return <Typography.Paragraph key={index}>{info}</Typography.Paragraph>
})
}
</Spin>
</Modal>
)
}
\ No newline at end of file
......@@ -24,6 +24,7 @@ import ColSettingModal from './Component/ColSettingModal';
import StartAuthorize from './Component/StartAuthorize';
import StartRelease from './Component/StartRelease';
import Offline from './Component/Offline';
import ImportServices from './Component/ImportServices';
import './index.less';
......@@ -72,6 +73,7 @@ class Model extends React.Component {
offlineVisible: false,
jdbcInformationVisible: false,
isRoot: false,
importServicesVisible: false,
}
}
......@@ -347,7 +349,7 @@ class Model extends React.Component {
}
onImportClick = () => {
this.setState({ importServicesVisible: true });
}
onSubscribeBtnClick = () => {
......@@ -725,7 +727,7 @@ class Model extends React.Component {
<Button onClick={() => { this.setState({jdbcInformationVisible: true}); }}>JDBC信息</Button>
</Space>
{
(getDataModelerRole(app?.user)!==DataModelerRoleReader) && isOnlyEnding && <Button onClick={this.onImportClick}>导入</Button>
(getDataModelerRole(app?.user)!==DataModelerRoleReader) && !isOnlyEnding && <Button onClick={this.onImportClick}>导入</Button>
}
{
(getDataModelerRole(app?.user)!==DataModelerRoleReader) && isOnlyEnding &&
......@@ -854,6 +856,14 @@ class Model extends React.Component {
visible={this.state.jdbcInformationVisible}
onCancel={() => { this.setState({ jdbcInformationVisible: false }) }}
/>
<ImportServices
visible={this.state.importServicesVisible}
onCancel={() => { this.setState({ importServicesVisible: false }) }}
onSuccess={() => {
this.onTableChange()
}}
/>
</div>
);
}
......
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