mirror of
https://github.com/didi/KnowStreaming.git
synced 2026-01-08 07:32:11 +08:00
129 lines
4.0 KiB
TypeScript
129 lines
4.0 KiB
TypeScript
import * as React from 'react';
|
||
import { observer } from 'mobx-react';
|
||
import { Tabs, PageHeader, Button, notification, Popconfirm, Spin } from 'antd';
|
||
import { handleTabKey } from 'lib/utils';
|
||
import { EassentialInfo } from './essential-info';
|
||
import { TaskStatusDetails } from './taskStatus-details';
|
||
import { ITasksMetaData, ITrigger } from 'types/base-type';
|
||
import { triggerClusterTask } from 'lib/api';
|
||
import { handlePageBack } from 'lib/utils';
|
||
import { admin } from 'store/admin';
|
||
import Url from 'lib/url-parser';
|
||
import './index.less';
|
||
|
||
const { TabPane } = Tabs;
|
||
let showStatus: boolean = false;
|
||
let showContinue: boolean = false;
|
||
|
||
@observer
|
||
export class OperationDetail extends React.Component {
|
||
public taskId: number;
|
||
public taskName: string;
|
||
|
||
public state = {
|
||
showContinue: false,
|
||
};
|
||
|
||
constructor(props: any) {
|
||
super(props);
|
||
const url = Url();
|
||
this.taskId = Number(url.search.taskId);
|
||
}
|
||
|
||
public bindClick() {
|
||
const type = showContinue ? 'start' : 'pause';
|
||
const params = {
|
||
taskId: this.taskId,
|
||
action: type,
|
||
hostname: '',
|
||
} as ITrigger;
|
||
triggerClusterTask(params).then(data => {
|
||
admin.getSubtasksStatus(this.taskId);
|
||
notification.success({ message: `${showContinue ? '继续部署' : '暂停'}成功!` });
|
||
});
|
||
}
|
||
|
||
public callBackOrCancel(type: string) {
|
||
const params = {
|
||
taskId: this.taskId,
|
||
action: type,
|
||
hostname: '',
|
||
} as ITrigger;
|
||
triggerClusterTask(params).then(data => {
|
||
admin.getSubtasksStatus(this.taskId);
|
||
notification.success({ message: `${type === 'rollback' ? '回滚任务' : '取消'}成功` });
|
||
});
|
||
}
|
||
public handleVal(value: number) {
|
||
showStatus = (value + '').includes('100') ? true : false;
|
||
}
|
||
|
||
public componentDidMount() {
|
||
admin.getTasksMetadata(this.taskId);
|
||
admin.getSubtasksStatus(this.taskId);
|
||
}
|
||
|
||
public render() {
|
||
// 任务状态: 30:运行中(展示暂停), 40:暂停(展示开始), 100:完成(都置灰)
|
||
showStatus = admin.taskStatusDetails && admin.taskStatusDetails.status === 100 ? true : false;
|
||
showContinue = admin.taskStatusDetails && admin.taskStatusDetails.status === 40 ? true : false;
|
||
const showRollBack = admin.taskStatusDetails && admin.taskStatusDetails.rollback;
|
||
let tasks = {} as ITasksMetaData;
|
||
tasks = admin.tasksMetaData ? admin.tasksMetaData : tasks;
|
||
return (
|
||
<>
|
||
<Spin spinning={admin.loading}>
|
||
<PageHeader
|
||
className="detail hotspot-header"
|
||
onBack={() => handlePageBack('/admin/operation#1')}
|
||
title={`任务名称${tasks.taskName ? '/' + tasks.taskName : ''}`}
|
||
extra={[
|
||
<Button key="1" type="primary" disabled={showStatus} >
|
||
<Popconfirm
|
||
title={`确定${showContinue ? '开始' : '暂停'}?`}
|
||
onConfirm={() => this.bindClick()}
|
||
>
|
||
<a>{showContinue ? '开始' : '暂停'}</a>
|
||
</Popconfirm>
|
||
</Button>,
|
||
<Button
|
||
key="2"
|
||
type="primary"
|
||
disabled={showRollBack || showStatus}
|
||
>
|
||
<Popconfirm
|
||
title={`确定回滚?`}
|
||
onConfirm={() => this.callBackOrCancel('rollback')}
|
||
>
|
||
<a>回滚</a>
|
||
</Popconfirm>
|
||
</Button>,
|
||
<Button
|
||
key="3"
|
||
type="primary"
|
||
disabled={showStatus}
|
||
>
|
||
<Popconfirm
|
||
title={`确定回滚?`}
|
||
onConfirm={() => this.callBackOrCancel('cancel')}
|
||
>
|
||
<a>取消</a>
|
||
</Popconfirm>
|
||
</Button>,
|
||
]}
|
||
>
|
||
<Tabs activeKey={location.hash.substr(1) || '1'} type="card" onChange={handleTabKey}>
|
||
<TabPane tab="基本信息" key="1">
|
||
<EassentialInfo tasksMetaData={tasks} />
|
||
</TabPane>
|
||
<TabPane tab="任务状态详情" key="2">
|
||
<TaskStatusDetails handleVal={(value: number) => this.handleVal(value)} />
|
||
</TabPane>
|
||
</Tabs>
|
||
</PageHeader>
|
||
</Spin>
|
||
</>
|
||
);
|
||
}
|
||
}
|