jcloud/dashboard/src2/objects/jsite_server.js

323 lines
8.3 KiB
JavaScript
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 { defineAsyncComponent, h } from 'vue';
import LucideServer from '~icons/lucide/server';
import { getTeam } from '../data/team';
import router from '../router';
import { icon } from '../utils/components';
import { duration, planTitle, userCurrency } from '../utils/format';
import { trialDays } from '../utils/site';
import { getJobsTab } from './common/jobs';
import { tagTab } from './common/tags';
export default {
pagetype: 'Jsite Server',
whitelistedMethods: {
reboot: 'reboot',
rename: 'rename',
dropServer: 'drop_server',
addTag: 'add_resource_tag',
removeTag: 'remove_resource_tag'
},
list: {
route: '/jsite-servers',
title: '服务器',
fields: [
'name',
'title',
'status',
'region',
'cpu',
'memory',
'disk_size',
'public_ip',
'end_date',
'bandwidth',
'team',
'instance_id',
'order_id',
'planid',
'image_id',
'system'
],
filterControls() {
return [
{
type: 'select',
label: '状态',
fieldname: 'status',
options: [
{ label: '', value: '' },
{ label: '待处理', value: 'Pending' },
{ label: '启动中', value: 'Starting' },
{ label: '运行中', value: 'Running' },
{ label: '停止中', value: 'Stopping' },
{ label: '已停止', value: 'Stopped' },
{ label: '重置中', value: 'Resetting' },
{ label: '升级中', value: 'Upgrading' },
{ label: '已禁用', value: 'Disabled' }
]
},
{
type: 'select',
label: '区域',
fieldname: 'region',
options: [
{ label: '', value: '' },
{ label: '华北1青岛', value: 'cn-qingdao' },
{ label: '华北2北京', value: 'cn-beijing' },
{ label: '华北3张家口', value: 'cn-zhangjiakou' },
{ label: '华北5呼和浩特', value: 'cn-huhehaote' },
{ label: '华东1杭州', value: 'cn-hangzhou' },
{ label: '华东2上海', value: 'cn-shanghai' },
{ label: '华南1深圳', value: 'cn-shenzhen' },
{ label: '华南2河源', value: 'cn-heyuan' },
{ label: '西南1成都', value: 'cn-chengdu' },
{ label: '华南3广州', value: 'cn-guangzhou' },
{ label: '华北6乌兰察布', value: 'cn-wulanchabu' },
{ label: '华东5南京', value: 'cn-nanjing' },
{ label: '华东6福州', value: 'cn-fuzhou' },
{ label: '华中1武汉', value: 'cn-wuhan-lr' },
{ label: '中国香港', value: 'cn-hongkong' },
{ label: '新加坡', value: 'ap-southeast-1' },
{ label: '马来西亚(吉隆坡)', value: 'ap-southeast-3' },
{ label: '印度尼西亚(雅加达)', value: 'ap-southeast-5' },
{ label: '日本(东京)', value: 'ap-northeast-1' },
{ label: '美国(硅谷)', value: 'us-west-1' },
{ label: '美国(弗吉尼亚)', value: 'us-east-1' },
{ label: '德国(法兰克福)', value: 'eu-central-1' },
{ label: '英国(伦敦)', value: 'eu-west-1' },
{ label: '菲律宾(马尼拉)', value: 'ap-southeast-6' },
{ label: '泰国(曼谷)', value: 'ap-southeast-7' },
{ label: '韩国(首尔)', value: 'ap-northeast-2' }
]
}
];
},
orderBy: 'creation desc',
searchField: 'title',
columns: [
{
label: '服务器',
fieldname: 'name',
width: 1.5,
class: 'font-medium',
format(value, row) {
return row.title || value;
}
},
{
label: '状态',
fieldname: 'status',
type: 'Badge',
width: 0.8,
format(value) {
const statusMap = {
'Pending': '待处理',
'Starting': '启动中',
'Running': '运行中',
'Stopping': '停止中',
'Stopped': '已停止',
'Resetting': '重置中',
'Upgrading': '升级中',
'Disabled': '已禁用'
};
return statusMap[value] || value;
}
},
{
label: '配置',
fieldname: 'cpu',
format(value, row) {
const cpu = row.cpu || '未知';
const memory = row.memory || '未知';
const disk = row.disk_size || '未知';
return `${cpu}核/${memory}GB/${disk}GB`;
}
},
{
label: '公网IP',
fieldname: 'public_ip',
format(value) {
return value || '-';
}
},
{
label: '区域',
fieldname: 'region',
format(value) {
if (!value) return '-';
// 区域ID到中文名称的映射表
const regionMap = {
'cn-qingdao': '华北1青岛',
'cn-beijing': '华北2北京',
'cn-zhangjiakou': '华北3张家口',
'cn-huhehaote': '华北5呼和浩特',
'cn-hangzhou': '华东1杭州',
'cn-shanghai': '华东2上海',
'cn-shenzhen': '华南1深圳',
'cn-heyuan': '华南2河源',
'cn-chengdu': '西南1成都',
'cn-guangzhou': '华南3广州',
'cn-wulanchabu': '华北6乌兰察布',
'cn-nanjing': '华东5南京',
'cn-fuzhou': '华东6福州',
'cn-wuhan-lr': '华中1武汉',
'cn-hongkong': '中国香港',
'ap-southeast-1': '新加坡',
'ap-southeast-3': '马来西亚(吉隆坡)',
'ap-southeast-5': '印度尼西亚(雅加达)',
'ap-northeast-1': '日本(东京)',
'us-west-1': '美国(硅谷)',
'us-east-1': '美国(弗吉尼亚)',
'eu-central-1': '德国(法兰克福)',
'eu-west-1': '英国(伦敦)',
'ap-southeast-6': '菲律宾(马尼拉)',
'ap-southeast-7': '泰国(曼谷)',
'ap-northeast-2': '韩国(首尔)'
};
// 如果是RegionId返回对应的中文名称如果已经是中文名称直接返回
return regionMap[value] || value;
}
},
{
label: '到期时间',
fieldname: 'end_date',
format(value) {
if (!value) return '-';
return value;
}
}
],
primaryAction({ listResource: jsiteServers }) {
return {
label: '新建服务器',
variant: 'solid',
slots: {
prefix: icon('plus')
},
onClick() {
router.push('/jsite-servers/new');
}
};
},
statusBadge({ documentResource: jsiteServer }) {
const status = jsiteServer.pg?.status;
const statusMap = {
'Pending': '待处理',
'Starting': '启动中',
'Running': '运行中',
'Stopping': '停止中',
'Stopped': '已停止',
'Resetting': '重置中',
'Upgrading': '升级中',
'Disabled': '已禁用'
};
return {
label: statusMap[status] || status
};
},
breadcrumbs({ documentResource: jsiteServer }) {
return [
{
label: '服务器',
route: '/jsite-servers'
},
{
label: jsiteServer.pg?.title || jsiteServer.pg?.name,
route: `/jsite-servers/${jsiteServer.pg?.name}`
}
];
},
actions({ documentResource: jsiteServer }) {
if (!jsiteServer) return [];
const actions = [
{
label: '重启',
icon: 'refresh-cw',
onClick() {
jsiteServer.reboot.submit();
},
condition: () => jsiteServer.pg?.status === 'Running'
},
{
label: '重命名',
icon: 'edit-3',
onClick() {
jsiteServer.rename.submit();
}
},
{
label: '删除',
icon: 'trash-2',
onClick() {
jsiteServer.dropServer.submit();
},
condition: () => jsiteServer.pg?.status !== 'Running'
}
];
return actions.filter(action => !action.condition || action.condition());
}
},
detail: {
route: '/jsite-servers/:name',
title: '服务器详细信息',
tabs: [
{
label: '概览',
route: '',
type: 'Component',
component: defineAsyncComponent(() => import('../components/JsiteServerOverview.vue')),
props: jsiteServer => {
return { server: jsiteServer.pg?.name };
}
}
],
fields: [
{
label: '基本信息',
fields: [
'title',
'status',
'region',
'instance_id',
'order_id'
]
},
{
label: '服务器配置',
fields: [
'cpu',
'memory',
'disk_size',
'bandwidth',
'public_ip',
'image_id',
'planid',
'system'
]
},
{
label: 'SSH连接',
fields: [
'ssh_user',
'ssh_port',
'password',
'key_pair_name',
'private_key'
]
},
{
label: '其他信息',
fields: [
'end_date',
'period'
]
}
],
actions({ documentResource: jsiteServer }) {
return [];
}
}
};