|
|
import { globalOption, patternTrim } from '../globalOption';
|
|
|
|
|
|
/**
|
|
|
* 实例运行状态
|
|
|
*/
|
|
|
export const runStatusConstant = {
|
|
|
HEALTHY: 'healthy',
|
|
|
UNKNOWN: 'unknown',
|
|
|
RUN: 'run',
|
|
|
ERROR: 'error',
|
|
|
STOP: 'stop'
|
|
|
};
|
|
|
export const runStatusDic = [
|
|
|
{
|
|
|
label: '可用',
|
|
|
value: runStatusConstant.HEALTHY,
|
|
|
color: 'green'
|
|
|
},
|
|
|
{
|
|
|
label: '未知',
|
|
|
value: runStatusConstant.UNKNOWN,
|
|
|
color: 'gray'
|
|
|
},
|
|
|
{
|
|
|
// 部署 可停止
|
|
|
label: '运行',
|
|
|
value: runStatusConstant.RUN,
|
|
|
color: 'blue'
|
|
|
},
|
|
|
{
|
|
|
label: '异常',
|
|
|
value: runStatusConstant.ERROR,
|
|
|
color: 'orange'
|
|
|
},
|
|
|
{
|
|
|
// 部署 可启用
|
|
|
label: '停止',
|
|
|
value: runStatusConstant.STOP,
|
|
|
color: 'red'
|
|
|
}
|
|
|
];
|
|
|
export const runStatusMap = runStatusDic.reduce((obj, item) => {
|
|
|
obj[item.value] = item.label;
|
|
|
return obj;
|
|
|
}, {});
|
|
|
/**
|
|
|
* 组件运行状态
|
|
|
*/
|
|
|
export const startStatusConstant = {
|
|
|
RUN: 'run',
|
|
|
STOP: 'stop'
|
|
|
};
|
|
|
export const startStatusDic = [
|
|
|
{
|
|
|
label: '启用中',
|
|
|
value: startStatusConstant.RUN
|
|
|
},
|
|
|
{
|
|
|
label: '已下架',
|
|
|
value: startStatusConstant.STOP
|
|
|
}
|
|
|
];
|
|
|
export const startStatusMap = startStatusDic.reduce((obj, item) => {
|
|
|
obj[item.value] = item.label;
|
|
|
return obj;
|
|
|
}, {});
|
|
|
|
|
|
/**
|
|
|
* 组件编译状态
|
|
|
* BUILT_IDLE 空闲中
|
|
|
* BUILT_RUNNING 编译中
|
|
|
* BUILT_SUCCESS 编译成功
|
|
|
* BUILT_FAILED 编译失败
|
|
|
* BUILT_CANCELED 编译取消
|
|
|
* BUILT_NEVER 未编译
|
|
|
*/
|
|
|
export const compileStatusConstant = {
|
|
|
BUILT_IDLE: 'idle',
|
|
|
BUILT_RUNNING: 'running',
|
|
|
BUILT_SUCCESS: 'success',
|
|
|
BUILT_FAILED: 'failed',
|
|
|
BUILT_CANCELED: 'canceled',
|
|
|
BUILT_NEVER: 'never',
|
|
|
};
|
|
|
export const compileStatusDic = [
|
|
|
{
|
|
|
label: '未编译',
|
|
|
value: compileStatusConstant.BUILT_NEVER,
|
|
|
color: 'gray'
|
|
|
},
|
|
|
{
|
|
|
label: '空闲中',
|
|
|
value: compileStatusConstant.BUILT_IDLE,
|
|
|
color: 'blue'
|
|
|
},
|
|
|
{
|
|
|
label: '编译中',
|
|
|
value: compileStatusConstant.BUILT_RUNNING,
|
|
|
color: 'blue'
|
|
|
},
|
|
|
{
|
|
|
label: '编译成功',
|
|
|
value: compileStatusConstant.BUILT_SUCCESS,
|
|
|
color: 'green'
|
|
|
},
|
|
|
{
|
|
|
label: '编译失败',
|
|
|
value: compileStatusConstant.BUILT_FAILED,
|
|
|
color: 'red'
|
|
|
},
|
|
|
{
|
|
|
label: '编译取消',
|
|
|
value: compileStatusConstant.BUILT_CANCELED,
|
|
|
color: 'orange'
|
|
|
}
|
|
|
];
|
|
|
export const compileStatusMap = startStatusDic.reduce((obj, item) => {
|
|
|
obj[item.value] = item.label;
|
|
|
return obj;
|
|
|
}, {});
|
|
|
/**
|
|
|
* 实例运行类型
|
|
|
*/
|
|
|
export const runTypeConstant = {
|
|
|
LOCAL: 0,
|
|
|
ONLINE: 1
|
|
|
};
|
|
|
export const runTypeDic = [
|
|
|
{
|
|
|
label: '本地运行',
|
|
|
value: runTypeConstant.LOCAL
|
|
|
},
|
|
|
{
|
|
|
label: '线上运行',
|
|
|
value: runTypeConstant.ONLINE
|
|
|
}
|
|
|
];
|
|
|
export const option = {
|
|
|
...globalOption,
|
|
|
height: '300',
|
|
|
calcHeight: 30,
|
|
|
tip: false,
|
|
|
searchShow: false,
|
|
|
header: false,
|
|
|
viewBtn: false,
|
|
|
delBtn: false,
|
|
|
index: true,
|
|
|
menuWidth: 300,
|
|
|
addBtn: false,
|
|
|
editBtn: false,
|
|
|
submitText: '修改',
|
|
|
emptyText: '暂无数据',
|
|
|
span: 24,
|
|
|
column: [
|
|
|
{
|
|
|
label: 'id',
|
|
|
prop: 'id',
|
|
|
hide: true,
|
|
|
display: false
|
|
|
},
|
|
|
{
|
|
|
label: '标识',
|
|
|
prop: 'identifier',
|
|
|
type: 'input',
|
|
|
overHidden: true,
|
|
|
display: false
|
|
|
},
|
|
|
{
|
|
|
label: '实例名称',
|
|
|
prop: 'name',
|
|
|
type: 'input',
|
|
|
overHidden: true,
|
|
|
rules: [
|
|
|
{ required: true, message: '必须填写实例名称' },
|
|
|
{ max: 50, message: '实例名称不能超过50字符' }
|
|
|
]
|
|
|
},
|
|
|
{
|
|
|
label: '运行类型',
|
|
|
prop: 'runType',
|
|
|
type: 'input',
|
|
|
width: 80,
|
|
|
display: false,
|
|
|
dicData: runTypeDic
|
|
|
},
|
|
|
{
|
|
|
label: '运行状态',
|
|
|
prop: 'runStatus',
|
|
|
type: 'input',
|
|
|
width: 80,
|
|
|
dicData: runStatusDic,
|
|
|
display: false,
|
|
|
slot: true
|
|
|
},
|
|
|
{
|
|
|
label: '创建时间',
|
|
|
prop: 'createTime',
|
|
|
type: 'input',
|
|
|
// width: 160,
|
|
|
display: false
|
|
|
},
|
|
|
{
|
|
|
label: '实例描述',
|
|
|
prop: 'description',
|
|
|
type: 'textarea',
|
|
|
hide: true,
|
|
|
minRows: 3,
|
|
|
span: 24
|
|
|
}
|
|
|
]
|
|
|
};
|
|
|
export const instanceOption = {
|
|
|
...globalOption,
|
|
|
calcHeight: 'auto',
|
|
|
// height: '300',
|
|
|
// calcHeight: 30,
|
|
|
tip: false,
|
|
|
searchShow: false,
|
|
|
header: false,
|
|
|
viewBtn: false,
|
|
|
delBtn: false,
|
|
|
index: true,
|
|
|
menuWidth: 350,
|
|
|
addBtn: false,
|
|
|
editBtn: false,
|
|
|
submitText: '修改',
|
|
|
emptyText: '取消',
|
|
|
span: 24,
|
|
|
column: [
|
|
|
...option.column,
|
|
|
{
|
|
|
label: '图标',
|
|
|
prop: 'logoUrl',
|
|
|
type: 'upload',
|
|
|
hide: true,
|
|
|
listType: 'picture-img',
|
|
|
action: '/api/blade-isdp/fileSystem/fileUpload',
|
|
|
propsHttp: {
|
|
|
res: 'data',
|
|
|
url: 'link'
|
|
|
},
|
|
|
fileType: 'img',
|
|
|
limit: 1,
|
|
|
fileSize: 1024 * 10,
|
|
|
accept: 'image/png, image/jpeg, image/jpg'
|
|
|
// tip: '图片尺寸不超过300*300像素,大小限制为1mb以内',
|
|
|
// rules: [{
|
|
|
// required: true,
|
|
|
// message: "请输入图片地址",
|
|
|
// trigger: "blur"
|
|
|
// }]
|
|
|
}
|
|
|
]
|
|
|
};
|
|
|
export const envConfigOption = {
|
|
|
...globalOption,
|
|
|
height: 300,
|
|
|
calcHeight: 30,
|
|
|
tip: false,
|
|
|
searchShow: false,
|
|
|
addBtn: false,
|
|
|
addRowBtn: false,
|
|
|
cellBtn: false,
|
|
|
index: true,
|
|
|
menuWidth: 80,
|
|
|
editBtn: false,
|
|
|
delBtn: false,
|
|
|
column: [
|
|
|
{
|
|
|
label: '启动项名称',
|
|
|
prop: 'name',
|
|
|
placeholder: '启动项名称',
|
|
|
formSlot: true,
|
|
|
rules: [
|
|
|
{ required: true, message: '启动项名称不能为空' },
|
|
|
{ max: 50, message: '启动项名称最长为50字符' }
|
|
|
],
|
|
|
width: 120,
|
|
|
span: 24,
|
|
|
cell: true
|
|
|
},
|
|
|
{
|
|
|
label: '参数名(key)',
|
|
|
prop: 'key',
|
|
|
formSlot: true,
|
|
|
rules: [
|
|
|
{ required: true, message: '请输入参数名(key)' },
|
|
|
{ max: 50, message: '参数名(key)最长为50字符' }
|
|
|
],
|
|
|
span: 24,
|
|
|
cell: true
|
|
|
},
|
|
|
{
|
|
|
label: '配置值',
|
|
|
prop: 'value',
|
|
|
span: 24,
|
|
|
formSlot: true,
|
|
|
rules: [{ max: 200, message: '配置值最长为200字符' }],
|
|
|
cell: true
|
|
|
},
|
|
|
{
|
|
|
label: '描述说明',
|
|
|
prop: 'desc',
|
|
|
type: 'input',
|
|
|
formSlot: true,
|
|
|
span: 24,
|
|
|
rules: [{ max: 200, message: '描述说明最长为200字符' }],
|
|
|
cell: true
|
|
|
}
|
|
|
// {
|
|
|
// label: "配置类型",
|
|
|
// prop: "unmodifiable",
|
|
|
// value: false,
|
|
|
// width: 80,
|
|
|
// dicData: [
|
|
|
// {
|
|
|
// label: "自定义配置",
|
|
|
// value: false
|
|
|
// },
|
|
|
// {
|
|
|
// label: "必须配置",
|
|
|
// value: true
|
|
|
// }
|
|
|
// ]
|
|
|
// },
|
|
|
]
|
|
|
};
|
|
|
export const addInstanceOption = {
|
|
|
...globalOption,
|
|
|
submitBtn: false,
|
|
|
emptyBtn: false,
|
|
|
column: [
|
|
|
{
|
|
|
label: '部署环境',
|
|
|
prop: 'environment',
|
|
|
type: 'select',
|
|
|
value: 'docker-env-prod',
|
|
|
// disabled: true,
|
|
|
dicData: [],
|
|
|
rules: [{ required: true, message: '请选择环境变量' }],
|
|
|
overHidden: true
|
|
|
},
|
|
|
{
|
|
|
label: '主机',
|
|
|
prop: 'deployEnvId',
|
|
|
type: 'select',
|
|
|
value: '',
|
|
|
props: {
|
|
|
label: 'name',
|
|
|
value: 'id',
|
|
|
desc: 'ip'
|
|
|
},
|
|
|
rules: [{ required: true, message: '请输入主机' }],
|
|
|
overHidden: true
|
|
|
},
|
|
|
{
|
|
|
label: 'CPU核数',
|
|
|
prop: 'cpuCount',
|
|
|
type: 'slider',
|
|
|
step: 1,
|
|
|
min: 1,
|
|
|
max: 12,
|
|
|
showStops: true,
|
|
|
marks: [1, 4, 8].reduce((obj, pre) => {
|
|
|
obj[pre] = pre + '核';
|
|
|
return obj;
|
|
|
}, {})
|
|
|
},
|
|
|
// {
|
|
|
// label: "容器名称",
|
|
|
// prop: "containerName",
|
|
|
// tip: "为空时自动生成",
|
|
|
// rules: [
|
|
|
// { min: 1, max: 63, message: "容器名称长度为1-63个字符" },
|
|
|
// patternTrim,
|
|
|
// ],
|
|
|
// },
|
|
|
{
|
|
|
label: '是否使用GPU',
|
|
|
prop: 'useGpu',
|
|
|
type: 'switch',
|
|
|
labelWidth: 100,
|
|
|
value: false,
|
|
|
dicData: [
|
|
|
{ label: '否', value: false },
|
|
|
{ label: '是', value: true }
|
|
|
]
|
|
|
},
|
|
|
{
|
|
|
label: '最大内存',
|
|
|
prop: 'memory',
|
|
|
type: 'slider',
|
|
|
step: 64,
|
|
|
min: 64,
|
|
|
max: 8192,
|
|
|
formSlot: true,
|
|
|
span: 24,
|
|
|
marks: {
|
|
|
64: '64MB',
|
|
|
1024: '1GB',
|
|
|
2048: '2GB',
|
|
|
4096: '4GB',
|
|
|
6144: '6GB'
|
|
|
},
|
|
|
showStops: true
|
|
|
},
|
|
|
// 网络模式 选择框
|
|
|
{
|
|
|
label: '网络模式',
|
|
|
prop: 'networkType',
|
|
|
type: 'select',
|
|
|
span: 6,
|
|
|
value: 'bridge',
|
|
|
dicData: [
|
|
|
{
|
|
|
label: '桥接模式',
|
|
|
value: 'bridge'
|
|
|
},
|
|
|
{
|
|
|
label: '主机模式',
|
|
|
value: 'host'
|
|
|
},
|
|
|
{
|
|
|
label: '禁用网络',
|
|
|
value: 'null'
|
|
|
}
|
|
|
],
|
|
|
rules: [{ required: true, message: '请选择网络模式' }],
|
|
|
overHidden: true
|
|
|
},
|
|
|
// 网卡
|
|
|
{
|
|
|
label: '网卡',
|
|
|
prop: 'networkMode',
|
|
|
type: 'select',
|
|
|
value: 'bridge',
|
|
|
span: 9,
|
|
|
overHidden: true,
|
|
|
rules: [{ required: true, message: '请选择网卡' }]
|
|
|
},
|
|
|
// ip
|
|
|
{
|
|
|
label: 'IP',
|
|
|
prop: 'ipv4Address',
|
|
|
type: 'input',
|
|
|
formSlot: true,
|
|
|
value: '',
|
|
|
overHidden: true,
|
|
|
span: 9
|
|
|
},
|
|
|
{
|
|
|
label: '端口映射',
|
|
|
prop: 'ports',
|
|
|
type: 'dynamic',
|
|
|
span: 24,
|
|
|
children: {
|
|
|
height: 120,
|
|
|
column: [
|
|
|
{
|
|
|
label: '主机端口',
|
|
|
prop: 'hostPort',
|
|
|
type: 'number',
|
|
|
value: '80',
|
|
|
max: 65535,
|
|
|
rules: [{ required: true, message: '请输入主机端口' }]
|
|
|
},
|
|
|
{
|
|
|
label: '容器端口',
|
|
|
prop: 'containerPort',
|
|
|
type: 'number',
|
|
|
max: 65535,
|
|
|
rules: [{ required: true, message: '请输入容器端口' }]
|
|
|
},
|
|
|
{
|
|
|
label: '备注',
|
|
|
prop: 'remake',
|
|
|
type: 'input',
|
|
|
value: ''
|
|
|
}
|
|
|
]
|
|
|
}
|
|
|
},
|
|
|
{
|
|
|
label: '目录挂载',
|
|
|
prop: 'volumes',
|
|
|
type: 'dynamic',
|
|
|
span: 24,
|
|
|
children: {
|
|
|
height: 170,
|
|
|
column: [
|
|
|
{
|
|
|
label: '主机路径',
|
|
|
prop: 'hostPath',
|
|
|
type: 'input',
|
|
|
value: '',
|
|
|
rules: [{ required: true, message: '请输入主机路径' }, patternTrim]
|
|
|
},
|
|
|
{
|
|
|
label: '容器路径',
|
|
|
prop: 'containerPath',
|
|
|
type: 'input',
|
|
|
value: '',
|
|
|
rules: [{ required: true, message: '请输入容器路径' }, patternTrim]
|
|
|
},
|
|
|
{
|
|
|
label: '备注',
|
|
|
prop: 'remake',
|
|
|
type: 'input'
|
|
|
}
|
|
|
]
|
|
|
}
|
|
|
},
|
|
|
{
|
|
|
// 设备挂载
|
|
|
label: '设备挂载',
|
|
|
prop: 'devices',
|
|
|
type: 'dynamic',
|
|
|
span: 24,
|
|
|
children: {
|
|
|
height: 120,
|
|
|
column: [
|
|
|
{
|
|
|
label: '主机路径',
|
|
|
prop: 'hostPath',
|
|
|
type: 'input',
|
|
|
value: '',
|
|
|
rules: [{ required: true, message: '请输入主机路径' }, patternTrim]
|
|
|
},
|
|
|
{
|
|
|
label: '容器路径',
|
|
|
prop: 'containerPath',
|
|
|
type: 'input',
|
|
|
value: '',
|
|
|
rules: [{ required: true, message: '请输入容器路径' }, patternTrim]
|
|
|
},
|
|
|
{
|
|
|
label: '权限',
|
|
|
prop: 'permissions',
|
|
|
type: 'select',
|
|
|
value: 'rwm',
|
|
|
dicData: [
|
|
|
{ value: 'rwm', label: 'rwm' },
|
|
|
{ value: 'rw', label: 'rw' },
|
|
|
{ value: 'r', label: 'r' }
|
|
|
],
|
|
|
rules: [{ required: true, message: '请输入权限' }]
|
|
|
},
|
|
|
{
|
|
|
label: '备注',
|
|
|
prop: 'remake',
|
|
|
type: 'input',
|
|
|
value: ''
|
|
|
}
|
|
|
]
|
|
|
}
|
|
|
},
|
|
|
// 重启策略
|
|
|
{
|
|
|
label: '重启策略',
|
|
|
prop: 'restartPolicy',
|
|
|
type: 'select',
|
|
|
span: 6,
|
|
|
display: false,
|
|
|
hide: true,
|
|
|
value: 'always',
|
|
|
dicData: [
|
|
|
{
|
|
|
label: '始终',
|
|
|
value: 'always'
|
|
|
},
|
|
|
{
|
|
|
label: '失败',
|
|
|
value: 'on-failure'
|
|
|
},
|
|
|
{
|
|
|
label: '无',
|
|
|
value: 'no'
|
|
|
}
|
|
|
],
|
|
|
overHidden: true
|
|
|
}
|
|
|
]
|
|
|
};
|