Files
KnowStreaming/kafka-manager-console/src/container/modal/admin/cluster.ts
2021-01-25 15:34:07 +08:00

363 lines
10 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { notification } from 'component/antd';
import { wrapper } from 'store';
import { IClusterTopics, IEditTopic, IConfigInfo, ILogicalCluster, INewLogical, IMetaData, IBrokersRegions, INewRegions } from 'types/base-type';
import { editTopic } from 'lib/api';
import { transMSecondToHour, transHourToMSecond } from 'lib/utils';
import { cluster } from 'store/cluster';
import { admin } from 'store/admin';
import { app } from 'store/app';
export const showEditClusterTopic = (item: IClusterTopics) => {
const xFormModal = {
formMap: [
{
key: 'clusterName',
label: '集群名称',
rules: [{
required: true,
}],
attrs: {
disabled: true,
},
},
{
key: 'appId',
label: '应用ID',
type: 'select',
options: app.adminAppData.map(item => {
return {
label: item.appId,
value: item.appId,
};
}),
rules: [{
required: true,
// message: '请输入应用ID',
// message: '请输入应用ID应用名称只支持字母、数字、下划线、短划线长度限制在3-64字符',
// pattern: /[_a-zA-Z0-9_-]{3,64}$/,
}],
attrs: {
placeholder: '请输入应用ID',
// disabled: true,
},
},
{
key: 'topicName',
label: 'Topic名称',
rules: [{
required: true,
}],
attrs: {
disabled: true,
},
},
{
key: 'retentionTime',
label: '保存时间',
rules: [{
required: true,
message: '请输入保存时间',
}],
attrs: {
placeholder: '请输入保存时间',
suffix: '小时',
},
},
{
key: 'properties',
label: 'Topic属性列表',
type: 'text_area',
rules: [{ required: false }],
attrs: {
placeholder: '请输入Topic属性列表',
},
},
{
key: 'description',
label: '备注',
type: 'text_area',
rules: [{
required: false,
}],
attrs: {
placeholder: '请输入备注',
},
},
],
formData: {
clusterName: item.clusterName,
appId: item.appId,
topicName: item.topicName,
retentionTime: transMSecondToHour(item.retentionTime),
properties: JSON.stringify(item.properties, null, 4),
description: item.description,
},
visible: true,
title: 'Topic编辑',
onSubmit: (value: IEditTopic) => {
value.clusterId = item.clusterId;
value.properties = value.properties ? JSON.parse(value.properties) : {};
value.retentionTime = transHourToMSecond(value.retentionTime);
editTopic(value).then(data => {
notification.success({ message: '编辑Topic成功' });
});
},
};
wrapper.open(xFormModal);
};
export const showLogicalClusterOpModal = (clusterId: number, record?: ILogicalCluster) => {
let isShow = false;
if (record && record.mode != 0) {
isShow = true;
}
const updateFormModal = (isShow: boolean) => {
const formMap = wrapper.xFormWrapper.formMap;
isShow ? formMap.splice(3, 0,
{
key: 'appId',
label: '所属应用',
rules: [{ required: true, message: '请选择所属应用' }],
type: 'select',
options: app.adminAppData.map(item => {
return {
label: item.name,
value: item.appId,
};
}),
attrs: {
placeholder: '请选择所属应用',
},
}) : formMap.splice(3, 1);
const formData = wrapper.xFormWrapper.formData;
wrapper.ref && wrapper.ref.updateFormMap$(formMap, formData || {});
};
let clusterModes = [] as IConfigInfo[];
clusterModes = cluster.clusterModes ? cluster.clusterModes : clusterModes;
let xFormModal = {
formMap: [
{
key: 'logicalClusterName',
label: '逻辑集群名称',
// defaultValue:'',
rules: [{
required: true,
message: '请输入逻辑集群名称,支持中文、字母、数字、下划线(_)和短划线(-)组成长度在3-128字符之间', // 不能以下划线_和短划线(-)开头和结尾
pattern: /^[a-zA-Z0-9_\-\u4e00-\u9fa5]{3,128}$/g, //(?!(_|\-))(?!.*?(_|\-)$)
}],
attrs: {
// disabled: record ? true : false,
placeholder: '请输入逻辑集群名称'
},
},
{
key: 'logicalClusterIdentification',
label: '逻辑集群标识',
// defaultValue:'',
rules: [{
required: true,
message: '请输入逻辑集群标识,支持字母、数字、下划线(_)和短划线(-)组成长度在3-128字符之间', //不能以下划线_和短划线(-)开头和结尾
pattern: /^[a-zA-Z0-9_\-]{3,128}$/g, //(?!(_|\-))(?!.*?(_|\-)$)
}],
attrs: {
disabled: record ? true : false,
placeholder: '请输入逻辑集标识,创建后无法修改'
},
},
{
key: 'mode',
label: '集群模式',
type: 'select',
rules: [{ required: true, message: '请选择集群模式' }],
options: clusterModes.map(item => {
return {
label: item.message,
value: item.code,
};
}),
attrs: {
onChange(item: any) {
if (isShow && item == 0) {
updateFormModal(false);
isShow = false;
} else if (!isShow && (item == 1 || item == 2)) {
updateFormModal(true);
isShow = true;
}
},
},
},
// {
// key: 'appId',
// label: '所属应用',
// rules: [{ required: true , message: '请选择所属应用' }],
// type: 'select',
// options: app.adminAppData.map(item => {
// return {
// label: item.name,
// value: item.appId,
// };
// }),
// attrs: {
// placeholder: '请选择所属应用',
// },
// },
{
key: 'regionIdList',
label: 'RegionIdList',
type: 'select',
defaultValue: [] as any,
options: admin.brokersRegions.map(item => {
return {
label: item.name,
value: item.id,
};
}),
rules: [{ required: true, message: '请选择RegionIdList' }],
attrs: {
mode: 'multiple',
placeholder: '请选择RegionIdList',
},
},
{
key: 'description',
label: '备注',
type: 'text_area',
rules: [{
required: false,
}],
attrs: {
placeholder: '请输入备注',
},
},
],
formData: record,
visible: true,
title: record ? '编辑逻辑集群' : '新增逻辑集群',
onSubmit: (value: INewLogical) => {
const params = {
appId: value.appId,
clusterId,
description: value.description,
id: record ? record.logicalClusterId : '',
mode: value.mode,
name: value.logicalClusterName,
identification: value.logicalClusterIdentification,
regionIdList: value.regionIdList,
} as INewLogical;
if (record) {
return admin.editLogicalClusters(clusterId, params).then(data => {
notification.success({ message: '编辑逻辑集群成功' });
});
}
return admin.createLogicalClusters(clusterId, params).then(data => {
notification.success({ message: '新建逻辑集群成功' });
});
},
};
if (record && record.mode != 0) {
isShow = true;
let formMap: any = xFormModal.formMap
formMap.splice(3, 0, {
key: 'appId',
label: '所属应用',
rules: [{ required: true, message: '请选择所属应用' }],
type: 'select',
options: app.adminAppData.map(item => {
return {
label: item.name,
value: item.appId,
};
}),
attrs: {
placeholder: '请选择所属应用',
},
})
}
wrapper.open(xFormModal);
};
export const showClusterRegionOpModal = (clusterId: number, content: IMetaData, record?: IBrokersRegions) => {
const xFormModal = {
formMap: [
{
key: 'name',
label: 'Region名称',
rules: [{ required: true, message: '请输入Region名称' }],
attrs: { placeholder: '请输入Region名称' },
},
{
key: 'clusterName',
label: '集群名称',
rules: [{ required: true, message: '请输入集群名称' }],
defaultValue: content.clusterName,
attrs: {
disabled: true,
placeholder: '请输入集群名称',
},
},
{
key: 'brokerIdList',
label: 'Broker列表',
defaultValue: record ? record.brokerIdList.join(',') : [] as any,
rules: [{ required: true, message: '请输入BrokerID,多个BrokerID用半角逗号分隔' }],
attrs: {
placeholder: '请输入BrokerID,多个BrokerID用半角逗号分隔',
},
},
{
key: 'status',
label: '状态',
type: 'select',
options: [
{
label: '正常',
value: 0,
},
{
label: '容量已满',
value: 1,
},
],
defaultValue: 0,
rules: [{ required: true, message: '请选择状态' }],
attrs: {
placeholder: '请选择状态',
},
},
{
key: 'description',
label: '备注',
type: 'text_area',
rules: [{
required: false,
}],
attrs: {
placeholder: '请输入备注',
},
},
],
formData: record,
visible: true,
title: `${record ? '编辑' : '新增Region'}`,
onSubmit: (value: INewRegions) => {
value.clusterId = clusterId;
value.brokerIdList = value.brokerIdList && Array.isArray(value.brokerIdList) ?
value.brokerIdList : value.brokerIdList.split(',');
if (record) {
value.id = record.id;
}
delete value.clusterName;
if (record) {
return admin.editRegions(clusterId, value).then(data => {
notification.success({ message: '编辑Region成功' });
});
}
return admin.addNewRegions(clusterId, value).then(data => {
notification.success({ message: '新建Region成功' });
});
},
};
wrapper.open(xFormModal);
};